Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
115 0 0
前提( @: p7 [; w# k- [5 j7 g
目标2 T2 M6 h; j6 w( {9 B" X
从基础的智能合约中分析代码结构,了解调用方式和合约的作用。
1 f4 y. O- `# ~% }4 g+ _2 q, b软件版本
, F- ?: l9 U' P$ i9 N
  • eos版本:v1.1.1
  • 操作系统:centos 7% B4 B& d& G$ t0 S( J

    - A$ J7 u- I1 x1 `6 F5 b建议阅读前先了解:https://blockflow.net/t/topic/663
    & s. H  ?+ e$ }% ?1 b1 J参考文档:0 f, l1 z+ Y1 J( e/ F: `) }! w+ R1 p
  • C/C++ API参考
  • 智能合约介绍
    2 Y% B9 f3 g3 L  _* w

    % i( B6 k$ f& }6 o8 b! |4 e" f# XEOSIO提供了一组服务和接口,使合同开发人员能够$ d: t& s8 W4 M- S. ^/ m: F
    跨action保持状态。其中包括:
    ) O( f9 m4 i, Y. C6 d9 }, `
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件7 [) [* C: T; q
    / q' i; B  i! ^* {
    简介
    2 M( a0 X+ y( _9 D3 V* a9 abios全称是:Basic Input/Output System(基本输入/输出系统)。( j& D- p# x- Q( k
    部署方式- H# s/ P) i0 B
    cloes set contract eosio ./contracts/eosio.bios/ -p eosio
    6 ]; i+ E" `+ ~+ ?3 H- c源码分析
    + g" @& x; T% g, U$ x! ?/ a: \! O项目结构
    ' u" ^4 ~6 Q1 M  r9 s├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。! k7 p' h; A( y! T- d9 u1 x0 @
    ├── eosio.bios.abi 数据结构和接口
    3 Z5 n4 ~# m0 P4 G! Y+ O├── eosio.bios.cpp 核心逻辑代码/ d. z8 m1 o( P% r
    └── eosio.bios.hpp 头文件类及其成员声明
    " Z3 H( q; Z, B6 d2 s/ p核心eosio.bios.hpp
    - K/ w* n5 i# J) e) w. c#pragma once
    , P- w0 d0 U! n3 |4 @! U#include
    ) u0 g, U$ y, U; t9 C#include
    ' @) K  z, r- I0 a6 C* b1 y5 {namespace eosio {
    ' n1 @1 D0 H2 Q4 E$ M+ y   class bios : public contract {, }  _8 ?) T7 Y8 b1 f
          public:
    0 I5 c$ D: j. x6 I0 ~         bios( action_name self ):contract(self){}: e7 x8 l2 i" \% ~/ @
            % \# U6 {# u$ t5 D* P! |
             //设置账号权限
    & @! F7 g' |1 U: l  _* Q         void setpriv( account_name account, uint8_t ispriv ) {+ {1 [6 Y- h2 v& W5 h
                require_auth( _self );- H" q# K* L8 _+ R9 @+ @) l
                set_privileged( account, ispriv );
    , x% }! }' l$ t         }
    , S/ \1 v; \1 z9 W! ~& h  \1 S         //限制账号资源0 x* l% Q7 n& c
             void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {7 W+ {: i3 a- V0 S+ o5 v2 e
                require_auth( _self );
    2 B$ k" _1 c$ N; v            set_resource_limits( account, ram_bytes, net_weight, cpu_weight );
    " ^9 Y' H9 T1 t. X7 E  ~2 H+ V' f0 b2 E         }
    9 L/ I) p1 d: J2 K: b6 s         //设置区块链资源,无任何操作,暂时无效
    8 Q" h! J2 H; H* q' }/ S) {         void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {
    3 k% b' L" u# m" C0 o            (void)ram; (void)net; (void)cpu;2 f' B- U& w' f# S4 [
                require_auth( _self );
    2 p0 Y# i& g  |* N  }. Z% x         }
    - `0 J& m& D* R' l$ _         //设置生产节点" ^; d* w, u+ |6 `
             void setprods( std::vector schedule ) {' [7 G+ F  i( d/ B6 @% w" i
                (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)/ x. w0 q: {6 i  r8 M/ Z
                require_auth( _self );
    & r% G1 ~/ q1 P& L4 _            constexpr size_t max_stack_buffer_size = 512;6 K" R% h3 V- k1 O
                size_t size = action_data_size();* l. \. U$ h+ M( k8 d7 \# Z
                char* buffer = (char*)( max_stack_buffer_size
    # Y: e8 [* r9 P( v' D$ u2 {, i所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
    ( E6 H( o6 B, srequire_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。/ l2 J, ]7 b  y$ R5 F1 l) u; S
    eosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
    ; v. ~8 J0 }0 \privileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

    温室小书生室d 初中生
    • 粉丝

      0

    • 关注

      0

    • 主题

      13