From 4b24a766dcf3213da8f8a9008cee7b5a338db56c Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 12:07:08 +0300 Subject: [PATCH 01/14] Add depositor to packed params --- src/Facets/AcrossFacetPackedV3.sol | 173 +++++++++++------- .../solidity/Facets/AcrossFacetPackedV3.t.sol | 6 +- 2 files changed, 106 insertions(+), 73 deletions(-) diff --git a/src/Facets/AcrossFacetPackedV3.sol b/src/Facets/AcrossFacetPackedV3.sol index 99eabff99..60bc11545 100644 --- a/src/Facets/AcrossFacetPackedV3.sol +++ b/src/Facets/AcrossFacetPackedV3.sol @@ -37,6 +37,7 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { struct PackedParameters { bytes32 transactionId; address receiver; + address depositor; uint64 destinationChainId; address receivingAssetId; uint256 outputAmount; @@ -81,22 +82,34 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { } /// @notice Bridges native tokens via Across (packed implementation) - /// No params, all data will be extracted from manually encoded callData + /// @dev Calldata mapping: + /// [0:4] - function selector + /// [4:12] - transactionId + /// [12:32] - receiver + /// [32:52] - depositor + /// [52:56] - destinationChainId + /// [56:76] - receivingAssetId + /// [76:108] - outputAmount + /// [108:128] - exclusiveRelayer + /// [128:132] - quoteTimestamp + /// [132:136] - fillDeadline + /// [136:140] - exclusivityDeadline + /// [140:] - message function startBridgeTokensViaAcrossV3NativePacked() external payable { // call Across spoke pool to bridge assets spokePool.depositV3{ value: msg.value }( - msg.sender, // depositor + address(bytes20(msg.data[32:52])), // depositor address(bytes20(msg.data[12:32])), // recipient wrappedNative, // inputToken - address(bytes20(msg.data[36:56])), // outputToken + address(bytes20(msg.data[56:76])), // outputToken msg.value, // inputAmount - uint256(bytes32(msg.data[56:88])), // outputAmount - uint64(uint32(bytes4(msg.data[32:36]))), // destinationChainId - address(bytes20(msg.data[88:108])), // exclusiveRelayer - uint32(bytes4(msg.data[108:112])), // quoteTimestamp - uint32(bytes4(msg.data[112:116])), // fillDeadline - uint32(bytes4(msg.data[116:120])), // exclusivityDeadline - msg.data[120:msg.data.length] + uint256(bytes32(msg.data[76:108])), // outputAmount + uint64(uint32(bytes4(msg.data[52:56]))), // destinationChainId + address(bytes20(msg.data[108:128])), // exclusiveRelayer + uint32(bytes4(msg.data[128:132])), // quoteTimestamp + uint32(bytes4(msg.data[132:136])), // fillDeadline + uint32(bytes4(msg.data[136:140])), // exclusivityDeadline + msg.data[140:msg.data.length] ); emit LiFiAcrossTransfer(bytes8(msg.data[4:12])); @@ -127,32 +140,44 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { } /// @notice Bridges ERC20 tokens via Across (packed implementation) - /// No params, all data will be extracted from manually encoded callData + /// @dev Calldata mapping: + /// [0:4] - function selector + /// [4:12] - transactionId + /// [12:32] - receiver + /// [32:52] - depositor + /// [52:72] - sendingAssetId + /// [72:88] - inputAmount + /// [88:92] - destinationChainId + /// [92:112] - receivingAssetId + /// [112:144] - outputAmount + /// [144:164] - exclusiveRelayer + /// [164:168] - quoteTimestamp + /// [168:172] - fillDeadline + /// [172:176] - exclusivityDeadline + /// [176:] - message function startBridgeTokensViaAcrossV3ERC20Packed() external { - address sendingAssetId = address(bytes20(msg.data[32:52])); - uint256 inputAmount = uint256(uint128(bytes16(msg.data[52:68]))); + address sendingAssetId = address(bytes20(msg.data[52:72])); + uint256 inputAmount = uint256(uint128(bytes16(msg.data[72:88]))); - // Deposit assets ERC20(sendingAssetId).safeTransferFrom( msg.sender, address(this), inputAmount ); - // call Across SpokePool spokePool.depositV3( - msg.sender, // depositor + address(bytes20(msg.data[32:52])), // depositor address(bytes20(msg.data[12:32])), // recipient sendingAssetId, // inputToken - address(bytes20(msg.data[72:92])), // outputToken + address(bytes20(msg.data[92:112])), // outputToken inputAmount, // inputAmount - uint256(bytes32(msg.data[92:124])), // outputAmount - uint64(uint32(bytes4(msg.data[68:72]))), // destinationChainId - address(bytes20(msg.data[124:144])), // exclusiveRelayer - uint32(bytes4(msg.data[144:148])), // quoteTimestamp - uint32(bytes4(msg.data[148:152])), // fillDeadline - uint32(bytes4(msg.data[152:156])), // exclusivityDeadline - msg.data[156:msg.data.length] + uint256(bytes32(msg.data[112:144])), // outputAmount + uint64(uint32(bytes4(msg.data[88:92]))), // destinationChainId + address(bytes20(msg.data[144:164])), // exclusiveRelayer + uint32(bytes4(msg.data[164:168])), // quoteTimestamp + uint32(bytes4(msg.data[168:172])), // fillDeadline + uint32(bytes4(msg.data[172:176])), // exclusivityDeadline + msg.data[176:msg.data.length] ); emit LiFiAcrossTransfer(bytes8(msg.data[4:12])); @@ -198,8 +223,6 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { function encode_startBridgeTokensViaAcrossV3NativePacked( PackedParameters calldata _parameters ) external pure returns (bytes memory) { - // there are already existing networks with chainIds outside uint32 range but since we not support either of them yet, - // we feel comfortable using this approach to save further gas require( _parameters.destinationChainId <= type(uint32).max, "destinationChainId value passed too big to fit in uint32" @@ -212,6 +235,7 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { .selector, bytes8(_parameters.transactionId), bytes20(_parameters.receiver), + bytes20(_parameters.depositor), bytes4(uint32(_parameters.destinationChainId)), bytes20(_parameters.receivingAssetId), bytes32(_parameters.outputAmount), @@ -232,8 +256,6 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { address sendingAssetId, uint256 inputAmount ) external pure returns (bytes memory) { - // there are already existing networks with chainIds outside uint32 range but since we not support either of them yet, - // we feel comfortable using this approach to save further gas require( _parameters.destinationChainId <= type(uint32).max, "destinationChainId value passed too big to fit in uint32" @@ -244,24 +266,33 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { "inputAmount value passed too big to fit in uint128" ); - return - bytes.concat( - AcrossFacetPackedV3 - .startBridgeTokensViaAcrossV3ERC20Packed - .selector, - bytes8(_parameters.transactionId), - bytes20(_parameters.receiver), - bytes20(sendingAssetId), - bytes16(uint128(inputAmount)), - bytes4(uint32(_parameters.destinationChainId)), - bytes20(_parameters.receivingAssetId), - bytes32(_parameters.outputAmount), - bytes20(_parameters.exclusiveRelayer), - bytes4(_parameters.quoteTimestamp), - bytes4(_parameters.fillDeadline), - bytes4(_parameters.exclusivityDeadline), - _parameters.message - ); + // Split the concatenation into parts to avoid "stack too deep" errors + bytes memory part1 = bytes.concat( + AcrossFacetPackedV3 + .startBridgeTokensViaAcrossV3ERC20Packed + .selector, + bytes8(_parameters.transactionId), + bytes20(_parameters.receiver), + bytes20(_parameters.depositor), + bytes20(sendingAssetId) + ); + + bytes memory part2 = bytes.concat( + bytes16(uint128(inputAmount)), + bytes4(uint32(_parameters.destinationChainId)), + bytes20(_parameters.receivingAssetId), + bytes32(_parameters.outputAmount) + ); + + bytes memory part3 = bytes.concat( + bytes20(_parameters.exclusiveRelayer), + bytes4(_parameters.quoteTimestamp), + bytes4(_parameters.fillDeadline), + bytes4(_parameters.exclusivityDeadline) + ); + + // Combine all parts with the message + return bytes.concat(part1, part2, part3, _parameters.message); } /// @notice Decodes calldata that is meant to be used for calling the native 'packed' function @@ -277,23 +308,24 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { ) { require( - data.length >= 120, - "invalid calldata (must have length >= 120)" + data.length >= 140, + "invalid calldata (must have length >= 140)" ); // extract bridgeData bridgeData.transactionId = bytes32(bytes8(data[4:12])); bridgeData.receiver = address(bytes20(data[12:32])); - bridgeData.destinationChainId = uint64(uint32(bytes4(data[32:36]))); + bridgeData.destinationChainId = uint64(uint32(bytes4(data[52:56]))); // extract acrossData - acrossData.receivingAssetId = address(bytes20(data[36:56])); - acrossData.outputAmount = uint256(bytes32(data[56:88])); - acrossData.exclusiveRelayer = address(bytes20(data[88:108])); - acrossData.quoteTimestamp = uint32(bytes4(data[108:112])); - acrossData.fillDeadline = uint32(bytes4(data[112:116])); - acrossData.exclusivityDeadline = uint32(bytes4(data[116:120])); - acrossData.message = data[120:]; + acrossData.refundAddress = address(bytes20(data[32:52])); // depositor + acrossData.receivingAssetId = address(bytes20(data[56:76])); + acrossData.outputAmount = uint256(bytes32(data[76:108])); + acrossData.exclusiveRelayer = address(bytes20(data[108:128])); + acrossData.quoteTimestamp = uint32(bytes4(data[128:132])); + acrossData.fillDeadline = uint32(bytes4(data[132:136])); + acrossData.exclusivityDeadline = uint32(bytes4(data[136:140])); + acrossData.message = data[140:]; return (bridgeData, acrossData); } @@ -311,25 +343,24 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { ) { require( - data.length >= 156, - "invalid calldata (must have length > 156)" + data.length >= 176, + "invalid calldata (must have length >= 176)" ); - // extract bridgeData bridgeData.transactionId = bytes32(bytes8(data[4:12])); bridgeData.receiver = address(bytes20(data[12:32])); - bridgeData.sendingAssetId = address(bytes20(data[32:52])); - bridgeData.minAmount = uint256(uint128(bytes16(data[52:68]))); - bridgeData.destinationChainId = uint64(uint32(bytes4(data[68:72]))); - - // extract acrossData - acrossData.receivingAssetId = address(bytes20(data[72:92])); - acrossData.outputAmount = uint256(bytes32(data[92:124])); - acrossData.exclusiveRelayer = address(bytes20(data[124:144])); - acrossData.quoteTimestamp = uint32(bytes4(data[144:148])); - acrossData.fillDeadline = uint32(bytes4(data[148:152])); - acrossData.exclusivityDeadline = uint32(bytes4(data[152:156])); - acrossData.message = data[156:]; + acrossData.refundAddress = address(bytes20(data[32:52])); // depositor + bridgeData.sendingAssetId = address(bytes20(data[52:72])); + bridgeData.minAmount = uint256(uint128(bytes16(data[72:88]))); + bridgeData.destinationChainId = uint64(uint32(bytes4(data[88:92]))); + + acrossData.receivingAssetId = address(bytes20(data[92:112])); + acrossData.outputAmount = uint256(bytes32(data[112:144])); + acrossData.exclusiveRelayer = address(bytes20(data[144:164])); + acrossData.quoteTimestamp = uint32(bytes4(data[164:168])); + acrossData.fillDeadline = uint32(bytes4(data[168:172])); + acrossData.exclusivityDeadline = uint32(bytes4(data[172:176])); + acrossData.message = data[176:]; return (bridgeData, acrossData); } diff --git a/test/solidity/Facets/AcrossFacetPackedV3.t.sol b/test/solidity/Facets/AcrossFacetPackedV3.t.sol index c6ec0fc39..60f9ece31 100644 --- a/test/solidity/Facets/AcrossFacetPackedV3.t.sol +++ b/test/solidity/Facets/AcrossFacetPackedV3.t.sol @@ -127,7 +127,7 @@ contract AcrossFacetPackedV3Test is TestBase { uint32 quoteTimestamp = uint32(block.timestamp); validAcrossData = AcrossFacetV3.AcrossV3Data({ receiverAddress: USER_RECEIVER, - refundAddress: USER_REFUND, + refundAddress: USER_SENDER, // Set to match the depositor receivingAssetId: ADDRESS_USDC_POL, outputAmount: (defaultUSDCAmount * 9) / 10, exclusiveRelayer: address(0), @@ -147,7 +147,8 @@ contract AcrossFacetPackedV3Test is TestBase { quoteTimestamp: quoteTimestamp, fillDeadline: uint32(quoteTimestamp + 1000), exclusivityDeadline: 0, - message: "" + message: "", + depositor: USER_SENDER // Add depositor field }); vm.label(ACROSS_SPOKE_POOL, "SpokePool_PROX"); @@ -439,6 +440,7 @@ contract AcrossFacetPackedV3Test is TestBase { assertEq(original.outputAmount == decoded.outputAmount, true); assertEq(original.fillDeadline == decoded.fillDeadline, true); assertEq(original.quoteTimestamp == decoded.quoteTimestamp, true); + assertEq(original.refundAddress == decoded.refundAddress, true); // Add check for refundAddress/depositor assertEq( keccak256(abi.encode(original.message)) == keccak256(abi.encode(decoded.message)), From 56aebd5ff63c09a7bd4911eab3f3075a0de9761b Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 12:14:17 +0300 Subject: [PATCH 02/14] Drop gas introspection in receiver contract --- src/Periphery/ReceiverAcrossV3.sol | 39 +++--------- .../solidity/Periphery/ReceiverAcrossV3.t.sol | 59 +------------------ 2 files changed, 11 insertions(+), 87 deletions(-) diff --git a/src/Periphery/ReceiverAcrossV3.sol b/src/Periphery/ReceiverAcrossV3.sol index b99565c38..edb3ececc 100644 --- a/src/Periphery/ReceiverAcrossV3.sol +++ b/src/Periphery/ReceiverAcrossV3.sol @@ -16,13 +16,9 @@ import { SafeTransferLib } from "solady/utils/SafeTransferLib.sol"; contract ReceiverAcrossV3 is ILiFi, TransferrableOwnership { using SafeTransferLib for address; - /// Error /// - error InsufficientGasLimit(); - /// Storage /// IExecutor public immutable executor; address public immutable spokepool; - uint256 public immutable recoverGas; /// Modifiers /// modifier onlySpokepool() { @@ -36,13 +32,11 @@ contract ReceiverAcrossV3 is ILiFi, TransferrableOwnership { constructor( address _owner, address _executor, - address _spokepool, - uint256 _recoverGas + address _spokepool ) TransferrableOwnership(_owner) { owner = _owner; executor = IExecutor(_executor); spokepool = _spokepool; - recoverGas = _recoverGas; } /// External Methods /// @@ -98,6 +92,7 @@ contract ReceiverAcrossV3 is ILiFi, TransferrableOwnership { /// Private Methods /// /// @notice Performs a swap before completing a cross-chain transaction + // @notice Since Across will always send wrappedNative to contract, we do not need a native handling here /// @param _transactionId the transaction id associated with the operation /// @param _swapData array of data needed for swaps /// @param assetId address of the token received from the source chain (not to be confused with StargateV2's assetIds which are uint16 values) @@ -110,34 +105,16 @@ contract ReceiverAcrossV3 is ILiFi, TransferrableOwnership { address payable receiver, uint256 amount ) private { - // since Across will always send wrappedNative to contract, we do not need a native handling here - uint256 cacheGasLeft = gasleft(); - - // We introduced this handling to prevent relayers from under-estimating our destination transactions and then - // running into out-of-gas errors which would cause the bridged tokens to be refunded to the receiver. This is - // an emergency behaviour but testing showed that this would happen very frequently. - // Reverting transactions that dont have enough gas helps to make sure that transactions will get correctly estimated - // by the relayers on source chain and thus improves the success rate of destination calls. - if (cacheGasLeft < recoverGas) { - // case A: not enough gas left to execute calls - // @dev: we removed the handling to send bridged funds to receiver in case of insufficient gas - // as it's better for AcrossV3 to revert these cases instead - revert InsufficientGasLimit(); - } - - // case 2b: enough gas left to execute calls assetId.safeApprove(address(executor), 0); assetId.safeApprove(address(executor), amount); try - executor.swapAndCompleteBridgeTokens{ - gas: cacheGasLeft - recoverGas - }(_transactionId, _swapData, assetId, receiver) + executor.swapAndCompleteBridgeTokens( + _transactionId, + _swapData, + assetId, + receiver + ) {} catch { - cacheGasLeft = gasleft(); - // if the only gas left here is the recoverGas then the swap must have failed due to out-of-gas error and in this - // case we want to revert (again, to force relayers to estimate our destination calls with sufficient gas limit) - if (cacheGasLeft <= recoverGas) revert InsufficientGasLimit(); - // send the bridged (and unswapped) funds to receiver address assetId.safeTransfer(receiver, amount); diff --git a/test/solidity/Periphery/ReceiverAcrossV3.t.sol b/test/solidity/Periphery/ReceiverAcrossV3.t.sol index 36f35b21f..d726c3259 100644 --- a/test/solidity/Periphery/ReceiverAcrossV3.t.sol +++ b/test/solidity/Periphery/ReceiverAcrossV3.t.sol @@ -19,15 +19,11 @@ contract ReceiverAcrossV3Test is TestBase { bytes32 guid = bytes32("12345"); address receiverAddress = USER_RECEIVER; - uint256 public constant RECOVER_GAS_VALUE = 100000; address stargateRouter; Executor executor; ERC20Proxy erc20Proxy; event ExecutorSet(address indexed executor); - event RecoverGasSet(uint256 indexed recoverGas); - - error InsufficientGasLimit(); function setUp() public { customBlockNumberForForking = 20024274; @@ -38,8 +34,7 @@ contract ReceiverAcrossV3Test is TestBase { receiver = new ReceiverAcrossV3( address(this), address(executor), - SPOKEPOOL_MAINNET, - RECOVER_GAS_VALUE + SPOKEPOOL_MAINNET ); vm.label(address(receiver), "ReceiverAcrossV3"); vm.label(address(executor), "Executor"); @@ -50,13 +45,11 @@ contract ReceiverAcrossV3Test is TestBase { receiver = new ReceiverAcrossV3( address(this), address(executor), - SPOKEPOOL_MAINNET, - RECOVER_GAS_VALUE + SPOKEPOOL_MAINNET ); assertEq(address(receiver.executor()) == address(executor), true); assertEq(receiver.spokepool() == SPOKEPOOL_MAINNET, true); - assertEq(receiver.recoverGas() == RECOVER_GAS_VALUE, true); } function test_OwnerCanPullERC20Token() public { @@ -168,52 +161,6 @@ contract ReceiverAcrossV3Test is TestBase { assertTrue(dai.balanceOf(receiverAddress) == amountOutMin); } - function test_willRevertIfGasIsLessThanRecoverGas() public { - // mock-send bridged funds to receiver contract - deal(ADDRESS_USDC, address(receiver), defaultUSDCAmount); - - // encode payload with mock data like Stargate would according to: - (bytes memory payload, ) = _getValidAcrossV3Payload( - ADDRESS_USDC, - ADDRESS_DAI - ); - - // fake a sendCompose from USDC pool on ETH mainnet - vm.startPrank(SPOKEPOOL_MAINNET); - - vm.expectRevert(abi.encodeWithSelector(InsufficientGasLimit.selector)); - - receiver.handleV3AcrossMessage{ gas: RECOVER_GAS_VALUE }( - ADDRESS_USDC, - defaultUSDCAmount, - address(0), - payload - ); - } - - function test_willRevertIfDestCallRunsOutOfGas() public { - // mock-send bridged funds to receiver contract - deal(ADDRESS_USDC, address(receiver), defaultUSDCAmount); - - // encode payload with mock data like Stargate would according to: - (bytes memory payload, ) = _getValidAcrossV3Payload( - ADDRESS_USDC, - ADDRESS_DAI - ); - - // fake a sendCompose from USDC pool on ETH mainnet - vm.startPrank(SPOKEPOOL_MAINNET); - - vm.expectRevert(abi.encodeWithSelector(InsufficientGasLimit.selector)); - - receiver.handleV3AcrossMessage{ gas: RECOVER_GAS_VALUE + 150000 }( - ADDRESS_USDC, - defaultUSDCAmount, - address(0), - payload - ); - } - function test_willReturnFundsToUserIfDstCallFails() public { // mock-send bridged funds to receiver contract deal(ADDRESS_USDC, address(receiver), defaultUSDCAmount); @@ -248,7 +195,7 @@ contract ReceiverAcrossV3Test is TestBase { defaultUSDCAmount, block.timestamp ); - receiver.handleV3AcrossMessage{ gas: RECOVER_GAS_VALUE + 200000 }( + receiver.handleV3AcrossMessage( ADDRESS_USDC, defaultUSDCAmount, address(0), From efeab771c87febc82b7d2a65c2276fe305681e68 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 12:44:34 +0300 Subject: [PATCH 03/14] Deploy to staging --- deployments/_deployments_log_file.json | 38 +++++++++++++++++++++----- deployments/arbitrum.staging.json | 6 ++-- deployments/polygon.staging.json | 6 ++-- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/deployments/_deployments_log_file.json b/deployments/_deployments_log_file.json index dedd7f6bf..0782af585 100644 --- a/deployments/_deployments_log_file.json +++ b/deployments/_deployments_log_file.json @@ -24645,12 +24645,12 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x3877f47B560819E96BBD7e7700a02dfACe36D696", + "ADDRESS": "0xe4F3DEF14D61e47c696374453CD64d438FD277F8", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2024-07-31 16:59:18", + "TIMESTAMP": "2024-12-06 12:41:24", "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f00000000000000000000000023f882ba2fa54a358d8599465eb471f58cc26751000000000000000000000000e35e9842fceaca96570b734083f4a58e8f7c5f2a00000000000000000000000000000000000000000000000000000000000186a0", - "SALT": "31072024", - "VERIFIED": "false" + "SALT": "", + "VERIFIED": "true" } ] }, @@ -24707,6 +24707,18 @@ "VERIFIED": "true" } ] + }, + "staging": { + "1.0.0": [ + { + "ADDRESS": "0xe4F3DEF14D61e47c696374453CD64d438FD277F8", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 12:40:08", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f00000000000000000000000023f882ba2fa54a358d8599465eb471f58cc267510000000000000000000000009295ee1d8c5b022be115a2ad3c30c72e34e7f09600000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } + ] } }, "blast": { @@ -24872,6 +24884,18 @@ "VERIFIED": "true" } ] + }, + "staging": { + "1.0.0": [ + { + "ADDRESS": "0x21767081Ff52CE5563A29f27149D01C7127775A2", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 12:34:11", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000009295ee1d8c5b022be115a2ad3c30c72e34e7f0960000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619000000000000000000000000b9c0de368bece5e76b52545a8e377a4c118f597b", + "SALT": "", + "VERIFIED": "true" + } + ] } }, "base": { @@ -24904,9 +24928,9 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0x4352459F6BE1C7D1278F8c34Bb598b0feeB50f8b", + "ADDRESS": "0x21767081Ff52CE5563A29f27149D01C7127775A2", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2024-10-03 07:44:55", + "TIMESTAMP": "2024-12-06 12:24:22", "CONSTRUCTOR_ARGS": "0x000000000000000000000000e35e9842fceaca96570b734083f4a58e8f7c5f2a00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000b9c0de368bece5e76b52545a8e377a4c118f597b", "SALT": "", "VERIFIED": "true" @@ -25749,4 +25773,4 @@ } } } -} \ No newline at end of file +} diff --git a/deployments/arbitrum.staging.json b/deployments/arbitrum.staging.json index b7df4ede9..c3682bde5 100644 --- a/deployments/arbitrum.staging.json +++ b/deployments/arbitrum.staging.json @@ -48,6 +48,6 @@ "EmergencyPauseFacet": "0x17Bb203F42d8e404ac7E8dB6ff972B7E8473850b", "Permit2Proxy": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5", "AcrossFacetV3": "0x6124C65B6264bE13f059b7C3A891a5b77DA8Bd95", - "ReceiverAcrossV3": "0x3877f47B560819E96BBD7e7700a02dfACe36D696", - "AcrossFacetPackedV3": "0x4352459F6BE1C7D1278F8c34Bb598b0feeB50f8b" -} + "ReceiverAcrossV3": "0xe4F3DEF14D61e47c696374453CD64d438FD277F8", + "AcrossFacetPackedV3": "0x21767081Ff52CE5563A29f27149D01C7127775A2" +} \ No newline at end of file diff --git a/deployments/polygon.staging.json b/deployments/polygon.staging.json index de64abd96..d029881b4 100644 --- a/deployments/polygon.staging.json +++ b/deployments/polygon.staging.json @@ -47,5 +47,7 @@ "HopFacetOptimized": "0xf82135385765f1324257ffF74489F16382EBBb8A", "SymbiosisFacet": "0x21571D628B0bCBeb954D5933A604eCac35bAF2c7", "AcrossFacetV3": "0xe2e5428F972d9C0a5Ba433e0c402752b472dB248", - "Permit2Proxy": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5" -} + "Permit2Proxy": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5", + "AcrossFacetPackedV3": "0x21767081Ff52CE5563A29f27149D01C7127775A2", + "ReceiverAcrossV3": "0xe4F3DEF14D61e47c696374453CD64d438FD277F8" +} \ No newline at end of file From cf35ee49b58766bcc6d57d67e6c5f47fad43c9a1 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 13:23:00 +0300 Subject: [PATCH 04/14] Fix types CI job --- .github/workflows/types.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/types.yaml b/.github/workflows/types.yaml index e169f5171..50898e2af 100644 --- a/.github/workflows/types.yaml +++ b/.github/workflows/types.yaml @@ -169,7 +169,7 @@ jobs: run: | cd lifi-contract-types TMP=$(mktemp) - jq '.version="${NEW_VERSION}"' package.json > "$TMP" && mv "$TMP" package.json + jq --arg new_ver "$NEW_VERSION" '.version=$new_ver' package.json > "$TMP" && mv "$TMP" package.json git config user.name github-actions git config user.email github-actions@github.com echo "Updating version from $LATEST_TAG to $NEW_VERSION" From d1f9dd91890c81aa55cb9482b36128ebceefdee6 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 13:35:31 +0300 Subject: [PATCH 05/14] Bump versions --- src/Facets/AcrossFacetPackedV3.sol | 2 +- src/Periphery/ReceiverAcrossV3.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Facets/AcrossFacetPackedV3.sol b/src/Facets/AcrossFacetPackedV3.sol index 60bc11545..b99fd2bcf 100644 --- a/src/Facets/AcrossFacetPackedV3.sol +++ b/src/Facets/AcrossFacetPackedV3.sol @@ -11,7 +11,7 @@ import { LibAsset, IERC20 } from "../Libraries/LibAsset.sol"; /// @title AcrossFacetPackedV3 /// @author LI.FI (https://li.fi) /// @notice Provides functionality for bridging through Across in a gas-optimized way -/// @custom:version 1.0.0 +/// @custom:version 1.2.0 contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { using SafeTransferLib for ERC20; diff --git a/src/Periphery/ReceiverAcrossV3.sol b/src/Periphery/ReceiverAcrossV3.sol index edb3ececc..42e3ef150 100644 --- a/src/Periphery/ReceiverAcrossV3.sol +++ b/src/Periphery/ReceiverAcrossV3.sol @@ -12,7 +12,7 @@ import { SafeTransferLib } from "solady/utils/SafeTransferLib.sol"; /// @title ReceiverAcrossV3 /// @author LI.FI (https://li.fi) /// @notice Arbitrary execution contract used for cross-chain swaps and message passing via AcrossV3 -/// @custom:version 1.0.0 +/// @custom:version 1.0.1 contract ReceiverAcrossV3 is ILiFi, TransferrableOwnership { using SafeTransferLib for address; From 5f59b4957fe315ea2d7b5e9daa931785ccff488c Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 16:13:51 +0300 Subject: [PATCH 06/14] Add comments removed by mistake --- src/Facets/AcrossFacetPackedV3.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Facets/AcrossFacetPackedV3.sol b/src/Facets/AcrossFacetPackedV3.sol index b99fd2bcf..69162210f 100644 --- a/src/Facets/AcrossFacetPackedV3.sol +++ b/src/Facets/AcrossFacetPackedV3.sol @@ -223,6 +223,8 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { function encode_startBridgeTokensViaAcrossV3NativePacked( PackedParameters calldata _parameters ) external pure returns (bytes memory) { + // there are already existing networks with chainIds outside uint32 range but since we not support either of them yet, + // we feel comfortable using this approach to save further gas require( _parameters.destinationChainId <= type(uint32).max, "destinationChainId value passed too big to fit in uint32" @@ -256,6 +258,8 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { address sendingAssetId, uint256 inputAmount ) external pure returns (bytes memory) { + // there are already existing networks with chainIds outside uint32 range but since we not support either of them yet, + // we feel comfortable using this approach to save further gas require( _parameters.destinationChainId <= type(uint32).max, "destinationChainId value passed too big to fit in uint32" From 9a8ff404186a7df19d9dd5610a94b977bbfc233d Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 19:20:18 +0300 Subject: [PATCH 07/14] Update min methods to use depositor as well --- src/Facets/AcrossFacetPackedV3.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Facets/AcrossFacetPackedV3.sol b/src/Facets/AcrossFacetPackedV3.sol index 69162210f..618f3d5cd 100644 --- a/src/Facets/AcrossFacetPackedV3.sol +++ b/src/Facets/AcrossFacetPackedV3.sol @@ -122,7 +122,7 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { ) external payable { // call Across spoke pool to bridge assets spokePool.depositV3{ value: msg.value }( - msg.sender, // depositor + _parameters.depositor, // depositor _parameters.receiver, wrappedNative, // inputToken _parameters.receivingAssetId, // outputToken @@ -201,7 +201,7 @@ contract AcrossFacetPackedV3 is ILiFi, TransferrableOwnership { // call Across SpokePool spokePool.depositV3( - msg.sender, // depositor + _parameters.depositor, // depositor _parameters.receiver, sendingAssetId, // inputToken _parameters.receivingAssetId, // outputToken From 3d7eb03514097800ab65b082617b348bbea7984f Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 20:30:39 +0300 Subject: [PATCH 08/14] Attach audit report --- audit/auditLog.json | 59 ++++++++++++++---- ...2024.12.06_AcrossFacetPackedV3(v1.2.0).pdf | Bin 0 -> 77825 bytes deployments/_deployments_log_file.json | 6 +- deployments/polygon.staging.json | 2 +- 4 files changed, 50 insertions(+), 17 deletions(-) create mode 100644 audit/reports/2024.12.06_AcrossFacetPackedV3(v1.2.0).pdf diff --git a/audit/auditLog.json b/audit/auditLog.json index 139bcc5d0..a6888d109 100644 --- a/audit/auditLog.json +++ b/audit/auditLog.json @@ -55,42 +55,75 @@ "auditorGitHandle": "sujithsomraaj", "auditReportPath": "./audit/reports/2024.12.03_LiFiDexAggregator.pdf", "auditCommitHash": "8a34562c912b5b19c919bb95338655c944428af5" + }, + "audit20241206": { + "auditCompletedOn": "06.12.2024", + "auditedBy": "Sujith Somraaj (individual security researcher)", + "auditorGitHandle": "sujithsomraaj", + "auditReportPath": "./audit/reports/2024.12.06_AcrossFacetPackedV3(v1.2.0).pdf", + "auditCommitHash": "5f59b4957fe315ea2d7b5e9daa931785ccff488c" } }, "auditedContracts": { "AcrossFacetV3": { - "1.0.0": ["audit20241007"] + "1.0.0": [ + "audit20241007" + ] }, "AcrossFacetPackedV3": { - "1.0.0": ["audit20241007"] + "1.0.0": [ + "audit20241007", + "audit20241206" + ] }, "GasZipFacet": { - "2.0.0": ["audit20241107"] + "2.0.0": [ + "audit20241107" + ] }, "GasZipPeriphery": { - "1.0.0": ["audit20241107"] + "1.0.0": [ + "audit20241107" + ] }, "IGasZip": { - "1.0.0": ["audit20241107"] + "1.0.0": [ + "audit20241107" + ] }, "EmergencyPauseFacet": { - "1.0.0": ["audit20240913"], - "1.0.1": ["audit20241105"] + "1.0.0": [ + "audit20240913" + ], + "1.0.1": [ + "audit20241105" + ] }, "LiFiDEXAggregator": { - "1.5.0": ["audit20241203"] + "1.5.0": [ + "audit20241203" + ] }, "Permit2Proxy": { - "1.0.0": ["audit20241122"] + "1.0.0": [ + "audit20241122" + ] }, "ReceiverAcrossV3": { - "1.0.0": ["audit20241007"] + "1.0.0": [ + "audit20241007", + "audit20241206" + ] }, "StargateFacetV2": { - "1.0.1": ["audit20240814"] + "1.0.1": [ + "audit20240814" + ] }, "WithdrawablePeriphery": { - "1.0.0": ["audit20241014"] + "1.0.0": [ + "audit20241014" + ] } } -} +} \ No newline at end of file diff --git a/audit/reports/2024.12.06_AcrossFacetPackedV3(v1.2.0).pdf b/audit/reports/2024.12.06_AcrossFacetPackedV3(v1.2.0).pdf new file mode 100644 index 0000000000000000000000000000000000000000..a77c1c4fbadd9059ab9cdbfa85c74b06ad167a87 GIT binary patch literal 77825 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 SaGV?*T%2%}lw$JYaQ_E)HXN-0 literal 0 HcmV?d00001 diff --git a/deployments/_deployments_log_file.json b/deployments/_deployments_log_file.json index 0782af585..2fdaadeda 100644 --- a/deployments/_deployments_log_file.json +++ b/deployments/_deployments_log_file.json @@ -24427,12 +24427,12 @@ "staging": { "1.0.0": [ { - "ADDRESS": "0xe2e5428F972d9C0a5Ba433e0c402752b472dB248", + "ADDRESS": "0xAd99305a4277B417d1711CB358Dcf124181Ec3C3", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2024-06-14 09:37:49", + "TIMESTAMP": "2024-12-06 20:05:58", "CONSTRUCTOR_ARGS": "0x0000000000000000000000009295ee1d8c5b022be115a2ad3c30c72e34e7f0960000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619", "SALT": "", - "VERIFIED": "false" + "VERIFIED": "true" } ] }, diff --git a/deployments/polygon.staging.json b/deployments/polygon.staging.json index d029881b4..c7129261c 100644 --- a/deployments/polygon.staging.json +++ b/deployments/polygon.staging.json @@ -46,7 +46,7 @@ "CelerCircleBridgeFacet": "0x371E073f6A09DCBEE1D2Ac56E940F878a0Ba9DAE", "HopFacetOptimized": "0xf82135385765f1324257ffF74489F16382EBBb8A", "SymbiosisFacet": "0x21571D628B0bCBeb954D5933A604eCac35bAF2c7", - "AcrossFacetV3": "0xe2e5428F972d9C0a5Ba433e0c402752b472dB248", + "AcrossFacetV3": "0xAd99305a4277B417d1711CB358Dcf124181Ec3C3", "Permit2Proxy": "0x6FC01BC9Ff6Cdab694Ec8Ca41B21a2F04C8c37E5", "AcrossFacetPackedV3": "0x21767081Ff52CE5563A29f27149D01C7127775A2", "ReceiverAcrossV3": "0xe4F3DEF14D61e47c696374453CD64d438FD277F8" From cd471a9c1230dca6b9ab734eb3a568e93e7f1b77 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 6 Dec 2024 20:34:18 +0300 Subject: [PATCH 09/14] Fix log --- audit/auditLog.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/audit/auditLog.json b/audit/auditLog.json index a6888d109..520ad711b 100644 --- a/audit/auditLog.json +++ b/audit/auditLog.json @@ -72,7 +72,9 @@ }, "AcrossFacetPackedV3": { "1.0.0": [ - "audit20241007", + "audit20241007" + ], + "1.2.0": [ "audit20241206" ] }, @@ -111,7 +113,9 @@ }, "ReceiverAcrossV3": { "1.0.0": [ - "audit20241007", + "audit20241007" + ], + "1.0.1": [ "audit20241206" ] }, From ac60f3f373d69f0e7905e625996631c6b67cc3ac Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Mon, 9 Dec 2024 11:32:06 +0300 Subject: [PATCH 10/14] Update logs --- deployments/_deployments_log_file.json | 216 ++++++++++++++++++++++++- deployments/arbitrum.diamond.json | 6 +- deployments/arbitrum.json | 4 +- deployments/base.diamond.json | 6 +- deployments/base.json | 4 +- deployments/blast.diamond.json | 14 +- deployments/blast.json | 4 +- deployments/linea.diamond.json | 8 +- deployments/linea.json | 6 +- deployments/mainnet.diamond.json | 14 +- deployments/mainnet.json | 4 +- deployments/mode.diamond.json | 10 +- deployments/mode.json | 4 +- deployments/optimism.diamond.json | 14 +- deployments/optimism.json | 4 +- deployments/polygon.diamond.json | 12 +- deployments/polygon.json | 6 +- deployments/scroll.diamond.json | 14 +- deployments/scroll.json | 4 +- deployments/worldchain.diamond.json | 4 +- deployments/worldchain.json | 6 +- 21 files changed, 280 insertions(+), 84 deletions(-) diff --git a/deployments/_deployments_log_file.json b/deployments/_deployments_log_file.json index 2fdaadeda..cf01f11a6 100644 --- a/deployments/_deployments_log_file.json +++ b/deployments/_deployments_log_file.json @@ -24439,9 +24439,9 @@ "production": { "1.0.0": [ { - "ADDRESS": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", + "ADDRESS": "0xAd99305a4277B417d1711CB358Dcf124181Ec3C3", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2024-10-08 06:54:46", + "TIMESTAMP": "2024-12-06 21:32:42", "CONSTRUCTOR_ARGS": "0x0000000000000000000000009295ee1d8c5b022be115a2ad3c30c72e34e7f0960000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619", "SALT": "", "VERIFIED": "true" @@ -24603,12 +24603,12 @@ "production": { "1.0.0": [ { - "ADDRESS": "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92", + "ADDRESS": "0xAd99305a4277B417d1711CB358Dcf124181Ec3C3", "OPTIMIZER_RUNS": "1000000", - "TIMESTAMP": "2024-12-02T07:45:31.618Z", + "TIMESTAMP": "2024-12-06 22:46:02", "CONSTRUCTOR_ARGS": "0x00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec640000000000000000000000004200000000000000000000000000000000000006", "SALT": "", - "VERIFIED": true + "VERIFIED": "false" } ] } @@ -24638,6 +24638,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:44:47", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000002dfadab8266483bed9fd9a292ce56596a2d1378d0000000000000000000000006f26bf09b1c792e3228e5467807a900a503c028100000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24664,6 +24674,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:19:05", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000002dfadab8266483bed9fd9a292ce56596a2d1378d000000000000000000000000e35e9842fceaca96570b734083f4a58e8f7c5f2a00000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24678,6 +24698,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 23:02:55", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000002dfadab8266483bed9fd9a292ce56596a2d1378d0000000000000000000000005c7bcd6e7de5423a257d81b442095a1a6ced35c500000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24692,6 +24722,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:19:11", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000007078d1de45c7d3e87f71d5da663db2a8ee1dfebe0000000000000000000000003bad7ad0728f9917d1bf08af5782dcbd516cdd9600000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24706,6 +24746,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:19:14", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000002dfadab8266483bed9fd9a292ce56596a2d1378d0000000000000000000000009295ee1d8c5b022be115a2ad3c30c72e34e7f09600000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] }, "staging": { @@ -24732,6 +24782,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:19:17", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000007078d1de45c7d3e87f71d5da663db2a8ee1dfebe0000000000000000000000002d509190ed0172ba588407d4c2df918f955cc6e100000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24746,6 +24806,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xE264aD3F63ccf1399AD704C730d9c9c3847E8177", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:19:15", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000002a202ed587f0bc7dfa80ea1dd943d8470492dd0f0000000000000000000000007e63a5f1a8f0b4d0934b2f2327daed3f6bb2ee7500000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24760,6 +24830,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:21:17", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000007078d1de45c7d3e87f71d5da663db2a8ee1dfebe0000000000000000000000003bad7ad0728f9917d1bf08af5782dcbd516cdd9600000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24774,6 +24854,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:19:15", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f0000000000000000000000004dac9d1769b9b304cb04741dcdeb2fc14abdf11000000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec6400000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24811,7 +24901,17 @@ "TIMESTAMP": "2024-12-02T07:45:33.646Z", "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f000000000000000000000000d9318ffe1ebbfa71049a443e623be566067c9d6b00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec6400000000000000000000000000000000000000000000000000000000000186a0", "SALT": "", - "VERIFIED": true + "VERIFIED": "true" + } + ], + "1.0.1": [ + { + "ADDRESS": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:44:33", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f000000000000000000000000d9318ffe1ebbfa71049a443e623be566067c9d6b00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec6400000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" } ] } @@ -24841,6 +24941,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:32:48", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000006f26bf09b1c792e3228e5467807a900a503c0281000000000000000000000000420000000000000000000000000000000000000600000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24855,6 +24965,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-07 13:59:53", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000005c7bcd6e7de5423a257d81b442095a1a6ced35c5000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24869,6 +24989,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:32:49", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000003bad7ad0728f9917d1bf08af5782dcbd516cdd96000000000000000000000000420000000000000000000000000000000000000600000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24883,6 +25013,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-07 13:35:24", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000009295ee1d8c5b022be115a2ad3c30c72e34e7f0960000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61900000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] }, "staging": { @@ -24909,6 +25049,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:32:55", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec64000000000000000000000000420000000000000000000000000000000000000600000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24923,6 +25073,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:32:49", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000e35e9842fceaca96570b734083f4a58e8f7c5f2a00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab100000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] }, "staging": { @@ -24949,6 +25109,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:35:13", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000003bad7ad0728f9917d1bf08af5782dcbd516cdd96000000000000000000000000530000000000000000000000000000000000000400000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24963,6 +25133,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x60b6710c04D44273F6F5C2F1c871Aa9e856bED12", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:32:55", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000007e63a5f1a8f0b4d0934b2f2327daed3f6bb2ee75000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f00000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -24977,6 +25157,16 @@ "SALT": "", "VERIFIED": "true" } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 21:30:23", + "CONSTRUCTOR_ARGS": "0x0000000000000000000000002d509190ed0172ba588407d4c2df918f955cc6e1000000000000000000000000430000000000000000000000000000000000000400000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -25003,7 +25193,17 @@ "TIMESTAMP": "2024-12-02T07:45:31.821Z", "CONSTRUCTOR_ARGS": "0x00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec64000000000000000000000000420000000000000000000000000000000000000600000000000000000000000011f11121df7256c40339393b0fb045321022ce44", "SALT": "", - "VERIFIED": true + "VERIFIED": "true" + } + ], + "1.2.0": [ + { + "ADDRESS": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-06 22:49:43", + "CONSTRUCTOR_ARGS": "0x00000000000000000000000009aea4b2242abc8bb4bb78d537a67a245a7bec64000000000000000000000000420000000000000000000000000000000000000600000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" } ] } @@ -25773,4 +25973,4 @@ } } } -} +} \ No newline at end of file diff --git a/deployments/arbitrum.diamond.json b/deployments/arbitrum.diamond.json index 19e5cceaf..dd6af1d38 100644 --- a/deployments/arbitrum.diamond.json +++ b/deployments/arbitrum.diamond.json @@ -133,9 +133,9 @@ "Name": "StargateFacetV2", "Version": "1.0.1" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { "Name": "AcrossFacetV3", @@ -158,7 +158,7 @@ "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", diff --git a/deployments/arbitrum.json b/deployments/arbitrum.json index 570c0c5db..444c77ef4 100644 --- a/deployments/arbitrum.json +++ b/deployments/arbitrum.json @@ -51,8 +51,8 @@ "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } \ No newline at end of file diff --git a/deployments/base.diamond.json b/deployments/base.diamond.json index 88eb383ab..4630dcc67 100644 --- a/deployments/base.diamond.json +++ b/deployments/base.diamond.json @@ -121,9 +121,9 @@ "Name": "StargateFacetV2", "Version": "1.0.1" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0x00990C0FfBB7eAB014351652aFB65AaE00db43A4": { "Name": "", @@ -150,7 +150,7 @@ "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0xeC03B65CbDc5f8858b02F44EBa54C90664249fb1", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "", diff --git a/deployments/base.json b/deployments/base.json index 640f520a4..e17b16771 100644 --- a/deployments/base.json +++ b/deployments/base.json @@ -40,8 +40,8 @@ "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" diff --git a/deployments/blast.diamond.json b/deployments/blast.diamond.json index dd301a901..add4259ad 100644 --- a/deployments/blast.diamond.json +++ b/deployments/blast.diamond.json @@ -69,13 +69,13 @@ "Name": "AcrossFacet", "Version": "2.0.0" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { - "Name": "", - "Version": "" + "Name": "GasZipFacet", + "Version": "2.0.0" }, "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { "Name": "AcrossFacetV3", @@ -86,15 +86,15 @@ "ERC20Proxy": "0xA950Ac46b0b844c0564d18A54A9685e614B9086C", "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", - "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverStargateV2": "", "RelayerCelerIM": "", - "TokenWrapper": "0xF2ee649caB7a0edEdED7a27821B0aCDF77778aeD", - "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" + "TokenWrapper": "0xF2ee649caB7a0edEdED7a27821B0aCDF77778aeD" } } } \ No newline at end of file diff --git a/deployments/blast.json b/deployments/blast.json index 692da772b..33341afad 100644 --- a/deployments/blast.json +++ b/deployments/blast.json @@ -27,8 +27,8 @@ "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" diff --git a/deployments/linea.diamond.json b/deployments/linea.diamond.json index 3502dbf03..54799d607 100644 --- a/deployments/linea.diamond.json +++ b/deployments/linea.diamond.json @@ -109,9 +109,9 @@ "Name": "", "Version": "" }, - "0x922D1c381Cb5b0AFAAe9E7C86ed34FDE337766b0": { + "0x60b6710c04D44273F6F5C2F1c871Aa9e856bED12": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0xe07c030dDC7Fb9ca23b633b1028106DAA5fdbF96": { "Name": "EmergencyPauseFacet", @@ -134,11 +134,11 @@ "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x68B21d21509446Bf5449B6F5F8aBD4b3cfcbc3f8", "Permit2Proxy": "", - "Receiver": "0xdcBEcDE898c067cA58ABD01a7de51660bBD5A897", "ReceiverAcrossV3": "0x4BB377A1A624bDeF72d352891dc5E64087345fe6", + "Receiver": "0xdcBEcDE898c067cA58ABD01a7de51660bBD5A897", "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", "RelayerCelerIM": "", "TokenWrapper": "0xf6C9605c6E231C1547b7a6545d93e7233f97322a" } } -} +} \ No newline at end of file diff --git a/deployments/linea.json b/deployments/linea.json index 3943a1634..071613f58 100644 --- a/deployments/linea.json +++ b/deployments/linea.json @@ -37,8 +37,8 @@ "LiFiDEXAggregator": "0xcaA342e4f781d63EF41E220D7622B97E66BAEcF3", "EmergencyPauseFacet": "0xe07c030dDC7Fb9ca23b633b1028106DAA5fdbF96", "AcrossFacetV3": "0x2531368BAca8c5E85031FC0a9a2f148b65da389A", - "ReceiverAcrossV3": "0x4BB377A1A624bDeF72d352891dc5E64087345fe6", - "AcrossFacetPackedV3": "0x922D1c381Cb5b0AFAAe9E7C86ed34FDE337766b0", + "ReceiverAcrossV3": "0xE264aD3F63ccf1399AD704C730d9c9c3847E8177", + "AcrossFacetPackedV3": "0x60b6710c04D44273F6F5C2F1c871Aa9e856bED12", "GasZipFacet": "0x75943d7305310635945736D00235d825181018f3", "GasZipPeriphery": "0x0ec6D2eEb94541C51620830D151995fCFf83Aa74" -} +} \ No newline at end of file diff --git a/deployments/mainnet.diamond.json b/deployments/mainnet.diamond.json index c8875fd41..221b8d7af 100644 --- a/deployments/mainnet.diamond.json +++ b/deployments/mainnet.diamond.json @@ -157,9 +157,9 @@ "Name": "StargateFacetV2", "Version": "1.0.1" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0x00990C0FfBB7eAB014351652aFB65AaE00db43A4": { "Name": "", @@ -170,8 +170,8 @@ "Version": "1.0.0" }, "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { - "Name": "", - "Version": "" + "Name": "GasZipFacet", + "Version": "2.0.0" }, "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { "Name": "AcrossFacetV3", @@ -182,15 +182,15 @@ "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", - "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } } \ No newline at end of file diff --git a/deployments/mainnet.json b/deployments/mainnet.json index 6cdca6796..3caf68b7b 100644 --- a/deployments/mainnet.json +++ b/deployments/mainnet.json @@ -58,8 +58,8 @@ "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" diff --git a/deployments/mode.diamond.json b/deployments/mode.diamond.json index fe73413a8..4083f8c32 100644 --- a/deployments/mode.diamond.json +++ b/deployments/mode.diamond.json @@ -82,23 +82,23 @@ "Version": "1.0.0" }, "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { - "Name": "", - "Version": "" + "Name": "GasZipFacet", + "Version": "2.0.0" } }, "Periphery": { "ERC20Proxy": "0xA950Ac46b0b844c0564d18A54A9685e614B9086C", "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "", - "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverStargateV2": "", "RelayerCelerIM": "", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", - "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } } \ No newline at end of file diff --git a/deployments/mode.json b/deployments/mode.json index 59a8bdc0f..7c7bd1045 100644 --- a/deployments/mode.json +++ b/deployments/mode.json @@ -27,8 +27,8 @@ "LiFiDEXAggregator": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } \ No newline at end of file diff --git a/deployments/optimism.diamond.json b/deployments/optimism.diamond.json index d098cf278..ffd2da756 100644 --- a/deployments/optimism.diamond.json +++ b/deployments/optimism.diamond.json @@ -133,9 +133,9 @@ "Name": "StargateFacetV2", "Version": "1.0.1" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0x00990C0FfBB7eAB014351652aFB65AaE00db43A4": { "Name": "", @@ -146,8 +146,8 @@ "Version": "1.0.0" }, "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { - "Name": "", - "Version": "" + "Name": "GasZipFacet", + "Version": "2.0.0" }, "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { "Name": "AcrossFacetV3", @@ -158,15 +158,15 @@ "ERC20Proxy": "0x5741A7FfE7c39Ca175546a54985fA79211290b51", "Executor": "0x2dfaDAB8266483beD9Fd9A292Ce56596a2D1378D", "FeeCollector": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", - "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } } \ No newline at end of file diff --git a/deployments/optimism.json b/deployments/optimism.json index 1e158644e..f425971b2 100644 --- a/deployments/optimism.json +++ b/deployments/optimism.json @@ -50,8 +50,8 @@ "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } \ No newline at end of file diff --git a/deployments/polygon.diamond.json b/deployments/polygon.diamond.json index 44626fb1c..34437ad55 100644 --- a/deployments/polygon.diamond.json +++ b/deployments/polygon.diamond.json @@ -133,11 +133,11 @@ "Name": "StargateFacetV2", "Version": "1.0.1" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, - "0x00990C0FfBB7eAB014351652aFB65AaE00db43A4": { + "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { "Name": "", "Version": "" }, @@ -148,10 +148,6 @@ "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { "Name": "GasZipFacet", "Version": "2.0.0" - }, - "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { - "Name": "AcrossFacetV3", - "Version": "1.0.0" } }, "Periphery": { @@ -162,7 +158,7 @@ "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0x050e198E36A73a1e32F15C3afC58C4506d82f657", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "0x6a8b11bF29C0546991DEcD6E0Db8cC7Fda22bA97", diff --git a/deployments/polygon.json b/deployments/polygon.json index d9b402b6a..cf826115c 100644 --- a/deployments/polygon.json +++ b/deployments/polygon.json @@ -52,9 +52,9 @@ "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", - "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "AcrossFacetV3": "0xAd99305a4277B417d1711CB358Dcf124181Ec3C3", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9" diff --git a/deployments/scroll.diamond.json b/deployments/scroll.diamond.json index 79f7c9235..3fe6a9781 100644 --- a/deployments/scroll.diamond.json +++ b/deployments/scroll.diamond.json @@ -81,9 +81,9 @@ "Name": "AcrossFacet", "Version": "2.0.0" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0x00990C0FfBB7eAB014351652aFB65AaE00db43A4": { "Name": "", @@ -94,8 +94,8 @@ "Version": "1.0.0" }, "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849": { - "Name": "", - "Version": "" + "Name": "GasZipFacet", + "Version": "2.0.0" }, "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { "Name": "AcrossFacetV3", @@ -106,15 +106,15 @@ "ERC20Proxy": "0xA950Ac46b0b844c0564d18A54A9685e614B9086C", "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", + "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", "LiFiDEXAggregator": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", "ReceiverStargateV2": "0x1493e7B8d4DfADe0a178dAD9335470337A3a219A", "RelayerCelerIM": "", - "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d", - "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" + "TokenWrapper": "0x5215E9fd223BC909083fbdB2860213873046e45d" } } } \ No newline at end of file diff --git a/deployments/scroll.json b/deployments/scroll.json index 137126dab..bb4d3958e 100644 --- a/deployments/scroll.json +++ b/deployments/scroll.json @@ -31,8 +31,8 @@ "LiFiDEXAggregator": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", "EmergencyPauseFacet": "0x6F2baA7cd5F156CA1B132F7FF11E0fa2aD775F61", "AcrossFacetV3": "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", - "AcrossFacetPackedV3": "0x20F3FFf5A89e988c4109A6e496a839480B1B558f", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "GasZipFacet": "0xF5c923a087fb3c554579e2DD10AB6E37E0f6F849", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3" } \ No newline at end of file diff --git a/deployments/worldchain.diamond.json b/deployments/worldchain.diamond.json index dbce21a66..1b377b4ee 100644 --- a/deployments/worldchain.diamond.json +++ b/deployments/worldchain.diamond.json @@ -54,8 +54,8 @@ "Version": "1.0.1" }, "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92": { - "Name": "AcrossFacetV3", - "Version": "1.0.0" + "Name": "", + "Version": "" }, "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57": { "Name": "AcrossFacetPackedV3", diff --git a/deployments/worldchain.json b/deployments/worldchain.json index e1b23bab1..8e0311b6a 100644 --- a/deployments/worldchain.json +++ b/deployments/worldchain.json @@ -13,8 +13,8 @@ "StandardizedCallFacet": "0xe6C6A35684308f2DaadbeeA50B62CFEaAFaa407E", "LiFiDiamond": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", "EmergencyPauseFacet": "0xF6Eff8df65Fc4a4c1528761Aa727b5471956A844", - "AcrossFacetV3": "0xB5dD83183fD7CCF859b227CA83663a034d5B2f92", - "AcrossFacetPackedV3": "0x90ADbFc03002aaA3d9FEdf2517D593CfD93e6c57", + "AcrossFacetV3": "0xAd99305a4277B417d1711CB358Dcf124181Ec3C3", + "AcrossFacetPackedV3": "0x21a786957c69424A4353Afe743242Bd9Db3cC07b", "ERC20Proxy": "0x98750e70Cf1313D9702f0f57D399DD0bA05d16E0", "Executor": "0xd9318fFE1EbbfA71049A443e623Be566067C9D6B", "FeeCollector": "0x50D5a8aCFAe13Dceb217E9a071F6c6Bd5bDB4155", @@ -22,7 +22,7 @@ "LiFuelFeeCollector": "0x8f023b4193a6b18C227B4a755f8e28B3D30Ef9a1", "TokenWrapper": "0x603a538477d44064eA5A5d8C345b4Ff6fca1142a", "LiFiDEXAggregator": "0x2321F1a63A683a1F3634Dbe1CbA0d657D5F56d54", - "ReceiverAcrossV3": "0xD263a23453CB9A77860ed6393A2B9a55AF70EFAb", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "GasZipFacet": "0xb40044Bf27c2448e05e1f34ED83Ca4A3DfA54D19", "GasZipPeriphery": "0x76aE215b11797b32397d878e6f3E65081ff58b13" } \ No newline at end of file From 48d3139fef29bcb1728406b74cc725604a2820b1 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Tue, 10 Dec 2024 11:36:48 +0300 Subject: [PATCH 11/14] Deploy to zksync --- deployments/_deployments_log_file.json | 22 +++++++++++++++++++++- deployments/zksync.json | 4 ++-- script/deploy/deploySingleContract.sh | 2 +- script/helperFunctions.sh | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/deployments/_deployments_log_file.json b/deployments/_deployments_log_file.json index cf01f11a6..bc1c618b0 100644 --- a/deployments/_deployments_log_file.json +++ b/deployments/_deployments_log_file.json @@ -24889,6 +24889,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "1.0.1": [ + { + "ADDRESS": "0x68cb042aD93608e819b699427726e5c5E1A5F2dC", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-10 11:11:50", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000156cebba59deb2cb23742f70dcb0a11cc775591f000000000000000000000000a9bfa49f26733271f4fd34a4b57bb7c563ae056a000000000000000000000000e0b015e54d54fc84a6cb9b666099c46ade9335ff00000000000000000000000000000000000000000000000000000000000186a0", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -25181,6 +25191,16 @@ "SALT": "", "VERIFIED": "false" } + ], + "1.2.0": [ + { + "ADDRESS": "0x45C83B209878601d21604301dfE25bD6D0BBC218", + "OPTIMIZER_RUNS": "1000000", + "TIMESTAMP": "2024-12-10 10:31:33", + "CONSTRUCTOR_ARGS": "0x000000000000000000000000e0b015e54d54fc84a6cb9b666099c46ade9335ff0000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a9100000000000000000000000011f1022ca6adef6400e5677528a80d49a069c00c", + "SALT": "", + "VERIFIED": "true" + } ] } }, @@ -25973,4 +25993,4 @@ } } } -} \ No newline at end of file +} diff --git a/deployments/zksync.json b/deployments/zksync.json index 750531be8..77781aadd 100644 --- a/deployments/zksync.json +++ b/deployments/zksync.json @@ -21,8 +21,8 @@ "CBridgeFacetPacked": "0xCe81D9bB9D9605FFF296CCF8Af6b6B38f02Cf15d", "LiFiDEXAggregator": "0x1F683faf1E2a770aa75f7B2e92117A5c11183E9C", "AcrossFacetV3": "0x2e47355B70D6935C6A69d5F67e0aFe437791138e", - "ReceiverAcrossV3": "0xFa94c1A99799B3cA89DE6cbB3ccCDEcf1da62aFE", - "AcrossFacetPackedV3": "0x9243578F60a2A3821642481b5851578cE92d9a78", + "ReceiverAcrossV3": "0x68cb042aD93608e819b699427726e5c5E1A5F2dC", + "AcrossFacetPackedV3": "0x45C83B209878601d21604301dfE25bD6D0BBC218", "GasZipFacet": "0x313c27Aad40c7e0A0b923b539F05617D8114566D", "GasZipPeriphery": "0x4000f76450d9d40558fd60F66863F583B7A5BCCb", "Permit2Proxy": "0x6275f6631c955DC5dA9fBe8Dc7f24a3A5919443A" diff --git a/script/deploy/deploySingleContract.sh b/script/deploy/deploySingleContract.sh index 15449095d..f4a08c373 100755 --- a/script/deploy/deploySingleContract.sh +++ b/script/deploy/deploySingleContract.sh @@ -225,7 +225,7 @@ deploySingleContract() { if [[ $NETWORK == "zksync" ]]; then # Deploy zksync scripts using the zksync specific fork of forge from Docker - RAW_RETURN_DATA=$(docker run --rm -it --volume .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync -e DEPLOYSALT=$DEPLOYSALT -e NETWORK=$NETWORK -e FILE_SUFFIX=$FILE_SUFFIX -e PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") foundry-zksync forge script "$FULL_SCRIPT_PATH" -f $NETWORK --json --silent --broadcast --skip-simulation --slow --zksync) + RAW_RETURN_DATA=$(docker run --rm -it --volume .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync -e DEPLOYSALT=$DEPLOYSALT -e NETWORK=$NETWORK -e FILE_SUFFIX=$FILE_SUFFIX -e PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") foundry-zksync forge script "$FULL_SCRIPT_PATH" -f $NETWORK --json --broadcast --skip-simulation --slow --zksync) else # try to execute call RAW_RETURN_DATA=$(DEPLOYSALT=$DEPLOYSALT CREATE3_FACTORY_ADDRESS=$CREATE3_FACTORY_ADDRESS NETWORK=$NETWORK FILE_SUFFIX=$FILE_SUFFIX DEFAULT_DIAMOND_ADDRESS_DEPLOYSALT=$DEFAULT_DIAMOND_ADDRESS_DEPLOYSALT DEPLOY_TO_DEFAULT_DIAMOND_ADDRESS=$DEPLOY_TO_DEFAULT_DIAMOND_ADDRESS PRIVATE_KEY=$(getPrivateKey "$NETWORK" "$ENVIRONMENT") DIAMOND_TYPE=$DIAMOND_TYPE forge script "$FULL_SCRIPT_PATH" -f $NETWORK --json --broadcast --skip-simulation --legacy) diff --git a/script/helperFunctions.sh b/script/helperFunctions.sh index 81b3bad43..8573d540d 100755 --- a/script/helperFunctions.sh +++ b/script/helperFunctions.sh @@ -1456,7 +1456,7 @@ function verifyContract() { # Verify using foundry-zksync from docker image docker run --rm -it -v .:/foundry -u $(id -u):$(id -g) -e FOUNDRY_PROFILE=zksync foundry-zksync forge verify-contract --zksync --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 else - forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-ar --zksyncgs $ARGS --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 + forge verify-contract --watch --chain "$CHAIN_ID" "$ADDRESS" "$FULL_PATH" --constructor-args $ARGS --skip-is-verified-check -e "${!API_KEY}" >/dev/null 2>&1 fi fi fi From d75d0a0c98785c5633e16fd9ce30574cfbc8b386 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Thu, 12 Dec 2024 11:35:54 +0300 Subject: [PATCH 12/14] Update logs --- deployments/zksync.diamond.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deployments/zksync.diamond.json b/deployments/zksync.diamond.json index ae9fc63b8..7b911856d 100644 --- a/deployments/zksync.diamond.json +++ b/deployments/zksync.diamond.json @@ -65,9 +65,9 @@ "Name": "AcrossFacetV3", "Version": "1.0.0" }, - "0x9243578F60a2A3821642481b5851578cE92d9a78": { + "0x45C83B209878601d21604301dfE25bD6D0BBC218": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0xcF8c70683D7c0E2a094348896A46407646b94859": { "Name": "EmergencyPauseFacet", @@ -86,7 +86,7 @@ "LiFiDEXAggregator": "0x1F683faf1E2a770aa75f7B2e92117A5c11183E9C", "LiFuelFeeCollector": "0xB87C536E048Cfc082187E559fCFeFc3f1c89aEc7", "Permit2Proxy": "0x6275f6631c955DC5dA9fBe8Dc7f24a3A5919443A", - "ReceiverAcrossV3": "0xFa94c1A99799B3cA89DE6cbB3ccCDEcf1da62aFE", + "ReceiverAcrossV3": "0x68cb042aD93608e819b699427726e5c5E1A5F2dC", "Receiver": "0xdeDB2DAe4a9BC63910a722a3b7DC930C7E6f6421", "ReceiverStargateV2": "", "RelayerCelerIM": "0xFf9565e1C4f01C368444D2bE4B9ef36ce7E95541", From 20affd6b12a7efea431950d3e69ff1cc34301b40 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Thu, 12 Dec 2024 11:46:39 +0300 Subject: [PATCH 13/14] Update logs for blast and mode --- deployments/blast.diamond.json | 2 +- deployments/mode.diamond.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/deployments/blast.diamond.json b/deployments/blast.diamond.json index add4259ad..cc83e9515 100644 --- a/deployments/blast.diamond.json +++ b/deployments/blast.diamond.json @@ -90,7 +90,7 @@ "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "0x6307119078556Fc8aD77781DFC67df20d75FB4f9", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverStargateV2": "", "RelayerCelerIM": "", diff --git a/deployments/mode.diamond.json b/deployments/mode.diamond.json index 4083f8c32..5e804f9e4 100644 --- a/deployments/mode.diamond.json +++ b/deployments/mode.diamond.json @@ -69,9 +69,9 @@ "Name": "GenericSwapFacetV3", "Version": "1.0.0" }, - "0x20F3FFf5A89e988c4109A6e496a839480B1B558f": { + "0x21a786957c69424A4353Afe743242Bd9Db3cC07b": { "Name": "AcrossFacetPackedV3", - "Version": "1.0.0" + "Version": "1.2.0" }, "0x6e00e0a7685Ca22c288d56D9E7924746B5043Ee7": { "Name": "AcrossFacetV3", @@ -91,10 +91,10 @@ "Executor": "0x7078d1DE45C7D3e87f71D5DA663db2a8Ee1dfEbe", "FeeCollector": "0xF048e5816B0C7951AC179f656C5B86e5a79Bd7b5", "GasZipPeriphery": "0x9a21E33F1a78b17DAd32010CeDB9Fd2F071C17d3", - "LiFiDEXAggregator": "0x6140b987d6B51Fd75b66C3B07733Beb5167c42fc", + "LiFiDEXAggregator": "0x78bF01555bCF05e6B1d4dad017dBD0A105652DC9", "LiFuelFeeCollector": "0xc02FFcdD914DbA646704439c6090BAbaD521d04C", "Permit2Proxy": "", - "ReceiverAcrossV3": "0xB9CEc304899037E661F49DdFa7f64943b5920072", + "ReceiverAcrossV3": "0xca6e6B692F568055adA0bF72A06D1EBbC938Fb23", "Receiver": "0x0561fFe9855541C02D17951c93405A4407Df74BC", "ReceiverStargateV2": "", "RelayerCelerIM": "", From 34dcdc106f55eda32adaae7cbea9621b6cf4ae9e Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Thu, 12 Dec 2024 12:34:16 +0300 Subject: [PATCH 14/14] Update logs for linea --- deployments/linea.diamond.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/linea.diamond.json b/deployments/linea.diamond.json index 54799d607..739f83773 100644 --- a/deployments/linea.diamond.json +++ b/deployments/linea.diamond.json @@ -134,7 +134,7 @@ "LiFiDEXAggregator": "", "LiFuelFeeCollector": "0x68B21d21509446Bf5449B6F5F8aBD4b3cfcbc3f8", "Permit2Proxy": "", - "ReceiverAcrossV3": "0x4BB377A1A624bDeF72d352891dc5E64087345fe6", + "ReceiverAcrossV3": "0xE264aD3F63ccf1399AD704C730d9c9c3847E8177", "Receiver": "0xdcBEcDE898c067cA58ABD01a7de51660bBD5A897", "ReceiverStargateV2": "0x6CA57d9846f9a1fd48368762b743a047eC4f81A6", "RelayerCelerIM": "",