前言
在以太坊上,我们可以通过部署智能合约来实现我们需要的功能,合约代码中我们往往需要定义一些变量,这就涉及到了智能合约变量的存储机制。
这篇文章我们将根据solidity的所有的变量命名的类型来讲解智能合约的存储机制。
存储机制
每个在以太坊虚拟机中运行的智能合约的状态都在链上永久地存储着。这些值存储在一个巨大的数组中,数组的长度为2^256,下标从零开始且每一个数组能够储存32字节(256个比特)长度的值。并且存储是稀疏的,并没有那么密集。
变量类型
Solidity的数据变量类型分为两类:
数据:Shiba Inu成为排名前2000以太坊钱包使用最多的智能合约:4月17日消息,根据WhaleStats的数据,鲸鱼用户正在积极购买SHIB,这导致Shiba Inu智能合约的使用量增加,并使其成为2000个最大的以太坊钱包使用最多的智能合约。
除此之外,Shiba Inu的市场和链上指标也在飙升,鲸鱼地址的平均余额上升到2.36 SHIB,交易量增长了436%,达到5300万美元。
更重要的是Shiba Inu在鲸鱼地址上的净流量增长了近500%,这表明大型投资者短期和中期看涨SHIB。(U.Today)[2022/4/18 14:30:02]
值类型-valuetype
BM:Clarion OS正开发序列化库可提高EOSIO智能合约性能:EOS创始人BM(Daniel Larimer)发推称,Clarion OS正在开发一个改进的序列化库,可以通过减少CPU从数据库加载、修改数据的成本来提高EOSIO智能合约的性能。注:Clarion OS为BM昨日宣布的新社交媒体项目。[2021/3/3 18:09:56]
引用类型-referencetype
值类型
布尔型(bool)2bit(0/1)
整型(int/uint)根据关键字的不同表示不同长度,int8表示8bits有符号数
声音 | 智能合约之父Nick Szabo:比特币ETF可能会导致更多的问题:据官方Twitter,智能合约之父Nick Szabo于8月12日发出的一系列推文显示其似乎对比特币ETF获得监管机构批准持规避风险的态度。他在推文中写道,“就我个人而言,我不会为为ETF或华尔街管理的资金游说,它们可能导致更多的问题。最近愚蠢的抛售已经或将很快摧毁这个领域的许多自以为是的、一无所知的东西。我们不需要新的人来代替他们。”[2018/8/14]
定长浮点型(fixed/ufixed)Solidity还没有完全支持定长浮点型。可以声明定长浮点型的变量,但不能给它们赋值或把它们赋值给其他变量
国际贸易数字化委员会联合企业推出贸易业的智能合约平台:据国际贸易数字化委员会ITDC(International Trade Digitalization Commission)称,ITDC已经正式宣布推出基于区块链技术,针对贸易行业打造的新一代智能合约平台。据悉,项目主要发起人之一、大龙网集团董事长冯剑峰表示,从过去骆驼到船队,再到现在的互联网,全球贸易每一次变革背后,都是贸易量的剧增和成本的剧减。今天,随着传统跨境贸易中海量中小企业成为主角,订单碎片、高频交易带来的是贸易服务成本高企。区块链技术为这些问题带来全新的解决思路。[2018/3/22]
定长字节数组(byte/bytes)定义数组时定义长度
地址类型(adress)160bits
地址类型成员变量(balance,transfer....)?
balanceuint256(256bits)?
transfer()uint256(256bits)
引用类型
不定长字节数组类型(bytes/byte,string,uint....)
结构体(struct)
映射(mapping)
简单分析
写一个简单值类型的合约
pragmasolidity^0
可以看到虽然规定了了长度为5,但是实际上只用了4个,所以就只是用了四个bytes8的空间。
是不是可以加一个,编译器会报错。
变长数组
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的计算代码,用以验证机制分析的正确性。
当然,本文设计的智能合约设计并不复杂,在实际开发过程中远比此复杂,需要经历一些分析,在能找到正确的存储位置。最后,希望通过本文章可以帮助大家进一步的了解智能合约。
尊敬的中币用户:????中币现已开放PERP及WAVES提币业务。感谢您对中币的支持与信任!中币运营团队2021年9月29日关注我们Telegram:ZBEnglishhttps://t.me/.
1900/1/1 0:00:00链闻消息,据TheBlock报道,加密货币财资管理平台MultiSafe改名为Coinshift,同时宣布完成250万美元种子轮股权融资.
1900/1/1 0:00:00研究机构:MintVentures研究员:Rollin第一节研报要点——本文为Tokemak初期研究报告,由于其主产品还未上线,项目的详细文档还未推出,属于早期项目研究.
1900/1/1 0:00:009月27日,Bitfinex的一个主要钱包以7676将int转成Hexhttps://github判断是否可以被2整除,如果不行需要在字符开头添加一个0.
1900/1/1 0:00:00各位用户,目前区块链技术仍处于发展早期,我们可以观察到行业内充斥着各种炒作和局,让普通用户难以分辨,加上新概念晦涩难懂,用户很容易遭受资产损失.
1900/1/1 0:00:001.关于项目Evanesco(EVA)空投结果Gate.ioStartup项目Evanesco代币EVA于2021年09月28日10:00开始下单,8小时内下单同等对待,总共有10.
1900/1/1 0:00:00