当前位置:   article > 正文

以太坊智能合约开发:Solidity 语言快速入门

以太坊智能合约开发

在本文中,我们从一个简单的智能合约样例出发,通过对智能合约源文件结构的剖析与介绍,使大家对Solidity语言有一个初步的认识。最后,我们将该智能合约样例在 Remix 合约编译器中编译、部署,观察其执行结果。

开始之前

在开始之前,我们先对Solidity有个初步的了解,即Solidity是什么?

让我们看一下官方的描述:

  1. Solidity是一种面向对象(合约)的,为实现智能合约而创建的高级编程语言;
  2. Solidity是一种针对以太坊虚拟机(EVM)设计的语言,它受到了C++、Python和JavaScript的影响;
  3. Solidity是一种静态类型语言,支持复杂的用户定义编程,支持库和继承。

合约样例

下面是一个简单的合约例子,我们用来演示如何用Solidity编写一个简单的智能合约。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// 第一个合约
contract HelloWorld {
    // 状态变量
    string public str = "Hello World!";

    // set 函数
    function set(string memory s) public {
        str = s;
    }

    // get 函数
    function get() public view returns(string memory) {
        return str;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

合约结构

版权许可

// SPDX-License-Identifier: MIT
  • 1

版本许可位于源文件中的第1行,用于定义合约的版权许可标识。虽然不是强制的,但我们建议在每个源文件中都应该以这样的代码开始,来说明合约的版权许可证。如果你不想指定一个许可证,或者如果源代码不开源,请使用特殊值 UNLICENSED

版本标识

pragma solidity ^0.8.13;
  • 1

版本标识位于源文件中的第2行,用于定义Solidity的版本,其中 pragma 是定义版本标识的关键字。

这行代码表示不允许低于 0.8.7 版本的编译器编译,也不允许高于 0.9.0 的编译器编译,即使用的编译器版本介于 0.8.7 与 0.9.0之间。

Solidity编译器版本规范如下:

序号版本规范说明
1^0.5.1指定的主版本号下所有更新的版本。即匹配 0.5.1 ~ 0.6.0 之间的版本
2~0.5.1指定的主版本号与次版本号下所有更新的版本。即匹配 0.5.1 ~ 0.5.9 之间的版本
3>=0.5.1版本号大于等于0.5.1,匹配 >=0.5.1 的所有版本
4<=0.5.1版本号小于等于0.5.1,匹配 <=0.5.1 的所有版本
5x匹配所有版本
60.5或0.5.x匹配指定主版本号与次版本号下的所有版本

截止到目前,Solidity的编译器版本已更新到 0.8.15。我们建议在编译部署合约时,应该尽量使用最新版本,因为新版本会有一些新特性以及bug修复。

合约类(对象)

contract HelloWorld {
    // 函数和数据
}
  • 1
  • 2
  • 3

在Solidity语言中,合约类似于其他面向对象编程语言中的类。contract 是定义合约类的关键字,HelloWorld 是合约名称。我们建议合约名称和本地文件名用同一个名称,且第一个字母大写。

合约还可以从其他合约继承,可以是一些特殊的合约,比如库(library)和接口(interface)。这些知识点我们会在后续的课程中讲解。

状态变量

string public str = "Hello World!";
  • 1

这段代码中的 str 就是一个状态变量,它是一个永久存储在合约存储中的值。

函数

function set(string memory s) public
function get() public view returns(string memory)
  • 1
  • 2

函数是合约代码的可执行单元,函数通常在合约内部定义。函数一般有以下几部分组成:

  • 函数名
  • 参数
  • 返回值

在样例代码中,我们定义了2个函数:

  • set():用于设置状态变量的值;
  • get():用于返回状态变量的值。

注释

合约中的注释有单行注释(//)和多行注释(/*...*/)两种,和C++的注释类似。

// 这是一个单行注释

/*
	这是一个
	多行注释
*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

合约部署

我们推荐使用Remix来开发简单合约。

Remix 是一个合约开发和编译器,可以在线使用,而无需安装任何东西。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hv3XOyUM-1669021104665)(D:\资料\我的\项目\IT培训项目\区块链\课程\Solidity语言基础教程\images\remix.png)]

我们在Remix中编译、部署和运行这个样例合约。执行结果如下图:

Solidity 语言快速入门

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/85784
推荐阅读
相关标签
  

闽ICP备14008679号