Intentando inicializar cuentas como variable global antes de iniciar la consola Node

Básicamente, estoy tratando de ejecutar un script que inicializa todas las variables que necesitaré durante mi sesión de consola de Node. El guión se ve así:

global.Web3 = require('web3');
global.web3 = new Web3(new 
Web3.providers.HttpProvider('http://localhost:8545'));

global.Tx = require('ethereumjs-tx');

global.solc = require('solc');

global.accounts;
web3.eth.getAccounts().then(_accounts => {
    accounts = _accounts;
});
require('repl').start({});

Hasta ahora, todo funciona bien, hasta el momento de configurar la variable de cuentas. Ejecutar el script y llamarlo produce lo siguiente:

➜  ethtest node init.js
> accounts
ReferenceError: accounts is not defined
    at repl:1:1
    at ContextifyScript.Script.runInContext (vm.js:35:29)
    at REPLServer.defaultEval (repl.js:342:29)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:539:10)
    at emitOne (events.js:96:13)
    at REPLServer.emit (events.js:188:7)
    at REPLServer.Interface._onLine (readline.js:232:10)
    at REPLServer.Interface._line (readline.js:583:8)

Estoy bastante seguro de que estoy malinterpretando algo simple, pero hasta ahora, no he podido resolverlo. Cualquier ayuda sería muy apreciada. ¡Gracias!

Respuestas (1)

Tienes una condición de carrera donde require('repl').start({});corre antes de accounts = _accounts;correr. Esto se debe a que web3.eth.getAccounts()se ejecuta de forma asíncrona. Lo que deberías tener en su lugar es

web3.eth.getAccounts().then(_accounts => { accounts = _accounts; require('repl').start({}); });