首页 > 其他分享 >Solidity基础 | 02 基本合约结构

Solidity基础 | 02 基本合约结构

时间:2022-11-15 10:31:26浏览次数:52  
标签:02 Solidity name solidity 0.4 注释 版本 合约


导读

区块链这么火,不学一下怎么行?


今天这篇文章将带领大家了解合约的结构,了解最基本合约,为以后设计功能更加强大的合约打下基础!让我们一起走进本文看一下吧!


如果你有什么问题,或者有什么想法,欢迎评论与我一起沟通交流。如果你想了解更多有关于区块链相关技术的内容,那就加群:955538712 或者扫描下方二维码加入我们吧!



​ ​ ​ ​ ​


1 回看第一个程序

1 第一个程序

我们前面讲了一个合约程序:


pragma solidity ^0.4.0;

contract HelloWorld {
string public name = "水亦心";

function getName() public view returns(string memory) { // view 只访问而不修改数据
return name;
}

function changeName(string memory _name) public {
name = _name;
}
}


这个合约中涉及到了很多的知识点,让我们一起来看一下这个合约的基本结构吧!


2 合约结构

这个合约中,我们第一行是合约的版本号。


pragma solidity ^0.4.0;


后面的类似于C++中的类,这个是具体的合约结构:


contract HelloWorld {
string public name = "水亦心";

function getName() public view returns(string memory) { // view 只访问而不修改数据
return name;
}

function changeName(string memory _name) public {
name = _name;
}
}


合约中的第一行是定义了一个字符串类型的变量;


后面是两个函数。


2 合约文件结构

我们一起来看一下比较常见的合约文件的结构

1 SPDX许可证标识符

这一部分主要是开发人员要考虑的。


智能合约的源代码的提供可能会涉及到版权方面的法律问题,所以Solidity编译器鼓励使用机器可读的 SPDX license identifiers (即许可证标识符)。


为此我们需要使用如下语句说明其许可证:


// SPDX-License-Identifier: MIT


许可证标识符写在合约的最前面,如果不想指定许可证或源代码不是开源的,可以使用特殊值:


UNLICENSED


标识符许可证是最近几个版本的Solidity引入的,早期的几个版本没有,例如0.4.X和0.5.X。我们后续的教程使用的是比较早期的版本,不会涉及到这么复杂的内容,更适合初学者入门Solidity。所以我们只在这里提一下,有兴趣的大家可以深入研究。


2 版本标识指令Pragma与版本号

前面我们的代码中,我们第一行如下:


pragma solidity ^0.4.0;


其中pragma是版本标识指令,用来启用某些编译器检查,要注意的是,这个版本标识指令只对当前合约有效,如果其他合约调用该合约,一般情况下,该合约中的版本标识指令是不会对调用该合约的合约产生影响的。


solidity无需解释,重点是后面的内容,^0.4.0表示高于0.4.0,但低于0.5.0的版本,都可以编译该合约。也就是说0.4.X系列中比0.4.0高的版本,都能编译当前的合约,例如我们上个教程中使用的是0.4.25。同理,^0.5.2表示0.5.X系列中比0.5.2高的版本都能编译该合约。


除此之外,还有一种方法:


pragma solidity >=0.4.22 <0.6.0;


这个方法能够更加灵活地控制版本号,大家能够非常清楚地知道,这个合约支持0.4.22及以上,0.6.0以下的版本进行编译。

3 注释

学习过其他编程语言的同学,应该对注释比较了解,注释的目的主要有:


(1)写在代码最上面,说明代码相关属性及作用
(2)写在代码中,说明某条代码或某块代码的功能
(3)注释掉暂时不用,未来可能会用到的代码
(4)程序员自娱自乐


在不同的编程语言中,注释可能还有其他的作用,例如在Python中,为了能够使得代码能够正确对中文编码,要在前面用注释写:


#coding=utf-8


后期solidity版本的许可证标志符也要使用注释,例如:


// SPDX-License-Identifier: GPL-3.0


在solidity中,注释有单行注释和多行注释。solidity的注释和C语言,C++是一致的。


单行注释符号为://,多行注释符号为:/**/。举个例子:


// AI与区块链技术。

/*
AI与区块链技术
AI and BlockChain technology
*/


除此之外,solidity还引入了另外的注释,或者说就是给上述注释“化妆”,这种注释称为natspec注释,单行注释为:///,多行注释为:/** */。多行注释在每行注释开头,都加了一个额外的*。


举个例子:


pragma solidity >=0.4.0 <0.7.0;

/// AI与区块链技术

/**
* AI与区块链技术
* AI and BlockChain technology
* 这里的多行注释参考了Java的写法
*/


注意:这种注释不是随便使用的,它们应该直接用在函数声明或语句的上方。下面是0.8.x系列注释的写法:


pragma solidity >=0.4.21 <0.9.0;

/** @title Shape calculator. */
contract ShapeCalculator {
/// @dev Calculates a rectangle's surface and perimeter.
/// @param w Width of the rectangle.
/// @param h Height of the rectangle.
/// @return s The calculated surface.
/// @return p The calculated perimeter.
function rectangle(uint w, uint h) public pure returns (uint s, uint p) {
s = w * h;
p = 2 * (w + h);
}
}


下面是0.5.X系列注释的写法:


pragma solidity >=0.4.0 <0.7.0;

/** @title Shape calculator. */
contract ShapeCalculator {
/** @dev Calculates a rectangle's surface and perimeter.
* @param w Width of the rectangle.
* @param h Height of the rectangle.
* @return s The calculated surface.
* @return p The calculated perimeter.
*/
function rectangle(uint w, uint h) public pure returns (uint s, uint p) {
s = w * h;
p = 2 * (w + h);
}
}


4 合约和最基本合约

接下来就是最重要的部分,合约了。


合约就好像是C++中的类,有类名,有类中变量,有类中方法。同样的,合约也有合约名,合约中变量,合约中方法。


合约中还有其他有趣的内容,我们后续会逐步拓展。现在就让我们掌握最基本的用法吧!


定义一个合约如下:


contract SYX {

}


其中,contract表示我们定义的是合约,SYX是我们合约的名称。需要注意的是,合约和左大括号中间要有一个空格


上面这个合约里面没有任何内容,我们把这种合约叫做空合约


只有空合约和版本标识指令的合约我们称之为最基本合约

说在后面的话

这篇文章到这里就要结束啦,希望大家能够通过这篇文章,了解基本的合约结构,打好基础,在未来设计出更加强大的合约!


让我们在后续的课程中,再接再厉,学习更多知识吧。


​ ​ ​ ​ ​


AI与区块链技术

Solidity基础 | 02 基本合约结构_多行注释

长按二维码关注​

标签:02,Solidity,name,solidity,0.4,注释,版本,合约
From: https://blog.51cto.com/u_12001271/5851853

相关文章