blockchain ethereum Go

tiperc20: Slack上でERC20トークンを送りあってコミュニケーション

blockchain ethereum Go

こんにちは、あんちぽちゃんです。ビールを飲みながらコードを書くと、大変はかどります(そのあたりについて「酒を飲みながらコードを書く」というLTをしたことがあったりします)。

さて、先日の記事「Ropstenのテストネット上でERC20トークンを作成・送付してみる」では、ERC20トークンをテストネット上にデプロイ、送付してみました。その際は、コンソールから手動で送付するというプリミティブな手段を採ったのですが、どうせならUIもほしくなってきます。そこで、tiperc20というソフトウェアを作ったので、その紹介をします。

この記事はEthereum Advent Calendar 2017の9日目の記事です。

ERC20トークンとは

その前に、少しERC20トークンについて説明します。

Ethereumのスマートコントラクトによってトークンを実現する際の標準仕様としてERC20というものがあるということについて、先日の記事でも少し触れました。コントラクトのインタフェイスがこの仕様に沿っていさえすれば、使う側は常に同じように扱えます。そのことで、トークンごとのインタフェイスの差異を考えずに 済むため、トークンの取引をスムーズに行えるようになります。

昨今のICOブームにより、各所で様々なトークンが発行されていますが、それらは通常、このERC20に則ったトークンとして発行されます。また、先日の記事で紹介したHiEterTokenも、ERC20の仕様を満たすトークンとして作成されています。ERC20トークンであるという意味では、ICOにより発行されたトークンと技術的にはなんら変わるところがありません(HiEtherTokenはまだメインネットにデプロイされていないので、その意味では違いはありますが)。もちろん、経済的にどのような価値を持ち得るかは異なります。

tiperc20とは

Bitcoinを始めとする仮想通貨を、純粋に決済のためということではなく、なんらかの評価を示すために送り合う仕組みが、これまでもたくさん提案されてきました。今回作ったtiperc20が直接にインスパイアされた仕組みを挙げると、tipmonaと、「OKIMOCHIを試験導入してみました+経過報告」という記事でも紹介したOKIMOCHIがあります。

tipmonaは、Twitterを通じてモナコインを送り合うことができるサービスです。モナコインホルダーは、相手のTwitterアカウントさえ知っていれば、モナコインを送ることができます。送られた相手は、そのモナコインをまた他の誰かに送ってもよいですし、出金して取引所などで日本円にかえてしまってもよいでしょう。

OKIMOCHIは、あらかじめデポジットしておいたBitcoinを、Slack内で特定のリアクションがつけられたユーザに対して配布する仕組みです。詳しくは先述の記事をご覧いただきたいのですが、ある組織・コミュニティ内のコミュニケーションを円滑化する際に、ひとつの方法として便利に使えるツールです。

tiperc20は、上記2つからインスパイアされ、以下のような仕組みにしました。

  1. 仮想通貨ではなく、Ethereum上のERC20トークンを送付するようにした
  2. tipmonaのように、コマンドを解釈して動くボットとしての働きを持たせるようにした(ただし、いまのところまだまだコマンドの実装がおいついていないのですが……)
  3. OKIMOCIのように、組織・コミュニティの円滑化のために、Slackチーム上で動くものにした

また、ERC20トークンを送付の対象とすることで、この記事では(特に経済的価値のない)HiEtherTokenを送る例を示しますが、ERC20トークンでありさえすればなんでも送ることができますので、対象のトークンが経済的価値を持つものであれば、実質的に仮想通貨を送付しているのと同じ仕組みとしても使えます。

tiperc20でトークンを送付する

tiperc20でトークンを送付するには、2つの方法があります。

  1. Slack上でコマンドを送る: @tiperc20 tip @target_user_name
  2. トークン送付のトリガとして設定されたリアクションを、メッセージに対してつける

ここでは、@sot528さんにトークンが付与された実際の状況を、2.の例をスクリーンショット上で示すことで、使い方を説明します。

図中の①について。まず、tiperc20によるトークンの送付を受けるには、Ethereumのなんらかのネットワーク(メインネット/テストネットを問わない)自分のアカウントのアドレスを登録しておく必要があります(アカウント発行も自動化したかったけど、そこまで手が回らなかった……)。

図中の②について。ここで、誰かが発言に対してリアクションをつけています。tiperc20は、あらかじめ設定したリアクションがつけられた発言主に対して、トークンを送付します。

図中の③について。Hi-Etherコミュニティに参加するには、Ropstenのアカウントが必要です。Ropsten上でのERC20トークンの保有量を調べるには、MetaMask拡張が便利です。ここでは、②のリアクションによってtiperc20によって1 HETHが送られたことが確認されています。

こんな感じで、簡単に使えます。ちなみに、tiperc20を動かしているアカウントの保有するトークンを配布する仕組みになっています(OKIMOCHIと同じ仕組み)。

技術面について

tiperc20のようなものを自分でも作ってみたいという方のために、技術面についても少し説明しておきます。詳細については、リポジトリのREADMEに書いてありますので、そちらもご参照ください。

tiperc20は、Goで実装しています。EthereumコミュニティはGo推しであることもあってツールチェインが充実しているというのと、自分がJavaScriptがあまり好きではないという理由もあります。Goでスマートコントラクトとやりとりするには、Native DApps: Go bindings to Ethereum contractsという公式ドキュメントを参照するのがよいでしょう。

手順としては、以下のような感じ。

  1. コントラクトのABIから、Goバインディングを作成する
  2. Goプログラムからそのバインディング経由でEthereumネットワークとやりとりする
  3. コントラクトのアドレスから、実際にデプロイされたコントラクトのメソッドを呼び出す

簡単ですね。詳しくは、tiperc20のコードを参照してみてください。

おわりに

本記事では、前回の記事で作成したERC20トークンを、組織・コミュニティにおけるコミュニケーションを円滑化するためのツールとして、Slack上で簡単に送りあえるtiperc20を紹介しました。実際に動いている様子がHi-Etherコミュニティで観られますので、是非お越しいただいて、遊んでみてください。

今回紹介したのはごく簡単な仕組みですが、実はものすごい可能性を秘めたものだと思ったりしています。その件については、また別の機会があったらお話しましょう。