没有事件时是否有必要发出事件?松露菌测试中称为“未发出事件”的错误

时间:2018-12-20 20:18:59

标签: javascript ethereum solidity smartcontracts truffle

不知道是否应该指定事件或如何使用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,而初始供给应分配给管理员帐户!

请确保代码有问题-我是初学者。请给我一个提示或帮助我修复代码。

1 个答案:

答案 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);

您可以从上面链接中的实现中看到应该发出这些事件的地方。