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协议 许可协议。转载请注明出处!

转载于:https://blog.51cto.com/13784902/2321840

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

  1. 链乔教育在线|智能合约学习——以太坊智能合约学习笔记(四)

    链乔教育在线|智能合约学习--以太坊智能合约学习笔记(四) 本笔记记录的是使用matemask钱包连接以太坊私链,并编写一个基本的提币智能合约部署到以太坊私链上,进行调用. 一.浏览器安装metama ...

  2. 以太坊的数据存储结构

    1 存储整体结构 2 区块 区块分为两部分,即区块头和区块体. 区块头就是以太坊中的区块链部分.它保存了前一个区块(也可称为父区块)的哈希值,通过区块头的连接形成了一条由密码学背书的链. 区块体包含了 ...

  3. 使用remix和matemask部署智能合约到以太坊测试网络

    目录 1. 平台准备 1.1 网页版remix 1.2 Chrome浏览器插件metamask 2. 部署智能合约 1. 平台准备 1.1 网页版remix 进入网址 https://remix.et ...

  4. 以太坊智能合约Java_以太坊:调用已部署的智能合约

    目录 1. 调用已部署的智能合约 相关截图来自: 1.1. ABI是payload编码的依据 ABI,应用二进制接口(Application Binary Interface).它是从区块链外部与合约 ...

  5. 用truffle部署智能合约到以太坊网络(truffle+infura)的简易方法

    1.登录infura官网注册,获取API-KEY Infura是一个托管的以太坊节点集群,可以将你编写的以太坊智能合约部署到infura提供的节点上,而无需自己搭建以太坊节点. https://inf ...

  6. 从2018年以太坊统计数据看区块链发展趋势

    今年6月,我们发布了"以太坊网络状态",重点介绍了整个网络的一些关键数据和统计数据.六个月后,即将在2018年结束时,我们处于长期"加密货币冬天"的尾声,201 ...

  7. 以太坊solidity智能合约-生成随机数

    Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...

  8. 基于以太坊的次高价盲拍solidity智能合约(二)

    基于以太坊的次高价盲拍solidity智能合约(二) 4.揭标 5.第三方仲裁人终结拍卖 4.揭标 揭标的过程应该是本智能合约中最复杂且具有灵魂的关键步骤. 当每个发起过竞标的用户,利用该标的隐式价格 ...

  9. Solidity智能合约开发 — 1-以太坊开发工具和部署

    Solidity简介 solidity 是为实现智能合约而创建的一个高阶编程语言.也是以太坊虚拟机(EVM)智能合约的语言. Solidity开发工具remix remix是以太坊官方推荐的在线开发工 ...

最新文章

  1. php如何对数组进行分组,如何在PHP中对数组进行分组排序
  2. 食品行业特点及SAP解决方案探讨
  3. 人民币升值与美元贬值
  4. php 调用redfish,RedfishWhitePaperRedfish白皮书.pdf
  5. SAP Spartacus login 超链接和 login form 的区别
  6. 传感器 esp8266_如何使用ESP8266微控制器构建烟雾传感器
  7. 盈不足术与老鼠打洞问题的近似解
  8. 前端中台化,把格局做大:Node.js与测试服务探索
  9. ALSA 音频工具 amixer、aplay、arecord
  10. 谷歌眼镜公开接受预订,全新宣传视频帅爆了_-Chaz-_新浪博客
  11. 第二天性-人类进化的经济起源
  12. 2021年12月电子学会图形化四级编程题解析含答案:聪明的小猫
  13. 启动WIFI时:equest firmware failed with error 0xfffffffe ifconfig: SIOCSIFFLAGS: Operation not permitted
  14. 老男孩每日一题(一)
  15. 视频聊天app源码Android实现QQ登录功能
  16. Ubuntu20.04设置开机自启脚本、开机自启命令(ubuntu自启,ubuntu开机自启)rc(run command)(systemd)(/etc/rc.local)(开机启动原理)开机自启动
  17. 淘宝京东拼多多优惠券,买东西省钱的秘密
  18. 短信 无联系人头像 控件修改
  19. label-studio批量上传本地数据
  20. ZOJ 1203 Swordfish(最小生成树 kruskal)

热门文章

  1. 浏览器渲染流水线解析
  2. RxJava+Retrofit+MVP+Dagger2
  3. linux 下实现ssh免密钥登录
  4. Linux里的稀疏文件
  5. 安卓开源项目周报1220
  6. 词语搜索算法思想 - 第五步 结构实现
  7. 年末裁员事件背后的启示录(2)
  8. 10 分钟学会 5 个酷炫 Linux 命令
  9. 尚硅谷_MySQL常见命令介绍
  10. 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?