forked from mirror/go-ethereum
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.
79 lines
1.9 KiB
79 lines
1.9 KiB
|
|
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 * 2 - 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;
|
|
}
|
|
|
|
// it needs to be checked in WebThreeStubServer
|
|
// something wrong might be with this additional zero
|
|
bytes = bytes + index + 'x' + '0';
|
|
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
|
|
};
|
|
|
|
|