市值: $2.1964T 1.25%
成交额(24h): $64.1444B -4.80%
恐惧与贪婪指数:

35 - 恐惧

  • 市值: $2.1964T 1.25%
  • 成交额(24h): $64.1444B -4.80%
  • 恐惧与贪婪指数:
  • 市值: $2.1964T 1.25%
加密货币
话题
百科
资讯
加密话题
视频
热门加密百科

选择语种

选择语种

选择货币

加密货币
话题
百科
资讯
加密话题
视频

智能合同存储如何工作?

Smart contract storage in Ethereum is a persistent key-value store where variables like state data are kept, with gas costs for reading and writing, and optimized through slot packing and efficient data structuring.

2025/07/29 07:35

了解智能合同存储机制

智能合约存储是区块链技术的一个基本方面,尤其是在以太坊等平台中。存储是指合同在函数调用之间维护的持久数据。与内存或堆栈(在每次交易之后都是暂时的和重置)不同,存储是持久的,并且无限期保留在区块链上。合同中声明的每个变量(例如状态变量)都存储在存储中,访问或修改该数据会损害气体成本。

在以太坊中,存储被实现为一个键值存储,每个键是一个32字节插槽,每个值也为32个字节。该结构被称为存储Trie ,它是整个以太坊状态Trie的一部分。变量对存储插槽的映射由编译器(例如,固定)确定,理解此映射对于优化气体使用至关重要。

变量如何存储在智能合约中

当开发人员在固体中声明变量时,编译器会确定它们如何包装到存储插槽中。例如,如果多个变量符合一个32字节的插槽,则将它们包装在一起以节省空间并降低气体成本。但是,此行为取决于所使用的变量的类型。如果较小的数据类型(例如uint8booladdress连续声明,则可以将其存储在一起。

相反,诸如uint256string类的较大类型占据了自己的存储插槽。动态阵列和映射更为复杂,因为它们的数据未直接存储在声明的插槽中。取而代之的是,插槽用作基本参考,并且使用哈希功能将实际数据存储在派生位置。例如,动态阵列的长度存储在基本插槽中,而元素则存储在keccak256(baseSlot) + index上。

汽油成本和存储访问效率

访问和修改存储是以太坊中最昂贵的操作。从存储(SLOAD)阅读的读数为100天气,而写入(SSTORE)的质量要昂贵得多。写作成本取决于该值是从零变为非零(20,000气),非零为非零(5,000气体)还是非零的零变为零(退还气体)。该气体模型激发开发人员,以最大程度地减少存储访问并优化数据的结构方式。

一种有效的优化是将多个变量填充到一个存储插槽中。例如,将booluint8uint16组合到一个插槽中可以减少SSTORE操作的数量。另一种优化涉及仅在必要时使用映射或数组,因为它们的存储逻辑更为复杂且昂贵。

复杂数据结构中的存储布局

复杂的数据结构(例如映射和结构)需要更深入地了解如何分配存储。映射没有长度,其键没有直接存储。取而代之的是,映射m中的键k的值存储在keccak256(k ++ m_slot)上,其中++表示串联。这种哈希机制可确保每个钥匙映射到唯一的存储位置。

从第一个声明的变量开始,结构依次存储在存储中。如果一个结构包含适合单个插槽的多个变量,则它们会被包装在一起。但是,根据编译器的规则,可以在变量之间添加填充物以进行对齐。了解结构布局对于在阅读或编写结构成员时优化存储和降低气体成本至关重要。

检索和修改存储数据

为了从智能合约的存储中检索数据,可以使用web3.js或ethers.js之类的外部工具来查询区块链。这些库提供了诸如getStorageAt(address, position)之类的方法,使开发人员可以在特定插槽中检查存储。但是,解释返回的数据需要了解合同使用的存储布局和编码方案。

修改存储是通过更新状态变量的函数调用来完成的。由于每次修改成本,开发人员通常会批量更新或使用临时内存变量来计算最终值,然后再将其提交存储。此外,使用事件(日志)可以帮助跟踪存储更改,而无需查询整个存储trie ,从而使链式监视效率更高。

智能合约存储中的安全考虑

不当处理存储会导致漏洞,例如存储碰撞,未经授权的访问或气体耗尽攻击。使用非初始化的指针或不正确的插槽计算的合同可能会覆盖意外数据。此外,如果映射或阵列公开暴露而没有适当的访问控制,则外部合同可能会操纵存储。

一个常见的攻击向量是代理合同中的存储碰撞,该合同和代理合同共享相同的存储布局。如果布局不匹配,则升级可能会损坏现有数据。为了减轻这种情况,开发人员应使用透明的代理或UUP(通用可升级的代理标准)等良好的升级模式。

常见问题

问:我可以直接访问另一个合同的存储空间吗?不,您不能直接从智能合同中读取另一个合同的存储空间。诸如web3.js或ethers.js之类的外部工具可用于查询链链的存储插槽,但链访问仅限于合同自己的存储空间。

问:坚固性存储与内存之间有什么区别?存储是持久的,并保留在交易之间的数据,而内存是暂时的,并且在每个功能调用后都清除。与存储器相比,关于气体的存储操作更昂贵。

问:在存储修改期间,天然气退款如何工作?当将存储插槽设置为零(即清除)时,将应用气体退款。这鼓励开发人员清理未使用的数据。但是,退款是有限的,仅部分抵消了最初的撰写本储备成本。

问:是否在区块链上加密存储变量?不,所有存储在智能合约中的数据都是公开的,并且可访问区块链的任何人都可以看到。如果需要隐私,则开发人员必须在链上实施加密机制或使用隐私保护技术,例如零知识证明。

免责声明:info@kdj.com

所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!

如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。

相关百科

LINKUSDT永续合约资金费率是多少?

LINKUSDT永续合约资金费率是多少?

2026-07-29 07:40:14

市场波动模式1. Bitcoin 在 ETF 批准公告或重大交易所中断等高流动性事件期间,24 小时窗口内价格波动通常超过 10%。 2. 当第 2 层汇总升级上线时,以太坊的波动性指数经常飙升,尤其是在部署后的前 72 小时内 Gas 费用减少超过 65% 的情况下。 3. 稳定币脱钩事件(例如硅...

AVAX 期货保证金要求是如何计算的?

AVAX 期货保证金要求是如何计算的?

2026-07-23 15:40:03

AVAX 期货保证金结构1. AVAX期货保证金由两个不同的部分组成:初始保证金和维持保证金。这些是根据当前市场价格、波动性、未平仓合约和合约规模实时计算的。 2. 初始保证金作为履约保证金,以弥补短期(通常是一个交易时段)内潜在的不利价格变动。它以头寸名义价值的百分比表示。 3. 维持保证金设置为...

ADA永续合约的最大杠杆是多少?

ADA永续合约的最大杠杆是多少?

2026-07-28 07:40:32

ADA 永续期货杠杆因交易所而异,具体取决于司法管辖区、用户级别和风险管理政策。截至 2026 年 7 月,主要平台实施不同的上限。特定于交易所的 ADA 杠杆限制1.币安合约对ADA/USDT永续合约采用动态杠杆模型。具有 Tier-1 状态的经过验证的用户可以获得高达25 倍的杠杆。在 KYC ...

ADA合约保证金率为何会触发警告?

ADA合约保证金率为何会触发警告?

2026-07-22 09:00:26

ADA 合约保证金比率机制1. 各大交易所的ADA永续合约采用根据持仓规模、杠杆水平和当前标记价格实时计算的动态保证金比例。 2. 保证金比率等于(钱包余额+未实现盈亏)除以维持保证金要求,以百分比表示。 3. 当该比率低于交易所定义的维持阈值(通常为 5% 至 10%,具体取决于杠杆率)时,系统将...

ADAUSDT永续合约资金费率是多少?

ADAUSDT永续合约资金费率是多少?

2026-07-24 20:19:46

ADAUSDT永续合约资金费率定义及目的1. ADAUSDT永续合约资金费率是卡尔达诺(ADA)与主要加密货币交易所Tether(USDT)衍生品头寸之间采用的定期费用兑换机制。 2. 作为价格锚定工具,确保ADAUSDT永续合约价格与基础ADA/USDT现货指数价格保持紧密一致。 3、与传统期货不...

TON永续交易建议使用多少杠杆?

TON永续交易建议使用多少杠杆?

2026-07-27 17:20:10

TON 永续交易机制1. TON永续合约在去中心化和中心化交易所运行,保证金模式各异。 2. 资金费率按小时计算,取决于现货价格和永续价格之间的基础,影响多头/空头成本动态。 3. 当维持保证金低于交易所定义的阈值(通常以头寸价值的百分比表示)时,就会触发强平。 4. TON 区块链的原生速度可实现...

LINKUSDT永续合约资金费率是多少?

LINKUSDT永续合约资金费率是多少?

2026-07-29 07:40:14

市场波动模式1. Bitcoin 在 ETF 批准公告或重大交易所中断等高流动性事件期间,24 小时窗口内价格波动通常超过 10%。 2. 当第 2 层汇总升级上线时,以太坊的波动性指数经常飙升,尤其是在部署后的前 72 小时内 Gas 费用减少超过 65% 的情况下。 3. 稳定币脱钩事件(例如硅...

AVAX 期货保证金要求是如何计算的?

AVAX 期货保证金要求是如何计算的?

2026-07-23 15:40:03

AVAX 期货保证金结构1. AVAX期货保证金由两个不同的部分组成:初始保证金和维持保证金。这些是根据当前市场价格、波动性、未平仓合约和合约规模实时计算的。 2. 初始保证金作为履约保证金,以弥补短期(通常是一个交易时段)内潜在的不利价格变动。它以头寸名义价值的百分比表示。 3. 维持保证金设置为...

ADA永续合约的最大杠杆是多少?

ADA永续合约的最大杠杆是多少?

2026-07-28 07:40:32

ADA 永续期货杠杆因交易所而异,具体取决于司法管辖区、用户级别和风险管理政策。截至 2026 年 7 月,主要平台实施不同的上限。特定于交易所的 ADA 杠杆限制1.币安合约对ADA/USDT永续合约采用动态杠杆模型。具有 Tier-1 状态的经过验证的用户可以获得高达25 倍的杠杆。在 KYC ...

ADA合约保证金率为何会触发警告?

ADA合约保证金率为何会触发警告?

2026-07-22 09:00:26

ADA 合约保证金比率机制1. 各大交易所的ADA永续合约采用根据持仓规模、杠杆水平和当前标记价格实时计算的动态保证金比例。 2. 保证金比率等于(钱包余额+未实现盈亏)除以维持保证金要求,以百分比表示。 3. 当该比率低于交易所定义的维持阈值(通常为 5% 至 10%,具体取决于杠杆率)时,系统将...

ADAUSDT永续合约资金费率是多少?

ADAUSDT永续合约资金费率是多少?

2026-07-24 20:19:46

ADAUSDT永续合约资金费率定义及目的1. ADAUSDT永续合约资金费率是卡尔达诺(ADA)与主要加密货币交易所Tether(USDT)衍生品头寸之间采用的定期费用兑换机制。 2. 作为价格锚定工具,确保ADAUSDT永续合约价格与基础ADA/USDT现货指数价格保持紧密一致。 3、与传统期货不...

TON永续交易建议使用多少杠杆?

TON永续交易建议使用多少杠杆?

2026-07-27 17:20:10

TON 永续交易机制1. TON永续合约在去中心化和中心化交易所运行,保证金模式各异。 2. 资金费率按小时计算,取决于现货价格和永续价格之间的基础,影响多头/空头成本动态。 3. 当维持保证金低于交易所定义的阈值(通常以头寸价值的百分比表示)时,就会触发强平。 4. TON 区块链的原生速度可实现...

查看所有文章

User not found or password invalid

Your input is correct