ByteballのDBをDDLから資料化してみた
Byteballの集金ページ作成ツールをつくってみた
Byteballには普段使いできるツールがほしい
Byteballはマイクロペイメントを主要な用途に挙げていますが、周りを見回した時に、どんな使い方があるでしょうか?
- お店での少額の買い物
- ネットでの少額の買い物
- 投げ銭
- 個人レベルの募金活動
- 飲み会などでの飲食費の割り勘
現金と比較すると、これらを行うには何らかの形でアドレスの伝達が必要であるのが面倒です。そして、エンドユーザーがQRコードやアドレスを利用するには、基本的にはウォレットを開いて行う必要があり、ひと手間かかります。
エンドユーザーがアドレスをより簡単に共有するためのツール
一つのアプローチとして、QRコードでのアドレス伝達の利便性を高める、もしくは、Webでのやり取りを簡便化するツールを作成してみました。
概要
入力フォームに、タイトルや金額メッセージを入力し、ボタンを押すと
ユーザーはQRコードで支払いを開くか、ボタンを押してByteball Walletを開いて送信できます。
ボタンを押した場合、アプリが起動し、 アドレスと指定の金額がセットされた状況で開きますので、あとは送金するだけです。
機能のポイント
入力内容はURLのクエリーとして残っていますので ブラウザーの URLをコピーしておけば、何度でも再利用できます。
もしくは、リンクをメール等で送るような使い方も便利です文字数が多い場合などでは、とても長いURLになりますので、メールなどで送る場合はgoogle shortnerのようなURL短縮サービスを使って短縮すると、軽い見た目で配布できます
入力Formを使用せずに、URLを直接生成して、画面にすることができます。 たとえば、ブラウザーのURLに下記を張り付けてみて実行してみてください
http://bbtools.kakne.com/collection-gen/v2/collection.html?title=こんな風に
- title タイトル
- description タイトル下の説明
- address 送金先のByteballアドレス
- amount Byteball設定金額(MB)
注意:金額を設定すると、その金額でしか送信できません。自由に設定できるようにするにはブランクにしてください。また、0は設定できません - message 追加のメッセージ(金額の下)
QRには金額を情報として入力し、Walletに自動設定することができますが、金額がない場合、アドレスのみの情報となりますので、Byteball専用のQRコード作成ツールのような使い方もできます。
こんな時に
- Byteballの投げ銭ページを作りたいけど、QRコードの生成方法がわからない。Walletアプリを起動するLinkの書き方がわからない
- 集金のためのQRコードを作りたいけど、そのために手間をかけたくない
- アドレスの通知と集金内容の通知を一緒に行いたい
- ウェブの商品ごとに簡単にQRコードを生成したい
- 定額の投げ銭フォーム簡単に作りたい
github
- 最新版はこちらのREADME.mdにあるリンクをご利用ください
制限事項
免責条項
- このWebアプリケーションの利用、内容変更、中断、終了によって生じたいかなる損害についても、一切の責任を負えません。ユーザーの責任の範疇でご利用ください。
flight-delays-insuranceの動作確認
基本的なセットアップ方法はbyteball-faucetと同じですが、追加で必要な作業があります。
このサンプルでは、botがフライトの遅延保険を販売するため
保険支払資金をあらかじめプール(入金)しておかなければなりません。
やりかたについて、ちょっと考えないといけないと思いますのでご紹介します。
セットアップ
byteball-faucetと同等のセットアップは完了しているものとします
sqlファイルの名前や、実行するJavaScriptのファイル名などは異なりますので、読み替えてください。conf.jsにデバイスアドレスを追加
exports.control_addresses = ['0YU6Y722E7DSTNNOSKYEZ27AKZG45NNXG'] exports.payout_address = '0YU6Y722E7DSTNNOSKYEZ27AKZG45NNXG';
このアドレスは、入金などのアドレスと異なりますので注意してください。
上記に設定したデバイスアドレスのデバイスに対してのみ追加のコマンドが用意されます
デバイスアドレスは「SETTINGS」にある、「DEVICE ADDRESS」が該当します
- flight-delays-insuranceを起動して、chatbotで入金を行います。
まず、addressと入力すると、アドレスを出してくれますので、そこに送金します。
なお、入金とは関係ない、保険発行手続きのメッセージも一緒に出てしまいますが、無視してください。
balanceで現状の残高が表示されます。confirmされていれば入金完了です
byteball-faucet 蛇口サンプルを動作確認
byteball-faucet は下記ブログ記事の手順にある無料でテスト用のbyteを配るbotの実装です。
faucet=蛇口なのは、テスト用のbyteを吐き出してくれるからです。
こんなパトロンほしい。
最も基本的なbotとして、bot実装上の構造理解に役に立ちます。
Byteballのbotは仕組みがシンプルでよいね。
主要ファイル
check_daemon.js
conf.js
crontab.txt
faucet.sql
split_bb_outputs.js
split_bytes.js
split_indivisible_asset_outputs.js
start.js
ソースを確認してみる
start.js
メインのプログラムです
conf.js
設定ファイル
faucet.sql
MySQL互換と思われるsqliteのsqlファイル
このシステムでは支払い記録をDAGとは別にDBにも行っている
split_bb_outputs.js
split_bytes.js
split_indivisible_asset_outputs.js
ロードされていない。詳細未確認
crontab.txt
cronでcheck_daemon.jsを定期的に動かしています
*/20 * * * * cd byteball-faucet; node check_daemon.js 1>>~/.config/byteball-faucet/check_daemon.log 2>>~/.config/byteball-faucet/check_daemon.err
check_daemon.js
ソースを追っかけると、ファイル名通りnodeのプロセスについて死活監視をしているみたいです。
var check_daemon = require('byteballcore/check_daemon.js'); check_daemon.checkDaemonAndNotify('node start.js');
セットアップ
npm install
例によってビルドは成功テストネットへ変更
node_modules/byteballcore/constants.jsの次の個所を変更
前 | 後 |
---|---|
exports.version = '1.0' | exports.version = '1.0t' |
exports.alt = '1' | exports.alt = '2' |
- conf.js 編集
hubをテスト系に変更。
ライトで起動したい。
最後にメール関係の設定が必要みたいですが、実際には送信されないようです。(送信部位がコメントアウトされています)
exports.hub = 'byteball.org/bb-test'; exports.bLight = true; exports.admin_email='admin@eample.com' exports.from_email='admin@eample.com'
node start.jsで起動
例によってデバイス名と秘密鍵のパスワードを設定
次にいろいろ生成されます C:\Users[USERNAME]\AppData\Local/byteball-faucet/Ctrl + Cでいったん終了しfaucet.sqlを使用して、次のDBファイル内にテーブルを作成 C:\Users[USERNAME]\AppData\Local/byteball-faucet/byteball.sqlite
node start.jsで起動
テストウォレットへbotをペアリング
ペアリングコードはログの次の行に出ています====== my pairing code: ApvXpxFI6GzXKVYebwi25mSnjkIc26ErW2LcyZKmJUZk@byteball.org/bb#0000
動作確認
うごいたー!。botのアカウントにbyte入れてないから、金がないと怒られますが。
headless-byteballを入れてテストネットへつなげる
headless-byteballリポジトリのREADME.mdの手順(2018/01/02)+αをやってみました
環境
windows 10
node V6.11.0
Cmder (ターミナルエミュレーター)
手順
任意のフォルダにリポジトリクローン
git clone https://github.com/byteball/headless-byteball
nodeモジュール導入
コンパイルのプロセスで何かエラーが出るかと思ったが無事に通過
前提SDKがあったのか不明
npm install
テストネットへ変更
node_modules/byteballcore/constants.jsの次の個所を変更
前 | 後 |
---|---|
exports.version = '1.0' | exports.version = '1.0t' |
exports.alt = '1' | exports.alt = '2' |
初回設定
初回のみ秘密鍵を作成するため、デバイス名と秘密鍵のパスワードを入力
node start.js
…
Please name this device [Bata-XDES]:
Device name saved to C:\Users\[USERNAME]\AppData\Local/headless-byteball/conf.json, you can edit it later if you like.
keys createdor your private keys: password
will archive if exists from unit N8QaXI9yg2zLxPMphfN9JcqfddZ4yHPkoGMbbGZsAa0=
…
構成ファイルを確認
C:\Users\[USERNAME]\AppData\Local\headless-byteball
以下にいろいろできる
drwxr-xr-x 1 Shin 197121 0 Jan 1 23:45 ./
drwxr-xr-x 1 Shin 197121 0 Jan 1 23:40 ../
-rw-r--r-- 1 Shin 197121 403456 Jan 2 00:01 byteball.sqlite
-rw-r--r-- 1 Shin 197121 32768 Jan 1 23:40 byteball.sqlite-shm
-rw-r--r-- 1 Shin 197121 1049080 Jan 2 00:01 byteball.sqlite-wal
-rw-r--r-- 1 Shin 197121 34 Jan 1 23:42 conf.json
-rw-r--r-- 1 Shin 197121 234 Jan 1 23:48 keys.json
-rw-r--r-- 1 Shin 197121 883408 Jan 2 00:01 log.txt
テストネットへ接続
log.txtを見ると正常にテストネットと交信しているようだったので、 Ctrl-c,で停止
Byteballの開発用テストウォレットを入れる
次から、テストウォレットを導入してみます
Byteballウォレットでdata登録できるかな?
Byteballのホワイトペーパーもまだ読み切っていませんが、
Byteballの基盤は単純なデータ保存に使えるとのこと。
いじってみるにはheadlessノードを立てなきゃいけないのかなと思ったら
ウォレットを見たら、簡単に実験できるみたいじゃないですか!
データを「Data」でkey-valueとして送信
keyとvalueに、keyとvalueという文字を入れて送信してみましたよ。
分かりにくいことしてしまった。
exploreで見たら、こんな感じに
おー、ちゃんと保存されとる。
料金は607バイト。1G=7万円換算で約0.05円(切り上げ)
こんな無駄なデータが、ずっと保存されるかと思うとww
テスト用のネットを使えって突っ込みはなしで、まだ色々整ってないのですよ
Byteballに対する知識も開発環境も
データを「Data into datafeed」でkey-valueとして送信
Data into datafeedという、似たような送信先があったのでこっちも試してみた。
datafeedに手動で値をPOSTしてoracleにするとあるけど、具体的にどう保存されるのかなと。
exploreで見たら、dataとあまり変わらない
変化がないとつまらん
サイズが565byteで少し小さい
こうなってくると、実際のデータ構造とかがみたくなる