parent
b40ef58f8f
commit
1854bea93d
@ -0,0 +1,122 @@ |
||||
'use strict' |
||||
var ethJSABI = require('ethereumjs-abi') |
||||
|
||||
module.exports = { |
||||
encodeParams: function (funABI, args) { |
||||
var types = [] |
||||
if (funABI.inputs && funABI.inputs.length) { |
||||
for (var i = 0; i < funABI.inputs.length; i++) { |
||||
var type = funABI.inputs[i].type |
||||
types.push(type) |
||||
if (args.length < types.length) { |
||||
args.push('') |
||||
} |
||||
} |
||||
} |
||||
|
||||
// NOTE: the caller will concatenate the bytecode and this
|
||||
// it could be done here too for consistency
|
||||
return ethJSABI.rawEncode(types, args) |
||||
}, |
||||
|
||||
encodeFunctionId: function (funABI) { |
||||
var types = [] |
||||
if (funABI.inputs && funABI.inputs.length) { |
||||
for (var i = 0; i < funABI.inputs.length; i++) { |
||||
types.push(funABI.inputs[i].type) |
||||
} |
||||
} |
||||
|
||||
return ethJSABI.methodID(funABI.name, types) |
||||
}, |
||||
|
||||
sortAbiFunction: function (contractabi) { |
||||
var abi = contractabi.sort(function (a, b) { |
||||
if (a.name > b.name) { |
||||
return -1 |
||||
} else { |
||||
return 1 |
||||
} |
||||
}).sort(function (a, b) { |
||||
if (a.constant === true) { |
||||
return -1 |
||||
} else { |
||||
return 1 |
||||
} |
||||
}) |
||||
return abi |
||||
}, |
||||
|
||||
getConstructorInterface: function (abi) { |
||||
var funABI = { 'name': '', 'inputs': [], 'type': 'constructor', 'outputs': [] } |
||||
if (typeof abi === 'string') { |
||||
try { |
||||
abi = JSON.parse(abi) |
||||
} catch (e) { |
||||
console.log('exception retrieving ctor abi ' + abi) |
||||
return funABI |
||||
} |
||||
} |
||||
|
||||
for (var i = 0; i < abi.length; i++) { |
||||
if (abi[i].type === 'constructor') { |
||||
funABI.inputs = abi[i].inputs || [] |
||||
break |
||||
} |
||||
} |
||||
|
||||
return funABI |
||||
}, |
||||
|
||||
getFunction: function (abi, fnName) { |
||||
for (var i = 0; i < abi.length; i++) { |
||||
if (abi[i].name === fnName) { |
||||
return abi[i] |
||||
} |
||||
} |
||||
return null |
||||
}, |
||||
|
||||
getFallbackInterface: function (abi) { |
||||
for (var i = 0; i < abi.length; i++) { |
||||
if (abi[i].type === 'fallback') { |
||||
return abi[i] |
||||
} |
||||
} |
||||
}, |
||||
|
||||
/** |
||||
* return the contract obj of the given @arg name. Uses last compilation result. |
||||
* return null if not found |
||||
* @param {String} name - contract name |
||||
* @returns contract obj and associated file: { contract, file } or null |
||||
*/ |
||||
getContract: (contractName, contracts) => { |
||||
for (var file in contracts) { |
||||
if (contracts[file][contractName]) { |
||||
return { object: contracts[file][contractName], file: file } |
||||
} |
||||
} |
||||
return null |
||||
}, |
||||
|
||||
/** |
||||
* call the given @arg cb (function) for all the contracts. Uses last compilation result |
||||
* stop visiting when cb return true |
||||
* @param {Function} cb - callback |
||||
*/ |
||||
visitContracts: (contracts, cb) => { |
||||
for (var file in contracts) { |
||||
for (var name in contracts[file]) { |
||||
if (cb({ name: name, object: contracts[file][name], file: file })) return |
||||
} |
||||
} |
||||
}, |
||||
|
||||
inputParametersDeclarationToString: function (abiinputs) { |
||||
var inputs = (abiinputs || []).map((inp) => inp.type + ' ' + inp.name) |
||||
return inputs.join(', ') |
||||
} |
||||
|
||||
} |
||||
|
Loading…
Reference in new issue