diff options
author | Jacob Evans <dekz@dekz.net> | 2018-06-20 08:54:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-20 08:54:51 +0800 |
commit | 096eaa20d785baee07b06b3f0848797e470fbda0 (patch) | |
tree | 05b6186897648717b97d630ffc9da0688e64544c /packages/contracts/src/utils | |
parent | be17308e507019e7c04a8a32e9aecf667de7aa2c (diff) | |
parent | 512bd84cc2478267eb359f340cdde8a110c61572 (diff) | |
download | dexon-sol-tools-096eaa20d785baee07b06b3f0848797e470fbda0.tar dexon-sol-tools-096eaa20d785baee07b06b3f0848797e470fbda0.tar.gz dexon-sol-tools-096eaa20d785baee07b06b3f0848797e470fbda0.tar.bz2 dexon-sol-tools-096eaa20d785baee07b06b3f0848797e470fbda0.tar.lz dexon-sol-tools-096eaa20d785baee07b06b3f0848797e470fbda0.tar.xz dexon-sol-tools-096eaa20d785baee07b06b3f0848797e470fbda0.tar.zst dexon-sol-tools-096eaa20d785baee07b06b3f0848797e470fbda0.zip |
Merge pull request #637 from 0xProject/bug/contracts/eip712-191-prefix
Add missing EIP191 prefix for EIP712 and Execute Transaction
Diffstat (limited to 'packages/contracts/src/utils')
-rw-r--r-- | packages/contracts/src/utils/order_factory.ts | 2 | ||||
-rw-r--r-- | packages/contracts/src/utils/transaction_factory.ts | 27 |
2 files changed, 23 insertions, 6 deletions
diff --git a/packages/contracts/src/utils/order_factory.ts b/packages/contracts/src/utils/order_factory.ts index 6e4c9a883..009dbc396 100644 --- a/packages/contracts/src/utils/order_factory.ts +++ b/packages/contracts/src/utils/order_factory.ts @@ -26,7 +26,7 @@ export class OrderFactory { ...this._defaultOrderParams, ...customOrderParams, } as any) as Order; - const orderHashBuff = orderHashUtils.getOrderHashBuff(order); + const orderHashBuff = orderHashUtils.getOrderHashBuffer(order); const signature = signingUtils.signMessage(orderHashBuff, this._privateKey, signatureType); const signedOrder = { ...order, diff --git a/packages/contracts/src/utils/transaction_factory.ts b/packages/contracts/src/utils/transaction_factory.ts index a060263b1..19ef4e1bf 100644 --- a/packages/contracts/src/utils/transaction_factory.ts +++ b/packages/contracts/src/utils/transaction_factory.ts @@ -1,10 +1,19 @@ -import { crypto, generatePseudoRandomSalt } from '@0xproject/order-utils'; +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: 'signer', type: EIP712Types.Address }, + { name: 'data', type: EIP712Types.Bytes }, + ], +}; + export class TransactionFactory { private _signerBuff: Buffer; private _exchangeAddress: string; @@ -16,14 +25,22 @@ export class TransactionFactory { } public newSignedTransaction(data: string, signatureType: SignatureType = SignatureType.EthSign): SignedTransaction { const salt = generatePseudoRandomSalt(); - const txHash = crypto.solSHA3([this._exchangeAddress, this._signerBuff, salt, ethUtil.toBuffer(data)]); + const signer = `0x${this._signerBuff.toString('hex')}`; + const executeTransactionData = { + salt, + signer, + 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, - salt, - signer: `0x${this._signerBuff.toString('hex')}`, - data, signature: `0x${signature.toString('hex')}`, + ...executeTransactionData, }; return signedTx; } |