Hello, World!

按照惯例,我们使用 Hello, World! 作为入门例子,其代码如下:

HelloWorld.sol
运行
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract HelloWorld {
    function echo() public pure returns (string memory) {
        return "Hello World!";
    }
}

代码解释

第一行 // SPDX-License-Identifier: GPL-3.0,以注释方式,指定当前源文件的版权。

第二行 pragma solidity >=0.7.0 <0.9.0;,使用编译器指令 progma,指定 solidity 编译器版本必须高于等于0.7且小于0.9。

第三行 contract HelloWorld,声明一个合约,名称为 HelloWorld

第四行 function echo() public pure returns (string memory),声明一个名为 echo 的函数,public pure 修饰 echo 函数,public 表明它是一个公共函数,意味着它可以被外部用户调用。pure 表明它是一个纯函数,即函数本身不读取、不修改存储状态。

returns (string memory) 表明函数返回一个变量,该变量为 string 字符串,保存在 memory 内存中。

第五行 return "Hello World!",返回字符串 "Hello, World!"

可以看到 Solidity 的代码结构并不复杂,如果您接触过面向对象编程,肯定会对上面的合约声明方式非常熟悉,它与面向对象编程中的类十分相似。

运行合约

您可以通过点击上面代码块右上角的 运行 按钮,跳转到 Remix IDE,来运行该合约。打开后的界面如下:

Remix IDE

点击左侧的 编译器 按钮,点击 编译 HelloWorld.sol

发布合约

编译成功后,我们需要将该合约部署到以太坊。点击左侧的 部署 & 发交易 按钮:

部署合约

环境选择 Remix VM(Shanghai),这是 Remix IDE 自带的以太坊虚拟机(EVM)环境。可以看到合约处,已经自动选定了编译好的 HelloWorld.sol 合约,点击部署。

部署成功后,下方 已部署合约 处,出现了部署成功的合约 Hello, World!

Remix IDE

该合约下有一个 echo 函数按钮,点击该按钮即可成功调用 HelloWorld 合约中的 echo 函数。点击后下方出现 0: string: Hello World!,表示合约函数返回了一个字符串,内容为 "Hello, World!"

以太坊虚拟机

Solidity 编程与我们传统的编程最大的不同,在于 Solidity 编译后的字节码最终是运行在以太坊虚拟机(EVM)上的。

当外界调用该智能合约时,以太坊虚拟机取出该合约的字节码,并解释执行。

区块链在这个过程中,则提供了永久性存储的能力(当然还有加密鉴权等能力),我们的存储变量以及字节码都保存在以太坊区块链上。智能合约运行过程中,如果更改了区块链上的数据,则该改动后的新值就会被记录到区块链的下一个区块中。

更多有关以太坊的信息,可以参阅我们的《以太坊教程》