57 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { ZeroExTransaction } from '@0x/types';
 | 
						|
import { BigNumber } from '@0x/utils';
 | 
						|
import * as chai from 'chai';
 | 
						|
import 'mocha';
 | 
						|
 | 
						|
import { transactionHashUtils } from '../src';
 | 
						|
 | 
						|
import { constants } from '../src/constants';
 | 
						|
 | 
						|
import { chaiSetup } from './utils/chai_setup';
 | 
						|
 | 
						|
chaiSetup.configure();
 | 
						|
const expect = chai.expect;
 | 
						|
 | 
						|
describe('0x transaction hashing', () => {
 | 
						|
    describe('#getTransactionHashHex', () => {
 | 
						|
        const expectedTransactionHash = '0x82c9bb2dcac4f868ec7a15c20ff6175cfc384c20ae6a872aa0342a840f108c2b';
 | 
						|
        const fakeVerifyingContractAddress = '0x5e72914535f202659083db3a02c984188fa26e9f';
 | 
						|
        const transaction: ZeroExTransaction = {
 | 
						|
            verifyingContractAddress: fakeVerifyingContractAddress,
 | 
						|
            signerAddress: constants.NULL_ADDRESS,
 | 
						|
            salt: new BigNumber(0),
 | 
						|
            data: constants.NULL_BYTES,
 | 
						|
        };
 | 
						|
        it('calculates the transaction hash', async () => {
 | 
						|
            const transactionHash = transactionHashUtils.getTransactionHashHex(transaction);
 | 
						|
            expect(transactionHash).to.be.equal(expectedTransactionHash);
 | 
						|
        });
 | 
						|
        it('calculates the transaction hash if amounts are strings', async () => {
 | 
						|
            // It's common for developers using javascript to provide the amounts
 | 
						|
            // as strings. Since we eventually toString() the BigNumber
 | 
						|
            // before encoding we should result in the same orderHash in this scenario
 | 
						|
            // tslint:disable-next-line:no-unnecessary-type-assertion
 | 
						|
            const transactionHash = transactionHashUtils.getTransactionHashHex({
 | 
						|
                ...transaction,
 | 
						|
                salt: '0',
 | 
						|
            } as any);
 | 
						|
            expect(transactionHash).to.be.equal(expectedTransactionHash);
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isValidTransactionHash', () => {
 | 
						|
        it('returns false if the value is not a hex string', () => {
 | 
						|
            const isValid = transactionHashUtils.isValidTransactionHash('not a hex');
 | 
						|
            expect(isValid).to.be.false();
 | 
						|
        });
 | 
						|
        it('returns false if the length is wrong', () => {
 | 
						|
            const isValid = transactionHashUtils.isValidTransactionHash('0xdeadbeef');
 | 
						|
            expect(isValid).to.be.false();
 | 
						|
        });
 | 
						|
        it('returns true if order hash is correct', () => {
 | 
						|
            const orderHashLength = 65;
 | 
						|
            const isValid = transactionHashUtils.isValidTransactionHash(`0x${Array(orderHashLength).join('0')}`);
 | 
						|
            expect(isValid).to.be.true();
 | 
						|
        });
 | 
						|
    });
 | 
						|
});
 |