Solidity 入门教程之 Storage 案例学习

在 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 是函数的属性,表明这个方法是公共方法,合约之外可以调用,初此之外还有 privateinternalexternal等属性。

function retrieve() public view returns (uint256){
        return number;
    }

这代码的意思是,返回一个整数,public 表示合约之外可以调用。view 表示读取,不改变区块链上的数据,不需要花费 gas。gas 是以太坊的燃料,智能合约的执行是需要花费 gas 的。returns 表示返回的变量类型,返回的变量类型需要括号,因为 Solidity 的函数可以返回多个参数,这一点像 golang 语言可以返回多个参数。

现在我们已经理解例子了,接下来我们可以按照这篇文章 新版 remix 使用教程,编译部署看一下效果。

Leave a Reply

Your email address will not be published. Required fields are marked *