aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/src/utils/transaction_factory.ts
diff options
context:
space:
mode:
authorAmir Bandeali <abandeali1@gmail.com>2018-04-25 02:24:55 +0800
committerAmir Bandeali <abandeali1@gmail.com>2018-04-27 01:33:37 +0800
commit0e0a46f373e076843fd4118cdafb325fb754141a (patch)
tree65c012961c6fa72dd258a2e0e0e671a0a6dc64a6 /packages/contracts/src/utils/transaction_factory.ts
parent732202fe8e4f3eb1847515a0c3f8f2d068d35baf (diff)
downloaddexon-0x-contracts-0e0a46f373e076843fd4118cdafb325fb754141a.tar
dexon-0x-contracts-0e0a46f373e076843fd4118cdafb325fb754141a.tar.gz
dexon-0x-contracts-0e0a46f373e076843fd4118cdafb325fb754141a.tar.bz2
dexon-0x-contracts-0e0a46f373e076843fd4118cdafb325fb754141a.tar.lz
dexon-0x-contracts-0e0a46f373e076843fd4118cdafb325fb754141a.tar.xz
dexon-0x-contracts-0e0a46f373e076843fd4118cdafb325fb754141a.tar.zst
dexon-0x-contracts-0e0a46f373e076843fd4118cdafb325fb754141a.zip
Update tests and utils
Diffstat (limited to 'packages/contracts/src/utils/transaction_factory.ts')
-rw-r--r--packages/contracts/src/utils/transaction_factory.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/packages/contracts/src/utils/transaction_factory.ts b/packages/contracts/src/utils/transaction_factory.ts
new file mode 100644
index 000000000..3a4f48330
--- /dev/null
+++ b/packages/contracts/src/utils/transaction_factory.ts
@@ -0,0 +1,35 @@
+import { ZeroEx } from '0x.js';
+import { BigNumber } from '@0xproject/utils';
+import * as ethUtil from 'ethereumjs-util';
+
+import { crypto } from './crypto';
+import { signingUtils } from './signing_utils';
+import { SignatureType, SignedTransaction } from './types';
+
+export class TransactionFactory {
+ private _signer: string;
+ private _exchangeAddress: string;
+ private _privateKey: Buffer;
+ constructor(privateKey: Buffer, exchangeAddress: string) {
+ this._privateKey = privateKey;
+ this._exchangeAddress = exchangeAddress;
+ const signerBuff = ethUtil.privateToAddress(this._privateKey);
+ this._signer = `0x${signerBuff.toString('hex')}`;
+ }
+ public newSignedTransaction(
+ data: string,
+ signatureType: SignatureType = SignatureType.Ecrecover,
+ ): SignedTransaction {
+ const salt = ZeroEx.generatePseudoRandomSalt();
+ const txHash = crypto.solSHA3([this._exchangeAddress, salt, ethUtil.toBuffer(data)]);
+ const signature = signingUtils.signMessage(txHash, this._privateKey, signatureType);
+ const signedTx = {
+ exchangeAddress: this._exchangeAddress,
+ salt,
+ signer: this._signer,
+ data,
+ signature: `0x${signature.toString('hex')}`,
+ };
+ return signedTx;
+ }
+}