【Solidity智能合约开发第6篇】3分钟了解Solidity合约完整生命周期(状态变量、局部变量、构造函数、成员函数、析构函数、生命周期)
一、什么是合约?
在区块链上运行的程序,通常称为智能合约(Smart Contract)
。所以通常会把写区块链程序
改称写智能合约
。
简单点来讲,合约就是运行在区块链上的一段程序。
二、一个完整的合约
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;
contract Counter {
uint count = 0;
address payable owner;
constructor() public {
owner = msg.sender;
}
function increment() public {
uint step = 10;
count = count + step;
}
function getCount() view public returns (uint) {
return count;
}
function kill() public {
if (owner == msg.sender) {
selfdestruct(owner);
}
}
}
2.1 SPDX License Identifier声明
SPDX-License-Identifier: MIT
- MIT许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称「X条款」(X License)或「X11条款」(X11 License)
- MIT内容与三条款BSD许可证(3-clause BSD license)内容颇为近似,但是赋予软件被授权人更大的权利与更少的限制。
- 被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
- 被授权人可根据程式的需要修改授权条款为适当的内容。
2.2 版本声明
pragma solidity >=0.5.0 <0.7.0;
pragma solidity
代表solidity
版本声明,>=0.5.0 <0.7.0
表示当前合约版本>=0.5.0
且<0.7.0
。
️:合约编译时,需使用声明范围的编译器进行编译。
2.3 合约声明
contract Counter {
}
contract
是合约声明的关键字,Counter
是合约名字,contract Counter
就是声明一个Counter
合约。
contract
相当于其他语言中的class
,Counter
相当于类名,contract Counter
相当于class Counter extends Contract
。
2.4 状态变量
uint count = 0;
address payable owner;
count
和owner
就是状态变量,合约中的状态变量相当于类
中的属性变量。
2.5 构造函数(Contructor)
constructor() public {
}
以前的版本使用 function Counter()
作为构造函数,0.5.0
以后,构造函数使用constructor
关键字来表示。构造函数,即当合约对象创建时,会先调用构造函数对相关数据进行初始化处理。
2.6 成员函数
function increment() public {
}
function getCount() view public returns (uint) {
}
function increment() public
和function getCount() view public returns (uint)
都是Counter
合约的成员函数,成员函数在iOS里面叫做方法、行为,合约实例可以调用成员函数处理相关操作。当调用increment()
函数时,会让状态变量count
增加step
。当调用getCount()
时会得到状态变量count
的值。
2.7 本地变量
function increment() public {
uint step = 10;
count = count + step;
}
increment()
方法中声明的step
就是局部变量。局部变量只在离它最近的内使用。
2.8 析构函数(selfdestruct)
析构函数
和构造函数
对应,构造函数是初始化数据,而析构函数是销毁数据。在Counter
合约中,当我们手动调用kill
函数时,就会调用selfdestruct(owner)
销毁当前合约。
三、操作演示
在上面的操作中,我们不难看出,当我点击kill
函数后,实例对象即被销毁,对象销毁后,再点击其他任何方法函数都将不会再有任何反应。
该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/25015