solidity智能合约[37]-以太坊虚拟机数据存储-创新互联

EVM

当调用solidity函数时,都会在以太坊虚拟机当中来执行。因此了解以太坊虚拟机的细节,了解其数据的存储机制变得尤为重要。
以太坊虚拟机中的空间分为3大部分。分别为storage、stack与memory。 storage空间非常特殊,其值会被矿工提交到区块链上,改变区块链的状态。

创新互联建站是一家成都做网站、网站设计,提供网页设计,网站设计,网站制作,建网站,按需策划设计,网站开发公司,2013年至今是互联行业建设者,服务者。以提升客户品牌价值为核心业务,全程参与项目的网站策划设计制作,前端开发,后台程序制作以及后期项目运营并提出专业建议和思路。

下面我们将分析下面例子中,每一个变量所在以太坊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智能合约[37]-以太坊虚拟机数据存储

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


新闻标题:solidity智能合约[37]-以太坊虚拟机数据存储-创新互联
路径分享:http://myzitong.com/article/icjci.html