Skip to content

Commit 2432944

Browse files
committed
Merge branch 'npai/exclusivity-switch' into mrice32/deterministic-new
2 parents 6fe3534 + dddfaee commit 2432944

File tree

10 files changed

+259
-268
lines changed

10 files changed

+259
-268
lines changed

contracts/SpokePool.sol

Lines changed: 55 additions & 114 deletions
Large diffs are not rendered by default.

contracts/erc7683/ERC7683Across.sol

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ struct AcrossOrderData {
1313
uint32 destinationChainId;
1414
address recipient;
1515
address exclusiveRelayer;
16-
uint256 depositNonce;
1716
uint32 exclusivityPeriod;
1817
bytes message;
1918
}
@@ -35,7 +34,6 @@ bytes constant ACROSS_ORDER_DATA_TYPE = abi.encodePacked(
3534
"uint32 destinationChainId,",
3635
"address recipient,",
3736
"address exclusiveRelayer,"
38-
"uint256 depositNonce,",
3937
"uint32 exclusivityPeriod,",
4038
"bytes message)"
4139
);

contracts/erc7683/ERC7683OrderDepositor.sol

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
7070
acrossOrderData.outputAmount,
7171
acrossOrderData.destinationChainId,
7272
acrossOriginFillerData.exclusiveRelayer,
73-
acrossOrderData.depositNonce,
7473
// Note: simplifying assumption to avoid quote timestamps that cause orders to expire before the deadline.
7574
SafeCast.toUint32(order.openDeadline - QUOTE_BEFORE_DEADLINE),
7675
order.fillDeadline,
@@ -101,7 +100,6 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
101100
acrossOrderData.outputAmount,
102101
acrossOrderData.destinationChainId,
103102
acrossOrderData.exclusiveRelayer,
104-
acrossOrderData.depositNonce,
105103
// Note: simplifying assumption to avoid the order type having to bake in the quote timestamp.
106104
SafeCast.toUint32(block.timestamp),
107105
order.fillDeadline,
@@ -160,17 +158,6 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
160158
return SafeCast.toUint32(block.timestamp); // solhint-disable-line not-rely-on-time
161159
}
162160

163-
/**
164-
* @notice Convenience method to compute the Across depositId for orders sent through 7683.
165-
* @dev if a 0 depositNonce is used, the depositId will not be deterministic (meaning it can change depending on
166-
* when the open txn is mined), but you will be safe from collisions. See the unsafeDepositV3 method on SpokePool
167-
* for more details on how to choose between deterministic and non-deterministic.
168-
* @param depositNonce the depositNonce field in the order.
169-
* @param depositor the sender or signer of the order.
170-
* @return the resulting Across depositId.
171-
*/
172-
function computeDepositId(uint256 depositNonce, address depositor) public view virtual returns (uint256);
173-
174161
function _resolveFor(GaslessCrossChainOrder calldata order, bytes calldata fillerData)
175162
internal
176163
view
@@ -236,7 +223,7 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
236223
acrossOrderData.inputAmount,
237224
acrossOrderData.outputAmount,
238225
block.chainid,
239-
computeDepositId(acrossOrderData.depositNonce, order.user),
226+
_currentDepositId(),
240227
order.fillDeadline,
241228
acrossOrderData.exclusivityPeriod,
242229
acrossOrderData.message
@@ -299,7 +286,7 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
299286
acrossOrderData.inputAmount,
300287
acrossOrderData.outputAmount,
301288
block.chainid,
302-
computeDepositId(acrossOrderData.depositNonce, msg.sender),
289+
_currentDepositId(),
303290
order.fillDeadline,
304291
acrossOrderData.exclusivityPeriod,
305292
acrossOrderData.message
@@ -360,12 +347,13 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
360347
uint256 outputAmount,
361348
uint256 destinationChainId,
362349
address exclusiveRelayer,
363-
uint256 depositNonce,
364350
uint32 quoteTimestamp,
365351
uint32 fillDeadline,
366352
uint32 exclusivityDeadline,
367353
bytes memory message
368354
) internal virtual;
369355

356+
function _currentDepositId() internal view virtual returns (uint32);
357+
370358
function _destinationSettler(uint256 chainId) internal view virtual returns (address);
371359
}

contracts/erc7683/ERC7683OrderDepositorExternal.sol

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -50,53 +50,31 @@ contract ERC7683OrderDepositorExternal is ERC7683OrderDepositor, Ownable, MultiC
5050
uint256 outputAmount,
5151
uint256 destinationChainId,
5252
address exclusiveRelayer,
53-
uint256 depositNonce,
5453
uint32 quoteTimestamp,
5554
uint32 fillDeadline,
5655
uint32 exclusivityDeadline,
5756
bytes memory message
5857
) internal override {
5958
IERC20(inputToken).safeIncreaseAllowance(address(SPOKE_POOL), inputAmount);
6059

61-
if (depositNonce == 0) {
62-
SPOKE_POOL.depositV3(
63-
depositor,
64-
recipient,
65-
inputToken,
66-
outputToken,
67-
inputAmount,
68-
outputAmount,
69-
destinationChainId,
70-
exclusiveRelayer,
71-
quoteTimestamp,
72-
fillDeadline,
73-
exclusivityDeadline,
74-
message
75-
);
76-
} else {
77-
SPOKE_POOL.unsafeDepositV3(
78-
depositor,
79-
recipient,
80-
inputToken,
81-
outputToken,
82-
inputAmount,
83-
outputAmount,
84-
destinationChainId,
85-
exclusiveRelayer,
86-
depositNonce,
87-
quoteTimestamp,
88-
fillDeadline,
89-
exclusivityDeadline,
90-
message
91-
);
92-
}
60+
SPOKE_POOL.depositV3(
61+
depositor,
62+
recipient,
63+
inputToken,
64+
outputToken,
65+
inputAmount,
66+
outputAmount,
67+
destinationChainId,
68+
exclusiveRelayer,
69+
quoteTimestamp,
70+
fillDeadline,
71+
exclusivityDeadline,
72+
message
73+
);
9374
}
9475

95-
function computeDepositId(uint256 depositNonce, address depositor) public view override returns (uint256) {
96-
return
97-
depositNonce == 0
98-
? SPOKE_POOL.numberOfDeposits()
99-
: SPOKE_POOL.getUnsafeDepositId(address(this), depositor, depositNonce);
76+
function _currentDepositId() internal view override returns (uint32) {
77+
return SPOKE_POOL.numberOfDeposits();
10078
}
10179

10280
function _destinationSettler(uint256 chainId) internal view override returns (address) {

contracts/interfaces/V3SpokePoolInterface.sol

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ interface V3SpokePoolInterface {
5353
// Origin chain id.
5454
uint256 originChainId;
5555
// The id uniquely identifying this deposit on the origin chain.
56-
uint256 depositId;
56+
uint32 depositId;
5757
// The timestamp on the destination chain after which this deposit can no longer be filled.
5858
uint32 fillDeadline;
5959
// The timestamp on the destination chain after which any relayer can fill the deposit.
@@ -102,7 +102,7 @@ interface V3SpokePoolInterface {
102102
uint256 inputAmount,
103103
uint256 outputAmount,
104104
uint256 indexed destinationChainId,
105-
uint256 indexed depositId,
105+
uint32 indexed depositId,
106106
uint32 quoteTimestamp,
107107
uint32 fillDeadline,
108108
uint32 exclusivityDeadline,
@@ -114,7 +114,7 @@ interface V3SpokePoolInterface {
114114

115115
event RequestedSpeedUpV3Deposit(
116116
uint256 updatedOutputAmount,
117-
uint256 indexed depositId,
117+
uint32 indexed depositId,
118118
address indexed depositor,
119119
address updatedRecipient,
120120
bytes updatedMessage,
@@ -128,7 +128,7 @@ interface V3SpokePoolInterface {
128128
uint256 outputAmount,
129129
uint256 repaymentChainId,
130130
uint256 indexed originChainId,
131-
uint256 indexed depositId,
131+
uint32 indexed depositId,
132132
uint32 fillDeadline,
133133
uint32 exclusivityDeadline,
134134
address exclusiveRelayer,
@@ -145,7 +145,7 @@ interface V3SpokePoolInterface {
145145
uint256 inputAmount,
146146
uint256 outputAmount,
147147
uint256 indexed originChainId,
148-
uint256 indexed depositId,
148+
uint32 indexed depositId,
149149
uint32 fillDeadline,
150150
uint32 exclusivityDeadline,
151151
address exclusiveRelayer,
@@ -189,7 +189,7 @@ interface V3SpokePoolInterface {
189189

190190
function speedUpV3Deposit(
191191
address depositor,
192-
uint256 depositId,
192+
uint32 depositId,
193193
uint256 updatedOutputAmount,
194194
address updatedRecipient,
195195
bytes calldata updatedMessage,
@@ -222,7 +222,7 @@ interface V3SpokePoolInterface {
222222
error DisabledRoute();
223223
error InvalidQuoteTimestamp();
224224
error InvalidFillDeadline();
225-
error InvalidExclusivityDeadline();
225+
error InvalidExclusiveRelayer();
226226
error MsgValueDoesNotMatchInputAmount();
227227
error NotExclusiveRelayer();
228228
error NoSlowFillsInExclusivityWindow();

0 commit comments

Comments
 (0)