For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
区块链是一种分布式账本技术,它通过将数据记录在多个节点上,形成一个不可篡改的链式结构。每个节点都有完整的账本副本,并通过共识算法来保证数据的一致性和安全性。
区块链的核心概念是区块和链。区块是数据的集合,包含了一定数量的交易记录和其他相关信息。每个区块都包含了前一个区块的哈希值,形成了一个链式结构。这样的设计使得区块链中的数据无法被篡改,因为任何对数据的修改都会导致后续区块的哈希值发生变化。
区块链的应用非常广泛,著名的应用就是比特币。比特币是一种基于区块链技术的加密货币,它通过区块链来记录交易信息,实现了去中心化的电子货币系统。
除了加密货币,区块链还可以应用于供应链管理、智能合约、数字身份认证等领域。由于其去中心化、透明、安全等特点,区块链被认为是一种具有革命性潜力的技术,有望改变传统的商业模式和社会结构。
一、什么是合约存储布局,为什么它很重要?
合约存储布局是指规定合约存储变量在长期内存中的排列方式的规则。几乎所有的智能合约都有需要长期存储的状态变量。
理解合约存储布局对以下方面很重要:
编写高效的燃气合约,因为在区块链上将数据存储在长期内存中是昂贵的。在本文后面,我们将详细介绍如何使用存储布局规则来大化燃气节省。
处理使用代理或钻石模式或其他各种模式的合约。
审计合约的安全性。不理解合约存储布局规则可能会使我们的合约容易受到攻击。
除我们定义的公共函数和变量之外,状态变量的布局也被认为是外部接口的一部分。
智能合约开发人员无法直接控制合约外部接口的这个方面,它由编译器控制。但是,如果编译器版本更改并且合约存储布局的规则发生变化,开发人员需要了解这一点。
二、内存如何在EVM中使用?
智能合约是在区块链上运行的计算机程序。程序包括函数和数据(也称为变量或参数),这些函数操作数据。函数使用的数据需要存储在计算机的内存中。在这种情况下,计算机是EVM。
Solidity内存类型
在Solidity中,有3种不同的内存类型,开发人员可以使用它们来指示EVM存储其变量的位置:memory,calldata和storage。
还有关于变量存储位置的有效期限以及变量使用方式的规定。例如,变量是否可以被读取?变量是否可以被写入?
1.Memory
开发人员会在函数中使用“memory”关键字来定义变量和参数。这些类型的变量只存在于函数执行期间。当函数运行结束时,存储在内存区域中的变量和参数会消失。
对于有编程背景的人来说,“memory”是为熟悉的内存类型。
2.Calldata
calldatamemory类型与memory类型非常相似,并且在声明组成函数签名的动态大小参数的外部函数时必须使用它。
memory变量和calldata变量之间的区别在于,calldata变量引用的是只读内存区域。
3.Storage
Solidity的终类型是存储类型。存储内存是合约的长期存储区域,在函数或事务执行完成后存储变量。
本文的重点是关于存储变量如何布局的EVM规则。
长期存储内存的概念与其他两种内存类型形成鲜明对比。合约的状态变量(即在合约内声明但不在函数内声明的变量)存储在存储内存区域中。
存储内存类型的概念是区块链所特有的,因为在智能合约中工作时,通过区块链的加密封存属性,存储的数据是无法篡改的。在其他编程环境中,如果我们想要长期存储变量,通常会将这项工作转移到文件系统或数据库中。但在区块链上,智能合约的代码和数据都长期保留在区块链上。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。