48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { constants, eip712Utils, transactionHashUtils } from '@0x/order-utils';
 | 
						|
import { SignedZeroExTransaction } from '@0x/types';
 | 
						|
import { BigNumber, signTypedDataUtils } from '@0x/utils';
 | 
						|
import * as _ from 'lodash';
 | 
						|
 | 
						|
export const hashUtils = {
 | 
						|
    getApprovalHashBuffer(
 | 
						|
        transaction: SignedZeroExTransaction,
 | 
						|
        verifyingContractAddress: string,
 | 
						|
        txOrigin: string,
 | 
						|
        approvalExpirationTimeSeconds: BigNumber,
 | 
						|
    ): Buffer {
 | 
						|
        const domain = {
 | 
						|
            name: constants.COORDINATOR_DOMAIN_NAME,
 | 
						|
            version: constants.COORDINATOR_DOMAIN_VERSION,
 | 
						|
            verifyingContractAddress,
 | 
						|
        };
 | 
						|
        const transactionHash = transactionHashUtils.getTransactionHashHex(transaction);
 | 
						|
        const approval = {
 | 
						|
            txOrigin,
 | 
						|
            transactionHash,
 | 
						|
            transactionSignature: transaction.signature,
 | 
						|
            approvalExpirationTimeSeconds: approvalExpirationTimeSeconds.toString(),
 | 
						|
        };
 | 
						|
        const typedData = eip712Utils.createTypedData(
 | 
						|
            constants.COORDINATOR_APPROVAL_SCHEMA.name,
 | 
						|
            {
 | 
						|
                CoordinatorApproval: constants.COORDINATOR_APPROVAL_SCHEMA.parameters,
 | 
						|
            },
 | 
						|
            approval,
 | 
						|
            domain,
 | 
						|
        );
 | 
						|
        const hashBuffer = signTypedDataUtils.generateTypedDataHash(typedData);
 | 
						|
        return hashBuffer;
 | 
						|
    },
 | 
						|
    getApprovalHashHex(
 | 
						|
        transaction: SignedZeroExTransaction,
 | 
						|
        verifyingContractAddress: string,
 | 
						|
        txOrigin: string,
 | 
						|
        approvalExpirationTimeSeconds: BigNumber,
 | 
						|
    ): string {
 | 
						|
        const hashHex = `0x${hashUtils
 | 
						|
            .getApprovalHashBuffer(transaction, verifyingContractAddress, txOrigin, approvalExpirationTimeSeconds)
 | 
						|
            .toString('hex')}`;
 | 
						|
        return hashHex;
 | 
						|
    },
 | 
						|
};
 |