北京时间 8 月 29 日 7 时,EOSIO 1.2.3 版本在 Github 上提交更新,并发布说明文档对EOSIO 1.2.3 的 bug 修复和回归测试的描述,转载需注明出处 IMEOS。
原文档参见:https://github.com/EOSIO/eos/releases/tag/v1.2.3
此版本提供 bug 修复和回归测试。
问题详情描述
弃用通知合约向原始行动授权人收取 RAM
EOSIO 区块链有一个有用的功能,运行一个合约执行一个操作去通知行动的另外一个合约,因为它可能与该操作有关。目前为止 EOSIO 区块链还有一个额外的功能,就是允许通知合约向原始行动的任何授权人收取在区块链储存数据的 RAM 成本。这种强大但最后不受欢迎的功能,使智能合约采用执行复杂操作的通用模式,这些操作消耗 RAM 以响应转账操作中接收代币。但是,这种功能被恶意合约滥用去浪费用户的可用 RAM。
出于这个原因,现在这个允许通知合约向原始行动授权人收取额外 RAM 的功能被弃用。目前使用此功能的合法智能合约可以升级为使用更合适的模式(比如在 #5451 中描述的模式)。此版本介绍了主观限制该功能的缓解措施(#5451),如果所有活跃区块生产者都部署这个措施。客观解决方案之后会出现。
有关这些更改的更多信息,请见: https://medium.com/@bytemaster/preventing-unexpected-ram-consumption-8029a9342659
对CPU灰名单功能修复(#5462)
灰名单功能(或者是区块生产者可以主观压制某些账号的带宽资源使用量只能有限于在高区块链负载下所允许使用的功能)是在 1.1.0 版本中引用的功能(参见#4368 and #4410)。尽管如此,该功能的原始实施没有区分由于灰名单(主观性)引起的 CPU 资源耗尽错误与正常客观原因导致的 CPU 资源耗尽错误,这可能导致在生成的区块中退出延迟事务通过验证节点无法重现的状态。此版本进行了更改以标记该区别,该区别不仅使得由于灰名单引起的错误消息更具描述性,而且还可以解决区块生产者的遗漏块的来源。
针对先前安全时间的回归测试
此版本包括的回归测试涵盖 1.1.1 版本修复的问题。回归测试滞后公开版本一个月以增强运行网络的安全性。
其它
[nodeos]修复框架外壳,用于区分大小写的MacOS版本 (#5403)
[eosiocpp/eosio-abigen] 修复了eosiocpp ABI生成错误 (#5401)
[eosiocpp/eosio-abigen] 修复了在ABI生成中忽略动作名称的错误 (#5459)
[nodeos] 修复了bnet线程问题 (#5417)
[nodeos] 减少net_plugin中的错误日志输出 (#5423)
[nodeos] 推测时不要在光节点上应用事务优化 (#5415)
[cleos] 如果已经签名,请不要在推送交易期间修改交易 (#5461)
缓解措施
默认情况下,运行版本 1.2.3 的节点将主观拒绝执行操作通知处理程序的合同尝试将 RAM 计入任何其他帐户的事务。 通过在 config.ini 中将 disable-ram-billing-notify-checks 布尔字段设置为 true,可以在节点上禁用主观拒绝。 如果 EOSIO 区块链的所有活跃区块生成者采用此缓解措施,将保护该区块链的合同和用户免受恶意合约的侵害,这些合约试图浪费(间接性)触发执行这些恶意合约的帐户的可用 RAM。 但是,启用此缓解会禁用某些基于 EOSIO 的智能合约中的常见模式(例如,创建一个新的数据库表行以响应作为接收者的 eosio :: transfer 操作指向合约),这可能会破坏实施智能合约,直到更新为使用更合适的模式(详见 #5451)。
= END =
长按识别下方二维码
领取专属 10元无门槛券
私享最新 技术干货