UNPKG

@tokamak-network/thanos-sdk

Version:
234 lines 12.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getBridgeAdapters = exports.getPortalsContracts = exports.getAllOEContracts = exports.getOEContract = exports.getContractInterfaceBedrock = void 0; const ethers_1 = require("ethers"); const L1StandardBridge_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L1StandardBridge.sol/L1StandardBridge.json")); const L2StandardBridge_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L2StandardBridge.sol/L2StandardBridge.json")); const OptimismMintableERC20_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/OptimismMintableERC20.sol/OptimismMintableERC20.json")); const OptimismPortal_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/OptimismPortal.sol/OptimismPortal.json")); const L1CrossDomainMessenger_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L1CrossDomainMessenger.sol/L1CrossDomainMessenger.json")); const L2CrossDomainMessenger_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L2CrossDomainMessenger.sol/L2CrossDomainMessenger.json")); const OptimismMintableERC20Factory_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/OptimismMintableERC20Factory.sol/OptimismMintableERC20Factory.json")); const ProxyAdmin_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/ProxyAdmin.sol/ProxyAdmin.json")); const L2OutputOracle_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L2OutputOracle.sol/L2OutputOracle.json")); const L1ERC721Bridge_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L1ERC721Bridge.sol/L1ERC721Bridge.json")); const L2ERC721Bridge_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L2ERC721Bridge.sol/L2ERC721Bridge.json")); const L1Block_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L1Block.sol/L1Block.json")); const L2ToL1MessagePasser_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L2ToL1MessagePasser.sol/L2ToL1MessagePasser.json")); const GasPriceOracle_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/GasPriceOracle.sol/GasPriceOracle.json")); const contracts_1 = require("@eth-optimism/contracts"); const core_utils_1 = require("@tokamak-network/core-utils"); const DisputeGameFactory_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/DisputeGameFactory.sol/DisputeGameFactory.json")); const OptimismPortal2_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/OptimismPortal2.sol/OptimismPortal2.json")); const FaultDisputeGame_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/FaultDisputeGame.sol/FaultDisputeGame.json")); const L1UsdcBridge_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L1UsdcBridge.sol/L1UsdcBridge.json")); const L2UsdcBridge_json_1 = __importDefault(require("@tokamak-network/thanos-contracts/forge-artifacts/L2UsdcBridge.sol/L2UsdcBridge.json")); const coercion_1 = require("./coercion"); const adapters_1 = require("../adapters"); const chain_constants_1 = require("./chain-constants"); const NAME_REMAPPING = { AddressManager: 'Lib_AddressManager', OVM_L1BlockNumber: 'iOVM_L1BlockNumber', WETH: 'WETH9', BedrockMessagePasser: 'L2ToL1MessagePasser', }; const getContractInterfaceBedrock = (name) => { let artifact = ''; switch (name) { case 'Lib_AddressManager': case 'AddressManager': artifact = ''; break; case 'L1CrossDomainMessenger': artifact = L1CrossDomainMessenger_json_1.default; break; case 'L1ERC721Bridge': artifact = L1ERC721Bridge_json_1.default; break; case 'L2OutputOracle': artifact = L2OutputOracle_json_1.default; break; case 'OptimismMintableERC20Factory': artifact = OptimismMintableERC20Factory_json_1.default; break; case 'ProxyAdmin': artifact = ProxyAdmin_json_1.default; break; case 'L1StandardBridge': artifact = L1StandardBridge_json_1.default; break; case 'L2StandardBridge': artifact = L2StandardBridge_json_1.default; break; case 'OptimismPortal': artifact = OptimismPortal_json_1.default; break; case 'L2CrossDomainMessenger': artifact = L2CrossDomainMessenger_json_1.default; break; case 'OptimismMintableERC20': artifact = OptimismMintableERC20_json_1.default; break; case 'L2ERC721Bridge': artifact = L2ERC721Bridge_json_1.default; break; case 'L1Block': artifact = L1Block_json_1.default; break; case 'L2ToL1MessagePasser': artifact = L2ToL1MessagePasser_json_1.default; break; case 'GasPriceOracle': artifact = GasPriceOracle_json_1.default; break; case 'DisputeGameFactory': artifact = DisputeGameFactory_json_1.default; break; case 'OptimismPortal2': artifact = OptimismPortal2_json_1.default; break; case 'FaultDisputeGame': artifact = FaultDisputeGame_json_1.default; break; case 'L1UsdcBridge': artifact = L1UsdcBridge_json_1.default; break; case 'L2UsdcBridge': artifact = L2UsdcBridge_json_1.default; break; } return new ethers_1.ethers.utils.Interface(artifact.abi); }; exports.getContractInterfaceBedrock = getContractInterfaceBedrock; const getOEContract = (contractName, l2ChainId, opts = {}) => { const addresses = chain_constants_1.CONTRACT_ADDRESSES[l2ChainId]; if (addresses === undefined && opts.address === undefined) { if (chain_constants_1.IGNORABLE_CONTRACTS.includes(contractName)) { return undefined; } else { throw new Error(`cannot get contract ${contractName} for unknown L2 chain ID ${l2ChainId}, you must provide an address`); } } const name = NAME_REMAPPING[contractName] || contractName; let iface; try { iface = (0, exports.getContractInterfaceBedrock)(name); } catch (err) { iface = (0, contracts_1.getContractInterface)(name); } return new ethers_1.Contract((0, coercion_1.toAddress)(opts.address || addresses.l1[contractName] || addresses.l2[contractName]), iface, opts.signerOrProvider); }; exports.getOEContract = getOEContract; const getAllOEContracts = (l2ChainId, opts = {}) => { var _a, _b, _c, _d; const addresses = chain_constants_1.CONTRACT_ADDRESSES[l2ChainId] || { l1: { AddressManager: undefined, L1CrossDomainMessenger: undefined, L1StandardBridge: undefined, StateCommitmentChain: undefined, CanonicalTransactionChain: undefined, BondManager: undefined, OptimismPortal: undefined, L2OutputOracle: undefined, DisputeGameFactory: undefined, OptimismPortal2: undefined, }, l2: chain_constants_1.DEFAULT_L2_CONTRACT_ADDRESSES, }; const l1Contracts = {}; for (const [contractName, contractAddress] of Object.entries(addresses.l1)) { l1Contracts[contractName] = (0, exports.getOEContract)(contractName, l2ChainId, { address: ((_b = (_a = opts.overrides) === null || _a === void 0 ? void 0 : _a.l1) === null || _b === void 0 ? void 0 : _b[contractName]) || contractAddress, signerOrProvider: opts.l1SignerOrProvider, }); } const l2Contracts = {}; for (const [contractName, contractAddress] of Object.entries(addresses.l2)) { l2Contracts[contractName] = (0, exports.getOEContract)(contractName, l2ChainId, { address: ((_d = (_c = opts.overrides) === null || _c === void 0 ? void 0 : _c.l2) === null || _d === void 0 ? void 0 : _d[contractName]) || contractAddress, signerOrProvider: opts.l2SignerOrProvider, }); } return { l1: l1Contracts, l2: l2Contracts, }; }; exports.getAllOEContracts = getAllOEContracts; const getPortalsContracts = (l2ChainId, opts = {}) => { var _a, _b, _c, _d; const addresses = chain_constants_1.CONTRACT_ADDRESSES[l2ChainId] || { l1: { OptimismPortal: undefined, L2OutputOracle: undefined, }, l2: chain_constants_1.DEFAULT_L2_CONTRACT_ADDRESSES, }; const l1Contracts = {}; for (const [contractName, contractAddress] of Object.entries(addresses.l1)) { l1Contracts[contractName] = (0, exports.getOEContract)(contractName, l2ChainId, { address: ((_b = (_a = opts.overrides) === null || _a === void 0 ? void 0 : _a.l1) === null || _b === void 0 ? void 0 : _b[contractName]) || contractAddress, signerOrProvider: opts.l1SignerOrProvider, }); } const l2Contracts = {}; for (const [contractName, contractAddress] of Object.entries(addresses.l2)) { l2Contracts[contractName] = (0, exports.getOEContract)(contractName, l2ChainId, { address: ((_d = (_c = opts.overrides) === null || _c === void 0 ? void 0 : _c.l2) === null || _d === void 0 ? void 0 : _d[contractName]) || contractAddress, signerOrProvider: opts.l2SignerOrProvider, }); } return { l1: l1Contracts, l2: l2Contracts, }; }; exports.getPortalsContracts = getPortalsContracts; const getBridgeAdapters = (l2ChainId, messenger, opts) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; const adapterData = Object.assign(Object.assign(Object.assign({}, (chain_constants_1.CONTRACT_ADDRESSES[l2ChainId] || ((_b = (_a = opts === null || opts === void 0 ? void 0 : opts.contracts) === null || _a === void 0 ? void 0 : _a.l1) === null || _b === void 0 ? void 0 : _b.L1StandardBridge) ? { Standard: { Adapter: adapters_1.StandardBridgeAdapter, l1Bridge: ((_d = (_c = opts === null || opts === void 0 ? void 0 : opts.contracts) === null || _c === void 0 ? void 0 : _c.l1) === null || _d === void 0 ? void 0 : _d.L1StandardBridge) || chain_constants_1.CONTRACT_ADDRESSES[l2ChainId].l1.L1StandardBridge, l2Bridge: core_utils_1.predeploys.L2StandardBridge, }, ETH: { Adapter: adapters_1.ETHBridgeAdapter, l1Bridge: ((_f = (_e = opts === null || opts === void 0 ? void 0 : opts.contracts) === null || _e === void 0 ? void 0 : _e.l1) === null || _f === void 0 ? void 0 : _f.L1StandardBridge) || chain_constants_1.CONTRACT_ADDRESSES[l2ChainId].l1.L1StandardBridge, l2Bridge: core_utils_1.predeploys.L2StandardBridge, }, NativeToken: { Adapter: adapters_1.NativeTokenBridgeAdapter, l1Bridge: ((_h = (_g = opts === null || opts === void 0 ? void 0 : opts.contracts) === null || _g === void 0 ? void 0 : _g.l1) === null || _h === void 0 ? void 0 : _h.L1StandardBridge) || chain_constants_1.CONTRACT_ADDRESSES[l2ChainId].l1.L1StandardBridge, l2Bridge: core_utils_1.predeploys.L2StandardBridge, }, Usdc: { Adapter: adapters_1.USDCBridgeAdapter, l1Bridge: ((_k = (_j = opts === null || opts === void 0 ? void 0 : opts.contracts) === null || _j === void 0 ? void 0 : _j.l1) === null || _k === void 0 ? void 0 : _k.L1UsdcBridge) || chain_constants_1.CONTRACT_ADDRESSES[l2ChainId].l1.L1UsdcBridge, l2Bridge: core_utils_1.predeploys.L2UsdcBridge, }, } : {})), (chain_constants_1.BRIDGE_ADAPTER_DATA[l2ChainId] || {})), ((opts === null || opts === void 0 ? void 0 : opts.overrides) || {})); const adapters = {}; for (const [bridgeName, bridgeData] of Object.entries(adapterData)) { adapters[bridgeName] = new bridgeData.Adapter({ messenger, l1Bridge: bridgeData.l1Bridge, l2Bridge: bridgeData.l2Bridge, }); } return adapters; }; exports.getBridgeAdapters = getBridgeAdapters; //# sourceMappingURL=contracts.js.map