Fix comments, styling, and optimize hashOrder

This commit is contained in:
Amir Bandeali
2018-07-29 21:47:21 -07:00
parent 8199e87943
commit 3d6cf50364
3 changed files with 33 additions and 25 deletions

View File

@@ -123,10 +123,10 @@ contract MixinTransactions is
bytes32 dataHash = keccak256(data); bytes32 dataHash = keccak256(data);
// Assembly for more efficiently computing: // Assembly for more efficiently computing:
// keccak256(abi.encode( // keccak256(abi.encodePacked(
// EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH, // EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH,
// salt, // salt,
// signerAddress, // bytes32(signerAddress),
// keccak256(data) // keccak256(data)
// )); // ));

View File

@@ -30,7 +30,7 @@ contract LibEIP712 {
string constant internal EIP712_DOMAIN_VERSION = "2"; string constant internal EIP712_DOMAIN_VERSION = "2";
// Hash of the EIP712 Domain Separator Schema // Hash of the EIP712 Domain Separator Schema
bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked( bytes32 constant internal EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(
"EIP712Domain(", "EIP712Domain(",
"string name,", "string name,",
"string version,", "string version,",
@@ -45,11 +45,11 @@ contract LibEIP712 {
constructor () constructor ()
public public
{ {
EIP712_DOMAIN_HASH = keccak256(abi.encode( EIP712_DOMAIN_HASH = keccak256(abi.encodePacked(
EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH, EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,
keccak256(bytes(EIP712_DOMAIN_NAME)), keccak256(bytes(EIP712_DOMAIN_NAME)),
keccak256(bytes(EIP712_DOMAIN_VERSION)), keccak256(bytes(EIP712_DOMAIN_VERSION)),
address(this) bytes32(address(this))
)); ));
} }
@@ -59,8 +59,13 @@ contract LibEIP712 {
function hashEIP712Message(bytes32 hashStruct) function hashEIP712Message(bytes32 hashStruct)
internal internal
view view
returns (bytes32) returns (bytes32 result)
{ {
return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct)); result = keccak256(abi.encodePacked(
EIP191_HEADER,
EIP712_DOMAIN_HASH,
hashStruct
));
return result;
} }
} }

View File

@@ -103,11 +103,12 @@ contract LibOrder is
bytes32 takerAssetDataHash = keccak256(order.takerAssetData); bytes32 takerAssetDataHash = keccak256(order.takerAssetData);
// Assembly for more efficiently computing: // Assembly for more efficiently computing:
// keccak256(abi.encode( // keccak256(abi.encodePacked(
// order.makerAddress, // EIP712_ORDER_SCHEMA_HASH,
// order.takerAddress, // bytes32(order.makerAddress),
// order.feeRecipientAddress, // bytes32(order.takerAddress),
// order.senderAddress, // bytes32(order.feeRecipientAddress),
// bytes32(order.senderAddress),
// order.makerAssetAmount, // order.makerAssetAmount,
// order.takerAssetAmount, // order.takerAssetAmount,
// order.makerFee, // order.makerFee,
@@ -119,24 +120,26 @@ contract LibOrder is
// )); // ));
assembly { assembly {
// Calculate memory addresses that will be swapped out before hashing
let pos1 := sub(order, 32)
let pos2 := add(order, 320)
let pos3 := add(order, 352)
// Backup // Backup
// solhint-disable-next-line space-after-comma let temp1 := mload(pos1)
let temp1 := mload(sub(order, 32)) let temp2 := mload(pos2)
let temp2 := mload(add(order, 320)) let temp3 := mload(pos3)
let temp3 := mload(add(order, 352))
// Hash in place // Hash in place
// solhint-disable-next-line space-after-comma mstore(pos1, schemaHash)
mstore(sub(order, 32), schemaHash) mstore(pos2, makerAssetDataHash)
mstore(add(order, 320), makerAssetDataHash) mstore(pos3, takerAssetDataHash)
mstore(add(order, 352), takerAssetDataHash) result := keccak256(pos1, 416)
result := keccak256(sub(order, 32), 416)
// Restore // Restore
// solhint-disable-next-line space-after-comma mstore(pos1, temp1)
mstore(sub(order, 32), temp1) mstore(pos2, temp2)
mstore(add(order, 320), temp2) mstore(pos3, temp3)
mstore(add(order, 352), temp3)
} }
return result; return result;
} }