区块链3.0:拥抱EOS (6)

接下来就是正常出块了,由于我们本地启动的节点一定是具备出块权的(目前只有一个节点未涉及共识),这些块是不包含任何交易信息的,出块速度很快。

停止

断开私链直接按下复制键(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,步骤为:

开始关闭的标识

关闭接收器acceptor

关闭连接

完成私链停止工作,退出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插件的配置

filter_on_accounts:功能是实现仅追踪配置值的账户产生的交易,默认注释掉该配置项,意思是不设过滤器,追踪所有交易。

get-transactions-time-limit:执行单个get_transactions调用的执行时间,单位是豪妙,默认值为3(意思是3毫秒读不到就丢弃)

属于chain_plugin插件的配置

genesis-json,指定创世块配置文件位置,默认值是“genesis.json”

genesis-timestamp,复写初始化创世块时间戳,我们上面不是在启动命令中通过加入--genesis-timestamp参数来配置该值了么,在这里配置以后重启会是相同的效果。默认值是注释掉,启动时时间戳一般会过时。

block-log-dir:是区块日志的存储位置,绝对路径或者应用程序的相对路径。

checkpoint:是一对区块高度+区块id,用来作为检查点。默认注释掉,不设置检查点。(检查点的使用会在之后介绍,TODO)

max-reversible-block-time:允许可逆区块在被确认为无效之前存在的时间,默认为-1,不允许出现可逆区块。

max-pending-transaction-time:允许pending交易在无效之前的执行时间,默认为-1,不允许出现pending的交易。

max-defered-transaction-time:允许延迟执行交易到区块的推送时间,默认值20,

wasm-runtime:复写默认的WebAssembly的runtime。默认是注释掉(TODO:啥意思)

属于faucet_testnet_plugin配置

faucet-create-interval-ms:创建账户的间隔,默认1秒钟。

faucet-name:创建账户的创建器的名字。默认就是faucet。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwzpw.html