1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
};
|