見出し画像

非エンジニアがブロックチェーン"miyabi"でトークンを発行してみた

ブロックチェーンとトークン

ブロックチェーンは仮想通貨のベースとなる技術であり、記録された情報は複製・改ざんが事実上できない。その特徴ゆえ、ブロックチェーンを使ってトークン(バーチャルな通貨)を表現・発行できる。特定領域のみで使えるコミュニティ通貨や、ゲーム上でのコイン、IoTのマイクロペイメントなど、様々な業界でトークンエコノミービジネスが検討されている。

ブロックチェーンとトークンはセットで語られることが多く、ブロックチェーンについて少しでも知っている方なら、いまさら何を当たり前のことを!という反応だと思います。しかし、実際にブロックチェーンを使って自分でトークンを発行してみたことがある人は少ないのではないでしょうか?

実際、Dappros社(ロンドンのブロックチェーンリサーチ会社)の調査記事によると、ブロックチェーン開発者数の調査では、全世界で合計107,102人のうち日本は660人(約0.6%)しかいないという悲しい結果となっています(2018年10月24日時点の情報)。ちなみに1位はアメリカで27,876人と、2位インドの12,509人を大きく引き離しています。(下図はDappros社サイト情報をもとに作成)

図4

ブロックチェーンの開発・構築は難しそうでなんとなくハードルが高いと考えて、手を付けられていない人もきっと大勢いるでしょう。まだまだ開発者数が少ない大きな理由の1つだと思います。
しかし、当社のブロックチェーンプロダクト "miyabi" ならば、実は簡単にトークンを発行することができるのです。そこで、どれくらい簡単なのか知っていただけるよう、非エンジニアの私が実際にトークンの発行と送付を試してみました。

miyabiにアクセス

大げさに目次をつけてしまいましたが、miyabi CLIのexeファイル(miyabiノードにアクセスするクライアントソフト)をコマンドプロンプトで実行するだけです。ちなみにmiyabiには日本語マニュアルがあるので英語が苦手な方でもとっつきやすいという素敵ポイントがあります。

今回はmiyabiのプレイグラウンド環境(プレビュー版として希望者に公開中のトライアル用オープン環境)を使います。プレイグラウンドのプレビュー版お申込みはこちら(プレイグラウンド申込書)。

miyabiのファイル一式を置いたディレクトリに移動して、miyabi-cli.exeを実行します。すると、以下のようにバァーっとコマンド一覧が出てきます。(長いので一部省略しています)

図5

これでmiyabiにアクセスする準備ができました。エンジニアではない私にとって、コマンドを入力してソフトウェアの動作を見られること自体がちょっと感動です。

アセットテーブルの作成

続いて、トークンを管理するためのテーブルを作成していきます。miyabiにはアセットの表現・管理に必要な機能が標準搭載されていて、アセットテーブルという専用のテーブルを用いて任意のトークンを簡単に作成することができます。
なお、全体のイメージを掴んでいただくことが目的のため、以降では各種コマンドの詳細説明は省略します。また、noteの仕様上、コード色変換が上手く機能せず、どうしても見づらい箇所については画像キャプチャとしましたが、ご了承ください。

まずはテーブルのオーナーの秘密鍵を生成します。オーナーはトークンの発行権限を持ちます。
秘密鍵を格納するPKCS12 ファイルを作成。-d で出力先ディレクトリの指定、-f でファイル名の指定を行います。
その後、ファイルから秘密鍵を取り出します。すると、ランダムな文字列が返ってきました(太字が戻り値)。これがテーブルオーナーの秘密鍵です。

C:\miyabi>miyabi-cli generatepkcs12 -d . -f owner

図13

先程取り出した秘密鍵から公開鍵を取り出します。

C:\miyabi>miyabi-cli getpublickey 29458d46ceafb3d7e9043305131a6b117d797704becf01e9789e533fec363806

0326a2f8ad4d8d684e739ede353603472730f9c105d02b352999a4ac92beb2a51b

テーブルオーナーの秘密鍵・公開鍵の生成が完了したので、早速アセットテーブルを作ってみます。
テーブルの名前は-tで指定。miyabi_coinとしてみました。-oで先程のテーブルオーナー権限(公開鍵)を指定しています。また、-pでTable Admin権限の秘密鍵で署名します。(Table Adminの鍵はプレイグラウンドをお申込み頂いた際に当社からお送りします。ここではTable Adminの秘密鍵を非公開とするためXXX...として記載しています)

C:\miyabi>miyabi-cli sendtransaction createassettable
 -t miyabi_coin
 -o 0326a2f8ad4d8d684e739ede353603472730f9c105d02b352999a4ac92beb2a51b
 -p 5fb1960XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

​e24bc9a0a86bfb2a3e9021263d68ed9f0f9a7e0a486c25be1ff8ad7555ad3cef

"e24bc9a0a86bfb2a3e9021263d68ed9f0f9a7e0a486c25be1ff8ad7555ad3cef"という戻り値は、実行結果のトランザクションIDを表しています。このトランザクションIDにより、後からでもどういったトランザクションが実行されたのかを確認することができます。
実際に、テーブルが正常に生成されたかどうか、gettransactioninfoで確かめてみます。"name"が"miyabi_coin"、"result"が"Success"となっており、正しく処理されたことがわかります。

C:\miyabi>miyabi-cli --pretty gettransactioninfo
 e24bc9a0a86bfb2a3e9021263d68ed9f0f9a7e0a486c25be1ff8ad7555ad3cef
{
 "value": {
   "tx": {
     "entryDetails": [
       {
         "typeName": "CreateTable",
         "entryDetails": {
           "tableDescriptor": {
             "admins": [
               "0326a2f8ad4d8d684e739ede353603472730f9c105d02b352999a4ac92beb2a51b"
             ],
             "rules": [
               0,
               1,
               2
             ],
             "voidAddress": "00",
             "trustedEntities": [],
             "name": "miyabi_coin",
             "tracked": false,
             "supportProofs": false,
             "type": "AssetTable"

[省略]

    },
   "txPtr": {
     "height": 1192,
     "idx": 0
   },
   "result": "Success"
 },
 "atHeight": 1193
}

なお、もう一度同じmiyabi_coinテーブルを生成するコマンドを打ち、そのトランザクションIDをgettransactioninfoで確かめてみると、"result"が”InvalidOpetaion”と表示され、今度は失敗します。

C:\miyabi>miyabi-cli sendtransaction createassettable
 -t miyabi_coin
 -o 0326a2f8ad4d8d684e739ede353603472730f9c105d02b352999a4ac92beb2a51b
 -p 5fb1960XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

d5df8047a0a3e86b929ad702ec74f4205af510f3cfb8fd5557fcbcc8ec5de068
C:\miyabi>miyabi-cli --pretty gettransactioninfo
 d5df8047a0a3e86b929ad702ec74f4205af510f3cfb8fd5557fcbcc8ec5de068
{
 "value": {
   "tx": {
     "entryDetails": [
       {
         "typeName": "CreateTable",
         "entryDetails": {
           "tableDescriptor": {
             "admins": [
               "0326a2f8ad4d8d684e739ede353603472730f9c105d02b352999a4ac92beb2a51b"
             ],
             "rules": [
               0,
               1,
               2
             ],
             "voidAddress": "00",
             "trustedEntities": [],
             "name": "miyabi_coin",
             "tracked": false,
             "supportProofs": false,
             "type": "AssetTable"

[省略]

   },
   "txPtr": {
     "height": 1193,
     "idx": 0
   },
   "result": "InvalidOperation"
 },
 "atHeight": 1194
}

これは同一名称のテーブルが作成されるのを防ぐためであり、実は正しい動作です。
当初、私はテーブル名をマニュアル通りにして進めていたら初回からInvalidOperationとなってしまい、なぜかアセットテーブル生成ができない!と悩みました。冷静に考えてみれば、プレイグラウンドは共用環境なので、既に誰かがマニュアル通りのテーブル名で生成していたんですね。最初これに気づかず、「テーブル生成ムズいじゃん・・・」と思ったこともありました。

トークンの発行・送付

テーブルの生成が無事にできたので、いよいよトークンを発行(マイニング)していきます。その前の下準備として、トークンを送付しあう2人のユーザの秘密鍵・公開鍵をそれぞれ生成しておきます。手順はテーブルオーナーの時と同じです。ユーザ名は"aoyama"、"akasaka"としてみました。

図14

図15

それではトークンを発行していきます。-pはテーブルオーナーの秘密鍵、-aはトークンを付与するユーザの公開鍵、-mは発行するトークンの量を指定します。今回はaoyamaさん宛にmiyabi_coinを発行します。太っ腹に100万トークンとしてみました!

C:\miyabi>miyabi-cli sendtransaction generateasset
 -p 29458d46ceafb3d7e9043305131a6b117d797704becf01e9789e533fec363806
 -t miyabi_coin
 -a 0356e6c4614e94e18ed55f06979c917ac899618d90ee10cd0217ba003ff682d72b
 -m 1000000

837888acda74cb167e036e783c75f595d042d4c68d72049cc0dd7b65cb1c250e

さて、これでaoyamaさん宛にトークンが発行されたことになりますが、本当に発行されているか、miyabi_coinテーブルの中身を見てみましょう。

C:\miyabi>miyabi-cli --pretty getassettable -t miyabi_coin
{
 "00": -1000000.0,
 "0356e6c4614e94e18ed55f06979c917ac899618d90ee10cd0217ba003ff682d72b"
: 1000000.0
}

aoyamaさんのアドレス(公開鍵)である0356e6c...に100万トークンが発行されています。"00"アドレスはVOIDという特殊な管理用アドレスで、トークン発行時には必ずこのアドレスから払い出されます。テーブル内でマイナスになれるアドレスはVOIDのみです。全アドレスの合計値は必ずゼロになるため、特定のユーザが不正にトークンを増やしたりすることができない仕組みになっています。

今度は、aoyamaさんからakasakaさん宛に1万トークンを送ってみます。
--fromが送付元のaoyama、--toが送付先のakasakaさんの公開鍵、-pはaoyamaさんの秘密鍵を指定します。これによってaoyama本人のみが自身のトークンを移動させられることが確認できます。

図16

最後に、あらためてmiyabi_coinテーブルの情報がどうなっているか確認してみます。

C:\miyabi>miyabi-cli --pretty getassettable -t miyabi_coin
{
 "00": -1000000.0,
 "020783fdc991d7eb7df89597d052e939194529bbf20262cd9ea77b92d795122a82"
: 10000.0,
 "0356e6c4614e94e18ed55f06979c917ac899618d90ee10cd0217ba003ff682d72b"
: 990000.0
}

akasakaさんのトークン保有量が"10000"、aoyamaさんのトークン保有量が"990000"となっており、正しく送付できていることが確認できました。もちろんVOIDは不変です。

まとめ

ここまででトークンの発行から送付まで実施してみたわけですが、いかがでしたでしょうか?結構簡単?試してみたくなりました?
いざ書いてみると結構長くなってしまいましたが、コマンドだけならば実際には大した量は書いておらず、非エンジニアである私でもかなりサクサクここまでたどり着けます。ここに記載した内容はmiyabiマニュアルにクイックスタートとして載っています。
我も使ってみたい!という粋なエンジニアの方は、ぜひまずはmiyabiセミナーにご参加いただければと思います。miyabiのコンセプトやアーキテクチャを基本からご説明いたします。プレイグラウンドで試してみてから参加したい方はこちら(プレイグラウンド申込書)。

ということで早速宣伝ですが、4/23開催のmiyabiセミナーの申込サイトをオープンしました!今回はオンライン開催です!!

図17

皆さま、ぜひぜひお申込みください!

それと、ブロックチェーンエンジニアも絶賛採用中です!!
詳しくは当社WantedlyへGo!

図18


いいなと思ったら応援しよう!