EOS の公式コントラクトとして、下記あります。
- eosio.bios
- eosio.msig 紹介記事 EOS のアカウント・ロール・権限 応用編 - Qiita
- eosio.sudo
- eosio.system
- eosio.token 紹介記事 eosio.token コントラクトを解読してみる - Qiita
今回は、eosio.bios
を読んでみます。
ソース
.cpp
にはEOSIO_ABI
以外何もないので、全部.hpp
に書かれています。
#pragma once
#include <eosiolib/eosio.hpp>
#include <eosiolib/privileged.hpp>
namespace eosio {
class bios : public contract {
public:
bios( action_name self ):contract(self){}
void setpriv( account_name account, uint8_t ispriv ) {
require_auth( _self );
set_privileged( account, ispriv );
}
void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {
require_auth( _self );
set_resource_limits( account, ram_bytes, net_weight, cpu_weight );
}
void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {
(void)ram; (void)net; (void)cpu;
require_auth( _self );
}
void setprods( std::vector<eosio::producer_key> schedule ) {
(void)schedule; // schedule argument just forces the deserialization of the action data into vector<producer_key> (necessary check)
require_auth( _self );
constexpr size_t max_stack_buffer_size = 512;
size_t size = action_data_size();
char* buffer = (char*)( max_stack_buffer_size < size ? malloc(size) : alloca(size) );
read_action_data( buffer, size );
set_proposed_producers(buffer, size);
}
void setparams( const eosio::blockchain_parameters& params ) {
require_auth( _self );
set_blockchain_parameters( params );
}
void reqauth( action_name from ) {
require_auth( from );
}
private:
};
} /// namespace eosio
説明
- setpriv
- アカウントの特別権限フラグを設定する
- setalimits
- アカウントのリソースリミットを設定する
- setglimits
- グローバルのリソースリミットを設定する
- まだ実装されていない
- setprods
- ブロック生成者(BP)を設定する
- setparams
- 下記のような、ブロックチェーン全体の動きを制御するパラメータを設定する
uint64_t max_block_net_usage;
uint32_t target_block_net_usage_pct;
uint32_t max_transaction_net_usage;
/**
* The base amount of net usage billed for a transaction to cover incidentals
* @brief The base amount of net usage billed for a transaction to cover incidentals
*/
uint32_t base_per_transaction_net_usage;
uint32_t net_usage_leeway;
uint32_t context_free_discount_net_usage_num;
uint32_t context_free_discount_net_usage_den;
uint32_t max_block_cpu_usage;
uint32_t target_block_cpu_usage_pct;
uint32_t max_transaction_cpu_usage;
uint32_t min_transaction_cpu_usage;
/**
* The numerator for the discount on cpu usage for CFA's
*
* @brief The numerator for the discount on cpu usage for CFA's
*/
uint64_t context_free_discount_cpu_usage_num;
/**
* The denominator for the discount on cpu usage for CFA's
*
* @brief The denominator for the discount on cpu usage for CFA's
*/
uint64_t context_free_discount_cpu_usage_den;
/**
* Maximum lifetime of a transacton
*
* @brief Maximum lifetime of a transacton
*/
uint32_t max_transaction_lifetime;
uint32_t deferred_trx_expiration_window;
uint32_t max_transaction_delay;
/**
* Maximum size of inline action
*
* @brief Maximum size of inline action
*/
uint32_t max_inline_action_size;
/**
* Maximum depth of inline action
*
* @brief Maximum depth of inline action
*/
uint16_t max_inline_action_depth;
/**
* Maximum authority depth
*
* @brief Maximum authority depth
*/
uint16_t max_authority_depth;
EOS ネットワーク上の立ち位置
-
EOS
のメインネットでは、eosio
アカウントにデプロイされています -
eosio.bios
は、その言葉どおり、EOS
ブロックチェーンが動く基本的な動作を制御しているので、新しいチェーンを立ち上げるとき、eosio.system
と一緒に、最初にデプロイしないといけないコントラクトになります -
EOSIO
を使って自分のチェーンを動くケースになりますが、eosio.system
コントラクトを使わない場合は、setprods
を使ってBP(ブロック生成アカウント)
を設定できます
まとめ
eosio.bios
は、ブロックチェーン全体の基本的な制御を行うコントラクトになっています。