39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { signingUtils } from '@0x/contracts-test-utils';
 | 
						|
import { SignatureType, SignedZeroExTransaction } from '@0x/types';
 | 
						|
import { BigNumber } from '@0x/utils';
 | 
						|
import * as ethUtil from 'ethereumjs-util';
 | 
						|
 | 
						|
import { hashUtils, SignedCoordinatorApproval } from './index';
 | 
						|
 | 
						|
export class ApprovalFactory {
 | 
						|
    private readonly _privateKey: Buffer;
 | 
						|
    private readonly _verifyingContractAddress: string;
 | 
						|
 | 
						|
    constructor(privateKey: Buffer, verifyingContractAddress: string) {
 | 
						|
        this._privateKey = privateKey;
 | 
						|
        this._verifyingContractAddress = verifyingContractAddress;
 | 
						|
    }
 | 
						|
 | 
						|
    public newSignedApproval(
 | 
						|
        transaction: SignedZeroExTransaction,
 | 
						|
        txOrigin: string,
 | 
						|
        approvalExpirationTimeSeconds: BigNumber,
 | 
						|
        signatureType: SignatureType = SignatureType.EthSign,
 | 
						|
    ): SignedCoordinatorApproval {
 | 
						|
        const approvalHashBuff = hashUtils.getApprovalHashBuffer(
 | 
						|
            transaction,
 | 
						|
            this._verifyingContractAddress,
 | 
						|
            txOrigin,
 | 
						|
            approvalExpirationTimeSeconds,
 | 
						|
        );
 | 
						|
        const signatureBuff = signingUtils.signMessage(approvalHashBuff, this._privateKey, signatureType);
 | 
						|
        const signedApproval = {
 | 
						|
            txOrigin,
 | 
						|
            transaction,
 | 
						|
            approvalExpirationTimeSeconds,
 | 
						|
            signature: ethUtil.addHexPrefix(signatureBuff.toString('hex')),
 | 
						|
        };
 | 
						|
        return signedApproval;
 | 
						|
    }
 | 
						|
}
 |