Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
202 0 0
前提
2 }& `& j, P+ W) x% s3 b目标! H$ }3 d$ i% m/ _
从基础的智能合约中分析代码结构,了解调用方式和合约的作用。4 Y+ n/ m0 }  y- _. e3 u6 Y5 `& _. L
软件版本( ]8 q+ b5 Y- r! W! S  C% L3 @
  • eos版本:v1.1.1
  • 操作系统:centos 7; N; c5 w6 e1 Y  R4 K' K3 d) C) d+ ^
      C8 p3 E1 f8 a- m: X$ y" n8 P
    建议阅读前先了解:https://blockflow.net/t/topic/663
    5 `8 K0 b4 |! {& {( t参考文档:  t& ~5 W: n4 d
  • C/C++ API参考
  • 智能合约介绍
    % h7 b3 J& }" z# o0 L+ K9 w

    & {5 D5 I+ {* \4 ^6 BEOSIO提供了一组服务和接口,使合同开发人员能够4 c7 {+ R( E8 w1 x/ i9 ?
    跨action保持状态。其中包括:
    9 [% i) B: Z% y- J
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件
    $ r% m/ a& |: g* w
    ( J) l$ Z4 J: T+ F简介6 X( @& z' b* ^# X# L; U' w
    bios全称是:Basic Input/Output System(基本输入/输出系统)。; d+ j. G) }# p0 x# O
    部署方式
    4 @; R6 a! y+ ncloes set contract eosio ./contracts/eosio.bios/ -p eosio2 p) W2 q8 ^8 S( k2 P) k3 Q
    源码分析
    8 A( Y2 k: ~' i( V# u/ B项目结构) x+ E# W% W5 x# z1 r& X) U
    ├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
    & _; {( z& i4 T+ K2 E7 p7 v& H& \├── eosio.bios.abi 数据结构和接口
    3 e0 z# W4 M( \- T$ I├── eosio.bios.cpp 核心逻辑代码& h# \5 G& d# I1 z
    └── eosio.bios.hpp 头文件类及其成员声明, p# R5 y* {  u6 a
    核心eosio.bios.hpp
    $ x- d3 J  z* c; ~8 {: m#pragma once
    8 I5 X' q2 L# _0 O#include   G6 C3 p' p1 n6 @1 S& J6 h: Y* c
    #include ; D6 f* K0 l8 d$ X
    namespace eosio {& T! H7 h' D& M* @. P
       class bios : public contract {3 z$ A4 F$ f) ~8 ]; B
          public:! f: {0 A' b  |! b/ i
             bios( action_name self ):contract(self){}) v- O3 B; X- C
            
    . M5 G# |7 {) P2 h2 _         //设置账号权限5 d8 b! i9 r9 ^  Y  U0 V4 U1 ]
             void setpriv( account_name account, uint8_t ispriv ) {
      J  S* n. B- t2 r! a* G2 \3 W            require_auth( _self );
    , g1 Y. w1 f% b5 X+ y            set_privileged( account, ispriv );
    4 v3 y0 C/ ^8 |2 Y         }
    # V2 }+ g  N% U1 i' {         //限制账号资源
    $ T, C/ ^, I7 Q% c6 j         void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {: T. T2 z& Q" c. k9 J8 x
                require_auth( _self );
    / N$ N# H6 H6 e            set_resource_limits( account, ram_bytes, net_weight, cpu_weight );9 y+ k6 f4 }7 K* ^' s& v3 b
             }2 k+ j2 Q3 Z, L# s8 h
             //设置区块链资源,无任何操作,暂时无效
    ( U" C+ z( N& A! x         void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {% [7 g# _* Y, u- I% X$ Y" M' T
                (void)ram; (void)net; (void)cpu;. Y. Y. `! q: ?4 |5 T: M
                require_auth( _self );1 u' X/ ?/ T, P1 f1 p* V
             }
    : W& b0 ?8 n7 o1 u3 u  W8 }, R$ }& ^# _         //设置生产节点
    6 D7 C0 w, c7 H, c) C" T4 t* q, b         void setprods( std::vector schedule ) {
    # x# @% M  w( i, i  J            (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check). e) r6 G& P! m4 y* M
                require_auth( _self );$ T! e( a! s) M4 p
                constexpr size_t max_stack_buffer_size = 512;, ^8 R! K* I1 @% P! `# q7 y
                size_t size = action_data_size();3 P! |/ M) o( y' [: I0 n. z5 t8 s" J
                char* buffer = (char*)( max_stack_buffer_size 3 _. {$ q( P6 \% K. C3 z
    所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
    + e- Q, O4 c5 M, d+ F" F) [require_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。2 s' h4 U' Y. ]
    eosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
    : X) \3 ~3 y! i; Bprivileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13