Edited at

仮想通貨を使ったサービスのアーキテクチャを真剣に考える

仮想通貨を使用したサービスについての記事が存在する中、ほとんどの記事は、非集権的なアーキテクチャを取っており、実際のプロダクションベースのサービスに多い集権的なサービスについては全く考えていない。そこで、仮想通貨について、また英語で書かれた集権的なサービス構築方法などを調べ尽くした私が解説したい。


仮想通貨の仕組み

まず、account basedの仮想通貨(代表例ethereum),UTXO basedの仮想通貨(代表例 bitcoin)が存在することを事前に確認したい。ここでは詳しく解説しない。


両タイプの通貨共通


開発言語はこれを選べ!

開発言語選択についてのtipsについては、Node.jsを選べこれ一択しかない。理由としては、仮想通貨の開発チームが提供するライブラリのほとんどがnode.jsで書かれているからだ。サービスを早く開発したい、特にスタートアップにとっては、一からライブラリを書くなど愚行であるから、特に留意したい。


Nodeは、絶対自分で立てるな!

仮想通貨のNodeのコストはブロックチェーンの特性上、日々上がり続けている、つまり、自分で建てればメンテナンスなども考えると無駄でしかない。代わりにblockexploerを使え、なおBlock explorerは、bitpayなど信頼されているものに限る。しかし、サービスが成長している場合は例外でnodeを立てても良いと思う、理由はチェーンが改竄されている可能性が否定できないからだ。


NodeのJSON-RPCは、絶対に使うな!

前章に関係するが、秘密鍵を伴う機能(アドレス生成、送金)を使って開発する場合は、NodeのJSON-RPCを使えば確かに早く開発でき楽である。しかし、これには問題があり、Nodeを直接バックエンドととして利用Nodeは、秘密鍵を保持するこれは簡単に外部からアクセスして、覗き放題である。つまり、容易にGoxしてしまう。


送金はサイン済みのHEX形式の文字列をblockexploerに投げろ!

サーバー内でデータベース上に暗号化された状態で保存した秘密鍵を用いてサインしたトランザクションを生成し、block Explorerに投げることで、秘密鍵に関わるハッキングを防げるのである


追記中


実際の手順


UTXO basedの場合