302 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import * as chai from 'chai';
 | 
						|
import * as _ from 'lodash';
 | 
						|
import 'mocha';
 | 
						|
 | 
						|
import { AbiEncoder, BigNumber } from '../../src/';
 | 
						|
import { chaiSetup } from '../utils/chai_setup';
 | 
						|
 | 
						|
import * as AbiSamples from './abi_samples/method_abis';
 | 
						|
 | 
						|
chaiSetup.configure();
 | 
						|
const expect = chai.expect;
 | 
						|
 | 
						|
describe('ABI Encoder: Method Encoding / Decoding', () => {
 | 
						|
    const defaultEncodingRules: AbiEncoder.EncodingRules = { shouldOptimize: false }; // optimizer is tested separately.
 | 
						|
    const defaultDecodingRules: AbiEncoder.DecodingRules = { shouldConvertStructsToObjects: false };
 | 
						|
    const runTest = <T>(
 | 
						|
        encoder: AbiEncoder.Method,
 | 
						|
        methodArgs: any,
 | 
						|
        expectedEncoding: string,
 | 
						|
        encodingRules: AbiEncoder.EncodingRules = defaultEncodingRules,
 | 
						|
        decodingRules: AbiEncoder.DecodingRules = defaultDecodingRules,
 | 
						|
    ) => {
 | 
						|
        // Validate encoding
 | 
						|
        // note - the encoder takes an array of parameters as input;
 | 
						|
        // if there is only 1 parameter then we wrap it in an array (`methodArgsAsAray`) to save code.
 | 
						|
        const methodArgsAsArray = (encoder.getDataItem().components as any).length > 1 ? methodArgs : [methodArgs];
 | 
						|
        const encoding = encoder.encode(methodArgsAsArray, encodingRules);
 | 
						|
        expect(encoding, 'testing `.encode`').to.be.equal(expectedEncoding);
 | 
						|
        // Validate decoding
 | 
						|
        const decodedValue = encoder.decode(encoding, decodingRules);
 | 
						|
        const decodedValueAsArray = _.isArray(decodedValue) ? decodedValue : _.toArray(decodedValue);
 | 
						|
        expect(decodedValueAsArray, 'testing `.decode`').to.be.deep.equal(methodArgsAsArray);
 | 
						|
        // Validate strict decoding
 | 
						|
        const strictDecodedValue = encoder.strictDecode<T>(encoding, decodingRules);
 | 
						|
        expect(strictDecodedValue, 'testing `.strictDecode`').to.be.deep.equal(methodArgs);
 | 
						|
    };
 | 
						|
    it('Types with default widths', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.typesWithDefaultWidthsAbi);
 | 
						|
        const methodArgs = [
 | 
						|
            new BigNumber(1),
 | 
						|
            new BigNumber(-1),
 | 
						|
            '0x56',
 | 
						|
            [new BigNumber(1)],
 | 
						|
            [new BigNumber(-1)],
 | 
						|
            ['0x56'],
 | 
						|
        ];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x09f2b0c30000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000015600000000000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Array of Static Tuples (Array has defined length)', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.arrayOfStaticTuplesWithDefinedLengthAbi);
 | 
						|
        let value = 0;
 | 
						|
        const methodArgs = [];
 | 
						|
        const methodArgsLength = 8;
 | 
						|
        for (let i = 0; i < methodArgsLength; ++i) {
 | 
						|
            methodArgs.push([new BigNumber(++value), new BigNumber(++value)]);
 | 
						|
        }
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x9eb20969000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000010';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Array of Static Tuples (Array has dynamic length)', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.arrayOfStaticTuplesWithDynamicLengthAbi);
 | 
						|
        let value = 0;
 | 
						|
        const methodArgs = [];
 | 
						|
        const methodArgsLength = 8;
 | 
						|
        for (let i = 0; i < methodArgsLength; ++i) {
 | 
						|
            methodArgs.push([new BigNumber(++value), new BigNumber(++value)]);
 | 
						|
        }
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x63275d6e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000010';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Array of Dynamic Tuples (Array has defined length)', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.arrayOfDynamicTuplesWithDefinedLengthAbi);
 | 
						|
        let value = 0;
 | 
						|
        const methodArgs = [];
 | 
						|
        const methodArgsLength = 8;
 | 
						|
        for (let i = 0; i < methodArgsLength; ++i) {
 | 
						|
            methodArgs.push([new BigNumber(++value), new BigNumber(++value).toString()]);
 | 
						|
        }
 | 
						|
        const expectedEncoding =
 | 
						|
            '0xdeedb00f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000013400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023134000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023136000000000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Array of Dynamic Tuples (Array has dynamic length)', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.arrayOfDynamicTuplesWithUndefinedLengthAbi);
 | 
						|
        let value = 0;
 | 
						|
        const methodArgs = [];
 | 
						|
        const methodArgsLength = 8;
 | 
						|
        for (let i = 0; i < methodArgsLength; ++i) {
 | 
						|
            methodArgs.push([new BigNumber(++value), new BigNumber(++value).toString()]);
 | 
						|
        }
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x60c847fb000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000013400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023134000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000023136000000000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Multidimensional Arrays / Static Members', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.multiDimensionalArraysStaticTypeAbi);
 | 
						|
        // Eight 3-dimensional arrays of uint8[2][2][2]
 | 
						|
        let value = 0;
 | 
						|
        const methodArgs = [];
 | 
						|
        const methodArgsLength = 8;
 | 
						|
        for (let i = 0; i < methodArgsLength; ++i) {
 | 
						|
            methodArgs.push([[[++value, ++value], [++value, ++value]], [[++value, ++value], [++value, ++value]]]);
 | 
						|
        }
 | 
						|
        // Validate calldata
 | 
						|
        const expectedEncoding =
 | 
						|
            '0xc2f47d6f00000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000d400000000000000000000000000000000000000000000000000000000000000e600000000000000000000000000000000000000000000000000000000000000039000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000230000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000025000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000027000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000029000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003100000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000033000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000035000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000038';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
 | 
						|
    it('Multidimensional Arrays / Dynamic Members', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.multiDimensionalArraysDynamicTypeAbi);
 | 
						|
        // Eight 3-dimensional arrays of string[2][2][2]
 | 
						|
        let value = 0;
 | 
						|
        const methodArgs = [];
 | 
						|
        const methodArgsLength = 4;
 | 
						|
        for (let i = 0; i < methodArgsLength; ++i) {
 | 
						|
            methodArgs.push([
 | 
						|
                [
 | 
						|
                    [new BigNumber(++value).toString(), new BigNumber(++value).toString()],
 | 
						|
                    [new BigNumber(++value).toString(), new BigNumber(++value).toString()],
 | 
						|
                ],
 | 
						|
                [
 | 
						|
                    [new BigNumber(++value).toString(), new BigNumber(++value).toString()],
 | 
						|
                    [new BigNumber(++value).toString(), new BigNumber(++value).toString()],
 | 
						|
                ],
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x81534ebd0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000009a00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000013300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000137000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000139000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002313000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000023131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000231320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002313300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023134000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000231350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002313600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000231370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002313800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000023139000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000023231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002323300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000232350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002323600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000232370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002323800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002323900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002333100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023332000000000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Fixed Length Array / Dynamic Members', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.staticArrayDynamicMembersAbi);
 | 
						|
        const methodArgs = ['Brave', 'New', 'World'];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x243a6e6e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005427261766500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e657700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005576f726c64000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Fixed Length Array / Dynamic Members', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.staticArrayDynamicMembersAbi);
 | 
						|
        const methodArgs = ['Brave', 'New', 'World'];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x243a6e6e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005427261766500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e657700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005576f726c64000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Unfixed Length Array / Dynamic Members ABI', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.dynamicArrayDynamicMembersAbi);
 | 
						|
        const methodArgs = ['Brave', 'New', 'World'];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x13e751a900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005427261766500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e657700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005576f726c64000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Unfixed Length Array / Static Members ABI', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.dynamicArrayStaticMembersAbi);
 | 
						|
        // tslint:disable-next-line custom-no-magic-numbers
 | 
						|
        const methodArgs = [127, 14, 54];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x4fc8a83300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000036';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Fixed Length Array / Static Members ABI', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.staticArrayAbi);
 | 
						|
        // tslint:disable-next-line custom-no-magic-numbers
 | 
						|
        const methodArgs = [127, 14, 54];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0xf68ade72000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000036';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Array ABI', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.stringAbi);
 | 
						|
        const methodArgs = ['five', 'six', 'seven'];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x13e751a900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000046669766500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000373697800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005736576656e000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Static Tuple', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.staticTupleAbi);
 | 
						|
        const methodArgs = [new BigNumber(5), new BigNumber(10), new BigNumber(15), false];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0xa9125e150000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Dynamic Tuple (Array input)', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.dynamicTupleAbi);
 | 
						|
        const methodArgs = [new BigNumber(5), 'five'];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x5b998f3500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000046669766500000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Dynamic Tuple (Object input)', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.dynamicTupleAbi);
 | 
						|
        const methodArgs = [new BigNumber(5), 'five'];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x5b998f3500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000046669766500000000000000000000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Large, Flat ABI', async () => {
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.largeFlatAbi);
 | 
						|
        const methodArgs = [
 | 
						|
            new BigNumber(256745454),
 | 
						|
            new BigNumber(-256745454),
 | 
						|
            new BigNumber(434244),
 | 
						|
            '0x43',
 | 
						|
            '0x0001020304050607080911121314151617181920212223242526272829303132',
 | 
						|
            '0x0001020304050607080911121314151617181920212223242526272829303132080911121314151617181920212223242526272829303132',
 | 
						|
            'Little peter piper piped a piping pepper pot',
 | 
						|
            '0xe41d2489571d322189246dafa5ebde1f4699f498',
 | 
						|
            true,
 | 
						|
        ];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x312d4d42000000000000000000000000000000000000000000000000000000000f4d9feefffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b26012000000000000000000000000000000000000000000000000000000000006a0444300000000000000000000000000000000000000000000000000000000000000000102030405060708091112131415161718192021222324252627282930313200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4980000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003800010203040506070809111213141516171819202122232425262728293031320809111213141516171819202122232425262728293031320000000000000000000000000000000000000000000000000000000000000000000000000000002c4c6974746c65207065746572207069706572207069706564206120706970696e672070657070657220706f740000000000000000000000000000000000000000';
 | 
						|
        runTest(method, methodArgs, expectedEncoding);
 | 
						|
    });
 | 
						|
    it('Large, Nested ABI', async () => {
 | 
						|
        // Construct Calldata
 | 
						|
        const method = new AbiEncoder.Method(AbiSamples.largeNestedAbi);
 | 
						|
        // tslint:disable custom-no-magic-numbers
 | 
						|
        const someStaticArray = [127, 14, 54];
 | 
						|
        // tslint:enable custom-no-magic-numbers
 | 
						|
        const someStaticArrayWithDynamicMembers = [
 | 
						|
            'the little piping piper piped a piping pipper papper',
 | 
						|
            'the kid knows how to write poems, what can I say -- I guess theres a lot I could say to try to fill this line with a lot of text.',
 | 
						|
        ];
 | 
						|
        const someDynamicArrayWithDynamicMembers = [
 | 
						|
            '0x38745637834987324827439287423897238947239847',
 | 
						|
            '0x7283472398237423984723984729847248927498748974284728947239487498749847874329423743492347329847239842374892374892374892347238947289478947489374289472894738942749823743298742389472389473289472389437249823749823742893472398',
 | 
						|
            '0x283473298473248923749238742398742398472894729843278942374982374892374892743982',
 | 
						|
        ];
 | 
						|
        const some2DArray = [
 | 
						|
            [
 | 
						|
                'some string',
 | 
						|
                'some another string',
 | 
						|
                'there are just too many stringsup in',
 | 
						|
                'here',
 | 
						|
                'yall ghonna make me lose my mind',
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'the little piping piper piped a piping pipper papper',
 | 
						|
                'the kid knows how to write poems, what can I say -- I guess theres a lot I could say to try to fill this line with a lot of text.',
 | 
						|
            ],
 | 
						|
            [],
 | 
						|
        ];
 | 
						|
        const someTuple = {
 | 
						|
            someUint32: new BigNumber(4037824789),
 | 
						|
            someStr:
 | 
						|
                'the kid knows how to write poems, what can I say -- I guess theres a lot I could say to try to fill this line with a lot of text.',
 | 
						|
        };
 | 
						|
        const someTupleWithDynamicTypes = {
 | 
						|
            someUint: new BigNumber(4024789),
 | 
						|
            someStr: 'akdhjasjkdhasjkldshdjahdkjsahdajksdhsajkdhsajkdhadjkashdjksadhajkdhsajkdhsadjk',
 | 
						|
            someBytes: '0x29384723894723843743289742389472398473289472348927489274894738427428947389facdea',
 | 
						|
            someAddress: '0xe41d2489571d322189246dafa5ebde1f4699f498',
 | 
						|
        };
 | 
						|
        const someTupleWithDynamicTypes2 = {
 | 
						|
            someUint: new BigNumber(9024789),
 | 
						|
            someStr: 'ksdhsajkdhsajkdhadjkashdjksadhajkdhsajkdhsadjkakdhjasjkdhasjkldshdjahdkjsahdaj',
 | 
						|
            someBytes: '0x29384723894398473289472348927489272384374328974238947274894738427428947389facde1',
 | 
						|
            someAddress: '0x746dafa5ebde1f4699f4981d3221892e41d24895',
 | 
						|
        };
 | 
						|
        const someTupleWithDynamicTypes3 = {
 | 
						|
            someUint: new BigNumber(1024789),
 | 
						|
            someStr: 'sdhsajkdhsajkdhadjkashdjakdhjasjkdhasjkldshdjahdkjsahdajkksadhajkdhsajkdhsadjk',
 | 
						|
            someBytes: '0x38947238437432829384729742389472398473289472348927489274894738427428947389facdef',
 | 
						|
            someAddress: '0x89571d322189e415ebde1f4699f498d24246dafa',
 | 
						|
        };
 | 
						|
        const someArrayOfTuplesWithDynamicTypes = [someTupleWithDynamicTypes2, someTupleWithDynamicTypes3];
 | 
						|
        const methodArgs = [
 | 
						|
            someStaticArray,
 | 
						|
            someStaticArrayWithDynamicMembers,
 | 
						|
            someDynamicArrayWithDynamicMembers,
 | 
						|
            some2DArray,
 | 
						|
            someTuple,
 | 
						|
            someTupleWithDynamicTypes,
 | 
						|
            someArrayOfTuplesWithDynamicTypes,
 | 
						|
        ];
 | 
						|
        const expectedEncoding =
 | 
						|
            '0x4b49031c000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000034746865206c6974746c6520706970696e67207069706572207069706564206120706970696e6720706970706572207061707065720000000000000000000000000000000000000000000000000000000000000000000000000000000000000081746865206b6964206b6e6f777320686f7720746f20777269746520706f656d732c20776861742063616e204920736179202d2d2049206775657373207468657265732061206c6f74204920636f756c642073617920746f2074727920746f2066696c6c2074686973206c696e6520776974682061206c6f74206f6620746578742e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000163874563783498732482743928742389723894723984700000000000000000000000000000000000000000000000000000000000000000000000000000000006e72834723982374239847239847298472489274987489742847289472394874987498478743294237434923473298472398423748923748923748923472389472894789474893742894728947389427498237432987423894723894732894723894372498237498237428934723980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027283473298473248923749238742398742398472894729843278942374982374892374892743982000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000b736f6d6520737472696e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013736f6d6520616e6f7468657220737472696e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024746865726520617265206a75737420746f6f206d616e7920737472696e6773757020696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046865726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002079616c6c2067686f6e6e61206d616b65206d65206c6f7365206d79206d696e640000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000034746865206c6974746c6520706970696e67207069706572207069706564206120706970696e6720706970706572207061707065720000000000000000000000000000000000000000000000000000000000000000000000000000000000000081746865206b6964206b6e6f777320686f7720746f20777269746520706f656d732c20776861742063616e204920736179202d2d2049206775657373207468657265732061206c6f74204920636f756c642073617920746f2074727920746f2066696c6c2074686973206c696e6520776974682061206c6f74206f6620746578742e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0ac511500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000081746865206b6964206b6e6f777320686f7720746f20777269746520706f656d732c20776861742063616e204920736179202d2d2049206775657373207468657265732061206c6f74204920636f756c642073617920746f2074727920746f2066696c6c2074686973206c696e6520776974682061206c6f74206f6620746578742e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d69d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498000000000000000000000000000000000000000000000000000000000000004e616b64686a61736a6b646861736a6b6c647368646a6168646b6a73616864616a6b73646873616a6b646873616a6b646861646a6b617368646a6b73616468616a6b646873616a6b64687361646a6b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002829384723894723843743289742389472398473289472348927489274894738427428947389facdea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000089b51500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000746dafa5ebde1f4699f4981d3221892e41d24895000000000000000000000000000000000000000000000000000000000000004e6b73646873616a6b646873616a6b646861646a6b617368646a6b73616468616a6b646873616a6b64687361646a6b616b64686a61736a6b646861736a6b6c647368646a6168646b6a73616864616a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002829384723894398473289472348927489272384374328974238947274894738427428947389facde100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa3150000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000089571d322189e415ebde1f4699f498d24246dafa000000000000000000000000000000000000000000000000000000000000004e73646873616a6b646873616a6b646861646a6b617368646a616b64686a61736a6b646861736a6b6c647368646a6168646b6a73616864616a6b6b73616468616a6b646873616a6b64687361646a6b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002838947238437432829384729742389472398473289472348927489274894738427428947389facdef000000000000000000000000000000000000000000000000';
 | 
						|
        const customDecodingRules = { shouldConvertStructsToObjects: true }; // custom to improve readability
 | 
						|
        runTest(method, methodArgs, expectedEncoding, defaultEncodingRules, customDecodingRules);
 | 
						|
    });
 | 
						|
    it('Should throw if decoding calldata where selector does not match the method', async () => {
 | 
						|
        const method = AbiEncoder.createMethod('foobar');
 | 
						|
        const methodSelector = method.getSelector();
 | 
						|
        const badMethodSelector = '0x01020304';
 | 
						|
        expect(() => method.decode(badMethodSelector)).to.throw(
 | 
						|
            `Tried to decode calldata, but it was missing the function selector. Expected prefix '${methodSelector}'. Got '${badMethodSelector}'.`,
 | 
						|
        );
 | 
						|
    });
 | 
						|
    it('Should throw if strict decoding calldata where selector does not match the method', async () => {
 | 
						|
        const method = AbiEncoder.createMethod('foobar');
 | 
						|
        const methodSelector = method.getSelector();
 | 
						|
        const badMethodSelector = '0x01020304';
 | 
						|
        expect(() => method.strictDecode<void>(badMethodSelector)).to.throw(
 | 
						|
            `Tried to decode calldata, but it was missing the function selector. Expected prefix '${methodSelector}'. Got '${badMethodSelector}'.`,
 | 
						|
        );
 | 
						|
    });
 | 
						|
});
 |