Byteball開発者向け情報wiki - コード解説(headless-byteball start.js)(作成中)
node.jsもしくはbyteballの開発の初心者にはコードを見ただけではどのように動くのかや、どうやって実装すれば良いかがわかりにくいため、
代表的なコードのheadless-byteballのstart.jsについて調査した記録をこのページに残します。
独自で調査した記録のため、記載内容に間違いがある場合がありますので気をつけてご覧ください。
それでも一目では理解しにくい内容かと思いますが、開発の参考資料としてお使いいただければと思います。

起動からの流れの概要

初回の起動時

コンフィグに値が設定されている場合、DBにペアリング用シークレットキーにその値がINSERTされます。
そのあとsetTimeout(228行目)が動作します。
setTimeoutでは、まずreadKeys(36行)の中でkeys.jsonが読み込めるかどうか(=ウォレットが作成されているかどうか)を確認し
エラーでファイルを読み込めない場合は、ターミナル上でデバイス名とパスワードを入力させた上でプラーベートキーを生成。
writeKeys(108行)内でkeys.jsonに書き込んだ後、createWallet(122行)でウォレットの作成を行います。
次にsetTimeoutに戻って、readSingleWalletで今作成したウォレットの読み込みを行います。
最後に266行で1000ミリ秒後にreplaceConsoleLogを呼び出してターミナル上にログが流れ続けないように処理します。
以降、eventBus.onで設定されたイベントを待ち続けます。
具体的には他のデバイスとのペアリング完了イベントや、ペアリング済みのデバイスからテキストが送られてきた時に発生するイベントなどがあります。

2回目以降の起動時

setTimeout(228行目)が動作しreadkeysに移動しますが、2回目以降はkeys.jsonが読み込まれるため、84行に移動してまずパスワードを聞かれます。
パスワードが正しければkeys.jsonからキーの情報を取り出して、ウォレットの読み込みを行います。
以降は初回の起動と同じ流れで、イベントを待ち続けます。

重要な箇所

・(533行)eventBus.on('text', function(from_address, text)→チャットからのコマンドを受け取るイベント
・上記関数内で呼び出されるhandleText(430行)→受け取ったコマンドをコマンド別に処理する関数。独自のコマンドを実装する場合はここに追記。
です。
つまりコマンド毎に決まった動作をさせるだけの単純なチャットボットを作るならheadless-byteballを改造するだけで実装できてしまうということです。

使用されている関数と解説

replaceConsoleLog

readKeys

writeKeys

createWallet(作成中)

isControlAddress(作成中)

readSingleAddress(作成中)

prepareBalanceText(作成中)

readSingleWallet(作成中)

determineIfWalletExists(作成中)

signWithLocalPrivateKey(作成中)

setTimeout

handlePairing

sendPaymentUsingOutputs(作成中)

sendAllBytes(作成中)

sendAllBytesFromAddress(作成中)

sendAssetFromAddress(作成中)

issueChangeAddressAndSendPayment(作成中)

issueOrSelectNextMainAddress(作成中)

issueNextMainAddress(作成中)

issueOrSelectStaticChangeAddress(作成中)

handleText

analyzePayParams

setupChatEventHandlers