Hello, World!
按照惯例,我们使用 Hello, World!
作为入门例子,其代码如下:
// 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
,来运行该合约。打开后的界面如下:
点击左侧的 编译器
按钮,点击 编译 HelloWorld.sol
:
编译成功后,我们需要将该合约部署到以太坊。点击左侧的 部署 & 发交易
按钮:
环境选择 Remix VM(Shanghai)
,这是 Remix IDE
自带的以太坊虚拟机(EVM)环境。可以看到合约处,已经自动选定了编译好的 HelloWorld.sol
合约,点击部署。
部署成功后,下方 已部署合约
处,出现了部署成功的合约 Hello, World!
:
该合约下有一个 echo
函数按钮,点击该按钮即可成功调用 HelloWorld
合约中的 echo
函数。点击后下方出现 0: string: Hello World!
,表示合约函数返回了一个字符串,内容为 "Hello, World!"
。
以太坊虚拟机
Solidity
编程与我们传统的编程最大的不同,在于 Solidity
编译后的字节码最终是运行在以太坊虚拟机(EVM)上的。
当外界调用该智能合约时,以太坊虚拟机取出该合约的字节码,并解释执行。
区块链在这个过程中,则提供了永久性存储的能力(当然还有加密鉴权等能力),我们的存储变量以及字节码都保存在以太坊区块链上。智能合约运行过程中,如果更改了区块链上的数据,则该改动后的新值就会被记录到区块链的下一个区块中。
更多有关以太坊的信息,可以参阅我们的《以太坊教程》。