Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
128 0 0
前提
8 p! P$ ?: [6 q8 A0 n' F" C) O目标
' j# |- R2 \& F从基础的智能合约中分析代码结构,了解调用方式和合约的作用。
0 ^; ]  U  R! B+ q软件版本
  M9 s# d2 n" A# F: {
  • eos版本:v1.1.1
  • 操作系统:centos 71 o( @$ c/ w4 Z' N8 H! N" M% X
    1 n8 m+ C! p; m: |7 ]( q* g
    建议阅读前先了解:https://blockflow.net/t/topic/6633 g5 w. p/ @- E- x$ C( v8 W
    参考文档:8 V) t3 ?% L( \& N9 ^
  • C/C++ API参考
  • 智能合约介绍
    , b9 T% |8 c: F1 o
    1 O2 @1 ]! t0 F
    EOSIO提供了一组服务和接口,使合同开发人员能够* Z4 a; P( C( D
    跨action保持状态。其中包括:
    ' p- }( C( Q, G
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件5 c2 w( |/ r. @. E) y' F  J% X. H; J5 m. Y
    . }3 f0 A9 a# J* ^7 V
    简介
    0 ?' m% Z0 P) [. j0 ~9 y3 ]bios全称是:Basic Input/Output System(基本输入/输出系统)。
    0 b/ b, h# G1 `2 j; c: o) W部署方式/ X7 Q5 I6 r& e6 R- P
    cloes set contract eosio ./contracts/eosio.bios/ -p eosio: S! K4 I8 U, m; z3 S
    源码分析0 r& W# B7 |- {) f
    项目结构0 s( r$ v; L4 Z+ R; X+ {) Z
    ├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。0 H; Z$ ^! V& P+ o, Q5 Y
    ├── eosio.bios.abi 数据结构和接口4 y7 v7 ^" ?/ {! G% m, V5 F
    ├── eosio.bios.cpp 核心逻辑代码
    . D( o1 D2 I* E" o! y# l1 P- S└── eosio.bios.hpp 头文件类及其成员声明% k& H" x4 g/ |! ~! x& q1 H2 O
    核心eosio.bios.hpp
    ! t  O# g" C5 k( e4 P0 K7 R#pragma once* a. b/ X' l9 {$ V4 Y* r+ n
    #include
    ; r- i- |# d+ W3 E) a; e#include
    ; M7 D  S/ z! |/ Qnamespace eosio {
    ; P' f. X+ h2 I) i( }; R9 b6 v   class bios : public contract {
    8 j' t- X  C# Q% m+ ^& t      public:  G/ \3 ]& Q2 T
             bios( action_name self ):contract(self){}# ^8 @  E6 ?4 z3 M0 Y+ \
            
    ( [* r' c9 c7 B3 e# B         //设置账号权限: e7 [5 p9 H! L; y6 F5 h7 W
             void setpriv( account_name account, uint8_t ispriv ) {
    + j6 L# g, M; G1 {            require_auth( _self );' g# z1 s# O6 x- Z! ~( O) `
                set_privileged( account, ispriv );7 x0 }- r4 a! }0 {. Z
             }
    7 \4 Y5 G/ @' K! ~6 q! n% _7 ~. q         //限制账号资源
    - k1 t1 C5 m% T% k5 E2 Z         void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {" |( b" x: d/ M& \, B+ V1 r, U
                require_auth( _self );
    * }3 Z$ w4 i! e8 _( {; @0 C            set_resource_limits( account, ram_bytes, net_weight, cpu_weight );
    * }% L0 H+ z1 z/ i! K4 @4 R1 m         }
    , a+ p4 u; A# u1 ~2 B/ @8 O         //设置区块链资源,无任何操作,暂时无效
    % g: F! T& T0 G/ n" S0 p4 r         void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {& L2 c8 \& w1 E7 H
                (void)ram; (void)net; (void)cpu;  @. i. c# d3 l' V
                require_auth( _self );8 P. j/ b/ M% l* ]1 H4 u
             }
    ! q% [; l% p8 a  N3 Z+ u6 a/ k1 l         //设置生产节点
    0 I. f$ E* v9 E4 j3 S. ^         void setprods( std::vector schedule ) {$ L# I$ ?+ C$ o( ~- r' E9 Y
                (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)' [; c+ x% v- z  n0 B
                require_auth( _self );
    4 a% D7 j. W- a4 E8 M/ H$ G            constexpr size_t max_stack_buffer_size = 512;6 k, Q2 C8 V9 x9 l4 N
                size_t size = action_data_size();" g* V+ [9 }4 E7 x/ ]  Q
                char* buffer = (char*)( max_stack_buffer_size
    8 O& t" T. T! h$ u0 y所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。  t+ t/ V5 d! f. T& c; m" k
    require_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。+ h5 G' I3 n6 m( u0 {) H
    eosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
    " m3 t# [2 e; ]9 X; l) Gprivileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13