aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/scripts/lib/pending-balance-calculator.js18
-rw-r--r--test/unit/pending-balance-test.js35
2 files changed, 49 insertions, 4 deletions
diff --git a/app/scripts/lib/pending-balance-calculator.js b/app/scripts/lib/pending-balance-calculator.js
index 4f6e03138..9df87e34b 100644
--- a/app/scripts/lib/pending-balance-calculator.js
+++ b/app/scripts/lib/pending-balance-calculator.js
@@ -1,5 +1,6 @@
const BN = require('ethereumjs-util').BN
const EthQuery = require('ethjs-query')
+const normalize = require('eth-sig-util').normalize
class PendingBalanceCalculator {
@@ -9,15 +10,30 @@ class PendingBalanceCalculator {
}
async getBalance() {
+ console.log('getting balance')
const results = await Promise.all([
this.getBalance(),
this.getPendingTransactions(),
])
+ console.dir(results)
const balance = results[0]
const pending = results[1]
- return balance
+ console.dir({ balance, pending })
+
+ const pendingValue = pending.reduce(function (total, tx) {
+ return total.sub(this.valueFor(tx))
+ }, new BN(0))
+
+ const balanceBn = new BN(normalize(balance))
+
+ return `0x${ balanceBn.sub(pendingValue).toString(16) }`
+ }
+
+ valueFor (tx) {
+ const value = new BN(normalize(tx.txParams.value))
+ return value
}
}
diff --git a/test/unit/pending-balance-test.js b/test/unit/pending-balance-test.js
index dcf1926f0..9077e8f14 100644
--- a/test/unit/pending-balance-test.js
+++ b/test/unit/pending-balance-test.js
@@ -5,20 +5,49 @@ const BN = require('ethereumjs-util').BN
let providerResultStub = {}
describe('PendingBalanceCalculator', function () {
- let nonceTracker
+ let balanceCalculator
describe('if you have no pending txs and one ether', function () {
const ether = '0x' + (new BN(String(1e18))).toString(16)
beforeEach(function () {
- nonceTracker = generateBalaneCalcWith([], ether)
+ balanceCalculator = generateBalaneCalcWith([], ether)
})
it('returns the network balance', async function () {
- const result = await nonceTracker.getBalance()
+ const result = await balanceCalculator.getBalance()
assert.equal(result, ether, `gave ${result} needed ${ether}`)
})
})
+
+ describe('if you have a one ether pending tx and one ether', function () {
+ const ether = '0x' + (new BN(String(1e18))).toString(16)
+
+ beforeEach(function () {
+ const txGen = new MockTxGen()
+ pendingTxs = txGen.generate({
+ status: 'submitted',
+ txParams: {
+ value: ether,
+ gasPrice: '0x0',
+ gas: '0x0',
+ }
+ }, { count: 1 })
+
+ balanceCalculator = generateBalaneCalcWith(pendingTxs, ether)
+ })
+
+ it('returns the network balance', async function () {
+ console.log('one')
+ console.dir(balanceCalculator)
+ const result = await balanceCalculator.getBalance()
+ console.log('two')
+ console.dir(result)
+ assert.equal(result, '0x0', `gave ${result} needed '0x0'`)
+ return true
+ })
+
+ })
})
function generateBalaneCalcWith (transactions, providerStub = '0x0') {