NEMのトランザクションを発行してみよう

NEMのトランザクションを発行してみよう:

今回はNEMのトランザクションを発行してみます。

トランザクション発行で一番難しいのは何でしょうか?

署名やブラウザ依存を吸収するAPIコールなどは、既存のライブラリが充実しているので実は簡単です。もっとも難しいのはNEMのノードに伝えたいデータをNEMのわかる言葉に詰め込みなおすシリアライズという作業です。こればかりは外部ライブラリを利用することはできず、NEMのコミュニティが公開するライブラリを使用するしかないのです。

そのライブラリがまたその他のライブラリに依存して。。。とかなるとそのプラットフォームへの敷居はぐんと上がります。私は基本的にシリアライズする部分だけを提供するライブラリがあってもいいのではないかと思います。将来的に公開予定のxembook-sdkもそういったコンセプトで開発を進めています。

では、NEMに伝えたいデータセットをどうやって作り上げていくのかを見てみましょう。

transfer
let data = { 
    'type': 0x101, 
    'version': 0x68000000 | 1, 
    'signer': SENDER_PUBLIC_KEY, 
    'timeStamp': timeStamp, 
    'deadline': timeStamp + due * 60 
}; 
 
let custom = { 
    'recipient': RECIPIENT_ADDRESS, 
    'amount': amount, 
    'fee': totalFee, 
    'message': message, 
    'mosaics': mosaics 
}; 
 
let entity = $.extend(data, custom); 
 
let result = serializeTransaction(entity); 
let kp = KeyPair.create(SENDER_PRIVATE_KEY); 
let signature = kp.sign(result); 
let obj = {'data':ua2hex(result), 'signature':signature.toString()}; 
 
return $.ajax({ 
    url: NEM_ENDPOINT  , 
    type: 'POST', 
    contentType:'application/json', 
    data: JSON.stringify(obj)  
}); 
data と custom というデータオブジェクトを結合して entity オブジェクトを作成しています。dataはどんなトランザクションにも共通して必要な基本情報、customが発生させるトランザクションによって変化するデータです。今回は単純な送金トランザクション(0x101)を作成します。

次に、entityオブジェクトをシリアライズ化しresultという配列に詰め込みます。

ここがNEM独自の仕様になります。NEMではどんな言語でも開発できる、と言いますが様子するにこのシリアライズという作業によって言語に依存したデータフォーマットを共通フォーマットに書き直しているのです。

一方で送信者の秘密鍵からキーペアを作成し先ほどのresultを署名します。署名についてはed25519に対応しているライブラリを探す必要があります。今回はnacl-fast.jsというライブラリを少し修正して使用しました。

最後にjsonオブジェクトとしてresultを16進数に変換したものと署名を詰め込んでNEMのノードにPOSTします。今回はjQueryを利用しました。

これでNEMのノードが理解できるデータとして取り扱ってもらうことができます。

結果としてSUCCESSが帰って来ればトランザクションのプッシュに成功です。どんなな額の送金でも行えることになります。

プログラミングに慣れ親しんだ人であればそれほど難しくないということが分かっていただけたでしょうか?ブロックチェーンはすごくハイレベルな人じゃないと使いこなせないような印象がありますが、とくにNEMは誰にでも使ってもらえるように非常に洗練された設計により作り上げられています。

ぜひ、みなさんの使っているシステムにも「+ブロックチェーン」してみてください。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)