Skip to content
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
4fb00ce
Reimplement ETHOrders logic
k06a Aug 18, 2025
d7a7932
Fix some bugs and improve docs
k06a Aug 18, 2025
c100474
Add support for Fusion and Fusion+
k06a Aug 18, 2025
09b075e
Refactor ETHOrders
k06a Aug 21, 2025
7f0c7f7
Introduce ETHOrderClonable
k06a Aug 21, 2025
e30f6e7
restrict transfer for ETHOrders erc20 tokens
SevenSwen Aug 26, 2025
cd98d34
fix
SevenSwen Aug 27, 2025
8e7dd5c
Extract Auction data out of ETHOrders
k06a Aug 28, 2025
643604f
Intro ChainablePostInteraction.sol
k06a Aug 28, 2025
2c39c6e
Fixes
k06a Aug 28, 2025
1e4c3aa
Merge branch 'feature/new-eth-orders' into fix/trasfer_restricted
k06a Aug 28, 2025
fcbdba7
Merge pull request #386 from 1inch/fix/trasfer_restricted
k06a Aug 28, 2025
8fdf860
Fix ETHOrdersClonable
k06a Aug 28, 2025
a87d8c0
Reimplement
k06a Sep 1, 2025
efdc36d
Remove fake ERC20 wrapper events
k06a Sep 1, 2025
b40033e
Remove unused immutables, imports, usings
k06a Sep 1, 2025
f6c79d3
Emit orderHash instead of makerOrderHash
k06a Sep 1, 2025
7188a8d
Make factory to deploy initial impl to store in in immutable
k06a Sep 1, 2025
c93beda
Let resolver to limit own reward for cancelling expired order
k06a Sep 1, 2025
83030e6
Make IMPLEMENTATION public
k06a Sep 1, 2025
c0c04de
Emit real orderHash instead of makerOrderHash at native order cancell…
k06a Sep 1, 2025
5f70d7f
Avoid block.basefee access in case of rewardLimit equal zero to suppo…
k06a Sep 1, 2025
8c43289
Introduce immutable cancellation delay for non zero resolver reward
k06a Sep 1, 2025
8f9f3b0
Separate events for user and resolver driven cancellation
k06a Sep 3, 2025
94e7192
Remove unused IERC20Metadata methods
k06a Sep 3, 2025
d7dd12c
Remove unused modifier
k06a Sep 4, 2025
6c6a5cc
Fix receiver validation in NativeOrderFactory
k06a Sep 4, 2025
8ce1665
Fix bug and EIP-712 name and version
k06a Sep 8, 2025
1cb74c8
fix onlyMaker modifier & predictDeterministicAddress
SevenSwen Sep 9, 2025
9dd2c40
Removed factory dependency from implementation
k06a Sep 10, 2025
e0c7637
fix native order tests
SevenSwen Sep 10, 2025
7795d6f
Merge pull request #387 from 1inch/test/new-eth-orders
SevenSwen Sep 10, 2025
5f064cd
revert ChainablePostInteraction
SevenSwen Sep 10, 2025
4dd4feb
deploy staging
SevenSwen Sep 8, 2025
2310de3
add impementation address log
SevenSwen Sep 8, 2025
fa5b663
skip NativeOrderFactory deploy and temporary skip verify
SevenSwen Sep 9, 2025
8714b6d
fix script
SevenSwen Sep 10, 2025
eff5fc2
Merge pull request #388 from 1inch/deploy/new-eth-orders
SevenSwen Sep 10, 2025
7e914b1
using makerTraits.isExpired
SevenSwen Sep 17, 2025
0c08cbd
change transfer to calls
SevenSwen Sep 18, 2025
30ef3d1
fix _CANCEL_GAS_LOWER_BOUND
SevenSwen Sep 18, 2025
2b33134
rescueFunds() onlyResolver => withdraw() onlyMaker
k06a Sep 19, 2025
24e3eb4
[L-01] change transfer to call
SevenSwen Sep 22, 2025
ca79bbd
remove duplicate import
SevenSwen Sep 22, 2025
69691dc
remove unused errors
SevenSwen Sep 22, 2025
f761112
move EIP712Alien from mocks to utils folder
SevenSwen Sep 22, 2025
503bbbb
fix test
SevenSwen Sep 22, 2025
dc00e4d
add missing tests for NativeOrder withdraw
SevenSwen Sep 23, 2025
d4a67ab
fix after review
SevenSwen Sep 24, 2025
9ac5bcb
fix typo
SevenSwen Sep 24, 2025
d37e0ad
Merge pull request #390 from 1inch/fix/new-eth-orders
SevenSwen Sep 24, 2025
393e601
fix typo
SevenSwen Sep 25, 2025
eeda080
remove unused library
SevenSwen Sep 25, 2025
a24e74d
remove redundant console.log from deploy script
SevenSwen Sep 25, 2025
b46cb03
Merge commit '4fcd53cfb11ebf5ac0c33f3ed083ce6213731bc2' into feature/…
SevenSwen Sep 26, 2025
7572b63
fix after merge
SevenSwen Sep 26, 2025
e9c8f39
Bump solidity-utils to support etherscan api v2 verification
zZoMROT Sep 26, 2025
3de3e16
Patch deploy script
zZoMROT Sep 26, 2025
891c905
Deploy NativeOrder extension on arbitrum
zZoMROT Sep 26, 2025
cf9aace
Deploy NativeOrder extension on avax
zZoMROT Sep 26, 2025
99f8f31
Deploy NativeOrder extension on base
zZoMROT Sep 26, 2025
07d41ae
Deploy NativeOrder extension on bsc
zZoMROT Sep 26, 2025
e725a64
Deploy NativeOrder extension on linea
zZoMROT Sep 26, 2025
2986cac
Deploy NativeOrder extension on mainnet
zZoMROT Sep 26, 2025
746069e
Deploy NativeOrder extension on matic
zZoMROT Sep 26, 2025
a12a1af
Deploy NativeOrder extension on optimistic
zZoMROT Sep 26, 2025
e208a70
Deploy NativeOrder extension on sonic
zZoMROT Sep 26, 2025
118286b
Deploy NativeOrder extension on unichain
zZoMROT Sep 26, 2025
ab319d7
Deploy NativeOrder extension on xdai
zZoMROT Sep 26, 2025
e4c14e1
Bump solc and zksync-verify versions
zZoMROT Sep 26, 2025
36c7c4a
Remove zksolc deps and bump hardhat-deploy dep
zZoMROT Sep 28, 2025
493cee1
Deploy NativeOrder extension on zksync
zZoMROT Sep 28, 2025
8e2835e
Merge pull request #395 from 1inch/deploy/native-order
galekseev Sep 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion contracts/OrderLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import "./interfaces/IAmountGetter.sol";
* @notice Calculates the hash of an order.
* @param order The order to be hashed.
* @param domainSeparator The domain separator to be used for the EIP-712 hashing.
* @return result The keccak256 hash of the order data.
* @return result The EIP-712 hash of the order data.
*/
function hash(IOrderMixin.Order calldata order, bytes32 domainSeparator) internal pure returns(bytes32 result) {
bytes32 typehash = _LIMIT_ORDER_TYPEHASH;
Expand All @@ -65,6 +65,28 @@ import "./interfaces/IAmountGetter.sol";
result = ECDSA.toTypedDataHash(domainSeparator, result);
}

/**
* @notice Calculates the hash of an order in memory.
* @param order The order to be hashed.
* @param domainSeparator The domain separator to be used for the EIP-712 hashing.
* @return result The EIP-712 hash of the order data.
*/
function hashMemory(IOrderMixin.Order memory order, bytes32 domainSeparator) internal pure returns(bytes32 result) {
bytes32 typehash = OrderLib._LIMIT_ORDER_TYPEHASH;
uint256 dataHashSize = OrderLib._DATA_HASH_SIZE;
assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
let ptr := sub(order, 0x20)
let backup := mload(ptr)
mstore(ptr, typehash)

// keccak256(abi.encode(OrderLib._LIMIT_ORDER_TYPEHASH, order))
result := keccak256(ptr, dataHashSize)

mstore(ptr, backup)
}
result = ECDSA.toTypedDataHash(domainSeparator, result);
}

/**
* @notice Returns the receiver address for an order.
* @param order The order.
Expand Down
200 changes: 0 additions & 200 deletions contracts/extensions/ETHOrders.sol

This file was deleted.

77 changes: 77 additions & 0 deletions contracts/extensions/NativeOrderFactory.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
// SPDX-License-Identifier: MIT

pragma solidity 0.8.23;

import { Clones } from "@openzeppelin/contracts/proxy/Clones.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { Address, AddressLib } from "@1inch/solidity-utils/contracts/libraries/AddressLib.sol";
import { SafeERC20, IERC20, IWETH } from "@1inch/solidity-utils/contracts/libraries/SafeERC20.sol";

import { IOrderMixin } from "../interfaces/IOrderMixin.sol";
import { MakerTraits, MakerTraitsLib } from "../libraries/MakerTraitsLib.sol";
import { EIP712Alien } from "../mocks/EIP712Alien.sol";
import { OrderLib, IOrderMixin } from "../OrderLib.sol";
import { NativeOrderImpl } from "./NativeOrderImpl.sol";

contract NativeOrderFactory is Ownable, EIP712Alien {
using Clones for address;
using AddressLib for Address;
using SafeERC20 for IERC20;
using OrderLib for IOrderMixin.Order;
using MakerTraitsLib for MakerTraits;

event NativeOrderCreated(address maker, bytes32 orderHash, address clone, uint256 value);

error OrderReceiverShouldBeSetCorrectly(address receiver);
error OrderMakerShouldBeMsgSender(address expected, address actual);
error OrderMakingAmountShouldBeEqualToMsgValue(uint256 expected, uint256 actual);

address public immutable IMPLEMENTATION;

constructor(
IWETH weth,
address limitOrderProtocol,
IERC20 accessToken,
uint256 cancellationDelay, // Recommended 60 seconds delay after order expiration for rewardable cancellation
string memory name,
string memory version
)
Ownable(msg.sender)
EIP712Alien(limitOrderProtocol, name, version)
{
IMPLEMENTATION = address(new NativeOrderImpl(
weth,
address(this),
limitOrderProtocol,
accessToken,
cancellationDelay,
name,
version
));
}

function create(IOrderMixin.Order calldata makerOrder) external payable returns (address clone) {
// Validate main order parameters
if (makerOrder.maker.get() != msg.sender) revert OrderMakerShouldBeMsgSender(msg.sender, makerOrder.maker.get());
address receiver = makerOrder.receiver.get();
if (receiver == address(0) || receiver == address(this)) revert OrderReceiverShouldBeSetCorrectly(receiver);
if (msg.value != makerOrder.makingAmount) revert OrderMakingAmountShouldBeEqualToMsgValue(makerOrder.makingAmount, msg.value);

bytes32 makerOrderHash = makerOrder.hash(_domainSeparatorV4());
clone = IMPLEMENTATION.cloneDeterministic(makerOrderHash);
NativeOrderImpl(payable(clone)).depositAndApprove{ value: msg.value }();

IOrderMixin.Order memory order = makerOrder;
order.maker = Address.wrap(uint160(clone));
bytes32 orderHash = order.hashMemory(_domainSeparatorV4());
emit NativeOrderCreated(msg.sender, orderHash, clone, msg.value);
}

function rescueFunds(address token, address to, uint256 amount) external onlyOwner {
if (token == address(0)) {
payable(to).transfer(amount);
} else {
IERC20(token).safeTransfer(to, amount);
}
}
}
Loading