以太坊智能合约开发:Solidity 语言快速入门
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
在本文中我们从一个简单的智能合约样例出发通过对智能合约源文件结构的剖析与介绍使大家对Solidity语言有一个初步的认识。最后我们将该智能合约样例在 Remix 合约编译器中编译、部署观察其执行结果。
开始之前
在开始之前我们先对Solidity有个初步的了解即Solidity是什么
让我们看一下官方的描述
- Solidity是一种面向对象合约的为实现智能合约而创建的高级编程语言
- Solidity是一种针对以太坊虚拟机EVM设计的语言它受到了C++、Python和JavaScript的影响
- 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;
}
}
合约结构
版权许可
// SPDX-License-Identifier: MIT
版本许可位于源文件中的第1行用于定义合约的版权许可标识。虽然不是强制的但我们建议在每个源文件中都应该以这样的代码开始来说明合约的版权许可证。如果你不想指定一个许可证或者如果源代码不开源请使用特殊值 UNLICENSED
。
版本标识
pragma solidity ^0.8.13;
版本标识位于源文件中的第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 的所有版本 |
5 | x | 匹配所有版本 |
6 | 0.5或0.5.x | 匹配指定主版本号与次版本号下的所有版本 |
截止到目前Solidity的编译器版本已更新到 0.8.15
。我们建议在编译部署合约时应该尽量使用最新版本因为新版本会有一些新特性以及bug修复。
合约类对象
contract HelloWorld {
// 函数和数据
}
在Solidity语言中合约类似于其他面向对象编程语言中的类。contract
是定义合约类的关键字HelloWorld
是合约名称。我们建议合约名称和本地文件名用同一个名称且第一个字母大写。
合约还可以从其他合约继承可以是一些特殊的合约比如库library和接口interface。这些知识点我们会在后续的课程中讲解。
状态变量
string public str = "Hello World!";
这段代码中的 str
就是一个状态变量它是一个永久存储在合约存储中的值。
函数
function set(string memory s) public
function get() public view returns(string memory)
函数是合约代码的可执行单元函数通常在合约内部定义。函数一般有以下几部分组成
- 函数名
- 参数
- 返回值
在样例代码中我们定义了2个函数
set()
用于设置状态变量的值get()
用于返回状态变量的值。
注释
合约中的注释有单行注释//
和多行注释/*...*/
两种和C++的注释类似。
// 这是一个单行注释
/*
这是一个
多行注释
*/
合约部署
我们推荐使用Remix来开发简单合约。
Remix 是一个合约开发和编译器可以在线使用而无需安装任何东西。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hv3XOyUM-1669021104665)(D:\资料\我的\项目\IT培训项目\区块链\课程\Solidity语言基础教程\images\remix.png)]
我们在Remix中编译、部署和运行这个样例合约。执行结果如下图