Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
211 0 0
前提7 N6 L8 n; o0 M/ q  r
目标& ?9 d  n$ L* S, X  l
从基础的智能合约中分析代码结构,了解调用方式和合约的作用。
9 D8 H1 C" B6 O8 @) ?- x: w软件版本
! O3 y0 F( Q' }+ w  z
  • eos版本:v1.1.1
  • 操作系统:centos 7
    7 g% A( H$ ?$ e' L4 |  m
    1 U' w6 L; O8 b( r9 [
    建议阅读前先了解:https://blockflow.net/t/topic/663
    ; ^( U, O6 I# g: \9 ?5 Z- m/ ^参考文档:8 A9 q" d9 X* t- K7 n4 ^8 V" @
  • C/C++ API参考
  • 智能合约介绍
    9 L. C2 n4 h# `, x5 A% A8 w7 C

    " [( q: N$ C, Z* i1 }: |% }EOSIO提供了一组服务和接口,使合同开发人员能够
    $ `& y. h# y: u2 w跨action保持状态。其中包括:: T* R; j; I  Z# S& |; [/ K
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件
    3 o4 E8 I/ O% b6 b. ~  h* u% J' q8 u
    简介: {1 U: |* n6 j$ q( m8 j' B
    bios全称是:Basic Input/Output System(基本输入/输出系统)。/ l3 |- \4 d& ~% b* Y% B% P
    部署方式$ ^+ l5 i& X- J
    cloes set contract eosio ./contracts/eosio.bios/ -p eosio" Y( E& \9 V% Q. p. L3 _; L4 F
    源码分析
    " \: b; G) c! |项目结构( @" |/ v  D" S7 U: g
    ├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
    2 s5 U' x4 [' G├── eosio.bios.abi 数据结构和接口% h7 j0 Y  }5 Z( m" R9 W
    ├── eosio.bios.cpp 核心逻辑代码
    - K  A9 W0 ]2 [9 X' P1 e7 @* W. r5 \└── eosio.bios.hpp 头文件类及其成员声明
    0 @+ g0 `2 |7 V2 G7 ]( E核心eosio.bios.hpp
    ( @" x! ~( C- M0 R+ X; N) a#pragma once
    ' \$ a5 |' ~% h( s#include
    ! [% H& x6 b* {/ R8 V" q0 S#include 0 q6 b' z! Z3 [0 H! b; O
    namespace eosio {
    : g: S5 ~" _) G3 w+ H3 L   class bios : public contract {# `5 ]) t$ ?$ k# F: O2 w5 S$ |
          public:
    % ^8 f- K/ Z% O- U* C9 b         bios( action_name self ):contract(self){}
    3 C& }* T( q* P- c9 f. M$ u- \/ P        . t" @2 x- y. g" d# {3 R, ]
             //设置账号权限
    % x/ I# n: k# E  o) o" {% {         void setpriv( account_name account, uint8_t ispriv ) {
    9 V& _: p# C+ P3 d            require_auth( _self );
    0 O  v) ^' M0 m            set_privileged( account, ispriv );
    4 K# V1 U% V! B) U         }
    ! c( {/ F' Z% r0 e7 A         //限制账号资源
    ' e9 i& L4 h/ ]5 z& f         void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {
    - ~; Y7 ]. w" O2 O0 {9 ~            require_auth( _self );
    , Z/ `$ h& _, q9 r            set_resource_limits( account, ram_bytes, net_weight, cpu_weight );
      y. f6 e1 e1 |! ]. s) v, I6 d6 ?         }8 s$ w8 |2 v+ Z( F" x; R4 N9 u
             //设置区块链资源,无任何操作,暂时无效. c: X0 n3 _  s6 B3 A
             void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {! Q2 n( c" @# Z: i% z0 W( k
                (void)ram; (void)net; (void)cpu;
    3 G+ ~5 a1 d  g3 `1 B& e: U) b            require_auth( _self );
    : N" M" ~5 v* M  U1 X# Q) d4 i         }
    4 ^/ {% D! i! m% ]7 K* h         //设置生产节点" v% R: c% t( ~0 G' X$ |
             void setprods( std::vector schedule ) {
    7 y0 c7 F7 S! _1 o+ N. v            (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)
    - u! W8 O. ^. c: u4 s0 G" N5 l5 }% I, `            require_auth( _self );
    * p- p: R9 K% I% r9 T" {            constexpr size_t max_stack_buffer_size = 512;7 I1 Q8 M: i" D6 k; y
                size_t size = action_data_size();
    , e( q7 P9 q! U* L8 z0 j5 R            char* buffer = (char*)( max_stack_buffer_size
    8 o. m8 k3 {  K" |( u, L9 O! @  ]所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。6 M  m* N* K( ?8 C' g/ l) Z/ Q
    require_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。
    6 G" K5 V' q. Q9 q) B' reosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。
    ' z' h. X' Q1 i' C- m8 rprivileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13