目标& ?9 d n$ L* S, X l
从基础的智能合约中分析代码结构,了解调用方式和合约的作用。
软件版本
建议阅读前先了解:https://blockflow.net/t/topic/663
参考文档:8 A9 q" d9 X* t- K7 n4 ^8 V" @
EOSIO提供了一组服务和接口,使合同开发人员能够
跨action保持状态。其中包括:: T* R; j; I Z# S& |; [/ K
. ~ h* u% J' q8 u
简介: {1 U: |* n6 j$ q( m8 j' B
bios全称是:Basic Input/Output System(基本输入/输出系统)。/ l3 |- \4 d& ~% b* Y% B% P
部署方式$ ^+ l5 i& X- J
cloes set contract eosio ./contracts/eosio.bios/ -p eosio" Y( E& \9 V% Q. p. L3 _; L4 F
源码分析
项目结构( @" |/ v D" S7 U: g
├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
├── eosio.bios.abi 数据结构和接口% h7 j0 Y }5 Z( m" R9 W
├── eosio.bios.cpp 核心逻辑代码
└── eosio.bios.hpp 头文件类及其成员声明
核心eosio.bios.hpp
#pragma once
#include
#include 0 q6 b' z! Z3 [0 H! b; O
namespace eosio {
class bios : public contract {# `5 ]) t$ ?$ k# F: O2 w5 S$ |
public:
bios( action_name self ):contract(self){}
. t" @2 x- y. g" d# {3 R, ]
//设置账号权限
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 );
}8 s$ w8 |2 v+ Z( F" x; R4 N9 u
//设置区块链资源,无任何操作,暂时无效. c: X0 n3 _ s6 B3 A
void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {! Q2 n( c" @# Z: i% z0 W( k
(void)ram; (void)net; (void)cpu;
require_auth( _self );
}
//设置生产节点" v% R: c% t( ~0 G' X$ |
void setprods( std::vector schedule ) {
(void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)
require_auth( _self );
constexpr size_t max_stack_buffer_size = 512;7 I1 Q8 M: i" D6 k; y
size_t size = action_data_size();
char* buffer = (char*)( max_stack_buffer_size
所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。6 M m* N* K( ?8 C' g/ l) Z/ Q
require_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。
eosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
privileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。