规则1 – 状态变量
状态变量总是存储在存储区中。
1 | pragma solidity ^0.5.0; |
此外,不能显式地标记状态变量的位置。
1 | pragma solidity ^0.5.0; |
规则2 – 函数参数与返回值
函数参数包括返回参数都存储在内存中。
1 | pragma solidity ^0.5.0; |
此处,函数参数 uint num1
与 uint num2
,返回值 uint result
都存储在内存中。
规则3 – 局部变量
值类型的局部变量存储在内存中。但是,对于引用类型,需要显式地指定数据位置。
1 | pragma solidity ^0.5.0; |
不能显式覆盖具有值类型的局部变量。
1 | function doSomething() public { |
规则4 – 外部函数的参数
外部函数的参数(不包括返回参数)存储在Calldata中。
附言
基础学习资料
- Solidity中文文档:https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#
- ERC20:https://learnblockchain.cn/2018/01/12/create_token/
- ERC721:https://learnblockchain.cn/2018/03/23/token-erc721/
- cryptozombies游戏:https://cryptozombies.io/zh
- 学习列表:https://github.com/yippee-ki-yay/eth-dev-reading-list
- 语法基础:https://www.tryblockchain.org/solidity-libraries-%E5%BA%93.html
- https://www.qikegu.com/docs/4991
与智能合约交互
- ethers.js:https://learnblockchain.cn/docs/ethers.js/
- web3js:
源码
示例项目
- https://solidity-by-example.org/
- https://github.com/raineorshine/solidity-by-example
- https://github.com/cyrusadkisson/solidity-baby-steps
- https://github.com/flashbots/simple-arbitrage