53 lines
1.9 KiB
TypeScript
53 lines
1.9 KiB
TypeScript
import { constants, eip712Utils, transactionHashUtils } from '@0x/order-utils';
|
|
import { SignedZeroExTransaction, ZeroExTransaction } 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: 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;
|
|
},
|
|
};
|