ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dapp TokenFarm开发(3)---合约开发

2022-05-26 17:04:38  阅读:136  来源: 互联网

标签:const name require await daiToken --- Dapp TokenFarm


2 区块链开发

2.0 区块链项目初始化

2.0.0 项目解析

我们开发的Dapp 是需要用户把代币(mDai Token) 质押到我们的Dapp(TokenFarm),然后我们发送空投代币(Dapp Token)作为奖励给到用户

我们使用 Ganache 与 truffle 来进行开发与测试

2.0.1 Migrations

Migrations 是 truffle 实现快速部署新合约的配置合约

truffle migrate
即可快速更新合约

2.1 初尝试

我们已经在contracts 中有 两个erc20(标准代币合约) 的文件,各有1000000*10^18 wei,如果看不懂请自行谷歌一下,在这里不详细解析

2.1.0 创建TokenFarm合约

我们在 src/contracts 创建一个solidity 合约文件 TokenFarm.sol 如下

pragma solidity ^0.5.0;

contract TokenFarm {
	
  string public name = "Dapp Token Farm";
}

2.1.1 配置部署文件

然后在 migrations 中添加合约部署文件 2_deploy_contracts.js 如下

const TokenFarm = artifacts.require("TokenFarm");
const DappToken = artifacts.require("DappToken");
const DaiToken = artifacts.require("DaiToken");

module.exports =async function(deployer,network,accounts) {
  // 部署合约
  await deployer.deploy(DaiToken)
  const daiToken = await DaiToken.deployed()
  await deployer.deploy(DappToken)
  const dappToken = await DappToken.deployed()


  await deployer.deploy(TokenFarm)
  const tokenFarm = await TokenFarm.deployed()
};

2.1.2 创建测试文件

根目录下创建文件 test 文件夹

test 文件夹创建文件 TokenFarm.test.js

用作测试文件

const { assert } = require('chai');

const TokenFarm = artifacts.require("TokenFarm");
const DappToken = artifacts.require("DappToken");
const DaiToken = artifacts.require("DaiToken");

require('chai').use(require('chai-as-promised')).should()

2.1.3 Ganache 部署

然后打开 Ganache 点 QuickStart 快速部署一条区块链

配置 Ganache 端口与 truffle.config.js 保持一致(均为7545)

2.1.4 合约部署

  1. 终端输入 truffle compile 编译合约文件生成 uri

  2. 终端输入 truffle migrate 即可部署合约到区块链中

出现一堆代码,还有Ganache 多出几条交易

我们看到下面这条表示部署成功了

2.1.5 测试

继续编写测试代码 truffle.config.js 如下

contract('TokenFarm', ([owner, investor]) => {
  let daiToken, dappToken, tokenFarm

  before(async ()=>{
    // 加载合约
    daiToken = await DaiToken.new()
    dappToken = await DappToken.new()
    tokenFarm = await TokenFarm.new()

    // 把所有的代币发送给tokenFarm
    await dappToken.transfer(tokenFarm.address, tokens('1000000'))

    // 发送100 给代币到用户
    await daiToken.transfer(investor, tokens('100'), { from: owner })
  })

  // 测试 daiToken 合约 name 属性 返回值是否为 'Mock DAI Token'
  describe('Mock Dai deployment', async ()=>{
    it('has a name', async ()=>{
      const name = await daiToken.name()
      assert.equal(name,'Mock DAI Token')
    })
  })

  // 测试 DappToken 合约 name 属性 返回值是否为 'Dapp Token'
  describe('peiqi', async ()=>{
    it('has a name', async ()=>{
      const name = await daiToken.name() // error
      assert.equal(name,'Dapp Token')
    })
  })
  }
)

然后终端输入 truffle test 测试

结果如下

'Mock Dai deployment' 测试成功

'peiqi' 测试失败了(因为 dappToken.name() 改成了 daiToken.name() )

最终代码改成如下

const { assert } = require('chai');

const TokenFarm = artifacts.require("TokenFarm");
const DappToken = artifacts.require("DappToken");
const DaiToken = artifacts.require("DaiToken");

require('chai').use(require('chai-as-promised')).should()

contract('TokenFarm', ([owner, investor]) => {
  let daiToken, dappToken, tokenFarm

  before(async ()=>{
    // 加载合约
    daiToken = await DaiToken.new()
    dappToken = await DappToken.new()
    tokenFarm = await TokenFarm.new()

    // 把所有的代币发送给tokenFarm
    await dappToken.transfer(tokenFarm.address, tokens('1000000'))

    // 发送100 给代币到用户
    await daiToken.transfer(investor, tokens('100'), { from: owner })
  })

  // 测试 daiToken 合约 name 属性 返回值是否为 'Mock DAI Token'
  describe('Mock Dai deployment', async ()=>{
    it('has a name', async ()=>{
      const name = await daiToken.name()
      assert.equal(name,'Mock DAI Token')
    })
  })

  // 测试 DappToken 合约 name 属性 返回值是否为 'Dapp Token'
  describe('Dapp Token deployment', async ()=>{
    it('has a name', async ()=>{
      const name = await dappToken.name() // 已更正
      assert.equal(name,'DApp Token')
    })
  })
  }
)

终端输入truffle test 测试结果如下

两个测试都打钩成功通过了

标签:const,name,require,await,daiToken,---,Dapp,TokenFarm
来源: https://www.cnblogs.com/Jerrvis/p/16314056.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有