簡體   English   中英

是否有必要發出事件,而沒有事件? Solidity Truffle 測試中名為“未發出事件”的錯誤

[英]Is it necessary to emit event, while there is no event? Error called "No events were emitted" in Solidity Truffle test

不知道是否應該指定事件或如何使用 balanceOf 創建函數。 無法通過松露測試。

你好,這是我的第一個智能合約,旨在創建一個 ERC20 代幣。 在沒有任何語法問題的情況下通過 Dapp 大學完成這樣的過程,我無法通過 truffle 測試來檢查總供應量是否以良好的方式編碼。 我嘗試了不同的方法,請查看代碼。 在 $truffle 測試后,錯誤如下:使用網絡“開發”。

正在編譯 ./contracts/TestToken.sol... 正在編譯 ./contracts/Migrations.sol...

合約:TestToken 1) 在部署時設置總供應量

沒有事件被發出

0 通過 (67ms) 1 失敗

1) 合約:TestToken 在部署時設置總供應量:TypeError: tokenInstance.balanceOf 不是 Context 中的函數。 (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 until , totalSupply = await (...) 它工作得很好。 終端說,它在部署時設置了總供應量。 在 test.js 的第 7 行之后,我希望終端會說,總供應量應該是 _initialSupply 並且初始供應量應該分配給管理員帳戶!

代碼肯定有問題 - 我是初學者。 請給我一個線索或幫助我修復代碼。

根據ERC20 代幣接口,您的代幣合約需要實現以下內容:

function balanceOf(address tokenOwner) public view returns (uint balance);

您的測試在嘗試執行tokenInstance.balanceOf(accounts[0])將失敗,因為您的智能合約中沒有balanceOf函數。

至於事件,你會看到 ERC20 Token Interface 提供以下內容:

event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

您可以從上面鏈接中的實現中看到應該發出這些事件的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM