好 上文Web3本地搭建truffle智能合约开发环境我们在本地搭起了一个 Truffle 项目
然后 我们说明项目中文件的用途
然后 我们还是通过ganache模拟一个本地的区块链环境
然后打开我们搭建的Truffle项目
首先 我们第一个要看的肯定是truffle-config.js
肯定要先配好连接的环境 我们这里直接连本地
我们打开它 然后 在 module.exports 下找到 networks
它下面这里有一个development
将这个内容的注释 去掉 放出来
很明显 上面的信息 127.0.0.1 ip 8545端口 这就是指向了我们ganache启动的一个本地服务了
所以 将来就是 我们一部署 就会往我们本地的区块链去发布了
然后 下面 我们会发现一些更高级的配置
这里这个 gas 可以配置限制我们每次处理业务数额
然后就是下面这个from 我们之前说过 部署智能合约到链上 也会有旷工这个操作 那么燃料由哪个账号扣除 就是他的作用
如果你不设置 他会默认取读你环境中的第一个账号
然后 这里还给了我们一个远端的地址
这里的话 我们目前只是做一个开发环境处理 所以先不管
然后 我们这里 还有一个优化配置
这个位置 我们也是 直接给它放出来就好了
然后 我们在 MetaMask 导入ganache提供的第一个账号
我们要注意他 ETH的变化
配置文件写好之后 就来到我们的核心功能 在 contracts 目录下创建一个文件 叫 StudentStorage.sol
我们先来写一个简单的功能
我们在这里 写两个接口 一个可以存一个学生的名字和年龄 另一个接口读取我们存进去的信息
然后 我们solidity 的第一句话 就直接抄了
参考代码如下
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
首先 如果你的VS Code 没装solidity的工具 你放进去 肯定都是黑白的
我们可以在这个插件库中找到solidity的管理工具
这样 我们代码就充满色彩了
然后 我们来看看这个代码的含义
第一句的意思是 我们整个solidity开发 遵循的是什么协议
是 GPL 还是 MIT 协议
比如 我们将代码往开源工具上传 总还是要写一个协议的
因为智能合约是公开透明的 那么 我们就要说清楚 是直接别人就可以用 还是别人改了之后可以使用
第二句话是限定solidity编辑器版本的
因为 solidity 语言本身也是在不断成长的 就比如 你拿vue3的代码运行在IE上 那直接就没了
所以 就相当于一个版本的兼容
solidity的话 结合了 JavaScript python C语言 但大体会更近于js 或者是 和 TypeScript很像
所以 也不是直接就可以搞定 对js使用者来说相对友好 但肯定还是很多要重学的
然后 我们 StudentStorage.sol 代码编写如下
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
contract StudentStorage{
// 创建两个变量
//用户年龄
uint userAge;
//用户名
string userName;
function setData(uint age,string memory name) public {
userAge = age;
userName = name;
}
/*
view:视图函数 只访问数据 不修改数据
pure:既不访问数据也不修改数据
*/
function getData() public view returns (uint,string memory) {
return (userAge,userName);
}
}
前两行就不多说了 然后 contract 包裹全局的名称必须和我们文件的名称相同 例如 我这里叫StudentStorage
然后 我们定义了两个变量 userAge和userName 用户名和用户名称 这个变量类型你可以自己去看一下 或者 你就记得
uint数字
string字符串
都想
然后 我们定义了一个函数 setData
这里 我们name参数 涉及到一个关键字 memory 这个主要是我们这个值的存储位置 首先 基本类型 例如我们uint的数字类型就不需要声明
具体讲解如下图
首先我们要知道 如果要放在链上 肯定是要消耗燃料的
然后 后面还有一个public 这个主要是声明方法的作用域 很多后端数据管理的语言都会涉及到这个概念
然后 我们getData涉及到两个概念 view的作用在上面已经注释过了 这个你声明出来是可以降低燃料消耗的
然后 returns 和很多后端语言一样 我们声明一个方法 要声明清楚他的返回类型
我们这里声明返回两个 一个uint 数字类型 一个string memory字符串类型
对应我们的 userAge userName
可能有些人会想 那pure到底有什么用
首先 可能比如 我们 写一个函数 参数传 X Y 然后计算出差 那么 我们这个函数只是做个计算 变量全是外面给的 算好还给外面 这个既不修改 也不访问我们内部的数据 自然是非常适合用 pure 这样就减少了没必要消耗的燃料
我们在智能合约中的所有操作都会消耗gas 所以还是要写的规范一点
然后 我们以管理员身份运行项目终端
那么 我们写完了 就可以在项目终端执行
truffle compile
我们的项目环境就起来了
这里也会明显多出一个目录
好啦 那这样 至少现在项目是跑起来了 测试的话 我们下文继续