Add createCoordinatorApprovalTypedData method to order-utils and use in Coordinator tests
				
					
				
			This commit is contained in:
		@@ -1,5 +1,4 @@
 | 
			
		||||
import { eip712Utils, transactionHashUtils } from '@0x/order-utils';
 | 
			
		||||
import { constants } from '@0x/order-utils/lib/src/constants';
 | 
			
		||||
import { eip712Utils } from '@0x/order-utils';
 | 
			
		||||
import { SignedZeroExTransaction } from '@0x/types';
 | 
			
		||||
import { BigNumber, signTypedDataUtils } from '@0x/utils';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
@@ -11,25 +10,11 @@ export const hashUtils = {
 | 
			
		||||
        txOrigin: string,
 | 
			
		||||
        approvalExpirationTimeSeconds: BigNumber,
 | 
			
		||||
    ): Buffer {
 | 
			
		||||
        const domain = {
 | 
			
		||||
            name: constants.COORDINATOR_DOMAIN_NAME,
 | 
			
		||||
            version: constants.COORDINATOR_DOMAIN_VERSION,
 | 
			
		||||
        const typedData = eip712Utils.createCoordinatorApprovalTypedData(
 | 
			
		||||
            transaction,
 | 
			
		||||
            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,
 | 
			
		||||
            approvalExpirationTimeSeconds,
 | 
			
		||||
        );
 | 
			
		||||
        const hashBuffer = signTypedDataUtils.generateTypedDataHash(typedData);
 | 
			
		||||
        return hashBuffer;
 | 
			
		||||
 
 | 
			
		||||
@@ -6,11 +6,14 @@ import {
 | 
			
		||||
    EIP712TypedData,
 | 
			
		||||
    EIP712Types,
 | 
			
		||||
    Order,
 | 
			
		||||
    SignedZeroExTransaction,
 | 
			
		||||
    ZeroExTransaction,
 | 
			
		||||
} from '@0x/types';
 | 
			
		||||
import { BigNumber } from '@0x/utils';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
import { constants } from './constants';
 | 
			
		||||
import { transactionHashUtils } from './transaction_hash';
 | 
			
		||||
 | 
			
		||||
export const eip712Utils = {
 | 
			
		||||
    /**
 | 
			
		||||
@@ -69,7 +72,7 @@ export const eip712Utils = {
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates an ExecuteTransaction EIP712TypedData object for use with signTypedData and
 | 
			
		||||
     * 0x Exchange executeTransaction.
 | 
			
		||||
     * @param   ZeroExTransaction the 0x transaction
 | 
			
		||||
     * @param   zeroExTransaction the 0x transaction
 | 
			
		||||
     * @return  A typed data object
 | 
			
		||||
     */
 | 
			
		||||
    createZeroExTransactionTypedData: (zeroExTransaction: ZeroExTransaction): EIP712TypedData => {
 | 
			
		||||
@@ -89,4 +92,40 @@ export const eip712Utils = {
 | 
			
		||||
        );
 | 
			
		||||
        return typedData;
 | 
			
		||||
    },
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates an Coordiantor typedData EIP712TypedData object for use with the Coordinator extension contract
 | 
			
		||||
     * @param   zeroExTransaction A 0x transaction
 | 
			
		||||
     * @param   verifyingContractAddress The coordinator extension contract address that will be verifying the typedData
 | 
			
		||||
     * @param   txOrigin The desired `tx.origin` that should be able to submit an Ethereum txn involving this 0x transaction
 | 
			
		||||
     * @param   approvalExpirationTimeSeconds The approvals expiration time
 | 
			
		||||
     * @return  A typed data object
 | 
			
		||||
     */
 | 
			
		||||
    createCoordinatorApprovalTypedData: (
 | 
			
		||||
        transaction: SignedZeroExTransaction,
 | 
			
		||||
        verifyingContractAddress: string,
 | 
			
		||||
        txOrigin: string,
 | 
			
		||||
        approvalExpirationTimeSeconds: BigNumber,
 | 
			
		||||
    ): EIP712TypedData => {
 | 
			
		||||
        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,
 | 
			
		||||
        );
 | 
			
		||||
        return typedData;
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user