智能合约示例
让我们从一个基本示例开始,该示例设置变量的值并将其公开以供其他合约访问。如果您现在不了解所有内容也没关系,我们稍后会详细介绍。
存储示例
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
第一行告诉您源代码是在 GPL 3.0 版下获得许可的。机器可读的许可证说明符在默认发布源代码的设置中很重要。
下一行指定源代码是为 Solidity 版本 0.4.16 或更高版本的语言编写的,但不包括版本 0.9.0。这是为了确保合约不能与新的(破坏性的)编译器版本一起编译,因为它的行为可能会有所不同。 Pragma是编译器关于如何处理源代码的常用指令(例如pragma once)。
Solidity 意义上的合约是位于以太坊区块链上特定地址的代码(其功能)和数据(其状态)的集合。uint storedData;
行声明了一个uint
类型(256位的无符号整数)的状态变量storedData
。您可以将其视为数据库中的单个插槽,您可以通过调用管理数据库的代码的函数来查询和更改它。在此示例中,合约定义了可用于修改或检索变量值的函数set
和
get
。
要访问当前合约的成员(如状态变量),通常不需要添加this.
前缀,只需通过名称直接访问即可。与其他一些语言不同,省略它不仅仅是风格问题,它会导致访问成员的方式完全不同,稍后会详细介绍。
除了(由于以太坊构建的基础设施)允许任何人存储世界上任何人都可以访问的单个数字之外,该合约还没有做太多事情,而没有(可行的)方法来阻止你发布这个数字。任何人都可以用不同的值再次调用set
并覆盖您的号码,但该号码仍存储在区块链的历史记录中。稍后,您将看到如何施加访问限制,以便只有您可以更改号码。
警告
使用 Unicode 文本时要小心,因为看起来相似(甚至相同)的字符可能有不同的代码点,因此被编码为不同的字节数组。
笔记
所有标识符(合约名称、函数名称和变量名称)都仅限于 ASCII 字符集。可以将 UTF-8 编码的数据存储在字符串变量中。
更多建议: