aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarek Kotewicz <marek.kotewicz@gmail.com>2015-01-31 22:48:49 +0800
committerMarek Kotewicz <marek.kotewicz@gmail.com>2015-01-31 22:48:49 +0800
commit589c4fb30f2e68972b898c5ce084cda5b0831266 (patch)
tree3e030e53f0d509f1220788afa49446fd19a6bd95 /lib
parentb20e972bec52781de806fb050e72d44b729c6541 (diff)
downloadgo-tangerine-589c4fb30f2e68972b898c5ce084cda5b0831266.tar
go-tangerine-589c4fb30f2e68972b898c5ce084cda5b0831266.tar.gz
go-tangerine-589c4fb30f2e68972b898c5ce084cda5b0831266.tar.bz2
go-tangerine-589c4fb30f2e68972b898c5ce084cda5b0831266.tar.lz
go-tangerine-589c4fb30f2e68972b898c5ce084cda5b0831266.tar.xz
go-tangerine-589c4fb30f2e68972b898c5ce084cda5b0831266.tar.zst
go-tangerine-589c4fb30f2e68972b898c5ce084cda5b0831266.zip
formatInput && formatOutput simplified
Diffstat (limited to 'lib')
-rw-r--r--lib/abi.js40
-rw-r--r--lib/event.js10
2 files changed, 26 insertions, 24 deletions
diff --git a/lib/abi.js b/lib/abi.js
index 8121c1a05..ecff1e5d6 100644
--- a/lib/abi.js
+++ b/lib/abi.js
@@ -27,6 +27,10 @@ var types = require('./types');
var c = require('./const');
var f = require('./formatters');
+var displayTypeError = function (type) {
+ console.error('parser does not support type: ' + type);
+};
+
/// This method should be called if we want to check if givent type is an array type
/// @returns true if it is, otherwise false
var arrayType = function (type) {
@@ -43,31 +47,31 @@ var dynamicTypeBytes = function (type, value) {
var inputTypes = types.inputTypes();
/// Formats input params to bytes
-/// @param abi contract method
+/// @param abi contract method inputs
/// @param array of params that will be formatted to bytes
/// @returns bytes representation of input params
-var toAbiInput = function (method, params) {
+var formatInput = function (inputs, params) {
var bytes = "";
var padding = c.ETH_PADDING * 2;
/// first we iterate in search for dynamic
- method.inputs.forEach(function (input, index) {
+ inputs.forEach(function (input, index) {
bytes += dynamicTypeBytes(input.type, params[index]);
});
- method.inputs.forEach(function (input, i) {
+ inputs.forEach(function (input, i) {
var typeMatch = false;
for (var j = 0; j < inputTypes.length && !typeMatch; j++) {
- typeMatch = inputTypes[j].type(method.inputs[i].type, params[i]);
+ typeMatch = inputTypes[j].type(inputs[i].type, params[i]);
}
if (!typeMatch) {
- console.error('input parser does not support type: ' + method.inputs[i].type);
+ displayTypeError(inputs[i].type);
}
var formatter = inputTypes[j - 1].format;
var toAppend = "";
- if (arrayType(method.inputs[i].type))
+ if (arrayType(inputs[i].type))
toAppend = params[i].reduce(function (acc, curr) {
return acc + formatter(curr);
}, "");
@@ -88,34 +92,34 @@ var dynamicBytesLength = function (type) {
var outputTypes = types.outputTypes();
/// Formats output bytes back to param list
-/// @param contract abi method
+/// @param contract abi method outputs
/// @param bytes representtion of output
/// @returns array of output params
-var fromAbiOutput = function (method, output) {
+var formatOutput = function (outs, output) {
output = output.slice(2);
var result = [];
var padding = c.ETH_PADDING * 2;
- var dynamicPartLength = method.outputs.reduce(function (acc, curr) {
+ var dynamicPartLength = outs.reduce(function (acc, curr) {
return acc + dynamicBytesLength(curr.type);
}, 0);
var dynamicPart = output.slice(0, dynamicPartLength);
output = output.slice(dynamicPartLength);
- method.outputs.forEach(function (out, i) {
+ outs.forEach(function (out, i) {
var typeMatch = false;
for (var j = 0; j < outputTypes.length && !typeMatch; j++) {
- typeMatch = outputTypes[j].type(method.outputs[i].type);
+ typeMatch = outputTypes[j].type(outs[i].type);
}
if (!typeMatch) {
- console.error('output parser does not support type: ' + method.outputs[i].type);
+ displayTypeError(outs[i].type);
}
var formatter = outputTypes[j - 1].format;
- if (arrayType(method.outputs[i].type)) {
+ if (arrayType(outs[i].type)) {
var size = f.formatOutputUInt(dynamicPart.slice(0, padding));
dynamicPart = dynamicPart.slice(padding);
var array = [];
@@ -125,7 +129,7 @@ var fromAbiOutput = function (method, output) {
}
result.push(array);
}
- else if (types.prefixedType('string')(method.outputs[i].type)) {
+ else if (types.prefixedType('string')(outs[i].type)) {
dynamicPart = dynamicPart.slice(padding);
result.push(formatter(output.slice(0, padding)));
output = output.slice(padding);
@@ -149,7 +153,7 @@ var inputParser = function (json) {
var impl = function () {
var params = Array.prototype.slice.call(arguments);
- return toAbiInput(method, params);
+ return formatInput(method.inputs, params);
};
if (parser[displayName] === undefined) {
@@ -172,7 +176,7 @@ var outputParser = function (json) {
var typeName = utils.extractTypeName(method.name);
var impl = function (output) {
- return fromAbiOutput(method, output);
+ return formatOutput(method.outputs, output);
};
if (parser[displayName] === undefined) {
@@ -194,6 +198,8 @@ var signatureFromAscii = function (name) {
module.exports = {
inputParser: inputParser,
outputParser: outputParser,
+ formatInput: formatInput,
+ formatOutput: formatOutput,
signatureFromAscii: signatureFromAscii
};
diff --git a/lib/event.js b/lib/event.js
index 43ea96d12..812ef9115 100644
--- a/lib/event.js
+++ b/lib/event.js
@@ -38,19 +38,15 @@ var inputWithName = function (inputs, name) {
var indexedParamsToTopics = function (event, indexed) {
// sort keys?
return Object.keys(indexed).map(function (key) {
- // TODO: simplify this!
- var parser = abi.inputParser([{
- name: 'test',
- inputs: [inputWithName(event.inputs, key)]
- }]);
+ var inputs = [inputWithName(event.inputs, key)];
var value = indexed[key];
if (value instanceof Array) {
return value.map(function (v) {
- return parser.test(v);
+ return abi.formatInput(inputs, [v]);
});
}
- return parser.test(value);
+ return abi.formatInput(inputs, [value]);
});
};