Недопустимое количество аргументов в коде ERC20?

Я использую официальный пример кода ERC20 отсюда: https://www.ethereum.org/token

У меня в трюфеле все работает нормально, но когда я вызываю эту функцию:

function transfer(address _to, uint256 _value) public {
        _transfer(msg.sender, _to, _value);
    } 

я получилError: Invalid number of arguments to Solidity function

Я запускаю эти команды из консоли трюфеля:

 var token;
 Token.deployed().then((res) => {token = res});
 var alice = '0xbb452da6021229d93b28a6fea487fd3098eb8b16';
 token.transfer(alice, 44);

Я скопировал адрес из учетных записей, перечисленных testrpc Есть идеи, что происходит? Спасибо!

Ответы (2)

Вам не хватает параметра from:account.

var account_one = "0x1234..."; // the address calling this function. Get the list of accounts and use account[0]; 

token.transfer(alice, 44, {from: account_one}).then(function(tx_id) {
  // If this callback is called, the transaction was successfully processed.
  // Note that Ether Pudding takes care of watching the network and triggering
  // this callback.
  alert("Transaction successful!")
}).catch(function(e) {
  // There was an error! Handle it.
})
я попробовал трюфель (разработка) > token.transfer (Алиса, 55, {от: account_one}); и я получил такое же сообщение об ошибке. Я действительно запутался, так как у передачи явно есть только два параметра, и я передаю ровно два... (Обратите внимание, что я вызываю передачу, а не _transfer)
хотя ваш код работает. Можете объяснить, что такое {from: account_one} и зачем это нужно? И что такое tx_id? Спасибо!
Из документации Truffle: мы передали объект в качестве третьего параметра sendCoin. Обратите внимание, что функция sendCoin в нашем контракте Solidity не имеет третьего параметра. То, что вы видите выше, — это специальный объект, который всегда можно передать в качестве последнего параметра функции, позволяющей редактировать конкретные сведения о транзакции. Здесь мы устанавливаем адрес отправителя, гарантируя, что эта транзакция поступила от account_one. Вы можете использовать этот объект, чтобы передать, например, сколько газа вы хотите поставить. tx_id — это идентификатор транзакции, возвращенный этим выполнением.

Как раз для тех, кто пытается обойтись без трюфеля (и с метамаской web3 js).

Я вызвал эту функцию ниже при нажатии кнопки для целей тестирования, и она правильно отправила токены.

Примечание. При нажатии на кнопку активируется подтверждение метамаски, отправка которого приведет к переносу токенов после успешного майнинга в блок.

function transferTokens()
{
    if (typeof web3 == 'undefined') {console.log("Metamask Not found"); return; }
    var contrctAddress = "PLACE_YOUR_CONTRAT_ADDRESS"; //address of token contract
    var abi = []; //REPLACE JSON OF your token contract
    var MyContract = web3.eth.contract(abi);
    var recipient = "RICIPIENT_ADDRESS"; //to whom you want to send the tokens to
    var myContractInstance = MyContract.at(contrctAddress);
    var tokensToSend = 2; //replace with number of tokens to send
    var weiAmount = tokensToSend*1e18;
    web3.eth.getAccounts(function(error, result) {
         myContractInstance.transfer(recipient ,weiAmount,function (err, result) {
         if (err) {
              console.log(err); //handle the error
              return;
         }
         else
         {
            console.log('success'); //your code for success
          }
       }); });
}