fix value decoding

pull/1/head
yann300 7 years ago
parent b3e13456ae
commit a3e4190653
  1. 46
      src/app/execution/txLogger.js
  2. 37
      src/lib/typeConversion.js

@ -10,10 +10,9 @@ var styles = styleGuide()
var EventManager = remix.lib.EventManager var EventManager = remix.lib.EventManager
var helper = require('../../lib/helper') var helper = require('../../lib/helper')
var ethJSUtil = require('ethereumjs-util')
var BN = ethJSUtil.BN
var executionContext = require('../../execution-context') var executionContext = require('../../execution-context')
var modalDialog = require('../ui/modal-dialog-custom') var modalDialog = require('../ui/modal-dialog-custom')
var typeConversion = require('../../lib/typeConversion')
var css = csjs` var css = csjs`
.log { .log {
@ -173,8 +172,8 @@ function renderKnownTransaction (self, data) {
gas: data.tx.gas, gas: data.tx.gas,
hash: data.tx.hash, hash: data.tx.hash,
input: data.tx.input, input: data.tx.input,
'decoded input': data.resolvedData && data.resolvedData.params ? JSON.stringify(value(data.resolvedData.params), null, '\t') : ' - ', 'decoded input': data.resolvedData && data.resolvedData.params ? JSON.stringify(typeConversion.stringify(data.resolvedData.params), null, '\t') : ' - ',
'decoded output': data.resolvedData && data.resolvedData.decodedReturnValue ? JSON.stringify(value(data.resolvedData.decodedReturnValue), null, '\t') : ' - ', 'decoded output': data.resolvedData && data.resolvedData.decodedReturnValue ? JSON.stringify(typeConversion.stringify(data.resolvedData.decodedReturnValue), null, '\t') : ' - ',
logs: data.logs, logs: data.logs,
val: data.tx.value val: data.tx.value
}) })
@ -204,7 +203,7 @@ function renderCall (self, data) {
<button class=${css.debug} onclick=${debug}>Debug</button> <button class=${css.debug} onclick=${debug}>Debug</button>
</div> </div>
</div> </div>
<div> ${JSON.stringify(value(data.resolvedData.decodedReturnValue), null, '\t')}</div> <div> ${JSON.stringify(typeConversion.stringify(data.resolvedData.decodedReturnValue), null, '\t')}</div>
</span> </span>
` `
return tx return tx
@ -264,40 +263,13 @@ function context (self, opts) {
var block = data.tx.blockNumber || '' var block = data.tx.blockNumber || ''
var i = data.tx.transactionIndex var i = data.tx.transactionIndex
if (executionContext.getProvider() === 'vm') { if (executionContext.getProvider() === 'vm') {
return yo`<span><span class=${css.tx}>[vm]</span> from:${from}, to:${to}, value:${value(val)} wei, data:${input}, ${logs} logs, hash:${hash}</span>` return yo`<span><span class=${css.tx}>[vm]</span> from:${from}, to:${to}, value:${typeConversion.hexToInt(val)} wei, data:${input}, ${logs} logs, hash:${hash}</span>`
} else if (executionContext.getProvider() !== 'vm' && data.resolvedData) { } else if (executionContext.getProvider() !== 'vm' && data.resolvedData) {
return yo`<span><span class='${css.tx}'>[block:${block} txIndex:${i}]</span> from:${from}, to:${to}, value:${value(val)} wei, ${logs} logs, data:${input}, hash:${hash}</span>` return yo`<span><span class='${css.tx}'>[block:${block} txIndex:${i}]</span> from:${from}, to:${to}, value:${typeConversion.hexToInt(val)} wei, ${logs} logs, data:${input}, hash:${hash}</span>`
} else { } else {
to = helper.shortenHexData(to) to = helper.shortenHexData(to)
hash = helper.shortenHexData(data.tx.blockHash) hash = helper.shortenHexData(data.tx.blockHash)
return yo`<span><span class='${css.tx}'>[block:${block} txIndex:${i}]</span> from:${from}, to:${to}, value:${value(val)} wei</span>` return yo`<span><span class='${css.tx}'>[block:${block} txIndex:${i}]</span> from:${from}, to:${to}, value:${typeConversion.hexToInt(val)} wei</span>`
}
}
function value (v) {
try {
if (v instanceof Array) {
var ret = []
for (var k in v) {
ret.push(value(v[k]))
}
return ret
} else if (BN.isBN(v) || (v.constructor && v.constructor.name === 'BigNumber')) {
return v.toString(10)
} else if (v.indexOf && v.indexOf('0x') === 0) {
return (new BN(v.replace('0x', ''), 16)).toString(10)
} else if (typeof v === 'object') {
var retObject = {}
for (var i in v) {
retObject[i] = value(v[i])
}
return retObject
} else {
return v
}
} catch (e) {
console.log(e)
return v
} }
} }
@ -383,7 +355,7 @@ function createTable (opts) {
var stringified = ' - ' var stringified = ' - '
if (opts.logs.decoded) { if (opts.logs.decoded) {
stringified = value(opts.logs.decoded) stringified = typeConversion.stringify(opts.logs.decoded)
} }
var logs = yo` var logs = yo`
<tr class="${css.tr}"> <tr class="${css.tr}">
@ -395,7 +367,7 @@ function createTable (opts) {
` `
if (opts.logs) table.appendChild(logs) if (opts.logs) table.appendChild(logs)
var val = value(opts.val) var val = typeConversion.hexToInt(opts.val)
val = yo` val = yo`
<tr class="${css.tr}"> <tr class="${css.tr}">
<td class="${css.td}"> value </td> <td class="${css.td}"> value </td>

@ -0,0 +1,37 @@
'use strict'
var ethJSUtil = require('ethereumjs-util')
var BN = ethJSUtil.BN
module.exports = {
hexToInt: (h) => {
return (new BN(h.replace('0x', ''), 16)).toString(10)
},
stringify: stringify
}
function stringify (v) {
try {
if (v instanceof Array) {
var ret = []
for (var k in v) {
ret.push(stringify(v[k]))
}
return ret
} else if (BN.isBN(v) || (v.constructor && v.constructor.name === 'BigNumber')) {
return v.toString(10)
} else if (v._isBuffer) {
return ethJSUtil.bufferToHex(v)
} else if (typeof v === 'object') {
var retObject = {}
for (var i in v) {
retObject[i] = stringify(v[i])
}
return retObject
} else {
return v
}
} catch (e) {
console.log(e)
return v
}
}
Loading…
Cancel
Save