Merge pull request #111 from MetaMask/i53

inpage sync RPC
feature/default_network_editable
kumavis 9 years ago
commit 6159080731
  1. 15
      app/scripts/background.js
  2. 25
      app/scripts/inpage.js
  3. 41
      app/scripts/lib/obj-multiplex.js
  4. 18
      app/scripts/popup.js
  5. 4
      ui/app/util.js

@ -1,5 +1,5 @@
const Dnode = require('dnode')
const Multiplex = require('multiplex')
const ObjectMultiplex = require('./lib/obj-multiplex')
const eos = require('end-of-stream')
const combineStreams = require('pumpify')
const extend = require('xtend')
@ -89,7 +89,7 @@ function onRpcRequest(remoteStream, payload){
function handleInternalCommunication(portStream){
// setup multiplexing
var mx = Multiplex()
var mx = ObjectMultiplex()
portStream.pipe(mx).pipe(portStream)
mx.on('error', function(err) {
console.error(err)
@ -99,15 +99,8 @@ function handleInternalCommunication(portStream){
console.error(err)
mx.destroy()
})
var dnodeStream = mx.createSharedStream('dnode')
var providerStream = combineStreams.obj(
jsonStringifyStream(),
mx.createSharedStream('provider'),
jsonParseStream()
)
linkDnode(dnodeStream)
handleEthRpcRequestStream(providerStream)
linkDnode(mx.createStream('dnode'))
handleEthRpcRequestStream(mx.createStream('provider'))
}
function linkDnode(stream){

@ -26,6 +26,17 @@ remoteProvider.pipe(pluginStream).pipe(remoteProvider)
pluginStream.on('error', console.error.bind(console))
remoteProvider.on('error', console.error.bind(console))
//
// global web3
//
var web3 = new Web3(remoteProvider)
window.web3 = web3
web3.setProvider = function(){
console.log('MetaMask - overrode web3.setProvider')
}
console.log('MetaMask - injected web3')
//
// handle synchronous requests
@ -33,7 +44,7 @@ remoteProvider.on('error', console.error.bind(console))
// handle accounts cache
var accountsCache = JSON.parse(localStorage['MetaMask-Accounts'] || '[]')
web3.eth.defaultAccount = accounts[0]
web3.eth.defaultAccount = accountsCache[0]
setInterval(populateAccountsCache, 4000)
function populateAccountsCache(){
@ -46,8 +57,8 @@ function populateAccountsCache(){
// update localStorage
var accounts = response.result
if (accounts.toString() !== accountsCache.toString()) {
web3.eth.defaultAccount = accounts[0]
accountsCache = accounts
web3.eth.defaultAccount = accountsCache[0]
localStorage['MetaMask-Accounts'] = JSON.stringify(accounts)
}
})
@ -83,13 +94,3 @@ remoteProvider.send = function(payload){
}
}
//
// global web3
//
var web3 = new Web3(remoteProvider)
window.web3 = web3
web3.setProvider = function(){
console.log('MetaMask - overrode web3.setProvider')
}
console.log('MetaMask - injected web3')

@ -0,0 +1,41 @@
const through = require('through2')
module.exports = ObjectMultiplex
function ObjectMultiplex(opts){
opts = opts || {}
// create multiplexer
var mx = through.obj(function(chunk, enc, cb) {
var name = chunk.name
var data = chunk.data
var substream = mx.streams[name]
if (!substream) {
console.warn("orphaned data for stream " + name)
} else {
substream.push(data)
}
return cb()
})
mx.streams = {}
// create substreams
mx.createStream = function(name) {
var substream = mx.streams[name] = through.obj(function(chunk, enc, cb) {
mx.push({
name: name,
data: chunk,
})
return cb()
})
mx.on('end', function() {
return substream.emit('end')
})
if (opts.error) {
mx.on('error', function() {
return substream.emit('error')
})
}
return substream
}
return mx
}

@ -1,7 +1,7 @@
const url = require('url')
const EventEmitter = require('events').EventEmitter
const async = require('async')
const Multiplex = require('multiplex')
const ObjectMultiplex = require('./lib/obj-multiplex')
const Dnode = require('dnode')
const Web3 = require('web3')
const MetaMaskUi = require('../../ui')
@ -9,8 +9,6 @@ const MetaMaskUiCss = require('../../ui/css')
const injectCss = require('inject-css')
const PortStream = require('./lib/port-stream.js')
const StreamProvider = require('./lib/stream-provider.js')
const jsonParseStream = require('./lib/stream-utils.js').jsonParseStream
const jsonStringifyStream = require('./lib/stream-utils.js').jsonStringifyStream
// setup app
var css = MetaMaskUiCss()
@ -26,7 +24,7 @@ function connectToAccountManager(cb){
var pluginPort = chrome.runtime.connect({name: 'popup'})
var portStream = new PortStream(pluginPort)
// setup multiplexing
var mx = Multiplex()
var mx = ObjectMultiplex()
portStream.pipe(mx).pipe(portStream)
mx.on('error', function(err) {
console.error(err)
@ -36,19 +34,13 @@ function connectToAccountManager(cb){
console.error(err)
mx.destroy()
})
var dnodeStream = mx.createSharedStream('dnode')
var providerStream = mx.createSharedStream('provider')
linkDnode(dnodeStream, cb)
linkWeb3(providerStream)
linkDnode(mx.createStream('dnode'), cb)
linkWeb3(mx.createStream('provider'))
}
function linkWeb3(stream){
var remoteProvider = new StreamProvider()
remoteProvider
.pipe(jsonStringifyStream())
.pipe(stream)
.pipe(jsonParseStream())
.pipe(remoteProvider)
remoteProvider.pipe(stream).pipe(remoteProvider)
stream.on('error', console.error.bind(console))
remoteProvider.on('error', console.error.bind(console))
global.web3 = new Web3(remoteProvider)

@ -66,11 +66,11 @@ function weiToEth(bn) {
var decimalsToKeep = 4
function formatBalance(balance) {
if (!balance) return 'None'
if (!balance || balance === '0x0') return 'None'
var wei = numericBalance(balance)
var padded = wei.toString(10)
var len = padded.length
var nonZeroIndex = padded.match(/[^0]/).index
var nonZeroIndex = padded.match(/[^0]/) && padded.match(/[^0]/).index
var beforeDecimal = padded.substr(nonZeroIndex ? nonZeroIndex : 0, len - 18)
var afterDecimal = padded.substr(len - 18, decimalsToKeep)
return `${beforeDecimal}.${afterDecimal} ETH`

Loading…
Cancel
Save