火星链 火星链
Ctrl+D收藏火星链

PLA:智能合约变量储存机制详解

作者:

时间:1900/1/1 0:00:00

前言

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

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

存储机制

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

变量类型

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

基于AI的Web3智能合约生成器Mazzuma完成新一轮融资,Adaverse参投:金色财经报道,基于人工智能技术的Web3智能合约生成器Mazzuma宣布完成新一轮融资,Cardano生态投资机构Adaverse参投,但具体融资金额暂未披露。Mazzuma总部位于非洲加纳,旨在利用人工智能技术支持帮助开发人员为Web3去中心化应用程序无缝生成智能合约代码,继而加快区块链智能合约的创建和部署,新资金将用于推动旗下新产品MazzumaGPT上线。 (disrupt-africa)[2023/6/27 22:03:15]

值类型-valuetype

引用类型-referencetype

zkSync2.0测试网将于今日重置,开发人员需重新部署智能合约:10月10日消息,以太坊Layer2扩容解决方案zkSync2.0测试网将在今日进行重置,包括交易历史、代币余额,以及虚拟机升级和接口更改,开发人员需重新部署智能合约。此外这仅适用于zkSync2.0测试网,不会影响zkSync1.0。[2022/10/10 12:52:10]

值类型

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

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

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

智能合约协议Plasm集成Chainlink喂价:金色财经报道,基于Polkadot的Substrate框架构建的智能合约协议Plasm集成了Chainlink(LINK)的喂价。据悉,Chainlink有可能很快就会成为Polkadot的平行链。Plasm首席执行官Sota Watanabe表示,打算将Chainlink的数据预言机用于Plasm的代币分发机制Lockdrop。Sota称,当Chainlink成为Polkadot平行链,Plasm就可以获取数据并将数据从Chainlink区块链发送到Plasm网络。[2020/8/13]

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

动态 | 近3.2亿美元ETH被锁定在智能合约中:据trustnodes报道,根据defipulse网站的数据,目前有接近3.2亿美元的ETH被锁定在各种智能合约中,这些合约提供抵押加密贷款、去中心化的投注或更具可扩展性的加密支付系统等众多功能。目前MakerDAO的DAI占据主导地位,其智能合约目前锁定了价值2.88亿美元的ETH。[2019/2/28]

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

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

标签:PLAINTLOCWORPLANB币int币为什么不火AllianceBlock NexeraArkane Network

以太坊最新价格热门资讯
TOO:美联储主席:美国中央银行数字货币(CBDC)的开发是「关键工作」

作者:AmyLiu周二,美国参议院银行委员会举行了听证会,会上讨论了CBDC和金融隐私问题。美联储主席鲍威尔称美国中央银行数字货币(CBDC)的开发是“关键工作”,他对参议员PatToomey(.

1900/1/1 0:00:00
ANC:一文了解闪电网络的力量:快速完成物联网小额支付

作者:?OmerShlomovits原文链接:https://zengo.com/make-micro-payments-in-a-flash-the-power-of-lngate/引言设想你.

1900/1/1 0:00:00
比特币:一文深入了解将比特币合法化后的乌克兰现状

原文来源|BitcoinMagazine编译整理|白泽研究院2021年9月10日,乌克兰将比特币合法化,明确了比特币在该国是合法资产.

1900/1/1 0:00:00
TOK:Tokemak-新一代流动性管理基础设施整体项目分析

研究机构:MintVentures研究员:Rollin第一节研报要点——本文为Tokemak初期研究报告,由于其主产品还未上线,项目的详细文档还未推出,属于早期项目研究.

1900/1/1 0:00:00
区块链:虚拟现实元宇宙项目 Bloktopia 完成 420 万美元私募轮融资,Animoca Brands 领投

链闻消息,虚拟现实元宇宙项目Bloktopia完成420万美元私募轮融资,AnimocaBrands领投.

1900/1/1 0:00:00
USD:大币网(Dcoin)计划下架12个交易对公告

亲爱的大币网用户:为打造更加健康、稳定的加密资产生态系统,大币网将对平台上线项目进行持续监控,并对不符合要求的币对予以下架处理。据此,大币网将对以下流动性低的12个项目进行下架处理.

1900/1/1 0:00:00