社内通貨システムでQuorumを使ってみた話
概要
ブロックチェーンの調査や社内の課題解決にあたって、社内で流通する通貨を作っている(社内通貨)。社内通貨システムを開発する上で Quorum を利用したので、Quorumを使って開発する上での知見を徒然に共有。
社内通貨での構成
こんな感じにすれば社内システムとも連携していい感じになるんじゃない?という気持ち
Quorum全然自動化できない…とりあえずEC2で手動運用しとくかという気持ち
- ウォレットをWebアプリとして実装
- Metamaskは総務のおばちゃんには使えない
- おばちゃん「あらあら、ニーモニックってなんだい?」
- 秘密鍵はブラウザのローカル・ストレージに保存
- 絶対に真似してはいけないやつ
- QuorumのコンセンサスアルゴリズムはRaftを選択
とはいえ、現在はQuorumをコンテナ化したり、初期クラスター構築やクラスターへのノード追加もある程度自動化できた
QuorumのRaft
- BFTでなくCFT(過半数)
- RaftのLeader=Minterがブロックを生成、フォークはない
- ブロックの生成間隔が早い(初期値最低50ms間隔)
- トランザクションがきた時だけブロックを生成するのでエコ
-
Speculative minting
- 投機的鋳造(直訳)
- 新ブロックを取込み中にも無限に新ブロックを生成しキューイング(speculative chain)
- Leader選挙などで一時的に親ブロックのハッシュ違いブロックが出来たら巻き戻す
- 早い、安い、脆い
- Leaderを盲信
- LeaderのRAFT_ID+nodekeyでブロックハッシュに署名したものがブロックのextraDataに入るようになった
開発時にハマったところ
Raftの時だけ block.timestamp
がナノ秒(通常は秒単位)
timestamp: 1522098611952556500,
- 投機的鋳造(直訳)
- 新ブロックを取込み中にも無限に新ブロックを生成しキューイング(speculative chain)
- Leader選挙などで一時的に親ブロックのハッシュ違いブロックが出来たら巻き戻す
- Leaderを盲信
- LeaderのRAFT_ID+nodekeyでブロックハッシュに署名したものがブロックのextraDataに入るようになった
Raftの時だけ block.timestamp
がナノ秒(通常は秒単位)
timestamp: 1522098611952556500,
web3.eth.getBlock
呼び出し時に block.timestamp
をNumberにキャストしようとしてエラー(1.0.0-beta.54
までダメ)
Error: Number can only safely store up to 53 bits
beta.55
でやっと解決(Raftの時だけStringで返ってくるので気持ち悪い)
解決したが balanceOf
の返り値がString→BigNumberになってたり、
web3.utils.fromWei
の引数がBigNumber不可でBN可だったり、意図が分からない
(追記:β期間の途中で開発者がTypeScript大好きっ子に変わったため、全部書き換えられ破滅的変更が加えられたそう)
permissioned-nodes.json
を動的に反映するという嘘
--permissioned
フラグと permissioned-nodes.json
によって参加ノードを固定できる
[
"enode://[email protected]:30400?discport=0&raftport=50400",
"enode://[email protected]:30400?discport=0&raftport=50400",
"enode://[email protected]:30400?discport=0&raftport=50400"
]
ファイル更新により動的に反映とWikiに書いてあったが何も起こらない・・・
static-nodes.json
と permissioned-nodes.json
を更新して admin.addPeer|removePeer
するしかなさそう
エンタープライズブロックチェーンのイベントで詳しそうな人に聞いてみたところ「Wikiを読んでるお前が悪い。ソースを読め。」というIT業界あるあるな知見を得た
Truffle@v5のQuorumサポートがコンプリートリー・ブロークンしてた罠
どうりで何もかもうまくいかないと思った
もう古い話だが 5.0.14
で全て修正された模様
スマートコントラクトを全て書き直した模様
あと truffle-config.js
に type: quorum
を追加すること
今後
急に本気だしたのか v2.3.0
あたりからおもしろそうな機能が追加されてるので試したい
https://github.com/jpmorganchase/quorum/releases
-
BETA RELEASE
Smart contract and RBAC based permissions model with support for organisations, sub-organisations, roles, account level access controls and nodes in the network. - Quorum Raft upgrade
v3.3.13
and add support for RaftLearner
nodes - DNS support for static nodes
Author And Source
この問題について(社内通貨システムでQuorumを使ってみた話), 我々は、より多くの情報をここで見つけました https://qiita.com/ryo0301/items/cab654e4d5a1f35d299e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .