diff --git a/lib/cmds/blockchain/dev_funds.js b/lib/cmds/blockchain/dev_funds.js index 6f1dc0b8..14e6d4d4 100644 --- a/lib/cmds/blockchain/dev_funds.js +++ b/lib/cmds/blockchain/dev_funds.js @@ -1,7 +1,7 @@ const async = require('async'); const Web3 = require('web3'); -const {getWeiBalanceFromString, buildUrl} = require('../../utils/utils.js'); -const {readFileSync, dappPath} = require('../../core/fs'); +const { getWeiBalanceFromString, buildUrl } = require('../../utils/utils.js'); +const { readFileSync, dappPath } = require('../../core/fs'); class DevFunds { constructor(blockchainConfig) { @@ -12,7 +12,7 @@ class DevFunds { this.password = readFileSync(dappPath('config/development/password'), 'utf8').replace('\n', ''); this.web3 = new Web3(); this.balance = Web3.utils.toWei("1", "ether"); - if(this.blockchainConfig.account.balance){ + if (this.blockchainConfig.account.balance) { console.dir('[blockchain/dev_funds]: converting balance from ' + this.blockchainConfig.account.balance); this.balance = getWeiBalanceFromString(this.blockchainConfig.account.balance, this.web3); console.dir('[blockchain/dev_funds]: converted balance to ' + this.balance); @@ -20,52 +20,73 @@ class DevFunds { } connectToNode(cb) { - - this.web3.setProvider(new Web3.providers.WebsocketProvider(buildUrl('ws', this.blockchainConfig.wsHost, this.blockchainConfig.wsPort), {headers: {Origin: "http://localhost:8000"}})); - + + this.web3.setProvider(new Web3.providers.WebsocketProvider(buildUrl('ws', this.blockchainConfig.wsHost, this.blockchainConfig.wsPort), { headers: { Origin: "http://localhost:8000" } })); + this.web3.eth.getAccounts().then((accounts) => { this.web3.eth.defaultAccount = accounts[0]; - this.accounts = accounts; + if (accounts.length > 1) { + this.accounts = accounts.slice(1); + } + console.dir('----- CURRENT ACCOUNTS ' + this.accounts); cb(); }); } createAccounts(numAccounts, password, cb) { - console.dir("creating " + (numAccounts - this.accounts.length) + " new accounts with password " + password); - async.timesLimit((numAccounts - this.accounts.length), 1, (_, next) => { + const numAccountsToCreate = numAccounts - (this.accounts.length + 1); + if (numAccountsToCreate === 0) return cb(); + + console.dir("creating " + numAccountsToCreate + " new accounts with password " + password); + async.timesLimit(numAccountsToCreate, 1, (_, next) => { console.dir("--- creating new account"); this.web3.eth.personal.newAccount(password, next); }, (err, accounts) => { - if(err) console.error(err); + if (err) console.error(err); console.dir("-- accounts created are "); console.dir(accounts); this.accounts = accounts; cb(err); - }); + }); } unlockAccounts(password, cb) { + console.dir('--- CURRENT ACCOUNTS ' + this.accounts); async.each(this.accounts, (account, next) => { console.dir('-- unlocking account ' + account + ' with password ' + password); - this.web3.eth.personal.unlockAccount(account, password).then(() => next()).catch(next); - }, cb); + this.web3.eth.personal.unlockAccount(account, password).then((result) => { + console.dir('-- unlocked account ' + account + ' with password ' + password + ' and result ' + result); + next(); + }).catch(next); + }, (err) => { + console.dir('-- FINISHED UNLOCKING ACCOUNTS, err= ' + err); + cb(err); + }); } fundAccounts(balance, cb) { console.dir('-- funding accounts...'); - - + + async.each(this.accounts, (account, next) => { - console.dir("-- funding account " + account + " with balance " + balance); - this.web3.eth.sendTransaction({to: account, value: balance}).then((result) => { - console.dir('FUNDING ACCT result: ' + JSON.stringify(result)); - next(); - }).catch(next); - }, (err) => { - console.dir('-- FINISHED FUNDING ACCOUNTS, err= ' + err); - cb(err); + this.web3.eth.getBalance(account).then(currBalance => { + const remainingBalance = balance - currBalance; + console.dir("---- account " + account + " balance needed = " + remainingBalance); + if (remainingBalance <= 0) return next(); + + console.dir("-- funding account " + account + " with balance " + remainingBalance); + this.web3.eth.sendTransaction({to: account, value: remainingBalance}).then((result) => { + console.dir('FUNDING ACCT result: ' + JSON.stringify(result)); + next(); + }).catch(next); + }, (err) => { + console.dir('-- FINISHED FUNDING ACCOUNTS, err= ' + err); + cb(err); + }); }); + + } createFundAndUnlockAccounts(cb) { @@ -88,7 +109,7 @@ class DevFunds { } ], (err) => { console.dir(`--- COMPLETED THE ACCOUNTS (${this.accounts.join(', ')} and funded with ${this.balance} wei)`); - if(err) console.error('Error creating, unlocking, and funding accounts', err); + if (err) console.error('Error creating, unlocking, and funding accounts', JSON.stringify(err)); // this.web3.eth.getAccounts().then((accounts) => { // let numAccts = accounts.length;