diff --git a/broadcast/056DeployOPAdapter.s.sol/1/run-latest.json b/broadcast/056DeployOPAdapter.s.sol/1/run-latest.json new file mode 100644 index 000000000..56fe3d01a --- /dev/null +++ b/broadcast/056DeployOPAdapter.s.sol/1/run-latest.json @@ -0,0 +1,54 @@ +{ + "transactions": [ + { + "hash": "0x7ac780398b1c615d246de6de420d9c965c91ba23ea66e56282cda339fbcc458e", + "transactionType": "CREATE", + "contractName": "OP_Adapter", + "contractAddress": "0x44857a6b740d2c7eb362901017971d42427f3838", + "function": null, + "arguments": [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f", + "0x88FF1e5b602916615391F55854588EFcBB7663f0", + "0x0000000000000000000000000000000000000000", + "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d", + "21" + ], + "transaction": { + "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", + "gas": "0xfbdda", + "value": "0x0", + "input": "0x610180806040523461026f5760e081610fa780380380916100208285610273565b83398101031261026f578051906001600160a01b038216820361026f576020810151916001600160a01b0383169081840361026f576040830151906001600160a01b038216820361026f576060840151906001600160a01b038216820361026f5760808501516001600160a01b0381169690939087850361026f5760a08701516001600160a01b0381169790919088830361026f5760c001519263ffffffff8416840361026f5760805260c05260e05260a0525f80604051602081019063011a412160e61b8252600481526100f6602482610273565b5190885afa3d15610268573d6001600160401b0381116102545760405190610128601f8201601f191660200183610273565b81523d5f602083013e5b81610248575b81610212575b50610100526101205261014052610160526101f4575b604051610d109081610297823960805181818160fa015261024b015260a0518181816102c90152818161060001526106ae015260c0518181816104a60152610a92015260e05181818161020701526104db015261010051818181610287015261057501526101205181818161035a0152610a510152610140518181816103c1015281816108b201526109cb0152610160518181816107f30152610a0e0152f35b15901514610203575f80610154565b635110d79160e01b5f5260045ffd5b9050602081519101519060208110610237575b506001600160a01b031615155f61013e565b5f199060200360031b1b165f610225565b80516020149150610138565b634e487b7160e01b5f52604160045260245ffd5b6060610132565b5f80fd5b601f909101601f19168101906001600160401b038211908210176102545760405256fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816311eac85514610a75575080631efd482a14610a32578063299e9687146109ef57806335a2db6a146109ac57806352c8c75c1461030b5780635e743ef7146102ed5780636e400983146102ac578063775c0d031461026f578063927ede2d1461022b5780639748cf7c146101e75763e6eb8ade14610097575f80fd5b60403660031901126101e4576100ab610ab6565b6024359067ffffffffffffffff82116101e257366023830112156101e25781600401359067ffffffffffffffff82116101cf57602483019260248336920101116101cf57836001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b156101de57816001600160a01b0391604051928391633dbb202b60e01b835216948560048301526060602483015281838161015c606482018b8d610b02565b62030d40604483015203925af180156101d3576101ba575b50506101b47f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac4936040519384938452604060208501526040840191610b02565b0390a180f35b816101c491610acc565b6101cf57835f610174565b8380fd5b6040513d84823e3d90fd5b5080fd5b825b80fd5b50346101e457806003193601126101e45760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101e457806003193601126101e45760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101e457806003193601126101e45760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b50346101e457806003193601126101e457602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101e457806003193601126101e457602060405162030d408152f35b50608036600319011261078157610320610ab6565b602435906001600160a01b0382168092036107815760443591606435906001600160a01b03821680920361078157846001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169416938085145f1461049e57803b156101de57818091602460405180948193632e1a7d4d60e01b83528b60048401525af180156101d357610489575b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156101de57818691608460405180948193639a2ac6d560e01b835289600484015262030d406024840152606060448401528560648401525af180156101d35761046a575b5050907fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b93608093925b604051938452602084015260408301526060820152a180f35b816104789195949395610acc565b610485579091845f610427565b8480fd5b8161049391610acc565b61048557845f6103b6565b5050929091927f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116908186145f146108a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169081156107e157848261051592610b22565b6040516332dd704760e21b8152602081600481855afa90811561078d578891610798575b509060206001600160a01b03926024604051809581936352b7631960e11b8352886004840152165afa91821561078d578892610755575b5090917f0000000000000000000000000000000000000000000000000000000000000000919085805b6105ce575050505050917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9391608093610451565b8481111561074f57845b841561069857833b15610694578a604051634701287760e11b815282600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528a60448201528460648201528160848201528160a48201526107d060c4820152818160e481838a5af180156101d35761067f575b50505b810390811161066b5780610599565b634e487b7160e01b8a52601160045260248afd5b8161068991610acc565b610694578a5f610659565b8a80fd5b6040516337e9a82760e11b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166024820152604481018a9052606481018490526020816084818f895af1801561074457610701575b5061065c565b6020813d821161073c575b8161071960209383610acc565b81010312610738575167ffffffffffffffff811603610694575f6106fb565b8b80fd5b3d915061070c565b6040513d8e823e3d90fd5b806105d8565b9091506020813d602011610785575b8161077160209383610acc565b810103126107815751905f610570565b5f80fd5b3d9150610764565b6040513d8a823e3d90fd5b90506020813d6020116107d9575b816107b360209383610acc565b810103126107d55751906001600160a01b03821682036107d557906020610539565b8780fd5b3d91506107a6565b505050846001600160a01b03949392947f00000000000000000000000000000000000000000000000000000000000000001661081e868287610b22565b803b156101de5781809160646040518094819363262cc5ab60e11b83528960048401528b602484015262030d4060448401525af180156101d35761088b575b5050907fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9360809392610451565b816108999195949395610acc565b610485579091845f61085d565b50506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166108dd838287610b22565b803b15610781575f809160e46040518094819363041c592960e51b83528a600484015287602484015289604484015288606484015262030d40608484015260c060a48401528160c48401525af180156109a157610962575b50917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9391608093610451565b608093919550916109955f7fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9694610acc565b5f959193509193610935565b6040513d5f823e3d90fd5b34610781575f3660031901126107815760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610781575f3660031901126107815760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610781575f3660031901126107815760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610781575f366003190112610781576020906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600435906001600160a01b038216820361078157565b90601f8019910116810190811067ffffffffffffffff821117610aee57604052565b634e487b7160e01b5f52604160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0316916001600160a01b0360405192636eb1769f60e11b84523060048501521690816024840152602083604481875afa9283156109a1575f93610c7b575b508201809211610c67575f809160405193602085019163095ea7b360e01b83526024860152604485015260448452610ba0606485610acc565b60405193610baf604086610acc565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020860152519082865af13d15610c5a573d9067ffffffffffffffff8211610aee57604051610c21949092610c13601f8201601f191660200185610acc565b83523d5f602085013e610caf565b8051908115918215610c37575b50501561078157565b819250906020918101031261078157602001518015158103610781575f80610c2e565b91610c2192606091610caf565b634e487b7160e01b5f52601160045260245ffd5b9092506020813d602011610ca7575b81610c9760209383610acc565b810103126107815751915f610b67565b3d9150610c8a565b91925015610ccb57815115610cc2575090565b3b156107815790565b50805190811561078157602001fdfea26469706673582212202da86657dbd069af56df4256fc04a91432db64a4f5f3b4928b86c4218111f15f64736f6c634300081e0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000069d3cf86b2bf1a9e99875b7e2d9b6a84426c171f00000000000000000000000088ff1e5b602916615391f55854588efcbb7663f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028b5a0e9c621a5badaa536219b3a228c8168cf5d0000000000000000000000000000000000000000000000000000000000000015", + "nonce": "0x2db2", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3730409", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7ac780398b1c615d246de6de420d9c965c91ba23ea66e56282cda339fbcc458e", + "transactionIndex": "0x1f6", + "blockHash": "0xdc8c82ec0ff950d0d271e8c0b95956488da24f84d5477fcf25f75eab7ba6aa18", + "blockNumber": "0x16f5e2e", + "gasUsed": "0xc1be3", + "effectiveGasPrice": "0x34aa39d", + "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", + "to": null, + "contractAddress": "0x44857a6b740d2c7eb362901017971d42427f3838" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1766499077165, + "chain": 1, + "commit": "ab2a49a0" +} diff --git a/broadcast/deployed-addresses.json b/broadcast/deployed-addresses.json index 5ee37f3ec..fa2b972f1 100644 --- a/broadcast/deployed-addresses.json +++ b/broadcast/deployed-addresses.json @@ -172,6 +172,11 @@ "address": "0x89415a82d909a7238d69094C3Dd1dCC1aCbDa85C", "block_number": 22789839 }, + "OP_Adapter_57073": { + "address": "0x44857a6b740d2c7eb362901017971d42427f3838", + "block_number": 24075822, + "transaction_hash": "0x7ac780398b1c615d246de6de420d9c965c91ba23ea66e56282cda339fbcc458e" + }, "PermissionSplitterProxy": { "address": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", "block_number": 19084679, diff --git a/broadcast/deployed-addresses.md b/broadcast/deployed-addresses.md index 38bb47222..d4207761a 100644 --- a/broadcast/deployed-addresses.md +++ b/broadcast/deployed-addresses.md @@ -34,6 +34,7 @@ This file contains the latest deployed smart contract addresses from the broadca | LpTokenFactory | [0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d](https://etherscan.io/address/0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d) | | Mode_Adapter | [0xf1B59868697f3925b72889ede818B9E7ba0316d0](https://etherscan.io/address/0xf1B59868697f3925b72889ede818B9E7ba0316d0) | | MulticallHandler | [0x0F7Ae28dE1C8532170AD4ee566B5801485c13a0E](https://etherscan.io/address/0x0F7Ae28dE1C8532170AD4ee566B5801485c13a0E) | +| OP_Adapter_57073 | [0x44857a6b740D2c7eB362901017971D42427f3838](https://etherscan.io/address/0x44857a6b740D2c7eB362901017971D42427f3838) | | Optimism_Adapter | [0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b](https://etherscan.io/address/0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b) | | Optimism_Adapter | [0x3562e309C6C79626E5F0Cf746FB5Bf4f6b8EebE5](https://etherscan.io/address/0x3562e309C6C79626E5F0Cf746FB5Bf4f6b8EebE5) | | PermissionSplitterProxy | [0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7](https://etherscan.io/address/0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7) | @@ -105,12 +106,12 @@ This file contains the latest deployed smart contract addresses from the broadca ## Monad (143) -| Contract Name | Address | -| ------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| Helios | [0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64](https://monadscan.com//address/0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64) | -| MulticallHandler | [0xeC41F75c686e376Ab2a4F18bde263ab5822c4511](https://monadscan.com//address/0xeC41F75c686e376Ab2a4F18bde263ab5822c4511) | -| SpokePool | [0xd2ecb3afe598b746F8123CaE365a598DA831A449](https://monadscan.com//address/0xd2ecb3afe598b746F8123CaE365a598DA831A449) | -| SpokePoolPeriphery | [0xe9b0666DFfC176Df6686726CB9aaC78fD83D20d7](https://monadscan.com//address/0xe9b0666DFfC176Df6686726CB9aaC78fD83D20d7) | +| Contract Name | Address | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| Helios | [0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64](https://monadvision.com/address/0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64) | +| MulticallHandler | [0xeC41F75c686e376Ab2a4F18bde263ab5822c4511](https://monadvision.com/address/0xeC41F75c686e376Ab2a4F18bde263ab5822c4511) | +| SpokePool | [0xd2ecb3afe598b746F8123CaE365a598DA831A449](https://monadvision.com/address/0xd2ecb3afe598b746F8123CaE365a598DA831A449) | +| SpokePoolPeriphery | [0xe9b0666DFfC176Df6686726CB9aaC78fD83D20d7](https://monadvision.com/address/0xe9b0666DFfC176Df6686726CB9aaC78fD83D20d7) | ## Lens (232) diff --git a/generated/constants.json b/generated/constants.json index 8404baea4..f910a3c9b 100644 --- a/generated/constants.json +++ b/generated/constants.json @@ -54,8 +54,8 @@ "name": "Monad", "family": "NONE", "nativeToken": "MON", - "publicRPC": "https://rpc-mainnet.monadinfra.com/", - "blockExplorer": "https://monadscan.com/", + "publicRPC": "https://rpc-mainnet.monadinfra.com", + "blockExplorer": "https://monadvision.com", "cctpDomain": 15, "oftEid": 30390, "hypDomainId": 143 @@ -244,8 +244,8 @@ "name": "Monad Testnet", "family": "NONE", "nativeToken": "MON", - "publicRPC": "https://testnet-rpc.monad.xyz/", - "blockExplorer": "https://testnet.monvision.io/", + "publicRPC": "https://testnet-rpc.monad.xyz", + "blockExplorer": "https://testnet.monvision.io", "cctpDomain": 15, "oftEid": 40204, "hypDomainId": 10143 @@ -296,8 +296,8 @@ "nativeToken": "ETH", "publicRPC": "https://rpc-gel.inkonchain.com", "blockExplorer": "https://explorer.inkonchain.com", - "cctpDomain": -1, - "oftEid": -1, + "cctpDomain": 21, + "oftEid": 30339, "hypDomainId": 57073 }, "59144": { @@ -896,6 +896,7 @@ "8453": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "10143": "0xf817257fed379853cDe0fa4F97AB987181B1E5Ea", "42161": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + "57073": "0x2D270e6886d130D724215A266106e6832161EAEd", "59144": "0x176211869cA2b568f2A7D4EE941E073a821EE1ff", "80002": "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582", "84532": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", diff --git a/package.json b/package.json index 6e8200890..5eacff9b5 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "generate-constants-json": "ts-node ./script/utils/GenerateConstantsJson.ts" }, "dependencies": { - "@across-protocol/constants": "^3.1.88", + "@across-protocol/constants": "^3.1.94", "@coral-xyz/anchor": "^0.31.1", "@defi-wonderland/smock": "^2.3.4", "@eth-optimism/contracts": "^0.5.40", diff --git a/script/056DeployOPAdapter.s.sol b/script/056DeployOPAdapter.s.sol new file mode 100644 index 000000000..ba6881d1c --- /dev/null +++ b/script/056DeployOPAdapter.s.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { Script } from "forge-std/Script.sol"; +import { Test } from "forge-std/Test.sol"; +import { console } from "forge-std/console.sol"; +import { IERC20 } from "@openzeppelin/contracts-v4/token/ERC20/IERC20.sol"; +import { IL1StandardBridge } from "@eth-optimism/contracts/L1/messaging/IL1StandardBridge.sol"; +import { IOpUSDCBridgeAdapter } from "../contracts/external/interfaces/IOpUSDCBridgeAdapter.sol"; +import { ITokenMessenger } from "../contracts/external/interfaces/CCTPInterfaces.sol"; +import { WETH9Interface } from "../contracts/external/interfaces/WETH9Interface.sol"; +import { OP_Adapter } from "../contracts/chain-adapters/OP_Adapter.sol"; +import { Constants } from "./utils/Constants.sol"; + +// How to run: +// 1. `source .env` where `.env` has MNEMONIC="x x x ... x" and ETHERSCAN_API_KEY="x" entries +// 2. forge script script/056DeployOPAdapter.s.sol:DeployOPAdapter --rpc-url $NODE_URL_1 -vvvv +// 3. Verify the above works in simulation mode. +// 4. Deploy on mainnet by adding --broadcast --verify flags. +// 5. forge script script/056DeployOPAdapter.s.sol:DeployOPAdapter --rpc-url $NODE_URL_1 --broadcast --verify -vvvv +contract DeployOPAdapter is Script, Test, Constants { + function run() external { + string memory deployerMnemonic = vm.envString("MNEMONIC"); + uint256 spokeChainId = vm.envUint("SPOKE_CHAIN_ID"); + uint256 deployerPrivateKey = vm.deriveKey(deployerMnemonic, 0); + + // Get the current chain ID + uint256 chainId = block.chainid; + bool hasCctpDomain = hasCctpDomain(destinationChainId); + uint32 cctpDomain = hasCctpDomain ? getCircleDomainId(spokeChainId) : CCTP_NO_DOMAIN; + address cctpTokenMessenger = hasCctpDomain ? getL1Addresses(chainId).cctpV2TokenMessenger : address(0); + + // Verify this is being deployed on Ethereum mainnet or Sepolia + require( + chainId == getChainId("MAINNET") || chainId == getChainId("SEPOLIA"), + "Base_Adapter should only be deployed on Ethereum mainnet or Sepolia" + ); + + address weth = getWrappedNativeToken(chainId); + + // Get OP Stack addresses for hub and spoke chain IDs. + Constants.OpStackAddresses memory opStack = getOpStackAddresses(chainId, spokeChainId); + + vm.startBroadcast(deployerPrivateKey); + + // Deploy Base_Adapter with constructor parameters + OP_Adapter adapter = new OP_Adapter( + WETH9Interface(weth), // L1 WETH + IERC20(getUSDCAddress(chainId)), // L1 USDC + opStack.L1CrossDomainMessenger, // L1 Cross Domain Messenger + IL1StandardBridge(opStack.L1StandardBridge), // L1 Standard Bridge + IOpUSDCBridgeAdapter(opStack.L1OpUSDCBridgeAdapter), // L1 OP USDC Bridge + ITokenMessenger(cctpTokenMessenger), // CCTP (V2) Token Messenger + cctpDomain + ); + + // Log the deployed addresses + console.log("Chain ID:", chainId); + console.log("OP Adapter deployed to:", address(adapter)); + console.log("L1 WETH:", weth); + console.log("L1 Cross Domain Messenger:", opStack.L1CrossDomainMessenger); + console.log("L1 Standard Bridge:", opStack.L1StandardBridge); + console.log("L1 USDC:", getUSDCAddress(chainId)); + console.log("CCTP Token Messenger:", getL1Addresses(chainId).cctpV2TokenMessenger); + console.log("CCTP Domain:", cctpDomain); + + vm.stopBroadcast(); + } +} diff --git a/script/utils/Constants.sol b/script/utils/Constants.sol index 1d4b3551b..22daf8f2e 100644 --- a/script/utils/Constants.sol +++ b/script/utils/Constants.sol @@ -11,6 +11,8 @@ import { Script } from "forge-std/Script.sol"; contract Constants is Script { string public file; + uint32 constant CCTP_NO_DOMAIN = 2 ** 32 - 1; + constructor() { file = vm.readFile("generated/constants.json"); } @@ -85,7 +87,6 @@ contract Constants is Script { struct OpStackAddresses { address L1CrossDomainMessenger; address L1StandardBridge; - address L1BlastBridge; address L1OpUSDCBridgeAdapter; } @@ -216,18 +217,19 @@ contract Constants is Script { OpStackAddresses({ L1CrossDomainMessenger: vm.parseJsonAddress(file, string.concat(path, ".L1CrossDomainMessenger")), L1StandardBridge: vm.parseJsonAddress(file, string.concat(path, ".L1StandardBridge")), - L1BlastBridge: vm.parseJsonAddress(file, string.concat(path, ".L1BlastBridge")), L1OpUSDCBridgeAdapter: vm.parseJsonAddress(file, string.concat(path, ".L1OpUSDCBridgeAdapter")) }); } // Circle domain IDs mapping - function getCircleDomainId(uint256 chainId) public view returns (uint256) { + function getCircleDomainId(uint256 chainId) public view returns (uint32) { int256 cctpDomain = _getCctpDomain(chainId); if (cctpDomain == -1) { - revert("Circle domain ID not found"); + revert("Circle CCTP domain ID not found"); + } else if (cctpDomain < 0 || cctpDomain > 2 ** 32 - 1) { + revert("Invalid Circle CCTP domain ID"); } - return uint256(cctpDomain); + return uint32(uint256(cctpDomain)); } function hasCctpDomain(uint256 chainId) public view returns (bool) { diff --git a/script/utils/ExtractDeployedFoundryAddresses.ts b/script/utils/ExtractDeployedFoundryAddresses.ts index 72f40c001..b957527a6 100644 --- a/script/utils/ExtractDeployedFoundryAddresses.ts +++ b/script/utils/ExtractDeployedFoundryAddresses.ts @@ -178,29 +178,33 @@ function extractContractAddresses(broadcastFile: BroadcastFile): Contract[] { if (contractName === "ERC1967Proxy") { contractName = "SpokePool"; - } else if (contractName === "Universal_Adapter") { - const [, , , cctpDomainId, , oftDstEid] = tx.arguments; - - // Try to find a chain id in TEST_NETWORKS/PRODUCTION_NETWORKS that matches either cctpDomainId or oftDstEid - let matchingChainId: number | undefined = undefined; - + } else if (["Universal_Adapter", "OP_Adapter"].includes(contractName)) { + let cctpDomainId: string | undefined = undefined; + let oftDstEid: string | undefined = undefined; + + // nb. This is fragile. @todo: Improve. + switch (contractName) { + case "Universal_Adapter": + cctpDomainId = tx.arguments.at(3); + oftDstEid = tx.arguments.at(5); + break; + case "OP_Adapter": + cctpDomainId = tx.arguments.at(6); + break; + } const networks = broadcastFile.chainId in TEST_NETWORKS ? TEST_NETWORKS : PRODUCTION_NETWORKS; - for (const [chainIdString, chainInfo] of Object.entries(networks)) { - const chainId = Number(chainIdString); - + // Try to find a chain id in TEST_NETWORKS/PRODUCTION_NETWORKS that matches either cctpDomainId or oftDstEid + const chainId = Object.keys(networks).find((chainId) => { + const { cctpDomain, oftEid } = networks[Number(chainId)]; // Some chains may have properties for cctpDomainId or oftDstEid. Try to check both. - if ( - (chainInfo.cctpDomain !== undefined && chainInfo.cctpDomain?.toString() === cctpDomainId?.toString()) || - (chainInfo.oftEid !== undefined && chainInfo.oftEid?.toString() === oftDstEid?.toString()) - ) { - matchingChainId = chainId; - break; - } - } + return ( + (cctpDomain && cctpDomain.toString() === cctpDomainId) || (oftEid && oftEid.toString() === oftDstEid) + ); + }); - if (matchingChainId !== undefined) { - contractName = `Universal_Adapter_${matchingChainId}`; + if (chainId !== undefined) { + contractName += `_${chainId}`; } else { console.log( `No chainId found for cctpDomainId (${cctpDomainId}) or oftDstEid (${oftDstEid}) in PUBLIC_NETWORKS` diff --git a/yarn.lock b/yarn.lock index d911321b1..c4a77c93e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@across-protocol/constants@^3.1.88": - version "3.1.88" - resolved "https://registry.yarnpkg.com/@across-protocol/constants/-/constants-3.1.88.tgz#1ba756921a06bd5bd2d3750a934b1ceb624a6b66" - integrity sha512-pwvbDpaMm25VCsjc9G3gsIyWxY/mak+AGg0NHQszhS1nbKFFZxgJe6Qs5v9IIND7mlxTAXFmXNLOsjwC9U5Kkg== +"@across-protocol/constants@^3.1.94": + version "3.1.94" + resolved "https://registry.yarnpkg.com/@across-protocol/constants/-/constants-3.1.94.tgz#17c52c7234133df63411c6ea77133ed25c88c710" + integrity sha512-wZWgzELYjsaMqbtRqIgXz9u2nuJUEv+ivWoidreEsNbGL1TPorPtnC3nIobFKXB+hnbembxYWsj5Py2pGPZwQw== "@across-protocol/contracts@^0.1.4": version "0.1.4"