Estoy tratando de conectarme a mi instancia de testrpc desde mi aplicación web3 pero parece que no puedo conectarme. El siguiente código debería devolver una matriz de todas las cuentas en la cadena testrpc.
Código:
Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
console.log(web3.eth.accounts);
Devuelve lo siguiente y dentro del objeto intelliJ, el objeto proveedor actual es el siguiente.
Simplemente parece imprimir el objeto que creo:
Accounts {
eth:
Eth {
currentProvider: [Getter/Setter],
_requestManager: RequestManager { provider: [Object], providers: [Object], subscriptions: {} },
givenProvider: null,
providers:
{ WebsocketProvider: [Function: WebsocketProvider],
HttpProvider: [Function: HttpProvider],
IpcProvider: [Function: IpcProvider] },
_provider: HttpProvider { host: 'http://localhost:8545', timeout: 0, connected: false },
setProvider: [Function],
BatchRequest: [Function: bound Batch],
extend:
{ [Function: ex]
formatters: [Object],
utils: [Object],
Method: [Function: Method] },
clearSubscriptions: [Function],
getProtocolVersion: { [Function: send] request: [Function: bound ], call: 'eth_protocolVersion' },
getCoinbase: { [Function: send] request: [Function: bound ], call: 'eth_coinbase' },
isMining: { [Function: send] request: [Function: bound ], call: 'eth_mining' },
getHashrate: { [Function: send] request: [Function: bound ], call: 'eth_hashrate' },
isSyncing: { [Function: send] request: [Function: bound ], call: 'eth_syncing' },
getGasPrice: { [Function: send] request: [Function: bound ], call: 'eth_gasPrice' },
getAccounts: { [Function: send] request: [Function: bound ], call: 'eth_accounts' },
getBlockNumber: { [Function: send] request: [Function: bound ], call: 'eth_blockNumber' },
getBalance: { [Function: send] request: [Function: bound ], call: 'eth_getBalance' },
getStorageAt: { [Function: send] request: [Function: bound ], call: 'eth_getStorageAt' },
getCode: { [Function: send] request: [Function: bound ], call: 'eth_getCode' },
getBlock: { [Function: send] request: [Function: bound ], call: [Function: blockCall] },
getUncle: { [Function: send] request: [Function: bound ], call: [Function: uncleCall] },
getCompilers: { [Function: send] request: [Function: bound ], call: 'eth_getCompilers' },
getBlockTransactionCount:
{ [Function: send]
request: [Function: bound ],
call: [Function: getBlockTransactionCountCall] },
getBlockUncleCount:
{ [Function: send]
request: [Function: bound ],
call: [Function: uncleCountCall] },
getTransaction:
{ [Function: send]
request: [Function: bound ],
call: 'eth_getTransactionByHash' },
getTransactionFromBlock:
{ [Function: send]
request: [Function: bound ],
call: [Function: transactionFromBlockCall] },
getTransactionReceipt:
{ [Function: send]
request: [Function: bound ],
call: 'eth_getTransactionReceipt' },
getTransactionCount: { [Function: send] request: [Function: bound ], call: 'eth_getTransactionCount' },
call: { [Function: send] request: [Function: bound ], call: 'eth_call' },
estimateGas: { [Function: send] request: [Function: bound ], call: 'eth_estimateGas' },
sendSignedTransaction: { [Function: send] request: [Function: bound ], call: 'eth_sendRawTransaction' },
signTransaction: { [Function: send] request: [Function: bound ], call: 'eth_signTransaction' },
sendTransaction: { [Function: send] request: [Function: bound ], call: 'eth_sendTransaction' },
sign: { [Function: send] request: [Function: bound ], call: 'eth_sign' },
compile: { solidity: [Object], lll: [Object], serpent: [Object] },
submitWork: { [Function: send] request: [Function: bound ], call: 'eth_submitWork' },
getWork: { [Function: send] request: [Function: bound ], call: 'eth_getWork' },
getPastLogs: { [Function: send] request: [Function: bound ], call: 'eth_getLogs' },
subscribe: { [Function] call: undefined },
net:
Net {
currentProvider: [Getter/Setter],
_requestManager: [Object],
givenProvider: null,
providers: [Object],
_provider: [Object],
setProvider: [Function],
BatchRequest: [Function: bound Batch],
extend: [Object],
getId: [Object],
isListening: [Object],
getPeerCount: [Object],
getNetworkType: [Function: bound getNetworkType] },
accounts: [Circular],
personal:
Personal {
currentProvider: [Getter/Setter],
_requestManager: [Object],
givenProvider: null,
providers: [Object],
_provider: [Object],
setProvider: [Function],
BatchRequest: [Function: bound Batch],
extend: [Object],
getAccounts: [Object],
newAccount: [Object],
unlockAccount: [Object],
sendTransaction: [Object],
lockAccount: [Object],
importRawKey: [Object],
sign: [Object],
ecRecover: [Object],
net: [Object] },
Contract: [Function: Contract],
Iban:
{ [Function: Iban]
toAddress: [Function],
toIban: [Function],
fromAddress: [Function],
fromBban: [Function],
createIndirect: [Function],
isValid: [Function] },
abi: ABICoder { _types: [Array] } },
wallet:
Wallet {
length: 0,
_accounts: [Circular],
defaultKeyName: 'web3js_wallet' } }
Si está utilizando el nuevo web3.js 1.0.0-beta, intente esto (toda la sintaxis ha cambiado, suspiro). Probado con testrpc -d
.
> var Web3 = require('web3');
> var web3 = new Web3('http://localhost:8545');
> web3.version;
'1.0.0-beta.11'
> web3.eth.getAccounts().then(console.log);
Promise { ... }
> [ '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1',
'0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0',
'0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b',
'0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d',
'0xd03ea8624C8C5987235048901fB614fDcA89b117',
'0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC',
'0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9',
'0x28a8746e75304c0780E011BEd21C72cD78cd535E',
'0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E',
'0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' ]
Absolutamente todo es asincrónico ahora, de ahí el juego con las promesas con el .then
método. Pasé el último día lidiando con esto: es muy extraño al principio, pero mejora con la familiaridad.
Si desea las cuentas en una variable, puede hacerlo así, pero tenga cuidado de no usar la variable hasta que se resuelva la promesa.
> var foo;
> web3.eth.getAccounts().then(accts => {foo = accts});
> foo
[ '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1',
'0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0',
'0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b',
'0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d',
'0xd03ea8624C8C5987235048901fB614fDcA89b117',
'0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC',
'0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9',
'0x28a8746e75304c0780E011BEd21C72cD78cd535E',
'0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E',
'0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' ]
npm
instalación predeterminada en las últimas dos semanas. Puede instalar la versión estable anterior con npm install web3@0.20.0
, pero parece que el futuro está en esto, por lo que creo que vale la pena familiarizarse con él.web3.eth.getAccounts().then(function(accts) { console.log(accts); })
web3.eth.getAccounts().then(console.log)
.Probé tu código y parece funcionar. También usé testrpc.
yourscript.js
var Web3 = require('web3')
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
console.log(web3.eth.accounts);
if(web3.isConnected())
console.log("ok");
Las cuentas se registran correctamente con la salida ok
. ¿Has probado a ejecutar el comando node yourscript.js
?
Parece que hay un error de la última versión de web3. npm install toma 1.0.0-beta, que no es la versión estable (0.20.0).
Reinstalar con
npm uninstall web3
npm install web3@0.20.1 --save
Vuelva a intentarlo. Deberia de funcionar.
¿Intentaste consultar con truffle console
?
Compruebe también si se registra algo en la consola testrpc después de la ejecución.
Sugeriría reiniciar su testrpc ya que nada parece estar mal en su código y también funciona perfectamente para mí.
ismael