不知道是否应该指定事件或如何使用balanceOf创建函数。无法通过松露测试。
你好, 这是我的第一个智能合约,旨在创建ERC20令牌。在Dapp University进行这样的处理时,没有任何语法问题,我无法通过松露测试来检查总供应量是否编码正确。 我尝试了不同的方法,请看一下代码。 $ truffle测试后,错误如下: 使用网络“开发”。
正在编译./contracts/TestToken.sol ... 编译./contracts/Migrations.sol ...
合约:TestToken 1)设置部署后的总供应量
没有事件发出
0通过(67ms) 1个失败
1)合约:TestToken 在部署时设置总供应量: TypeError:tokenInstance.balanceOf不是函数 在上下文。 (test / Test.js:27:40) 在process.internalTickCallback(internal / process / next_tick.js:77:7)
.sol代码:
pragma solidity ^0.4.24;
contract TestToken {
uint256 public totalSupply;
constructor (uint256 _initialSupply) public {
totalSupply = _initialSupply;
// allocate the initial supply
}
}
test.js代码:(工作到第7行[错误始于,adminBalance =(...)])
var TestToken = artifacts.require("./TestToken.sol");
contract('EracoinToken', (accounts) => {
var tokenInstance;
it('sets the total supply upon deployment', async function() {
const tokenInstance = await TestToken.deployed()
, _initialSupply = 100
, totalSupply = await tokenInstance.totalSupply()
, adminBalance = await
tokenInstance.balanceOf(accounts[0])
assert.equal(await totalSupply.toNumber(),
_initialSupply, 'Total supply should be _initialSupply');
assert.equal(await adminBalance.toNumber(),
_initialSupply, 'Initial supply should be allocated to admin
account!');
});
});
迁移部署.js代码:
var TestToken = artifacts.require("./TestToken.sol");
let _initialSupply = 100;
module.exports = function(deployer) {
deployer.deploy(TestToken, _initialSupply);
};
如果我运行test.js直到,totalSupply = await(...),它就可以正常工作。码头说,这将根据部署确定总供应量。在test.js的第7行之后,我希望终端会说,总供给应为_initialSupply,而初始供给应分配给管理员帐户!
请确保代码有问题-我是初学者。请给我一个提示或帮助我修复代码。
答案 0 :(得分:0)
根据ERC20 Token Interface,您的令牌合约必须实现以下内容:
function balanceOf(address tokenOwner) public view returns (uint balance);
您的测试将尝试执行tokenInstance.balanceOf(accounts[0])
失败,因为您的智能合约中没有balanceOf
函数。
关于事件,您将看到ERC20令牌接口提供以下内容:
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
您可以从上面链接中的实现中看到应该发出这些事件的地方。