temp
This commit is contained in:
@@ -99,8 +99,10 @@ contract LibOrder is
|
||||
returns (bytes32 result)
|
||||
{
|
||||
bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;
|
||||
bytes32 makerAssetDataHash = keccak256(order.makerAssetData);
|
||||
bytes32 takerAssetDataHash = keccak256(order.takerAssetData);
|
||||
bytes memory makerAssetData = order.makerAssetData;
|
||||
bytes memory takerAssetData = order.takerAssetData;
|
||||
bytes memory makerFeeAssetData = order.makerFeeAssetData;
|
||||
bytes memory takerFeeAssetData = order.takerFeeAssetData;
|
||||
|
||||
// Assembly for more efficiently computing:
|
||||
// keccak256(abi.encodePacked(
|
||||
@@ -124,22 +126,30 @@ contract LibOrder is
|
||||
let pos1 := sub(order, 32)
|
||||
let pos2 := add(order, 320)
|
||||
let pos3 := add(order, 352)
|
||||
let pos4 := add(order, 384)
|
||||
let pos5 := add(order, 416)
|
||||
|
||||
// Backup
|
||||
let temp1 := mload(pos1)
|
||||
let temp2 := mload(pos2)
|
||||
let temp3 := mload(pos3)
|
||||
let temp4 := mload(pos4)
|
||||
let temp5 := mload(pos5)
|
||||
|
||||
// Hash in place
|
||||
mstore(pos1, schemaHash)
|
||||
mstore(pos2, makerAssetDataHash)
|
||||
mstore(pos3, takerAssetDataHash)
|
||||
result := keccak256(pos1, 416)
|
||||
mstore(pos2, keccak256(add(makerAssetData, 32), mload(makerAssetData))) // store hash of makerAssetData
|
||||
mstore(pos3, keccak256(add(takerAssetData, 32), mload(takerAssetData))) // store hash of takerAssetData
|
||||
mstore(pos4, keccak256(add(makerFeeAssetData, 32), mload(makerFeeAssetData))) // store hash of makerFeeAssetData
|
||||
mstore(pos5, keccak256(add(takerFeeAssetData, 32), mload(takerFeeAssetData))) // store hash of takerFeeAssetData
|
||||
result := keccak256(pos1, 480)
|
||||
|
||||
// Restore
|
||||
mstore(pos1, temp1)
|
||||
mstore(pos2, temp2)
|
||||
mstore(pos3, temp3)
|
||||
mstore(pos4, temp4)
|
||||
mstore(pos5, temp5)
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@@ -63,6 +63,8 @@ describe('Exchange libs', () => {
|
||||
feeRecipientAddress: addressUtils.generatePseudoRandomAddress(),
|
||||
makerAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
|
||||
takerAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
|
||||
makerFeeAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
|
||||
takerFeeAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
|
||||
domain: {
|
||||
verifyingContractAddress: libs.address,
|
||||
chainId,
|
||||
|
Reference in New Issue
Block a user