diff options
Merge branch 'master' into AddTravisCI
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | app/scripts/inpage.js | 77 | ||||
-rw-r--r-- | ui/app/util.js | 9 | ||||
-rw-r--r-- | ui/test/unit/util_test.js | 16 |
4 files changed, 26 insertions, 77 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 83c0f1709..25b59193b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Corrected text above account list. Selected account is visible to all sites, not just the current domain. - Merged the UI codebase into the main plugin codebase for simpler maintenance. +- Fix Ether display rounding error. Now rendering to four decimal points. ## 1.5.0 2016-04-13 diff --git a/app/scripts/inpage.js b/app/scripts/inpage.js index 065f69629..121246d6a 100644 --- a/app/scripts/inpage.js +++ b/app/scripts/inpage.js @@ -1,6 +1,4 @@ const XHR = window.XMLHttpRequest -// const fauxJax = require('faux-jax') -// fauxJax.install() // bring in web3 but rename on window const Web3 = require('web3') @@ -34,7 +32,9 @@ remoteProvider.on('error', console.error.bind(console)) // // handle accounts cache -var accountsCache = [] +var accountsCache = JSON.parse(localStorage['MetaMask-Accounts'] || '[]') +web3.eth.defaultAccount = accounts[0] + setInterval(populateAccountsCache, 4000) function populateAccountsCache(){ remoteProvider.sendAsync(createPayload({ @@ -46,6 +46,7 @@ function populateAccountsCache(){ // update localStorage var accounts = response.result if (accounts.toString() !== accountsCache.toString()) { + web3.eth.defaultAccount = accounts[0] accountsCache = accounts localStorage['MetaMask-Accounts'] = JSON.stringify(accounts) } @@ -60,13 +61,11 @@ remoteProvider.send = function(payload){ case 'eth_accounts': // read from localStorage - accountsCache = JSON.parse(localStorage['MetaMask-Accounts'] || '[]') result = accountsCache break case 'eth_coinbase': // read from localStorage - accountsCache = JSON.parse(localStorage['MetaMask-Accounts'] || '[]') result = accountsCache[0] || '0x0000000000000000000000000000000000000000' break @@ -94,71 +93,3 @@ web3.setProvider = function(){ console.log('MetaMask - overrode web3.setProvider') } console.log('MetaMask - injected web3') - - -// -// intercept local node requests -// - - -// console.log('MetaMask - intercepting localhost:8545 requests') - -// fauxJax.on('request', function(req){ -// // check if local node request -// if (req.requestURL.indexOf('localhost:8545') !== -1) { -// var rpcReq = JSON.parse(req.requestBody) -// if (req.async) { -// remoteProvider.sendAsync(rpcReq, function(err, result){ -// // console.log('intercepted request (async):', rpcReq, result) -// handleResult(result) -// }) -// } else { -// var result = remoteProvider.send(rpcReq) -// // console.log('intercepted request (sync):', rpcReq, result) -// handleResult(result) -// } -// } else { -// // console.log('request continuing normally:', req.requestURL) -// continueRequestNormally(req) -// } - -// function handleResult(result){ -// var serializedResult = JSON.stringify(result) -// req.respond(200, { -// 'content-type': 'application/json', -// }, serializedResult) -// } -// }) - -// function continueRequestNormally(req){ -// var xhr = new XHR() -// // set target url and method -// xhr.open(req.requestMethod, req.requestURL, req.async) -// // set headers -// Object.keys(req.requestHeaders || {}).forEach(function(headerKey){ -// xhr.setRequestHeader(headerKey, req.requestHeaders[headerKey]) -// }) -// // send and call completion handler -// if (req.async) { -// xhr.onload = copyResult -// xhr.send(req.requestBody) -// } else { -// xhr.send(req.requestBody) -// copyResult() -// } - -// function copyResult() { -// var headers = extractResponseHeaders(xhr.getAllResponseHeaders()) -// req.respond(xhr.status, headers, xhr.response) -// } -// } - -// function extractResponseHeaders(rawHeaders){ -// var headers = {} -// var headerKeyValues = rawHeaders.split('\r\n').filter(Boolean) -// headerKeyValues.forEach(function(keyValue){ -// var data = keyValue.split(': ') -// headers[data[0]] = data[1] -// }) -// return headers -// } diff --git a/ui/app/util.js b/ui/app/util.js index 4c31e54f4..74e2c19aa 100644 --- a/ui/app/util.js +++ b/ui/app/util.js @@ -64,11 +64,16 @@ function weiToEth(bn) { return eth } +var decimalsToKeep = 4 function formatBalance(balance) { if (!balance) return 'None' var wei = numericBalance(balance) - var eth = weiToEth(wei) - return eth.toString(10) + ' ETH' + var padded = wei.toString(10) + var len = padded.length + var nonZeroIndex = padded.match(/[^0]/).index + var beforeDecimal = padded.substr(nonZeroIndex ? nonZeroIndex : 0, len - 18) + var afterDecimal = padded.substr(len - 18, decimalsToKeep) + return `${beforeDecimal}.${afterDecimal} ETH` } function dataSize(data) { diff --git a/ui/test/unit/util_test.js b/ui/test/unit/util_test.js index 52635eb89..7e34bba1c 100644 --- a/ui/test/unit/util_test.js +++ b/ui/test/unit/util_test.js @@ -63,9 +63,21 @@ describe('util', function() { }) it('should return eth as string followed by ETH', function() { - var input = new ethUtil.BN(ethInWei).toJSON() + var input = new ethUtil.BN(ethInWei, 10).toJSON() var result = util.formatBalance(input) - assert.equal(result, '1 ETH') + assert.equal(result, '1.0000 ETH') + }) + + it('should return eth as string followed by ETH', function() { + var input = new ethUtil.BN(ethInWei, 10).div(new ethUtil.BN('2', 10)).toJSON() + var result = util.formatBalance(input) + assert.equal(result, '.5000 ETH') + }) + + it('should display four decimal points', function() { + var input = "0x128dfa6a90b28000" + var result = util.formatBalance(input) + assert.equal(result, '1.3370 ETH') }) }) |