// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.17; import {IAllowanceTransfer} from 'permit2/src/interfaces/IAllowanceTransfer.sol'; import {ERC20} from 'solmate/src/tokens/ERC20.sol'; import {ISAMB} from '../interfaces/external/ISAMB.sol'; struct RouterParameters { address permit2; address samb; address seaportV1_5; address seaportV1_4; address openseaConduit; address nftxZap; address x2y2; address foundation; address sudoswap; address elementMarket; address nft20Zap; address cryptopunks; address looksRareV2; address routerRewardsDistributor; address looksRareRewardsDistributor; address looksRareToken; address classicFactory; address clFactory; bytes32 pairInitCodeHash; bytes32 poolInitCodeHash; } /// @title Router Immutable Storage contract /// @notice Used along with the `RouterParameters` struct for ease of cross-chain deployment contract RouterImmutables { /// @dev SAMB address ISAMB internal immutable SAMB; /// @dev Permit2 address IAllowanceTransfer internal immutable PERMIT2; /// @dev Seaport 1.5 address address internal immutable SEAPORT_V1_5; /// @dev Seaport 1.4 address address internal immutable SEAPORT_V1_4; /// @dev The address of OpenSea's conduit used in both Seaport 1.4 and Seaport 1.5 address internal immutable OPENSEA_CONDUIT; /// @dev The address of NFTX zap contract for interfacing with vaults address internal immutable NFTX_ZAP; /// @dev The address of X2Y2 address internal immutable X2Y2; // @dev The address of Foundation address internal immutable FOUNDATION; // @dev The address of Sudoswap's router address internal immutable SUDOSWAP; // @dev The address of Element Market address internal immutable ELEMENT_MARKET; // @dev the address of NFT20's zap contract address internal immutable NFT20_ZAP; // @dev the address of Larva Lab's cryptopunks marketplace address internal immutable CRYPTOPUNKS; /// @dev The address of LooksRareV2 address internal immutable LOOKS_RARE_V2; /// @dev The address of LooksRare token ERC20 internal immutable LOOKS_RARE_TOKEN; /// @dev The address of LooksRare rewards distributor address internal immutable LOOKS_RARE_REWARDS_DISTRIBUTOR; /// @dev The address of router rewards distributor address internal immutable ROUTER_REWARDS_DISTRIBUTOR; /// @dev The address of AstraFactory address internal immutable ASTRA_CLASSIC_FACTORY; /// @dev The AstraPair initcodehash bytes32 internal immutable ASTRA_CLASSIC_PAIR_INIT_CODE_HASH; /// @dev The address of AstraCLFactory address internal immutable ASTRA_CL_FACTORY; /// @dev The AstraCLPool initcodehash bytes32 internal immutable ASTRA_CL_POOL_INIT_CODE_HASH; enum Spenders { OSConduit, Sudoswap } constructor(RouterParameters memory params) { PERMIT2 = IAllowanceTransfer(params.permit2); SAMB = ISAMB(params.samb); SEAPORT_V1_5 = params.seaportV1_5; SEAPORT_V1_4 = params.seaportV1_4; OPENSEA_CONDUIT = params.openseaConduit; NFTX_ZAP = params.nftxZap; X2Y2 = params.x2y2; FOUNDATION = params.foundation; SUDOSWAP = params.sudoswap; ELEMENT_MARKET = params.elementMarket; NFT20_ZAP = params.nft20Zap; CRYPTOPUNKS = params.cryptopunks; LOOKS_RARE_V2 = params.looksRareV2; LOOKS_RARE_TOKEN = ERC20(params.looksRareToken); LOOKS_RARE_REWARDS_DISTRIBUTOR = params.looksRareRewardsDistributor; ROUTER_REWARDS_DISTRIBUTOR = params.routerRewardsDistributor; ASTRA_CLASSIC_FACTORY = params.classicFactory; ASTRA_CLASSIC_PAIR_INIT_CODE_HASH = params.pairInitCodeHash; ASTRA_CL_FACTORY = params.clFactory; ASTRA_CL_POOL_INIT_CODE_HASH = params.poolInitCodeHash; } }