目标
从基础的智能合约中分析代码结构,了解调用方式和合约的作用。& H+ J# G( j" Z5 Q% e
软件版本+ C" Z3 y( t- ~, U- X" n
建议阅读前先了解:https://blockflow.net/t/topic/6632 y9 K6 X' Q: L
参考文档:7 i1 n1 }9 P5 @" x, o4 S9 h V" O
EOSIO提供了一组服务和接口,使合同开发人员能够" `& e3 b: [) ?
跨action保持状态。其中包括:
5 v. O/ y' D, h' e3 w% N
简介
bios全称是:Basic Input/Output System(基本输入/输出系统)。; K6 o" ^: ~8 Z, |* M0 M" j% D
部署方式3 b+ f2 P! v- B1 I) Q4 g# A+ m+ V
cloes set contract eosio ./contracts/eosio.bios/ -p eosio
源码分析
项目结构
├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
├── eosio.bios.abi 数据结构和接口- Z. j. y$ U" z5 x9 U
├── eosio.bios.cpp 核心逻辑代码& t6 g, Y0 b$ V% _! b$ P
└── eosio.bios.hpp 头文件类及其成员声明
核心eosio.bios.hpp M$ V% P% O; T2 p7 y! e, k. @- k9 [
#pragma once
#include
#include ' C! @7 W+ C, i5 O# g
namespace eosio {
class bios : public contract {
public:5 s0 b/ y9 e" _" r3 N" F; R
bios( action_name self ):contract(self){}" w: I% s& @- P# {* e
//设置账号权限7 V# u: J, U& ~9 ~( [2 ~! Q8 L
void setpriv( account_name account, uint8_t ispriv ) {8 W2 k2 ] f# J: d: f& c# }/ W
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 );& K, X F8 m4 V; C
set_resource_limits( account, ram_bytes, net_weight, cpu_weight );6 E/ J( Q5 u% b3 w
}
//设置区块链资源,无任何操作,暂时无效* G; R5 f8 y. a% |
void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {( ?- C9 h L" g( \6 [' q8 ?
(void)ram; (void)net; (void)cpu;
require_auth( _self );+ a- U. ~8 V$ ^( W/ C
}! E. o- ^5 s j9 r
//设置生产节点
void setprods( std::vector schedule ) {6 I3 ]' S3 n( K3 M; x
(void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)
require_auth( _self );. m4 L. ^) W" [# w
constexpr size_t max_stack_buffer_size = 512;
size_t size = action_data_size();
char* buffer = (char*)( max_stack_buffer_size x4 _( b' K7 w+ L% A
所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
require_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。* v u% h4 Z+ W8 B! @1 I
eosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。4 d/ Z/ \3 l1 P4 t& ~
privileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。