Skip to content

Commit 719699f

Browse files
committed
additional input params
1 parent 8cad10a commit 719699f

File tree

3 files changed

+60
-17
lines changed

3 files changed

+60
-17
lines changed

src/allocators/ERC7683Allocator.sol

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import {Compact} from '@uniswap/the-compact/types/EIP712Types.sol';
1111

1212
contract ERC7683Allocator is SimpleAllocator, IERC7683Allocator {
1313
/// @notice The typehash of the OrderData struct
14-
// keccak256("OrderData(address arbiter,address sponsor,uint256 nonce,uint256 id,uint256 amount,Mandate mandate)
15-
// Mandate(uint256 chainId,address tribunal,address recipient,uint256 expires,address token,uint256 minimumAmount,uint256 baselinePriorityFee,uint256 scalingFactor,uint256[] decayCurve,bytes32 salt)")
16-
bytes32 public constant ORDERDATA_TYPEHASH = 0x524227237e80c55bea046dee5ee8323384274111dd94aadae8ce9bbc3916facb;
14+
// keccak256("OrderData(address arbiter,address sponsor,uint256 nonce,uint256 id,uint256 amount,
15+
// uint256 chainId,address tribunal,address recipient,address token,uint256 minimumAmount,uint256 baselinePriorityFee,uint256 scalingFactor,uint256[] decayCurve,bytes32 salt,uint256 targetBlock,uint256 maximumBlocksAfterTarget)")
16+
bytes32 public constant ORDERDATA_TYPEHASH = 0x9687614112a074c792f7035dc9365f34672a3aa8d3c312500bd47ddcaa0383b5;
1717

1818
/// @notice The typehash of the OrderDataGasless struct
19-
// keccak256("OrderDataGasless(address arbiter,uint256 id,uint256 amount,Mandate mandate)
20-
// Mandate(uint256 chainId,address tribunal,address recipient,uint256 expires,address token,uint256 minimumAmount,uint256 baselinePriorityFee,uint256 scalingFactor,uint256[] decayCurve,bytes32 salt)")
19+
// keccak256("OrderDataGasless(address arbiter,uint256 id,uint256 amount,
20+
// uint256 chainId,address tribunal,address recipient,address token,uint256 minimumAmount,uint256 baselinePriorityFee,uint256 scalingFactor,uint256[] decayCurve,bytes32 salt,uint256 targetBlock,uint256 maximumBlocksAfterTarget)")
2121
bytes32 public constant ORDERDATA_GASLESS_TYPEHASH =
22-
0x3d6dd96d82595484a68f0b4dcd56a17557e8e675c9aa8e149d6166912a791704;
22+
0xe6c40de3837db693910c63e423da4d9f6157257aaad00a0786775e629249ee73;
2323

2424
/// @notice keccak256("Compact(address arbiter,address sponsor,uint256 nonce,uint256 expires,uint256 id,uint256 amount,Mandate mandate)
2525
// Mandate(uint256 chainId,address tribunal,address recipient,uint256 expires,address token,uint256 minimumAmount,uint256 baselinePriorityFee,uint256 scalingFactor,uint256[] decayCurve,bytes32 salt)")
@@ -116,6 +116,23 @@ contract ERC7683Allocator is SimpleAllocator, IERC7683Allocator {
116116
return nonceFree_;
117117
}
118118

119+
/// @inheritdoc IERC7683Allocator
120+
function completeOriginData(bytes memory originData_, address claimant_)
121+
external
122+
pure
123+
returns (bytes memory originData)
124+
{
125+
(
126+
Claim memory claim,
127+
Mandate memory mandate, /* empty receiver of the tokens */
128+
,
129+
uint256 targetBlock,
130+
uint256 maximumBlocksAfterTarget
131+
) = abi.decode(originData_, (Claim, Mandate, address, uint256, uint256));
132+
originData = abi.encode(claim, mandate, claimant_, targetBlock, maximumBlocksAfterTarget);
133+
return originData;
134+
}
135+
119136
function _open(OrderData memory orderData_, uint32 fillDeadline_, address sponsor_, bytes memory sponsorSignature_)
120137
internal
121138
{
@@ -241,7 +258,7 @@ contract ERC7683Allocator is SimpleAllocator, IERC7683Allocator {
241258
fillInstructions[0] = FillInstruction({
242259
destinationChainId: orderData.chainId,
243260
destinationSettler: _addressToBytes32(orderData.tribunal),
244-
originData: abi.encode(claim, mandate)
261+
originData: abi.encode(claim, mandate, address(0), orderData.targetBlock, orderData.maximumBlocksAfterTarget)
245262
});
246263

247264
Output memory spent = Output({
@@ -340,7 +357,9 @@ contract ERC7683Allocator is SimpleAllocator, IERC7683Allocator {
340357
baselinePriorityFee: orderDataGasless_.baselinePriorityFee,
341358
scalingFactor: orderDataGasless_.scalingFactor,
342359
decayCurve: orderDataGasless_.decayCurve,
343-
salt: orderDataGasless_.salt
360+
salt: orderDataGasless_.salt,
361+
targetBlock: orderDataGasless_.targetBlock,
362+
maximumBlocksAfterTarget: orderDataGasless_.maximumBlocksAfterTarget
344363
});
345364
return orderData_;
346365
}

src/interfaces/IERC7683Allocator.sol

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ interface IERC7683Allocator is IOriginSettler {
2424
uint256 scalingFactor; // Fee scaling multiplier (1e18 baseline)
2525
uint256[] decayCurve; // Block durations, fill increases, & claim decreases.
2626
bytes32 salt; // Replay protection parameter
27+
// ADDITIONAL INPUT
28+
uint256 targetBlock; // The block number at the target chain on which the PGA is executed / the reverse dutch auction starts.
29+
uint256 maximumBlocksAfterTarget; // Blocks after target block that are still fillable.
2730
}
2831

2932
struct OrderDataGasless {
@@ -45,6 +48,9 @@ interface IERC7683Allocator is IOriginSettler {
4548
uint256 scalingFactor; // Fee scaling multiplier (1e18 baseline)
4649
uint256[] decayCurve; // Block durations, fill increases, & claim decreases.
4750
bytes32 salt; // Replay protection parameter
51+
// ADDITIONAL INPUT
52+
uint256 targetBlock; // The block number at the target chain on which the PGA is executed / the reverse dutch auction starts.
53+
uint256 maximumBlocksAfterTarget; // Blocks after target block that are still fillable.
4854
}
4955

5056
error InvalidOriginSettler(address originSettler, address expectedOriginSettler);
@@ -78,4 +84,12 @@ interface IERC7683Allocator is IOriginSettler {
7884
/// @notice Checks if a nonce is free to be used
7985
/// @dev The nonce is the most significant 96 bits. The least significant 160 bits must be the sponsor address
8086
function checkNonce(address sponsor_, uint256 nonce_) external view returns (bool nonceFree_);
87+
88+
/// @notice Completes the origin data by adding the filler as a claimant in the fillInstructions from the ResolvedCrossChainOrder
89+
/// @param originData_ The origin data from the open event
90+
/// @param claimant_ The address claiming the origin tokens after a successful fill (typically the address of the filler)
91+
function completeOriginData(bytes memory originData_, address claimant_)
92+
external
93+
pure
94+
returns (bytes memory completeOriginData);
8195
}

test/ERC7683Allocator.t.sol

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ abstract contract MocksSetup is Test {
5151
uint256 defaultScalingFactor = 0;
5252
uint256[] defaultDecayCurve = new uint256[](0);
5353
bytes32 defaultSalt = bytes32(0);
54+
uint256 defaultTargetBlock = 100;
55+
uint256 defaultMaximumBlocksAfterTarget = 10;
5456

5557
bytes32 ORDERDATA_GASLESS_TYPEHASH;
5658
bytes32 ORDERDATA_TYPEHASH;
@@ -249,7 +251,9 @@ abstract contract GaslessCrossChainOrderData is CompactData {
249251
baselinePriorityFee: mandate_.baselinePriorityFee,
250252
scalingFactor: mandate_.scalingFactor,
251253
decayCurve: mandate_.decayCurve,
252-
salt: mandate_.salt
254+
salt: mandate_.salt,
255+
targetBlock: defaultTargetBlock,
256+
maximumBlocksAfterTarget: defaultMaximumBlocksAfterTarget
253257
})
254258
)
255259
});
@@ -285,7 +289,9 @@ abstract contract GaslessCrossChainOrderData is CompactData {
285289
baselinePriorityFee: mandate_.baselinePriorityFee,
286290
scalingFactor: mandate_.scalingFactor,
287291
decayCurve: mandate_.decayCurve,
288-
salt: mandate_.salt
292+
salt: mandate_.salt,
293+
targetBlock: defaultTargetBlock,
294+
maximumBlocksAfterTarget: defaultMaximumBlocksAfterTarget
289295
})
290296
)
291297
});
@@ -331,7 +337,9 @@ abstract contract OnChainCrossChainOrderData is CompactData {
331337
baselinePriorityFee: mandate_.baselinePriorityFee,
332338
scalingFactor: mandate_.scalingFactor,
333339
decayCurve: mandate_.decayCurve,
334-
salt: mandate_.salt
340+
salt: mandate_.salt,
341+
targetBlock: defaultTargetBlock,
342+
maximumBlocksAfterTarget: defaultMaximumBlocksAfterTarget
335343
})
336344
)
337345
});
@@ -365,7 +373,9 @@ abstract contract OnChainCrossChainOrderData is CompactData {
365373
baselinePriorityFee: mandate_.baselinePriorityFee,
366374
scalingFactor: mandate_.scalingFactor,
367375
decayCurve: mandate_.decayCurve,
368-
salt: mandate_.salt
376+
salt: mandate_.salt,
377+
targetBlock: defaultTargetBlock,
378+
maximumBlocksAfterTarget: defaultMaximumBlocksAfterTarget
369379
})
370380
)
371381
});
@@ -523,7 +533,7 @@ contract ERC7683Allocator_openFor is GaslessCrossChainOrderData {
523533
fillInstructions[0] = IOriginSettler.FillInstruction({
524534
destinationChainId: defaultOutputChainId,
525535
destinationSettler: bytes32(uint256(uint160(tribunal))),
526-
originData: abi.encode(claim, _getMandate())
536+
originData: abi.encode(claim, _getMandate(), address(0), defaultTargetBlock, defaultMaximumBlocksAfterTarget)
527537
});
528538

529539
IOriginSettler.ResolvedCrossChainOrder memory resolvedCrossChainOrder = IOriginSettler.ResolvedCrossChainOrder({
@@ -578,7 +588,7 @@ contract ERC7683Allocator_openFor is GaslessCrossChainOrderData {
578588
fillInstructions[0] = IOriginSettler.FillInstruction({
579589
destinationChainId: defaultOutputChainId,
580590
destinationSettler: bytes32(uint256(uint160(tribunal))),
581-
originData: abi.encode(claim, _getMandate())
591+
originData: abi.encode(claim, _getMandate(), address(0), defaultTargetBlock, defaultMaximumBlocksAfterTarget)
582592
});
583593

584594
IOriginSettler.ResolvedCrossChainOrder memory resolvedCrossChainOrder = IOriginSettler.ResolvedCrossChainOrder({
@@ -739,7 +749,7 @@ contract ERC7683Allocator_open is OnChainCrossChainOrderData {
739749
fillInstructions[0] = IOriginSettler.FillInstruction({
740750
destinationChainId: defaultOutputChainId,
741751
destinationSettler: bytes32(uint256(uint160(tribunal))),
742-
originData: abi.encode(claim, _getMandate())
752+
originData: abi.encode(claim, _getMandate(), address(0), defaultTargetBlock, defaultMaximumBlocksAfterTarget)
743753
});
744754

745755
IOriginSettler.ResolvedCrossChainOrder memory resolvedCrossChainOrder = IOriginSettler.ResolvedCrossChainOrder({
@@ -904,7 +914,7 @@ contract ERC7683Allocator_resolveFor is GaslessCrossChainOrderData {
904914
fillInstructions[0] = IOriginSettler.FillInstruction({
905915
destinationChainId: defaultOutputChainId,
906916
destinationSettler: bytes32(uint256(uint160(tribunal))),
907-
originData: abi.encode(claim, _getMandate())
917+
originData: abi.encode(claim, _getMandate(), address(0), defaultTargetBlock, defaultMaximumBlocksAfterTarget)
908918
});
909919

910920
IOriginSettler.ResolvedCrossChainOrder memory resolvedCrossChainOrder = IOriginSettler.ResolvedCrossChainOrder({
@@ -970,7 +980,7 @@ contract ERC7683Allocator_resolve is OnChainCrossChainOrderData {
970980
fillInstructions[0] = IOriginSettler.FillInstruction({
971981
destinationChainId: defaultOutputChainId,
972982
destinationSettler: bytes32(uint256(uint160(tribunal))),
973-
originData: abi.encode(claim, _getMandate())
983+
originData: abi.encode(claim, _getMandate(), address(0), defaultTargetBlock, defaultMaximumBlocksAfterTarget)
974984
});
975985

976986
IOriginSettler.ResolvedCrossChainOrder memory resolvedCrossChainOrder = IOriginSettler.ResolvedCrossChainOrder({

0 commit comments

Comments
 (0)