solidity智能合约[37]-以太坊虚拟机数据存储
2018-11-25 22:05
375 查看
EVM
当调用solidity函数时,都会在以太坊虚拟机当中来执行。因此了解以太坊虚拟机的细节,了解其数据的存储机制变得尤为重要。
以太坊虚拟机中的空间分为3大部分。分别为storage、stack与memory。 storage空间非常特殊,其值会被矿工提交到区块链上,改变区块链的状态。
下面我们将分析下面例子中,每一个变量所在以太坊evm中的位置。
下面的例子中,在运行合约中的代码时,变量a会存储在以太坊evm的storage空间中。其实所有的状态变量都会存储在storage空间中。
add函数中的函数参数num存储在memory空间中。
在函数中定义的变量,如在test函数中的i、j都存储在stack空间中。
当调用cahngeIt函数时,会修改storage空间中的a值。
当调用add函数时,会将memory空间中的num值加1.
当调用test方法时,会在stack中开辟空间i、j。i赋值为2. j赋值为add函数的返回值3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | contract storageAndMemory{ uint a = 5; function changeIt() public { a = 1000; } function add(uint num) public returns(uint){ num = num +1; return num; } function test() public returns(uint,uint){ uint i = 2; uint j = add(i); return(i,j); } } |
总结
1 2 3 4 5 6 7 | 状态变量总是存在于storage中 函数的参数默认在memory中 函数中的本地变量默认是在stack中 storage与memory都需要消耗gas,但是storage更贵 |
本文链接: https://dreamerjonson.com/2018/11/22/solidity-37-evm-datastorage/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!
相关文章推荐
- 智能合约语言 SOLIDITY 教程系列4 - 数据存储位置分析
- 智能合约语言 Solidity 教程系列4 - 数据存储位置分析
- 智能合约语言 Solidity 教程系列4 - 数据存储位置分析
- 智能合约语言 Solidity 教程系列4 - 数据存储位置分析
- 区块链智能合约solidity语言实现AVL树的插入
- solidity智能合约[52]-安全-storage陷阱
- solidity智能合约开发工具Atom及其插件安装
- 智能合约语言 SOLIDITY 教程系列5 - 数组介绍
- 智能合约最佳实践 之 Solidity 编码规范
- 智能合约-Solidity官方文档(1)
- Solidity编程 四 之 智能合约的结构
- solidity智能合约[20]-动态二维数组
- solidity智能合约[38]-storage引用
- solidity智能合约[52]-安全-storage陷阱
- 使用Oraclize让智能合约调用外部数据
- 区块链入门(5)Truffle 项目实战,Solidity IDE, 智能合约部署
- 搭建以太坊智能合约Solidity Ide
- 学习solidity的一个简单智能合约(2)——对冲
- 智能合约语言 SOLIDITY 教程系列6 - 结构体与映射
- 智能合约语言 Solidity 教程系列1 - 类型介绍