Кажется, у меня проблемы с взаимодействием с пользовательским контрактом токена. Я использую трюфель и ганаш для тестирования. Я пытаюсь взаимодействовать с контрактом с пользовательским токеном, чтобы MyContract мог передавать токены на адрес от имени контракта с пользовательским токеном. У меня тоже АБИ.
пользовательский токен-контракт:
pragma solidity ^0.4.16;
import "./MintableToken.sol";
contract CustomToken is MintableToken {
// Coin Properties
string public name = "Custom Token";
string public symbol = "Cust";
uint256 public decimals = 18;
function transfer(address _to, uint _value) public returns (bool) {
return super.transfer(_to, _value);
}
}
Мой контракт:
pragma solidity ^0.4.4;
import "./CustomToken.sol";
contract MyContract is CustomToken{
function transferCustom(address _to, uint _value) public returns (bool) {
require(_to != address(0));
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender,_to,_value);
return true;
}
}
трюфельный тест:
const accountfirst = web3.eth.accounts[1];
const amount = 100;
let token = await CustomToken.deployed();
let myContract = await MyContract.deployed();
var ctoken = CustomToken.at(token.address);
ctoken.approve(myContract.address, amount);
let tx = await myContract.transferCustom(accountfirst, amount);
Когда я запускаю этот тест, я возвращаю транзакцию. Есть идеи? заранее спасибо!
Я почти уверен, что проблема заключается в отправке нулевого адреса в контракт, а затем require(_to != address(0));
. Требование функции контракта — это хорошо, но отправка null — это проблема на стороне клиента.
Я не думаю, что это (ниже) работает синхронно, поэтому accountfirst имеет значение null при вызове функции, поэтому транзакция возвращается.
const accountfirst = web3.eth.accounts[1];
Попробуйте получить учетную запись асинхронно.
web3.eth.getAccounts()
.then(function(response) {
account = response[0]);
// carry on
}
или
web3.eth.getAccounts(function(err,response) {
account = response[0];
// carry on
}
Надеюсь, поможет.
DividedByZero