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

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

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.

测试成功了

在这里插入图片描述

相关推荐

  1. 理解并实现区块智能合约

    2024-07-15 08:20:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 08:20:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 08:20:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 08:20:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 08:20:02       69 阅读

热门阅读

  1. python分析PDF文件信息常用的功能模块

    2024-07-15 08:20:02       21 阅读
  2. markdown文件转pdf

    2024-07-15 08:20:02       23 阅读
  3. 自己为什么跑步?

    2024-07-15 08:20:02       28 阅读
  4. LightDM和SDDM显示管理器学习小知识

    2024-07-15 08:20:02       20 阅读
  5. Mybatis

    Mybatis

    2024-07-15 08:20:02      20 阅读
  6. AI学习指南机器学习篇-高斯混合模型

    2024-07-15 08:20:02       22 阅读
  7. 使用 Dubbo 的 XML 配置

    2024-07-15 08:20:02       20 阅读
  8. 阿里新开源GPU版本的FunASR安装避坑

    2024-07-15 08:20:02       25 阅读