动态 EOSIO 4.2 版本

lome · May 26, 2018 · Last by 18636292520 replied at October 12, 2018 · 12808 hits

时间仓促如有不当之处,请留言,请见谅!!

原文地址: https://github.com/EOSIO/eos/releases/tag/dawn-v4.2.0

EOSIO 1.0版即将发布,今天我们已经标记了EOSIO软件的Dawn 4.2版本。 有几个小功能的改动,但正如您在下面看到的,我们一直关注错误修复和稳定性改进。

值得注意的更新

分离的eosio.system资金

为确保系统资金的分配清晰,我们决定将系统资金分离如下:

  • 对所有内存购买和销售实行1%的费用
  • 所有的RAM交易费用从用户发送到eosio.ram
  • 所有发送的RAM收益都来自eosio.ram
  • 所有的抵押令牌发送给eosio.stake
  • 所有未抵押的令牌从eosio.stakefee发送
  • 所有拍卖收益发送到eosio.names
  • 未分配的通货膨胀发送给eosio.saving
  • 生产者区块付款发送给eosio.bpay
  • 生产者投票付款发送给eosio.vpay
  • 有关详细信息,请参阅contracts/eosio.system/producer_pay.cpp

Chain Plugin

我们已经看到社区中存在的一些存储在磁盘上的数据和正在运行节点的用户可用的选项有点混淆,并试图通过以下更新使事情更加清晰。

  • 我们将shared_mem目录重命名为state并更改了一些插件选项:
  • --block-log-dir重命名为--blocks-dir

  • --checkpoint简写别名-c已被删除

  • --shared-memory-size-mb重命名为--chain-state-db-size-mb

  • 添加--reversible-blocks-db-size-mb来更改可逆块DB的默认大小

  • --resync-blockchain重命名为--delete-all-blocks以阻止使用此选项

  • --contracts-console将合同输出打印到控制台,现在也可以通过config.ini使用

  • 添加--hard-replay-blockchain将块日志和数据移动到备份目录中并构建一个新的blocks.log文件,然后继续,就好像--replay-blockchain被使用一样

  • 添加--force-all-checks强制检查输入事务,内联操作和合同生成事务的授权

  • 添加--fix-reversible-blocks以允许nodeos尝试从可逆块数据库中恢复,然后立即退出

  • 已更新--hard-replay-blockchain尝试从可逆块数据库尽可能多地恢复和重放尽可能多的可逆块,即使它处于bid状态

Producer Plugin

我们添加了一个命令行参数(--max-irreversible-block-age),当最后一个不可逆块时间早于N秒时,会导致节点自动停止生产,这表明没有足够的生产者确认 链继续前进。 这个选项可以防止生产者产生过多数量的块,当足够的生产者重新加入网络时,恢复生产时需要合理化。 我们增加了按需暂停节点生产的功能。 目标是让制片人在恶劣环境下协调,以恢复/暂停链,而不会有重放/再同步时间等的变化。

说明:

  • POST /v1/producer/pause - 暂停生产
  • POST /v1/producer/resume - 从暂停生产恢复
  • POST /v1/producer/paused - 根据节点当前是否暂停,返回true false

Genesis JSON 文件不再由默认创建

genesis.json 不再需要在config目录中,并且不会自动生成。 以下是您需要做的事情:

nodeos --extract-genesis-json

修改文件,更改时间戳,更改初始生产者密钥以及任何其他通常更改的参数。 像过去一样分享文件。

nodeos --delete-all-blocks --genesis-json 初始化一个新的区块链(在所有节点上)

在后续启动时,不要指定--genesis-json,nodeos会从块日志中提取创建状态,当然不要设置 --delete-all-blocks。 如果nodeos无法完全重启,--replay-blockchain,如果不起作用--hard-replay-blockchain。

resync选项已被重命名为--delete-all-blocks以指示它实际正在执行的操作。

BIOS Boot 过程指导更新

我们对BIOS启动教程进行了改进,包括生产者声明支付,代理投票,eosio帐户辞职,生产者使用eosio.msig合同替换eosio.system合同和一些错误修复。 请注意,我们将教程支持文件从programs目录移至新的tutorials目录。

其他更新

正如上周在质量名称分布和命名空间(#3189)提案中提到的那样,名称拍卖已经实施,尽管它在网络解锁后两周(15%的选票)才会生效。

生产者现在只能增加内存大小,并不会减少。这是为了防止块生产商对RAM市场的潜在操纵。

我们已经更新了我们构建的Boost库的版本从1.66到1.67。

data/shared_mem目录已被重命名为data/state

block-log-dir config.ini选项已被重命名为blocks-dir

set_active_producers固有的更改为set_proposed_producers,以更准确地反映提出新的活动生产者计划的功能的意图。

在上周对令牌符号进行更改之后,我们添加了在Dockerfile中指定核心令牌符号的功能。我们也转而使用Ubuntu 18.04 LTS作为Docker构建器镜像。

您现在可以从CMake中设置链ID。默认情况下,它被设置为sha256(eosio::chain version 1.0)。

我们注意到并固定了生产者切换中小型叉的出乎意料的高速率,尤其是生产者之间的高网络延迟。

块生产者现在可以通过使用新添加的setparams操作通过system合约来改变区块链参数。

几个测试网注意到,最近在生产者投票中停用的宽限期过于严格。宽限期从大约四分钟改为三小时。其他一些关闭的角落案例是ad

我们通过将跟踪的操作减少到仅匹配显式过滤规则的操作,大大减少了history_plugin的内存使用量。现在无法跟踪所有操作,因为这可能会填充shared_mem。

我们发现并修正了一个无限递归错误,其中包含各种畸形的abi定义。

我们更改了生产者停用逻辑,以防止生产者不正确地从生产计划中移除生产者。我们现在随时更新生产者字段time_became_active,而不是第一次投票。如果这是第一次,或者自从生产者上次投票以来已经过去了一天,我们不会检查他们的last_produced_block_time,我们也不会停用它们。否则,逻辑保持不变。这样我们就不会惩罚生产者在被投票后不生产块。

Patroneos 我们上周介绍了Patroneos,现在它已通过EOSIO GitHub存储库提供给社区,https://github.com/EOSIO/patroneos.

提醒一下,Patroneos为EOSIO节点提供了一层保护,旨在防止一些基本的拒绝服务攻击媒介。

Dawn 4.2 on GitHub

EOSIO 4.2 可用的,地址是(https://github.com/EOSIO/eos/releases/tag/dawn-v4.2.0) 以便开发人员和块生产者候选人可以继续测试其应用程序和网络。

Community Support

提醒一下,我们非常乐于听到来自社区的声音,并致力于帮助他们成功运行EOSIO。 我们的EOSIO Stack Exchange (https://eosio.stackexchange.com/)测试版运行良好,我们鼓励有关如何在堆栈交换中使用该软件的问题。 请继续报告您在GitHub中可能看到的任何潜在错误,并包括以下信息:

测试网络:

EOSIO git版本: <nodeos -v output> config.ini: 连接你的config.ini文件 genesis.json: 链接你的genesis.json文件 Command line: 你的所有的nodeos命令行 Console output: 将控制台调试输出附加到您所看到的错误周围(如果它很小,请粘贴到描述中)

下一个版本

我们将于6月1日发布EOSIO V1.0版本。 通过观察GitHub中的1.0版里程碑(https://github.com/EOSIO/eos/milestone/10),您可以遵循我们承诺在接下来的几周内致力于解决的问题。


还没有EOS帐号? 来这里创建一个吧.

(此提示与本文内容无关)

共收到 26 条回复

赞,很不错,今后要多为社区干点活,先从赞开始

@tn 可是你也没点赞啊 : )

@lome 请问, 感觉EOS的版本发布的有点快啊. 我的问题是 老版本刚编译稳定,新版本出来了我git pull一把, 很多就冲突了,好多东西编不过去了. 你一般在怎么搞的,最佳实践是啥?

请问我刚刚 build 的 4.2 版本,用下面的命令跑主链:

./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin --access-control-allow-origin=*

但是提示

version > 0: Block log was not setup properly with genesis information.

是与 Genesis JSON 文件不再由默认创建 有关么? 请问有没有具体配置方法,谢谢。

foreseaz 回复

看一下,我们的测试网络的配置,需要加--genesis-json genesis.json

foreseaz 回复

我想问下,你是不是在原来的版本上重新拉的最新版的代码,出现的这个问题 最后你是怎么解决的啊?

foreseaz 回复

你好,我也遇到了这个问题,请问你解决了吗?

maixiaohe 回复

4.2以后系统不再自己生成创世文件需要自己手动添加,并用--genesis-json genesis.json指明文件。

lome 回复

能详细一点吗?这样说着不太懂,自己在nodeos文件夹下面创建 genesis.json文件,然后在启动命令后面加上 --genesis-json genesis.json。 是这样?

qianlong 回复

新建文件genesis.json,并把创世参数填写进去,然后就在nodeos命令时加--genesis-json /path/to/genesis.json。指向genesis.json

lome 回复

有点没懂你的创世参数是什么意思,但是我看eos文件下面有很多内容一模一样的 genesis.json文件,我复制了一个在nodeos文件夹下面去,然后在启动命令后加上了--genesis-json genesis.json,具体的如图!

请问一下,我应该如何解决呢?

qianlong 回复

参数少了initial_chain_id.

lome 回复

添加了这个id参数,不过报错信息还是没变, ................Genesis state can only be set on a fresh blockchain, “创世状态只能被设置在一个新的链条上”。

我说一下我的操作吧,在下载和构建eosio都没报错,执行2种make以后也很正常,接下来就是启动节点。

用的cd build/programs/nodeos
.......... ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin
和楼上一样报了一个错误,需要设置genesis.json
........ version > 0: Block log was not setup properly with genesis information.
然后就是看到了楼主的信息
.创建 genesis.json文件,然后在启动命令后面加上 --genesis-json genesis.json
开始报了一个错误
...............Genesis state can only be set on a fresh blockchain
(因为我还没有成功启动过节点,所以应该是没有老的链被建立的,所以这里报错提示需要设置一个新的链,我就懵了,希望楼主大大能解疑一下,谢谢)

qianlong 回复

你好,请问你最后这个问题解决了么

wenxiangyu 回复

还没有

qianlong 回复

./nodeos -e -p eosio --private-key '[ "EOS8VJybqtm41PMmXL1QUUDSfCrs9umYN4U1ZNa34JhPZ9mU5r2Cm","5JGxnezvp3N4V1NxBo8LPBvCrdR85bZqZUFvBZ8ACrbRC3ZWNYv" ]' --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::http_plugin --plugin eosio::history_api_plugin --delete-all-blocks --genesis-json /path/to/genesis.json

lome 回复

一直这样打扰你,我都不好意思了,不过这个问题确实是没看懂😰

qianlong 回复

我也是没搞懂,我执行成功了。

已赞,刚开始学相关知识,百度问题中看楼主回复过问题,敬佩,以后多多学习!

lome 回复

你好,因为eosio的源码在github上每隔几个小时就能有一次小更新,有没有可能是我下载的时间点的版本其实是有一些问题的。不管怎么样,还是谢谢楼主,我再去试一试。

qianlong 回复

可以检出比较稳定的tag。

lome 回复

确实是eos版本的原因,我重新检出了一下,就可以启动了

qianlong 回复

麻烦问下怎么解决de 我也遇到这个问题了

liu 回复

你检出的时候肯定也和我一样是直接检出的最新版本,但是我发现它的最新版更新频率很高,这几天每天都有新的提交,所以有一些小分支有bug是很正常的事情,你用 git checkout命令检出4.2以后的任意一个分支作为源码就行了。 说这么多,其实就是喊你别用最新的源码。

lome 回复

那是因为你可能已经运行过./nodes命令了,或者运行过eos私链,你需要将~/.local/share/eosio/nodeos/data目录删除掉,同事也可以删除掉~/.local/share/eosio/nodeos/config目录下的config.ini文件 , 这样当你再次运行私有链的时候就会创建新的区块数据,亲测有效哟

dingkonghua 回复

蟹蟹,就是这样的

我发行的代币是EOS的, 但我合约里asset 类型就是SYS的,getbalance方法也是SYS, 这个遇到过吗,怎么解决呢

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up