前言
在以太坊上,我们可以通过部署智能合约来实现我们需要的功能,合约代码中我们往往需要定义一些变量,这就涉及到了智能合约变量的存储机制。
这篇文章我们将根据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
可以看到虽然规定了了长度为5,但是实际上只用了4个,所以就只是用了四个bytes8的空间。
是不是可以加一个,编译器会报错。
变长数组
国内首个区块链智能合同专利花落南京:3月11日消息,日前,总部位于南京的中国云签获得国家知识产权局授予的国内首个区块链智能合同领域的核心发明专利授权。中国云签运营“国家电子缔约安全保障服务平台”,在电子政务、商务领域为企业和个人提供等同纸质效力的电子合同缔约与区块链存证服务。目前,中国云签拥有电子合同企业标准的自主知识产权20多项,在电子合同实名认证、电子签约流程、合同存储验真三个方面拥有国家发明专利。(中国江苏网)[2020/3/11]
pragmasolidity^0
functionunlock(bytes32_password)public{?if(password==_password){??locked=false;?}}}
定义为私有变量只能组织其他合约访问,但是无法阻止公开访问
按照其代码,可以知道password的存储位置是1
web3.eth.getStorageAt(contract.address,1)
直接使用
contract.unlock("Averystrongsecretpassword:)")//密码错误
contract.unlock(web3.utils.hexToBytes('0x412076657279207374726f6e67207365637265742070617373776f7264203a29'))
题目二--LockBox
pragmasolidity0.4.24;import"../CtfFramework.sol";contractLockbox1isCtfFramework{?uint256privatepin;?constructor(address_ctfLauncher,address_player)publicpayable???CtfFramework(_ctfLauncher,_player)?{???pin=now000;?}??functionunlock(uint256_pin)externalctf{???require(pin==_pin,"IncorrectPIN");???msg.sender.transfer(address(this).balance);?}}
读取私有变量
constructor只在构造的时候执行一次
总结
本篇文章详细讲解了智能合约的优化存储原则,数组类型,字符串类型,结构体类型和映射类型的存储机制。同时提供了基于python的计算代码,用以验证机制分析的正确性。
当然,本文设计的智能合约设计并不复杂,在实际开发过程中远比此复杂,需要经历一些分析,在能找到正确的存储位置。最后,希望通过本文章可以帮助大家进一步的了解智能合约。
标签:INTWORBYTEPINIntimateUCK NetworkSushiBytes比特币行情软件pinescript
此前Gate.ioOLYMPUS/USDT流动性矿池已开启自动做市商AMM模式,为鼓励更多用户积极参与,今日下午13:00,OLYMPUS/USDT流动性矿池奖励新增额外6,097,560.
1900/1/1 0:00:00HuobiGlobal发公告称,将在12月31日之前逐步有序清退地区存量用户,HyperDAO、BiONE等13家机构对外宣布将退出市场;另外,韩国只有4家加密交易所可与银行合作保持全面运营.
1900/1/1 0:00:00尊敬WBF用户: ????因钱包升级,MARS现将暂时关闭充提币,恢复时间以公告为准,给您造成的不便敬请谅解,如有疑问,请咨询WBF官方客服.
1900/1/1 0:00:00据彭博社报道,SkyBridgeCapital创始人、著名加密货币支持者AnthonyScaramucci表示,抛开头条新闻不谈,绝大多数基金经理仍对加密货币和区块链技术持观望态度.
1900/1/1 0:00:00本文将讨论比特币升级提案?Taproot?,该提案将引入很多全新功能。本文将从各个技术层面分析Taproot、介绍本次升级中涉及的技术以及这些技术会给比特币用户带来哪些好处.
1900/1/1 0:00:00活动一:新用户专属福利:交易KAVA和HARD,平分10,000美元大奖活动期间注册的新用户,在活动指定KAVA和HARD现货或杠杆交易对有效总交易量不低于90KAVA和270HARD,即可参与平分10.
1900/1/1 0:00:00