Update order hash to match latest eip712
This commit is contained in:
committed by
Fabio Berger
parent
bc550c3265
commit
65676c22f9
@@ -21,19 +21,21 @@ pragma solidity ^0.4.24;
|
||||
contract LibOrder {
|
||||
|
||||
bytes32 constant ORDER_SCHEMA_HASH = keccak256(
|
||||
"address exchangeAddress",
|
||||
"address makerAddress",
|
||||
"address takerAddress",
|
||||
"address feeRecipientAddress",
|
||||
"address senderAddress",
|
||||
"uint256 makerAssetAmount",
|
||||
"uint256 takerAssetAmount",
|
||||
"uint256 makerFee",
|
||||
"uint256 takerFee",
|
||||
"uint256 expirationTimeSeconds",
|
||||
"uint256 salt",
|
||||
"bytes makerAssetData",
|
||||
"bytes takerAssetData"
|
||||
"Order(",
|
||||
"address exchangeAddress,",
|
||||
"address makerAddress,",
|
||||
"address takerAddress,",
|
||||
"address feeRecipientAddress,",
|
||||
"address senderAddress,",
|
||||
"uint256 makerAssetAmount,",
|
||||
"uint256 takerAssetAmount,",
|
||||
"uint256 makerFee,",
|
||||
"uint256 takerFee,",
|
||||
"uint256 expirationTimeSeconds,",
|
||||
"uint256 salt,",
|
||||
"bytes makerAssetData,",
|
||||
"bytes takerAssetData,",
|
||||
")"
|
||||
);
|
||||
|
||||
struct Order {
|
||||
@@ -84,8 +86,8 @@ contract LibOrder {
|
||||
order.takerFee,
|
||||
order.expirationTimeSeconds,
|
||||
order.salt,
|
||||
order.makerAssetData,
|
||||
order.takerAssetData
|
||||
keccak256(order.makerAssetData),
|
||||
keccak256(order.takerAssetData)
|
||||
)
|
||||
);
|
||||
return orderHash;
|
||||
|
||||
@@ -69,6 +69,14 @@ contract TestLibs is
|
||||
return orderHash;
|
||||
}
|
||||
|
||||
function publicGetOrderSchemaHash()
|
||||
public
|
||||
view
|
||||
returns (bytes32)
|
||||
{
|
||||
return ORDER_SCHEMA_HASH;
|
||||
}
|
||||
|
||||
function publicAddFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)
|
||||
public
|
||||
pure
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import { BigNumber } from '@0xproject/utils';
|
||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||
import ethUtil = require('ethereumjs-util');
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { crypto } from './crypto';
|
||||
import { CancelOrder, MatchOrder, OrderStruct, SignatureType, SignedOrder, UnsignedOrder } from './types';
|
||||
@@ -39,22 +37,31 @@ export const orderUtils = {
|
||||
};
|
||||
return orderStruct;
|
||||
},
|
||||
getOrderHashBuff(order: SignedOrder | UnsignedOrder): Buffer {
|
||||
getOrderSchemaHex(): string {
|
||||
const orderSchemaHashBuff = crypto.solSHA3([
|
||||
'address exchangeAddress',
|
||||
'address makerAddress',
|
||||
'address takerAddress',
|
||||
'address feeRecipientAddress',
|
||||
'address senderAddress',
|
||||
'uint256 makerAssetAmount',
|
||||
'uint256 takerAssetAmount',
|
||||
'uint256 makerFee',
|
||||
'uint256 takerFee',
|
||||
'uint256 expirationTimeSeconds',
|
||||
'uint256 salt',
|
||||
'bytes makerAssetData',
|
||||
'bytes takerAssetData',
|
||||
'Order(',
|
||||
'address exchangeAddress,',
|
||||
'address makerAddress,',
|
||||
'address takerAddress,',
|
||||
'address feeRecipientAddress,',
|
||||
'address senderAddress,',
|
||||
'uint256 makerAssetAmount,',
|
||||
'uint256 takerAssetAmount,',
|
||||
'uint256 makerFee,',
|
||||
'uint256 takerFee,',
|
||||
'uint256 expirationTimeSeconds,',
|
||||
'uint256 salt,',
|
||||
'bytes makerAssetData,',
|
||||
'bytes takerAssetData,',
|
||||
')',
|
||||
]);
|
||||
const schemaHashHex = `0x${orderSchemaHashBuff.toString('hex')}`;
|
||||
return schemaHashHex;
|
||||
},
|
||||
getOrderHashBuff(order: SignedOrder | UnsignedOrder): Buffer {
|
||||
const makerAssetDataHash = crypto.solSHA3([ethUtil.toBuffer(order.makerAssetData)]);
|
||||
const takerAssetDataHash = crypto.solSHA3([ethUtil.toBuffer(order.takerAssetData)]);
|
||||
|
||||
const orderParamsHashBuff = crypto.solSHA3([
|
||||
order.exchangeAddress,
|
||||
order.makerAddress,
|
||||
@@ -67,11 +74,11 @@ export const orderUtils = {
|
||||
order.takerFee,
|
||||
order.expirationTimeSeconds,
|
||||
order.salt,
|
||||
ethUtil.toBuffer(order.makerAssetData),
|
||||
ethUtil.toBuffer(order.takerAssetData),
|
||||
makerAssetDataHash,
|
||||
takerAssetDataHash,
|
||||
]);
|
||||
const orderSchemaHashHex = `0x${orderSchemaHashBuff.toString('hex')}`;
|
||||
const orderParamsHashHex = `0x${orderParamsHashBuff.toString('hex')}`;
|
||||
const orderSchemaHashHex = orderUtils.getOrderSchemaHex();
|
||||
const orderHashBuff = crypto.solSHA3([new BigNumber(orderSchemaHashHex), new BigNumber(orderParamsHashHex)]);
|
||||
return orderHashBuff;
|
||||
},
|
||||
|
||||
@@ -56,6 +56,12 @@ describe('Exchange libs', () => {
|
||||
});
|
||||
|
||||
describe('LibOrder', () => {
|
||||
describe('getOrderSchema', () => {
|
||||
it('should output the correct orderHash', async () => {
|
||||
const orderSchema = await libs.publicGetOrderSchemaHash.callAsync();
|
||||
expect(orderUtils.getOrderSchemaHex()).to.be.equal(orderSchema);
|
||||
});
|
||||
});
|
||||
describe('getOrderHash', () => {
|
||||
it('should output the correct orderHash', async () => {
|
||||
const orderHashHex = await libs.publicGetOrderHash.callAsync(signedOrder);
|
||||
|
||||
Reference in New Issue
Block a user