SOL:如何将你的合约升级到Solidity 0.8?

我们离 Solidity 1

}contract Solidity08 {    function test() external pure returns(uint256) {        // 不使用SafeMath,返回 type(uint256)

        return x;    }}2. 无效的操作码被还原取代到目前为止,某些操作会导致 INVALID操作码的执行。这个操作码的问题是,它消耗掉所有剩余的 Gas。这显然是不好的且没必要。为什么要浪费 Gas,把它捐给矿工?

美众议员:将继续就如何将数字资产纳入监管框架与金融服务委员会进行对话:金色财经报道,美国众议员Don Beyer(非委员会成员)发表了一份声明,赞赏了金融服务委员会今天举行的听证会,并提到了他关于加密货币监管的法案。他说:“我的全面数字资产立法是针对这些努力的绝佳起点。我期待与主席Maxine Waters和委员会其他成员继续就国会如何将数字资产纳入监管框架进行对话,这是行业和监管机构一直以来越来越强调的需求。[2021/12/9 13:00:06]

更多细节,在这里查看 revert和 assert的区别。

现在 Solidity 使用revert操作码。为了区分常规 revert 和系统内部错误(panic),Solidity 在返回数据前加上一个标识符:

常规 Revert 错误以keccak256(Error(string))的前四个字节开始,等于0x08c379a0。

**系统内部错误(Panic)**以keccak256(Panic(uint256))的前四个字节开始,等于0x4e487b71。

Panic 有一个额外的错误标识。目前可用的 Panic 有:

Robinhood因未恰当披露如何应对高频交易机构而遭到调查:金色财经报道,股票与加密货币投资平台Robinhood因未能恰当地披露如何将客户订单发送给高频交易机构而受到民事欺诈调查。根据报告,这项由美国证券交易委员会(SEC)进行的调查已进入“高级阶段”,可能导致其遭到1000万美元的罚款。[2020/9/3]

0x01: 使用 asset;

0x11: SafeMath 的溢出。

0x12: 除以 0。

0x21: 转换为不存在的枚举类型。

0x22: 存储字节数组编码错误。

0x31: 在一个空数组上pop()。

0x32: 索引超长度异常。

0x41: 分配过多的内存或创建过大的数组。

0x51: 调用未初始化的内部函数类型的变量。

更多细节请参见文档中新的错误处理部分这里。

在大多数情况下,迁移应该是非常直接的。只有在一些情况下,你做奇怪的类型转换可能会变得更加困难。

你必须为迁移做出的改变包括:

美国FDA政策蓝图:应研究如何利用区块链跟踪产品:金色财经报道,美国食品药品监督管理局(FDA)周一公布了一项针对食品安全的新计划,在发布的一份政策蓝图中引用了区块链技术在跟踪产品中的潜在作用。根据该蓝图文件,总体计划的主要组成部分是使用新兴技术来增强现有系统并构建新系统。文件称,当研究行业如何通过数字方式跟踪飞机、行程共享和包装货物的实时移动,或者企业如何利用大数据来识别趋势时,很明显,FDA和利益相关者应该研究如何利用新技术,包括但不限于人工智能、物联网、传感器技术和区块链。[2020/7/15]

ABIEncoderV2现在是默认自动激活。从 0.6 开始,Encoder 就不再是实验性的了,只是因为遗留的原因,保留了 pragma experimental这个名字。现在你不需要再加这行了。

移除任何 Openzeppelin SafeMath,你不再需要它了。

可能需要进行一些类型转换。

msg.sender和 tx.origin默认不属于 payable 类型。将 msg.sender.transfer改为 payable(msg.sender).transfer。

现场 | 火币集团COO朱嘉伟:区块链是解决三个和尚如何打水的问题:金色财经现场报道,百度智能云Techday11月21日在北京举行。火币集团COO朱嘉伟在会上表示,区块链技术和其他多数技术很不一样,多数技术是解决一个和尚如何打水的问题区块链是解决三个和尚如何打水的问题,因此区块链适用于多方协同的场景,可以促进数据共享、优化业务流程、降低运营成本、提升协同效率以及建设可信体系。[2019/11/21]

只有在符合给定类型的情况下,才允许类型转换,所以uint256(-1)将不再工作。使用type(uint256).max代替。

当多次改变符号时,类型转换在某些情况下会受到限制,因为类型转换的顺序可能会对结果产生影响。你现在会看到一个类似 TypeError 的错误。不允许从 int256到 bytes32进行显示的类型转换,得先手动转换为 uint256。

修饰组合

myContract.functionCall{gas: 10000}{value: 1 ether }()改为:

myContract.functionCall{gas: 10000, value: 1 ether }()。

将 x**y**z改为(x**y)**z,因为默认的执行顺序改变了。

将 byte类型改为 byte1 。

我省略了一些细节,关于完整的变更日志和所有变更的细节,请查看文档这里。

来源:https://soliditydeveloper.com/solidity-0.8

登链翻译计划: https://github.com/lbc-team/Pioneer

翻译小组: https://learnblockchain.cn/people/412

Tiny 熊: https://learnblockchain.cn/people/15

Solidity0.8: https://blog.soliditylang.org/2020/12/16/solidity-v0.8.0-release-announcement/

0.7发布: https://blog.soliditylang.org/2020/07/28/solidity-v0.7.0-release-announcement/

Solidity 0.8 的文档: https://learnblockchain.cn/docs/solidity/

SafeMath: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol

这里: https://medium.com/blockchannel/the-use-of-revert-assert-and-require-in-solidity-and-the-new-revert-opcode-in-the-evm-1a3a7990e06e

这里: https://docs.soliditylang.org/en/latest/control-structures.html#panic-via-assert-and-error-via-require

这里: https://docs.soliditylang.org/en/latest/080-breaking-changes.html

Cell Network: https://www.cellnetwork.io/?utm_souce=learnblockchain

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny 熊

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:15ms0-0:899ms