Solidity——storage、memory、calldata用法和区别

本文详细解释了Solidity编程语言中storage、memory和calldata的关键字用法,包括它们的用途、作用域、数据持久性和在函数中的应用。storage用于长期保存合约状态,memory用于临时存储,calldata则用于接收和返回函数调用数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Solidity中,storagememory和calldata是用于声明和处理数据的三个关键字,它们具有不同的用途和作用域。

一、storage

storage关键字用于声明永久存储在区块链上的数据,也就是合约的状态变量。使用storage关键字声明的变量将持久保存在区块链上,直到合约被销毁。对于storage变量,数据存储在合约的存储空间中,并且状态的更改将永久记录在区块链上。默认情况下,合约的状态变量是storage类型。

在函数参数中使用storage关键字是无效的,因为storage关键字只用于声明合约的状态变量,而不适用于函数的形参,否则会报错。但在以下情况中必须使用:

//角色库(管理所有角色地址)
// 1. 实现增加角色地址
// 2. 移除角色地址
// 3. 判断角色地址是否被授权
library Roles {
    struct Role {
        mapping (address=>bool) bearer;
    }

    function add(Role storage role,address account) internal {
        require(!has(role,account),"account already has role");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tomggo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值