mirror of https://github.com/ethereum/go-ethereum
parent
dc100f85b3
commit
05290d5547
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,77 @@ |
|||||||
|
|
||||||
|
var findIndex = function (array, callback) { |
||||||
|
var end = false; |
||||||
|
var i = 0; |
||||||
|
for (; i < array.length && !end; i++) { |
||||||
|
end = callback(array[i]); |
||||||
|
} |
||||||
|
return end ? i - 1 : -1; |
||||||
|
}; |
||||||
|
|
||||||
|
var padLeft = function (number, n) { |
||||||
|
return (new Array(n - number.toString.length + 1)).join("0") + number; |
||||||
|
}; |
||||||
|
|
||||||
|
var setupTypes = function () { |
||||||
|
var prefixedType = function (prefix) { |
||||||
|
return function (type, value) { |
||||||
|
var expected = prefix; |
||||||
|
if (type.indexOf(expected) !== 0) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
var padding = parseInt(type.slice(expected.length)) / 8; |
||||||
|
return padLeft(value, padding); |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
var namedType = function (name, padding) { |
||||||
|
return function (type, value) { |
||||||
|
if (type !== name) { |
||||||
|
return false;
|
||||||
|
} |
||||||
|
|
||||||
|
return padLeft(value, padding); |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
return [ |
||||||
|
prefixedType('uint'), |
||||||
|
prefixedType('int'), |
||||||
|
namedType('address', 20), |
||||||
|
namedType('bool', 1), |
||||||
|
]; |
||||||
|
}; |
||||||
|
|
||||||
|
var types = setupTypes(); |
||||||
|
|
||||||
|
var toBytes = function (json, methodName, params) { |
||||||
|
var bytes = ""; |
||||||
|
var index = findIndex(json, function (method) { |
||||||
|
return method.name === methodName; |
||||||
|
}); |
||||||
|
|
||||||
|
if (index === -1) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
bytes = bytes + index + 'x'; |
||||||
|
var method = json[index]; |
||||||
|
|
||||||
|
for (var i = 0; i < method.inputs.length; i++) { |
||||||
|
var found = false; |
||||||
|
for (var j = 0; j < types.length && !found; j++) { |
||||||
|
found = types[j](method.inputs[i].type, params[i]); |
||||||
|
} |
||||||
|
if (!found) { |
||||||
|
console.error('unsupported json type: ' + method.inputs[i].type); |
||||||
|
} |
||||||
|
bytes += found; |
||||||
|
} |
||||||
|
return bytes; |
||||||
|
}; |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
toBytes: toBytes |
||||||
|
}; |
||||||
|
|
Loading…
Reference in new issue