Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
107 0 0
前提1 [7 P$ C7 G! {6 \# w/ {
目标
$ E( b" X- E6 T: }从基础的智能合约中分析代码结构,了解调用方式和合约的作用。* I4 v5 \& L( {$ ]8 B
软件版本- l' x' z+ a! Z/ C: V: q
  • eos版本:v1.1.1
  • 操作系统:centos 7: Q/ ?, I+ o8 V) A- J( B+ J/ e9 B

    9 X; x  F5 T" V6 k9 O" z建议阅读前先了解:https://blockflow.net/t/topic/663! U$ L3 Y2 O# m( ~/ x
    参考文档:
    5 |+ S6 K) W; u6 B$ C: ^
  • C/C++ API参考
  • 智能合约介绍
    8 i2 ]: o* O, f' m; A

    8 j: ]" F# z! D& w9 Q! s' mEOSIO提供了一组服务和接口,使合同开发人员能够
    - t& Y1 x5 Q8 c/ P+ f跨action保持状态。其中包括:1 j& |/ N/ e# G- e/ {
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件
    , X3 W. W+ J) {6 T7 ?1 M# j
    8 [* C5 a, |+ p简介  O. q* q7 G: Z7 r7 i$ e
    bios全称是:Basic Input/Output System(基本输入/输出系统)。
    ! E* o  A) i( F3 x# y' v部署方式- 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命令编译和链接所需要程序。
    ' _: p, C/ w5 T2 C( f├── eosio.bios.abi 数据结构和接口
    4 m8 M2 u7 \) Y3 o  I" v% V├── eosio.bios.cpp 核心逻辑代码
    1 M6 V* j0 ^  ~$ @└── eosio.bios.hpp 头文件类及其成员声明. ]4 L9 d! Q0 X* R. T" s
    核心eosio.bios.hpp
    * ^# G; n* y; l% R#pragma once
    6 U1 t. s6 W0 O' b; v#include
    $ @+ `9 v6 O: G% Y# i9 M  r- \5 C#include 3 J; C% @, o. O" Q2 Z
    namespace eosio {
    0 D, V$ J" F/ L4 ?   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){}
      d$ X, G; i! L# n* O7 N8 `        
      o, c# f0 B3 C1 w5 U. O. g         //设置账号权限+ ~$ r: D& d* b5 j
             void setpriv( account_name account, uint8_t ispriv ) {
    ; H! [! B; ~/ N% y            require_auth( _self );
    % M: o6 m8 Q. R! z) w" F; ~5 Q' h1 w; ]            set_privileged( account, ispriv );/ L& B+ h% `9 ]1 d( v) u  I7 ^
             }
    ! T% k; ]* X4 G. ~4 w8 z1 q  N         //限制账号资源  ~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
             }
    ' F$ T; a6 t6 o% f         //设置区块链资源,无任何操作,暂时无效
    + x5 k& ]' S4 F7 I. N/ _         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 );
      Q  Z! |; D7 o) ^. K$ Y* y# m7 k0 G            constexpr size_t max_stack_buffer_size = 512;
    / j. Z1 l: B- H  H            size_t size = action_data_size();; e2 a0 u$ W6 z, H. D
                char* buffer = (char*)( max_stack_buffer_size
    1 U- d0 Y: V3 V) R5 V( S3 D/ \所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
    # X7 U* x2 P6 _: vrequire_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。
    . e$ I4 A9 t0 \9 c7 c9 ueosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
    - h9 w0 i+ s6 ]. tprivileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13