aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/test/utils/transaction_factory.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts/test/utils/transaction_factory.ts')
-rw-r--r--packages/contracts/test/utils/transaction_factory.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/packages/contracts/test/utils/transaction_factory.ts b/packages/contracts/test/utils/transaction_factory.ts
new file mode 100644
index 000000000..348c0715d
--- /dev/null
+++ b/packages/contracts/test/utils/transaction_factory.ts
@@ -0,0 +1,47 @@
+import { EIP712Schema, EIP712Types, EIP712Utils, generatePseudoRandomSalt } from '@0xproject/order-utils';
+import { SignatureType } from '@0xproject/types';
+import * as ethUtil from 'ethereumjs-util';
+
+import { signingUtils } from './signing_utils';
+import { SignedTransaction } from './types';
+
+const EIP712_ZEROEX_TRANSACTION_SCHEMA: EIP712Schema = {
+ name: 'ZeroExTransaction',
+ parameters: [
+ { name: 'salt', type: EIP712Types.Uint256 },
+ { name: 'signerAddress', type: EIP712Types.Address },
+ { name: 'data', type: EIP712Types.Bytes },
+ ],
+};
+
+export class TransactionFactory {
+ private _signerBuff: Buffer;
+ private _exchangeAddress: string;
+ private _privateKey: Buffer;
+ constructor(privateKey: Buffer, exchangeAddress: string) {
+ this._privateKey = privateKey;
+ this._exchangeAddress = exchangeAddress;
+ this._signerBuff = ethUtil.privateToAddress(this._privateKey);
+ }
+ public newSignedTransaction(data: string, signatureType: SignatureType = SignatureType.EthSign): SignedTransaction {
+ const salt = generatePseudoRandomSalt();
+ const signerAddress = `0x${this._signerBuff.toString('hex')}`;
+ const executeTransactionData = {
+ salt,
+ signerAddress,
+ data,
+ };
+ const executeTransactionHashBuff = EIP712Utils.structHash(
+ EIP712_ZEROEX_TRANSACTION_SCHEMA,
+ executeTransactionData,
+ );
+ const txHash = EIP712Utils.createEIP712Message(executeTransactionHashBuff, this._exchangeAddress);
+ const signature = signingUtils.signMessage(txHash, this._privateKey, signatureType);
+ const signedTx = {
+ exchangeAddress: this._exchangeAddress,
+ signature: `0x${signature.toString('hex')}`,
+ ...executeTransactionData,
+ };
+ return signedTx;
+ }
+}