EOS の公式コントラクトとして、下記あります。
- eosio.bios 紹介記事 eosio.bios の役割 - Qiita
- eosio.msig 紹介記事 EOS のアカウント・ロール・権限 応用編 - Qiita
- eosio.sudo
- eosio.system
- eosio.token 紹介記事 eosio.token コントラクトを解読してみる - Qiita
今回は、eosio.system
を読んでみます。
ソース
量が多いので、リンクとアクションリストだけにします。
eos/eosio.system.hpp at master · EOSIO/eos
EOSIO_ABI( eosiosystem::system_contract,
// native.hpp (newaccount definition is actually in eosio.system.cpp)
(newaccount)(updateauth)(deleteauth)(linkauth)(unlinkauth)(canceldelay)(onerror)
// eosio.system.cpp
(setram)(setparams)(setpriv)(rmvproducer)(bidname)
// delegate_bandwidth.cpp
(buyrambytes)(buyram)(sellram)(delegatebw)(undelegatebw)(refund)
// voting.cpp
(regproducer)(unregprod)(voteproducer)(regproxy)
// producer_pay.cpp
(onblock)(claimrewards)
)
コメントどおりに、実際の実装は複数ファイルに分けています。
下記のテーブルが定義されています。
- name_bid_table アカウント購入テーブル:項目は、購入うしたいアカウント名、購入したアカウント、価格
- global_state_singleton グローバル情報:項目は、システム全体の使える RAM 量などの情報
- producer_info BPの情報:項目は、アカウント名、投票数、URL、ロケーション、未払い報酬のブロック数など
- voters_table 投票情報:オーナー、投票したアカウントの配列など
メソッドは下記になってます。
// native.hpp (newaccount definition is actually in eosio.system.cpp)
- アカウント作成
- 権限更新、権限削除
- 権限リンク、権限リンク解除
- 遅延トランザクションの取り消し
- エラー処理
// eosio.system.cpp
- RAM設定
- ブロックチェーンパラメータ設定
- 特別権限更新
- BP 削除
- アカウント名購入
// delegate_bandwidth.cpp
- RAM購入
- 代理設定
- 代理解除
- 返金
// voting.cpp
- BP 登録
- BP 登録解除
- BP 投票
- 投票代理設定
// producer_pay.cpp
- ブロック生成を記録する
- BP の報酬を付与する
関連しているシステムアカウント
契約の中、下記おnアカウントも使っています。
-
eosio.saving
報酬を計算するとき、80% の報酬を保持しているアカウント -
eosio.bpay
ブロックの数によって計算れている報酬を保持しているアカウント -
eosio.vpay
BPが持っている投票によって計算されている報酬を保持するアカウント -
eosio.ram
アカウントがRAM
を購入するとき払った料金を保持するアカウント -
eosio.ramfee
アカウントがRAM
を購入するとき払った手数料を保持するアカウント -
eosio.stake
アカウントがCPU / NET
をstake
する料金を保持するアカウント -
eosio.names
アカウントがオークションでアカウント名を売買するとき、代金を保管するアカウント
EOS ネットワーク上の立ち位置
-
EOS
のメインネットでは、eosio.bios
に代わりに、eosio
アカウントにデプロイされています
まとめ
EOS
ブロックチェーン本体の動きとリソース制限やアカウント作成などの処理が、eosio.system
で実装されていることになっています。