はじめに
ステーキングと聞くとトークンを預けて利回りを得る配当ビジネスだと思っていた。
実際ステーキングをやって利回りを得たい!と思っている時はその認識だけで問題ないと思う。
だけど裏側を見ると氷山の一角というか、その裏側には深い世界があることがわかった。
なので、自分の勉強ログとして自分の言葉で残していく
ステーキングとは?というところからcosmos-sdkをみてわかったこととかも話せていければって思う
日頃自分たちが見ているステーキング
簡単にいうとステーキングはビットコインでいうマイニング。(めっちゃ簡単に言いすぎてる) ここで「???」となるのは正しいと思うけど、このことを知れただけで自分はこの後話をすることを興味持って調べられたので、ぜひ興味を持ってください???
CEXでやる理由
マイニングは計算処理によってブロックを生成してる ステーキングはトークンを担保にブロックを生成してる
簡単にいうとこんな感じになってる。 なので、マイニングでお金が稼げることを知っていれば、ステーキングでも同じことをやっているからお金がもらえるって感じ。 さらにCEXだとそこまでステーキングを特に自分たちが中身を知らずともできる方法になってる。
やろうと思えばステーキングは個人でできる。
- ある程度の資金が必要 (しかもステーキングのために固定される)
- インフラの運用コスト
- スラッシング(違反したら資産没収みたいな感じ)のリスク
実際はこういう理由があるから現実的じゃないからおすすめはしないよ。 なのでもしこのブログを最後まで見て興味持ってもCEXでやろうね。もし自作したいと思ったら一緒に頑張りましょう??
ステーキングを知るためにはまずコンセンサスアルゴリズムから
さっきマイニングとステーキングは同じといったけど、それを理解するにはコンセンサスアルゴリズムということを知ることがマスト。 これは何かっていうとどうやって承認者を決めるか?っていうこと ブロックチェーンはブロックという取引をまとめたものがある。中央集権的じゃないから絶対的な管理者がいないから、誰かがその取引が正しいかっていうのを証明しないといけない。
どうやってその’誰か’の権利を選ぶの?っていうのがコンセンサスアルゴリズム。
何種類かあるけど、今回はPoWとPoSだけ最低知っていればこの先もわかるので、この二つだけ知っておいてほしい
| PoW (Proof of Work) | PoS (Proof of Stake) |
|---|---|
| 早く計算した人が権利をゲット | トークンを預けている人から選ばれる |
こんな感じ。
ビットコインはPoWなので、マイニングされてる。やっている人はみんなその権利を得るためにいいスペックのPCを揃えて電力を使いまくって掘ってる。
ステーキング(PoS)はそんなことしなくてもトークンを担保に承認者を選ぶので電力を使いくる必要がない。環境への影響はなく安全にできる。ハッピー。
CEXがやっている理由
じゃあ、なんでCEXがステーキングをやっているの?っていうと
- トークンをユーザーから預かることでCEXにユーザーを滞在させる
- 流動性の確保
- ステーキングで資産を増やしてもらい、他の取引をしてもらう
こんな感じかなって思う。 まあ、一番は一つ目のユーザーをCEXに囲い込むことが一番だと思うね。
ユーザー目線、自分の資産がステーキングで固定されていたらそのCEXを定期的に利用すると思うし。
ステーキングの深淵へ踏み込もう
ステーキングについて少しわかってきたと思うので、これからはしっかりステーキングの話をしていくね。 さっき個人でステーキングをするのをお勧めしない理由で話したけど、なぜ軍資金がある程度必要なのか。
- ある程度の資金が必要 (しかもステーキングのために固定される)
なぜかというとPoSがどのようにブロックの承認者を選ぶのかを知ることが重要。
ちなみにこれからはこの「承認者」をvalidatorと呼ぶね。
結論、validatorを選ぶのにはトークンを預けている量が関係してくる。
トークンを多く預けていればいるほどvalidatorに選ばれる可能性が大きくなるんだ。これは完全ランダムじゃない。
これはプラットフォームによって変わっているけど、PoSを設計する時に使うcosmos-sdkのソースコードを見ると書いてる。
一応これがリポジトリ。興味ある人は覗いてみよう
コンセンサスパワーというのがあって、これがvalidatorに選ばれる可能性を定義してる。 トークンから計算されていることがこのコードからわかると思う。
// PotentialConsensusPower returns the potential consensus-engine power.
func (v Validator) PotentialConsensusPower(r math.Int) int64 {
return sdk.TokensToConsensusPower(v.Tokens, r)
}
https://github.com/cosmos/cosmos-sdk/blob/main/x/staking/types/validator.go#L363
powerReductionというのはプラットフォーム側で決められてるけど、単純にトークンをpowerReductionで割ったものがPotentialConsensusPower。
// TokensToConsensusPower - convert input tokens to potential consensus-engine power
func TokensToConsensusPower(tokens, powerReduction sdkmath.Int) int64 {
return (tokens.Quo(powerReduction)).Int64()
}
https://github.com/cosmos/cosmos-sdk/blob/main/types/staking.go#L28
少し疲れたので続きは後々書いていきます。 deligatorの役割とかスラッシングについて書いていきます。