You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.4 KiB
107 lines
2.4 KiB
8 years ago
|
'use strict'
|
||
|
var ethJSABI = require('ethereumjs-abi')
|
||
|
var $ = require('jquery')
|
||
|
|
||
|
module.exports = {
|
||
|
encodeParams: function (funABI, args) {
|
||
|
var types = []
|
||
|
if (funABI.inputs && funABI.inputs.length) {
|
||
|
for (var i = 0; i < funABI.inputs.length; i++) {
|
||
|
types.push(funABI.inputs[i].type)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 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 (contract) {
|
||
|
var abi = JSON.parse(contract.interface).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]
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
getContractByName: function (contractName, contracts) {
|
||
|
for (var c in contracts) {
|
||
|
if (contracts[c].name === contractName) {
|
||
|
return contracts[c]
|
||
|
}
|
||
|
}
|
||
|
return null
|
||
|
},
|
||
|
|
||
|
inputParametersDeclarationToString: function (abiinputs) {
|
||
|
var inputs = ''
|
||
|
if (abiinputs) {
|
||
|
$.each(abiinputs, function (i, inp) {
|
||
|
if (inputs !== '') {
|
||
|
inputs += ', '
|
||
|
}
|
||
|
inputs += inp.type + ' ' + inp.name
|
||
|
})
|
||
|
}
|
||
|
return inputs
|
||
|
}
|
||
|
}
|