aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/src/utils/order_utils.ts
diff options
context:
space:
mode:
authorJacob Evans <jacob@dekz.net>2018-05-30 08:11:33 +0800
committerJacob Evans <jacob@dekz.net>2018-06-05 08:41:00 +0800
commit4670cc1a5f04d61045a82b4a3bbcf56e009afd56 (patch)
treec66321deb69c78a85f7a5c907fac62cc95eae14d /packages/contracts/src/utils/order_utils.ts
parent70858603ed37de24ae47978a191b3f188f450182 (diff)
downloaddexon-sol-tools-4670cc1a5f04d61045a82b4a3bbcf56e009afd56.tar
dexon-sol-tools-4670cc1a5f04d61045a82b4a3bbcf56e009afd56.tar.gz
dexon-sol-tools-4670cc1a5f04d61045a82b4a3bbcf56e009afd56.tar.bz2
dexon-sol-tools-4670cc1a5f04d61045a82b4a3bbcf56e009afd56.tar.lz
dexon-sol-tools-4670cc1a5f04d61045a82b4a3bbcf56e009afd56.tar.xz
dexon-sol-tools-4670cc1a5f04d61045a82b4a3bbcf56e009afd56.tar.zst
dexon-sol-tools-4670cc1a5f04d61045a82b4a3bbcf56e009afd56.zip
Add missing EIP191 prefix for EIP712
Diffstat (limited to 'packages/contracts/src/utils/order_utils.ts')
-rw-r--r--packages/contracts/src/utils/order_utils.ts56
1 files changed, 54 insertions, 2 deletions
diff --git a/packages/contracts/src/utils/order_utils.ts b/packages/contracts/src/utils/order_utils.ts
index 0d0329aa1..316350ffb 100644
--- a/packages/contracts/src/utils/order_utils.ts
+++ b/packages/contracts/src/utils/order_utils.ts
@@ -1,8 +1,29 @@
-import { Order, OrderWithoutExchangeAddress, SignedOrder } from '@0xproject/types';
+import { Order, OrderWithoutExchangeAddress, SignedOrder, UnsignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import ethUtil = require('ethereumjs-util');
+import * as _ from 'lodash';
-import { CancelOrder, MatchOrder } from './types';
+import { crypto } from './crypto';
+import { EIP712Utils } from './eip712_utils';
+import { CancelOrder, EIP712Schema, MatchOrder } from './types';
+
+const EIP712_ORDER_SCHEMA: EIP712Schema = {
+ name: 'Order',
+ parameters: [
+ { name: 'makerAddress', type: 'address' },
+ { name: 'takerAddress', type: 'address' },
+ { name: 'feeRecipientAddress', type: 'address' },
+ { name: 'senderAddress', type: 'address' },
+ { name: 'makerAssetAmount', type: 'uint256' },
+ { name: 'takerAssetAmount', type: 'uint256' },
+ { name: 'makerFee', type: 'uint256' },
+ { name: 'takerFee', type: 'uint256' },
+ { name: 'expirationTimeSeconds', type: 'uint256' },
+ { name: 'salt', type: 'uint256' },
+ { name: 'makerAssetData', type: 'bytes' },
+ { name: 'takerAssetData', type: 'bytes' },
+ ],
+};
export const orderUtils = {
createFill: (signedOrder: SignedOrder, takerAssetFillAmount?: BigNumber) => {
@@ -37,6 +58,37 @@ export const orderUtils = {
};
return orderStruct;
},
+ getOrderSchemaBuffer(): Buffer {
+ return EIP712Utils.compileSchema(EIP712_ORDER_SCHEMA);
+ },
+ getOrderHashBuffer(order: SignedOrder | UnsignedOrder): Buffer {
+ const makerAssetDataHash = crypto.solSHA3([ethUtil.toBuffer(order.makerAssetData)]);
+ const takerAssetDataHash = crypto.solSHA3([ethUtil.toBuffer(order.takerAssetData)]);
+
+ const orderParamsHashBuff = crypto.solSHA3([
+ orderUtils.getOrderSchemaBuffer(),
+ EIP712Utils.pad32Address(order.makerAddress),
+ EIP712Utils.pad32Address(order.takerAddress),
+ EIP712Utils.pad32Address(order.feeRecipientAddress),
+ EIP712Utils.pad32Address(order.senderAddress),
+ order.makerAssetAmount,
+ order.takerAssetAmount,
+ order.makerFee,
+ order.takerFee,
+ order.expirationTimeSeconds,
+ order.salt,
+ makerAssetDataHash,
+ takerAssetDataHash,
+ ]);
+ const orderParamsHashHex = `0x${orderParamsHashBuff.toString('hex')}`;
+ const orderHashBuff = EIP712Utils.createEIP712Message(orderParamsHashHex, order.exchangeAddress);
+ return orderHashBuff;
+ },
+ getOrderHashHex(order: SignedOrder | UnsignedOrder): string {
+ const orderHashBuff = orderUtils.getOrderHashBuffer(order);
+ const orderHashHex = `0x${orderHashBuff.toString('hex')}`;
+ return orderHashHex;
+ },
createMatchOrders(signedOrderLeft: SignedOrder, signedOrderRight: SignedOrder): MatchOrder {
const fill = {
left: orderUtils.getOrderWithoutExchangeAddress(signedOrderLeft),