智能合约 / 主题阅读

智能合约内存变量与存储变量的生命周期差异

本文解析智能合约中内存变量与存储变量的生命周期差异,阐述内存变量仅存在于函数执行期间而存储变量永久存储于链上的机制。

Java内存模型与内存结构示意图
主题资料配图,非新闻现场照片 · 配图:java内存模型与内存结构

数据存储位置与生命周期

智能合约的数据必须被分配到存储或内存位置。存储变量是状态变量,其值永久存储在区块链上,编译器需要声明类型以计算链上存储需求。内存变量仅存在于合约函数的执行生命周期内,不永久存储于链上,因此使用成本更低。

环境变量与全局状态

除用户定义的变量外,合约还包含特殊全局变量,如`block.timestamp`和`msg.sender`,它们提供区块链或当前交易的信息。这些变量不占用合约的存储空间,而是作为执行上下文的一部分被访问。

函数可见性与执行类型

函数分为内部和外部两种调用类型。内部函数不创建EVM调用,仅限当前合约或派生合约访问;外部函数创建EVM调用,是合约接口的一部分,可被其他合约或交易调用。函数的可见性(public或private)决定了其可访问范围。

视图函数与状态修改

视图函数承诺不修改合约数据状态,常用于读取数据。修改状态的操作包括写入状态变量、发送以太币、调用非view/pure函数等。构造函数仅在合约首次部署时执行一次,用于初始化状态变量。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. Anatomy of smart contracts | ethereum.org
  2. 配图:java内存模型与内存结构
← 更多智能合约文章返回顶部 ↑