-
Bitcoin
$118500
-0.28% -
Ethereum
$3822
-1.45% -
XRP
$3.135
-3.45% -
Tether USDt
$1.000
0.03% -
BNB
$825.6
-2.73% -
Solana
$182.8
-4.73% -
USDC
$1.000
0.03% -
Dogecoin
$0.2271
-5.96% -
TRON
$0.3414
4.87% -
Cardano
$0.7948
-4.16% -
Hyperliquid
$44.72
1.06% -
Sui
$3.900
-8.13% -
Stellar
$0.4252
-3.51% -
Chainlink
$18.11
-5.05% -
Hedera
$0.2735
-3.89% -
Bitcoin Cash
$566.1
-3.49% -
Avalanche
$24.69
-9.15% -
Litecoin
$108.9
-3.95% -
UNUS SED LEO
$8.971
0.04% -
Toncoin
$3.254
-4.02% -
Shiba Inu
$0.00001333
-5.35% -
Ethena USDe
$1.001
0.01% -
Uniswap
$10.27
-6.18% -
Polkadot
$3.989
-5.55% -
Monero
$320.5
-2.45% -
Dai
$0.9999
0.02% -
Bitget Token
$4.541
-2.41% -
Pepe
$0.00001178
-8.41% -
Cronos
$0.1440
-0.16% -
Aave
$286.0
-5.84%
智能合同存储如何工作?
以太坊中的智能合约存储是一个持久的键值商店,在该商店中保留了诸如状态数据之类的变量,并具有阅读和写作的气体成本,并通过插槽包装和有效的数据结构进行了优化。
2025/07/29 07:35

了解智能合同存储机制
智能合约存储是区块链技术的一个基本方面,尤其是在以太坊等平台中。存储是指合同在函数调用之间维护的持久数据。与内存或堆栈(在每次交易之后都是暂时的和重置)不同,存储是持久的,并且无限期保留在区块链上。合同中声明的每个变量(例如状态变量)都存储在存储中,访问或修改该数据会损害气体成本。
在以太坊中,存储被实现为一个键值存储,每个键是一个32字节插槽,每个值也为32个字节。该结构被称为存储Trie ,它是整个以太坊状态Trie的一部分。变量对存储插槽的映射由编译器(例如,固定)确定,理解此映射对于优化气体使用至关重要。
变量如何存储在智能合约中
当开发人员在固体中声明变量时,编译器会确定它们如何包装到存储插槽中。例如,如果多个变量符合一个32字节的插槽,则将它们包装在一起以节省空间并降低气体成本。但是,此行为取决于所使用的变量的类型。如果较小的数据类型(例如uint8
, bool
或address
连续声明,则可以将其存储在一起。
相反,诸如uint256
或string
类的较大类型占据了自己的存储插槽。动态阵列和映射更为复杂,因为它们的数据未直接存储在声明的插槽中。取而代之的是,插槽用作基本参考,并且使用哈希功能将实际数据存储在派生位置。例如,动态阵列的长度存储在基本插槽中,而元素则存储在keccak256(baseSlot) + index
上。
汽油成本和存储访问效率
访问和修改存储是以太坊中最昂贵的操作。从存储(SLOAD)阅读的读数为100天气,而写入(SSTORE)的质量要昂贵得多。写作成本取决于该值是从零变为非零(20,000气),非零为非零(5,000气体)还是非零的零变为零(退还气体)。该气体模型激发开发人员,以最大程度地减少存储访问并优化数据的结构方式。
一种有效的优化是将多个变量填充到一个存储插槽中。例如,将bool
, uint8
和uint16
组合到一个插槽中可以减少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),我们将及时删除。
- 比特币,加密矿山和芬兰:2025年的北欧繁荣
- 2025-07-29 20:30:12
- 加密大屠杀:KNC和1000车今天的顶级加密失败者
- 2025-07-29 20:30:12
- 天才法:稳定的调节在美国加热
- 2025-07-29 18:50:13
- 加密货币狂热:惩罚者硬币是下一个比特币吗?
- 2025-07-29 18:50:13
- Dogecoin至$ 10?比特币的伙伴眼睛的眼睛!
- 2025-07-29 19:10:12
- Defi令牌在聚光灯下:Cardano和Ripple是否失去了Mutuum Finance?
- 2025-07-29 19:10:13
相关百科

为什么我的Bitstamp期货位置被清算?
2025-07-23 11:08:15
了解Bitstamp上的未来清算BitStamp上的期货交易涉及借贷资金以打开杠杆头寸,从而扩大了潜在的利益和风险。当您的保证金余额低于所需的维护阈值时,BitStamp会启动清算过程以支付借入的金额。之所以发生这种情况,是因为交换充当贷方,如果您的职位价值对您不利,您发布的抵押品将不足以确保贷款。...

BitStamp是否提供倒数合同?
2025-07-23 13:28:52
了解加密货币交易中的倒数合同在加密货币衍生产品领域,逆同是一种特定类型的期货或永久合同,在基本的加密货币(例如BTC或ETH)中,而不是在Stablecoins或Fiat货币中,定居点和抵押品在基本的加密货币中被划分为。这意味着,当交易者在反向合同中开设职位时,他们的利润和损失(p&L)将在基本资产...

BitStamp上的期货和永久性有什么区别?
2025-07-27 05:08:19
了解Bitstamp上的期货合约BitStamp上的期货合约是财务衍生品,允许交易者以预定的价格和日期推测加密货币的未来价格,例如Bitcoin或以太坊。这些合同的到期日期是固定的,这意味着它们将来会在特定的一天定居。当期货合同到期时,该职位将自动关闭,并根据入口价格和结算价格之间的差额解决损益。这...

如何找到您的Bitstamp Futures贸易历史?
2025-07-23 08:07:56
了解Bitstamp和未来交易的可用性从Bitstamp服务产品的当前状态开始,至关重要的是要澄清BitStamp不支持期货交易。该平台主要用作现货加密货币交换,使用户可以以当前市场价格购买,出售和交易数字资产,例如Bitcoin,以太坊和其他主要加密货币。在BitStamp上没有期货合同意味着用户...

我可以在Bitstamp Futures上使用尾随的停靠站吗?
2025-07-23 13:42:32
了解加密货币交易中的尾声停止尾随的停止是一种动态的停止订单,随着资产的价格朝着有利的方向移动,可以自动调整。与标准停止损失固定在设定的价格水平上不同,落后的停止遵循指定百分比或美元金额。这使交易者可以锁定利润,同时仍提供价格波动的空间。当价格逆转并达到落后的停车水平时,该订单会触发市场销售(或购买,...

我可以在Bitstamp Futures上使用尾随的停靠站吗?
2025-07-25 02:28:47
了解加密货币期货交易中的尾声停止尾随的停止是一种动态的停止失败订单,随着市场价格朝着有利的方向移动而自动调整。与标准停止损失(以设定的价格保持固定)不同,尾随停止遵循资产的价格以定义的百分比或美元距离。这种机制使交易者能够锁定利润,同时仍为交易增长的空间。在期货交易的背景下,在杠杆率增加损益的情况下...

为什么我的Bitstamp期货位置被清算?
2025-07-23 11:08:15
了解Bitstamp上的未来清算BitStamp上的期货交易涉及借贷资金以打开杠杆头寸,从而扩大了潜在的利益和风险。当您的保证金余额低于所需的维护阈值时,BitStamp会启动清算过程以支付借入的金额。之所以发生这种情况,是因为交换充当贷方,如果您的职位价值对您不利,您发布的抵押品将不足以确保贷款。...

BitStamp是否提供倒数合同?
2025-07-23 13:28:52
了解加密货币交易中的倒数合同在加密货币衍生产品领域,逆同是一种特定类型的期货或永久合同,在基本的加密货币(例如BTC或ETH)中,而不是在Stablecoins或Fiat货币中,定居点和抵押品在基本的加密货币中被划分为。这意味着,当交易者在反向合同中开设职位时,他们的利润和损失(p&L)将在基本资产...

BitStamp上的期货和永久性有什么区别?
2025-07-27 05:08:19
了解Bitstamp上的期货合约BitStamp上的期货合约是财务衍生品,允许交易者以预定的价格和日期推测加密货币的未来价格,例如Bitcoin或以太坊。这些合同的到期日期是固定的,这意味着它们将来会在特定的一天定居。当期货合同到期时,该职位将自动关闭,并根据入口价格和结算价格之间的差额解决损益。这...

如何找到您的Bitstamp Futures贸易历史?
2025-07-23 08:07:56
了解Bitstamp和未来交易的可用性从Bitstamp服务产品的当前状态开始,至关重要的是要澄清BitStamp不支持期货交易。该平台主要用作现货加密货币交换,使用户可以以当前市场价格购买,出售和交易数字资产,例如Bitcoin,以太坊和其他主要加密货币。在BitStamp上没有期货合同意味着用户...

我可以在Bitstamp Futures上使用尾随的停靠站吗?
2025-07-23 13:42:32
了解加密货币交易中的尾声停止尾随的停止是一种动态的停止订单,随着资产的价格朝着有利的方向移动,可以自动调整。与标准停止损失固定在设定的价格水平上不同,落后的停止遵循指定百分比或美元金额。这使交易者可以锁定利润,同时仍提供价格波动的空间。当价格逆转并达到落后的停车水平时,该订单会触发市场销售(或购买,...

我可以在Bitstamp Futures上使用尾随的停靠站吗?
2025-07-25 02:28:47
了解加密货币期货交易中的尾声停止尾随的停止是一种动态的停止失败订单,随着市场价格朝着有利的方向移动而自动调整。与标准停止损失(以设定的价格保持固定)不同,尾随停止遵循资产的价格以定义的百分比或美元距离。这种机制使交易者能够锁定利润,同时仍为交易增长的空间。在期货交易的背景下,在杠杆率增加损益的情况下...
查看所有文章
