Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

eosio.bios源码分析

温室小书生室d
201 0 0
前提% V8 F) Z0 f* t) z
目标
% M& m1 Z$ `& B9 X3 t, c$ {从基础的智能合约中分析代码结构,了解调用方式和合约的作用。# c9 o$ j) E+ a/ U( z
软件版本. l4 u. _* C1 X8 Q
  • eos版本:v1.1.1
  • 操作系统:centos 7- D6 J% {# b: O
    4 b# z* Q$ M4 S  B7 v; D) Y
    建议阅读前先了解:https://blockflow.net/t/topic/663
    * u3 A" u; v: V9 j/ z3 V参考文档:
    & W9 `9 k9 j0 w; O1 M. [; l
  • C/C++ API参考
  • 智能合约介绍
    + ?7 A5 L) w0 F! V( U5 A& J* o9 R

    % Y1 Z4 g! P/ _8 d4 NEOSIO提供了一组服务和接口,使合同开发人员能够& u* y4 }/ T+ I. m
    跨action保持状态。其中包括:- [$ W! U  h) V& I/ C2 o; m  y
  • 提供在数据库中保持状态的服务
  • 增强查询功能以查找和检索数据库内容
  • 针对以上功能提供C ++ API,供合同开发人员使用 /eos/contracts/eosiolib/.hpp,.cpp 文件
  • 访问核心服务的C API,对库和系统开发人员有用 /eos/contracts/eosiolib/*.h 文件
      G5 A! z; E. @- e
    # @; o4 Y7 ^9 Z- Y/ ~简介
    ' ^; m% N9 a7 _3 M* O% dbios全称是:Basic Input/Output System(基本输入/输出系统)。
    " I" G* z5 n5 V$ |) C' s% y  W" S部署方式
    ' O$ q( }& J: acloes set contract eosio ./contracts/eosio.bios/ -p eosio  V9 Y+ Y8 n1 `
    源码分析1 q$ k4 Y# Q* Z$ }8 K% t
    项目结构
    ; L8 f' p7 @5 I) a' g4 C3 u├── CMakeLists.txt 产生Makefile文件,通过make命令编译和链接所需要程序。
    ( J0 d8 G8 o; t; d& S+ P8 E├── eosio.bios.abi 数据结构和接口
    1 i# R1 \$ G' {5 n- d3 R├── eosio.bios.cpp 核心逻辑代码
    7 L5 ?% g- ?; t└── eosio.bios.hpp 头文件类及其成员声明8 i- V6 y5 n# P0 r- v; M
    核心eosio.bios.hpp
    9 z% b1 B! T6 h+ u  n* e#pragma once
    & @  a3 Z/ c3 O- |4 A# h9 r#include
    0 n' _! c- R$ F" s+ i; \#include 2 o0 X2 L' b4 ?/ b- l: `2 R' Y
    namespace eosio {; M. E3 H  c: B" b# D; c( @
       class bios : public contract {  F! B! S* n5 |7 J, X; `
          public:
    7 c" [$ W* R( p$ p5 S         bios( action_name self ):contract(self){}/ X- J/ c: M, s. E5 e
            ( G9 R" g1 L6 T
             //设置账号权限1 X: O5 T. O! J. K) ]) `8 [6 e
             void setpriv( account_name account, uint8_t ispriv ) {. k$ k9 h2 s3 s1 E- A+ L: u- v  p: Y
                require_auth( _self );
    , N1 F  a- ]! V) N7 {+ `8 L2 F            set_privileged( account, ispriv );5 o9 N: c9 W; i7 \7 B7 b
             }
    . G6 r9 B7 B/ R$ T, V3 W         //限制账号资源* i. |+ Z( |' y+ R& ]4 M
             void setalimits( account_name account, int64_t ram_bytes, int64_t net_weight, int64_t cpu_weight ) {
    # |4 }6 P- k' o) a: t0 M/ j# [- r            require_auth( _self );2 M! \' Q1 u' V
                set_resource_limits( account, ram_bytes, net_weight, cpu_weight );1 Q2 u7 f" n$ }1 I
             }8 I' T* R' T# `7 T4 C- W. a
             //设置区块链资源,无任何操作,暂时无效6 W/ _, n  D! J8 B2 G; d; u! W
             void setglimits( uint64_t ram, uint64_t net, uint64_t cpu ) {
    3 Y: ?' i7 N3 H1 q. ~            (void)ram; (void)net; (void)cpu;' I% I; T! X7 v/ k' n  M! U2 d
                require_auth( _self );: g8 }3 X1 y! g
             }7 u+ I  t" c) W1 U9 n* X2 G7 ~. E
             //设置生产节点- `( ?2 y% [; t, N7 W* c" ~
             void setprods( std::vector schedule ) {
    * O% S! _" d4 X; \, e: e            (void)schedule; // schedule argument just forces the deserialization of the action data into vector (necessary check)/ ~  F: {" ?# u; f/ [4 l9 C4 n
                require_auth( _self );. J& y9 s& t* d! |7 Y/ f, a$ b$ u
                constexpr size_t max_stack_buffer_size = 512;- K  K- T- {- ]' A( r$ t
                size_t size = action_data_size();
    " g% \; s7 Z% `* a9 J* c; R6 ~            char* buffer = (char*)( max_stack_buffer_size ) M$ A  N$ b3 f* o2 j* |
    所有方法通过eosio.bios.cpp中的EOSIO_ABI宏进行封装,映射给开发者使用。( E6 |  {$ G' s) [' @3 P
    require_auth(),通过C/C++ API参考查询得知,此方法定义在action.h中,作用为验证提供的身份验证集中是否存在指定的帐户。' W& M9 o; _7 `+ O( H, V. b$ Q; K2 @
    eosio.bios中所有具体的操作,都定义在privileged.h中,在此都为调用。4 i' }* {2 Q$ F1 V" j$ S
    privileged.h包含的具体方法的作用和参数定义可以结合 https://developers.eos.io/eosio-cpp/reference#privileged 和源码一起看。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13