diff options
author | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-01-31 22:48:49 +0800 |
---|---|---|
committer | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-01-31 22:48:49 +0800 |
commit | 589c4fb30f2e68972b898c5ce084cda5b0831266 (patch) | |
tree | 3e030e53f0d509f1220788afa49446fd19a6bd95 /lib | |
parent | b20e972bec52781de806fb050e72d44b729c6541 (diff) | |
download | go-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.js | 40 | ||||
-rw-r--r-- | lib/event.js | 10 |
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]); }); }; |