Нужно ли излучать событие, пока нет события?Ошибка под названием «Не было событий» в тесте Solidity Truffle - PullRequest
0 голосов
/ 20 декабря 2018

Понятия не имею, должно ли быть указано событие или как создать функцию с помощью balanceOf.Не могу пройти тест Трюфеля.

Здравствуйте, это мой первый умный контракт, направленный на создание токена ERC20.Пройдя через такой процесс в Dapp University без каких-либо синтаксических проблем, я не могу пройти трюфельный тест, чтобы проверить, правильно ли кодируется весь запас.Я пробовал разные подходы, посмотрите код пожалуйста.Ошибка после теста $ truffle следующая: Использование сети 'development'.

Компиляция ./contracts/TestToken.sol ... Компиляция ./contracts/Migrations.sol...

Контракт: TestToken 1) устанавливает общий запас при развертывании

Никаких событий не было отправлено

0 прохождение (67мс) 1 сбой

1) Контракт: TestToken устанавливает общий запас при развертывании: TypeError: tokenInstance.balanceOf не является функцией в Context.(test / Test.js: 27: 40) в process.internalTickCallback (внутренний / 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);
};

Если я запускаю тест.JS до, TotalSupply = Await (...) это работает просто отлично.Терминал говорит, что он устанавливает общий запас при развертывании.После 7-ой строки test.js я ожидаю, что терминал скажет, что Общая поставка должна быть _initialSupply, а Начальная поставка должна быть выделена для учетной записи администратора!

Наверняка что-то не так с кодом - I 'м начинающий.Пожалуйста, дайте мне подсказку или помогите исправить код.

1 Ответ

0 голосов
/ 21 декабря 2018

В соответствии с интерфейсом токена ERC20 требуется, чтобы в вашем контракте на токены было реализовано следующее:

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

Вы можете увидеть из реализации по ссылке вышегде эти события должны быть отправлены.

...