区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > USDC > 正文

DEF:智能合约变量储存机制详解_99DEFI币

作者:

时间:

前言

在以太坊上,我们可以通过部署智能合约来实现我们需要的功能,合约代码中我们往往需要定义一些变量,这就涉及到了智能合约变量的存储机制。

这篇文章我们将根据solidity的所有的变量命名的类型来讲解智能合约的存储机制。

存储机制

每个在以太坊虚拟机中运行的智能合约的状态都在链上永久地存储着。这些值存储在一个巨大的数组中,数组的长度为2^256,下标从零开始且每一个数组能够储存32字节(256个比特)长度的值。并且存储是稀疏的,并没有那么密集。

变量类型

Solidity的数据变量类型分为两类:

Cardano创始人:一旦激活Alonzo硬分叉,用户就可以“运行智能合约”:Cardano(ADA)创始人Charles Hoskinson在他最新的YouTube直播更新中证实:“我们正在按计划进行,Alonzo硬分叉更新也在进行中”。Hoskinson透露,一个平行硬分叉是必需的,它不是按顺序完成的,因为有两个平行轨道同时发生;第一个轨道是硬分叉本身,另一个是围绕这个节点构建基础设施。

Hoskinson称:“我仍然相信,大部分开发基础设施将在8月至9月期间建成。这意味着当硬分叉出现在Cardano基础设施上的时候,你实际上可以运行智能合约,并为Cardano应用程序的开发和部署构建一个越来越好的环境。”(Finbold)[2021/7/31 1:26:48]

值类型-valuetype

动态 | 英国法律委员会认为智能合约或能增强法律系统透明性:据Coindesk消息,英国国会下属法律委员会正启动一项研究,该项研究旨在探讨使用智能合约给英国法律系统可能带来的一些积极影响,比如透明性。法律委员会认为智能合约能在企业中增强信任与交易透明性,法律系统应该尝试使用智能合约技术来保持对企业的吸引力。[2018/7/20]

引用类型-referencetype

值类型

布尔型(bool)2bit(0/1)

整型(int/uint)根据关键字的不同表示不同长度,int8表示8bits有符号数

定长浮点型(fixed/ufixed)Solidity还没有完全支持定长浮点型。可以声明定长浮点型的变量,但不能给它们赋值或把它们赋值给其他变量

金色财经现场报道 360官方人员高雪峰:360初衷是使区块链行业中涉及到的智能合约更安全:金色财经现场报道,在今日的360媒体见面会上,360官方人员高雪峰表示,“如何利用安全优势切入区块链领域,区块链不是新的技术而是把很多原有的技术做结合,传统的领域遇到的问题在区块链领域都会遇到,只是eos关注人数足够多所以会引起重视。从360角度,也就是站在安全守卫者的角度出发,依托于360的安全代码,360把数字货币异常的交易等都能感知出来。漏洞攻击的角度来说,能够发现问题,使用防御手段,从而使得区块链行业中涉及到的智能合约更安全,这是360的初衷。”[2018/5/29]

定长字节数组(byte/bytes)定义数组时定义长度

SmartMesh发布关于“以太坊智能合约溢出漏洞事件”的公告: SMT官方微博发布公告,公布最新进展:

1.本次漏洞产生的Token增减、交易数据如下。

①.由ETH智能合约漏洞生成的“假币”总数:65,133,050,195,990,400,000,000,000,000,000,000,000,000,000,000,000,000,000,000.891004451135422463

②.由黑客地址转至交易所的“假币”总数:65,300,289

③.在交易所交易的“假币”总数:16,638,887(待最终确认)

黑客地址转入交易所的假币中,未被交易的假币已全被交易所冻结。

2.生成并已经流通于交易所的“假币”,SmartMesh基金会称将拿出对等的SMT数量冻结及销毁,以弥补所造成的损失,保持SMT的总数在3,141,592,653。

3.SmartMesh团队已与Huobi、Gate、OKEx、CEX等多家交易所沟通、协调重新开通SMT交易对交易的具体时间以及其他相关措施,并在努力确认相关事项处理完毕后重启SMT在各交易所充提币。[2018/4/25]

地址类型(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的计算代码,用以验证机制分析的正确性。

当然,本文设计的智能合约设计并不复杂,在实际开发过程中远比此复杂,需要经历一些分析,在能找到正确的存储位置。最后,希望通过本文章可以帮助大家进一步的了解智能合约。

标签:DEFAPPINTBYT99DEFI币onekey钱包appEncointer币BYTS价格

USDC热门资讯
HTT:XT关于恢复FTM充提的公告_WWW

尊敬的XT用户: FTM钱包升级已完成,XT现已恢复FTM充值与提币业务,暂停期间给您带来的不便,敬请谅解.

DND:Indexed Finance 用户可以锁定 NDX 获得 dNDX 代币来获得项目收入红利,最低锁定金额 100NDX_IND

链闻消息,去中心化被动投资管理协议IndexedFinance宣布用户可以将治理代币NDX锁定90天到360天不等,以铸造dNDX代币,每个NDX铸造dNDX比例从1:1到4:1不等.

HTT:Gate.io NFT魔盒官方认证「原创作品集」招募_Gate.io

NFT魔盒上线以来,一直深受用户的喜爱。随着APP端NFT魔盒功能的推出,社区用户可以更加便捷的参与NFT的创作与交易.

DEF:DappRadar报告:17张图解读前四大币种的价值流动数据_数字人民币与区块链

本文来自Dappradar,原文作者:PedroHerrera,由Odaily星球日报译者Katie辜编译.

Gate.io:Gate.io 已发近期投票上币第179期-第186期空投福利活动奖励公告_最新版gate.io官网入口

Gate.io投票上币第179期-第186期空投福利活动已圆满结束,根据活动规则,我们已为符合规则的用户发放了活动奖励。用户可进入“钱包—账单明细”查询奖励发放情况.

TPS:ZT创新板即将上线 ORCA_orca币价格

亲爱的ZT用户: ZT创新板即将上线ORCA,并开启ORCA/USDT交易对。具体上线时间如下:充值:已开启;交易:2021年9月30日22:00?; ORCA 项目简介:Orca是Solana.