Help us understand the problem. What is going on with this article?

スマートコントラクトの基礎となる着金時のトリガープログラムを仮想通貨NEMで実装する。

More than 1 year has passed since last update.

スマートコントラクト、最近いろいろなところで聞くようになった話題ですが、その定義は人それぞれです。

それら共通に感じ取れることは、送金、着金の管理が煩わしく、お金を発生させる方がコストのかかってしまうような契約を技術的に解決してしまおうという動きです。
IoTなどがもう少し普及すれば、ロボット同士が労働の対価として仮想通貨をやりとりすることも出てくるでしょう。そういうと、もう少し先の話に聞こえるかもしれません。
でも、インターネット上を見渡せば、Web上ではすでにたくさんのロボットが活躍しています。

その実現のためにもどうしても必要な仕組みが、アカウントへの着金を確認したらサービスを開始するためのシステムです。

今回は仮想通貨NEMの場合に、どうやって着金を確認するかの方法を説明します。
といっても、今回も簡単です。

NEMにはとても優れたAPIが各ノードに標準実装されていて、WebSocket通信も可能です。
本来であれば、仮想通貨ネットワーク上にUnconfirm状態で乗ったトランザクションに対してポーリングで状態監視し、Confirmされたタイミングでサービスを開始する、そういった監視アルゴリズムが必要です。ところがWebSocekt通信を使えば、プロトコルの実装方法にもよりますが、Confirmされた時だけトリガーを発行する、といったプログラムが簡単に書けてしまいます。

以下にサンプルプログラムを提示しておきます。

trigger
var nem = require("nem-sdk").default;

var NODES = Array(
"http://alice2.nem.ninja",
"http://alice3.nem.ninja",
"http://alice4.nem.ninja",
"http://alice5.nem.ninja",
"http://alice6.nem.ninja",
"http://alice7.nem.ninja"
);

var node_url;
function getEndpoint(){

        return NODES[Math.floor(Math.random() * NODES.length)];
}
node_url = getEndpoint();
var endpoint = nem.model.objects.create("endpoint")(node_url, nem.model.nodes.websocketPort);

// Address to subscribe
var address = "NBZNQL2JDWTGUAW237PXV4SSXSPORY43GUSWGSB7";
var connector = nem.com.websockets.connector.create(endpoint, address);
connect(connector);

function connect(connector){
  return connector.connect().then(function() {

      nem.com.websockets.subscribe.account.transactions.confirmed(connector, function(res) {
              console.log("confirmed");
              //以下は送金時にメッセージを入れていないとエラーになります。
              var message = JSON.parse(nem.utils.format.hexToUtf8(res.transaction.message.payload));
              console.log(message);
      }
  }
}

nodejsで書いています。ライブラリはNEM-sdkを利用しています。
とりあえず、指定アドレスに着金した時にメッセージ内容をコンソールに出力するだけのサンプルプログラムです。

var message = JSON.parse(nem.utils.format.hexToUtf8(res.transaction.message.payload));
console.log(message);

この部分を書き換えれば、着金した時にツイッターで天気予報をつぶやいたり、金魚にエサをやったりするプログラムも簡単に作れそうですね。

どうですか?もうNEMでしか課金プログラム書く気しなくなってきませんか?
また思いついたらいろいろアップしていきます!

それでは!

nem_takanobu
ブロックチェーンはNEM、機械学習はPyTorchが好きです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした