I build, compiled and deployed (to Testrpc) the token contract from the cryptocurrency tutorial.
The token offers the transfer(addres _to, uint256 value)
method, which I would like to call from coinbase in the node
console.
> contractDeployed.transfer
{ [Function: bound ]
request: [Function: bound ],
call: [Function: bound ],
sendTransaction: [Function: bound ],
estimateGas: [Function: bound ],
getData: [Function: bound ],
'address,uint256': [Circular] }
>
>
> contractDeployed.transfer(web3.eth.accounts[1], 100)
Error: invalid address
at inputAddressFormatter (/home/mzh/node_modules/web3/lib/web3/formatters.js:273:11)
at inputTransactionFormatter (/home/mzh/node_modules/web3/lib/web3/formatters.js:99:20)
at /home/mzh/node_modules/web3/lib/web3/method.js:89:28
at Array.map (native)
at Method.formatInput (/home/mzh/node_modules/web3/lib/web3/method.js:88:32)
at Method.toPayload (/home/mzh/node_modules/web3/lib/web3/method.js:114:23)
at Eth.send [as sendTransaction] (/home/mzh/node_modules/web3/lib/web3/method.js:139:30)
at SolidityFunction.sendTransaction (/home/mzh/node_modules/web3/lib/web3/function.js:170:26)
at SolidityFunction.execute (/home/mzh/node_modules/web3/lib/web3/function.js:256:37)
at repl:1:18
What is wrong with the address of accounts[1]
?
> web3.eth.accounts[1]
'0xf6efe9d4c094be73dd5b2137e1c34032a1ea88e3'
How else to execute the transfer?
I also tried the instructions from the TESTRPC helpfile to unlock accounts at startup:
mzh@~ $ node_modules/.bin/testrpc --secure -u 0 -u 1
EthereumJS TestRPC v4.1.3 (ganache-core: 1.1.3)
Available Accounts
==================
(0) 0x0e7088e20e8d7e23a2ec6704104fbcc0e6c61845
(1) 0xa27b21423aeab486b0eb9d24d36dc354813754ce
(2) 0x6769222c45b93ca010b911842f893b8f3c862f25 🔒
(3) 0xe4dcd88080804ea5f047fabe609dd8236090f75c 🔒
(4) 0xca26648402c7446179d9d76fbc736f817d43f9fe 🔒
Clearly, accounts 0 and 1 are unlocked from the start. Still, I can't transfer from account 0 to 1.
> contractDeployed.transfer(web3.eth.accounts[1], 100)
Error: Error: could not unlock signer account
at StateManager.queueTransaction (/home/mzh/node_modules/ethereumjs-testrpc/build/cli.node.js:83073:21)
at GethApiDouble.eth_sendTransaction (/home/mzh/node_modules/ethereumjs-testrpc/build/cli.node.js:82631:14)
I got the inspiration for the solution from this question.
The call to transfer
requires an additional, implicit argument
> contractDeployed.transfer(web3.eth.accounts[1], 100, {from: web3.eth.accounts[0]})
'0xcc2dda4270217201989495abfc3a9953ebfb8f51b81dbcb80e3aec52d7e225bb'