Cosmosのマルチトークンモデルについて
メルマガ「Bspeak!」から一部抜粋した内容になります。これ以外も書いているので、よかったら登録してみてください。
Cosmosという異なるブロックチェーン間で互換性をもたせようとするプロジェクトがあります。Cosmosにおけるトークンについて説明していきます。
Stakingとしてのトークン:Atom
まずCosmosはいろんなチェーンをHubが管理をします。Hubが管理するチェーンはZoneと言われます。(外側の丸)
CosmosではPoSというコンセンサスアルゴリズムを採用しているため、ブロックを提案・生成する「Validator」という役割は、トークンの保有量で決まり、報酬としてトークンがもらえます。
ここにおけるトークンとは、ICOを実施した「Atom」というトークンになります。これがネットワークを維持するためのインセンティブとなります。
Cosmos Hub内に合計100 Atomあるとしたら、10 Atom持っているValidatorは10%の確率で「報酬を貰えるValidator」に選ばれます。
(厳密には、一度生成するブロックを提案(propose)して、他のValidatorの投票で決定がされるため、選ばれたValidatorは、Proposerと呼ばれます。)
マルチトークンによる手数料支払い
さてここまでは一般的なPoSのブロックチェーンと同様なのですが、手数料に関わるトークン設計については、Cosmosはまったく新しい設計がされています。
普通、送金などでネットワークを使用するときの「手数料」は1種類のトークンで支払われます。BitcoinのブロックチェーンであればBTCが、EthereumチェーンであればETHが、NEMであればXEM、NEOであればGASが手数料として支払われます。
しかしCosmos Hubのブロックチェーンでは他のブロックチェーンと異なり、「ホワイトリスト」に載っている複数のトークンを、手数料として使うことができます。
1つのHub(最初はCosmos Hubのみですが)につき、手数料トークンの一覧である「ホワイトリスト」というのが存在します。Cosmos Hubのローンチ時点のリストにはAtomとPhotonの2つのトークンが設定されます。
Atomは先程いったネットワークを維持するための報酬トークンです(Stakingのトークンと言われたりします)。
ただこのAtomだけが手数料として使われ流動性を高くしてしまうと、市場から安くたくさん買えるようになってしまいます。すると最悪の場合、「攻撃者が33%以上のAtomを買い占め、攻撃者の都合のいい意思決定だけをする」という可能性が高くなってしまいます。
したがってStakingだけの用途に限定し流動性を低くするため、手数料用のトークンとしてPhotonというトークンを導入します。(もちろん選ぼうとすればAtomを手数料として使えます。特にローンチ時点は、トークンが他にないので、そうする必要がでてきます。)
しかし、いろんなチェーンが繋がっていけば、Cosmos Hub内にいるValidatorたちのガバナンス(投票など)によって、ホワイトリストにトークンが追加されていきます。
ここでガバナンスをしてから追加するという方式をとっている理由は、手数料もValidatorに報酬として渡されるからです。Validatorとしてどのトークンならもらいたいか、というコンセンサスを取る必要があります。
(そういったガバナンスに参加できることのメリットを増やすことで、ガバナンスに参加したい→Atomが必要→ネットワークが維持される・堅牢になる、という設計になっています。)
異なるトークン手数料で、Validatorはどのようにトランザクションを選ぶか
では、Validatorは、数あるトランザクションの中から、どのトランザクションを優先的に選ぶでしょうか。Bitcoinネットワークであれば、ユーザが設定する手数料が同じBTCなので、どのトランザクションの手数料が高いか判断することができ、高いものから優先的に処理をしていきます。そのほうが報酬が高いからです。
しかしCosmos Hubの場合は、BTCだけじゃなく、いろいろなトークンが手数料として使われている中で、Validatorはどう優先付けをするのでしょうか。
Validatorたちが「いろんなトークンを手数料としてトランザクションを横並びにしたときに、処理するとお得なのは、この順番だね」と同意するためには、誰かが運営しているオラクルからの情報に頼るか、オンチェーンのDEX(分散型の取引所)から、「今いくらで取り引きされてるか」という価格の情報を引っ張ってくる必要がでてきます。
(オラクルは、メルマガ1号で説明。)
しかしそのようなことは現実的ではないため、Cosmosでは、すべてのValidatorが合意をするのではなく、ブロックを生成することになったValidatorが、「自分の考えで優先付けを決める」ことができるようにしています。
それぞれのValidatorは自分の考えで決めるといっても、どのように、違うトークンを横並びにして順番を決めるのかを見ていきましょう。
それぞれのValidatorは、configファイル(設定ファイル)をもち、そこに自分の好きな重み付けをしていきます。この重みを使って、Proposerになったときに選ぶトランザクションの優先付けができます。
このconfigファイルは、初期設定では、AtomとPhotonを含み、以下のように同じ重みになっています。
---Configファイル---
Atom:1
Photon:1
------------------------
それをvalidator運営者は好きに変更することができます。(例えば以下のように)
---Configファイル---
Atom:7
Photon:5
------------------------
いろんなチェーンがつながり、Cosmos Hubのガバナンス(Validatorたちの投票など)によって、手数料として使えるトークンが追加されると、以下のようになります。ここではBTCとETHが追加されたとします。
---Configファイル---
Atom:7
Photon:5
BTC:0
ETH:0
------------------------
その後、設定ファイルをいじることで、好きな重みに変更ができます。
---Configファイル---
Atom:7
Photon:5
BTC:5000
ETH:0.2
------------------------
好きな取引所のAPIを使ったり、組み合わせ、定期的にこれを更新するという設定もできますし、APIがなければ、オンチェーンの取引所から最近取引された実際の価値をひっぱってきて、重み付けができます。
例えば、手数料が0.5BTCのトランザクションと13000 ETHのトランザクションがあったとします。高いほうが、お得ですから、Validatorはどちらが高いかを、configファイルの重みをみて、比べます。
上のconfigファイルに設定していたとすると、
BTCは5000という重みが設定されているので、5000×0.5BTC=2500。
ETHは0.2という重みが設定されているので、0.2×13000ETH=2600。
となります。そうすると2つ目のほうが割がいいので、優先されてブロックに承認されるようになります。
このモデルの良い点
あるトークンを、チェーンの差異をなくし、「ブロックチェーンAからブロックチェーンBに送る」というのが一番使われるCosmosの使い道なので、ユーザもその送るトークンで手数料を払いたいはずです。わざわざ転送のためのPhotonやAtomを取引所で買ってくるという煩雑な手順をなくすことができます。
そうすることで、Hubの実用性が増し、Cosmosが運営するCosmos Hubの他に、いろんなところでHubがでてきて、どんどんブロックチェーンが繋がっていく可能性があります。
そしてどのトークンを手数料として使うかは、ユーザが使うソフトウェアのウォレットや、アプリ(Dapps)上で選べるようになり、ユーザは、手数料を意識しなくなるかもしれません。
さらにユーザにとってのみならず、Validatorにとっても良いことがあります。どのトークンを優先的に受け取るかについて、Validatorに主権があるという点です。
好きな通貨を選べるし、面倒であれば、configファイルはデフォルトのままにして、AtomとPhotonのみ受け取るようにしておけば良いのです。
---Configファイル---
Atom:7
Photon:5
BTC:0
ETH:0
------------------------
White Paper:https://cosmos.network/about/whitepaper