aboutsummaryrefslogtreecommitdiffstats
path: root/packages/utils/test/transaction_decoder_test.ts
blob: 3845bb134c95324024777561b446247f8dd9684e (plain) (blame)
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
import * as chai from 'chai';
import { MethodAbi } from 'ethereum-types';
import 'mocha';

import { chaiSetup } from './utils/chai_setup';
import { AbiEncoder, TransactionDecoder } from '../src';

chaiSetup.configure();
const expect = chai.expect;

describe('TransactionDecoder', () => {
    it('should successfully add a new ABI and decode tx data for it', async () => {
        // Add new ABI
        const abi: MethodAbi = {
            name: 'foobar',
            type: 'function',
            inputs: [
                {
                    name: 'addr',
                    type: 'address',
                },
            ],
            outputs: [
                {
                    name: 'butter',
                    type: 'string',
                },
            ],
            constant: false,
            payable: false,
            stateMutability: 'pure',
        };
        const contractName = 'newContract';
        const contractAddress = '0x0001020304050607080900010203040506070809';
        const networkId = 1;
        const contractInfo = [
            {
                contractAddress,
                networkId,
            },
        ];
        const transactionDecoder = new TransactionDecoder();
        transactionDecoder.addABI([abi], contractName, contractInfo);
        // Create some tx data
        const foobarEncoder = new AbiEncoder.Method(abi);
        const foobarSignature = foobarEncoder.getSignature();
        const foobarTxData = foobarEncoder.encode([contractAddress]);
        // Decode tx data using contract name
        const decodedTxData = transactionDecoder.decode(foobarTxData, { contractName });
        const expectedFunctionName = abi.name;
        const expectedFunctionArguments = {
            addr: contractAddress,
        };
        expect(decodedTxData.functionName).to.be.equal(expectedFunctionName);
        expect(decodedTxData.functionSignature).to.be.equal(foobarSignature);
        expect(decodedTxData.functionArguments).to.be.deep.equal(expectedFunctionArguments);
        // Decode tx data using contract address
        const decodedTxDataDecodedWithAddress = transactionDecoder.decode(foobarTxData, { contractAddress });
        expect(decodedTxDataDecodedWithAddress).to.be.deep.equal(decodedTxData);
    });
});