UNPKG

@smartinvoicexyz/constants

Version:

Unified source for configs and constants used across the Smart Invoice protocol.

234 lines (233 loc) 9.08 kB
import { arbitrum, base, gnosis, holesky, mainnet, optimism, polygon, sepolia, } from 'viem/chains'; const toLower = (address) => address?.toLowerCase() ?? ''; export const INVOICE_VERSION = 'smart-invoice-v0.1.0'; // @note: Kleros And Smart Invoice use the same safe address, const SMART_INVOICE_ARBITRATION_SAFE = toLower('0x18542245cA523DFF96AF766047fE9423E0BED3C0'); // https://github.com/lexDAO/Arbitration/blob/master/README.md#resolution-of-any-arbitration-request const LEXDAO_ARBITRATION_SAFE = { [mainnet.id]: toLower('0x5B620676E28693fC14876b035b08CbB1B657dF38'), [arbitrum.id]: toLower('0x2f3F50ACc51b240cFf2a452Af050Cc601d3Adccf'), [polygon.id]: toLower('0xf8DBd458f841424e2fD5fBDf18A7dEA17eb2211D'), [gnosis.id]: toLower('0x153Fbf5da827903e030Dc317C4031755D74D508a'), }; export const KLEROS_GOOGLE_FORM = 'https://forms.gle/K3oMAzAb32G5SbpM9'; const LEXDAO_DATA = { id: 'lexdao', name: 'LexDAO', logoUrl: '/assets/lex-dao.png', termsUrl: 'https://docs.smartinvoice.xyz/arbitration/lexdao-arbitration', }; const KLEROS_DATA = { id: 'kleros', name: 'Kleros', disclaimer: 'Only choose Kleros if total invoice value is greater than 1000 USD', logoUrl: '/assets/kleros.svg', termsUrl: 'https://docs.smartinvoice.xyz/arbitration/kleros-arbitration', }; const SMART_INVOICE_ARBITRATION_DATA = { id: 'smart-invoice', name: 'Smart Invoice In-house', disclaimer: 'Only choose Smart Invoice In-house if invoice value is less than 1000 USD', logoUrl: '/favicon.ico', termsUrl: 'https://docs.smartinvoice.xyz/arbitration/smart-invoice-arbitration', }; export const KLEROS_COURTS = [ { id: 1, name: 'General Court', link: 'https://klerosboard.com/100/courts/0', jurors_drawn: 3, reward: '13 DAI/USDC per juror', safe_address: SMART_INVOICE_ARBITRATION_SAFE, }, { id: 2, name: 'Solidity Court', link: 'https://klerosboard.com/100/courts/13', jurors_drawn: 2, reward: '30 DAI/USDC per juror', safe_address: SMART_INVOICE_ARBITRATION_SAFE, }, { id: 3, name: 'Javascript Court', link: 'https://klerosboard.com/100/courts/14', jurors_drawn: 2, reward: '30 DAI/USDC per juror', safe_address: SMART_INVOICE_ARBITRATION_SAFE, }, ]; const GOLDSKY_PROJECT_ID = 'project_cm2itwou5aapv01we2n0q698q'; const GRAPH_STUDIO_ID = '78711'; export const getGoldskySubgraphUrl = (subgraph) => `https://api.goldsky.com/api/public/${GOLDSKY_PROJECT_ID}/subgraphs/${subgraph}/latest/gn`; export const getGraphStudioSubgraphUrl = (subgraph) => `https://api.studio.thegraph.com/query/${GRAPH_STUDIO_ID}/${subgraph}/version/latest`; const chains = [ mainnet, gnosis, polygon, arbitrum, optimism, sepolia, base, holesky, ]; export const SUPPORTED_CHAIN_IDS = chains.map(chain => chain.id); export const SUPPORTED_CHAINS = chains; export const NETWORK_CONFIG = { [mainnet.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice'), SUBGRAPH_HEALTH_THRESHOLD: 10, WRAPPED_NATIVE_TOKEN: toLower('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'), INVOICE_FACTORY: toLower('0x5E14cF595e18F91170009946205f8BBa21b323ca'), RESOLVERS: { lexdao: { address: LEXDAO_ARBITRATION_SAFE[mainnet.id], ...LEXDAO_DATA, }, kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, [gnosis.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice-gnosis'), SUBGRAPH_HEALTH_THRESHOLD: 20, WRAPPED_NATIVE_TOKEN: toLower('0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d'), INVOICE_FACTORY: toLower('0xdDd96D43b0B2Ca179DCefA58e71798d0ce56c9c8'), RESOLVERS: { lexdao: { address: LEXDAO_ARBITRATION_SAFE[gnosis.id], ...LEXDAO_DATA, }, kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, [optimism.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice-optimism'), SUBGRAPH_HEALTH_THRESHOLD: 40, WRAPPED_NATIVE_TOKEN: toLower('0x4200000000000000000000000000000000000006'), INVOICE_FACTORY: toLower('0xF9822818143948237A60A1a1CEFC85D6F1b929Df'), RESOLVERS: { kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, [polygon.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice-polygon'), SUBGRAPH_HEALTH_THRESHOLD: 40, WRAPPED_NATIVE_TOKEN: toLower('0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'), INVOICE_FACTORY: toLower('0x6dcF61a9170419f30e065A43540aa3663b837342'), RESOLVERS: { lexdao: { address: LEXDAO_ARBITRATION_SAFE[polygon.id], ...LEXDAO_DATA, }, kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, [arbitrum.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice-arbitrum'), SUBGRAPH_HEALTH_THRESHOLD: 120, WRAPPED_NATIVE_TOKEN: toLower('0x82af49447d8a07e3bd95bd0d56f35241523fbab1'), INVOICE_FACTORY: toLower('0xb4CdeF4aa610C046864467592FaE456a58d3443a'), RESOLVERS: { lexdao: { address: LEXDAO_ARBITRATION_SAFE[arbitrum.id], ...LEXDAO_DATA, }, kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, [base.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice-base'), SUBGRAPH_HEALTH_THRESHOLD: 40, WRAPPED_NATIVE_TOKEN: toLower('0x4200000000000000000000000000000000000006'), INVOICE_FACTORY: toLower('0xF9822818143948237A60A1a1CEFC85D6F1b929Df'), RESOLVERS: { kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, [sepolia.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice-sepolia'), SUBGRAPH_HEALTH_THRESHOLD: 10, WRAPPED_NATIVE_TOKEN: toLower('0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14'), INVOICE_FACTORY: toLower('0x8227b9868e00B8eE951F17B480D369b84Cd17c20'), RESOLVERS: { kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, [holesky.id]: { SUBGRAPH: getGraphStudioSubgraphUrl('smart-invoice-holesky'), SUBGRAPH_HEALTH_THRESHOLD: 10, WRAPPED_NATIVE_TOKEN: toLower('0x94373a4919B3240D86eA41593D5eBa789FEF3848'), INVOICE_FACTORY: toLower('0xE0986c3bdAB537fBeb7c94D0C5EF961d6d8bf63a'), RESOLVERS: { kleros: { address: SMART_INVOICE_ARBITRATION_SAFE, ...KLEROS_DATA, }, 'smart-invoice': { address: SMART_INVOICE_ARBITRATION_SAFE, ...SMART_INVOICE_ARBITRATION_DATA, }, }, }, }; export const IPFS_ENDPOINT = 'https://gateway.pinata.cloud'; export const ARWEAVE_ENDPOINT = 'https://arweave.net'; export function isSupportedChainId(chainId) { if (!chainId) return false; return chainId in NETWORK_CONFIG; } export const graphUrls = (chainId) => NETWORK_CONFIG[chainId].SUBGRAPH; export const resolvers = (chainId) => Object.keys(NETWORK_CONFIG[chainId].RESOLVERS); export const resolverInfo = (chainId) => NETWORK_CONFIG[chainId].RESOLVERS; export const wrappedNativeToken = (chainId) => NETWORK_CONFIG[chainId].WRAPPED_NATIVE_TOKEN; export const invoiceFactory = (chainId) => NETWORK_CONFIG[chainId].INVOICE_FACTORY;