CosmosSDK
https://gyazo.com/58c07bc1354689580dff3b3c5ea8059f
ABCI
状態遷移マシン(アプリケーションロジック)と複数コンピューター間での安全な複製メカニズム(コンセンサスエンジン)の間のインターフェース。
開発視点で見ればpolkadotにおけるSubstrateと似てるぽい
tendermintスライド
https://gyazo.com/9dfe97ee9d0d9321426999723b2d79f7
tendermint上でビットコイン的な分散UTXOデータベースを構築することを考えると、
tendermint coreは以下を保証
ノード間のブロックとトランザクションのシェアリング、同期
トランザクションデータのimmutable
P2Pネットワーキング
アプリケーションロジック(tendermint上のapps開発者が開発すべき部分)
UTXOデータベースの保持・管理
トランザクションの署名・検証
クライアントがUTXOデータベースからのクエリ
(VM)
ABCIがtendermintのインターフェースを提供してくれるので、コンセンサス開発・P2Pネットワーク開発などを行う必要なし。
ABCIはかなりの柔軟性と多くの言語(Go, js, Python, Java, C++)をサポートしているが、low-levelなプロトコルなのでその上に乗るフレームワーク的なものの必要性(Cosmos SDK、IRIS SDK、Lotion JS)
Tendermintベースのブロックチェーン
分散型Proof of location
nrryuya.icon > まだTendermintベースになるかは研究開発中っぽい
tendermint&cosmosベースプロジェクトのリスト
tendermint&COSMOSでICOとか上場とか
comming soon
https://gyazo.com/cfb6a66dc64e8709457f05321652b087
ERC20
Aug/10/2018
16Mドル
FOAMトークンをイーサ上でstakingして、tendermintベースPoS子チェーンのガバナンスに使う
plasma
cosmos
イーサ上ステーキング・ルックコンセンサス?
フレームワーク
Cosmos SDK
lotion js
Cosmos SDK
goでPoSあるいはPoAのブロックチェーンを作るためのフレームワーク
Tendermint ABCIアプリケーションを作るときの複雑性を取り除き、CosmosネットワークのZoneブロックチェーンを作れるようにするためのSDK
Go only
ディレクトリ構造
baseapp: Defines the template for a basic ABCI application so that your Cosmos-SDK application can communicate with the underlying Tendermint node.
client: CLI and REST server tooling for interacting with SDK application.
examples: Examples of how to build working standalone applications.
server: The full node server for running an SDK application on top of Tendermint.
store: The database of the SDK - a Merkle multistore supporting multiple types of underling Merkle key-value stores.
types: Common types in SDK applications.
x: Extensions to the core, where all messages and handlers are defined.
アプリケーション構造
ABCI App:Tendermintと状態マシン(アプリケーションロジック)のABCIインターフェース
BaseApp:トランザクション(CheckTx, DeliverTx)に基づいた状態遷移ロジックを主に担当
AnteHandler:ナンス、署名、十分な手数料であるか検証
MsgHandler:状態遷移関数
BasecoinApp:このレイヤでアプリケーションとして成り立つようになる。主にxディレクトリにhandlerの機能などを拡張していく。
x/bank:アカウント間でのコイン送金ロジック
x/stake:CosmosのDPoSのステーキングロジック
x/slashing:CosmosのDPoSのSlashingロジック
x/Provisions:ステークホルダーに対する報酬の分配
x/gov:ステークホルダーのproposalやvoteのプロセスロジック
x/ibc:ブロックチェーン間コミュニケーション
Your Cosmos App:BasecoinAppのカスタマイズ。
アカウント、Txデータ構造変えたい
状態遷移関数を変えたい
新状態遷移効率化のためデータ構造を変えたい
ステーキングロジックやガバナンスプロセスを変えたい
利用事例:
Delegator
Cosmosとしての部分的DPoS仕様
validatorシステムを動かすことができない、したくない人でもステーキングプロセスに参加するためにvalidatorにvoting powerを移譲
もしバリデーターが不正をしてスラッシュされたらDelegatorのトークンも没収
(バリデーターはTOP100からもれると、バリデーターセットから外れる)
Atomホルダーは「どのくらいの量をどのバリデーターにデリゲートするのか」「Bond transaction」を送信する。
Unbond transctionを送信することでデリゲートを外し、3週間後atomトークンを引き出せる。
バリデーター情報
名前
説明
website
Initialコミッションレート:delegatorへの配当割合を決める変数。大きいほどdelegator報酬は少なくなる。
commission change rate:バリデーターのコミッションのdaily最大増加可能割合
Maximum commision:コミッションレートの最大値
Minimum self-bond amount:バリデーターが常にステークしておかなければならない最小トークン量
デリゲーターは受動的なタスクではない
自分のトークンも没収されるリスクがあるため慎重にバリデーターをデューディリする必要がある。
デリゲート後もバリデーターがちゃんと働いているかモニターしなければならない。ちゃんとガバナンスに参加しているか、ハッキングされていないか、コミッションレートを異常に下げたりしてないか。
スラッシュ条件
ブロックへの二重署名
署名の非可用性
もしバリデーターがproposalに投票せず、それを誰かに報告されたら少しスラッシュ。
バリデーター&デリゲーターの報酬
Atomのインフレ分
Photonのブロック報酬
様々なトークンのトランザクション手数料報酬
バリデーターのコミッション
バリデータープール(バリデーター自身のステーキング量+デリゲート量)が全てのバリデーターの10%ステーキング量だとする。
バリデーターはプールのうち20%をself-stakeしてるとし、10%コミッションを設定しているとする。
報酬は以下。
990 Atom:インフレ
10 Photons:ブロック報酬
10 Atoms and 90 Photons:Tx手数料
合計:1000Atoms、100Photons
このプールは全体の10%のステーキング量なので、100Atomsと10Photonsを得る。
内訳
Commission = 10% * 80% * 100 Atoms + 10% * 80% * 10 Photons = 8 Atoms + 0.8 Photons
Validator's revenue = 20% * 100 Atoms + 20% * 10 Photons + Commission = 28 Atoms + 2.8 Photons
Delegators' total revenue = 80% * 100 Atoms + 80% * 10 Photons - Commission = 72 Atoms + 7.2 Photons
それぞれのデリゲーターは自身のステーキング割合に応じてトークンをクレームできる。
(デリゲーターが主体的に報酬を取りに行くスタイル?この時のTx手数料はデリゲーターが負担?)
Tendermint上でVM
Ethermint
pre-alpha
Cosmos SDKのモジュールとしてtendermint上でのEVM実装
web3互換
Comos SDKのxディレクトリ内にモジュール実装
進捗
勉強会メモ
nrryuya.icon > Tendermint Coreに一体どこまであるのか
Validator setはアプリ層からメッセージで送る?
shuntak.icon > tendermint core = コンセンサスエンジン、ABCIがtendermintのインタフェース
tendrmint coreと話すにはABCIを使う