在 remix 中有三个例子,这是第1个 Storage 案例,看这篇之前,请先确定看过之前的1篇。
我们就来学习这个例子,通过一个简单的案例入门 Solidity。
这是一个简单案例,在区块链中存储一个数,并且可以读取这个数。
源码如下
pragma solidity >=0.7.0 <0.8.0;
/**
* @title Storage
* @dev Store & retrieve value in a variable
*/
contract Storage {
uint256 number;
/**
* @dev Store value in variable
* @param num value to store
*/
function store(uint256 num) public {
number = num;
}
/**
* @dev Return value
* @return value of 'number'
*/
function retrieve() public view returns (uint256){
return number;
}
}
下面开始逐步讲解
第一行 pragma solidity >=0.7.0 <0.8.0;
是说明源码使用 solidity 的版本大于等于0.7.0,小于0.8.0,这是为了确保合约不会在新的编译器中行为异常。每个合约第一行都是这个,pragma
是一个关键字。
每一个语句都是以分号 ;
结尾,这一点像 php。
contract
是声明一个智能合约,像面向对象的 class
关键字。Solitidy 相当于面向对象的语法的语言。部署这个合约之后,相当于已经 new
过这个对象了,可以调用其中的公开变量和方法。
uint256 number;
声明一个无符号256的整数,名称为 number
。写过静态类型语言的同学,应该很容易理解这种声明方法。区块链的中的数据,就是存储在这个变量中,相当于后端开发中的数据库。
function store(uint256 num) public {
number = num;
}
这代码的意思是定义方法 store,接收参数 uint256 num,存储一个整数。public
是函数的属性,表明这个方法是公共方法,合约之外可以调用,初此之外还有 private
、internal
、 external
等属性。
function retrieve() public view returns (uint256){
return number;
}
这代码的意思是,返回一个整数,public
表示合约之外可以调用。view
表示读取,不改变区块链上的数据,不需要花费 gas。gas 是以太坊的燃料,智能合约的执行是需要花费 gas 的。returns
表示返回的变量类型,返回的变量类型需要括号,因为 Solidity 的函数可以返回多个参数,这一点像 golang 语言可以返回多个参数。
现在我们已经理解例子了,接下来我们可以按照这篇文章 新版 remix 使用教程,编译部署看一下效果。