ビットコインとか勉強会#21 にいってきた

仮想通貨全般

に参加してきたのでメモ。

Sponsored Link


DAppsの現状とイーサリアム規格 – 木村直広さん

ERCの規格について
ERC20ERC721については以前紹介したので割愛。

ERC948

サブスクリプションモデルのために使用(定期購読モデル)
毎月の引き落としなどに使われる規格。

ERC884

デラウェア州の会社のトークン規格
株式をトークン化するための規格っぽい。
これにあわせて、会社を運営できるよ、という規格らしい。
デラウェア州で資金調達などをブロックチェーン上ですることが可能。

ERC998

ERC721の拡張。まとめて取り扱えるという話らしい。


ステータスはドラフト。(2018年9月3日時点)

ERC1068

ETHLendがConsenSysと提案
ローンのトークン。
クラウドファンディングなど様々なローンシナリオに対応できるようなトークン。
ローンの資金調達、募集学の受け入れ、支払いの期日等が保存できる。

ERC1070

奨励金のスマートコントラクト。バウンティー報酬の規格。
ConsenSysが提案。

Ethereumの特典をあげるためのスマートコントラクト規格。

まとめ

何かEthereumでやる場合に何か規格が定義されていないか、Githubで探した方がよい。

tendermint について – 坪井有花

スケーラビリティ問題の解決策する方法

オンチェーン

– PoW を PoS に変更する。CasperというEthereumの規格がある。
– 処理の並列化シャーディング。

オフチェーン

– ステートチャネルで処理。RaidenやらLightning Networkやら。
– サイドチェーンで処理。Plasmaとか。

tendermint

– コンセンサスアルゴリズムをtendermintで変える

Tendermintとは

セキュアかつパッケージングしたソフトウェア

特徴

– 秒間数千トランザクション
– ブロック生成後すぐにファイナリティ取れる
– 3分の1のノードが停止、悪意を持った振る舞いのノードがいても安心
– 任意のプログラミング言語でブロックチェーンプロトコルの実装ができる

独自のブロックチェーンプロトコルを開発する事ができる。

開発例

– Ethermint
 EVMを実装している。web3やsolidityと互換勢がある
– Cosmos
 Tendermintで実装されたチェーンどうしでつなぎ異なるチェーン間でのトークン移転を用意にする。

Tendermintで作ったブロックチェーンをEthereumなどパブリックなチェーンに載せる事ができる。

技術コンポーネントの話

ABCI(Application BlockChain Interface)

1台のマシン上でのステートマシン(=アプリケーションロジック)と
複数のマシンへのステートマシンを複製する仕組み(コンセンサスエンジン)との間に
シンプルなインターフェースを提供することで、それぞれの関心ごとを分離する。

Bitcoinで例えるとステートマシンではUTXOの管理をアプリケーションロジックする。

– なんで作ったか?
 コンセンサスエンジンは C#、アプリケーションエンジンは python とか。
 分ける事ができる。

messageプロトコル

アプリケーションロジック(サーバー)と、コンセンサスエンジン(クライアント)との間のインターフェース。
コンセンサスエンジンがリクエストを送り、アプリケーションロジックがレスポンスを返す。

データは”Protocol Buffer”で定義されている

– CheckTx
 リクエストされたトランザクションの検証を行う
– DeliverTx
 リクエストされたトランザクション検証と実行を行い、アプリケーションステートを更新する
– Commit
 現在のアプリケーションステートのルートハッシュを計算する
レスポンスとして返却されたルートハッシュを次のブロックのヘッダにセットする。

ABCIサーバー(アプリケーションロジック)

実装する必要がある。
GRPCかソケット通信のいずれかを選択する。

ABCIクライアント

tendermintが全てやってくれる。

ブロックチェーンプロトコル

そのメッセージをどういったコネクションで送るかを明示的に示す。

– Mempool Connection
 ユーザからトラクザクションを受け取った時に確立する
 コンセンサス -> アプリケーション でOKのものをmempoolにためる
 CheckTx使って行う

– Consensu Connection
 コンセンサスが得られた新しいブロックがコミットされた時に確立する
 BekinBlock 、ステートのルートハッシュを返却、ステートのルートハッシュを次のブロックのヘッダにセット

– Query Connection
 アプリケーションステートの状態を問い合わせるときに確立するコネクション
 peerの情報とか取れる

Tendermint Core

これがコンセンサスエンジンに当たる。
同じトランザクションが同じ順序で、全てのマシンに複製される事を保証する為の低レイヤー。
部分的に非同期で決定論的な BFT-based PoS。

– 部分的に非同期
 タイムアウトっていう制限付きで非同期で続く。

– 決定論的
 ランダム性がなくて何回やってもいっしょにする。数学的に説明できる。
 
以下が詳しいらしいです。

コンセンサスを得るまでのステップ

1. Transaction Submittion
– ユーザからトランザクションが送られるとローカルのMempoolキャッシュに保持される
– ABCIのMempool Connectionでトランザクションが検証され、他のノードにブロードキャスト

2. Propose
– P2Pネットワークに参加するノードの中から、

3. Pre-Vote
– 1回目の投票を行う。電子署名
– 2/3以上のバリデータが投票し終わるか、タイムアウトに達するまで待つ
 (部分的非同期の由来。2/3以上の投票しおわったらおわってしまう)

4. Pre-Commit
– Pre-Voteで2/3以上のバリデータが投票したブロックに、2回目の投票を行う
– 世界で共通で1ラウンドあって、Pre-Commitで投票できるのは、ほんとに1つだけ。
    ファイナリティがすぐ得られる。
 * かなり重要

5. Commit
 
– ブロックチェーン上にコミットされる
– 投票が集まらなかったものは、次のラウンドに回される。

Tendermintに触る

ABCIサーバーの実装

インターフェースの定義の仕方
 -> ProtoBuffer で書く。
example/counter.js にサンプルがある

DappsがSolidityだけでなく、GoやPythonなどで実装できる可能性が広がってくる!

最後に

懇親会には都合が悪くて参加できませんでしたが、会場も涼しく発表もわかりやすく良い勉強会でした。
また参加しようと思います!

Sponsored Link
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


仮想通貨全般
TendermintをDocker使って起動してみる

以前、勉強会に行ってきた際にTendermintの事を聞いて ブロックチェーンプロトコルが実装できる …

仮想通貨全般
Bitcoinのdifficultyを決めるnBitsを理解する

マイニングする際の理解を深めようと思い、マイニング難易度(difficulty)を決めるnBitsに …

仮想通貨全般
EOS Night Meetupにいってきた

今回は、以前からEOSに興味があったので EOS Night Meetupにいってきました。 暗号通 …