51 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import * as chai from 'chai';
 | 
						|
import { MethodAbi } from 'ethereum-types';
 | 
						|
import 'mocha';
 | 
						|
 | 
						|
import { AbiDecoder, AbiEncoder } from '../src';
 | 
						|
 | 
						|
import { chaiSetup } from './utils/chai_setup';
 | 
						|
 | 
						|
chaiSetup.configure();
 | 
						|
const expect = chai.expect;
 | 
						|
 | 
						|
describe('AbiDecoder', () => {
 | 
						|
    it('should successfully add a new ABI and decode calldata for it', async () => {
 | 
						|
        // Add new ABI
 | 
						|
        const abi: MethodAbi = {
 | 
						|
            name: 'foobar',
 | 
						|
            type: 'function',
 | 
						|
            inputs: [
 | 
						|
                {
 | 
						|
                    name: 'testAddress',
 | 
						|
                    type: 'address',
 | 
						|
                },
 | 
						|
            ],
 | 
						|
            outputs: [
 | 
						|
                {
 | 
						|
                    name: 'butter',
 | 
						|
                    type: 'string',
 | 
						|
                },
 | 
						|
            ],
 | 
						|
            constant: false,
 | 
						|
            payable: false,
 | 
						|
            stateMutability: 'pure',
 | 
						|
        };
 | 
						|
        const contractName = 'newContract';
 | 
						|
        const testAddress = '0x0001020304050607080900010203040506070809';
 | 
						|
        const abiDecoder = new AbiDecoder([]);
 | 
						|
        abiDecoder.addABI([abi], contractName);
 | 
						|
        // Create some tx data
 | 
						|
        const foobarEncoder = new AbiEncoder.Method(abi);
 | 
						|
        const foobarSignature = foobarEncoder.getSignature();
 | 
						|
        const foobarTxData = foobarEncoder.encode([testAddress]);
 | 
						|
        // Decode tx data using contract name
 | 
						|
        const decodedTxData = abiDecoder.decodeCalldataOrThrow(foobarTxData, contractName);
 | 
						|
        const expectedFunctionName = abi.name;
 | 
						|
        const expectedFunctionArguments = { testAddress };
 | 
						|
        expect(decodedTxData.functionName).to.be.equal(expectedFunctionName);
 | 
						|
        expect(decodedTxData.functionSignature).to.be.equal(foobarSignature);
 | 
						|
        expect(decodedTxData.functionArguments).to.be.deep.equal(expectedFunctionArguments);
 | 
						|
    });
 | 
						|
});
 |