EOS
EOS区块链
thefist11
难以忘记编程路上领导和好友的细致指导,所以必须努力!(真诚希望大家多多指导!)
展开
-
EOS 源代码解读 (3)数据结构-区块
1.chain/types.hpp using block_id_type = fc::sha256; using checksum_type = fc::sha256; using checksum256_type = fc::sha256; using checksum512_type = fc::sha512; using checksum160_type = fc::ripemd160; using transaction原创 2021-09-21 10:00:10 · 325 阅读 · 0 评论 -
EOS 源代码解读 (2)插件-流程
application启动插件的流程:step1. 调用各个插件的initialize()step2. 调用各个插件的initialize_logging();step3. 调用各个插件的startup()step4. exec()1. initializeprograms\EOS\main.cppint main(int argc, char** argv){ try { if(!app().initialize<chain_plugin, chain_api_p原创 2022-02-17 07:29:03 · 145 阅读 · 0 评论 -
EOS 源代码解读 (2)插件-插件模板
eos/plugins/template_plugin定义了eos项目中所有插件的模板/** * This is a template plugin, intended to serve as a starting point for making new plugins */class template_plugin : public appbase::plugin<template_plugin> {public: template_plugin(); virtual原创 2022-02-13 23:26:53 · 311 阅读 · 0 评论 -
出块过程(2)nodeos 服务器接收消息
1. 步骤在nodeos的main函数中启动http_plugin插件,注册处理http请求的回调函数(handle_http_request),然后监听socket通信端口,等待建立客户端远程连接。step1. 通过http_plugin插件接收客户端发过来的http请求报文step2. 解析请求的URL地址和数据信息step3. 调用对应的回调函数处理,并将结果返回给cleos客户端。void http_plugin::plugin_startup() { // 注册htt.原创 2022-01-04 06:24:08 · 104 阅读 · 0 评论 -
出块过程 (1)close发送消息
1. 以转账为例,说明EOS消息处理流程step1. cleos客户端发起转账命令,step2. 解析transfer命令,通过create_transfer函数将交易发送者、交易接收者、token数量等信息封装成mutable_variant_object对象step3. 调用send_action函数,将交易信息发送到服务器端main→send_actions→push_actions→push_transaction→call→do_http_call→do_connect(httpc.cpp原创 2022-01-03 10:21:51 · 193 阅读 · 0 评论 -
EOS 智能合约源代码解读 (13)system合约“native类的关键方法”
1. native.hpp class [[eossys::contract("eossys.system")]] native : public eossys::contract { public: /** * New account action is called after a new account is created. This code enforces resource-limits rules * for new原创 2021-10-17 21:22:14 · 190 阅读 · 0 评论 -
EOS 智能合约源代码解读 (12)system合约“native.hpp”
1. native类//system_contract合约类继承于native,class [[eosio::contract("eosio.system")]] system_contract : public native //native合约类继承于eosio::contract class [[eosio::contract("eosio.system")]] native : public eosio::contract2.2.1//权限等级权重struct permissio原创 2021-10-13 22:39:05 · 178 阅读 · 0 评论 -
EOS 智能合约源代码解读 (11)wrap合约“wrap源代码”
wrap.hppclass [[eossys::contract("eossys.wrap")]] wrap : public contract { public: using contract::contract; [[eossys::action]] void exec( ignore<text_name> executer, ignore<transaction> trx ); using原创 2021-10-11 23:01:31 · 171 阅读 · 0 评论 -
EOS 智能合约源代码解读 (11)wrap合约“action_wrapper类”
1. 功能对于许多用例,需要从合同代码向另一个合同发送新操作。这是合同之间能够积极沟通的唯一途径。它为特定智能合约代码的特定操作创建“操作模板”,然后可使用该模板来调用此操作。第一个参数是动作名称,第二个参数是动作的方法_declaration_。2. action_wrapper 类的定义 template <eossys::name::raw Name, auto Action> struct action_wrapper { template <type原创 2021-10-11 22:58:27 · 2769 阅读 · 0 评论 -
EOS 智能合约源代码解读 (10)token合约“几种关键操作”
1. create:负责创建资产void token::create( const text_name& issuer, const asset& maximum_supply){ require_auth( get_self() ); name issuer_id(get_account_id(issuer.c_str(), issuer.size())); auto sym = maximum_supply.symbol; check( sym.原创 2021-10-11 22:48:24 · 3041 阅读 · 0 评论 -
EOS 智能合约源代码解读 (10)token合约“简介”
1. bios是一个系统合约样本一个极简的系统合约,仅提供对链引导操作。允许使用链无关的方法来引导链。 class [[eosio::contract("eosio.token")]] token : public contract { public: using contract::contract; [[eosio::action]] void _create( const text_name& issuer, con原创 2021-10-11 22:39:11 · 2854 阅读 · 0 评论 -
多索引表 (10)iterator迭代器多索引
multi_index_example.hpp#include <eosio/eosio.hpp>using namespace eosio;// multi index example contract classclass [[eosio::contract]] multi_index_example : public contract { public: using contract::contract; // contract class con原创 2021-10-10 21:45:51 · 175 阅读 · 0 评论 -
多索引表 (9)iterator迭代器
multi_index_example.hpp#include <eosio/eosio.hpp>using namespace eosio;// multi index example contract classclass [[eosio::contract]] multi_index_example : public contract { public: using contract::contract; // contract class con原创 2021-10-10 21:44:31 · 95 阅读 · 0 评论 -
多索引表 (8)表操作
1. EOSIO Multi-Index API使用Multi-Index表提供了C++接口,它的原型实际是Boost Multi-index Containers;Multi-Index DB是一种在RAM中缓存状态或数据以便快速访问的方法。它支持创建,读取,更新和删除操作,特点就和它的名字一样——多索引。增加 emplace修改 modify删除 erase查找包括find和get,以及迭代器操作1.1 findconst_iterator eosio::multi_index&l原创 2021-10-10 14:51:53 · 128 阅读 · 0 评论 -
多索引表 (7)创建singleton实例
singleton_example.hpp#include <eosio/eosio.hpp>#include <eosio/singleton.hpp>using namespace eosio;class [[eosio::contract]] singleton_example : public contract { public: using contract::contract; singleton_example( name rec原创 2021-10-10 14:49:41 · 134 阅读 · 0 评论 -
多索引表 (6)定义secondary index
#include <eosio/eosio.hpp>using namespace eosio;// multi index example contract classclass [[eosio::contract]] multi_index_example : public contract { public: using contract::contract; // contract class constructor multi_ind原创 2021-10-10 14:48:18 · 201 阅读 · 0 评论 -
多索引表 (5)创建多索引表
1. 创建表class/struct 定义一个持久化对象。该对象需要有一个const的成员作为主键,类型为uint64_t二级主键可选,提供不同的键类型为每个二级索引定义一个键导出器,键导出器是一个函数,可以用来从Multi_index表中获取键multi_index_example.hpp#include <eosio/eosio.hpp>using namespace eosio;// multi index example contract classclass [原创 2021-10-10 14:47:31 · 256 阅读 · 0 评论 -
多索引表 (4)multi_index.hpp源代码
1. 在线hpp源代码https://developers.eos.io/manuals/eosio.cdt/v1.7/group__multiindex1.1 get_code和get_scope//Returns the code member property.name eosio::multi_index< TableName, T, Indices >::get_code() const//Returns the scope member property.uint64原创 2021-10-10 14:44:20 · 114 阅读 · 0 评论 -
多索引表 (3)multi_index示例
1. Template parametersTableName - name of the tableT - type of the data stored inside the tableIndices - secondary indices for the table, up to 16 indices is supported hereosio::multi_index< TableName, T, Indices >::multi_index( name code,原创 2021-10-10 14:34:09 · 120 阅读 · 0 评论 -
多索引表 (2)基本概念
1. 主键和二级索引1.1 multi_index的主键必须是唯一的,且类型是uint64_t,且须实现primary_key()方法返回主键字段。eosio::multi_index支持类似的语义,但是该对象的主键在eosio::multi_index容器必须是唯一的无符号64位整数。eosio::multi_index中的对象容器按主键索引按无符号64位整数主键的升序排序。1.2 二级索引Multi-Index表最多可以使用16个二级索引,可以通过多索引进行排序;得为每个二级索原创 2021-10-10 14:31:03 · 265 阅读 · 0 评论 -
多索引表 (1)boost::multi_index多索引容器
1. 定义一个名为multi_index_container的类模板,它支持构建容器来维护一个或多个具有不同排序和访问语义的索引。每一个multi_index都相当于传统数据库的一个数据表(table),但将传统数据库的行与列的形式改为了单纯的列。也就是说multi_index是一个线性排列的表,只有一列,每一行都只存储一个对象。1.1 Iterators(迭代器)通过迭代器来操作数据表中的每个对象。struct service_rec { uint64_t pkey;原创 2021-10-10 14:23:08 · 572 阅读 · 0 评论 -
EOS 智能合约源代码解读 (9)boot合约
1. 作用激活 protocol features 性质activating desired protocol features prior to deploying a system contract * eossys.boot is a extremely minimalistic system contract that only supports the native actions and an * activate action that allows activating原创 2021-10-01 10:54:57 · 779 阅读 · 0 评论 -
EOS 智能合约源代码解读 (8)bios合约
class [[eosio::contract("eosio.bios")]] bios : public eosio::contract { public: using contract::contract; [[eosio::action]] void xx_setabi( text_name account, const std::vector<char>& abi ); [[eos...原创 2021-10-01 10:40:55 · 213 阅读 · 0 评论 -
EOS 智能合约源代码解读 (7)合约开发示例
官方提供了一个工具eosiocpp,它可以按照固定的模板创建一个新的智能合约。eosiocpp可以创建2个合约文件(曾经是三个文件),它们仅仅包含了合约的框架。1. HelloWorld合约代码如下:testcc.hpp:/** * @file * @copyright defined in eos/LICENSE.txt */#include <eosiolib/eosio.hpp>testcc.cpp:#include <eosiolib/eosio.hpp&g原创 2021-10-01 10:45:50 · 851 阅读 · 0 评论 -
EOS 智能合约源代码解读 (6)合约之action
1. 动作 ( action ) 是 EOS 合约的灵魂,是 EOS 的基础组成单位1.1 一个动作就是一个公开的 ( pubic ) 的 C++ 类的成员方法必须使用 [[eosio::action]] C++11 特性修饰,否则就是一个普通的类成员函数访问级别必须是公开的 public必须没有任何返回值,也不能返回任何值,也就是说,必须使用 void 作为返回值可以接受任意数量的参数必须在 EOSIO_DISPATCH 中导出eg.#include <eosiolib/eosi原创 2021-10-01 10:12:17 · 322 阅读 · 0 评论 -
EOS 智能合约源代码解读 (5)class contract
所有合约的基类#define CONTRACT class [[eosio::contract]] // 合约#define ACTION [[eosio::action]] //动作#define TABLE struct [[eosio::table]] //表namespace eosio{/** * new contract should derive from this class, so it can make use of eosio_ABI macro. */cla.原创 2021-10-01 07:50:31 · 270 阅读 · 0 评论 -
EOS 智能合约源代码解读 (4)symbol.hpp
token的名称和数字精度. 名称大写 /**class symbol represents a token and contains precision and name.When encoded as a uint64_t, first byte represents the number of decimals, remaining bytesrepresent token name.Name must only include upper case alphabets.from_str原创 2021-10-01 07:42:01 · 173 阅读 · 0 评论 -
EOS 智能合约源代码解读 (3)asset.hpp
1. 合约中关于资产的数据结构的定义输入字符串: “10.0000 CUR”输出:amount = 10, symbol(4,“CUR”)/**asset includes amount and currency symbol*/struct asset : fc::reflect_init{ // 通过给定的符号名称以及资产数量构建一个新的资产对象。 explicit asset(share_type a = 0, symbol id = symbol(CORE_SYM原创 2021-10-01 07:22:11 · 283 阅读 · 0 评论 -
EOS 智能合约源代码解读 (2)name.hpp
/// Immutable except for fc::from_variant. struct name { private: friend struct fc::reflector<name>; friend void fc::from_variant(const fc::variant& v, tafsys::chain::name& check); void set( std::string_view str );原创 2021-09-30 23:53:15 · 237 阅读 · 0 评论 -
EOS 智能合约源代码解读 (1)总体说明
1. 基本定义在eos私有节点操作中,我们通常是一个合约对应一个合约账户,并且一个账户中只能部署一个智能合约。如果在同一个账户部署多个合约,那么最后部署的合约会覆盖掉之前的合约。每个帐户都至少链接到一个公钥,而这个公钥又链接到钱包里面的一个私钥。2. EOS源代码合约2.1 token合约: 负责发现币种2.2 msig提案合约提案合约同样也是cleos multisig命令调用的系统合约,可用于提案、通过/不通提案、执行多重签名交易和用户权限管理用的。每一笔Transaction都会被相应的原创 2021-10-01 10:34:38 · 1355 阅读 · 0 评论 -
EOS 源代码解读 (4)交易数据结构
struct transaction_receipt_header { enum status_enum { executed = 0, //transaction成功执行,没有错误发生 soft_fail = 1, // hard_fail = 2, delayed = 3, expired = 4 }; fc::enum_type<uint8_t,st原创 2021-09-21 10:08:17 · 178 阅读 · 0 评论 -
EOS 源代码解读 (2)plugin插件
1. abstract_plugin 类class abstract_plugin { public: enum state { registered, ///< the plugin is constructed but doesn't do anything initialized, ///< the plugin has initialized any state required but is idle started, ///<原创 2021-09-19 22:36:24 · 189 阅读 · 0 评论 -
EOS 核心功能 (2) nodeos
1. nodeos服务器端nodeos是运行一个由多个插件配置的节点的EOS.IO核心守护进程,其主要用途是生产区块、提供专用的API端用于接受客户端的远端请求、打包区块和进行本地部署。nodeos 是服务器端区块链节点组件(component),这个组件支持在运行的时候加载各种插件(plugin)。1.1 nodeos插件将操作系统运行起来,我们才能在上面进行开发。操作系统上面加载了一些插件,通过这些插件,我们才能和操作系统交互。history_api_plugin(交易历史 API 插件)原创 2021-09-19 20:29:47 · 344 阅读 · 0 评论 -
EOS 链上治理
1. 定义实现了一个治理过程,有效地影响到现有的区块生产商。在被定义治理流程之外,之前的区块链依赖于临时的、非正式的、经常有争议的治理过程,从而导致不可预知的结果。治理权力源来自于将权力代理给区块生成者的令牌持有者。区块的生成者被给予有限的和被监督的权限来冻结帐户,更新有缺陷的应用程序,并提出对底层协议的变更。EOS.IO系统的一部分是区块生成者的选举。在对区块链进行任何更改之前,这些区块生成者必须批准它。如果区块生成者拒绝做出让令牌持有人所期望的改变,那么他们可以被投票否决。如果区块生成者未经令牌原创 2021-09-06 21:22:00 · 269 阅读 · 0 评论 -
EOS 跨链
1. 跨链交互简化消息存在证明和消息序列证明。2. 轻客户端验证的默克尔证明(LCV)一个更加理想的状态是,对于交易所自身所维持的链来说,如果可以将轻量级的默克尔存款证明应用其中,那么就不必完全依赖全节点矿工,全节点矿工同步时也能维持尽可能小的开销。2.1 目标能产生相对轻量级的交易存在证明,并且该证明能被其他人通过跟踪一个轻量级数据集进行验证。既然如此,目的就是证明一个特定的交易是被一个特定的区块包含其中,并且这个区块是被包含在已经验证的特定区块链历史中。2.2 EOS vs Bitcoin原创 2021-09-05 22:03:19 · 355 阅读 · 0 评论 -
EOS API
1. 根据所实现插件的不同,EOS RPC API被归入不同的分组CHAIN:由chain_api_plugin实现,主要提供区块链数据的访问功能HISTORY:由history_api_plugin实现,主要提供区块链历史交易的访问功能NET:由net_api_plugin实现,主要提供P2P网络管理功能PRODUCER:由producer_api_plugin实现,主要提供出块管理功能DBSIZE:由db_size_api_plugin实现,主要提供数据库相关功能1.1 CHAINCH原创 2021-09-04 00:14:24 · 205 阅读 · 0 评论 -
EOS 消息设计(3)并行处理之状态评估
1. 部分区块链状态评估Partial evaluation of Blockchainstate(only needful)EOS.IO系统允许任何完整的节点选择性的运行任意应用子集。传递给其他应用的消息将被安全地忽略,因为应用的状态完全来自于传递给它的消息。出于将交易状态显示给用户的目的,交易应用的开发者将维护一个完整的节点。这款交易应用不需要与其他社交媒体应用关联状态。对于多帐户之间的通信有一些重要的影响。最重要的是,不能假定另一个帐户的状态在同一台机器上是可访问的。它还意味着,虽然允许原创 2021-09-03 00:07:56 · 145 阅读 · 0 评论 -
EOS 消息设计(2)并行处理
1. 消息定义消息是账户与账户之间的沟通语言.·每个账户都可以发送结构化的消息给任意其他账户·每个账户也可以定义处理消息的脚本·每个账户有自己的私有数据库1.1 消息处理脚本智能合约 = 消息+消息处理脚本消息处理脚本就是在一个账户收到了消息之后怎么处理消息。处理脚本本身也可以发消息给其他账户。eg. 一个非常简单的合约:a给b转账50eos,有些消息是可以由处理消息的脚本来发的,比如说b在收到50eos这个消息后有个消息处理脚本会自动向c发送25个eos。1.2 只读消息的并行处原创 2021-09-01 23:48:35 · 313 阅读 · 0 评论 -
EOS 消息设计(1)消息定义
1. EOSEOS是作为一个传递账户间已认证信息的平台。脚本语言和虚拟机的实现将独立于EOS操作系统技术,任何开发语言或虚拟机,只要有适当的、性能足够的沙箱,都可以通过API与EOS集成在一起。 2. 消息定义消息就是账户与账户之间的沟通语言,每个账户都可以发送结构化的消息给任意其他账户,每个账户都可以定义处理消息的脚本,每个账户还有自己的私有数据库,消息处理脚本也可以给其他账户发消息,最终 消息和消息处理脚本组成了EOS的智能合约。我来进一步解释一下,发消息很容易理解,消息处理脚本就是在一个账原创 2021-08-31 23:45:40 · 299 阅读 · 0 评论 -
EOS开发步骤(1) 开发说明
1. 开发步骤创建钱包创建帐户部署token合约,以便区块链准备好创建新的token。创建新token。将新token分配给创世帐户(eosio)。在用户之间转移token。(创建交易、创建签名交易)检查余额等。1. 1 多节点网络1.2 API ReferenceCleos Commandhttps://developers.eos.io/manuals/eos/v2.0/cleos/command-reference/get/account.原创 2021-08-30 23:02:47 · 578 阅读 · 0 评论
分享