Solidity 中文文档更新到0.6.4

Solidity v0.6.0带来的那些变化, 一起来看看.

这是中文世界里,唯一保持更新的 Solidity 文档了.  [文档地址](https://learnblockchain.cn/docs/solidity/)不变,依旧是https://learnblockchain.cn/docs/solidity/ Solidity每一次中版本号(第2个数变化)升级都会带来一些不兼容的大变化:不管是升级到0.5.0还是这一次升级到Solidity v0.6.0. 详细看看这一次带来的那些变化: ### 抽象合约 抽象合约必须要使用关键字 `abstract`标记,没有实现的函数必须标记为 `virtual` ,覆盖函数必须要标记 `override` 可以查看 [抽象合约](https://learnblockchain.cn/docs/solidity/contracts.html#abstract-contract) ### [数组](https://learnblockchain.cn/docs/solidity/types.html#arrays) 1. 数组的 `length` 现在是只读的,不可以修改值来改变数组的大小. 必须通过函数 `push()`, `push(value)` 或 `pop()` . 2. `push(value)` 没有返回值了(之前返回数组长度), 数组长度只能通过 `length`返回. 3. 数组支持切片访问,在calldata的参数上,可以用 `x[start:end]` 来访问数组中的一些元素. 可以查看[数组的详细文档](https://learnblockchain.cn/docs/solidity/types.html#arrays) ### try/catch 加入了 [try/catch 语句](https://learnblockchain.cn/docs/solidity/control-structures.html#try-catch) 使您可以对失败的外部调用做出反应. ### 拆分回退函数 原来未命名的函数通常称为 `fallback 函数` ,现在拆分为一个使用 `fallback` 关键字定义的回退函数 和 使用关键字 `receive` 定义的接收以太函数. 如果没有 `receive` 函数同样会去调用 `fallback 函数`, 查看文档[ receive接收以太函数](https://learnblockchain.cn/docs/solidity/contracts.html#receive) ### payable类型 address 类型可以使用payable(x) 转换为 `address payable` 类型; ### 文件级别的类型声明 `struct` 和 `enum` 类型可以在文件级别声明. ### 附加gas 和value 语法改变 例如使用800 gas, 附加10wei调用info, 语法如下: ` feed.info{value: 10, gas: 800}(); ` 可以查看文档[ 外部调用](https://learnblockchain.cn/docs/solidity/control-structures.html#external-function-calls) ### 使用 create2 创建合约 使用create创建合约时, 合约的地址会随nonce变化, 现在可以通过提供一个`slat`选项来使用 create2 创建合约, 这样合约地址总是可以预期. 文档 [create2 创建合约](https://learnblockchain.cn/docs/solidity/control-structures.html#salted-contract-creations-create2) ### 外部函数多了一个成员 .address 通过 `.address` 可以获得一个外部函数所在的合约地址. ### 同名状态变量覆盖 如果基类合约声明了某个非 private 的状态变量,子合约中就不能再声明同名状态变量。 总结一下 0.6.0 的修改, 功能更强大, 语义更明确了.

这是中文世界里,唯一保持更新的 Solidity 文档了. 

文档地址不变,依旧是https://learnblockchain.cn/docs/solidity/

Solidity每一次中版本号(第2个数变化)升级都会带来一些不兼容的大变化:不管是升级到0.5.0还是这一次升级到Solidity v0.6.0.

详细看看这一次带来的那些变化:

抽象合约

抽象合约必须要使用关键字 abstract标记,没有实现的函数必须标记为 virtual ,覆盖函数必须要标记 override

可以查看 抽象合约

数组

  1. 数组的 length 现在是只读的,不可以修改值来改变数组的大小. 必须通过函数 push(), push(value)pop() .
  2. push(value) 没有返回值了(之前返回数组长度), 数组长度只能通过 length返回.
  3. 数组支持切片访问,在calldata的参数上,可以用 x[start:end] 来访问数组中的一些元素.

可以查看数组的详细文档

try/catch

加入了 try/catch 语句 使您可以对失败的外部调用做出反应.

拆分回退函数

原来未命名的函数通常称为 fallback 函数 ,现在拆分为一个使用 fallback 关键字定义的回退函数 和 使用关键字 receive 定义的接收以太函数.

如果没有 receive 函数同样会去调用 fallback 函数, 查看文档 receive接收以太函数

payable类型

address 类型可以使用payable(x) 转换为 address payable 类型;

文件级别的类型声明

structenum 类型可以在文件级别声明.

附加gas 和value 语法改变

例如使用800 gas, 附加10wei调用info, 语法如下: feed.info{value: 10, gas: 800}();

可以查看文档 外部调用

使用 create2 创建合约

使用create创建合约时, 合约的地址会随nonce变化, 现在可以通过提供一个slat选项来使用 create2 创建合约, 这样合约地址总是可以预期.

文档 create2 创建合约

外部函数多了一个成员 .address

通过 .address 可以获得一个外部函数所在的合约地址.

同名状态变量覆盖

如果基类合约声明了某个非 private 的状态变量,子合约中就不能再声明同名状态变量。

总结一下 0.6.0 的修改, 功能更强大, 语义更明确了.

区块链技术网。

  • 发表于 2020-03-13 00:05
  • 阅读 ( 3359 )
  • 学分 ( 248 )
  • 分类:Solidity

评论