0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

eosio.bios の役割

Last updated at Posted at 2018-12-15

EOS の公式コントラクトとして、下記あります。

今回は、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 は、ブロックチェーン全体の基本的な制御を行うコントラクトになっています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?