UNPKG

1.46 kBJavaScriptView Raw
1/*
2 @see https://solidity.readthedocs.io/en/v0.5.13/abi-spec.html
3 @see https://solidity.readthedocs.io/en/v0.5.13/abi-spec.html#encoding-of-indexed-event-parameters
4 */
5
6const { assert } = require('../util');
7
8const BaseCoder = require('./BaseCoder');
9const NullCoder = require('./NullCoder');
10const AddressCoder = require('./AddressCoder');
11const IntegerCoder = require('./IntegerCoder');
12const BoolCoder = require('./BoolCoder');
13const BytesCoder = require('./BytesCoder');
14const StringCoder = require('./StringCoder');
15const TupleCoder = require('./TupleCoder');
16const ArrayCoder = require('./ArrayCoder');
17
18/**
19 * Get coder by abi component.
20 *
21 * @param component {object}
22 * @param component.type {string}
23 * @param [component.name] {string}
24 * @param [component.components] {array} - For TupleCoder
25 * @return {BaseCoder}
26 */
27function abiCoder(component) {
28 // must parse ArrayCoder first, others sorted by probability
29 const coder = ArrayCoder.from(component, abiCoder) // recursion
30 || TupleCoder.from(component, abiCoder) // recursion
31 || AddressCoder.from(component)
32 || IntegerCoder.from(component)
33 || StringCoder.from(component)
34 || BytesCoder.from(component)
35 || BoolCoder.from(component)
36 || NullCoder.from(component);
37
38 assert(coder instanceof BaseCoder, {
39 message: 'can not found matched coder',
40 component,
41 });
42
43 return coder;
44}
45
46module.exports = abiCoder;