0%

智能合约学习2——链上姓名

上文:智能合约学习1——Helloworld

2数值类型:

https://sepolia.etherscan.io/address/0x501e409f499b00cb629ef0372392852b3043cbbe

3函数类型:

https://sepolia.etherscan.io/address/0x1813e4dc4a1117264d7453f5bd989c3353d7f089

4函数输出

https://sepolia.etherscan.io/address/0x2b3b9dda731142e5c46897451d7fc614772ee72b

5数据存储

https://sepolia.etherscan.io/address/0x86f62014d0e422d4a1b069068852d123a0ff5259

6引用类型

https://sepolia.etherscan.io/address/0x05c80f2d6be3bda79cf173112f4a136fe0fb7f51#code

正经玩法

这样写太无聊了,直接从想要知道的地方入手吧。

1:搞个学生对象

比如,先把合同看成一个类型,或者是对象,所以我写了下面的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract Student{
// 设置成员变量
string _name = "alis";
// get方法 需要明确返回的存储类型,选择内存memory
function get() public view returns (string memory) {
return _name;
}
// 设置成员变量 指明存储类型
function set(string memory newName )public{
_name = newName;
}
}

这里和其他的地方不一样的是,需要指明存储类型:memory、storage。

因为数量存储在链上,就是一个分布式数据库,我们想要更改链上数据storage是需要费GAS的。

同样,对于数据,如果是查看,可以用 view、pure来修饰,但是更改就不行。

合约地址:

https://sepolia.etherscan.io/address/0x2472848352dc8c5da3817cb17445a6b26a81ea75

我们写入合约,调用set方法,成功将“alis”改为了”先圣”。

当我们调用get方法时因为不修改数据,所以无需GAS费。