技術発掘

財宝を見つけるべく、きままに技術の掘り起こしを行っていきます

Byteballの集金ページ作成ツールをつくってみた

Byteballには普段使いできるツールがほしい

Byteballはマイクロペイメントを主要な用途に挙げていますが、周りを見回した時に、どんな使い方があるでしょうか?

  • お店での少額の買い物
  • ネットでの少額の買い物
  • 投げ銭
  • 個人レベルの募金活動
  • 飲み会などでの飲食費の割り勘

現金と比較すると、これらを行うには何らかの形でアドレスの伝達が必要であるのが面倒です。そして、エンドユーザーがQRコードやアドレスを利用するには、基本的にはウォレットを開いて行う必要があり、ひと手間かかります。

エンドユーザーがアドレスをより簡単に共有するためのツール

一つのアプローチとして、QRコードでのアドレス伝達の利便性を高める、もしくは、Webでのやり取りを簡便化するツールを作成してみました。

Byteball Collection Form

概要

入力フォームに、タイトルや金額メッセージを入力し、ボタンを押すと

f:id:kakne:20180114160125p:plain

ユーザーはQRコードで支払いを開くか、ボタンを押してByteball Walletを開いて送信できます。

f:id:kakne:20180114160137p:plain

ボタンを押した場合、アプリが起動し、 アドレスと指定の金額がセットされた状況で開きますので、あとは送金するだけです。 f:id:kakne:20180114165312p:plain

機能のポイント

  • 入力内容はURLのクエリーとして残っていますので ブラウザー URLをコピーしておけば、何度でも再利用できます。
    もしくは、リンクをメール等で送るような使い方も便利です f:id:kakne:20180114160826p:plain

    作成後のリンクの例

    文字数が多い場合などでは、とても長いURLになりますので、メールなどで送る場合はgoogle shortnerのようなURL短縮サービスを使って短縮すると、軽い見た目で配布できます

    Google URL Shortener

  • 入力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

github.com

  • 最新版はこちらのREADME.mdにあるリンクをご利用ください

制限事項

  • Chromeでしか動作確認していません
  • 入力可能な文字には最大長があります(ブラウザー依存です)
  • ウォレット V2.1.0での動作確認です

免責条項

  • このWebアプリケーションの利用、内容変更、中断、終了によって生じたいかなる損害についても、一切の責任を負えません。ユーザーの責任の範疇でご利用ください。

flight-delays-insuranceの動作確認

基本的なセットアップ方法はbyteball-faucetと同じですが、追加で必要な作業があります。

github.com tech.kakne.com

このサンプルでは、botがフライトの遅延保険を販売するため
保険支払資金をあらかじめプール(入金)しておかなければなりません。

やりかたについて、ちょっと考えないといけないと思いますのでご紹介します。

セットアップ

  • byteball-faucetと同等のセットアップは完了しているものとします
    sqlファイルの名前や、実行するJavaScriptのファイル名などは異なりますので、読み替えてください。

  • conf.jsにデバイスアドレスを追加

    exports.control_addresses = ['0YU6Y722E7DSTNNOSKYEZ27AKZG45NNXG']
    exports.payout_address = '0YU6Y722E7DSTNNOSKYEZ27AKZG45NNXG';
    

このアドレスは、入金などのアドレスと異なりますので注意してください。
上記に設定したデバイスアドレスのデバイスに対してのみ追加のコマンドが用意されます

バイスアドレスは「SETTINGS」にある、「DEVICE ADDRESS」が該当します

f:id:kakne:20180104233059p:plain f:id:kakne:20180104233117p:plain

  • flight-delays-insuranceを起動して、chatbotで入金を行います。

まず、addressと入力すると、アドレスを出してくれますので、そこに送金します。
なお、入金とは関係ない、保険発行手続きのメッセージも一緒に出てしまいますが、無視してください。
f:id:kakne:20180104233452p:plain

balanceで現状の残高が表示されます。confirmされていれば入金完了です
f:id:kakne:20180104233651p:plain

byteball-faucet 蛇口サンプルを動作確認

byteball-faucet は下記ブログ記事の手順にある無料でテスト用のbyteを配るbotの実装です。
faucet=蛇口なのは、テスト用のbyteを吐き出してくれるからです。 こんなパトロンほしい。
最も基本的なbotとして、bot実装上の構造理解に役に立ちます。 Byteballのbotは仕組みがシンプルでよいね。

github.com

tech.kakne.com

主要ファイル

 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互換と思われるsqlitesqlファイル
このシステムでは支払い記録を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入れてないから、金がないと怒られますが。
    f:id:kakne:20180102142038p:plain

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.org

  1. 上記からダウンロード

  2. インストーラーで導入
    注意!:基本的に本番用のウォレットとは別にインストールされますが、byteが入っているウォレットと同じマシンに導入するのはなるべく避け、それでも同居させる場合、本番ウォレットのバックアップを取得しておくことをお勧めします。何か問題が発生しても当方では責任を負えません。

  3. ダウンロードページ中の次のリンクをクリック
    f:id:kakne:20180102005852p:plain

  4. テスト用のbyteをChatBotとお話しして入手します f:id:kakne:20180102010059p:plain

Byteballウォレットでdata登録できるかな?

Byteballのホワイトペーパーもまだ読み切っていませんが、
Byteballの基盤は単純なデータ保存に使えるとのこと。

いじってみるにはheadlessノードを立てなきゃいけないのかなと思ったら
ウォレットを見たら、簡単に実験できるみたいじゃないですか!

データを「Data」でkey-valueとして送信

keyとvalueに、keyとvalueという文字を入れて送信してみましたよ。
分かりにくいことしてしまった。
f:id:kakne:20171231004214p:plain

exploreで見たら、こんな感じに

おー、ちゃんと保存されとる。
料金は607バイト。1G=7万円換算で約0.05円(切り上げ)
こんな無駄なデータが、ずっと保存されるかと思うとww

テスト用のネットを使えって突っ込みはなしで、まだ色々整ってないのですよ
Byteballに対する知識も開発環境も
f:id:kakne:20171231004347p:plain

データを「Data into datafeed」でkey-valueとして送信

Data into datafeedという、似たような送信先があったのでこっちも試してみた。
datafeedに手動で値をPOSTしてoracleにするとあるけど、具体的にどう保存されるのかなと。
f:id:kakne:20171231005608p:plain

exploreで見たら、dataとあまり変わらない

変化がないとつまらん
サイズが565byteで少し小さい
こうなってくると、実際のデータ構造とかがみたくなる
f:id:kakne:20171231010014p:plain

免責事項:当サイトで提供される情報の正確性・妥当性、また、本サイトの情報に基づいて作業を行われた場合の結果について一切の保証は致しかねます。閲覧者の責任の範疇でご参照くださいますようお願いいたします。
Logo made with DesignEvo