不知道有多少同学是从第一章按顺序看到这里来的,终于到了我们的代码上手环节(硬货),话不多说,开搞
首先给大家介绍一下solidity的基础语法结构(默认各位同学至少有js基础)
//是不是很像js的class
contract MyContract { 声明一个合约 合约名字叫 MyContract
// 状态变量 存储在区块链上的变量
uint256 public myVariable;
//Solidity支持多种数据类型,包括布尔型、整型、地址、数组和结构体等。
bool myBool = true;
uint256 myUint = 123;
address myAddress = 0x1234567890123456789012345678901234567890;
string myString = "Hello, Solidity!";
if (myBool) {
// 条件语句
}
for (uint256 i = 0; i < 10; i++) {
// 循环语句
}
// 构造函数
constructor(uint256 initialValue) {
myVariable = initialValue;
}
// 函数
function set(uint256 newValue) public {
myVariable = newValue;
}
// 具有返回值的函数
function get() public view returns (uint256) {
return myVariable;
}
}
solidity的基础语法就是这些,是不是很简单 相信有过任何代码基础的同学看一遍都能理解,接下来我们直接开始项目实战,将我们的合约部署在测试网(非测试网需要gas费用,即使是测试网也需要在相关页面通过"水龙头"获取测试代币)
我们将开发一条简单合约:在区块链中写入我们的名字,把这个目标分成三步:
编写代码
打开remix地址
这是一个在线的web3编码测试部署网站,会看到一个类似是vscode的网站
点击"File explorer"
打开contracts->1_Storage.sol
原文代码 注释如下
// SPDX-License-Identifier: GPL-3.0
定软件许可证类型的标识符 用于明确声明智能合约代码的许可证类型
pragma solidity >=0.8.2 <0.9.0;
声明 solidity 版本号
contract Storage { //声明一个合约 合约名称为 Storage
uint256 number; // 声明一个 int 类型变量
function store(uint256 num) public { // 声明一个函数store
number = num;
}
函数修饰符:
public 任何人都可以调用这个函数,包括合约内部和外部。
private 只有合约内部的函数可以调用这个函数,外部的合约或用户无法调用
internal 只有合约内部和继承自该合约的子合约可以调用这个函数,外部的合约或用户无法调用
external 只能从合约外部调用,不能从合约内部直接调用。但是可以通过 `this` 关键字在合约内部调用
function retrieve() public view returns (uint256){
//声明一个函数retrieve 返回一个unt 类型的变量
return number;
}
其他函数修饰符:
view 声明该函数不会修改合约的状态(即不能修改状态变量) 例 retutn name;
pure 声明该函数既不读取也不修改合约的状态(即不能访问状态变量) 例 retutn 1+2;
payable 声明该函数可以接收代币
}
编译代码
- 点击remix左侧 solidity compiler
- 点击 compile 1_Storage.sol,等待左侧小图片有一个成功标志
部署代码
- 点击左侧小图标 Deploy
- ENVIRONMENT 选择需要部署的网络 实战会详细说明 这里我们默认就好
- ACCOUNT 选择使用哪个账号进行部署(默认)
- GAS LIMIT 每笔交易或智能合约调用可以消耗的最大 Gas 量(手续费) 用来控制成本 优秀的合约工人会对gas进行优化(可以理解为web性能优化 web不优化消耗用户流量 gas不优化消耗合约调用者金钱) (默认)
- value 发送给合约的代币数量(合约也是地址 可以存储代币)
- Contract 选择要部署的合约
- 点击 Deploy
- 下方控制台会给出成功提示,并返回一个合约地址(0xd8b934580fcE35a11B58C6D73aDeE468a2833fa8)及合约其他属性(status transaction hash block hash...)
调试合约
- 点击左侧下方Deployed/Unpinned Contracts
- 可以看到有两个按钮 对应我们的两个函数 store 函数需要传参所以右侧会有输入框
- 每次函数调用控制台都会给出交易哈希,有兴趣的同学可以自行展开查询属性意义
**下期预告:Web3.js与智能合约进行交互**