aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers/balance.js
diff options
context:
space:
mode:
authorKevin Serrano <kevgagser@gmail.com>2017-09-27 06:47:31 +0800
committerGitHub <noreply@github.com>2017-09-27 06:47:31 +0800
commite998d528f0af71d1163bc89fe9e81195bb4f5dc3 (patch)
tree5bb9bbcdb3db6f8c1e7a34492aad18efe28462ed /app/scripts/controllers/balance.js
parent57b5f15265be2ae39ddf538915f8bd57538760b6 (diff)
parent6ca519e97c4c282023ab6b7788715ff8d7ec8189 (diff)
downloadtangerine-wallet-browser-e998d528f0af71d1163bc89fe9e81195bb4f5dc3.tar
tangerine-wallet-browser-e998d528f0af71d1163bc89fe9e81195bb4f5dc3.tar.gz
tangerine-wallet-browser-e998d528f0af71d1163bc89fe9e81195bb4f5dc3.tar.bz2
tangerine-wallet-browser-e998d528f0af71d1163bc89fe9e81195bb4f5dc3.tar.lz
tangerine-wallet-browser-e998d528f0af71d1163bc89fe9e81195bb4f5dc3.tar.xz
tangerine-wallet-browser-e998d528f0af71d1163bc89fe9e81195bb4f5dc3.tar.zst
tangerine-wallet-browser-e998d528f0af71d1163bc89fe9e81195bb4f5dc3.zip
Merge branch 'master' into RemoveSlackLink
Diffstat (limited to 'app/scripts/controllers/balance.js')
-rw-r--r--app/scripts/controllers/balance.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/app/scripts/controllers/balance.js b/app/scripts/controllers/balance.js
new file mode 100644
index 000000000..964dff0df
--- /dev/null
+++ b/app/scripts/controllers/balance.js
@@ -0,0 +1,61 @@
+const ObservableStore = require('obs-store')
+const PendingBalanceCalculator = require('../lib/pending-balance-calculator')
+const BN = require('ethereumjs-util').BN
+
+class BalanceController {
+
+ constructor (opts = {}) {
+ const { address, accountTracker, txController, blockTracker } = opts
+ this.address = address
+ this.accountTracker = accountTracker
+ this.txController = txController
+ this.blockTracker = blockTracker
+
+ const initState = {
+ ethBalance: undefined,
+ }
+ this.store = new ObservableStore(initState)
+
+ this.balanceCalc = new PendingBalanceCalculator({
+ getBalance: () => this._getBalance(),
+ getPendingTransactions: this._getPendingTransactions.bind(this),
+ })
+
+ this._registerUpdates()
+ }
+
+ async updateBalance () {
+ const balance = await this.balanceCalc.getBalance()
+ this.store.updateState({
+ ethBalance: balance,
+ })
+ }
+
+ _registerUpdates () {
+ const update = this.updateBalance.bind(this)
+ this.txController.on('submitted', update)
+ this.txController.on('confirmed', update)
+ this.txController.on('failed', update)
+ this.accountTracker.store.subscribe(update)
+ this.blockTracker.on('block', update)
+ }
+
+ async _getBalance () {
+ const { accounts } = this.accountTracker.store.getState()
+ const entry = accounts[this.address]
+ const balance = entry.balance
+ return balance ? new BN(balance.substring(2), 16) : undefined
+ }
+
+ async _getPendingTransactions () {
+ const pending = this.txController.getFilteredTxList({
+ from: this.address,
+ status: 'submitted',
+ err: undefined,
+ })
+ return pending
+ }
+
+}
+
+module.exports = BalanceController