import { getContract } from "viem"; import { ChainType } from "../../../../common/types/chain.js"; import { convertFromGenericAddress } from "../../../../common/utils/address.js"; import { AccountManagerAbi } from "../constants/abi/account-manager-abi.js"; import { BridgeRouterHubAbi } from "../constants/abi/bridge-router-hub-abi.js"; import { HubAbi } from "../constants/abi/hub-abi.js"; import { HubPoolAbi } from "../constants/abi/hub-pool-abi.js"; import { HubRewardsV1Abi } from "../constants/abi/hub-rewards-v1-abi.js"; import { HubRewardsV2Abi } from "../constants/abi/hub-rewards-v2-abi.js"; import { LoanManagerAbi } from "../constants/abi/loan-manager-abi.js"; import { NodeManagerAbi } from "../constants/abi/node-manager-abi.js"; import { OracleManagerAbi } from "../constants/abi/oracle-manager-abi.js"; import type { GenericAddress } from "../../../../common/types/address.js"; import type { GetReadContractReturnType } from "../../common/types/contract.js"; import type { Client, GetContractReturnType, WalletClient } from "viem"; export function getAccountManagerContract( provider: Client, address: GenericAddress, signer?: WalletClient, ): GetReadContractReturnType { return getContract({ abi: AccountManagerAbi, address: convertFromGenericAddress(address, ChainType.EVM), client: { wallet: signer, public: provider }, }); } export function getBridgeRouterHubContract( provider: Client, address: GenericAddress, ): GetReadContractReturnType; export function getBridgeRouterHubContract( provider: Client, address: GenericAddress, signer: WalletClient, ): GetContractReturnType; export function getBridgeRouterHubContract( provider: Client, address: GenericAddress, signer?: WalletClient, ): GetReadContractReturnType | GetContractReturnType { return getContract({ abi: BridgeRouterHubAbi, address: convertFromGenericAddress(address, ChainType.EVM), client: { wallet: signer, public: provider }, }); } export function getHubPoolContract( provider: Client, address: GenericAddress, ): GetReadContractReturnType { return getContract({ abi: HubPoolAbi, address: convertFromGenericAddress(address, ChainType.EVM), client: { public: provider }, }); } export function getLoanManagerContract( provider: Client, address: GenericAddress, ): GetReadContractReturnType; export function getLoanManagerContract( provider: Client, address: GenericAddress, signer: WalletClient, ): GetContractReturnType; export function getLoanManagerContract( provider: Client, address: GenericAddress, signer?: WalletClient, ): GetReadContractReturnType | GetContractReturnType { return getContract({ abi: LoanManagerAbi, address: convertFromGenericAddress(address, ChainType.EVM), client: { wallet: signer, public: provider }, }); } export function getOracleManagerContract( provider: Client, address: GenericAddress, ): GetReadContractReturnType { return getContract({ abi: OracleManagerAbi, address: convertFromGenericAddress(address, ChainType.EVM), client: { public: provider }, }); } export function getNodeManagerContract( provider: Client, address: GenericAddress, ): GetReadContractReturnType { return getContract({ abi: NodeManagerAbi, address: convertFromGenericAddress(address, ChainType.EVM), client: { public: provider }, }); } export function getHubRewardsV1Contract( provider: Client, address: GenericAddress, ): GetReadContractReturnType; export function getHubRewardsV1Contract( provider: Client, address: GenericAddress, signer: WalletClient, ): GetContractReturnType; export function getHubRewardsV1Contract( provider: Client, address: GenericAddress, signer?: WalletClient, ): GetReadContractReturnType | GetContractReturnType { return getContract({ abi: HubRewardsV1Abi, address: convertFromGenericAddress(address, ChainType.EVM), client: { wallet: signer, public: provider }, }); } export function getHubRewardsV2Contract( provider: Client, address: GenericAddress, ): GetReadContractReturnType; export function getHubRewardsV2Contract( provider: Client, address: GenericAddress, signer: WalletClient, ): GetContractReturnType; export function getHubRewardsV2Contract( provider: Client, address: GenericAddress, signer?: WalletClient, ): GetReadContractReturnType | GetContractReturnType { return getContract({ abi: HubRewardsV2Abi, address: convertFromGenericAddress(address, ChainType.EVM), client: { wallet: signer, public: provider }, }); } export function getHubContract(provider: Client, address: GenericAddress): GetReadContractReturnType; export function getHubContract( provider: Client, address: GenericAddress, signer: WalletClient, ): GetContractReturnType; export function getHubContract( provider: Client, address: GenericAddress, signer?: WalletClient, ): GetReadContractReturnType | GetContractReturnType { return getContract({ abi: HubAbi, address: convertFromGenericAddress(address, ChainType.EVM), client: { wallet: signer, public: provider }, }); }