Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
100 0 0
前提4 @" ?/ v5 ]9 U% k
目标  E6 K) ?, M) C4 M0 c
从基础的智能合约中分析代码结构,了解调用方式和合约的作用。% ?! n3 k- x+ R3 t) z$ v. p
软件版本( V; V6 {+ ]* F- p( a! c+ H
  • eos版本:v1.1.1
  • 操作系统:centos 7
    ! v- N9 ^  z# |6 Q; Q
    $ k9 m/ b/ s# [3 X
    建议阅读前先了解:https://blockflow.net/t/topic/663
    - @* u, ]- ^5 o! i4 X参考文档:) l  K# R* V& S
  • C/C++ API参考
  • 智能合约介绍
    & x$ f- [, T3 x5 H) }! [& x
    2 o+ V. M/ f2 z8 o
    EOSIO提供了一组服务和接口,使合同开发人员能够
    - }% O/ y: Z) x' D, l跨action保持状态。其中包括:
    . z5 y% T& g" R/ n. ^% E
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件
    ( N( D8 J# ]+ ~2 f: P- q; e$ Z2 O0 x
    简介7 l' R" _/ W& u4 q! q" u/ {( Y% k
    bios全称是:Basic Input/Output System(基本输入/输出系统)。( x- R% H: j" E& D
    部署方式
    ! K* D; ]6 ~' Vcloes set contract eosio ./contracts/eosio.bios/ -p eosio0 f  p, C- o2 ?
    源码分析
    : e' N/ G& Y; L/ i: C: X/ `项目结构
    8 s! {4 L3 L- t8 |! ~6 U├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。: ?) r6 \, W0 k- u6 p( Z3 [
    ├── eosio.bios.abi 数据结构和接口
    - I. E( d6 x  R1 U! {: _, Y0 J" f├── eosio.bios.cpp 核心逻辑代码4 T2 f' B6 W( \% O/ d0 F
    └── eosio.bios.hpp 头文件类及其成员声明, s, |; b& Y% m9 O8 [
    核心eosio.bios.hpp0 n$ w8 U+ c% f
    #pragma once
    ) x# G* y$ f' @! B#include ' E* U) s$ X9 \2 o" Q
    #include
    6 X# k! ~# t6 y/ L8 p0 Cnamespace eosio {
    9 U- ?2 t- r# u# W   class bios : public contract {
    & M+ S4 z* ?5 d4 V9 a  j# V; l2 O- g      public:2 \( g( ~! V6 u8 U0 [. }' ^* O
             bios( action_name self ):contract(self){}
    . C9 |9 l& w/ q5 F8 Z) T0 {2 ?        
    * w0 S9 S( O. k4 L0 u8 A7 f1 E+ k4 P         //设置账号权限2 V3 ]: x; v2 r# T7 s4 ]
             void setpriv( account_name account, uint8_t ispriv ) {' K4 i7 v: P6 p7 ^% t4 {" Z
                require_auth( _self );
    ; c, l7 ~( F% g9 T) l/ l8 E            set_privileged( account, ispriv );
    - [/ f8 C  _! s, Q: ~         }
    - J' C( O4 q- e; y" D$ f+ p8 J         //限制账号资源" F( i7 L6 v$ k; v2 \, }( J2 {
             void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {
    + b2 C2 A8 y, a) N( s7 x7 @            require_auth( _self );
    ; I- B8 z$ X& v, n2 [            set_resource_limits( account, ram_bytes, net_weight, cpu_weight );$ h; R$ {- p% [* B  V
             }
    $ p! e" o7 \  e6 C         //设置区块链资源,无任何操作,暂时无效  `; k9 d8 P' g. ?; [
             void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {" R/ ?% R! b' L+ p9 W5 c! n
                (void)ram; (void)net; (void)cpu;# b, `/ I8 m; a# X; X$ S
                require_auth( _self );
    # p7 b* J+ t/ k5 F& W$ T         }' _) M+ S/ D7 n, n/ _! _. W
             //设置生产节点' F: V4 P8 |1 W, D& ~$ p9 D
             void setprods( std::vector schedule ) {
    . b7 a* ^3 }& C% Z4 p            (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)0 E, ~8 _. g, t7 l
                require_auth( _self );; s& O! S$ f1 ^6 r0 k
                constexpr size_t max_stack_buffer_size = 512;
    7 U8 j- Y$ x2 z# }- H            size_t size = action_data_size();
    , z' ^" S" p6 r5 [( D8 y* H' O1 ?. F            char* buffer = (char*)( max_stack_buffer_size 0 p6 ?( e$ Z, Z5 z) B
    所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。
      ?4 r; @: H: z. T1 Krequire_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。
    % Y0 R. U  d& S- x# aeosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。5 U1 ^+ r3 i) t; Q) N: ?4 U& F5 @
    privileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13