今回のおはなし
みなさんこんにちは。
VIPPOOL でエンジニアをやっています、星月です。
株式会社 VIPPOOL は、3 月に OSS として VIPPOOL clerk/storage の
2 製品をリリースしましたが、今回はそのうちの 1 つ、使い方が簡単な方、
VIPPOOL storage の紹介をしたいと思います。
VIPPOOL storage とは
VIPPOOL storage とは、VIPPOOL がクラウドで運用しているサービス、
VIPPOOL clerk に Python から簡単にアクセスできるための Python ライブラリです。
VIPPOOL clerk へアクセスするだけのラッパーなので、できることはそれに準じますが、
電子署名作成の機能も実装していますので、新規トランザクション作成が
メソッド呼び出し一発で済むところがポイントです。
また、VIPPOOL clerk が秘密鍵をアップロードすることなくトランザクションを
作成する機能を持つため、秘密鍵の漏洩の心配なく送金やデータの書き込みが行えます。
...などと説明してもわかりづらいと思いますので、
実際に使ってみましょう。
VIPPOOL storage をインストールする
PyPI に登録してありますので、インストールはコマンド一発、
$ python -m pip install vippool_storage
です。
初期設定等は特に不要です。
VIPPOOL storage を使ってみる ~ウォレットとして~
まずは秘密鍵を作りましょう。
$ python3 >>> from vippool.storage import vippool_storage >>> w = vippool_storage( coind_type = 'monacoind_test' ) >>> print( w.privKey() ) 363312610E6224A0DB04E9D3BCDCF72A1AC24CC6BFEEEF9EEB3766DD7CCD0B11 >>> print( w.address() ) mmSM1sFdMUBqPkGUPQPs72zXcXxJgrfY3g >>> print( w.balance() ) None
今回はテストネットで試しているので coind_type = 'monacoind_test' と書いてますが、
メインネットでやる場合は省略できます。coind_type = 'monacoind' と書いても OK です。
最初に表示された HEX が秘密鍵です。その次にコインアドレスを表示しています。
まだ使われたことのないアドレスなので残高は None が返ってきています。
このアドレスにモナを送金してから続きを試します。
まずは以下の 2 行だけのファイルを作ります。ファイル名は wallet.py にでもしましょうか。
from vippool.storage import vippool_storage w = vippool_storage( coind_type = 'monacoind_test', privKey = '363312610E6224A0DB04E9D3BCDCF72A1AC24CC6BFEEEF9EEB3766DD7CCD0B11' )
privKey は先ほど表示されたものをそのままコピペします。
$ python3 >>> from wallet import w >>> print( w.balance() ) 429.637
はい、残高がちゃんと見れますね。
送金してみましょう。
$ python3 >>> from wallet import w >>> w.send( 'mt5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 1, 0.001 ) 'b25c6d563dbd6f9a7bf021a247dc8b218a92a56563ddcc26690b55c1f53d49e7' >>> print( w.balance() ) 428.636
1 tMONA を手数料 0.001 tMONA で送金しています。第一引数は送金先のアドレスです。
そうすると送金トランザクションの ID が返ってきます。しばらく待ってから残高を確認すると
ちゃんと送金額と手数料が減っていますね。
この時、秘密鍵はローカルの VIPPOOL storage ライブラリ内で電子署名作成に使うだけで、
サーバに送らずに送金を完結できるところがポイントです。流出を心配する必要がないわけです。
あとはこれに適当な UI をかぶせればウォレットアプリの完成です。
簡単ですね!
VIPPOOL storage を使ってみる ~ブロックチェーンライタ・リーダとして~
名前の由来としては、こちらの用途が先にありました。
送金機能はあくまでおまけです。
さて、それでは先ほどと同じように wallet.py を作ります。
$ python3 >>> from wallet import w >>> print( w.balance() ) 428.636 >>> print( w.write( b'ABCDEFG', 0.001 ) ) 7eb74a8d2e85da3c971f7ee63cf2a2e284f2dd6350d4c57ce1a7e49b852e295e >>> print( w.read( '7eb74a8d2e85da3c971f7ee63cf2a2e284f2dd6350d4c57ce1a7e49b852e295e' ) ) None >>> print( w.read( '7eb74a8d2e85da3c971f7ee63cf2a2e284f2dd6350d4c57ce1a7e49b852e295e' ) ) b'ABCDEFG'
残高が残っていることを確認して、write メソッドでデータを書いてみます。
手数料は 0.001 tMONA です。帰ってきた TXID を引数にしばらく承認を待つと、
read メソッドで読めるようになります。
このデータはブロックチェーン上に記録されているため、
メインネットに書いたものはそう簡単には改ざんできません。
これに適当な UI をかぶせれば何か素敵なサービスが作れそうな気がしませんか?
何か作られた方はぜひ、開発チームまで教えていただけると、
今後のやる気になりますので、よろしくお願いします。
それでは、今回はこの辺で。