@continuumdao/ctm-mpc-defi 0.2.64 → 0.2.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/catalog.cjs +1227 -2928
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1620 -1631
- package/dist/agent/catalog.js +1226 -2929
- package/dist/agent/catalog.js.map +1 -1
- package/dist/chains/evm/index.cjs +22 -15
- package/dist/chains/evm/index.cjs.map +1 -1
- package/dist/chains/evm/index.d.ts +13 -2
- package/dist/chains/evm/index.js +12 -6
- package/dist/chains/evm/index.js.map +1 -1
- package/dist/core/index.cjs +3 -3
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +2 -2
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +25 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -4
- package/dist/index.js +14 -7
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.cjs +22 -16
- package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/aave-v4/index.js +11 -5
- package/dist/protocols/evm/aave-v4/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs +21 -15
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +5 -1
- package/dist/protocols/evm/aerodrome/index.js +11 -5
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/arcus/index.cjs +21 -15
- package/dist/protocols/evm/arcus/index.cjs.map +1 -1
- package/dist/protocols/evm/arcus/index.js +11 -5
- package/dist/protocols/evm/arcus/index.js.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.cjs +21 -15
- package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.js +11 -5
- package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
- package/dist/protocols/evm/compound-v3/index.cjs +21 -15
- package/dist/protocols/evm/compound-v3/index.cjs.map +1 -1
- package/dist/protocols/evm/compound-v3/index.js +11 -5
- package/dist/protocols/evm/compound-v3/index.js.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +37 -18
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +3 -1
- package/dist/protocols/evm/continuum-dao/index.js +27 -9
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.cjs +21 -15
- package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/curve-dao/index.d.ts +1 -1
- package/dist/protocols/evm/curve-dao/index.js +11 -5
- package/dist/protocols/evm/curve-dao/index.js.map +1 -1
- package/dist/protocols/evm/derive/index.cjs +24 -18
- package/dist/protocols/evm/derive/index.cjs.map +1 -1
- package/dist/protocols/evm/derive/index.js +11 -5
- package/dist/protocols/evm/derive/index.js.map +1 -1
- package/dist/protocols/evm/ethena/index.cjs +22 -16
- package/dist/protocols/evm/ethena/index.cjs.map +1 -1
- package/dist/protocols/evm/ethena/index.js +11 -5
- package/dist/protocols/evm/ethena/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs +21 -15
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.js +11 -5
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/gmx/index.cjs +21 -15
- package/dist/protocols/evm/gmx/index.cjs.map +1 -1
- package/dist/protocols/evm/gmx/index.js +11 -5
- package/dist/protocols/evm/gmx/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.cjs +21 -15
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.js +11 -5
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquidOutcome/index.cjs +2 -2
- package/dist/protocols/evm/hyperliquidOutcome/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquidOutcome/index.js +1 -1
- package/dist/protocols/evm/hyperliquidOutcome/index.js.map +1 -1
- package/dist/protocols/evm/lido/index.cjs +21 -15
- package/dist/protocols/evm/lido/index.cjs.map +1 -1
- package/dist/protocols/evm/lido/index.js +11 -5
- package/dist/protocols/evm/lido/index.js.map +1 -1
- package/dist/protocols/evm/maple/index.cjs +21 -15
- package/dist/protocols/evm/maple/index.cjs.map +1 -1
- package/dist/protocols/evm/maple/index.js +11 -5
- package/dist/protocols/evm/maple/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +21 -15
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.js +11 -5
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/pendle/index.cjs +21 -15
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.d.ts +5 -1
- package/dist/protocols/evm/pendle/index.js +11 -5
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/permit2/index.cjs +2 -2
- package/dist/protocols/evm/permit2/index.cjs.map +1 -1
- package/dist/protocols/evm/permit2/index.js +1 -1
- package/dist/protocols/evm/permit2/index.js.map +1 -1
- package/dist/protocols/evm/railgun/index.cjs +21 -15
- package/dist/protocols/evm/railgun/index.cjs.map +1 -1
- package/dist/protocols/evm/railgun/index.js +11 -5
- package/dist/protocols/evm/railgun/index.js.map +1 -1
- package/dist/protocols/evm/sky/index.cjs +21 -15
- package/dist/protocols/evm/sky/index.cjs.map +1 -1
- package/dist/protocols/evm/sky/index.js +11 -5
- package/dist/protocols/evm/sky/index.js.map +1 -1
- package/dist/protocols/evm/trueo/index.cjs +21 -15
- package/dist/protocols/evm/trueo/index.cjs.map +1 -1
- package/dist/protocols/evm/trueo/index.js +11 -5
- package/dist/protocols/evm/trueo/index.js.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.cjs +23 -16
- package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.d.ts +1 -1
- package/dist/protocols/evm/uniswap-v4/index.js +12 -5
- package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
- package/dist/protocols/evm/venice/index.cjs +22 -16
- package/dist/protocols/evm/venice/index.cjs.map +1 -1
- package/dist/protocols/evm/venice/index.js +11 -5
- package/dist/protocols/evm/venice/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/compound-v3/support.ts","../../../../src/protocols/evm/compound-v3/markets.ts","../../../../src/protocols/evm/compound-v3/cometAbi.ts","../../../../src/protocols/evm/compound-v3/compound-js-artifacts/comet-constants.json","../../../../src/protocols/evm/compound-v3/compoundJs.ts","../../../../src/protocols/evm/compound-v3/apr.ts","../../../../src/protocols/evm/compound-v3/subgraph.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/compound-v3/reads.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/shared/coinbaseB20.ts","../../../../src/protocols/evm/compound-v3/txHelpers.ts","../../../../src/protocols/evm/compound-v3/multisign.ts","../../../../src/protocols/evm/compound-v3/bulkerMultisign.ts","../../../../src/protocols/evm/compound-v3/index.ts"],"names":["getAddress","zeroAddress","parseAbi","stringToHex","http","defineChain","createPublicClient","formatUnits","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","publicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","isAddress","encodeFunctionData","maxUint256","parseUnits","ERC20_APPROVE_FALLBACK","encodeAbiParameters"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\n\nexport const COMPOUND_V3_PROTOCOL_ID = 'compound-v3'\n\n/** Live Comet deployments. Scroll and Ronin omitted (effectively dead). Testnets omitted. */\nexport const COMPOUND_V3_CHAIN_IDS = [1, 8453, 42161, 10, 137, 5000, 130, 59144] as const\n\nexport type CompoundV3ChainId = (typeof COMPOUND_V3_CHAIN_IDS)[number]\n\nexport const COMPOUND_V3_WRAPPED_NATIVE: Readonly<Record<number, Address>> = {\n 1: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n 8453: getAddress('0x4200000000000000000000000000000000000006'),\n 42161: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n 10: getAddress('0x4200000000000000000000000000000000000006'),\n 137: getAddress('0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'),\n 5000: getAddress('0x78c1b0C915c4CD0f08633e2ec3d4961Ab0237669'),\n 130: getAddress('0x4200000000000000000000000000000000000006'),\n 59144: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n}\n\nexport function isCompoundV3ChainSupported(chainId: number): boolean {\n return (COMPOUND_V3_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function compoundV3WrappedNative(chainId: number): Address | null {\n return COMPOUND_V3_WRAPPED_NATIVE[chainId] ?? null\n}\n\nexport function isNativeAssetAddress(address: string): boolean {\n try {\n return getAddress(address) === zeroAddress\n } catch {\n return false\n }\n}\n\nexport function resolveCompoundV3ActionAsset(args: {\n chainId: number\n asset: string\n isNative?: boolean\n}): { asset: Address; isNative: boolean; nativeWrapped: Address | null } {\n const nativeWrapped = compoundV3WrappedNative(args.chainId)\n const isNative = args.isNative === true || isNativeAssetAddress(args.asset)\n if (isNative) {\n if (!nativeWrapped) {\n throw new Error(`No wrapped native token configured for Compound III on chain ${args.chainId}.`)\n }\n return { asset: nativeWrapped, isNative: true, nativeWrapped }\n }\n return { asset: getAddress(args.asset), isNative: false, nativeWrapped }\n}\n","import { getAddress, type Address } from 'viem'\nimport { COMPOUND_V3_CHAIN_IDS, isCompoundV3ChainSupported } from './support.js'\n\nexport type CompoundV3MarketRecord = {\n chainId: number\n slug: string\n symbol: string\n comet: Address\n rewards: Address\n bulker: Address | null\n /** Known base token when documented; on-chain `baseToken()` wins. */\n baseToken?: Address\n source: 'comet-deployments'\n}\n\n/**\n * Official Comet proxy + Rewards + Bulker from\n * https://github.com/compound-finance/comet/tree/main/deployments\n * (`roots.json`). Always use `comet` (proxy) with CometInterface — never the implementation.\n */\nexport const COMPOUND_V3_MARKETS: readonly CompoundV3MarketRecord[] = [\n // Ethereum\n {\n chainId: 1,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xc3d688B66703497DAA19211EEdff47f25384cdc3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x5D409e56D886231aDAf00c8775665AD0f9897b56'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdC035D45d973E3EC169d2276DDab16f1e407384F'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdAC17F958D2ee523a2206206994597C13D831ec7'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wbtc',\n symbol: 'cWBTCv3',\n comet: getAddress('0xe85Dc543813B8c2CFEaAc371517b925a166a9293'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xA17581A9E3356d9A858b789D68B4d866e593aE94'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wsteth',\n symbol: 'cWstETHv3',\n comet: getAddress('0x3D0bb1ccaB520A66e607822fC55BC921738fAFE3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n baseToken: getAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),\n source: 'comet-deployments',\n },\n // Base\n {\n chainId: 8453,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xb125E6687d4313864e53df431d5425969c15Eb2F'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usdbc',\n symbol: 'cUSDbCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x820C137fa70C8691f0e44Dc420a5e53c168921Dc'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x46e6b214b524310239732D51387075E0e70970bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'aero',\n symbol: 'cAEROv3',\n comet: getAddress('0x784efeB622244d2348d4F2522f8860B96fbEcE89'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x940181a94A35A4569E4529A3CDfB74e38FD98631'),\n source: 'comet-deployments',\n },\n // Arbitrum\n {\n chainId: 42161,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xaf88d065e77c8cC2239327C5EDb3A432268e5831'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdc.e',\n symbol: 'cUSDC.ev3',\n comet: getAddress('0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xd98Be00b5D27fc98112BdE293e487f8D4cA57d07'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n source: 'comet-deployments',\n },\n // Optimism\n {\n chainId: 10,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2e44e174f7D53F0212823acC11C01A11d58c5bCB'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x995E394b8B2437aC8Ce61Ee0bC610D617962B214'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xE36A30D249f7761327fd973001A32010b521b6Fd'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Polygon\n {\n chainId: 137,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xF25212E676D1F7F89Cd72fFEe66158f541246445'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'),\n source: 'comet-deployments',\n },\n {\n chainId: 137,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xaeB318360f27748Acb200CE616E389A6C9409a07'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0xc2132D05D31c914a87C6611C10748AEb04B58e8F'),\n source: 'comet-deployments',\n },\n // Mantle\n {\n chainId: 5000,\n slug: 'usde',\n symbol: 'cUSDev3',\n comet: getAddress('0x606174f62cd968d8e684c645080fa694c1D7786E'),\n rewards: getAddress('0xCd83CbBFCE149d141A5171C3D6a0F0fCCeE225Ab'),\n bulker: getAddress('0x67DFCa85CcEEFA2C5B1dB4DEe3BEa716A28B9baa'),\n source: 'comet-deployments',\n },\n // Unichain\n {\n chainId: 130,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x078D782b760474a361dDA0AF3839290b0EF57AD6'),\n source: 'comet-deployments',\n },\n {\n chainId: 130,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6C987dDE50dB1dcDd32Cd4175778C2a291978E2a'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Linea\n {\n chainId: 59144,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x8D38A3d6B3c3B7d96D6536DA7Eef94A9d7dbC991'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0x176211869cA2b568f2A7D4EE941E073a821EE1ff'),\n source: 'comet-deployments',\n },\n {\n chainId: 59144,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x60F2058379716A64a7A5d29219397e79bC552194'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n source: 'comet-deployments',\n },\n]\n\nexport function listCompoundV3SupportedChainIds(): number[] {\n return [...COMPOUND_V3_CHAIN_IDS]\n}\n\nexport function listCompoundV3MarketsForChain(chainId: number): CompoundV3MarketRecord[] {\n if (!isCompoundV3ChainSupported(chainId)) return []\n return COMPOUND_V3_MARKETS.filter((m) => m.chainId === chainId)\n}\n\nexport function getCompoundV3MarketByComet(chainId: number, comet: string): CompoundV3MarketRecord | null {\n let normalized: string\n try {\n normalized = getAddress(comet)\n } catch {\n return null\n }\n return COMPOUND_V3_MARKETS.find((m) => m.chainId === chainId && m.comet === normalized) ?? null\n}\n\nexport function requireCompoundV3Market(chainId: number, comet: string): CompoundV3MarketRecord {\n const market = getCompoundV3MarketByComet(chainId, comet)\n if (!market) {\n throw new Error(\n `Unknown Compound III Comet proxy ${comet} on chain ${chainId}. Use ctm_compound_v3_fetch_markets.`,\n )\n }\n return market\n}\n\nexport function listCompoundV3KnownTokenAddresses(chainId: number): Address[] {\n const out = new Set<string>()\n for (const m of listCompoundV3MarketsForChain(chainId)) {\n out.add(m.comet)\n if (m.baseToken) out.add(m.baseToken)\n }\n return [...out] as Address[]\n}\n","import { parseAbi, stringToHex } from 'viem'\n\n/** CometInterface — call on the proxy only. Sourced from compound-js Comet ABI + Comet docs. */\nexport const cometInterfaceAbi = parseAbi([\n 'function supply(address asset, uint256 amount)',\n 'function supplyTo(address dst, address asset, uint256 amount)',\n 'function withdraw(address asset, uint256 amount)',\n 'function withdrawTo(address to, address asset, uint256 amount)',\n 'function allow(address manager, bool isAllowed)',\n 'function hasPermission(address owner, address manager) view returns (bool)',\n 'function balanceOf(address account) view returns (uint256)',\n 'function borrowBalanceOf(address account) view returns (uint256)',\n 'function collateralBalanceOf(address account, address asset) view returns (uint128)',\n 'function baseToken() view returns (address)',\n 'function baseTokenPriceFeed() view returns (address)',\n 'function decimals() view returns (uint8)',\n 'function numAssets() view returns (uint8)',\n 'function getUtilization() view returns (uint256)',\n 'function getSupplyRate(uint256 utilization) view returns (uint64)',\n 'function getBorrowRate(uint256 utilization) view returns (uint64)',\n 'function getPrice(address priceFeed) view returns (uint256)',\n 'function isBorrowCollateralized(address account) view returns (bool)',\n 'function isLiquidatable(address account) view returns (bool)',\n 'function getAssetInfo(uint8 i) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function getAssetInfoByAddress(address asset) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function baseTrackingSupplySpeed() view returns (uint256)',\n 'function baseTrackingBorrowSpeed() view returns (uint256)',\n 'function baseIndexScale() view returns (uint64)',\n 'function trackingIndexScale() view returns (uint256)',\n 'function totalSupply() view returns (uint256)',\n 'function totalBorrow() view returns (uint256)',\n])\n\nexport const cometRewardsAbi = parseAbi([\n 'function getRewardOwed(address comet, address account) view returns ((address token, uint256 owed))',\n 'function claim(address comet, address src, bool shouldAccrue)',\n 'function rewardConfig(address comet) view returns ((address token, uint64 rescaleFactor, bool shouldUpscale))',\n])\n\nexport const cometBulkerAbi = parseAbi([\n 'function invoke(bytes32[] actions, bytes[] data) payable',\n])\n\nexport const erc20ReadAbi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function symbol() view returns (string)',\n 'function name() view returns (string)',\n])\n\nexport const erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nexport const wethAbi = parseAbi(['function deposit() payable', 'function withdraw(uint256 wad)'])\n\n/** Solidity `bytes32 constant ACTION_* = \"ACTION_*\"` (short string). */\nexport function bulkerActionId(name: string): `0x${string}` {\n return stringToHex(name, { size: 32 })\n}\n\nexport const BULKER_ACTION_SUPPLY_ASSET = bulkerActionId('ACTION_SUPPLY_ASSET')\nexport const BULKER_ACTION_SUPPLY_NATIVE_TOKEN = bulkerActionId('ACTION_SUPPLY_NATIVE_TOKEN')\nexport const BULKER_ACTION_WITHDRAW_ASSET = bulkerActionId('ACTION_WITHDRAW_ASSET')\nexport const BULKER_ACTION_WITHDRAW_NATIVE_TOKEN = bulkerActionId('ACTION_WITHDRAW_NATIVE_TOKEN')\nexport const BULKER_ACTION_CLAIM_REWARD = bulkerActionId('ACTION_CLAIM_REWARD')\nexport const BULKER_ACTION_TRANSFER_ASSET = bulkerActionId('ACTION_TRANSFER_ASSET')\n","{\"moveToParentClass\":{\"Comet\":\"Comet\",\"MAINNET_USDC\":\"mainnet_usdc\",\"COMP\":\"COMP\",\"WBTC\":\"WBTC\",\"WETH\":\"WETH\",\"UNI\":\"UNI\",\"LINK\":\"LINK\",\"USDC\":\"USDC\",\"MAINNET_WETH\":\"mainnet_weth\",\"cbETH\":\"cbETH\",\"wstETH\":\"wstETH\",\"POLYGON_USDC\":\"polygon_usdc\",\"WMATIC\":\"WMATIC\",\"MaticX\":\"MaticX\",\"ARBITRUM_USDC\":\"arbitrum_usdc\",\"ARB\":\"ARB\",\"GMX\":\"GMX\",\"BASE_USDBC\":\"base_usdbc\",\"USDbC\":\"USDbC\",\"BASE_WETH\":\"base_weth\",\"GOERLI_USDC\":\"goerli_usdc\",\"GOERLI_WETH\":\"goerli_weth\",\"MUMBAI_USDC\":\"mumbai_usdc\",\"DAI\":\"DAI\",\"GOERLI_ARBITRUM_USDC\":\"goerli_arbitrum_usdc\",\"GOERLI_OPTIMISM_USDC\":\"goerli_optimism_usdc\",\"OP\":\"OP\",\"GOERLI_BASE_USDC\":\"goerli_base_usdc\",\"GOERLI_BASE_WETH\":\"goerli_base_weth\",\"FUJI_USDC\":\"fuji_usdc\",\"WBTC_e\":\"WBTC_e\",\"WAVAX\":\"WAVAX\"},\"address\":{\"mainnet_usdc\":{\"COMP\":{\"contract\":\"0xc00e94Cb662C3520282E6f5717214004A7f26888\",\"priceFeed\":\"0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5\"},\"WBTC\":{\"contract\":\"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\",\"priceFeed\":\"0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"},\"UNI\":{\"contract\":\"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\",\"priceFeed\":\"0x553303d460EE0afB37EdFf9bE42922D8FF63220e\"},\"LINK\":{\"contract\":\"0x514910771AF9Ca656af840dff83E8264EcF986CA\",\"priceFeed\":\"0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c\"},\"USDC\":{\"contract\":\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"priceFeed\":\"0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6\"},\"Comet\":\"0xc3d688B66703497DAA19211EEdff47f25384cdc3\"},\"mainnet_weth\":{\"cbETH\":{\"contract\":\"0xBe9895146f7AF43049ca1c1AE358B0541Ea49704\",\"priceFeed\":\"0x23a982b74a3236A5F2297856d4391B2edBBB5549\"},\"wstETH\":{\"contract\":\"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0\",\"priceFeed\":\"0x4F67e4d9BD67eFa28236013288737D39AeF48e79\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0xD72ac1bCE9177CFe7aEb5d0516a38c88a64cE0AB\"},\"Comet\":\"0xA17581A9E3356d9A858b789D68B4d866e593aE94\"},\"polygon_usdc\":{\"WETH\":{\"contract\":\"0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619\",\"priceFeed\":\"0xF9680D99D6C9589e2a93a78A04A279e509205945\"},\"WBTC\":{\"contract\":\"0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6\",\"priceFeed\":\"0xDE31F8bFBD8c84b5360CFACCa3539B938dd78ae6\"},\"WMATIC\":{\"contract\":\"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\"priceFeed\":\"0xAB594600376Ec9fD91F8e885dADF0CE036862dE0\"},\"MaticX\":{\"contract\":\"0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6\",\"priceFeed\":\"0x5d37E4b374E6907de8Fc7fb33EE3b0af403C7403\"},\"USDC\":{\"contract\":\"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\"priceFeed\":\"0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7\"},\"Comet\":\"0xF25212E676D1F7F89Cd72fFEe66158f541246445\"},\"arbitrum_usdc\":{\"ARB\":{\"contract\":\"0x912CE59144191C1204E64559FE8253a0e49E6548\",\"priceFeed\":\"0xb2A824043730FE05F3DA2efaFa1CBbe83fa548D6\"},\"GMX\":{\"contract\":\"0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a\",\"priceFeed\":\"0xDB98056FecFff59D032aB628337A4887110df3dB\"},\"WETH\":{\"contract\":\"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\"priceFeed\":\"0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612\"},\"WBTC\":{\"contract\":\"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\",\"priceFeed\":\"0xd0C7101eACbB49F3deCcCc166d238410D6D46d57\"},\"USDC\":{\"contract\":\"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\"priceFeed\":\"0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3\"},\"Comet\":\"0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA\"},\"base_usdbc\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x4687670f5f01716fAA382E2356C103BaD776752C\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70\"},\"USDbC\":{\"contract\":\"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA\",\"priceFeed\":\"0x7e860098F58bBFC8648a4311b374B1D669a2bc6B\"},\"Comet\":\"0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf\"},\"base_weth\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x59e242D352ae13166B4987aE5c990C232f7f7CD6\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x9f485610E26B9c0140439f88Dc0C7742903Bd1CF\"},\"Comet\":\"0x46e6b214b524310239732D51387075E0e70970bf\"},\"goerli_usdc\":{\"COMP\":{\"contract\":\"0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4\",\"priceFeed\":\"0x54a06047087927D9B0fb21c1cf0ebd792764dDB8\"},\"WBTC\":{\"contract\":\"0xAAD4992D949f9214458594dF92B44165Fb84dC19\",\"priceFeed\":\"0xA39434A63A52E749F02807ae27335515BA4b07F7\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e\"},\"LINK\":{\"contract\":\"0xaf95Ff5fB592646D86BF240B3CaE0903b6E4dd38\",\"priceFeed\":\"0x48731cF7e84dc94C5f84577882c14Be11a5B7456\"},\"USDC\":{\"contract\":\"0x07865c6E87B9F70255377e024ace6630C1Eaa37F\",\"priceFeed\":\"0xAb5c49580294Aff77670F839ea425f5b78ab3Ae7\"},\"Comet\":\"0x3EE77595A8459e93C2888b13aDB354017B198188\"},\"goerli_weth\":{\"cbETH\":{\"contract\":\"0x2459f06a13ea0997d623224F362519bE71507258\",\"priceFeed\":\"0xb79BbFE63309E036dDFa1BD44513d956BeE55c2a\"},\"wstETH\":{\"contract\":\"0x4942BBAf745f235e525BAff49D31450810EDed5b\",\"priceFeed\":\"0x5608d174a3B828abb4eE8b9B6a6433f2346c3E54\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0x1eb99992A2e3456ed2c8C6eD87E4c029bC679FeF\"},\"Comet\":\"0x9A539EEc489AAA03D588212a164d0abdB5F08F5F\"},\"mumbai_usdc\":{\"DAI\":{\"contract\":\"0x4DAFE12E1293D889221B1980672FE260Ac9dDd28\",\"priceFeed\":\"0x0FCAa9c899EC5A91eBc3D5Dd869De833b06fB046\"},\"WETH\":{\"contract\":\"0xE1e67212B1A4BF629Bdf828e08A3745307537ccE\",\"priceFeed\":\"0x0715A7794a1dc8e42615F059dD6e406A6594651A\"},\"WBTC\":{\"contract\":\"0x4B5A0F4E00bC0d6F16A593Cae27338972614E713\",\"priceFeed\":\"0x007A22900a3B98143368Bd5906f8E17e9867581b\"},\"WMATIC\":{\"contract\":\"0xfec23a9E1DBA805ADCF55E0338Bf5E03488FC7Fb\",\"priceFeed\":\"0xd0D5e3DB44DE05E9F294BB0a3bEEaF030DE24Ada\"},\"USDC\":{\"contract\":\"0xDB3cB4f2688daAB3BFf59C24cC42D4B6285828e9\",\"priceFeed\":\"0x572dDec9087154dC5dfBB1546Bb62713147e0Ab0\"},\"Comet\":\"0xF09F0369aB0a875254fB565E52226c88f10Bc839\"},\"goerli_arbitrum_usdc\":{\"LINK\":{\"contract\":\"0xbb7303602bE1B9149B097aAFb094ffce1860E532\",\"priceFeed\":\"0xd28Ba6CA3bB72bF371b80a2a0a33cBcf9073C954\"},\"WETH\":{\"contract\":\"0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3\",\"priceFeed\":\"0x62CAe0FA2da220f43a51F86Db2EDb36DcA9A5A08\"},\"WBTC\":{\"contract\":\"0x22d5e2dE578677791f6c90e0110Ec629be9d5Fb5\",\"priceFeed\":\"0x6550bc2301936011c1334555e62A87705A81C12C\"},\"USDC\":{\"contract\":\"0x8FB1E3fC51F3b789dED7557E680551d93Ea9d892\",\"priceFeed\":\"0x1692Bdd32F31b831caAc1b0c9fAF68613682813b\"},\"Comet\":\"0x1d573274E19174260c5aCE3f2251598959d24456\"},\"goerli_optimism_usdc\":{\"OP\":{\"contract\":\"0x32719c5e2e35909C8f42167315445e349e749E05\",\"priceFeed\":\"0xE882831E58eec48B7f304482771F67e6b846733D\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x57241A37733983F97C4Ab06448F244A1E0Ca0ba8\"},\"WBTC\":{\"contract\":\"0xe0a592353e81a94Db6E3226fD4A99F881751776a\",\"priceFeed\":\"0xC16679B963CeB52089aD2d95312A5b85E318e9d2\"},\"USDC\":{\"contract\":\"0x7E07E15D2a87A24492740D16f5bdF58c16db0c4E\",\"priceFeed\":\"0x2636B223652d388721A0ED2861792DA9062D8C73\"},\"Comet\":\"0xb8F2f9C84ceD7bBCcc1Db6FB7bb1F19A9a4adfF4\"},\"goerli_base_usdc\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"USDC\":{\"contract\":\"0x31D3A7711a74b4Ec970F50c3eaf1ee47ba803A95\",\"priceFeed\":\"0xb85765935B4d9Ab6f841c9a00690Da5F34368bc0\"},\"Comet\":\"0xe78Fc55c884704F9485EDa042fb91BfE16fD55c1\"},\"goerli_base_weth\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0x5B0156A396BdFc2eb814D945Ac99C40A0F8592B2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x22738A450dDA849BedDFcA219739a5d72dfB3Ec6\"},\"Comet\":\"0xED94f3052638620fE226a9661ead6a39C2a265bE\"},\"fuji_usdc\":{\"WBTC_e\":{\"contract\":\"0xfa78400e01Fc9da830Cb2F13B3e7E18F813414Ff\",\"priceFeed\":\"0x31CF013A08c6Ac228C94551d535d5BAfE19c602a\"},\"WAVAX\":{\"contract\":\"0xA2c25E48269e3f89A60b2CC8e02AAfEeB3BAb761\",\"priceFeed\":\"0x5498BB86BC934c8D34FDA08E81D444153d0D06aD\"},\"USDC\":{\"contract\":\"0x4fed3d02D095f7D92AF161311fA6Ef23dc8dA040\",\"priceFeed\":\"0x7898AcCC83587C3C55116c5230C17a6Cd9C71bad\"},\"Comet\":\"0x59BF4753899C20EA152dEefc6f6A14B2a5CC3021\"}},\"decimals\":{\"mainnet_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"UNI\":18,\"LINK\":18,\"USDC\":6},\"mainnet_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"polygon_usdc\":{\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"MaticX\":18,\"USDC\":6},\"arbitrum_usdc\":{\"ARB\":18,\"GMX\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"base_usdbc\":{\"cbETH\":18,\"WETH\":18,\"USDbC\":6},\"base_weth\":{\"cbETH\":18,\"WETH\":18},\"goerli_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"LINK\":18,\"USDC\":6},\"goerli_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"mumbai_usdc\":{\"DAI\":18,\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"USDC\":6},\"goerli_arbitrum_usdc\":{\"LINK\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_optimism_usdc\":{\"OP\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_base_usdc\":{\"cbETH\":18,\"WETH\":18,\"USDC\":6},\"goerli_base_weth\":{\"cbETH\":18,\"WETH\":18},\"fuji_usdc\":{\"WBTC_e\":8,\"WAVAX\":18,\"USDC\":6}},\"collaterals\":{\"mainnet_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"UNI\",\"LINK\",\"USDC\"],\"mainnet_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"polygon_usdc\":[\"WETH\",\"WBTC\",\"WMATIC\",\"MaticX\",\"USDC\"],\"arbitrum_usdc\":[\"ARB\",\"GMX\",\"WETH\",\"WBTC\",\"USDC\"],\"base_usdbc\":[\"cbETH\",\"WETH\",\"USDbC\"],\"base_weth\":[\"cbETH\",\"WETH\"],\"goerli_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"LINK\",\"USDC\"],\"goerli_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"mumbai_usdc\":[\"DAI\",\"WETH\",\"WBTC\",\"WMATIC\",\"USDC\"],\"goerli_arbitrum_usdc\":[\"LINK\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_optimism_usdc\":[\"OP\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_base_usdc\":[\"cbETH\",\"WETH\",\"USDC\"],\"goerli_base_weth\":[\"cbETH\",\"WETH\"],\"fuji_usdc\":[\"WBTC_e\",\"WAVAX\",\"USDC\"]},\"base\":{\"mainnet_usdc\":\"USDC\",\"mainnet_weth\":\"WETH\",\"polygon_usdc\":\"USDC\",\"arbitrum_usdc\":\"USDC\",\"base_usdbc\":\"USDbC\",\"base_weth\":\"WETH\",\"goerli_usdc\":\"USDC\",\"goerli_weth\":\"WETH\",\"mumbai_usdc\":\"USDC\",\"goerli_arbitrum_usdc\":\"USDC\",\"goerli_optimism_usdc\":\"USDC\",\"goerli_base_usdc\":\"USDC\",\"goerli_base_weth\":\"WETH\",\"fuji_usdc\":\"USDC\"},\"instanceNetworkMap\":{\"mainnet_usdc\":\"mainnet\",\"mainnet_weth\":\"mainnet\",\"polygon_usdc\":\"matic\",\"arbitrum_usdc\":\"arbitrum\",\"base_usdbc\":\"base\",\"base_weth\":\"base\",\"goerli_usdc\":\"goerli\",\"goerli_weth\":\"goerli\",\"mumbai_usdc\":\"maticmum\",\"goerli_arbitrum_usdc\":\"optimism-arbitrum\",\"goerli_optimism_usdc\":\"optimism-goerli\",\"goerli_base_usdc\":\"base-goerli\",\"goerli_base_weth\":\"base-goerli\",\"fuji_usdc\":\"ava-fuji\"},\"abi\":[{\"inputs\":[],\"name\":\"Absurd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAsset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDiscount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadMinimum\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadSignatory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientReserves\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt256\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt128\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt64\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NegativeNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoSelfTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCollateralized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForSale\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotLiquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SupplyCapExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimestampTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyAssets\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooMuchSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferInFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferOutFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAbsorbed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"basePaidOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbDebt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"}],\"name\":\"BuyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"PauseAction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SupplyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawReserves\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"absorb\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"accrueAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"name\":\"allow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"allowBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveThis\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseAccrualScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseBorrowMin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseIndexScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseMinForRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenPriceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"baseTrackingAccrued\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingBorrowSpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingSupplySpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"buyCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"collateralBalanceOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extensionDelegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factorScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"i\",\"type\":\"uint8\"}],\"name\":\"getAssetInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetInfoByAddress\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getBorrowRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getCollateralReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getSupplyRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUtilization\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isAbsorbPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBorrowCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBuyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSupplyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTransferPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isWithdrawPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidatorPoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"numAbsorbs\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"numAbsorbed\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"approxSpend\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"_reserved\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGuardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"}],\"name\":\"quoteCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storeFrontPriceFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalsBasic\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"baseSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint104\",\"name\":\"totalSupplyBase\",\"type\":\"uint104\"},{\"internalType\":\"uint104\",\"name\":\"totalBorrowBase\",\"type\":\"uint104\"},{\"internalType\":\"uint40\",\"name\":\"lastAccrualTime\",\"type\":\"uint40\"},{\"internalType\":\"uint8\",\"name\":\"pauseFlags\",\"type\":\"uint8\"}],\"internalType\":\"struct CometStorage.TotalsBasic\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalsCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"totalSupplyAsset\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trackingIndexScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAssetFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userBasic\",\"outputs\":[{\"internalType\":\"int104\",\"name\":\"principal\",\"type\":\"int104\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingAccrued\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"assetsIn\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"_reserved\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"balance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]}","/**\n * Isolated adapter over official Compound.js artifacts\n * (https://github.com/compound-finance/compound-js).\n *\n * The npm package peers ethers@5 and cannot be a hard runtime dependency next to\n * ethers@6 / viem. We vendor `comet-constants.json` from that repo and treat\n * official comet `deployments/` as the address source of truth.\n */\nimport { getAddress, type Address } from 'viem'\nimport cometConstants from './compound-js-artifacts/comet-constants.json'\n\nexport type CompoundJsInstanceId = string\n\ntype CompoundJsAddressMap = Record<string, Record<string, string | { contract?: string }>>\n\nconst INSTANCE_CHAIN_ID: Readonly<Record<string, number>> = {\n mainnet_usdc: 1,\n mainnet_weth: 1,\n polygon_usdc: 137,\n arbitrum_usdc: 42161,\n base_usdbc: 8453,\n base_weth: 8453,\n}\n\nexport type CompoundJsKnownComet = {\n instanceId: string\n chainId: number\n comet: Address\n baseSymbol: string\n collateralSymbols: string[]\n}\n\nfunction asAddressMap(): CompoundJsAddressMap {\n return cometConstants.address as CompoundJsAddressMap\n}\n\nexport function listCompoundJsCometInstances(): CompoundJsKnownComet[] {\n const address = asAddressMap()\n const base = cometConstants.base as Record<string, string>\n const collaterals = cometConstants.collaterals as Record<string, string[]>\n const out: CompoundJsKnownComet[] = []\n for (const [instanceId, contracts] of Object.entries(address)) {\n if (instanceId.startsWith('goerli_') || instanceId.startsWith('mumbai_') || instanceId.startsWith('fuji_')) {\n continue\n }\n const chainId = INSTANCE_CHAIN_ID[instanceId]\n const cometRaw = contracts.Comet\n if (typeof cometRaw !== 'string' || chainId == null) continue\n out.push({\n instanceId,\n chainId,\n comet: getAddress(cometRaw),\n baseSymbol: base[instanceId] ?? instanceId,\n collateralSymbols: collaterals[instanceId] ?? [],\n })\n }\n return out\n}\n\nexport function compoundJsCometAddress(instanceId: string): Address | null {\n const row = asAddressMap()[instanceId]\n const comet = row?.Comet\n if (typeof comet !== 'string') return null\n return getAddress(comet)\n}\n\nexport function compoundJsCollateralAddresses(instanceId: string): Address[] {\n const row = asAddressMap()[instanceId]\n const names = (cometConstants.collaterals as Record<string, string[]>)[instanceId] ?? []\n const out: Address[] = []\n for (const name of names) {\n const entry = row?.[name]\n const contract = typeof entry === 'string' ? entry : entry?.contract\n if (!contract) continue\n out.push(getAddress(contract))\n }\n return out\n}\n\n/** Cross-check: official deployment proxy should match Compound.js when both list the market. */\nexport function compoundJsAgreesWithOfficial(instanceId: string, officialComet: string): boolean {\n const js = compoundJsCometAddress(instanceId)\n if (!js) return false\n return js === getAddress(officialComet)\n}\n","/** Compound III rates are per-second, scaled by 1e18. */\n\nexport const COMPOUND_V3_SECONDS_PER_YEAR = 365 * 24 * 60 * 60\nexport const COMPOUND_V3_FACTOR_SCALE = 10n ** 18n\n\nexport function compoundV3RatePerSecondToAprDecimal(ratePerSecond: bigint): number {\n if (ratePerSecond <= 0n) return 0\n return (Number(ratePerSecond) / 1e18) * COMPOUND_V3_SECONDS_PER_YEAR\n}\n\nexport function compoundV3AprToPercentLabel(aprDecimal: number): string {\n if (!Number.isFinite(aprDecimal)) return '—'\n const pct = aprDecimal * 100\n if (Math.abs(pct) < 0.001) return '0.00%'\n return `${pct.toFixed(2)}%`\n}\n\nexport function compoundV3UtilizationToDecimal(utilization: bigint): number {\n if (utilization <= 0n) return 0\n return Number(utilization) / 1e18\n}\n\nexport function compoundV3FactorToPercent(factor: bigint): number {\n return Number(factor) / 1e16\n}\n\n/** Comet `getPrice` scale (USD, 8 decimals). */\nexport const COMPOUND_V3_PRICE_SCALE = 1e8\n/** Default tracking index scale when `trackingIndexScale()` is unavailable. */\nexport const COMPOUND_V3_TRACKING_INDEX_SCALE = 1e15\n\n/**\n * Forward COMP (or other reward-token) APR from tracking speed.\n * `trackingSpeed` is tokens/second × trackingIndexScale. Prices are Comet `getPrice` (1e8 USD).\n */\n/** Returns a percent (5 = 5%), or null when unpriced / zero speed. */\nexport function compoundV3TrackingSpeedToRewardAprPercent(args: {\n trackingSpeed: bigint\n trackingIndexScale: bigint\n totalBase: bigint\n baseDecimals: number\n basePrice: bigint\n rewardPrice: bigint\n}): number | null {\n if (args.trackingSpeed <= 0n || args.totalBase <= 0n || args.basePrice <= 0n || args.rewardPrice <= 0n) {\n return null\n }\n const scale = Number(args.trackingIndexScale > 0n ? args.trackingIndexScale : BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE))\n if (!Number.isFinite(scale) || scale <= 0) return null\n const tokensPerYear = (Number(args.trackingSpeed) / scale) * COMPOUND_V3_SECONDS_PER_YEAR\n const rewardUsdPerYear = tokensPerYear * (Number(args.rewardPrice) / COMPOUND_V3_PRICE_SCALE)\n const totalUsd = (Number(args.totalBase) / 10 ** args.baseDecimals) * (Number(args.basePrice) / COMPOUND_V3_PRICE_SCALE)\n if (!Number.isFinite(rewardUsdPerYear) || !Number.isFinite(totalUsd) || totalUsd <= 0) return null\n const pct = (rewardUsdPerYear / totalUsd) * 100\n if (!Number.isFinite(pct) || pct < 0) return null\n return pct\n}\n","/**\n * Optional PaperclipLabs Compound V3 subgraphs (The Graph).\n * Never used as the execution address source — official comet deployments win.\n */\nconst COMPOUND_V3_SUBGRAPH_BY_CHAIN: Readonly<Record<number, string>> = {\n 1: '5nwMCSHaTqG3Kd2gHznbTXEnZ9QNWsssQfbHhDqQSQFp',\n 137: 'AaFtUWKfFdj2x8nnE3RxTSJkHwGHvawH3VWFBykCGzLs',\n 42161: 'Ff7ha9ELmpmg81D6nYxy4t8aGP26dPztqD1LDJNPqjLS',\n 8453: '2hcXhs36pTBDVUmk5K2Zkr6N4UYGwaHuco2a6jyTsijo',\n 10: 'FhHNkfh5z6Z2WCEBxB6V3s8RPxnJfWZ9zAfM5bVvbvbb',\n}\n\nexport type CompoundV3SubgraphMarketHint = {\n id: string\n comet: string\n}\n\nexport function compoundV3SubgraphIdForChain(chainId: number): string | null {\n return COMPOUND_V3_SUBGRAPH_BY_CHAIN[chainId] ?? null\n}\n\nexport async function fetchCompoundV3SubgraphMarkets(args: {\n chainId: number\n apiKey?: string\n}): Promise<CompoundV3SubgraphMarketHint[] | null> {\n const id = compoundV3SubgraphIdForChain(args.chainId)\n const apiKey = (args.apiKey ?? process.env.THE_GRAPH_API_KEY ?? '').trim()\n if (!id || !apiKey) return null\n const url = `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/${id}`\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n query: `query CompoundV3Markets { markets(first: 50) { id } }`,\n }),\n })\n if (!res.ok) return null\n const json = (await res.json()) as { data?: { markets?: Array<{ id: string }> } }\n const markets = json.data?.markets\n if (!markets) return null\n return markets.map((m) => ({ id: m.id, comet: m.id }))\n } catch {\n return null\n }\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","import { createPublicClient, defineChain, formatUnits, getAddress, zeroAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport {\n COMPOUND_V3_TRACKING_INDEX_SCALE,\n compoundV3AprToPercentLabel,\n compoundV3FactorToPercent,\n compoundV3RatePerSecondToAprDecimal,\n compoundV3TrackingSpeedToRewardAprPercent,\n compoundV3UtilizationToDecimal,\n} from './apr.js'\nimport { cometInterfaceAbi, cometRewardsAbi, erc20ReadAbi } from './cometAbi.js'\nimport {\n getCompoundV3MarketByComet,\n listCompoundV3MarketsForChain,\n type CompoundV3MarketRecord,\n} from './markets.js'\nimport { compoundV3WrappedNative, isCompoundV3ChainSupported, isNativeAssetAddress } from './support.js'\nimport { fetchCompoundV3SubgraphMarkets } from './subgraph.js'\n\nexport type CompoundV3AssetInfoRow = {\n asset: string\n symbol: string\n decimals: number\n borrowCollateralFactorPercent: number\n liquidateCollateralFactorPercent: number\n priceRaw: string\n role: 'base' | 'collateral'\n}\n\nexport type CompoundV3MarketSummary = {\n chainId: number\n slug: string\n symbol: string\n comet: string\n rewards: string\n bulker: string | null\n baseToken: string | null\n utilization: number | null\n supplyAprPercent: string | null\n borrowAprPercent: string | null\n supplyRewardAprPercent: string | null\n borrowRewardAprPercent: string | null\n assets: CompoundV3AssetInfoRow[]\n}\n\nexport type CompoundV3AccountSummary = {\n comet: string\n symbol: string\n baseSupplied: string\n baseBorrowed: string\n collaterals: Array<{ asset: string; symbol: string; balance: string }>\n isBorrowCollateralized: boolean\n isLiquidatable: boolean\n rewardToken: string | null\n rewardOwed: string | null\n}\n\nfunction publicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nasync function readTokenMeta(\n client: PublicClient,\n asset: Address,\n): Promise<{ symbol: string; decimals: number }> {\n const [symbol, decimals] = await Promise.all([\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'symbol' }).catch(() => 'TOKEN'),\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'decimals' }).catch(() => 18),\n ])\n return { symbol: String(symbol), decimals: Number(decimals) }\n}\n\nasync function enrichMarketOnChain(\n client: PublicClient,\n market: CompoundV3MarketRecord,\n): Promise<CompoundV3MarketSummary> {\n const comet = market.comet\n const [baseToken, utilization, numAssets, decimals] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getUtilization' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n ])\n const [supplyRate, borrowRate, baseMeta, baseFeed, supplySpeed, borrowSpeed, totalSupply, totalBorrow, trackingScale] =\n await Promise.all([\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getSupplyRate',\n args: [utilization],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getBorrowRate',\n args: [utilization],\n }),\n readTokenMeta(client, getAddress(baseToken)),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTokenPriceFeed' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingSupplySpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingBorrowSpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalSupply' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalBorrow' }).catch(() => 0n),\n client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'trackingIndexScale' })\n .catch(() => BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE)),\n ])\n const basePrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [baseFeed] })\n .catch(() => 0n)\n\n const assets: CompoundV3AssetInfoRow[] = [\n {\n asset: getAddress(baseToken),\n symbol: baseMeta.symbol,\n decimals: Number(decimals) || baseMeta.decimals,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: basePrice.toString(),\n role: 'base',\n },\n ]\n\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const meta = await readTokenMeta(client, token)\n const price = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n assets.push({\n asset: token,\n symbol: meta.symbol,\n decimals: meta.decimals,\n borrowCollateralFactorPercent: compoundV3FactorToPercent(info.borrowCollateralFactor),\n liquidateCollateralFactorPercent: compoundV3FactorToPercent(info.liquidateCollateralFactor),\n priceRaw: price.toString(),\n role: 'collateral',\n })\n }\n\n let rewardPrice = 0n\n try {\n const cfg = await client.readContract({\n address: getAddress(market.rewards),\n abi: cometRewardsAbi,\n functionName: 'rewardConfig',\n args: [comet],\n })\n const rewardToken = getAddress(cfg.token)\n const listed = assets.find((a) => a.asset.toLowerCase() === rewardToken.toLowerCase())\n if (listed && listed.priceRaw !== '0') {\n rewardPrice = BigInt(listed.priceRaw)\n } else {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfoByAddress',\n args: [rewardToken],\n })\n rewardPrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n }\n } catch {\n rewardPrice = 0n\n }\n\n const baseDecimals = Number(decimals) || baseMeta.decimals\n const supplyRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: supplySpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalSupply,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n const borrowRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: borrowSpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalBorrow,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: getAddress(baseToken),\n utilization: compoundV3UtilizationToDecimal(utilization),\n supplyAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(supplyRate)),\n borrowAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(borrowRate)),\n supplyRewardAprPercent: supplyRewardApr == null ? null : compoundV3AprToPercentLabel(supplyRewardApr / 100),\n borrowRewardAprPercent: borrowRewardApr == null ? null : compoundV3AprToPercentLabel(borrowRewardApr / 100),\n assets,\n }\n}\n\nfunction registryMarketRow(market: CompoundV3MarketRecord): CompoundV3MarketSummary {\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: market.baseToken ?? null,\n utilization: null,\n supplyAprPercent: null,\n borrowAprPercent: null,\n supplyRewardAprPercent: null,\n borrowRewardAprPercent: null,\n assets: market.baseToken\n ? [\n {\n asset: market.baseToken,\n symbol: market.slug.toUpperCase(),\n decimals: 18,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: '0',\n role: 'base',\n },\n ]\n : [],\n }\n}\n\nexport async function compoundV3FetchMarketsSummary(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<{ markets: CompoundV3MarketSummary[]; notes: string }> {\n if (!isCompoundV3ChainSupported(args.chainId)) {\n return { markets: [], notes: `Compound III is not deployed on chain ${args.chainId}.` }\n }\n const registry = listCompoundV3MarketsForChain(args.chainId)\n let subgraphNote = ''\n const subgraph = await fetchCompoundV3SubgraphMarkets({ chainId: args.chainId })\n if (subgraph) {\n subgraphNote = ` Subgraph listed ${subgraph.length} market id(s); official comet deployments are the address source.`\n }\n if (!args.rpcUrl?.trim()) {\n return {\n markets: registry.map(registryMarketRow),\n notes:\n 'Registry from official comet deployments. Pass rpcUrl (MCP server injects it) to enrich APRs, reward APRs, and collaterals.' +\n subgraphNote,\n }\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const markets: CompoundV3MarketSummary[] = []\n for (const row of registry) {\n try {\n markets.push(await enrichMarketOnChain(client, row))\n } catch {\n markets.push(registryMarketRow(row))\n }\n }\n return {\n markets,\n notes:\n 'Comet proxy addresses from official deployments; base supply/borrow APR and COMP incentive APR from on-chain CometInterface. Incentive APR is extra and variable; null when the reward token has no on-chain price feed.' +\n subgraphNote,\n }\n}\n\nexport async function compoundV3FetchMarketSummary(args: {\n chainId: number\n comet: string\n rpcUrl?: string\n}): Promise<CompoundV3MarketSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error('rpcUrl is required for ctm_compound_v3_fetch_market (MCP server injects it from the chain registry).')\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n return enrichMarketOnChain(client, market)\n}\n\nexport async function compoundV3FetchAccountSummary(args: {\n chainId: number\n comet: string\n account: string\n rpcUrl?: string\n}): Promise<CompoundV3AccountSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error(\n 'rpcUrl is required for ctm_compound_v3_fetch_account (MCP server injects it from the chain registry).',\n )\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const comet = market.comet\n const account = getAddress(args.account)\n const [baseToken, decimals, supplied, borrowed, numAssets, collateralized, liquidatable] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'balanceOf', args: [account] }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'borrowBalanceOf',\n args: [account],\n }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isBorrowCollateralized',\n args: [account],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isLiquidatable',\n args: [account],\n }),\n ])\n const baseMeta = await readTokenMeta(client, getAddress(baseToken))\n const dec = Number(decimals) || baseMeta.decimals\n const collaterals: CompoundV3AccountSummary['collaterals'] = []\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const bal = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'collateralBalanceOf',\n args: [account, token],\n })\n const meta = await readTokenMeta(client, token)\n collaterals.push({\n asset: token,\n symbol: meta.symbol,\n balance: formatUnits(bal, meta.decimals),\n })\n }\n\n let rewardToken: string | null = null\n let rewardOwed: string | null = null\n try {\n const owed = await client.readContract({\n address: market.rewards,\n abi: cometRewardsAbi,\n functionName: 'getRewardOwed',\n args: [comet, account],\n })\n rewardToken = getAddress(owed.token)\n const rewardMeta = await readTokenMeta(client, getAddress(owed.token))\n rewardOwed = formatUnits(owed.owed, rewardMeta.decimals)\n } catch {\n rewardToken = null\n rewardOwed = null\n }\n\n return {\n comet,\n symbol: market.symbol,\n baseSupplied: formatUnits(supplied, dec),\n baseBorrowed: formatUnits(borrowed, dec),\n collaterals,\n isBorrowCollateralized: Boolean(collateralized),\n isLiquidatable: Boolean(liquidatable),\n rewardToken,\n rewardOwed,\n }\n}\n\nexport type CompoundV3AssetModes = {\n base: boolean\n collateral: boolean\n}\n\nconst chainAssetCache = new Map<number, Map<string, CompoundV3AssetModes>>()\n\nexport function compoundV3KeyForNodeAssetRow(args: {\n contractAddress: string\n chainId: number\n}): string {\n if (isNativeAssetAddress(args.contractAddress)) {\n const wrapped = compoundV3WrappedNative(args.chainId)\n return (wrapped ?? zeroAddress).toLowerCase()\n }\n return getAddress(args.contractAddress).toLowerCase()\n}\n\nexport async function ensureCompoundV3ChainAssetCache(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<Map<string, CompoundV3AssetModes>> {\n const existing = chainAssetCache.get(args.chainId)\n if (existing && existing.size > 0 && !args.rpcUrl) return existing\n\n const map = new Map<string, CompoundV3AssetModes>()\n const add = (address: string, role: keyof CompoundV3AssetModes) => {\n const key = getAddress(address).toLowerCase()\n const cur = map.get(key) ?? { base: false, collateral: false }\n cur[role] = true\n map.set(key, cur)\n }\n\n if (args.rpcUrl?.trim()) {\n try {\n const { markets } = await compoundV3FetchMarketsSummary({ chainId: args.chainId, rpcUrl: args.rpcUrl })\n for (const m of markets) {\n for (const a of m.assets) add(a.asset, a.role === 'base' ? 'base' : 'collateral')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n } catch {\n /* fall through to registry bases */\n }\n }\n\n for (const m of listCompoundV3MarketsForChain(args.chainId)) {\n if (m.baseToken) add(m.baseToken, 'base')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n}\n\nexport function getCompoundV3AssetModesFromCache(\n chainId: number,\n contractAddress: string,\n): CompoundV3AssetModes | null {\n const cache = chainAssetCache.get(chainId)\n if (!cache) return null\n const key = compoundV3KeyForNodeAssetRow({ contractAddress, chainId })\n return cache.get(key) ?? null\n}\n\nexport function listCompoundV3MarketsForAsset(args: {\n chainId: number\n contractAddress: string\n}): CompoundV3MarketRecord[] {\n const key = compoundV3KeyForNodeAssetRow({ contractAddress: args.contractAddress, chainId: args.chainId })\n return listCompoundV3MarketsForChain(args.chainId).filter((m) => {\n if (m.baseToken && m.baseToken.toLowerCase() === key) return true\n const modes = chainAssetCache.get(args.chainId)?.get(key)\n return Boolean(modes?.base || modes?.collateral)\n })\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { getAddress, isAddress, type Address } from 'viem'\n\n/**\n * Coinbase B20 tokenized stocks on Base. Addresses come from\n * https://api.coinbase.com/v1/tokenized-stocks — there is no baked-in token list.\n */\nexport const COINBASE_B20_STOCK_DECIMALS = 8 as const\n\n/** B20 ASSET variant addresses: `[10-byte 0xb200…][variant 0x00][9-byte hash]`. */\nexport const COINBASE_B20_ASSET_PREFIX = '0xb200000000000000000000'\n\nexport type CoinbaseB20KnownToken = {\n address: Address\n symbol: string\n decimals: number\n name?: string\n iconUrl?: string\n}\n\nexport type CoinbaseB20StockToken = CoinbaseB20KnownToken\n\nexport function isCoinbaseB20AssetToken(address: string): boolean {\n try {\n return getAddress(address as `0x${string}`).toLowerCase().startsWith(COINBASE_B20_ASSET_PREFIX)\n } catch {\n return false\n }\n}\n\n/** Tickers such as AAPLc and BRK.Bc. Rejects WETH, USDC, and AERO. */\nexport function looksLikeCoinbaseStockSymbol(symbol: string): boolean {\n return /^[A-Za-z][A-Za-z0-9]{0,8}(?:\\.[A-Za-z][A-Za-z0-9]{0,4})?c$/.test((symbol ?? '').trim())\n}\n\nexport function coinbaseB20StockAddresses(): Address[] {\n return coinbaseB20CatalogTokens().map((t) => t.address)\n}\n\nexport const COINBASE_TOKENIZED_STOCKS_API_URL = 'https://api.coinbase.com/v1/tokenized-stocks'\n\nexport type CoinbaseB20CatalogToken = CoinbaseB20KnownToken & { name: string }\n\nconst CATALOG_TTL_MS = 15 * 60 * 1000\nconst CATALOG_MAX = 500\n\nlet catalogRows: CoinbaseB20CatalogToken[] | null = null\nlet catalogAt = 0\nlet catalogInflight: Promise<CoinbaseB20CatalogToken[]> | null = null\nconst catalogBySymbol = new Map<string, CoinbaseB20CatalogToken>()\nconst catalogByAddress = new Map<string, CoinbaseB20CatalogToken>()\n\nfunction indexCatalog(rows: CoinbaseB20CatalogToken[]) {\n catalogRows = rows\n catalogAt = Date.now()\n catalogBySymbol.clear()\n catalogByAddress.clear()\n for (const row of rows) {\n catalogBySymbol.set(row.symbol.toLowerCase(), row)\n catalogByAddress.set(row.address.toLowerCase(), row)\n }\n}\n\n/** Test hook. Production loads this from the Coinbase tokenized-stocks API. */\nexport function applyCoinbaseB20StockCatalog(rows: CoinbaseB20CatalogToken[]): void {\n indexCatalog(rows)\n}\n\nexport function clearCoinbaseB20StockCatalog(): void {\n catalogRows = null\n catalogAt = 0\n catalogBySymbol.clear()\n catalogByAddress.clear()\n}\n\nexport function coinbaseB20CatalogTokens(): readonly CoinbaseB20CatalogToken[] {\n return catalogRows ?? []\n}\n\nexport function parseCoinbaseTokenizedStocksPayload(payload: unknown): CoinbaseB20CatalogToken[] {\n const tokens = Array.isArray(payload)\n ? payload\n : payload && typeof payload === 'object' && Array.isArray((payload as { tokens?: unknown }).tokens)\n ? (payload as { tokens: unknown[] }).tokens\n : []\n const out: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n for (const row of tokens) {\n if (!row || typeof row !== 'object') continue\n const rec = row as Record<string, unknown>\n const symbol = typeof rec.symbol === 'string' ? rec.symbol.trim() : ''\n const addressRaw = typeof rec.contract_address === 'string' ? rec.contract_address.trim() : ''\n if (!looksLikeCoinbaseStockSymbol(symbol) || !isCoinbaseB20AssetToken(addressRaw)) continue\n const address = getAddress(addressRaw as `0x${string}`)\n const key = address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n const name = typeof rec.name === 'string' && rec.name.trim() ? rec.name.trim() : symbol\n const iconUrl = typeof rec.icon_url === 'string' && rec.icon_url.trim() ? rec.icon_url.trim() : undefined\n const decimals =\n typeof rec.decimals === 'number' && Number.isInteger(rec.decimals) && rec.decimals >= 0 && rec.decimals <= 18\n ? rec.decimals\n : COINBASE_B20_STOCK_DECIMALS\n out.push({ address, symbol, name, decimals, iconUrl })\n if (out.length >= CATALOG_MAX) break\n }\n return out\n}\n\nasync function fetchCoinbaseB20StockCatalog(): Promise<CoinbaseB20CatalogToken[]> {\n const merged: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n let pageToken = ''\n for (let page = 0; page < 4; page++) {\n const url = new URL(COINBASE_TOKENIZED_STOCKS_API_URL)\n url.searchParams.set('page_size', '500')\n if (pageToken) url.searchParams.set('page_token', pageToken)\n const res = await fetch(url, { cache: 'no-store', signal: AbortSignal.timeout(8_000) })\n if (!res.ok) break\n const json = (await res.json()) as { next_page_token?: unknown }\n for (const row of parseCoinbaseTokenizedStocksPayload(json)) {\n const key = row.address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n merged.push(row)\n if (merged.length >= CATALOG_MAX) break\n }\n pageToken = typeof json.next_page_token === 'string' ? json.next_page_token.trim() : ''\n if (!pageToken || merged.length >= CATALOG_MAX) break\n }\n if (merged.length > 0) indexCatalog(merged)\n return catalogRows ?? []\n}\n\n/** Live Coinbase list (PYPLc, AMDc, ORCLc, …). Falls back to the seed when the API is down. */\nexport async function ensureCoinbaseB20StockCatalog(): Promise<readonly CoinbaseB20CatalogToken[]> {\n if (catalogRows && catalogRows.length > 0 && Date.now() - catalogAt < CATALOG_TTL_MS) return catalogRows\n if (!catalogInflight) {\n catalogInflight = fetchCoinbaseB20StockCatalog().finally(() => {\n catalogInflight = null\n })\n }\n try {\n return await catalogInflight\n } catch {\n return catalogRows ?? []\n }\n}\n\n/** Resolve a Coinbase B20 ticker or 0x address from the fetched catalog. */\nexport function lookupCoinbaseB20StockToken(token: string): CoinbaseB20KnownToken | null {\n const key = (token ?? '').trim()\n if (!key) return null\n const fromCatalog = catalogBySymbol.get(key.toLowerCase())\n if (fromCatalog) return fromCatalog\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase()) ?? null\n } catch {\n return null\n }\n}\n\nexport function coinbaseB20CatalogName(addressOrSymbol: string): string | undefined {\n const key = (addressOrSymbol ?? '').trim()\n if (!key) return undefined\n const bySymbol = catalogBySymbol.get(key.toLowerCase())\n if (bySymbol?.name) return bySymbol.name\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase())?.name\n } catch {\n return undefined\n }\n}\n\nexport function coinbaseB20SymbolForAddress(address: string): string | null {\n return lookupCoinbaseB20StockToken(address)?.symbol ?? null\n}\n\n/**\n * Addresses pass through. A Coinbase stock ticker (`AAPLc`, `BRK.Bc`) becomes the\n * address from the live tokenized-stocks catalog — the same contract Aave and Aerodrome use.\n */\nexport async function canonicalizeEvmTokenInput(token: string): Promise<string> {\n const raw = (token ?? '').trim()\n if (!raw || isAddress(raw)) return raw\n if (!looksLikeCoinbaseStockSymbol(raw)) return raw\n await ensureCoinbaseB20StockCatalog().catch(() => [])\n const hit = lookupCoinbaseB20StockToken(raw)\n if (!hit) {\n throw new Error(\n `Unknown Coinbase stock ticker \"${raw}\". It is not in the live tokenized-stocks catalog.`,\n )\n }\n return hit.address\n}\n","import { createPublicClient, defineChain, encodeFunctionData, getAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { erc20ApproveAbi, erc20ReadAbi } from './cometAbi.js'\n\nexport type CompoundV3BuildStepKind =\n | 'weth_deposit'\n | 'weth_withdraw'\n | 'approve'\n | 'supply'\n | 'withdraw'\n | 'claim'\n | 'allow'\n | 'bulker_invoke'\n\nexport type CompoundV3BuildStep = {\n kind: CompoundV3BuildStepKind\n to: Address\n data: `0x${string}`\n value: bigint\n}\n\nexport function createCompoundV3PublicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nexport async function pushApproveIfNeeded(args: {\n client: PublicClient\n steps: CompoundV3BuildStep[]\n token: Address\n owner: Address\n spender: Address\n amountWei: bigint\n}): Promise<void> {\n const current = await args.client.readContract({\n address: args.token,\n abi: erc20ReadAbi,\n functionName: 'allowance',\n args: [getAddress(args.owner), getAddress(args.spender)],\n })\n if (current >= args.amountWei) return\n if (current > 0n) {\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), 0n],\n }),\n value: 0n,\n })\n }\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), args.amountWei],\n }),\n value: 0n,\n })\n}\n","import {\n encodeFunctionData,\n getAddress,\n maxUint256,\n parseUnits,\n type Address,\n} from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n cometInterfaceAbi,\n cometRewardsAbi,\n erc20ReadAbi,\n wethAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { canonicalizeEvmTokenInput } from '../shared/coinbaseB20.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n type CompoundV3BuildStepKind,\n} from './txHelpers.js'\n\nconst WETH_DEPOSIT_FALLBACK = 120_000n\nconst WETH_WITHDRAW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst COMET_SUPPLY_FALLBACK = 500_000n\nconst COMET_WITHDRAW_FALLBACK = 600_000n\nconst REWARDS_CLAIM_FALLBACK = 250_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type { CompoundV3BuildStep, CompoundV3BuildStepKind } from './txHelpers.js'\n\ntype CommonBuildArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n}\n\nfunction fallbackGas(kind: CompoundV3BuildStepKind): bigint {\n if (kind === 'weth_deposit') return WETH_DEPOSIT_FALLBACK\n if (kind === 'weth_withdraw') return WETH_WITHDRAW_FALLBACK\n if (kind === 'approve') return ERC20_APPROVE_FALLBACK\n if (kind === 'withdraw') return COMET_WITHDRAW_FALLBACK\n if (kind === 'claim') return REWARDS_CLAIM_FALLBACK\n return COMET_SUPPLY_FALLBACK\n}\n\nfunction finishBatch(args: {\n common: CommonBuildArgs\n steps: CompoundV3BuildStep[]\n purposeSuffix: string\n extraMeta: Record<string, unknown>\n}) {\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: fallbackGas(s.kind),\n }))\n const first = evmSteps[0]\n if (!first) throw new Error('Compound III batch has no steps.')\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.common.keyGen,\n purposeText: args.common.purposeText,\n chainId: args.common.chainId,\n rpcUrl: args.common.rpcUrl,\n executorAddress: getAddress(args.common.executorAddress),\n chainDetail: args.common.chainDetail,\n useCustomGas: args.common.useCustomGas,\n customGasChainDetails: args.common.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n buildBatchMeta: ({ index }) => {\n const s = args.steps[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n to: s.to,\n ...args.extraMeta,\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.common.chainId) },\n compoundV3: { ...args.extraMeta, step: s.kind, comet: args.common.comet },\n }\n },\n })\n}\n\nasync function resolveAmountWei(args: {\n rpcUrl: string\n chainId: number\n asset: Address\n amountHuman: string\n}): Promise<bigint> {\n if (args.amountHuman.trim().toLowerCase() === 'max') return maxUint256\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const dec = await client.readContract({ address: args.asset, abi: erc20ReadAbi, functionName: 'decimals' })\n const amountWei = parseUnits(args.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Amount is zero after converting with token decimals.')\n return amountWei\n}\n\n/**\n * Supply base (earn / repay) or collateral. Native ETH always wraps via WETH.deposit\n * when `isNative` / zero address — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Supply(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: await canonicalizeEvmTokenInput(args.asset),\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const steps: CompoundV3BuildStep[] = []\n\n if (resolved.isNative) {\n steps.push({\n kind: 'weth_deposit',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'deposit', args: [] }),\n value: amountWei,\n })\n }\n\n await pushApproveIfNeeded({\n client,\n steps,\n token: resolved.asset,\n owner: executor,\n spender: market.comet,\n amountWei,\n })\n\n steps.push({\n kind: 'supply',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'supply',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n })\n\n const n = steps.length\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? `Compound III: ${n}-tx batch — wrap native to WETH, approve Comet, supply.`\n : n === 1\n ? 'Compound III: 1-tx — supply (allowance already sufficient).'\n : `Compound III: ${n}-tx batch — approve Comet, then supply.`,\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3Repay(\n args: Parameters<typeof buildEvmMultisignBodyCompoundV3Supply>[0],\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyCompoundV3Supply(args)\n}\n\n/**\n * Withdraw collateral or base. Withdrawing base while undercollateralized is borrow.\n * Native path always unwraps via WETH.withdraw after Comet.withdraw — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Withdraw(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: await canonicalizeEvmTokenInput(args.asset),\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'withdraw',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'withdraw',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n },\n ]\n if (resolved.isNative) {\n if (amountWei === maxUint256) {\n throw new Error('Native ETH unwrap cannot use amount \"max\"; pass an explicit amount to unwrap.')\n }\n steps.push({\n kind: 'weth_withdraw',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'withdraw', args: [amountWei] }),\n value: 0n,\n })\n }\n\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? 'Compound III: 2-tx batch — withdraw WETH from Comet, unwrap to ETH.'\n : 'Compound III: 1-tx — withdraw (borrow if this is base while undercollateralized).',\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n note: 'Withdraw of base while undercollateralized borrows the base asset.',\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3ClaimRewards(args: CommonBuildArgs): Promise<{\n bodyForSign: Record<string, unknown>\n messageToSign: string\n}> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'claim',\n to: market.rewards,\n data: encodeFunctionData({\n abi: cometRewardsAbi,\n functionName: 'claim',\n args: [market.comet, executor, true],\n }),\n value: 0n,\n },\n ]\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: 'Compound III: 1-tx — claim rewards.',\n extraMeta: { market: market.symbol, rewards: market.rewards },\n })\n}\n","import { encodeAbiParameters, encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n BULKER_ACTION_CLAIM_REWARD,\n BULKER_ACTION_SUPPLY_ASSET,\n BULKER_ACTION_SUPPLY_NATIVE_TOKEN,\n BULKER_ACTION_WITHDRAW_ASSET,\n BULKER_ACTION_WITHDRAW_NATIVE_TOKEN,\n cometBulkerAbi,\n cometInterfaceAbi,\n erc20ReadAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n} from './txHelpers.js'\n\nconst ALLOW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst BULKER_INVOKE_FALLBACK = 900_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type CompoundV3BulkerStepInput = {\n action: 'supply' | 'withdraw' | 'claim'\n asset?: string\n amountHuman?: string\n isNative?: boolean\n}\n\nconst cometAllowAbi = parseAbi(['function allow(address manager, bool isAllowed)'])\n\n/**\n * Combined Bulker.invoke. Native supply/withdraw uses ACTION_*_NATIVE_TOKEN.\n * Requires ERC-20 approve(bulker) and Comet.allow(bulker) when not already set.\n */\nexport async function buildEvmMultisignBodyCompoundV3Bulker(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n steps: CompoundV3BulkerStepInput[]\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (!args.steps?.length) throw new Error('Bulker requires at least one step.')\n const market = requireCompoundV3Market(args.chainId, args.comet)\n if (!market.bulker) throw new Error(`No Bulker contract for ${market.symbol} on chain ${args.chainId}.`)\n const bulker = market.bulker\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n\n const allowed = await client\n .readContract({\n address: market.comet,\n abi: cometInterfaceAbi,\n functionName: 'hasPermission',\n args: [executor, bulker],\n })\n .catch(() => false)\n\n const prefix: CompoundV3BuildStep[] = []\n if (!allowed) {\n prefix.push({\n kind: 'allow',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometAllowAbi,\n functionName: 'allow',\n args: [bulker, true],\n }),\n value: 0n,\n })\n }\n\n const actions: `0x${string}`[] = []\n const datas: `0x${string}`[] = []\n let nativeValue = 0n\n\n for (const step of args.steps) {\n if (step.action === 'claim') {\n actions.push(BULKER_ACTION_CLAIM_REWARD)\n datas.push(\n encodeAbiParameters(\n [\n { type: 'address' },\n { type: 'address' },\n { type: 'address' },\n { type: 'bool' },\n ],\n [market.comet, market.rewards, executor, true],\n ),\n )\n continue\n }\n if (!step.asset || !step.amountHuman) {\n throw new Error(`Bulker ${step.action} requires asset and amountHuman.`)\n }\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: step.asset,\n isNative: step.isNative,\n })\n const dec = await client.readContract({\n address: resolved.asset,\n abi: erc20ReadAbi,\n functionName: 'decimals',\n })\n const amountWei = parseUnits(step.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Bulker step amount is zero.')\n\n if (step.action === 'supply') {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_SUPPLY_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n nativeValue += amountWei\n } else {\n await pushApproveIfNeeded({\n client,\n steps: prefix,\n token: resolved.asset,\n owner: executor,\n spender: bulker,\n amountWei,\n })\n actions.push(BULKER_ACTION_SUPPLY_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n } else {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_WITHDRAW_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n } else {\n actions.push(BULKER_ACTION_WITHDRAW_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n }\n }\n\n const invokeData = encodeFunctionData({\n abi: cometBulkerAbi,\n functionName: 'invoke',\n args: [actions, datas],\n })\n prefix.push({\n kind: 'bulker_invoke',\n to: bulker,\n data: invokeData,\n value: nativeValue,\n })\n\n const evmSteps: EvmTxStep[] = prefix.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas:\n s.kind === 'approve' ? ERC20_APPROVE_FALLBACK : s.kind === 'allow' ? ALLOW_FALLBACK : BULKER_INVOKE_FALLBACK,\n }))\n const first = evmSteps[0]!\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: `Compound III: ${evmSteps.length}-tx Bulker batch (${args.steps.map((s) => s.action).join(', ')}).`,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n payableValueWei: nativeValue > 0n ? nativeValue : undefined,\n buildBatchMeta: ({ index }) => {\n const s = prefix[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n bulker,\n comet: market.comet,\n actions: args.steps.map((st) => st.action),\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.chainId) },\n compoundV3: { market: market.symbol, comet: market.comet, bulker, step: s.kind },\n }\n },\n })\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { COMPOUND_V3_PROTOCOL_ID, isCompoundV3ChainSupported } from './support.js'\n\nexport const compoundV3ProtocolModule: ProtocolModule = {\n id: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n const id = typeof ctx.chainId === 'string' ? Number(ctx.chainId) : ctx.chainId\n return ctx.chainCategory === 'evm' && isCompoundV3ChainSupported(id)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'native' || token.kind === 'erc20')\n },\n actions: [\n {\n id: 'compound-v3.supply',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Supply base (earn/repay) or collateral to a Comet proxy',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.withdraw',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw collateral or base (withdraw of base while undercollateralized = borrow)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.repay',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Repay base debt by supplying base',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.claim-rewards',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim COMP / reward token from CometRewards',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.bulker',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Combined Bulker.invoke (optional)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(compoundV3ProtocolModule)\n\nexport * from './support.js'\nexport * from './markets.js'\nexport * from './cometAbi.js'\nexport * from './compoundJs.js'\nexport * from './apr.js'\nexport * from './subgraph.js'\nexport * from './reads.js'\nexport * from './multisign.js'\nexport * from './bulkerMultisign.js'\nexport * from './txHelpers.js'\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/compound-v3/support.ts","../../../../src/protocols/evm/compound-v3/markets.ts","../../../../src/protocols/evm/compound-v3/cometAbi.ts","../../../../src/protocols/evm/compound-v3/compound-js-artifacts/comet-constants.json","../../../../src/protocols/evm/compound-v3/compoundJs.ts","../../../../src/protocols/evm/compound-v3/apr.ts","../../../../src/protocols/evm/compound-v3/subgraph.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/compound-v3/reads.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/unsignedMessageRaw.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/shared/coinbaseB20.ts","../../../../src/protocols/evm/compound-v3/txHelpers.ts","../../../../src/protocols/evm/compound-v3/multisign.ts","../../../../src/protocols/evm/compound-v3/bulkerMultisign.ts","../../../../src/protocols/evm/compound-v3/index.ts"],"names":["getAddress","zeroAddress","parseAbi","stringToHex","http","defineChain","createPublicClient","formatUnits","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","publicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","isAddress","encodeFunctionData","maxUint256","parseUnits","ERC20_APPROVE_FALLBACK","encodeAbiParameters"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\n\nexport const COMPOUND_V3_PROTOCOL_ID = 'compound-v3'\n\n/** Live Comet deployments. Scroll and Ronin omitted (effectively dead). Testnets omitted. */\nexport const COMPOUND_V3_CHAIN_IDS = [1, 8453, 42161, 10, 137, 5000, 130, 59144] as const\n\nexport type CompoundV3ChainId = (typeof COMPOUND_V3_CHAIN_IDS)[number]\n\nexport const COMPOUND_V3_WRAPPED_NATIVE: Readonly<Record<number, Address>> = {\n 1: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n 8453: getAddress('0x4200000000000000000000000000000000000006'),\n 42161: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n 10: getAddress('0x4200000000000000000000000000000000000006'),\n 137: getAddress('0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'),\n 5000: getAddress('0x78c1b0C915c4CD0f08633e2ec3d4961Ab0237669'),\n 130: getAddress('0x4200000000000000000000000000000000000006'),\n 59144: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n}\n\nexport function isCompoundV3ChainSupported(chainId: number): boolean {\n return (COMPOUND_V3_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function compoundV3WrappedNative(chainId: number): Address | null {\n return COMPOUND_V3_WRAPPED_NATIVE[chainId] ?? null\n}\n\nexport function isNativeAssetAddress(address: string): boolean {\n try {\n return getAddress(address) === zeroAddress\n } catch {\n return false\n }\n}\n\nexport function resolveCompoundV3ActionAsset(args: {\n chainId: number\n asset: string\n isNative?: boolean\n}): { asset: Address; isNative: boolean; nativeWrapped: Address | null } {\n const nativeWrapped = compoundV3WrappedNative(args.chainId)\n const isNative = args.isNative === true || isNativeAssetAddress(args.asset)\n if (isNative) {\n if (!nativeWrapped) {\n throw new Error(`No wrapped native token configured for Compound III on chain ${args.chainId}.`)\n }\n return { asset: nativeWrapped, isNative: true, nativeWrapped }\n }\n return { asset: getAddress(args.asset), isNative: false, nativeWrapped }\n}\n","import { getAddress, type Address } from 'viem'\nimport { COMPOUND_V3_CHAIN_IDS, isCompoundV3ChainSupported } from './support.js'\n\nexport type CompoundV3MarketRecord = {\n chainId: number\n slug: string\n symbol: string\n comet: Address\n rewards: Address\n bulker: Address | null\n /** Known base token when documented; on-chain `baseToken()` wins. */\n baseToken?: Address\n source: 'comet-deployments'\n}\n\n/**\n * Official Comet proxy + Rewards + Bulker from\n * https://github.com/compound-finance/comet/tree/main/deployments\n * (`roots.json`). Always use `comet` (proxy) with CometInterface — never the implementation.\n */\nexport const COMPOUND_V3_MARKETS: readonly CompoundV3MarketRecord[] = [\n // Ethereum\n {\n chainId: 1,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xc3d688B66703497DAA19211EEdff47f25384cdc3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x5D409e56D886231aDAf00c8775665AD0f9897b56'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdC035D45d973E3EC169d2276DDab16f1e407384F'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdAC17F958D2ee523a2206206994597C13D831ec7'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wbtc',\n symbol: 'cWBTCv3',\n comet: getAddress('0xe85Dc543813B8c2CFEaAc371517b925a166a9293'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xA17581A9E3356d9A858b789D68B4d866e593aE94'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wsteth',\n symbol: 'cWstETHv3',\n comet: getAddress('0x3D0bb1ccaB520A66e607822fC55BC921738fAFE3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n baseToken: getAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),\n source: 'comet-deployments',\n },\n // Base\n {\n chainId: 8453,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xb125E6687d4313864e53df431d5425969c15Eb2F'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usdbc',\n symbol: 'cUSDbCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x820C137fa70C8691f0e44Dc420a5e53c168921Dc'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x46e6b214b524310239732D51387075E0e70970bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'aero',\n symbol: 'cAEROv3',\n comet: getAddress('0x784efeB622244d2348d4F2522f8860B96fbEcE89'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x940181a94A35A4569E4529A3CDfB74e38FD98631'),\n source: 'comet-deployments',\n },\n // Arbitrum\n {\n chainId: 42161,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xaf88d065e77c8cC2239327C5EDb3A432268e5831'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdc.e',\n symbol: 'cUSDC.ev3',\n comet: getAddress('0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xd98Be00b5D27fc98112BdE293e487f8D4cA57d07'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n source: 'comet-deployments',\n },\n // Optimism\n {\n chainId: 10,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2e44e174f7D53F0212823acC11C01A11d58c5bCB'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x995E394b8B2437aC8Ce61Ee0bC610D617962B214'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xE36A30D249f7761327fd973001A32010b521b6Fd'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Polygon\n {\n chainId: 137,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xF25212E676D1F7F89Cd72fFEe66158f541246445'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'),\n source: 'comet-deployments',\n },\n {\n chainId: 137,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xaeB318360f27748Acb200CE616E389A6C9409a07'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0xc2132D05D31c914a87C6611C10748AEb04B58e8F'),\n source: 'comet-deployments',\n },\n // Mantle\n {\n chainId: 5000,\n slug: 'usde',\n symbol: 'cUSDev3',\n comet: getAddress('0x606174f62cd968d8e684c645080fa694c1D7786E'),\n rewards: getAddress('0xCd83CbBFCE149d141A5171C3D6a0F0fCCeE225Ab'),\n bulker: getAddress('0x67DFCa85CcEEFA2C5B1dB4DEe3BEa716A28B9baa'),\n source: 'comet-deployments',\n },\n // Unichain\n {\n chainId: 130,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x078D782b760474a361dDA0AF3839290b0EF57AD6'),\n source: 'comet-deployments',\n },\n {\n chainId: 130,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6C987dDE50dB1dcDd32Cd4175778C2a291978E2a'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Linea\n {\n chainId: 59144,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x8D38A3d6B3c3B7d96D6536DA7Eef94A9d7dbC991'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0x176211869cA2b568f2A7D4EE941E073a821EE1ff'),\n source: 'comet-deployments',\n },\n {\n chainId: 59144,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x60F2058379716A64a7A5d29219397e79bC552194'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n source: 'comet-deployments',\n },\n]\n\nexport function listCompoundV3SupportedChainIds(): number[] {\n return [...COMPOUND_V3_CHAIN_IDS]\n}\n\nexport function listCompoundV3MarketsForChain(chainId: number): CompoundV3MarketRecord[] {\n if (!isCompoundV3ChainSupported(chainId)) return []\n return COMPOUND_V3_MARKETS.filter((m) => m.chainId === chainId)\n}\n\nexport function getCompoundV3MarketByComet(chainId: number, comet: string): CompoundV3MarketRecord | null {\n let normalized: string\n try {\n normalized = getAddress(comet)\n } catch {\n return null\n }\n return COMPOUND_V3_MARKETS.find((m) => m.chainId === chainId && m.comet === normalized) ?? null\n}\n\nexport function requireCompoundV3Market(chainId: number, comet: string): CompoundV3MarketRecord {\n const market = getCompoundV3MarketByComet(chainId, comet)\n if (!market) {\n throw new Error(\n `Unknown Compound III Comet proxy ${comet} on chain ${chainId}. Use ctm_compound_v3_fetch_markets.`,\n )\n }\n return market\n}\n\nexport function listCompoundV3KnownTokenAddresses(chainId: number): Address[] {\n const out = new Set<string>()\n for (const m of listCompoundV3MarketsForChain(chainId)) {\n out.add(m.comet)\n if (m.baseToken) out.add(m.baseToken)\n }\n return [...out] as Address[]\n}\n","import { parseAbi, stringToHex } from 'viem'\n\n/** CometInterface — call on the proxy only. Sourced from compound-js Comet ABI + Comet docs. */\nexport const cometInterfaceAbi = parseAbi([\n 'function supply(address asset, uint256 amount)',\n 'function supplyTo(address dst, address asset, uint256 amount)',\n 'function withdraw(address asset, uint256 amount)',\n 'function withdrawTo(address to, address asset, uint256 amount)',\n 'function allow(address manager, bool isAllowed)',\n 'function hasPermission(address owner, address manager) view returns (bool)',\n 'function balanceOf(address account) view returns (uint256)',\n 'function borrowBalanceOf(address account) view returns (uint256)',\n 'function collateralBalanceOf(address account, address asset) view returns (uint128)',\n 'function baseToken() view returns (address)',\n 'function baseTokenPriceFeed() view returns (address)',\n 'function decimals() view returns (uint8)',\n 'function numAssets() view returns (uint8)',\n 'function getUtilization() view returns (uint256)',\n 'function getSupplyRate(uint256 utilization) view returns (uint64)',\n 'function getBorrowRate(uint256 utilization) view returns (uint64)',\n 'function getPrice(address priceFeed) view returns (uint256)',\n 'function isBorrowCollateralized(address account) view returns (bool)',\n 'function isLiquidatable(address account) view returns (bool)',\n 'function getAssetInfo(uint8 i) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function getAssetInfoByAddress(address asset) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function baseTrackingSupplySpeed() view returns (uint256)',\n 'function baseTrackingBorrowSpeed() view returns (uint256)',\n 'function baseIndexScale() view returns (uint64)',\n 'function trackingIndexScale() view returns (uint256)',\n 'function totalSupply() view returns (uint256)',\n 'function totalBorrow() view returns (uint256)',\n])\n\nexport const cometRewardsAbi = parseAbi([\n 'function getRewardOwed(address comet, address account) view returns ((address token, uint256 owed))',\n 'function claim(address comet, address src, bool shouldAccrue)',\n 'function rewardConfig(address comet) view returns ((address token, uint64 rescaleFactor, bool shouldUpscale))',\n])\n\nexport const cometBulkerAbi = parseAbi([\n 'function invoke(bytes32[] actions, bytes[] data) payable',\n])\n\nexport const erc20ReadAbi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function symbol() view returns (string)',\n 'function name() view returns (string)',\n])\n\nexport const erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nexport const wethAbi = parseAbi(['function deposit() payable', 'function withdraw(uint256 wad)'])\n\n/** Solidity `bytes32 constant ACTION_* = \"ACTION_*\"` (short string). */\nexport function bulkerActionId(name: string): `0x${string}` {\n return stringToHex(name, { size: 32 })\n}\n\nexport const BULKER_ACTION_SUPPLY_ASSET = bulkerActionId('ACTION_SUPPLY_ASSET')\nexport const BULKER_ACTION_SUPPLY_NATIVE_TOKEN = bulkerActionId('ACTION_SUPPLY_NATIVE_TOKEN')\nexport const BULKER_ACTION_WITHDRAW_ASSET = bulkerActionId('ACTION_WITHDRAW_ASSET')\nexport const BULKER_ACTION_WITHDRAW_NATIVE_TOKEN = bulkerActionId('ACTION_WITHDRAW_NATIVE_TOKEN')\nexport const BULKER_ACTION_CLAIM_REWARD = bulkerActionId('ACTION_CLAIM_REWARD')\nexport const BULKER_ACTION_TRANSFER_ASSET = bulkerActionId('ACTION_TRANSFER_ASSET')\n","{\"moveToParentClass\":{\"Comet\":\"Comet\",\"MAINNET_USDC\":\"mainnet_usdc\",\"COMP\":\"COMP\",\"WBTC\":\"WBTC\",\"WETH\":\"WETH\",\"UNI\":\"UNI\",\"LINK\":\"LINK\",\"USDC\":\"USDC\",\"MAINNET_WETH\":\"mainnet_weth\",\"cbETH\":\"cbETH\",\"wstETH\":\"wstETH\",\"POLYGON_USDC\":\"polygon_usdc\",\"WMATIC\":\"WMATIC\",\"MaticX\":\"MaticX\",\"ARBITRUM_USDC\":\"arbitrum_usdc\",\"ARB\":\"ARB\",\"GMX\":\"GMX\",\"BASE_USDBC\":\"base_usdbc\",\"USDbC\":\"USDbC\",\"BASE_WETH\":\"base_weth\",\"GOERLI_USDC\":\"goerli_usdc\",\"GOERLI_WETH\":\"goerli_weth\",\"MUMBAI_USDC\":\"mumbai_usdc\",\"DAI\":\"DAI\",\"GOERLI_ARBITRUM_USDC\":\"goerli_arbitrum_usdc\",\"GOERLI_OPTIMISM_USDC\":\"goerli_optimism_usdc\",\"OP\":\"OP\",\"GOERLI_BASE_USDC\":\"goerli_base_usdc\",\"GOERLI_BASE_WETH\":\"goerli_base_weth\",\"FUJI_USDC\":\"fuji_usdc\",\"WBTC_e\":\"WBTC_e\",\"WAVAX\":\"WAVAX\"},\"address\":{\"mainnet_usdc\":{\"COMP\":{\"contract\":\"0xc00e94Cb662C3520282E6f5717214004A7f26888\",\"priceFeed\":\"0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5\"},\"WBTC\":{\"contract\":\"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\",\"priceFeed\":\"0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"},\"UNI\":{\"contract\":\"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\",\"priceFeed\":\"0x553303d460EE0afB37EdFf9bE42922D8FF63220e\"},\"LINK\":{\"contract\":\"0x514910771AF9Ca656af840dff83E8264EcF986CA\",\"priceFeed\":\"0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c\"},\"USDC\":{\"contract\":\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"priceFeed\":\"0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6\"},\"Comet\":\"0xc3d688B66703497DAA19211EEdff47f25384cdc3\"},\"mainnet_weth\":{\"cbETH\":{\"contract\":\"0xBe9895146f7AF43049ca1c1AE358B0541Ea49704\",\"priceFeed\":\"0x23a982b74a3236A5F2297856d4391B2edBBB5549\"},\"wstETH\":{\"contract\":\"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0\",\"priceFeed\":\"0x4F67e4d9BD67eFa28236013288737D39AeF48e79\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0xD72ac1bCE9177CFe7aEb5d0516a38c88a64cE0AB\"},\"Comet\":\"0xA17581A9E3356d9A858b789D68B4d866e593aE94\"},\"polygon_usdc\":{\"WETH\":{\"contract\":\"0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619\",\"priceFeed\":\"0xF9680D99D6C9589e2a93a78A04A279e509205945\"},\"WBTC\":{\"contract\":\"0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6\",\"priceFeed\":\"0xDE31F8bFBD8c84b5360CFACCa3539B938dd78ae6\"},\"WMATIC\":{\"contract\":\"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\"priceFeed\":\"0xAB594600376Ec9fD91F8e885dADF0CE036862dE0\"},\"MaticX\":{\"contract\":\"0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6\",\"priceFeed\":\"0x5d37E4b374E6907de8Fc7fb33EE3b0af403C7403\"},\"USDC\":{\"contract\":\"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\"priceFeed\":\"0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7\"},\"Comet\":\"0xF25212E676D1F7F89Cd72fFEe66158f541246445\"},\"arbitrum_usdc\":{\"ARB\":{\"contract\":\"0x912CE59144191C1204E64559FE8253a0e49E6548\",\"priceFeed\":\"0xb2A824043730FE05F3DA2efaFa1CBbe83fa548D6\"},\"GMX\":{\"contract\":\"0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a\",\"priceFeed\":\"0xDB98056FecFff59D032aB628337A4887110df3dB\"},\"WETH\":{\"contract\":\"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\"priceFeed\":\"0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612\"},\"WBTC\":{\"contract\":\"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\",\"priceFeed\":\"0xd0C7101eACbB49F3deCcCc166d238410D6D46d57\"},\"USDC\":{\"contract\":\"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\"priceFeed\":\"0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3\"},\"Comet\":\"0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA\"},\"base_usdbc\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x4687670f5f01716fAA382E2356C103BaD776752C\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70\"},\"USDbC\":{\"contract\":\"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA\",\"priceFeed\":\"0x7e860098F58bBFC8648a4311b374B1D669a2bc6B\"},\"Comet\":\"0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf\"},\"base_weth\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x59e242D352ae13166B4987aE5c990C232f7f7CD6\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x9f485610E26B9c0140439f88Dc0C7742903Bd1CF\"},\"Comet\":\"0x46e6b214b524310239732D51387075E0e70970bf\"},\"goerli_usdc\":{\"COMP\":{\"contract\":\"0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4\",\"priceFeed\":\"0x54a06047087927D9B0fb21c1cf0ebd792764dDB8\"},\"WBTC\":{\"contract\":\"0xAAD4992D949f9214458594dF92B44165Fb84dC19\",\"priceFeed\":\"0xA39434A63A52E749F02807ae27335515BA4b07F7\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e\"},\"LINK\":{\"contract\":\"0xaf95Ff5fB592646D86BF240B3CaE0903b6E4dd38\",\"priceFeed\":\"0x48731cF7e84dc94C5f84577882c14Be11a5B7456\"},\"USDC\":{\"contract\":\"0x07865c6E87B9F70255377e024ace6630C1Eaa37F\",\"priceFeed\":\"0xAb5c49580294Aff77670F839ea425f5b78ab3Ae7\"},\"Comet\":\"0x3EE77595A8459e93C2888b13aDB354017B198188\"},\"goerli_weth\":{\"cbETH\":{\"contract\":\"0x2459f06a13ea0997d623224F362519bE71507258\",\"priceFeed\":\"0xb79BbFE63309E036dDFa1BD44513d956BeE55c2a\"},\"wstETH\":{\"contract\":\"0x4942BBAf745f235e525BAff49D31450810EDed5b\",\"priceFeed\":\"0x5608d174a3B828abb4eE8b9B6a6433f2346c3E54\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0x1eb99992A2e3456ed2c8C6eD87E4c029bC679FeF\"},\"Comet\":\"0x9A539EEc489AAA03D588212a164d0abdB5F08F5F\"},\"mumbai_usdc\":{\"DAI\":{\"contract\":\"0x4DAFE12E1293D889221B1980672FE260Ac9dDd28\",\"priceFeed\":\"0x0FCAa9c899EC5A91eBc3D5Dd869De833b06fB046\"},\"WETH\":{\"contract\":\"0xE1e67212B1A4BF629Bdf828e08A3745307537ccE\",\"priceFeed\":\"0x0715A7794a1dc8e42615F059dD6e406A6594651A\"},\"WBTC\":{\"contract\":\"0x4B5A0F4E00bC0d6F16A593Cae27338972614E713\",\"priceFeed\":\"0x007A22900a3B98143368Bd5906f8E17e9867581b\"},\"WMATIC\":{\"contract\":\"0xfec23a9E1DBA805ADCF55E0338Bf5E03488FC7Fb\",\"priceFeed\":\"0xd0D5e3DB44DE05E9F294BB0a3bEEaF030DE24Ada\"},\"USDC\":{\"contract\":\"0xDB3cB4f2688daAB3BFf59C24cC42D4B6285828e9\",\"priceFeed\":\"0x572dDec9087154dC5dfBB1546Bb62713147e0Ab0\"},\"Comet\":\"0xF09F0369aB0a875254fB565E52226c88f10Bc839\"},\"goerli_arbitrum_usdc\":{\"LINK\":{\"contract\":\"0xbb7303602bE1B9149B097aAFb094ffce1860E532\",\"priceFeed\":\"0xd28Ba6CA3bB72bF371b80a2a0a33cBcf9073C954\"},\"WETH\":{\"contract\":\"0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3\",\"priceFeed\":\"0x62CAe0FA2da220f43a51F86Db2EDb36DcA9A5A08\"},\"WBTC\":{\"contract\":\"0x22d5e2dE578677791f6c90e0110Ec629be9d5Fb5\",\"priceFeed\":\"0x6550bc2301936011c1334555e62A87705A81C12C\"},\"USDC\":{\"contract\":\"0x8FB1E3fC51F3b789dED7557E680551d93Ea9d892\",\"priceFeed\":\"0x1692Bdd32F31b831caAc1b0c9fAF68613682813b\"},\"Comet\":\"0x1d573274E19174260c5aCE3f2251598959d24456\"},\"goerli_optimism_usdc\":{\"OP\":{\"contract\":\"0x32719c5e2e35909C8f42167315445e349e749E05\",\"priceFeed\":\"0xE882831E58eec48B7f304482771F67e6b846733D\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x57241A37733983F97C4Ab06448F244A1E0Ca0ba8\"},\"WBTC\":{\"contract\":\"0xe0a592353e81a94Db6E3226fD4A99F881751776a\",\"priceFeed\":\"0xC16679B963CeB52089aD2d95312A5b85E318e9d2\"},\"USDC\":{\"contract\":\"0x7E07E15D2a87A24492740D16f5bdF58c16db0c4E\",\"priceFeed\":\"0x2636B223652d388721A0ED2861792DA9062D8C73\"},\"Comet\":\"0xb8F2f9C84ceD7bBCcc1Db6FB7bb1F19A9a4adfF4\"},\"goerli_base_usdc\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"USDC\":{\"contract\":\"0x31D3A7711a74b4Ec970F50c3eaf1ee47ba803A95\",\"priceFeed\":\"0xb85765935B4d9Ab6f841c9a00690Da5F34368bc0\"},\"Comet\":\"0xe78Fc55c884704F9485EDa042fb91BfE16fD55c1\"},\"goerli_base_weth\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0x5B0156A396BdFc2eb814D945Ac99C40A0F8592B2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x22738A450dDA849BedDFcA219739a5d72dfB3Ec6\"},\"Comet\":\"0xED94f3052638620fE226a9661ead6a39C2a265bE\"},\"fuji_usdc\":{\"WBTC_e\":{\"contract\":\"0xfa78400e01Fc9da830Cb2F13B3e7E18F813414Ff\",\"priceFeed\":\"0x31CF013A08c6Ac228C94551d535d5BAfE19c602a\"},\"WAVAX\":{\"contract\":\"0xA2c25E48269e3f89A60b2CC8e02AAfEeB3BAb761\",\"priceFeed\":\"0x5498BB86BC934c8D34FDA08E81D444153d0D06aD\"},\"USDC\":{\"contract\":\"0x4fed3d02D095f7D92AF161311fA6Ef23dc8dA040\",\"priceFeed\":\"0x7898AcCC83587C3C55116c5230C17a6Cd9C71bad\"},\"Comet\":\"0x59BF4753899C20EA152dEefc6f6A14B2a5CC3021\"}},\"decimals\":{\"mainnet_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"UNI\":18,\"LINK\":18,\"USDC\":6},\"mainnet_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"polygon_usdc\":{\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"MaticX\":18,\"USDC\":6},\"arbitrum_usdc\":{\"ARB\":18,\"GMX\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"base_usdbc\":{\"cbETH\":18,\"WETH\":18,\"USDbC\":6},\"base_weth\":{\"cbETH\":18,\"WETH\":18},\"goerli_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"LINK\":18,\"USDC\":6},\"goerli_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"mumbai_usdc\":{\"DAI\":18,\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"USDC\":6},\"goerli_arbitrum_usdc\":{\"LINK\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_optimism_usdc\":{\"OP\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_base_usdc\":{\"cbETH\":18,\"WETH\":18,\"USDC\":6},\"goerli_base_weth\":{\"cbETH\":18,\"WETH\":18},\"fuji_usdc\":{\"WBTC_e\":8,\"WAVAX\":18,\"USDC\":6}},\"collaterals\":{\"mainnet_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"UNI\",\"LINK\",\"USDC\"],\"mainnet_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"polygon_usdc\":[\"WETH\",\"WBTC\",\"WMATIC\",\"MaticX\",\"USDC\"],\"arbitrum_usdc\":[\"ARB\",\"GMX\",\"WETH\",\"WBTC\",\"USDC\"],\"base_usdbc\":[\"cbETH\",\"WETH\",\"USDbC\"],\"base_weth\":[\"cbETH\",\"WETH\"],\"goerli_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"LINK\",\"USDC\"],\"goerli_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"mumbai_usdc\":[\"DAI\",\"WETH\",\"WBTC\",\"WMATIC\",\"USDC\"],\"goerli_arbitrum_usdc\":[\"LINK\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_optimism_usdc\":[\"OP\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_base_usdc\":[\"cbETH\",\"WETH\",\"USDC\"],\"goerli_base_weth\":[\"cbETH\",\"WETH\"],\"fuji_usdc\":[\"WBTC_e\",\"WAVAX\",\"USDC\"]},\"base\":{\"mainnet_usdc\":\"USDC\",\"mainnet_weth\":\"WETH\",\"polygon_usdc\":\"USDC\",\"arbitrum_usdc\":\"USDC\",\"base_usdbc\":\"USDbC\",\"base_weth\":\"WETH\",\"goerli_usdc\":\"USDC\",\"goerli_weth\":\"WETH\",\"mumbai_usdc\":\"USDC\",\"goerli_arbitrum_usdc\":\"USDC\",\"goerli_optimism_usdc\":\"USDC\",\"goerli_base_usdc\":\"USDC\",\"goerli_base_weth\":\"WETH\",\"fuji_usdc\":\"USDC\"},\"instanceNetworkMap\":{\"mainnet_usdc\":\"mainnet\",\"mainnet_weth\":\"mainnet\",\"polygon_usdc\":\"matic\",\"arbitrum_usdc\":\"arbitrum\",\"base_usdbc\":\"base\",\"base_weth\":\"base\",\"goerli_usdc\":\"goerli\",\"goerli_weth\":\"goerli\",\"mumbai_usdc\":\"maticmum\",\"goerli_arbitrum_usdc\":\"optimism-arbitrum\",\"goerli_optimism_usdc\":\"optimism-goerli\",\"goerli_base_usdc\":\"base-goerli\",\"goerli_base_weth\":\"base-goerli\",\"fuji_usdc\":\"ava-fuji\"},\"abi\":[{\"inputs\":[],\"name\":\"Absurd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAsset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDiscount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadMinimum\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadSignatory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientReserves\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt256\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt128\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt64\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NegativeNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoSelfTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCollateralized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForSale\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotLiquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SupplyCapExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimestampTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyAssets\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooMuchSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferInFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferOutFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAbsorbed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"basePaidOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbDebt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"}],\"name\":\"BuyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"PauseAction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SupplyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawReserves\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"absorb\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"accrueAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"name\":\"allow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"allowBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveThis\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseAccrualScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseBorrowMin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseIndexScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseMinForRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenPriceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"baseTrackingAccrued\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingBorrowSpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingSupplySpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"buyCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"collateralBalanceOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extensionDelegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factorScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"i\",\"type\":\"uint8\"}],\"name\":\"getAssetInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetInfoByAddress\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getBorrowRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getCollateralReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getSupplyRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUtilization\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isAbsorbPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBorrowCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBuyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSupplyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTransferPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isWithdrawPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidatorPoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"numAbsorbs\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"numAbsorbed\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"approxSpend\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"_reserved\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGuardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"}],\"name\":\"quoteCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storeFrontPriceFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalsBasic\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"baseSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint104\",\"name\":\"totalSupplyBase\",\"type\":\"uint104\"},{\"internalType\":\"uint104\",\"name\":\"totalBorrowBase\",\"type\":\"uint104\"},{\"internalType\":\"uint40\",\"name\":\"lastAccrualTime\",\"type\":\"uint40\"},{\"internalType\":\"uint8\",\"name\":\"pauseFlags\",\"type\":\"uint8\"}],\"internalType\":\"struct CometStorage.TotalsBasic\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalsCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"totalSupplyAsset\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trackingIndexScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAssetFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userBasic\",\"outputs\":[{\"internalType\":\"int104\",\"name\":\"principal\",\"type\":\"int104\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingAccrued\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"assetsIn\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"_reserved\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"balance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]}","/**\n * Isolated adapter over official Compound.js artifacts\n * (https://github.com/compound-finance/compound-js).\n *\n * The npm package peers ethers@5 and cannot be a hard runtime dependency next to\n * ethers@6 / viem. We vendor `comet-constants.json` from that repo and treat\n * official comet `deployments/` as the address source of truth.\n */\nimport { getAddress, type Address } from 'viem'\nimport cometConstants from './compound-js-artifacts/comet-constants.json'\n\nexport type CompoundJsInstanceId = string\n\ntype CompoundJsAddressMap = Record<string, Record<string, string | { contract?: string }>>\n\nconst INSTANCE_CHAIN_ID: Readonly<Record<string, number>> = {\n mainnet_usdc: 1,\n mainnet_weth: 1,\n polygon_usdc: 137,\n arbitrum_usdc: 42161,\n base_usdbc: 8453,\n base_weth: 8453,\n}\n\nexport type CompoundJsKnownComet = {\n instanceId: string\n chainId: number\n comet: Address\n baseSymbol: string\n collateralSymbols: string[]\n}\n\nfunction asAddressMap(): CompoundJsAddressMap {\n return cometConstants.address as CompoundJsAddressMap\n}\n\nexport function listCompoundJsCometInstances(): CompoundJsKnownComet[] {\n const address = asAddressMap()\n const base = cometConstants.base as Record<string, string>\n const collaterals = cometConstants.collaterals as Record<string, string[]>\n const out: CompoundJsKnownComet[] = []\n for (const [instanceId, contracts] of Object.entries(address)) {\n if (instanceId.startsWith('goerli_') || instanceId.startsWith('mumbai_') || instanceId.startsWith('fuji_')) {\n continue\n }\n const chainId = INSTANCE_CHAIN_ID[instanceId]\n const cometRaw = contracts.Comet\n if (typeof cometRaw !== 'string' || chainId == null) continue\n out.push({\n instanceId,\n chainId,\n comet: getAddress(cometRaw),\n baseSymbol: base[instanceId] ?? instanceId,\n collateralSymbols: collaterals[instanceId] ?? [],\n })\n }\n return out\n}\n\nexport function compoundJsCometAddress(instanceId: string): Address | null {\n const row = asAddressMap()[instanceId]\n const comet = row?.Comet\n if (typeof comet !== 'string') return null\n return getAddress(comet)\n}\n\nexport function compoundJsCollateralAddresses(instanceId: string): Address[] {\n const row = asAddressMap()[instanceId]\n const names = (cometConstants.collaterals as Record<string, string[]>)[instanceId] ?? []\n const out: Address[] = []\n for (const name of names) {\n const entry = row?.[name]\n const contract = typeof entry === 'string' ? entry : entry?.contract\n if (!contract) continue\n out.push(getAddress(contract))\n }\n return out\n}\n\n/** Cross-check: official deployment proxy should match Compound.js when both list the market. */\nexport function compoundJsAgreesWithOfficial(instanceId: string, officialComet: string): boolean {\n const js = compoundJsCometAddress(instanceId)\n if (!js) return false\n return js === getAddress(officialComet)\n}\n","/** Compound III rates are per-second, scaled by 1e18. */\n\nexport const COMPOUND_V3_SECONDS_PER_YEAR = 365 * 24 * 60 * 60\nexport const COMPOUND_V3_FACTOR_SCALE = 10n ** 18n\n\nexport function compoundV3RatePerSecondToAprDecimal(ratePerSecond: bigint): number {\n if (ratePerSecond <= 0n) return 0\n return (Number(ratePerSecond) / 1e18) * COMPOUND_V3_SECONDS_PER_YEAR\n}\n\nexport function compoundV3AprToPercentLabel(aprDecimal: number): string {\n if (!Number.isFinite(aprDecimal)) return '—'\n const pct = aprDecimal * 100\n if (Math.abs(pct) < 0.001) return '0.00%'\n return `${pct.toFixed(2)}%`\n}\n\nexport function compoundV3UtilizationToDecimal(utilization: bigint): number {\n if (utilization <= 0n) return 0\n return Number(utilization) / 1e18\n}\n\nexport function compoundV3FactorToPercent(factor: bigint): number {\n return Number(factor) / 1e16\n}\n\n/** Comet `getPrice` scale (USD, 8 decimals). */\nexport const COMPOUND_V3_PRICE_SCALE = 1e8\n/** Default tracking index scale when `trackingIndexScale()` is unavailable. */\nexport const COMPOUND_V3_TRACKING_INDEX_SCALE = 1e15\n\n/**\n * Forward COMP (or other reward-token) APR from tracking speed.\n * `trackingSpeed` is tokens/second × trackingIndexScale. Prices are Comet `getPrice` (1e8 USD).\n */\n/** Returns a percent (5 = 5%), or null when unpriced / zero speed. */\nexport function compoundV3TrackingSpeedToRewardAprPercent(args: {\n trackingSpeed: bigint\n trackingIndexScale: bigint\n totalBase: bigint\n baseDecimals: number\n basePrice: bigint\n rewardPrice: bigint\n}): number | null {\n if (args.trackingSpeed <= 0n || args.totalBase <= 0n || args.basePrice <= 0n || args.rewardPrice <= 0n) {\n return null\n }\n const scale = Number(args.trackingIndexScale > 0n ? args.trackingIndexScale : BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE))\n if (!Number.isFinite(scale) || scale <= 0) return null\n const tokensPerYear = (Number(args.trackingSpeed) / scale) * COMPOUND_V3_SECONDS_PER_YEAR\n const rewardUsdPerYear = tokensPerYear * (Number(args.rewardPrice) / COMPOUND_V3_PRICE_SCALE)\n const totalUsd = (Number(args.totalBase) / 10 ** args.baseDecimals) * (Number(args.basePrice) / COMPOUND_V3_PRICE_SCALE)\n if (!Number.isFinite(rewardUsdPerYear) || !Number.isFinite(totalUsd) || totalUsd <= 0) return null\n const pct = (rewardUsdPerYear / totalUsd) * 100\n if (!Number.isFinite(pct) || pct < 0) return null\n return pct\n}\n","/**\n * Optional PaperclipLabs Compound V3 subgraphs (The Graph).\n * Never used as the execution address source — official comet deployments win.\n */\nconst COMPOUND_V3_SUBGRAPH_BY_CHAIN: Readonly<Record<number, string>> = {\n 1: '5nwMCSHaTqG3Kd2gHznbTXEnZ9QNWsssQfbHhDqQSQFp',\n 137: 'AaFtUWKfFdj2x8nnE3RxTSJkHwGHvawH3VWFBykCGzLs',\n 42161: 'Ff7ha9ELmpmg81D6nYxy4t8aGP26dPztqD1LDJNPqjLS',\n 8453: '2hcXhs36pTBDVUmk5K2Zkr6N4UYGwaHuco2a6jyTsijo',\n 10: 'FhHNkfh5z6Z2WCEBxB6V3s8RPxnJfWZ9zAfM5bVvbvbb',\n}\n\nexport type CompoundV3SubgraphMarketHint = {\n id: string\n comet: string\n}\n\nexport function compoundV3SubgraphIdForChain(chainId: number): string | null {\n return COMPOUND_V3_SUBGRAPH_BY_CHAIN[chainId] ?? null\n}\n\nexport async function fetchCompoundV3SubgraphMarkets(args: {\n chainId: number\n apiKey?: string\n}): Promise<CompoundV3SubgraphMarketHint[] | null> {\n const id = compoundV3SubgraphIdForChain(args.chainId)\n const apiKey = (args.apiKey ?? process.env.THE_GRAPH_API_KEY ?? '').trim()\n if (!id || !apiKey) return null\n const url = `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/${id}`\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n query: `query CompoundV3Markets { markets(first: 50) { id } }`,\n }),\n })\n if (!res.ok) return null\n const json = (await res.json()) as { data?: { markets?: Array<{ id: string }> } }\n const markets = json.data?.markets\n if (!markets) return null\n return markets.map((m) => ({ id: m.id, comet: m.id }))\n } catch {\n return null\n }\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","import { createPublicClient, defineChain, formatUnits, getAddress, zeroAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport {\n COMPOUND_V3_TRACKING_INDEX_SCALE,\n compoundV3AprToPercentLabel,\n compoundV3FactorToPercent,\n compoundV3RatePerSecondToAprDecimal,\n compoundV3TrackingSpeedToRewardAprPercent,\n compoundV3UtilizationToDecimal,\n} from './apr.js'\nimport { cometInterfaceAbi, cometRewardsAbi, erc20ReadAbi } from './cometAbi.js'\nimport {\n getCompoundV3MarketByComet,\n listCompoundV3MarketsForChain,\n type CompoundV3MarketRecord,\n} from './markets.js'\nimport { compoundV3WrappedNative, isCompoundV3ChainSupported, isNativeAssetAddress } from './support.js'\nimport { fetchCompoundV3SubgraphMarkets } from './subgraph.js'\n\nexport type CompoundV3AssetInfoRow = {\n asset: string\n symbol: string\n decimals: number\n borrowCollateralFactorPercent: number\n liquidateCollateralFactorPercent: number\n priceRaw: string\n role: 'base' | 'collateral'\n}\n\nexport type CompoundV3MarketSummary = {\n chainId: number\n slug: string\n symbol: string\n comet: string\n rewards: string\n bulker: string | null\n baseToken: string | null\n utilization: number | null\n supplyAprPercent: string | null\n borrowAprPercent: string | null\n supplyRewardAprPercent: string | null\n borrowRewardAprPercent: string | null\n assets: CompoundV3AssetInfoRow[]\n}\n\nexport type CompoundV3AccountSummary = {\n comet: string\n symbol: string\n baseSupplied: string\n baseBorrowed: string\n collaterals: Array<{ asset: string; symbol: string; balance: string }>\n isBorrowCollateralized: boolean\n isLiquidatable: boolean\n rewardToken: string | null\n rewardOwed: string | null\n}\n\nfunction publicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nasync function readTokenMeta(\n client: PublicClient,\n asset: Address,\n): Promise<{ symbol: string; decimals: number }> {\n const [symbol, decimals] = await Promise.all([\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'symbol' }).catch(() => 'TOKEN'),\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'decimals' }).catch(() => 18),\n ])\n return { symbol: String(symbol), decimals: Number(decimals) }\n}\n\nasync function enrichMarketOnChain(\n client: PublicClient,\n market: CompoundV3MarketRecord,\n): Promise<CompoundV3MarketSummary> {\n const comet = market.comet\n const [baseToken, utilization, numAssets, decimals] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getUtilization' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n ])\n const [supplyRate, borrowRate, baseMeta, baseFeed, supplySpeed, borrowSpeed, totalSupply, totalBorrow, trackingScale] =\n await Promise.all([\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getSupplyRate',\n args: [utilization],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getBorrowRate',\n args: [utilization],\n }),\n readTokenMeta(client, getAddress(baseToken)),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTokenPriceFeed' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingSupplySpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingBorrowSpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalSupply' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalBorrow' }).catch(() => 0n),\n client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'trackingIndexScale' })\n .catch(() => BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE)),\n ])\n const basePrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [baseFeed] })\n .catch(() => 0n)\n\n const assets: CompoundV3AssetInfoRow[] = [\n {\n asset: getAddress(baseToken),\n symbol: baseMeta.symbol,\n decimals: Number(decimals) || baseMeta.decimals,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: basePrice.toString(),\n role: 'base',\n },\n ]\n\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const meta = await readTokenMeta(client, token)\n const price = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n assets.push({\n asset: token,\n symbol: meta.symbol,\n decimals: meta.decimals,\n borrowCollateralFactorPercent: compoundV3FactorToPercent(info.borrowCollateralFactor),\n liquidateCollateralFactorPercent: compoundV3FactorToPercent(info.liquidateCollateralFactor),\n priceRaw: price.toString(),\n role: 'collateral',\n })\n }\n\n let rewardPrice = 0n\n try {\n const cfg = await client.readContract({\n address: getAddress(market.rewards),\n abi: cometRewardsAbi,\n functionName: 'rewardConfig',\n args: [comet],\n })\n const rewardToken = getAddress(cfg.token)\n const listed = assets.find((a) => a.asset.toLowerCase() === rewardToken.toLowerCase())\n if (listed && listed.priceRaw !== '0') {\n rewardPrice = BigInt(listed.priceRaw)\n } else {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfoByAddress',\n args: [rewardToken],\n })\n rewardPrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n }\n } catch {\n rewardPrice = 0n\n }\n\n const baseDecimals = Number(decimals) || baseMeta.decimals\n const supplyRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: supplySpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalSupply,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n const borrowRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: borrowSpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalBorrow,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: getAddress(baseToken),\n utilization: compoundV3UtilizationToDecimal(utilization),\n supplyAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(supplyRate)),\n borrowAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(borrowRate)),\n supplyRewardAprPercent: supplyRewardApr == null ? null : compoundV3AprToPercentLabel(supplyRewardApr / 100),\n borrowRewardAprPercent: borrowRewardApr == null ? null : compoundV3AprToPercentLabel(borrowRewardApr / 100),\n assets,\n }\n}\n\nfunction registryMarketRow(market: CompoundV3MarketRecord): CompoundV3MarketSummary {\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: market.baseToken ?? null,\n utilization: null,\n supplyAprPercent: null,\n borrowAprPercent: null,\n supplyRewardAprPercent: null,\n borrowRewardAprPercent: null,\n assets: market.baseToken\n ? [\n {\n asset: market.baseToken,\n symbol: market.slug.toUpperCase(),\n decimals: 18,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: '0',\n role: 'base',\n },\n ]\n : [],\n }\n}\n\nexport async function compoundV3FetchMarketsSummary(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<{ markets: CompoundV3MarketSummary[]; notes: string }> {\n if (!isCompoundV3ChainSupported(args.chainId)) {\n return { markets: [], notes: `Compound III is not deployed on chain ${args.chainId}.` }\n }\n const registry = listCompoundV3MarketsForChain(args.chainId)\n let subgraphNote = ''\n const subgraph = await fetchCompoundV3SubgraphMarkets({ chainId: args.chainId })\n if (subgraph) {\n subgraphNote = ` Subgraph listed ${subgraph.length} market id(s); official comet deployments are the address source.`\n }\n if (!args.rpcUrl?.trim()) {\n return {\n markets: registry.map(registryMarketRow),\n notes:\n 'Registry from official comet deployments. Pass rpcUrl (MCP server injects it) to enrich APRs, reward APRs, and collaterals.' +\n subgraphNote,\n }\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const markets: CompoundV3MarketSummary[] = []\n for (const row of registry) {\n try {\n markets.push(await enrichMarketOnChain(client, row))\n } catch {\n markets.push(registryMarketRow(row))\n }\n }\n return {\n markets,\n notes:\n 'Comet proxy addresses from official deployments; base supply/borrow APR and COMP incentive APR from on-chain CometInterface. Incentive APR is extra and variable; null when the reward token has no on-chain price feed.' +\n subgraphNote,\n }\n}\n\nexport async function compoundV3FetchMarketSummary(args: {\n chainId: number\n comet: string\n rpcUrl?: string\n}): Promise<CompoundV3MarketSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error('rpcUrl is required for ctm_compound_v3_fetch_market (MCP server injects it from the chain registry).')\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n return enrichMarketOnChain(client, market)\n}\n\nexport async function compoundV3FetchAccountSummary(args: {\n chainId: number\n comet: string\n account: string\n rpcUrl?: string\n}): Promise<CompoundV3AccountSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error(\n 'rpcUrl is required for ctm_compound_v3_fetch_account (MCP server injects it from the chain registry).',\n )\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const comet = market.comet\n const account = getAddress(args.account)\n const [baseToken, decimals, supplied, borrowed, numAssets, collateralized, liquidatable] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'balanceOf', args: [account] }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'borrowBalanceOf',\n args: [account],\n }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isBorrowCollateralized',\n args: [account],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isLiquidatable',\n args: [account],\n }),\n ])\n const baseMeta = await readTokenMeta(client, getAddress(baseToken))\n const dec = Number(decimals) || baseMeta.decimals\n const collaterals: CompoundV3AccountSummary['collaterals'] = []\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const bal = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'collateralBalanceOf',\n args: [account, token],\n })\n const meta = await readTokenMeta(client, token)\n collaterals.push({\n asset: token,\n symbol: meta.symbol,\n balance: formatUnits(bal, meta.decimals),\n })\n }\n\n let rewardToken: string | null = null\n let rewardOwed: string | null = null\n try {\n const owed = await client.readContract({\n address: market.rewards,\n abi: cometRewardsAbi,\n functionName: 'getRewardOwed',\n args: [comet, account],\n })\n rewardToken = getAddress(owed.token)\n const rewardMeta = await readTokenMeta(client, getAddress(owed.token))\n rewardOwed = formatUnits(owed.owed, rewardMeta.decimals)\n } catch {\n rewardToken = null\n rewardOwed = null\n }\n\n return {\n comet,\n symbol: market.symbol,\n baseSupplied: formatUnits(supplied, dec),\n baseBorrowed: formatUnits(borrowed, dec),\n collaterals,\n isBorrowCollateralized: Boolean(collateralized),\n isLiquidatable: Boolean(liquidatable),\n rewardToken,\n rewardOwed,\n }\n}\n\nexport type CompoundV3AssetModes = {\n base: boolean\n collateral: boolean\n}\n\nconst chainAssetCache = new Map<number, Map<string, CompoundV3AssetModes>>()\n\nexport function compoundV3KeyForNodeAssetRow(args: {\n contractAddress: string\n chainId: number\n}): string {\n if (isNativeAssetAddress(args.contractAddress)) {\n const wrapped = compoundV3WrappedNative(args.chainId)\n return (wrapped ?? zeroAddress).toLowerCase()\n }\n return getAddress(args.contractAddress).toLowerCase()\n}\n\nexport async function ensureCompoundV3ChainAssetCache(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<Map<string, CompoundV3AssetModes>> {\n const existing = chainAssetCache.get(args.chainId)\n if (existing && existing.size > 0 && !args.rpcUrl) return existing\n\n const map = new Map<string, CompoundV3AssetModes>()\n const add = (address: string, role: keyof CompoundV3AssetModes) => {\n const key = getAddress(address).toLowerCase()\n const cur = map.get(key) ?? { base: false, collateral: false }\n cur[role] = true\n map.set(key, cur)\n }\n\n if (args.rpcUrl?.trim()) {\n try {\n const { markets } = await compoundV3FetchMarketsSummary({ chainId: args.chainId, rpcUrl: args.rpcUrl })\n for (const m of markets) {\n for (const a of m.assets) add(a.asset, a.role === 'base' ? 'base' : 'collateral')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n } catch {\n /* fall through to registry bases */\n }\n }\n\n for (const m of listCompoundV3MarketsForChain(args.chainId)) {\n if (m.baseToken) add(m.baseToken, 'base')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n}\n\nexport function getCompoundV3AssetModesFromCache(\n chainId: number,\n contractAddress: string,\n): CompoundV3AssetModes | null {\n const cache = chainAssetCache.get(chainId)\n if (!cache) return null\n const key = compoundV3KeyForNodeAssetRow({ contractAddress, chainId })\n return cache.get(key) ?? null\n}\n\nexport function listCompoundV3MarketsForAsset(args: {\n chainId: number\n contractAddress: string\n}): CompoundV3MarketRecord[] {\n const key = compoundV3KeyForNodeAssetRow({ contractAddress: args.contractAddress, chainId: args.chainId })\n return listCompoundV3MarketsForChain(args.chainId).filter((m) => {\n if (m.baseToken && m.baseToken.toLowerCase() === key) return true\n const modes = chainAssetCache.get(args.chainId)?.get(key)\n return Boolean(modes?.base || modes?.collateral)\n })\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk/dist/evm/rpc-utils.js'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk/dist/evm/tx-params.js'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","/**\n * Hex of a serialized unsigned transaction, without a 0x prefix.\n * Get Sig refreshes the gas fee and nonce only when MessageRaw decodes as this transaction.\n * Destination, amount, and calldata stay inside the serialized bytes.\n */\nexport function evmUnsignedMessageRaw(serialized: `0x${string}`): string {\n return serialized.startsWith('0x') ? serialized.slice(2) : serialized\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport { fetchChainFeeParams } from '@continuumdao/continuum-node-sdk/dist/evm/chain-fees.js'\nimport { alignEip1559FeesWithLatestBase } from '@continuumdao/continuum-node-sdk/dist/evm/get-sig-fee-speed.js'\nimport { gweiToDecimalString } from '@continuumdao/continuum-node-sdk/dist/evm/gwei.js'\nimport {\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk/dist/evm/tx-params.js'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport { evmUnsignedMessageRaw } from './unsignedMessageRaw.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /**\n * Ignored. MessageRaw is the serialized unsigned transaction (no 0x prefix).\n * Calldata-only MessageRaw cannot survive Get Sig: only the gas fee or nonce\n * may change, and the updated transaction must be included.\n */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: evmUnsignedMessageRaw(serialized),\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { getAddress, isAddress, type Address } from 'viem'\n\n/**\n * Coinbase B20 tokenized stocks on Base. Addresses come from\n * https://api.coinbase.com/v1/tokenized-stocks — there is no baked-in token list.\n */\nexport const COINBASE_B20_STOCK_DECIMALS = 8 as const\n\n/** B20 ASSET variant addresses: `[10-byte 0xb200…][variant 0x00][9-byte hash]`. */\nexport const COINBASE_B20_ASSET_PREFIX = '0xb200000000000000000000'\n\nexport type CoinbaseB20KnownToken = {\n address: Address\n symbol: string\n decimals: number\n name?: string\n iconUrl?: string\n}\n\nexport type CoinbaseB20StockToken = CoinbaseB20KnownToken\n\nexport function isCoinbaseB20AssetToken(address: string): boolean {\n try {\n return getAddress(address as `0x${string}`).toLowerCase().startsWith(COINBASE_B20_ASSET_PREFIX)\n } catch {\n return false\n }\n}\n\n/** Tickers such as AAPLc and BRK.Bc. Rejects WETH, USDC, and AERO. */\nexport function looksLikeCoinbaseStockSymbol(symbol: string): boolean {\n return /^[A-Za-z][A-Za-z0-9]{0,8}(?:\\.[A-Za-z][A-Za-z0-9]{0,4})?c$/.test((symbol ?? '').trim())\n}\n\nexport function coinbaseB20StockAddresses(): Address[] {\n return coinbaseB20CatalogTokens().map((t) => t.address)\n}\n\nexport const COINBASE_TOKENIZED_STOCKS_API_URL = 'https://api.coinbase.com/v1/tokenized-stocks'\n\nexport type CoinbaseB20CatalogToken = CoinbaseB20KnownToken & { name: string }\n\nconst CATALOG_TTL_MS = 15 * 60 * 1000\nconst CATALOG_MAX = 500\n\nlet catalogRows: CoinbaseB20CatalogToken[] | null = null\nlet catalogAt = 0\nlet catalogInflight: Promise<CoinbaseB20CatalogToken[]> | null = null\nconst catalogBySymbol = new Map<string, CoinbaseB20CatalogToken>()\nconst catalogByAddress = new Map<string, CoinbaseB20CatalogToken>()\n\nfunction indexCatalog(rows: CoinbaseB20CatalogToken[]) {\n catalogRows = rows\n catalogAt = Date.now()\n catalogBySymbol.clear()\n catalogByAddress.clear()\n for (const row of rows) {\n catalogBySymbol.set(row.symbol.toLowerCase(), row)\n catalogByAddress.set(row.address.toLowerCase(), row)\n }\n}\n\n/** Test hook. Production loads this from the Coinbase tokenized-stocks API. */\nexport function applyCoinbaseB20StockCatalog(rows: CoinbaseB20CatalogToken[]): void {\n indexCatalog(rows)\n}\n\nexport function clearCoinbaseB20StockCatalog(): void {\n catalogRows = null\n catalogAt = 0\n catalogBySymbol.clear()\n catalogByAddress.clear()\n}\n\nexport function coinbaseB20CatalogTokens(): readonly CoinbaseB20CatalogToken[] {\n return catalogRows ?? []\n}\n\nexport function parseCoinbaseTokenizedStocksPayload(payload: unknown): CoinbaseB20CatalogToken[] {\n const tokens = Array.isArray(payload)\n ? payload\n : payload && typeof payload === 'object' && Array.isArray((payload as { tokens?: unknown }).tokens)\n ? (payload as { tokens: unknown[] }).tokens\n : []\n const out: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n for (const row of tokens) {\n if (!row || typeof row !== 'object') continue\n const rec = row as Record<string, unknown>\n const symbol = typeof rec.symbol === 'string' ? rec.symbol.trim() : ''\n const addressRaw = typeof rec.contract_address === 'string' ? rec.contract_address.trim() : ''\n if (!looksLikeCoinbaseStockSymbol(symbol) || !isCoinbaseB20AssetToken(addressRaw)) continue\n const address = getAddress(addressRaw as `0x${string}`)\n const key = address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n const name = typeof rec.name === 'string' && rec.name.trim() ? rec.name.trim() : symbol\n const iconUrl = typeof rec.icon_url === 'string' && rec.icon_url.trim() ? rec.icon_url.trim() : undefined\n const decimals =\n typeof rec.decimals === 'number' && Number.isInteger(rec.decimals) && rec.decimals >= 0 && rec.decimals <= 18\n ? rec.decimals\n : COINBASE_B20_STOCK_DECIMALS\n out.push({ address, symbol, name, decimals, iconUrl })\n if (out.length >= CATALOG_MAX) break\n }\n return out\n}\n\nasync function fetchCoinbaseB20StockCatalog(): Promise<CoinbaseB20CatalogToken[]> {\n const merged: CoinbaseB20CatalogToken[] = []\n const seen = new Set<string>()\n let pageToken = ''\n for (let page = 0; page < 4; page++) {\n const url = new URL(COINBASE_TOKENIZED_STOCKS_API_URL)\n url.searchParams.set('page_size', '500')\n if (pageToken) url.searchParams.set('page_token', pageToken)\n const res = await fetch(url, { cache: 'no-store', signal: AbortSignal.timeout(8_000) })\n if (!res.ok) break\n const json = (await res.json()) as { next_page_token?: unknown }\n for (const row of parseCoinbaseTokenizedStocksPayload(json)) {\n const key = row.address.toLowerCase()\n if (seen.has(key)) continue\n seen.add(key)\n merged.push(row)\n if (merged.length >= CATALOG_MAX) break\n }\n pageToken = typeof json.next_page_token === 'string' ? json.next_page_token.trim() : ''\n if (!pageToken || merged.length >= CATALOG_MAX) break\n }\n if (merged.length > 0) indexCatalog(merged)\n return catalogRows ?? []\n}\n\n/** Live Coinbase list (PYPLc, AMDc, ORCLc, …). Falls back to the seed when the API is down. */\nexport async function ensureCoinbaseB20StockCatalog(): Promise<readonly CoinbaseB20CatalogToken[]> {\n if (catalogRows && catalogRows.length > 0 && Date.now() - catalogAt < CATALOG_TTL_MS) return catalogRows\n if (!catalogInflight) {\n catalogInflight = fetchCoinbaseB20StockCatalog().finally(() => {\n catalogInflight = null\n })\n }\n try {\n return await catalogInflight\n } catch {\n return catalogRows ?? []\n }\n}\n\n/** Resolve a Coinbase B20 ticker or 0x address from the fetched catalog. */\nexport function lookupCoinbaseB20StockToken(token: string): CoinbaseB20KnownToken | null {\n const key = (token ?? '').trim()\n if (!key) return null\n const fromCatalog = catalogBySymbol.get(key.toLowerCase())\n if (fromCatalog) return fromCatalog\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase()) ?? null\n } catch {\n return null\n }\n}\n\nexport function coinbaseB20CatalogName(addressOrSymbol: string): string | undefined {\n const key = (addressOrSymbol ?? '').trim()\n if (!key) return undefined\n const bySymbol = catalogBySymbol.get(key.toLowerCase())\n if (bySymbol?.name) return bySymbol.name\n try {\n return catalogByAddress.get(getAddress(key as `0x${string}`).toLowerCase())?.name\n } catch {\n return undefined\n }\n}\n\nexport function coinbaseB20SymbolForAddress(address: string): string | null {\n return lookupCoinbaseB20StockToken(address)?.symbol ?? null\n}\n\n/**\n * Addresses pass through. A Coinbase stock ticker (`AAPLc`, `BRK.Bc`) becomes the\n * address from the live tokenized-stocks catalog — the same contract Aave and Aerodrome use.\n */\nexport async function canonicalizeEvmTokenInput(token: string): Promise<string> {\n const raw = (token ?? '').trim()\n if (!raw || isAddress(raw)) return raw\n if (!looksLikeCoinbaseStockSymbol(raw)) return raw\n await ensureCoinbaseB20StockCatalog().catch(() => [])\n const hit = lookupCoinbaseB20StockToken(raw)\n if (!hit) {\n throw new Error(\n `Unknown Coinbase stock ticker \"${raw}\". It is not in the live tokenized-stocks catalog.`,\n )\n }\n return hit.address\n}\n","import { createPublicClient, defineChain, encodeFunctionData, getAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { erc20ApproveAbi, erc20ReadAbi } from './cometAbi.js'\n\nexport type CompoundV3BuildStepKind =\n | 'weth_deposit'\n | 'weth_withdraw'\n | 'approve'\n | 'supply'\n | 'withdraw'\n | 'claim'\n | 'allow'\n | 'bulker_invoke'\n\nexport type CompoundV3BuildStep = {\n kind: CompoundV3BuildStepKind\n to: Address\n data: `0x${string}`\n value: bigint\n}\n\nexport function createCompoundV3PublicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nexport async function pushApproveIfNeeded(args: {\n client: PublicClient\n steps: CompoundV3BuildStep[]\n token: Address\n owner: Address\n spender: Address\n amountWei: bigint\n}): Promise<void> {\n const current = await args.client.readContract({\n address: args.token,\n abi: erc20ReadAbi,\n functionName: 'allowance',\n args: [getAddress(args.owner), getAddress(args.spender)],\n })\n if (current >= args.amountWei) return\n if (current > 0n) {\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), 0n],\n }),\n value: 0n,\n })\n }\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), args.amountWei],\n }),\n value: 0n,\n })\n}\n","import {\n encodeFunctionData,\n getAddress,\n maxUint256,\n parseUnits,\n type Address,\n} from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n cometInterfaceAbi,\n cometRewardsAbi,\n erc20ReadAbi,\n wethAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { canonicalizeEvmTokenInput } from '../shared/coinbaseB20.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n type CompoundV3BuildStepKind,\n} from './txHelpers.js'\n\nconst WETH_DEPOSIT_FALLBACK = 120_000n\nconst WETH_WITHDRAW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst COMET_SUPPLY_FALLBACK = 500_000n\nconst COMET_WITHDRAW_FALLBACK = 600_000n\nconst REWARDS_CLAIM_FALLBACK = 250_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type { CompoundV3BuildStep, CompoundV3BuildStepKind } from './txHelpers.js'\n\ntype CommonBuildArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n}\n\nfunction fallbackGas(kind: CompoundV3BuildStepKind): bigint {\n if (kind === 'weth_deposit') return WETH_DEPOSIT_FALLBACK\n if (kind === 'weth_withdraw') return WETH_WITHDRAW_FALLBACK\n if (kind === 'approve') return ERC20_APPROVE_FALLBACK\n if (kind === 'withdraw') return COMET_WITHDRAW_FALLBACK\n if (kind === 'claim') return REWARDS_CLAIM_FALLBACK\n return COMET_SUPPLY_FALLBACK\n}\n\nfunction finishBatch(args: {\n common: CommonBuildArgs\n steps: CompoundV3BuildStep[]\n purposeSuffix: string\n extraMeta: Record<string, unknown>\n}) {\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: fallbackGas(s.kind),\n }))\n const first = evmSteps[0]\n if (!first) throw new Error('Compound III batch has no steps.')\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.common.keyGen,\n purposeText: args.common.purposeText,\n chainId: args.common.chainId,\n rpcUrl: args.common.rpcUrl,\n executorAddress: getAddress(args.common.executorAddress),\n chainDetail: args.common.chainDetail,\n useCustomGas: args.common.useCustomGas,\n customGasChainDetails: args.common.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n buildBatchMeta: ({ index }) => {\n const s = args.steps[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n to: s.to,\n ...args.extraMeta,\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.common.chainId) },\n compoundV3: { ...args.extraMeta, step: s.kind, comet: args.common.comet },\n }\n },\n })\n}\n\nasync function resolveAmountWei(args: {\n rpcUrl: string\n chainId: number\n asset: Address\n amountHuman: string\n}): Promise<bigint> {\n if (args.amountHuman.trim().toLowerCase() === 'max') return maxUint256\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const dec = await client.readContract({ address: args.asset, abi: erc20ReadAbi, functionName: 'decimals' })\n const amountWei = parseUnits(args.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Amount is zero after converting with token decimals.')\n return amountWei\n}\n\n/**\n * Supply base (earn / repay) or collateral. Native ETH always wraps via WETH.deposit\n * when `isNative` / zero address — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Supply(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: await canonicalizeEvmTokenInput(args.asset),\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const steps: CompoundV3BuildStep[] = []\n\n if (resolved.isNative) {\n steps.push({\n kind: 'weth_deposit',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'deposit', args: [] }),\n value: amountWei,\n })\n }\n\n await pushApproveIfNeeded({\n client,\n steps,\n token: resolved.asset,\n owner: executor,\n spender: market.comet,\n amountWei,\n })\n\n steps.push({\n kind: 'supply',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'supply',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n })\n\n const n = steps.length\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? `Compound III: ${n}-tx batch — wrap native to WETH, approve Comet, supply.`\n : n === 1\n ? 'Compound III: 1-tx — supply (allowance already sufficient).'\n : `Compound III: ${n}-tx batch — approve Comet, then supply.`,\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3Repay(\n args: Parameters<typeof buildEvmMultisignBodyCompoundV3Supply>[0],\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyCompoundV3Supply(args)\n}\n\n/**\n * Withdraw collateral or base. Withdrawing base while undercollateralized is borrow.\n * Native path always unwraps via WETH.withdraw after Comet.withdraw — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Withdraw(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: await canonicalizeEvmTokenInput(args.asset),\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'withdraw',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'withdraw',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n },\n ]\n if (resolved.isNative) {\n if (amountWei === maxUint256) {\n throw new Error('Native ETH unwrap cannot use amount \"max\"; pass an explicit amount to unwrap.')\n }\n steps.push({\n kind: 'weth_withdraw',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'withdraw', args: [amountWei] }),\n value: 0n,\n })\n }\n\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? 'Compound III: 2-tx batch — withdraw WETH from Comet, unwrap to ETH.'\n : 'Compound III: 1-tx — withdraw (borrow if this is base while undercollateralized).',\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n note: 'Withdraw of base while undercollateralized borrows the base asset.',\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3ClaimRewards(args: CommonBuildArgs): Promise<{\n bodyForSign: Record<string, unknown>\n messageToSign: string\n}> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'claim',\n to: market.rewards,\n data: encodeFunctionData({\n abi: cometRewardsAbi,\n functionName: 'claim',\n args: [market.comet, executor, true],\n }),\n value: 0n,\n },\n ]\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: 'Compound III: 1-tx — claim rewards.',\n extraMeta: { market: market.symbol, rewards: market.rewards },\n })\n}\n","import { encodeAbiParameters, encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n BULKER_ACTION_CLAIM_REWARD,\n BULKER_ACTION_SUPPLY_ASSET,\n BULKER_ACTION_SUPPLY_NATIVE_TOKEN,\n BULKER_ACTION_WITHDRAW_ASSET,\n BULKER_ACTION_WITHDRAW_NATIVE_TOKEN,\n cometBulkerAbi,\n cometInterfaceAbi,\n erc20ReadAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n} from './txHelpers.js'\n\nconst ALLOW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst BULKER_INVOKE_FALLBACK = 900_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type CompoundV3BulkerStepInput = {\n action: 'supply' | 'withdraw' | 'claim'\n asset?: string\n amountHuman?: string\n isNative?: boolean\n}\n\nconst cometAllowAbi = parseAbi(['function allow(address manager, bool isAllowed)'])\n\n/**\n * Combined Bulker.invoke. Native supply/withdraw uses ACTION_*_NATIVE_TOKEN.\n * Requires ERC-20 approve(bulker) and Comet.allow(bulker) when not already set.\n */\nexport async function buildEvmMultisignBodyCompoundV3Bulker(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n steps: CompoundV3BulkerStepInput[]\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (!args.steps?.length) throw new Error('Bulker requires at least one step.')\n const market = requireCompoundV3Market(args.chainId, args.comet)\n if (!market.bulker) throw new Error(`No Bulker contract for ${market.symbol} on chain ${args.chainId}.`)\n const bulker = market.bulker\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n\n const allowed = await client\n .readContract({\n address: market.comet,\n abi: cometInterfaceAbi,\n functionName: 'hasPermission',\n args: [executor, bulker],\n })\n .catch(() => false)\n\n const prefix: CompoundV3BuildStep[] = []\n if (!allowed) {\n prefix.push({\n kind: 'allow',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometAllowAbi,\n functionName: 'allow',\n args: [bulker, true],\n }),\n value: 0n,\n })\n }\n\n const actions: `0x${string}`[] = []\n const datas: `0x${string}`[] = []\n let nativeValue = 0n\n\n for (const step of args.steps) {\n if (step.action === 'claim') {\n actions.push(BULKER_ACTION_CLAIM_REWARD)\n datas.push(\n encodeAbiParameters(\n [\n { type: 'address' },\n { type: 'address' },\n { type: 'address' },\n { type: 'bool' },\n ],\n [market.comet, market.rewards, executor, true],\n ),\n )\n continue\n }\n if (!step.asset || !step.amountHuman) {\n throw new Error(`Bulker ${step.action} requires asset and amountHuman.`)\n }\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: step.asset,\n isNative: step.isNative,\n })\n const dec = await client.readContract({\n address: resolved.asset,\n abi: erc20ReadAbi,\n functionName: 'decimals',\n })\n const amountWei = parseUnits(step.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Bulker step amount is zero.')\n\n if (step.action === 'supply') {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_SUPPLY_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n nativeValue += amountWei\n } else {\n await pushApproveIfNeeded({\n client,\n steps: prefix,\n token: resolved.asset,\n owner: executor,\n spender: bulker,\n amountWei,\n })\n actions.push(BULKER_ACTION_SUPPLY_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n } else {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_WITHDRAW_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n } else {\n actions.push(BULKER_ACTION_WITHDRAW_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n }\n }\n\n const invokeData = encodeFunctionData({\n abi: cometBulkerAbi,\n functionName: 'invoke',\n args: [actions, datas],\n })\n prefix.push({\n kind: 'bulker_invoke',\n to: bulker,\n data: invokeData,\n value: nativeValue,\n })\n\n const evmSteps: EvmTxStep[] = prefix.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas:\n s.kind === 'approve' ? ERC20_APPROVE_FALLBACK : s.kind === 'allow' ? ALLOW_FALLBACK : BULKER_INVOKE_FALLBACK,\n }))\n const first = evmSteps[0]!\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: `Compound III: ${evmSteps.length}-tx Bulker batch (${args.steps.map((s) => s.action).join(', ')}).`,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n payableValueWei: nativeValue > 0n ? nativeValue : undefined,\n buildBatchMeta: ({ index }) => {\n const s = prefix[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n bulker,\n comet: market.comet,\n actions: args.steps.map((st) => st.action),\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.chainId) },\n compoundV3: { market: market.symbol, comet: market.comet, bulker, step: s.kind },\n }\n },\n })\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { COMPOUND_V3_PROTOCOL_ID, isCompoundV3ChainSupported } from './support.js'\n\nexport const compoundV3ProtocolModule: ProtocolModule = {\n id: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n const id = typeof ctx.chainId === 'string' ? Number(ctx.chainId) : ctx.chainId\n return ctx.chainCategory === 'evm' && isCompoundV3ChainSupported(id)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'native' || token.kind === 'erc20')\n },\n actions: [\n {\n id: 'compound-v3.supply',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Supply base (earn/repay) or collateral to a Comet proxy',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.withdraw',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw collateral or base (withdraw of base while undercollateralized = borrow)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.repay',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Repay base debt by supplying base',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.claim-rewards',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim COMP / reward token from CometRewards',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.bulker',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Combined Bulker.invoke (optional)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(compoundV3ProtocolModule)\n\nexport * from './support.js'\nexport * from './markets.js'\nexport * from './cometAbi.js'\nexport * from './compoundJs.js'\nexport * from './apr.js'\nexport * from './subgraph.js'\nexport * from './reads.js'\nexport * from './multisign.js'\nexport * from './bulkerMultisign.js'\nexport * from './txHelpers.js'\n"]}
|