Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
106 0 0
前提
' r# [# z' D+ s$ N* Z8 i目标
' z7 X+ |. J6 ?. {; E* J3 u1 M从基础的智能合约中分析代码结构,了解调用方式和合约的作用。- D( h6 U% v" i
软件版本
, A7 m+ \  J& L+ E7 }3 k2 F" U
  • eos版本:v1.1.1
  • 操作系统:centos 7' G) w/ D% T9 z. R
    $ O9 G# g4 p* N) W: W
    建议阅读前先了解:https://blockflow.net/t/topic/663
    ' C  v. o2 W5 _3 _6 h  l参考文档:; Y/ j* _8 A/ m) R$ W
  • C/C++ API参考
  • 智能合约介绍
    7 @3 A! x1 H- I' @: {4 ]) K

    0 \. U+ w$ {8 w% i. HEOSIO提供了一组服务和接口,使合同开发人员能够( q- ?% w% f% z) T) o
    跨action保持状态。其中包括:
    9 [3 j8 V, g" W" s" L
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件" k, Z4 |' A, R
    " j( U5 `3 @0 U$ b8 W
    简介
    : b& u7 C8 l5 kbios全称是:Basic Input/Output System(基本输入/输出系统)。$ r5 P) Y* C5 M. l
    部署方式
      h' v5 V7 j$ s8 n9 Fcloes set contract eosio ./contracts/eosio.bios/ -p eosio
    " d6 K& \7 C1 j& l源码分析1 f+ I: Q& P, N& t  @* S
    项目结构
      P& ^3 w1 s% E0 _- |├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
    * U( z, G! W  m9 L5 A4 {% `9 y# }├── eosio.bios.abi 数据结构和接口/ }- \; L* N/ w
    ├── eosio.bios.cpp 核心逻辑代码
    & R, o6 L: G3 T$ K2 c8 T7 W( ?└── eosio.bios.hpp 头文件类及其成员声明
    * _1 x# T3 n$ i4 l核心eosio.bios.hpp1 ^/ j* g' S5 s9 l& B
    #pragma once  f+ H  Z. b5 g8 z- N: Y
    #include 0 Y6 @& m7 m) {$ A2 p
    #include $ T' |! a/ T; i! t9 G
    namespace eosio {
    7 Y( D, Q: t, H: C. f   class bios : public contract {3 I, F4 v6 `+ d
          public:
    3 h: Z/ Y. Y7 r! }" X( q% {8 {         bios( action_name self ):contract(self){}
    & c9 Z. x2 U( I& S        ' F4 c4 l; U4 t: W- W& y) V% L; x8 \# T
             //设置账号权限
    , Q0 f' u. y2 U( E( @; e# R) M8 k         void setpriv( account_name account, uint8_t ispriv ) {1 s" G% u, v( f& P9 Z3 k2 \
                require_auth( _self );: H( Q. A  z" J  P% I( j% m! ^& j
                set_privileged( account, ispriv );) n# v7 }2 l% o. O5 j3 e4 {
             }, T- \6 e) L7 ^
             //限制账号资源1 p# B1 z; G' {, ~
             void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {8 E+ y6 g! {4 N9 e: s
                require_auth( _self );
    4 _- b. u! o( O( k            set_resource_limits( account, ram_bytes, net_weight, cpu_weight );
    ' l$ }/ U, B" ]4 \3 o         }3 [! n$ m7 r9 w  K3 O
             //设置区块链资源,无任何操作,暂时无效
    ( Y4 @7 m0 E' G8 N         void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {; f0 X4 c4 e/ Q2 H- r/ l
                (void)ram; (void)net; (void)cpu;
    0 p6 y4 i" {. H5 H! _0 E            require_auth( _self );
    ' P! C* b! W6 f% c; Q- R         }, z9 d0 ~+ O2 x" e- H" o
             //设置生产节点* W' K$ Y) M6 P) E  L4 u% m
             void setprods( std::vector schedule ) {
    ) q8 K: X% q1 T; }& H' t  n            (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check), X/ R6 h+ K; b1 f) I9 D
                require_auth( _self );
    ( S9 y' S  {' U; ~# |+ J            constexpr size_t max_stack_buffer_size = 512;' H; h7 M( }& D$ F* I* P( n6 W
                size_t size = action_data_size();  z- t- t) D) `$ B$ P
                char* buffer = (char*)( max_stack_buffer_size
    : I& j/ B9 E7 _1 V4 R9 m所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
    3 U7 Q! i, I$ ~; ]2 F2 d' w5 y) yrequire_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。
    1 w/ Z; U* t  G  l7 ieosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
    4 @) \9 ~1 t1 _" xprivileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13