Merge pull request #684 from ethereum/fixCall

display call result
pull/1/head
yann300 7 years ago committed by GitHub
commit 01336798d6
  1. 23
      src/app/execution/txFormat.js
  2. 32
      src/universal-dapp.js

@ -1,7 +1,10 @@
'use strict'
var $ = require('jquery')
var ethJSABI = require('ethereumjs-abi')
var ethJSUtil = require('ethereumjs-util')
var BN = ethJSUtil.BN
var helper = require('./txHelper')
var TreeView = require('ethereum-remix').ui.TreeView
module.exports = {
/**
@ -121,6 +124,18 @@ module.exports = {
decodeResponse: function (response, fnabi, callback) {
// Only decode if there supposed to be fields
var treeView = new TreeView({
extractData: (item, parent, key) => {
var ret = {}
if (BN.isBN(item)) {
ret.self = item.toString(10)
ret.children = []
} else {
ret = treeView.extractDataDefault(item, parent, key)
}
return ret
}
})
if (fnabi.outputs && fnabi.outputs.length > 0) {
try {
var i
@ -134,17 +149,17 @@ module.exports = {
var decodedObj = ethJSABI.rawDecode(outputTypes, response)
// format decoded data
decodedObj = ethJSABI.stringify(outputTypes, decodedObj)
var json = {}
for (i = 0; i < outputTypes.length; i++) {
var name = fnabi.outputs[i].name
if (name.length > 0) {
decodedObj[i] = outputTypes[i] + ' ' + name + ': ' + decodedObj[i]
json[outputTypes[i] + ' ' + name] = decodedObj[i]
} else {
decodedObj[i] = outputTypes[i] + ': ' + decodedObj[i]
json[outputTypes[i]] = decodedObj[i]
}
}
return callback(null, decodedObj)
return callback(null, treeView.render(json))
} catch (e) {
return callback('Failed to decode output: ' + e)
}

@ -361,19 +361,28 @@ UniversalDApp.prototype.getCallButton = function (args) {
.attr('title', title)
.text(title)
.click(() => {
txFormat.buildData(args.contractAbi, self.contracts, false, args.funABI, inputField.val(), self, self.executionContext, (error, data) => {
if (!error) {
txExecution.callFunction(args.address, data, args.funABI, self, (error, txResult) => {
// TODO here should send the result to the dom-console
console.log('function call', error, txResult)
alert(error + ' ' + txResult.transactionHash)
})
} else {
alert(error)
}
})
call()
})
function call () {
txFormat.buildData(args.contractAbi, self.contracts, false, args.funABI, inputField.val(), self, self.executionContext, (error, data) => {
if (!error) {
txExecution.callFunction(args.address, data, args.funABI, self, (error, txResult) => {
if (!error) {
if (lookupOnly) {
txFormat.decodeResponse(self.executionContext.isVM() ? txResult.result.vm.return : ethJSUtil.toBuffer(txResult.result), args.funABI, (error, decoded) => {
$outputOverride.html(error ? 'error' + error : decoded)
})
}
} else {
alert(error)
}
})
} else {
alert(error)
}
})
}
// TODO the auto call to constant function has been removed. needs to readd it later.
var $contractProperty = $(`<div class="contractProperty ${css.buttonsContainer}"></div>`)
@ -383,6 +392,7 @@ UniversalDApp.prototype.getCallButton = function (args) {
if (lookupOnly) {
$contractProperty.addClass('constant')
call()
}
if (args.funABI.inputs && args.funABI.inputs.length > 0) {

Loading…
Cancel
Save