目标
从基础的智能合约中分析代码结构,了解调用方式和合约的作用。* I4 v5 \& L( {$ ]8 B
软件版本- l' x' z+ a! Z/ C: V: q
建议阅读前先了解:https://blockflow.net/t/topic/663! U$ L3 Y2 O# m( ~/ x
参考文档:
EOSIO提供了一组服务和接口,使合同开发人员能够
跨action保持状态。其中包括:1 j& |/ N/ e# G- e/ {
简介 O. q* q7 G: Z7 r7 i$ e
bios全称是:Basic Input/Output System(基本输入/输出系统)。
部署方式- v2 ^- m% Z; j. t9 H2 s
cloes set contract eosio ./contracts/eosio.bios/ -p eosio* I# |8 P+ @5 b* d0 x
源码分析9 t2 Q5 ^3 u+ i5 h
项目结构$ @% y$ D# G+ J- R: Z9 `6 D
├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
├── eosio.bios.abi 数据结构和接口
├── eosio.bios.cpp 核心逻辑代码
└── eosio.bios.hpp 头文件类及其成员声明. ]4 L9 d! Q0 X* R. T" s
核心eosio.bios.hpp
#pragma once
#include
#include 3 J; C% @, o. O" Q2 Z
namespace eosio {
class bios : public contract {7 j( n6 I6 r* G8 u# [ ]$ m4 p
public:/ v8 Y$ U+ d; [4 j9 i7 W
bios( action_name self ):contract(self){}
//设置账号权限+ ~$ r: D& d* b5 j
void setpriv( account_name account, uint8_t ispriv ) {
require_auth( _self );
set_privileged( account, ispriv );/ L& B+ h% `9 ]1 d( v) u I7 ^
}
//限制账号资源 ~0 e: U; t# R( J1 h
void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {0 \% }6 h, S* l" {( j
require_auth( _self );7 P. }- e1 ^; E' J/ Z$ W3 Q( Z
set_resource_limits( account, ram_bytes, net_weight, cpu_weight );) S r3 n" U8 H) D9 s- O+ d) c
}
//设置区块链资源,无任何操作,暂时无效
void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {: v `! T6 c+ K$ G1 x2 a: @
(void)ram; (void)net; (void)cpu;' M$ U) w; c. {" \' `) B+ [# f# I
require_auth( _self );* e1 [. @* N! O* |# i) c. V) L
}$ ]$ ^1 H* X% B. e2 T: [
//设置生产节点3 N$ R: Q/ v( n+ \8 k% \$ g
void setprods( std::vector schedule ) {, }) U9 ?# K, q! X: J5 o
(void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)4 H( f( O/ n; Q) P" R$ U+ W- u
require_auth( _self );
constexpr size_t max_stack_buffer_size = 512;
size_t size = action_data_size();; e2 a0 u$ W6 z, H. D
char* buffer = (char*)( max_stack_buffer_size
所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
require_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。
eosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
privileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。