以太坊智能合约存储变量的四种数据结构

本文详细介绍了以太坊智能合约中的四种存储类型:storage、memory、calldata及stack。storage用于永久保存合约状态变量;memory用于保存临时变量;calldata用于存放函数调用数据且不可修改;stack作为EVM的工作空间,保存局部变量。

1. storage

合约中可以被所有函数访问的全局变量。storage的存储是永久存储,意味着以太坊会把它存到公链环境里的每一个节点上。

会永久保存合约状态变量,燃料消耗最大。

2. Memory

在合约中的内存变量,生命周期为合约开始到执行结束,执行结束后被销毁。

仅保存临时变量,函数调用之后释放,消耗燃料很少。

3. Calldata

所有函数调用的数据,包括函数参数的保存位置。是不可修改的内存位置。

它包含消息体的数据,其计算需要增加n * 68(n是calldata中的非零字节数)的gas费用

4. Stack

EVM为了导入变量和以太坊的机器/汇编指令代码,维护了一个栈,这个栈是EVM的内存工作空间。他有1024级深,也就是如果存储超过了1024级的数据,就会触发一个异常。

栈仅保存很小的局部变量,免费使用,数量限制在16个变量。

参考:以太坊solidity智能合约开发

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值