solidity智能合约[37]-以太坊虚拟机数据存储
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]-以太坊虚拟机数据存储相关推荐
- 链乔教育在线|智能合约学习——以太坊智能合约学习笔记(四)
链乔教育在线|智能合约学习--以太坊智能合约学习笔记(四) 本笔记记录的是使用matemask钱包连接以太坊私链,并编写一个基本的提币智能合约部署到以太坊私链上,进行调用. 一.浏览器安装metama ...
- 以太坊的数据存储结构
1 存储整体结构 2 区块 区块分为两部分,即区块头和区块体. 区块头就是以太坊中的区块链部分.它保存了前一个区块(也可称为父区块)的哈希值,通过区块头的连接形成了一条由密码学背书的链. 区块体包含了 ...
- 使用remix和matemask部署智能合约到以太坊测试网络
目录 1. 平台准备 1.1 网页版remix 1.2 Chrome浏览器插件metamask 2. 部署智能合约 1. 平台准备 1.1 网页版remix 进入网址 https://remix.et ...
- 以太坊智能合约Java_以太坊:调用已部署的智能合约
目录 1. 调用已部署的智能合约 相关截图来自: 1.1. ABI是payload编码的依据 ABI,应用二进制接口(Application Binary Interface).它是从区块链外部与合约 ...
- 用truffle部署智能合约到以太坊网络(truffle+infura)的简易方法
1.登录infura官网注册,获取API-KEY Infura是一个托管的以太坊节点集群,可以将你编写的以太坊智能合约部署到infura提供的节点上,而无需自己搭建以太坊节点. https://inf ...
- 从2018年以太坊统计数据看区块链发展趋势
今年6月,我们发布了"以太坊网络状态",重点介绍了整个网络的一些关键数据和统计数据.六个月后,即将在2018年结束时,我们处于长期"加密货币冬天"的尾声,201 ...
- 以太坊solidity智能合约-生成随机数
Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...
- 基于以太坊的次高价盲拍solidity智能合约(二)
基于以太坊的次高价盲拍solidity智能合约(二) 4.揭标 5.第三方仲裁人终结拍卖 4.揭标 揭标的过程应该是本智能合约中最复杂且具有灵魂的关键步骤. 当每个发起过竞标的用户,利用该标的隐式价格 ...
- Solidity智能合约开发 — 1-以太坊开发工具和部署
Solidity简介 solidity 是为实现智能合约而创建的一个高阶编程语言.也是以太坊虚拟机(EVM)智能合约的语言. Solidity开发工具remix remix是以太坊官方推荐的在线开发工 ...
最新文章
- php如何对数组进行分组,如何在PHP中对数组进行分组排序
- 食品行业特点及SAP解决方案探讨
- 人民币升值与美元贬值
- php 调用redfish,RedfishWhitePaperRedfish白皮书.pdf
- SAP Spartacus login 超链接和 login form 的区别
- 传感器 esp8266_如何使用ESP8266微控制器构建烟雾传感器
- 盈不足术与老鼠打洞问题的近似解
- 前端中台化,把格局做大:Node.js与测试服务探索
- ALSA 音频工具 amixer、aplay、arecord
- 谷歌眼镜公开接受预订,全新宣传视频帅爆了_-Chaz-_新浪博客
- 第二天性-人类进化的经济起源
- 2021年12月电子学会图形化四级编程题解析含答案:聪明的小猫
- 启动WIFI时:equest firmware failed with error 0xfffffffe ifconfig: SIOCSIFFLAGS: Operation not permitted
- 老男孩每日一题(一)
- 视频聊天app源码Android实现QQ登录功能
- Ubuntu20.04设置开机自启脚本、开机自启命令(ubuntu自启,ubuntu开机自启)rc(run command)(systemd)(/etc/rc.local)(开机启动原理)开机自启动
- 淘宝京东拼多多优惠券,买东西省钱的秘密
- 短信 无联系人头像 控件修改
- label-studio批量上传本地数据
- ZOJ 1203 Swordfish(最小生成树 kruskal)