6-2、3、4,truffle部署合约及测试(react+区块链实战)
创始人
2025-01-08 15:03:58
0

6-2、3、4,truffle部署合约及测试(react+区块链实战)

  • 6-2 truffle介绍安装(pet-shop下载编译)
  • 6-3 部署合约到本地私有链
  • 6-4 测试合约代码

6-2 truffle介绍安装(pet-shop下载编译)

Truffle(以太坊的开发套件)

智能合约的编译和部署就会变得自动化

之前在remix中编译和部署都是在浏览器中自动进行的

自己编译的时候会生成API(是json可以部署),还有给web3做接口,整个过程

在已经安装好nodejs的电脑上

执行npm install -g truffle
安装成功后

在cmd输入truffle
如下
在这里插入图片描述

体验官方的学习demo宠物商店
直接使用truffle命令

下载失败

在这里插入图片描述

先在一个地方建立文件夹,然后输入
在这里插入图片描述

Truffle和ganache都是套件一个是开发用的,一个是部署私有链用的

在windows一直安装失败,原因链接不上github,可能需要翻墙

这直接在码云搜索看是否存在此项目
https://gitee.com/tongxiaojun/pet-shop-box

直接在码云上将此项目下载下来放到需要的文件夹下

在这里插入图片描述
在这里插入图片描述

Contract是写合约的地方
Migrations是部署的脚本
Node_modules是npm的安装文件
Src是源码目录(自带可以不用管,里面的图片可以拿出),自带了一个项目
Truffle.js比较重要(可以配置开启的服务)

在这里插入图片描述

监听7545

Test测试目录
在这里插入图片描述

在这里插入图片描述

此时本地无编译器

故在remix进行合约编写,方便看
进行宠物领养需要输入宠物的id
在这里插入图片描述
在src文件下的pets.json下有id
在这里插入图片描述

pragma solidity ^0.4.24;  contract Adpotion{     //地址数组,公开变量     address[16] public adopters;          //宠物领养,参数宠物id     function adopt(uint petId) public returns(uint){         //断言,必须满足require的代码才能向下执行         require(petId>=0 && petId<16);      //宠物的id必须在0-15,否则不会向下执行         //将当前宠物id对应用户地址获得         adopters[petId] = msg.sender;        //msg.sender谁执行此合约,谁调用此领养函数,当前的地址就是谁         //只要值改变了,数据就存在数据库中 return petId;     }          //获取所有的领养者地址     //此函数无修改,即只需要使用VIEW修饰只读     function getAdopters() public view returns(address[16] ){         return adopters;     }      } 

所有代码如上

在contract中的sol进行保存

并在windows进行编译使用truffle compile

发现编译失败,这是因为版本不对应的问题

在这里插入图片描述

在remix可以更换版本但下载的truffle是很高的版本0.5.16

所以对代码进行简单的更改

pragma solidity ^0.5.16;   //此函数无修改,即只需要使用VIEW修饰只读     function getAdopters() public view returns(address[16] memory){         return adopters; } 

版本及memory,具体可以看乐上至轻的合约讲解很细

在remix编译成功后再保存到如下

在这里插入图片描述

再编译就成功了
在这里插入图片描述

编译成功后会在build的contract下生成对应的json文件
在这里插入图片描述

此编译后的json在后续会有用

6-3 部署合约到本地私有链

在这里插入图片描述

合约如上

如何部署此合约

1,进入ganache,重启私有链

在这里插入图片描述

2,新建在migrations部署中如下
在这里插入图片描述

可以通过正确的匹配智能合约

3,编译及部署
在这里插入图片描述

部署报错,原因在合约下查看合约文件名及代码的合约名,找到错误更改
在这里插入图片描述
在这里插入图片描述

上方的函数忘记加入返回值了

重新编译部署(一定要重新reset)

Truffle migrate --reset --all 

在这里插入图片描述
在这里插入图片描述

部署成功了

4,在ganache中查看,部署有消耗
在这里插入图片描述

5,查看区块有四个,上方只部署了adoption合约
在这里插入图片描述

部署合约已经成功了,但是发现没有什么效果,需要在前端进行体现

6-4 测试合约代码

写的智能合约非常简单

在这里插入图片描述

在test目录下,新建测试合约
在这里插入图片描述

pragma solidity ^0.5.16;  import "truffle/Assert.sol"; import "truffle/DeployedAddresses.sol";	//模拟部署的库 import "../contracts/Adoption.sol";	//写的合约  contract TestAdoption{ 	Adoption adoption = Adoption(DeployedAddresses.Adoption());//对合约进行部署 	 	//测试部署合约中的函数 	function testUserCanAdopt() public{ 		uint returnId = adoption.adopt(8);  //执行之前编写的合约的adopt函数 		uint expectId = 8; 		Assert.equal(returnId,expectId,"返回领养id"); //希望返回的id和期望的id是相等的 	} } 

在之前合约的编译部署了
上方的代码无问题

Truffle compile Truffle migrate 

这里的测试合约直接对之前写的合约部署,执行
Truffle test
在这里插入图片描述

测试成功了

加入第2个测试函数

pragma solidity ^0.5.16;  import "truffle/Assert.sol"; import "truffle/DeployedAddresses.sol";	 import "../contracts/Adoption.sol";	  contract TestAdoption{ 	Adoption adoption = Adoption(DeployedAddresses.Adoption()); 	 	function testUserCanAdopt() public{ 		uint returnId = adoption.adopt(8);  		uint expectId = 8; 		Assert.equal(returnId,expectId,"返回领养id");  	} 	 	//第二个测试函数 	function testCanGetAdopters() public{ 		address expect = address(this);	//this调用合约的地址值 		address[16] memory adopters = adoption.getAdopters(); //调用合约中的函数 		Assert.equal(adopters[8],expect,"领养后。我的地址是否会被记录下来"); //判断两者地址是否相同 	} } 

再次测试
https://blog.csdn.net/sinyusin/article/details/88558519
编译合约报错:TypeError: Type contract TestAdoption is not implicitly convertible to expected type address.

测试成功了

在这里插入图片描述

相关内容

热门资讯

发现辅助!wepoker怎么买... 发现辅助!wepoker怎么买辅助,天天海南家园辅助,开挂(透视)辅助下载(有挂秘笈)>>您好:软件...
窍门辅助"边锋干瞪眼... 窍门辅助"边锋干瞪眼ios辅助微信"开挂(黑科技)辅助工具(有挂头条)1、下载安装好边锋干瞪眼ios...
透视辅助!wpk辅助购买,we... wepoker私人局俱乐部怎么进开挂教程视频分享装挂详细步骤在当今的网络游戏中,wepoker私人局...
第5分钟辅助"河南微... 河南微乐小程序辅助器免费是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可...
原来有辅助!wepoker高级... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
绝活开挂"蜀山四川v... 蜀山四川vip破解开挂教程视频分享装挂详细步骤在当今的网络游戏中,蜀山四川vip破解作为一种经典的娱...
透视教程!潮汕木虱有辅助挂吗,... 透视教程!潮汕木虱有辅助挂吗,微乐小程序外辅助工具(透视)开挂辅助脚本介绍教程>>您好:软件加136...
八分钟开挂"广西老友... 八分钟开挂"广西老友玩助手"素来有透视开挂辅助挂(有挂秘诀)广西老友玩助手ai黑科技系统规律教程开挂...
了解开挂!wepoker有脚本... 四川途游小程序辅助是一款专注玩家量身打造的游戏记牌类型软件,在四川途游小程序辅助这款游戏中我们可以记...
步骤辅助"poker... 步骤辅助"pokerworld修改器"开挂(透视)辅助工具(讲解有挂)【无需打开直接搜索加薇1367...