1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Add more documentation to computed balances controller

This commit is contained in:
bitpshr 2018-04-19 14:37:08 -04:00
parent 1ef6528921
commit 9c7eafc86f
4 changed files with 77 additions and 6 deletions

View File

@ -2,8 +2,16 @@ const ObservableStore = require('obs-store')
const extend = require('xtend')
const BalanceController = require('./balance')
/**
* Background controller responsible for syncing
* and computing ETH balances for all accounts
*/
class ComputedbalancesController {
/**
* Creates a new controller instance
*
* @param {Object} [opts] Controller configuration parameters
*/
constructor (opts = {}) {
const { accountTracker, txController, blockTracker } = opts
this.accountTracker = accountTracker
@ -19,6 +27,9 @@ class ComputedbalancesController {
this._initBalanceUpdating()
}
/**
* Updates balances associated with each internal address
*/
updateAllBalances () {
Object.keys(this.balances).forEach((balance) => {
const address = balance.address
@ -26,12 +37,23 @@ class ComputedbalancesController {
})
}
/**
* Initializes internal address tracking
*
* @private
*/
_initBalanceUpdating () {
const store = this.accountTracker.store.getState()
this.syncAllAccountsFromStore(store)
this.accountTracker.store.subscribe(this.syncAllAccountsFromStore.bind(this))
}
/**
* Uses current account state to sync and track all
* addresses associated with the current account
*
* @param {Object} store Account tracking state
*/
syncAllAccountsFromStore (store) {
const upstream = Object.keys(store.accounts)
const balances = Object.keys(this.balances)
@ -50,6 +72,13 @@ class ComputedbalancesController {
})
}
/**
* Conditionally establishes a new subscription
* to track an address associated with the current
* account
*
* @param {string} address Address to conditionally subscribe to
*/
trackAddressIfNotAlready (address) {
const state = this.store.getState()
if (!(address in state.computedBalances)) {
@ -57,6 +86,12 @@ class ComputedbalancesController {
}
}
/**
* Establishes a new subscription to track an
* address associated with the current account
*
* @param {string} address Address to conditionally subscribe to
*/
trackAddress (address) {
const updater = new BalanceController({
address,

View File

@ -1,6 +1,10 @@
module.exports = createProviderMiddleware
// forward requests to provider
/**
* Forwards an HTTP request to the current Web3 provider
*
* @param {{ provider: Object }} config Configuration containing current Web3 provider
*/
function createProviderMiddleware ({ provider }) {
return (req, res, next, end) => {
provider.sendAsync(req, (err, _res) => {

View File

@ -6,6 +6,13 @@ module.exports = PortDuplexStream
inherits(PortDuplexStream, Duplex)
/**
* Creates a stream that's both readable and writable.
* The stream supports arbitrary JavaScript objects.
*
* @class
* @param {Object} port Remote Port object
*/
function PortDuplexStream (port) {
Duplex.call(this, {
objectMode: true,
@ -15,8 +22,13 @@ function PortDuplexStream (port) {
port.onDisconnect.addListener(this._onDisconnect.bind(this))
}
// private
/**
* Callback triggered when a message is received from
* the remote Port associated with this Stream.
*
* @private
* @param {Object} msg - Payload from the onMessage listener of Port
*/
PortDuplexStream.prototype._onMessage = function (msg) {
if (Buffer.isBuffer(msg)) {
delete msg._isBuffer
@ -27,14 +39,31 @@ PortDuplexStream.prototype._onMessage = function (msg) {
}
}
/**
* Callback triggered when the remote Port
* associated with this Stream disconnects.
*
* @private
*/
PortDuplexStream.prototype._onDisconnect = function () {
this.destroy()
}
// stream plumbing
/**
* Explicitly sets read operations to a no-op
*/
PortDuplexStream.prototype._read = noop
/**
* Called internally when data should be written to
* this writable stream.
*
* @private
* @param {*} msg Arbitrary JavaScript object to write
* @param {string} encoding Encoding to use when writing payload
* @param {Function} cb Called when writing is complete or an error occurs
*/
PortDuplexStream.prototype._write = function (msg, encoding, cb) {
try {
if (Buffer.isBuffer(msg)) {

View File

@ -1,6 +1,9 @@
module.exports = setupMetamaskMeshMetrics
/**
* Injects an iframe into the curerent document for testing
*/
function setupMetamaskMeshMetrics() {
const testingContainer = document.createElement('iframe')
testingContainer.src = 'https://metamask.github.io/mesh-testing/'