Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
213 0 0
前提2 t9 {( q% T; w& ^, M, r+ e+ \
目标
7 n) K2 C& q9 h' T从基础的智能合约中分析代码结构,了解调用方式和合约的作用。
5 k9 V) ~: Z. Z( i& d软件版本/ e+ ?5 g0 O3 b3 q/ J
  • eos版本:v1.1.1
  • 操作系统:centos 7
    / {) @1 _! |( F. R' R3 A9 F& Z
    . ~' A( b" {$ {. j
    建议阅读前先了解:https://blockflow.net/t/topic/663
    # a0 z+ n. [% V! l3 Q参考文档:  N% b6 k# g4 q; C$ N9 T  c
  • C/C++ API参考
  • 智能合约介绍
    $ N1 |8 r( H5 q4 }8 t6 j
    3 }: V0 T6 W1 Y' J5 a% _. H1 E, S
    EOSIO提供了一组服务和接口,使合同开发人员能够
    3 B2 H* Z# f! z5 b跨action保持状态。其中包括:$ Z2 Y& a% B, Q" F+ g
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件
    ; n8 T1 j/ [/ C) X' j( a
    7 k" W& _6 y$ `) q4 [6 \简介/ H3 s; c3 ^/ \  k: |6 E$ \( Y1 K
    bios全称是:Basic Input/Output System(基本输入/输出系统)。8 m7 @& z- y3 Z! v; K& f
    部署方式1 R, _1 X/ z$ O9 E! h. H- J3 v
    cloes set contract eosio ./contracts/eosio.bios/ -p eosio
    ) P  q" R; o0 n3 q/ v! ^源码分析# K5 s* L4 Y9 g; B6 ?, b! o1 Y
    项目结构
    ) R0 d+ a5 s/ j, _* ^. q├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
    ! {9 G* O9 A. @, N├── eosio.bios.abi 数据结构和接口
    ) N  {  q( \) G├── eosio.bios.cpp 核心逻辑代码
    $ S. n0 [  f' }0 f4 P7 P" N└── eosio.bios.hpp 头文件类及其成员声明
    1 b# d0 b! }" b, X! }0 I9 _核心eosio.bios.hpp& g; A3 P! v7 [: Z6 C4 j! z
    #pragma once/ n8 M" C/ J% P- V
    #include
    * J9 s& o5 p4 t* F6 N7 u1 {#include
    1 J8 m5 X; p7 p- r8 y9 d4 Mnamespace eosio {& b- m. P6 T1 C/ H
       class bios : public contract {; T7 V5 }3 O) A. l9 e) W
          public:
    ! u- m) g9 }2 [( f# c) Q$ T         bios( action_name self ):contract(self){}2 V2 ]; i' h4 [; M+ s
            
    & R: }, Z1 H, w3 W* K, E         //设置账号权限
    9 |. ^2 X/ k) ?+ R( V         void setpriv( account_name account, uint8_t ispriv ) {
    . |2 G1 T7 B3 H# V9 k- [) U            require_auth( _self );
    + G' ?, R) r) R) E3 Z" c+ _& W4 ~# t            set_privileged( account, ispriv );2 ^! _% G% r, I0 A" `* j
             }
    ; ]0 w% z. l9 L3 V* |         //限制账号资源
    4 {# r/ q" l/ W$ k+ O         void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {
    # {3 w' }) h6 d! K, W5 u+ l            require_auth( _self );
    # V5 \# }9 S+ {# K5 S6 N8 _& Q: F* _            set_resource_limits( account, ram_bytes, net_weight, cpu_weight );
    * n: @3 h% U9 l0 t, }         }$ k  M. x, E) m& B
             //设置区块链资源,无任何操作,暂时无效4 ~7 {  T6 d6 C/ O# p
             void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {
    1 W! W  M7 v  e# ]: [) ?5 a4 h: n" C            (void)ram; (void)net; (void)cpu;! v8 |6 l' c+ t
                require_auth( _self );0 X# B/ x. p4 p% h$ J+ O2 y5 s
             }
    - `+ {- G* x2 V7 V         //设置生产节点
    2 t6 U9 L0 @2 W         void setprods( std::vector schedule ) {1 u# Y  Y. d% C+ R3 I* |6 }
                (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)* m8 O$ q1 r: W  q3 i* j# q, r+ ~1 m
                require_auth( _self );
    # _8 O: h& N4 R/ \! |  L% M            constexpr size_t max_stack_buffer_size = 512;1 G- `7 t2 J5 ]" J5 r6 \
                size_t size = action_data_size();
    1 u& ^  n/ t/ Q  v* R            char* buffer = (char*)( max_stack_buffer_size
    5 @7 _+ I5 e! w5 P% N所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
    4 Q( `) t6 d  j6 prequire_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。
    - C% p1 h9 w; aeosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。; j3 c0 F/ z" \" t- i
    privileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13