前言
在以太坊上,我们可以通过部署智能合约来实现我们需要的功能,合约代码中我们往往需要定义一些变量,这就涉及到了智能合约变量的存储机制。这篇文章我们将根据solidity的所有的变量命名的类型来讲解智能合约的存储机制。存储机制
每个在以太坊虚拟机中运行的智能合约的状态都在链上永久地存储着。这些值存储在一个巨大的数组中,数组的长度为2^256,下标从零开始且每一个数组能够储存32字节(256个比特)长度的值。并且存储是稀疏的,并没有那么密集。变量类型
Solidity的数据变量类型分为两类:值类型-valuetype引用类型-referencetype值类型布尔型(bool)2bit(0/1)整型(int/uint)根据关键字的不同表示不同长度,int8表示8bits有符号数定长浮点型(fixed/ufixed)Solidity还没有完全支持定长浮点型。可以声明定长浮点型的变量,但不能给它们赋值或把它们赋值给其他变量定长字节数组(byte/bytes)定义数组时定义长度地址类型(adress)160bits地址类型成员变量(balance,transfer....)balanceuint256(256bits)transfer()uint256(256bits)引用类型不定长字节数组类型(bytes/byte,string,uint....)结构体(struct)映射(mapping)简单分析
写一个简单值类型的合约pragmasolidity^0
优化存储原则:如果下一个变量长度和上一个变量长度加起来不超过256bits,它们就会存储在同一个插槽里。
总结
本篇文章详细讲解了智能合约的优化存储原则,数组类型,字符串类型,结构体类型和映射类型的存储机制。同时提供了基于python的计算代码,用以验证机制分析的正确性。当然,本文设计的智能合约设计并不复杂,在实际开发过程中远比此复杂,需要经历一些分析,在能找到正确的存储位置。最后,希望通过本文章可以帮助大家进一步的了解智能合约。
信誉系统可以激励参与者的高质量贡献,包括内容创造、内容调节、社区构建和规则设置。这对任何Web3项目的发展和持续十分关键。但要设计一套好的信誉系统,需要考虑信誉情况、可信度等诸多方面.
1900/1/1 0:00:00区块链分析公司Chainalysis发表文章称,中欧、北欧和西欧(CNWE)成为世界上最大的加密货币经济体,去年接收了价值超过1万亿美元的加密货币,占全球活动的25%.
1900/1/1 0:00:00昨天,加密市场经历了一次严重的杠杆清算。根据Skew数据,交易所报告的清算金额超过21亿美元,实际数字可能更高。BTC和ETH价格在过去24小时内下降了超20%.
1900/1/1 0:00:00近日消息,以太坊扩容方案Optimism宣布其OVM的2.0版将于10月14日部署至Kovan测试网,并于10月28日部署至以太网主网.
1900/1/1 0:00:00作者|秦晓峰编辑|郝方舟出品|Odaily星球日报 一、整体概述 拳王迈克·泰森在推特提问,“Solana还是Ethereum?”,暗示可能在Solana或以太坊区块链上推出NFT.
1900/1/1 0:00:00Bankless前言:我们已经给出了案例来证明DAO是工作方式的未来。我们这一点非常坚信。但对于DAO来说,现在的发展还为时过早。相关的工具和基础设施还稀少。大多数DAO仍然相当中心化。而且它们绝对不是自主的.
1900/1/1 0:00:00