テクノロジー社内紹介Ethereumのアカウントを見張って、ERC20トークンの入金があったら何か物理的に動作させるという自動販売機的なデバイスを作成する場合の参考のため、プロトタイピングの様子をご紹介します。当社ではERC20の社内通貨FABコインを発行&運用して、コミュニティ通貨の運用ノウハウを蓄積し、またそれがコミュニティに与える影響について調査しています。FABコインについて詳しくはこちらをご覧ください。簡単に紹介すると、FABコインはビジネスチャット上でボットにコマンドを指定することで簡単にやり取りができる社内コミュニティ通貨です。チャット上で「ありがとう」など感謝の言葉をかけると、感謝された人に少額のコインが発行されプレゼントされるという「ピアボーナス」の機能を持っています。貯めたコインは何に使うのか?というと、社内の不用品フリーマーケットでものを売買したり、ちょっとした頼みごと(例:コンビニ行くならおにぎり買ってきて)をお願いするときにお礼として渡すなどです。このコインの使い所をもう少し増やしたいと思っていて、昨年より社内販売のドリンクを買えるように画策してきました。社内販売は担当者が利用者のリクエストに応じて、ネットの格安通販などで安く仕入れて、外部で買うよりもお得にドリンクを購入できるという福利厚生の一種です。このドリンクの一部をFABコインの販促予算の一部で買い上げ、希望者に社内通貨で販売するというスキームで社内通貨による販売を実現します。社内販売ドリンクは販売所に置かれた貯金箱にお金を入れるという無人販売所の形式で運営されています。これと同じことをトークンで運用するためには、何らかの電子的な貯金箱を用意する必要があります。FABコインはビジネスチャット上で送ることができる通貨なので、社内販売の貯金箱に該当するアカウントを作り、そこに送金することでこれを実現すると良いでしょう。「送金しました」というだけでは、面白みに欠けます。そこで、電磁的に記録された価値を物理的に手に取れるもの変換することを誇張して表現するため、FABコインで動作する自動販売機を作ることにしました。いえ、自動販売機の本物を用意するのは大変です。象徴的な自動販売機=券売機はどうでしょうか。券売機であれば蕎麦屋などで使ったことがある人も多く、コンセプトの表現に説明が不要です。コインをチャットで券売機に送ると、券売機がドリンクチケットを発行する。それをドリンクと交換する。一回紙を挟む必要があるところも、なかなか日本的な趣がありますね。券売機について機能のレベルで考えてみましょう。券売機はEthereumノードであって、とあるアカウントへの送金を見張り、入金があればチケットを発行する。シンプルで、プログラム的にも難しいところはありません。Ethereumのノードプログラムにはライトモード(ウォレット向きの軽量動作モード)がありますので、ただアカウントを見張るだけなら、非力なコンピュータでも動作が可能です。そこで今回はこの様な用途に向いた小型で安い学習用コンピュータ「RaspberryPi」と安価なレシートプリンター(サーマルプリンタ)でこれをプロトタイピングしてみました。プロトタイプの概要スケッチとしては次の様な形になります。難しくはないと書きましたが、今回のプロトタイピングをするには3つ考えなくてはならないことがあります。上記のスケッチで大体の雰囲気は掴んでいただけると思いますので、以下ではこれらの各課題部分の詳細を紹介します。RaspberryPiでEthereumノードを動かすRaspberryPiでサーマルプリンターを動かす券売機のプログラムを作るおっとその前に、セットアップについてご案内しておきます。B+)はキットで11,000円程度、サーマルプリンタは5,000円程度で、Amazon.comで手に入りました。Liteをインストールしました。インストールは難しいところはありません。次の様なページが参考になります。https://raspida.com/install-rasbian-balenaetcherアプリケーションはjavascript(Node.js)で書きます。そのためNode.jsを設定します。インストールについて難しいところはありませんね。次の様なページが参考になります。https://qiita.com/interceptor128/items/29abb0466ca994bc0e8dRaspberryPiでEthereumノード(geth)を動かすこれは難しいところがありません。https://geth.ethereum.org/downloads/こちらから使用しているコンピュータのアーキテクチャにあったものをDLして解凍して、適当な場所に配置するだけです。https://gethstore.blob.core.windows.net/builds/geth-linux-arm7-1.9.9-01744997.tar.gzFABコインはテストネットのRinkeby上にデプロイされています。ネットワークをRinkebyに、Syncmodeをlightにして起動させます。今回、Ethereumの適当なアドレスへの送金を見張るだけになりますので特定のERC20のTransferイベントを監視するだけで良いです。そのためEthereumノードはアプリケーションに対してwebsocketのAPIだけ提供すれば良いでしょう。その様な設定でgethを起動します。--ws動いています。Ethereumノードはずっと動いていて良いので、supervisorで常時起動に設定しておきます。今回の設定では、CPU使用率は35%ぐらいです。RaspberryPiでサーマルプリンターを動かす「これが難しいのではないか...」と当初個人的には思っていました。意外にも難しくありませんでした。Amazonで手に入る安価なサーマルプリンタは大体ESC/POSというエプソンのコマンドセットで動作する様です。NPMで探してみたらESCPOSというライブラリがありましたので、これを使うことにしました。666して試すと印刷できました。world").close();});このライブラリ自体は割と癖があり調べるのが億劫でした。「動けばOK」の精神であまり深追いせずに使っていきましょう。デバイスは今後USBを差し替えても大丈夫な様にudevルールを設定しておきます。--reload-rules券売機のプログラムを作る準備が整いました、プログラムを書いていきます。難しいところはありません。諸設定をした後、fabcoin.events.Transferでイベントハンドラを登録して、イベントごとに内容をプリントするいうだけです。);})();動作の様子は次の通りです。まとめもうすこし色々あるかと思いましたが、すんなりとプロトタイプを作ることができました。今回はアウトプットがプリンターですが、オートロックに繋いで入室を管理したり、リレーで通電をコントロールすることで様々なデバイスでトークン支払い対応できます。こんなものはどう?というアイデアがありましたら是非教えてください。プロトタイピングのため、解説やコードはかなり荒いです。技術的なところで、詳しく知りたいところなどありましたら質問お寄せください。ファブリカコミュニケーションズで働いてみませんか?あったらいいな、をカタチに。人々を幸せにする革新的なサービスを、私たちと一緒に創っていくメンバーを募集しています。ファブリカコミュニケーションズの社員は「全員がクリエイター」。アイデアの発信に社歴や部署の垣根はありません。“自分から発信できる人に、どんどんチャンスが与えられる“そんな環境で活躍してみませんか?ご興味のある方は、以下の採用ページをご覧ください。デザイン/UXPDCAが通用しない局面に。マーケティング/グロース話題のブロックチェーンを使った社内通貨を紹介。