Merge pull request #749 from 0xProject/feature/contracts/transactionHashAsm

Converted `hashZeroExTransaction` to assembly. Saves 1k gas
This commit is contained in:
Amir Bandeali
2018-06-22 16:57:50 -07:00
committed by GitHub

View File

@@ -51,17 +51,27 @@ contract MixinTransactions is
/// @param signerAddress Address of transaction signer. /// @param signerAddress Address of transaction signer.
/// @param data AbiV2 encoded calldata. /// @param data AbiV2 encoded calldata.
/// @return EIP712 hash of the Transaction. /// @return EIP712 hash of the Transaction.
function hashZeroExTransaction(uint256 salt, address signerAddress, bytes data) function hashZeroExTransaction(
uint256 salt,
address signerAddress,
bytes memory data
)
internal internal
pure pure
returns (bytes32) returns (bytes32 result)
{ {
return keccak256(abi.encode( bytes32 schemaHash = EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH;
EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH, bytes32 dataHash = keccak256(data);
salt, assembly {
signerAddress, let memPtr := mload(64)
keccak256(data) mstore(memPtr, schemaHash)
)); mstore(add(memPtr, 32), salt)
mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff))
mstore(add(memPtr, 96), dataHash)
result := keccak256(memPtr, 128)
}
return result;
} }
/// @dev Executes an exchange method call in the context of signer. /// @dev Executes an exchange method call in the context of signer.