Dapp TokenFarm开发(3)---合约开发
作者:互联网
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 合约部署
-
终端输入
truffle compile
编译合约文件生成 uri -
终端输入
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