温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-19 21:37:41 阅读:382 作者:jonson_jackson 栏目:开发技术

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.

1234567891011121314151617181920
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);    }}

总结

1234567
状态变量总是存在于storage中函数的参数默认在memory中函数中的本地变量默认是在stack中storage与memory都需要消耗gas,但是storage更贵
  • 本文链接: https://dreamerjonson.com/2018/11/22/solidity-37-evm-datastorage/

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI