decode / encode tuple

pull/3094/head
yann300 7 years ago
parent 063dc356e6
commit 7a5cab06c3
  1. 3
      remix-lib/src/execution/txFormat.js
  2. 11
      remix-lib/src/execution/txHelper.js
  3. 3
      remix-lib/src/execution/txListener.js

@ -365,7 +365,8 @@ module.exports = {
var outputTypes = [] var outputTypes = []
for (i = 0; i < fnabi.outputs.length; i++) { for (i = 0; i < fnabi.outputs.length; i++) {
outputTypes.push(fnabi.outputs[i].type) var type = fnabi.outputs[i].type
outputTypes.push(type === 'tuple' ? helper.makeFullTupleTypeDefinition(fnabi.outputs[i]) : type)
} }
if (!response.length) response = new Uint8Array(32 * fnabi.outputs.length) // ensuring the data is at least filled by 0 cause `AbiCoder` throws if there's not engouh data if (!response.length) response = new Uint8Array(32 * fnabi.outputs.length) // ensuring the data is at least filled by 0 cause `AbiCoder` throws if there's not engouh data

@ -2,12 +2,21 @@
var ethers = require('ethers') var ethers = require('ethers')
module.exports = { module.exports = {
makeFullTupleTypeDefinition: function (typeDef) {
var innerTypes = []
if (typeDef && typeDef.type === 'tuple' && typeDef.components) {
typeDef.components.map((innerType) => innerTypes.push(innerType.type))
return 'tuple(' + innerTypes.join(',') + ')'
}
return typeDef.type
},
encodeParams: function (funABI, args) { encodeParams: function (funABI, args) {
var types = [] var types = []
if (funABI.inputs && funABI.inputs.length) { if (funABI.inputs && funABI.inputs.length) {
for (var i = 0; i < funABI.inputs.length; i++) { for (var i = 0; i < funABI.inputs.length; i++) {
var type = funABI.inputs[i].type var type = funABI.inputs[i].type
types.push(type) types.push(type === 'tuple' ? this.makeFullTupleTypeDefinition(funABI.inputs[i]) : type)
if (args.length < types.length) { if (args.length < types.length) {
args.push('') args.push('')
} }

@ -329,7 +329,8 @@ class TxListener {
var inputTypes = [] var inputTypes = []
for (var i = 0; i < abi.inputs.length; i++) { for (var i = 0; i < abi.inputs.length; i++) {
inputTypes.push(abi.inputs[i].type) var type = abi.inputs[i].type
inputTypes.push(type === 'tuple' ? txHelper.makeFullTupleTypeDefinition(abi.inputs[i]) : type)
} }
var abiCoder = new ethers.utils.AbiCoder() var abiCoder = new ethers.utils.AbiCoder()
var decoded = abiCoder.decode(inputTypes, data) var decoded = abiCoder.decode(inputTypes, data)

Loading…
Cancel
Save