标签:rac 应该 大数 影响 区块高度 bic 启用 DPoS ida
原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/eos-intro.html
EOS是当下最火的区块链技术,被社会广泛看好为下一代区块链3.0。不同于以太坊的学习,EOS的主语言是C++,本文作为EOS研究的首篇文章,重点介绍EOS的创新点,它的周边生态,各种概念原理的解释,以及它被看好的原因。而针对EOS的源码学习,原理实现以及并行的C++语言的快速学习与掌握,我会在接下来制定一系列学习计划一一付诸实现。
关键字:EOS,DAPP,石墨烯技术,构建本地节点,公链映射,选举,EOS链配置,术语解释
EOS.IO 是由block.one开发的一个基于区块链结构设计的能够支持水平和垂直扩展的去中心化应用的平台。它就像是一个完整的操作系统,可以在上面构建各种应用。EOS.IO提供了账户、认证、数据库,异步通信以及跨平台跨集群的定时应用。它有望支持每秒百万级交易,完全零费率,并可以快速且容易地部署去中心化应用。
以上是我对官方定义的理解,通过这个定义,我们可以抽离出最主要内容,就是EOS的核心竞争力是:
正如在之前的文章中的分析,下一代区块链不是ico,肯定是大规模的各行各业的Dapp的雄起,就像当年互联网革了传统行业的命一样,所以,能够做好大型商业应用的基建工作的公链就是未来区块链的宠儿。目前,呼喊着百万级tps,手续费为0,快速部署Dapp的EOS无疑切中了所有的要点。
下面针对一些名词进行一个解释,以防止混淆:
EOS目前是以太坊ERC20的一个Token,很多看好EOS未来的朋友已经大量买入了此Token(包括我身边很多同事),已成为以太坊Token体系中最强势的一支。在即将到来的5月底,不出意外地话,EOS.IO公链将如期上线,届时,EOS持有者将会通过某种映射方式将资产转移到该公链上。
例如,一个周期我计划发放20枚EOS。在这期间,Bob贡献了4个ETH,而Alice贡献了1个ETH,此周期结束。那么总ETH募集量为5ETH,对应发放一个EOS的等价价值为0.25ETH,因此,Bob会得到16枚EOS,而Alice会获得4枚EOS。
所以,当你花费ETH或者BTC参与了EOS私募,一定是等到它一个周期结束才会进行锚定核算,你才会收到EOS token。
有个有意思的是,在EOS官方问答上,它不允许美国公民、实体将EOS当做一种投机性产品购买,当然了,因为区块链的匿名性,EOS这么说并没有什么意义,估计只是做个态度,对了官方也不建议EOS买卖,但你也控制不了OTC和交易所(总之,EOS是戏精)。
另外,block.one为了保证它们不会购买EOS,不会为投资人支付股息,也不会发起任何形式的回购来操纵币盘,它们打算进行一个独立的第三方审计,将会发布一个独立审计报告提供进一步的保证。
上面讲到了,EOS是存在于以太坊的代币,那么当EOS公链平台推出以后,如何转移这些代币到EOS公币呢?上面我也提到过是通过某种映射方法。那么下面就来具体说说是如何映射的。
2018年6月1日,22:59:59,也就是EOS代币最终的发放周期结束前的23小时倒计时,EOS将被锁定交易,不可被交易。
思考,通过上面的总结作为未来研究EOS的经验,官方讲的内容有多少是做戏,有多少只是提议,毕竟我们是在区块链行业,它无法做到对个人节点行为的控制。所以就以上这句话来讲,它如何控制以太坊EOS代币的交易锁定?我想它是控制不了的,因为交易所和OTC都不会听它的,它最多只是能通过智能合约控制代币发放周期而已。因此,要时刻保持独立思考能力,不要人云亦云,被人洗脑。
我们继续来分析,在上面这个时间点,EOS token的发放将会完成,任何人通过EOS.IO源码启动一个EOS platform的,将能够生成一个JSON文件会映射EOS的公钥为以太坊的EOS token账户的余额。
block.one是EOS.IO公链源码的开发者,它不会配置或启动任何EOS平台,block.one将不会控制何时,如何或者EOS.IO软件是否被使用或实现,或者如何,何时以及是否启动一个EOS platform。因此,您不应该期望,也不能保证您现在或将来会收到任何其他加密token或数字资产(不想对EOS代币负责)。
WebAssembly(缩写Wasm)是一种基于堆栈的虚拟机的二进制指令格式。Wasm设计作为一个便携式的针对高级语言的编译器,例如C/C++/Rust,使各种客户端或服务端应用程序都能够在web中部署。
目前Wasm支持Firefox,chrome,IE以及Safari浏览器。WebAssembly技术是在浏览器中不同于JS的另一种存在,但由于C++的高效,Wasm的效率可能会比JS更高,它就是在浏览器中运行C++程序的意思,目前WebAssembly比较好的编译器是LLVM。
石墨烯技术是新一代的区块链技术,基于DPOS共识算法。目前市场上流行的区块链阵营有三种,一种是第一代以比特币为主的生态体系,他们是基于POW共识,纯粹的去中心化,基于p2p的加密数字货币技术;第二种就是以以太坊构成的生态体系,主要以基于智能合约的ERC20的代币体系,他们是基于POW共识,目前以太坊正准备切换到POW+POS的多共识体系;第三种就是进化到目前最强劲的石墨烯技术生态体系,它是基于DPOS(股份授权证明共识),支持高并发,高性能等大规模工业级商业场景的基础设施,诞生了BTS(BitShare)开源商业系统,Steem去中心化社交网络平台以及EOS。未来会针对石墨烯技术以及DPOS共识做一个专门的博文调查。,目前我们看到的石墨烯技术的几个显著特点是:
第一代比特币体系是非常安全的,但瓶颈很多。相比之下,第二代的以太坊有很多独特的创新点,例如智能合约,然而它历史遭受攻击的次数和影响范围都非常严重。最后说基于石墨烯技术的EOS,它是通过个人持有币的数量进行资源分配(包括存储空间、网络带宽以及算力),没有足够币是无法发起攻击的,而如果大量购币攻击,则相当于已经成为房东却要砸自家房子,是得不偿失的行为。所以EOS在防御攻击方面是具备天然免疫力的。
由于出块权被牢牢掌握在21个超级节点的手里,如果其中某个节点作恶的话是很容易被追踪到的,这个节点作恶的表现可能是在它出块的轮次人为造成了一个分叉,此时,需要21个节点中的15个节点进行确认,通过确认的这一区块被认为是主链上不可逆的一个块,任何不存在该块的都会被看做无效。这样就避免了分叉的可能。
EOS通过石墨烯基础技术,再加上自身的优化,可以达到百万级tps,同时不同于以太坊停留在Paas(平台即服务)的属性,EOS开拓思路增加了SaaS(软件即服务)的能力,加入了Dapp通用的账号体系、权限身份认证、异步通信、自描述数据库、自描述接口以及上面提到的WebAssembly浏览器客户端部署工具包,总之,拥有这一切优势的EOS将真正成为了未来工业级应用的平台。
不过我们也要感谢以太坊提供的智能合约和Dapp的思想,在EOS得到了广泛而有效地发扬,我们可以开发自己的Dapp部署在EOS上,通过持币数量来获得对应比例的资源(包括存储空间,网络带宽以及算力),这是革了AWS SAAS和PaaS的命(恐怕未来AWS只有提供云计算基础设施的市场了)。
不同于以太坊POA,因为以太坊的POA是基于非常小场景的私链或者联盟链的,这与大规模对外公开的公链EOS的场景是不同的。不过在我还未研究过EOS源码的当下来看,DPOS的超级节点的选举以及出块的机制与POA如出一辙。
EOS三个组件:
接下来,我们将构建这些EOSIO组件,并将它们部署在一个主机,通过单个节点对网络(testnet)进行测试与配置。
获取源码
recursive参数会将所有子组件自动克隆下来,最终我们会在本地得到全部完整的源码。
git clone https://github.com/EOSIO/eos --recursive
自动构建源码。
cd eos && ./eosio_build.sh
构建时间较长,最终构建成功的页面如下:
[100%] Built target cleos
Scanning dependencies of target nodeos
[100%] Building CXX object programs/nodeos/CMakeFiles/nodeos.dir/main.cpp.o
[100%] Linking CXX executable chain_test
[100%] Linking CXX executable nodeos
[100%] Built target chain_test
[100%] Built target nodeos
_______ _______ _______ _________ _______
( ____ \( ___ )( ____ \\__ __/( ___ )
| ( \/| ( ) || ( \/ ) ( | ( ) |
| (__ | | | || (_____ | | | | | |
| __) | | | |(_____ ) | | | | | |
| ( | | | | ) | | | | | | |
| (____/\| (___) |/\____) |___) (___| (___) |
(_______/(_______)\_______)\_______/(_______)
EOS.IO has been successfully built. 0:32:57
To verify your installation run the following commands:
/home/liuwenbin/opt/mongodb/bin/mongod -f /home/liuwenbin/opt/mongodb/mongod.conf &
cd /home/liuwenbin/eos/build; make test
For more information:
EOS.IO website: https://eos.io
EOS.IO Telegram channel @ ***EOSProject
EOS.IO resources: https://eos.io/resources/
EOS.IO wiki: https://github.com/EOSIO/eos/wiki
安装开发工具包
sudo apt-get update
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
sudo apt-get install clang-4.0 lldb-4.0 libclang-4.0-dev cmake make libbz2-dev libssl-dev libgmp3-dev autotools-dev build-essential libbz2-dev libicu-dev python-dev autoconf libtool git mongodb
wget 下载llvm-key出错,可以按照提示加入参数--no-check-certificate搞定。
依赖
基于我本机是Ubuntu16.04,除了使用上面的自动编译以外,也可以手动安装,不怕折磨的话。
目前EOS当前版本的依赖包括:
依赖安装请参照官方文档
cd build && make test
这一步是为了验证源码功能完整度,耗时也较久。
sudo make install
命令会被安装在/usr/local。执行完这个命令以后,我们可以在系统任何位置进行命令启用。
构建完成后,会在build/programs/目录中出现nodeos文件夹,这是我们要启动节点的工具。通过以下命令启动你自己的独立节点区块链
cd programs/nodeos && ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin
这条命令中,可执行文件./nodeos后面有很多参数,好看的是后面的plugin是启动时对插件的配置,剩下的参数配置我们会在接下来介绍到。启动以后,日志打印出来相关信息:
liuwenbin@liuwenbin-H81M-DS2:~/work/CLionProjects/github.com/eos/build/programs/nodeos$ ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::c
hain_api_plugin --plugin eosio::account_history_api_plugin
3054170ms thread-0 wallet_plugin.cpp:41 plugin_initialize ] initializing wallet plugin
3054170ms thread-0 http_plugin.cpp:141 plugin_initialize ] host: 127.0.0.1 port: 8888
3054170ms thread-0 http_plugin.cpp:144 plugin_initialize ] configured http to listen on 127.0.0.1:8888
3054170ms thread-0 chain_plugin.cpp:99 plugin_initialize ] initializing chain plugin
3054170ms thread-0 net_plugin.cpp:2628 plugin_initialize ] Initialize net plugin
3054170ms thread-0 net_plugin.cpp:2644 plugin_initialize ] Setting net_plugin logging level to info
3054170ms thread-0 net_plugin.cpp:2669 plugin_initialize ] host: 0.0.0.0 port: 9876
3054170ms thread-0 net_plugin.cpp:2745 plugin_initialize ] my node_id is 86aa711400110362b7a94d9468fc45bdbfa8887a3bdaf9502dbea59694179b09
3054170ms thread-0 main.cpp:90 main ] nodeos version 96ee0325
3054170ms thread-0 main.cpp:91 main ] eosio root is /home/liuwenbin/.local/share
3054170ms thread-0 http_plugin.cpp:213 plugin_startup ] start listening for http requests
3054170ms thread-0 wallet_api_plugin.cpp:70 plugin_startup ] starting wallet_api_plugin
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/create
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/get_public_keys
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/import_key
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/list_keys
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/list_wallets
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/lock
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/lock_all
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/open
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/set_timeout
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/sign_transaction
3054170ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/unlock
3054170ms thread-0 chain_plugin.cpp:178 plugin_startup ]
generating default genesis file /home/liuwenbin/.local/share/eosio/nodeos/config/genesis.json
3054209ms thread-0 chain_plugin.cpp:208 plugin_startup ] starting chain in read/write mode
3054209ms thread-0 chain_plugin.cpp:213 plugin_startup ] Blockchain started; head block is #0, genesis timestamp is 2018-03-01T12:00:00.000
3054209ms thread-0 chain_api_plugin.cpp:62 plugin_startup ] starting chain_api_plugin
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/abi_bin_to_json
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/abi_json_to_bin
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_account
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_block
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_code
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_currency_balance
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_currency_stats
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_info
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_required_keys
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_table_rows
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/push_block
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/push_transaction
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/push_transactions
3054209ms thread-0 account_history_api_plugin.cpp:45 plugin_startup ] starting account_history_api_plugin
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/account_history/get_controlled_accounts
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/account_history/get_key_accounts
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/account_history/get_transaction
3054209ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/account_history/get_transactions
3054209ms thread-0 net_plugin.cpp:2757 plugin_startup ] starting listener, max clients is 25
3054209ms thread-0 producer_plugin.cpp:161 plugin_startup ] producer plugin: plugin_startup() begin
3054209ms thread-0 producer_plugin.cpp:166 plugin_startup ] Launching block production for 1 producers.
*******************************
* *
* ------ NEW CHAIN ------ *
* - Welcome to EOSIO! - *
* ----------------------- *
* *
*******************************
Your genesis seems to have an old timestamp
Please consider using the --genesis-timestamp option to give your genesis a recent timestamp
3054209ms thread-0 producer_plugin.cpp:176 plugin_startup ] producer plugin: plugin_startup() end
eosio generated block bd1a5181... #1 @ 2018-04-13T02:50:54.500 with 0 trxs, lib: 0
eosio generated block a8c18ba3... #2 @ 2018-04-13T02:50:55.000 with 0 trxs, lib: 1
eosio generated block 1e4c703f... #3 @ 2018-04-13T02:50:55.500 with 0 trxs, lib: 2
eosio generated block d4c29cd4... #4 @ 2018-04-13T02:50:56.000 with 0 trxs, lib: 3
下面来逐一分析一下这个日志内容,可以看出EOS启动私链节点是通过插件实现的,在启动私链前,要对插件进行初始化配置,启动各依赖组件处理器。下面来列举一下主要插件内容:
以上出现的所有插件亦可理解为组件。
接着看日志,提示我创世块时间戳过时,可以通过一个参数来修改,下面我尝试修改一下,在以上启动命令加入了参数,重新启动:
--genesis-timestamp 2018-04-13T12:00:00.000
重新启动以后,打印出来的日志中,前面的都是相同的,我们从producer_plugin贴出来是:
862009ms thread-0 producer_plugin.cpp:161 plugin_startup ] producer plugin: plugin_startup() begin
862009ms thread-0 producer_plugin.cpp:166 plugin_startup ] Launching block production for 1 producers.
862009ms thread-0 producer_plugin.cpp:176 plugin_startup ] producer plugin: plugin_startup() end
862501ms thread-0 fork_database.cpp:77 _push_block ] Number of missed blocks: 2783
eosio generated block 8e2a6ce1... #34 @ 2018-04-13T03:14:22.500 with 0 trxs, lib: 33
eosio generated block eb5e67b9... #35 @ 2018-04-13T03:14:23.000 with 0 trxs, lib: 34
eosio generated block 5aa06ff6... #36 @ 2018-04-13T03:14:23.500 with 0 trxs, lib: 35
可以看到,那个关于创世块时间戳的提示已经消失,producer_plugin插件启动开始与完毕。接下来就是
fork_database程序,推送区块,报出了消失区块好2783。TODO:这一行还待未来分析解决。
接下来就是正常出块了,由于我们本地启动的节点一定是具备出块权的(目前只有一个节点未涉及共识),这些块是不包含任何交易信息的,出块速度很快。
断开私链直接按下复制键(Ctrl+C)即可,日志中也有体现:
eosio generated block de403b91... #37 @ 2018-04-13T03:14:24.000 with 0 trxs, lib: 36
eosio generated block f40f0e68... #38 @ 2018-04-13T03:14:24.500 with 0 trxs, lib: 37
eosio generated block c1b717d0... #39 @ 2018-04-13T03:14:25.000 with 0 trxs, lib: 38
865075ms thread-0 net_plugin.cpp:2771 plugin_shutdown ] shutdown..
865075ms thread-0 net_plugin.cpp:2774 plugin_shutdown ] close acceptor
865075ms thread-0 net_plugin.cpp:2777 plugin_shutdown ] close 0 connections
865075ms thread-0 net_plugin.cpp:2785 plugin_shutdown ] exit shutdown
可以看到私链停止时,都是通过net_plugin插件来操作,操作的方法是与plugin_startup对应的plugin_shutdown,步骤为:
以上内容在未来的源码分析中均会涉及。
EOS环境启动以后,可以在本地目录:~/.local/share/eosio/nodeos/ 找到链相关文件:
liuwenbin@liuwenbin-H81M-DS2:~/.local/share/eosio/nodeos$ tree
.
├── config
│ ├── config.ini
│ └── genesis.json
└── data
├── blocks
│ ├── blocks.index
│ └── blocks.log
└── shared_mem
├── shared_memory.bin
└── shared_memory.meta
4 directories, 6 files
根目录下包含config和data两个目录,data目录中存储了区块运行时数据,日志以及共享内存相关数据,我们重点来看config文件夹中的内容:
genesis.json
{
"initial_timestamp": "2018-03-01T12:00:00.000",
"initial_key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"initial_configuration": {
"base_per_transaction_net_usage": 100,
"base_per_transaction_cpu_usage": 500,
"base_per_action_cpu_usage": 1000,
"base_setcode_cpu_usage": 2097152,
"per_signature_cpu_usage": 100000,
"per_lock_net_usage": 32,
"context_free_discount_cpu_usage_num": 20,
"context_free_discount_cpu_usage_den": 100,
"max_transaction_cpu_usage": 10485760,
"max_transaction_net_usage": 104857,
"max_block_cpu_usage": 104857600,
"target_block_cpu_usage_pct": 1000,
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_lifetime": 3600,
"max_transaction_exec_time": 0,
"max_authority_depth": 6,
"max_inline_depth": 4,
"max_inline_action_size": 4096,
"max_generated_transaction_count": 16
},
"initial_chain_id": "0000000000000000000000000000000000000000000000000000000000000000"
}
可以看到初始化时间戳,初始化key,以及初始链id,链配置。其中链配置又包含了基础每笔交易的网络使用size、cpu使用size,每个方法、每个setcode、每个签名的cpu使用size,每个锁的网络使用size,空闲期间的cpu使用度折扣上下文,交易的cpu、网络使用度的最大值,区块的最大网络使用size,目标区块的网络使用size,交易最大存活生命周期长度、执行时间,权限深度的最大值,最大内联深度,最大内联操作size,交易的最大生成数量。
上面对genesis.json创世块描述文件进行了平铺直叙,我们可以看到,链时间,链key,链id都比较常见,而细致入微到标识了每个方法、每个签名等等的资源分配,这是很令人惊奇的。说明了
EOS对资源的控制是非常看中的。
config.ini
这是一个全局配置文件,就像java的property文件一样。这里面的配置会被细分到是由哪一个插件来使用的,例如针对http_plugin配置的地址端口号等等,我们也可以通过手动修改这些配置来控制链的一些表现。config.ini这个全局配置文件就是开放给外部人员,作为各种功能的静态变量配置,功能开关等工具使用。下面针对配置项逐一分析:
属于account_history_plugin插件的配置
属于chain_plugin插件的配置
属于faucet_testnet_plugin配置
属于http_plugin配置
属于mongo_db_plugin配置
属于net_plugin配置
属于producer_plugin配置
属于wallet_plugin配置
plugin:激活插件,可以被特殊指定多次。默认是注释掉,没有特例,是插件都好使。
配置中出现的所有time的单位一般都是毫秒。
配置文件加启动命令
上面我们通过命令
./nodeos -e -p eosio --genesis-timestamp 2018-04-13T12:00:00.000 --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin
启动了本地EOS环境。下面我们针对这个启动脚本的使用参数进行学习:
所以我在config.ini针对以上命令进行静态配置。
enable-stale-production = true
producer-name = eosio
plugin的配置方式:
# Load the block producer plugin, so you can produce blocks
plugin = eosio::producer_plugin
# Wallet plugin
plugin = eosio::wallet_api_plugin
# As well as API and HTTP plugins
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
# This will be used by the validation step below, to view account history
plugin = eosio::account_history_api_plugin
配置结束以后,由于上面我们也执行了命令安装(sudo make install),下面我们可以直接在任何位置使用命令
nodeos
即可启动与之前命令相同的EOS本地环境。
指定配置文件地址
我们可以在机器中维护多套config.ini 以及 genesis.json文件,然后启动EOS环境时通过参数
--config-dir:指定地址用来加载配置文件,绝对路径或应用程序相对路径。
指定运行时数据地址
我们也可以通过启动参数指定运行时数据的存储位置。
--data-dir:指定地址用来存放运行时数据,日志以及共享内存相关数据,绝对路径或应用程序相对路径。
其实config-dir和data-dir就是映射的上面的~/.local/share/eosio/nodeos/的内容,我在上面使用树形结构列举了出来,他们通过启动参数均可指定新的位置。
本文是EOS的入门手册,介绍了EOS基本概念和术语解释,包括发展历史,私募、代币、公链映射方案,选举机制、Dapp以及防御机制,最后对本地环境进行了构建,包括自动和手动的,以及启动参数,结合分析了链的各种插件的配置参数,语义。接下来我分三个大步来加深自身的EOS的专业度:
EOS官方文档
圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。
公开课地址:https://ke.qq.com/course/345101
标签:rac 应该 大数 影响 区块高度 bic 启用 DPoS ida
原文地址:https://www.cnblogs.com/yuanfangyuan/p/10119029.html