Взаимодействие с пользовательским контрактом токена

Кажется, у меня проблемы с взаимодействием с пользовательским контрактом токена. Я использую трюфель и ганаш для тестирования. Я пытаюсь взаимодействовать с контрактом с пользовательским токеном, чтобы 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);

Когда я запускаю этот тест, я возвращаю транзакцию. Есть идеи? заранее спасибо!

я сузил ошибку, и, похоже, она исходит из этой строки: let tx = await myContract.transferCustom (accountfirst, сумма);

Ответы (1)

Я почти уверен, что проблема заключается в отправке нулевого адреса в контракт, а затем 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
}

Надеюсь, поможет.