@continuumdao/ctm-mpc-defi 0.2.41 → 0.2.42
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 +12 -1
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.js +12 -1
- package/dist/agent/catalog.js.map +1 -1
- package/dist/chains/evm/index.cjs +6 -2
- package/dist/chains/evm/index.cjs.map +1 -1
- package/dist/chains/evm/index.js +7 -3
- package/dist/chains/evm/index.js.map +1 -1
- package/dist/core/index.cjs +14 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +7 -2
- package/dist/core/index.js +13 -2
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +45 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +44 -8
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.cjs +11 -7
- package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/aave-v4/index.js +12 -8
- package/dist/protocols/evm/aave-v4/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs +14 -2
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.js +14 -2
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/arcus/index.cjs +6 -2
- package/dist/protocols/evm/arcus/index.cjs.map +1 -1
- package/dist/protocols/evm/arcus/index.js +7 -3
- package/dist/protocols/evm/arcus/index.js.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.cjs +7 -3
- package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.js +8 -4
- package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
- package/dist/protocols/evm/compound-v3/index.cjs +9 -3
- package/dist/protocols/evm/compound-v3/index.cjs.map +1 -1
- package/dist/protocols/evm/compound-v3/index.js +10 -4
- package/dist/protocols/evm/compound-v3/index.js.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +11 -5
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.js +12 -6
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.cjs +8 -4
- package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/curve-dao/index.js +9 -5
- package/dist/protocols/evm/curve-dao/index.js.map +1 -1
- package/dist/protocols/evm/ethena/index.cjs +13 -9
- package/dist/protocols/evm/ethena/index.cjs.map +1 -1
- package/dist/protocols/evm/ethena/index.js +14 -10
- package/dist/protocols/evm/ethena/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs +20 -16
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.js +21 -17
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/gmx/index.cjs +12 -8
- package/dist/protocols/evm/gmx/index.cjs.map +1 -1
- package/dist/protocols/evm/gmx/index.js +13 -9
- package/dist/protocols/evm/gmx/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.cjs +5 -1
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.js +6 -2
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/dist/protocols/evm/lido/index.cjs +7 -3
- package/dist/protocols/evm/lido/index.cjs.map +1 -1
- package/dist/protocols/evm/lido/index.js +8 -4
- package/dist/protocols/evm/lido/index.js.map +1 -1
- package/dist/protocols/evm/maple/index.cjs +7 -3
- package/dist/protocols/evm/maple/index.cjs.map +1 -1
- package/dist/protocols/evm/maple/index.js +8 -4
- package/dist/protocols/evm/maple/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +13 -9
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.js +14 -10
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/pendle/index.cjs +9 -3
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.js +10 -4
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/sky/index.cjs +17 -13
- package/dist/protocols/evm/sky/index.cjs.map +1 -1
- package/dist/protocols/evm/sky/index.js +18 -14
- package/dist/protocols/evm/sky/index.js.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.cjs +13 -7
- package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.js +14 -8
- package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
- package/dist/protocols/evm/venice/index.cjs +10 -4
- package/dist/protocols/evm/venice/index.cjs.map +1 -1
- package/dist/protocols/evm/venice/index.js +10 -4
- package/dist/protocols/evm/venice/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/venice/constants.ts","../../../../src/protocols/evm/venice/mintRate.ts","../../../../src/protocols/evm/venice/stakingRead.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/venice/multisign.ts","../../../../src/protocols/evm/venice/veniceApi.ts","../../../../src/protocols/evm/venice/mcpReads.ts","../../../../src/protocols/evm/venice/index.ts"],"names":["getAddress","formatUnits","defineChain","createPublicClient","http","gasLimitFromEstimateAndChainConfig","parseAbi","diemStakingAbi","basePublicClient","parseUnits"],"mappings":"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","file":"index.js","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","/**\n * Venice VVV / sVVV / DIEM on Base — contract addresses and chain coverage.\n * @see https://docs.venice.ai/overview/vvv-diem\n */\nimport { getAddress } from 'viem'\n\nexport const VENICE_PROTOCOL_ID = 'venice' as const\n\nexport const VENICE_BASE_CHAIN_ID = 8453 as const\n\n/** Venice Token (VVV) on Base. */\nexport const VVV_BASE = '0xacfE6019Ed1A7Dc6f7B508C02d1b04ec88cC21bf' as const\n\n/** DIEM on Base (ERC-20 + staking surface for API credits). */\nexport const DIEM_BASE = '0xF4d97F2da56e8c3098f3a8D538DB630A2606a024' as const\n\n/** Venice staking contract (sVVV receipt token). */\nexport const VENICE_STAKING_BASE = '0x321b7ff75154472B18EDb199033fF4D116F340Ff' as const\n\nexport const VENICE_TOKEN_DECIMALS = 18\n\n/** Target DIEM supply used in Venice mint-rate formula (update when Venice raises target). */\nexport const DIEM_TARGET_SUPPLY_HUMAN = 38_000\n\nexport const VENICE_DOCS_VVV_DIEM = 'https://docs.venice.ai/overview/vvv-diem'\nexport const VENICE_DIEM_CALCULATOR = 'https://diem-calculator.venice.ai/'\nexport const VENICE_TOKEN_DASHBOARD = 'https://venice.ai/token'\n\nexport function isVeniceBaseChain(chainId: number): boolean {\n return chainId === VENICE_BASE_CHAIN_ID\n}\n\nexport function isVeniceVvvOnBase(chainId: number, tokenAddress: string): boolean {\n if (!isVeniceBaseChain(chainId)) return false\n try {\n return getAddress(tokenAddress).toLowerCase() === getAddress(VVV_BASE).toLowerCase()\n } catch {\n return false\n }\n}\n\nexport function isVeniceDiemOnBase(chainId: number, tokenAddress: string): boolean {\n if (!isVeniceBaseChain(chainId)) return false\n try {\n return getAddress(tokenAddress).toLowerCase() === getAddress(DIEM_BASE).toLowerCase()\n } catch {\n return false\n }\n}\n\nexport function isVeniceTokenOnBase(chainId: number, tokenAddress: string): boolean {\n return isVeniceVvvOnBase(chainId, tokenAddress) || isVeniceDiemOnBase(chainId, tokenAddress)\n}\n","import { formatUnits, parseUnits } from 'viem'\nimport { DIEM_TARGET_SUPPLY_HUMAN, VENICE_TOKEN_DECIMALS } from './constants.js'\n\n/**\n * Venice published mint rate: sVVV locked per 1 DIEM minted.\n * Formula: baseRate × e^(adj × (S/T)³) with baseRate=90, adj=2, S=current DIEM supply (human), T=target supply.\n */\nexport function computeMintRateSvvcPerDiem(diemTotalSupplyWei: bigint): number {\n const supplyHuman = Number(formatUnits(diemTotalSupplyWei, VENICE_TOKEN_DECIMALS))\n if (!Number.isFinite(supplyHuman) || supplyHuman < 0) return 90\n const ratio = supplyHuman / DIEM_TARGET_SUPPLY_HUMAN\n return 90 * Math.exp(2 * ratio ** 3)\n}\n\n/** Expected DIEM out (wei) when locking `svvvLockWei` sVVV at the current formula rate. */\nexport function previewDiemMintedFromSvvcLock(args: {\n svvvLockWei: bigint\n diemTotalSupplyWei: bigint\n}): bigint {\n const { svvvLockWei, diemTotalSupplyWei } = args\n if (svvvLockWei <= 0n) return 0n\n const rate = computeMintRateSvvcPerDiem(diemTotalSupplyWei)\n if (!Number.isFinite(rate) || rate <= 0) return 0n\n const svvvHuman = Number(formatUnits(svvvLockWei, VENICE_TOKEN_DECIMALS))\n const diemHuman = svvvHuman / rate\n if (!Number.isFinite(diemHuman) || diemHuman <= 0) return 0n\n return parseUnits(diemHuman.toFixed(12), VENICE_TOKEN_DECIMALS)\n}\n\n/** Apply slippage bps (e.g. 50 = 0.5%) to a minimum DIEM out amount. */\nexport function applyMinOutSlippage(amountWei: bigint, slippageBps: number): bigint {\n if (amountWei <= 0n) return 0n\n const bps = Math.max(0, Math.min(10_000, slippageBps))\n return (amountWei * BigInt(10_000 - bps)) / 10_000n\n}\n","import {\n type Address,\n createPublicClient,\n defineChain,\n formatUnits,\n getAddress,\n http,\n parseAbi,\n} from 'viem'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_STAKING_BASE,\n VENICE_TOKEN_DECIMALS,\n VVV_BASE,\n} from './constants.js'\nimport { computeMintRateSvvcPerDiem } from './mintRate.js'\n\nconst erc20Abi = parseAbi([\n 'function balanceOf(address account) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function totalSupply() view returns (uint256)',\n])\n\nconst diemStakingAbi = parseAbi([\n 'function stakedInfos(address) view returns (uint256 amountStaked, uint256 coolDownEnd, uint256 coolDownAmount)',\n 'function cooldownDuration() view returns (uint256)',\n])\n\nconst stakingCooldownAbi = parseAbi(['function cooldownDuration() view returns (uint256)'])\n\nexport type VeniceDiemStakedInfo = {\n amountStakedWei: bigint\n coolDownEndSec: bigint\n coolDownAmountWei: bigint\n}\n\nexport type VeniceWalletStakingState = {\n chainId: number\n wallet: Address\n vvvBalanceWei: bigint\n svvvBalanceWei: bigint\n diemBalanceWei: bigint\n diemStaked: VeniceDiemStakedInfo\n diemTotalSupplyWei: bigint\n mintRateSvvcPerDiem: number\n diemCooldownDurationSec: bigint\n svvvCooldownDurationSec: bigint\n /** Staked DIEM × $1/day (human). */\n estimatedApiCreditUsdPerDay: string\n}\n\nfunction basePublicClient(rpcUrl: string) {\n const ch = defineChain({\n id: VENICE_BASE_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n })\n return createPublicClient({ chain: ch, transport: http(rpcUrl.trim()) })\n}\n\nexport async function readVeniceDiemStakedInfo(args: {\n rpcUrl: string\n wallet: Address\n}): Promise<VeniceDiemStakedInfo> {\n const client = basePublicClient(args.rpcUrl)\n const wallet = getAddress(args.wallet)\n const diem = getAddress(DIEM_BASE)\n const [amountStaked, coolDownEnd, coolDownAmount] = await client.readContract({\n address: diem,\n abi: diemStakingAbi,\n functionName: 'stakedInfos',\n args: [wallet],\n })\n return {\n amountStakedWei: amountStaked,\n coolDownEndSec: coolDownEnd,\n coolDownAmountWei: coolDownAmount,\n }\n}\n\nexport async function readVeniceWalletStakingState(args: {\n rpcUrl: string\n wallet: Address\n}): Promise<VeniceWalletStakingState> {\n const client = basePublicClient(args.rpcUrl)\n const wallet = getAddress(args.wallet)\n const vvv = getAddress(VVV_BASE)\n const diem = getAddress(DIEM_BASE)\n const staking = getAddress(VENICE_STAKING_BASE)\n\n const [vvvBalanceWei, svvvBalanceWei, diemBalanceWei, diemTotalSupplyWei, diemStaked, diemCooldown, svvvCooldown] =\n await Promise.all([\n client.readContract({ address: vvv, abi: erc20Abi, functionName: 'balanceOf', args: [wallet] }),\n client.readContract({ address: staking, abi: erc20Abi, functionName: 'balanceOf', args: [wallet] }),\n client.readContract({ address: diem, abi: erc20Abi, functionName: 'balanceOf', args: [wallet] }),\n client.readContract({ address: diem, abi: erc20Abi, functionName: 'totalSupply' }),\n readVeniceDiemStakedInfo({ rpcUrl: args.rpcUrl, wallet }),\n client.readContract({ address: diem, abi: diemStakingAbi, functionName: 'cooldownDuration' }),\n client.readContract({ address: staking, abi: stakingCooldownAbi, functionName: 'cooldownDuration' }),\n ])\n\n const mintRateSvvcPerDiem = computeMintRateSvvcPerDiem(diemTotalSupplyWei)\n const stakedDiemHuman = formatUnits(diemStaked.amountStakedWei, VENICE_TOKEN_DECIMALS)\n\n return {\n chainId: VENICE_BASE_CHAIN_ID,\n wallet,\n vvvBalanceWei,\n svvvBalanceWei,\n diemBalanceWei,\n diemStaked,\n diemTotalSupplyWei,\n mintRateSvvcPerDiem,\n diemCooldownDurationSec: diemCooldown,\n svvvCooldownDurationSec: svvvCooldown,\n estimatedApiCreditUsdPerDay: stakedDiemHuman,\n }\n}\n\nexport function formatVeniceStakingStateSummary(state: VeniceWalletStakingState): Record<string, unknown> {\n return {\n chainId: state.chainId,\n wallet: state.wallet,\n balances: {\n vvvWei: state.vvvBalanceWei.toString(),\n svvvWei: state.svvvBalanceWei.toString(),\n diemWei: state.diemBalanceWei.toString(),\n diemStakedWei: state.diemStaked.amountStakedWei.toString(),\n },\n diemCooldown: {\n pendingUnstakeWei: state.diemStaked.coolDownAmountWei.toString(),\n unlockAtSec: state.diemStaked.coolDownEndSec.toString(),\n cooldownDurationSec: state.diemCooldownDurationSec.toString(),\n },\n svvvCooldownDurationSec: state.svvvCooldownDurationSec.toString(),\n mintRateSvvcPerDiem: state.mintRateSvvcPerDiem,\n diemTotalSupplyWei: state.diemTotalSupplyWei.toString(),\n estimatedApiCreditUsdPerDay: state.estimatedApiCreditUsdPerDay,\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 {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\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: http(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","/**\n * Venice on Base: VVV → sVVV staking, DIEM mint/burn, DIEM stake for API credits.\n */\nimport {\n type Address,\n createPublicClient,\n defineChain,\n encodeFunctionData,\n getAddress,\n http,\n parseAbi,\n parseUnits,\n} from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_STAKING_BASE,\n VENICE_TOKEN_DECIMALS,\n VVV_BASE,\n isVeniceBaseChain,\n} from './constants.js'\nimport { applyMinOutSlippage, previewDiemMintedFromSvvcLock } from './mintRate.js'\n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst VENICE_STAKE_VVV_FALLBACK = 800_000n\nconst VENICE_STAKING_ACTION_FALLBACK = 600_000n\nconst VENICE_MINT_DIEM_FALLBACK = 1_200_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\nconst erc20AllowanceAbi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function totalSupply() view returns (uint256)',\n])\nconst erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nconst stakingAbi = parseAbi([\n 'function stake(uint256 amount)',\n 'function initiateUnstake(uint256 amount)',\n 'function unstake()',\n 'function mintDiem(uint256 sVVVAmountToLock, uint256 minDiemAmountOut)',\n 'function burnDiem(uint256 diemAmountToBurn)',\n])\n\nconst diemStakingAbi = parseAbi([\n 'function stake(uint256 amount)',\n 'function initiateUnstake(uint256 amount)',\n 'function unstake()',\n])\n\ntype VeniceStep = { kind: 'approve' | 'action'; to: Address; data: `0x${string}`; value: bigint }\n\nfunction assertVeniceBase(chainId: number): void {\n if (!isVeniceBaseChain(chainId)) {\n throw new Error(`Venice protocol is only supported on Base (chain id ${VENICE_BASE_CHAIN_ID}).`)\n }\n}\n\nfunction basePublicClient(rpcUrl: string) {\n const ch = defineChain({\n id: VENICE_BASE_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n })\n return createPublicClient({ chain: ch, transport: http(rpcUrl.trim()) })\n}\n\nasync function appendErc20ApproveIfNeeded(args: {\n steps: VeniceStep[]\n rpcUrl: string\n token: Address\n spender: Address\n owner: Address\n amountWei: bigint\n}): Promise<void> {\n const client = basePublicClient(args.rpcUrl)\n const allowance = await client.readContract({\n address: args.token,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n if (allowance >= args.amountWei) return\n if (allowance > 0n) {\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({ abi: erc20ApproveAbi, functionName: 'approve', args: [args.spender, 0n] }),\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: [args.spender, args.amountWei],\n }),\n value: 0n,\n })\n}\n\nasync function buildVeniceBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n steps: VeniceStep[]\n purposeSuffix: string\n actionFallbackGas: bigint\n makeBatchMeta: (p: { index: number; step: VeniceStep; gasLimit: bigint }) => Record<string, unknown>\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const executor = getAddress(args.executorAddress)\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.kind === 'approve' ? ERC20_APPROVE_FALLBACK : args.actionFallbackGas,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n const gasLimitConfig =\n args.useCustomGas && args.chainDetail?.gasLimit != null ? Number(args.chainDetail.gasLimit) : undefined\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: VENICE_BASE_CHAIN_ID,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: args.steps[0]!.to,\n resolveGasLimit: ({ index, estimatedGas }) => {\n const s = args.steps[index]!\n if (s.kind === 'action' && index > 0) {\n const gas = args.actionFallbackGas\n return args.useCustomGas ? gasLimitFromEstimateAndChainConfig(gas, gasLimitConfig) : gas\n }\n return estimatedGas\n },\n buildBatchMeta: ({ index, gasLimit }) =>\n args.makeBatchMeta({ index, step: args.steps[index]!, gasLimit: BigInt(gasLimit) }),\n })\n}\n\nasync function parseHumanAmount(args: {\n rpcUrl: string\n token: Address\n amountHuman: string\n}): Promise<bigint> {\n const client = basePublicClient(args.rpcUrl)\n let dec = VENICE_TOKEN_DECIMALS\n try {\n dec = Number(\n await client.readContract({ address: args.token, abi: erc20AllowanceAbi, functionName: 'decimals' }),\n )\n } catch {\n /* default 18 */\n }\n const amountWei = parseUnits(args.amountHuman.trim(), dec)\n if (amountWei === 0n) throw new Error('Amount is zero after converting with token decimals.')\n return amountWei\n}\n\nexport async function buildEvmMultisignBodyVeniceStakeVvv(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const vvv = getAddress(VVV_BASE)\n const staking = getAddress(VENICE_STAKING_BASE)\n const executor = getAddress(args.executorAddress)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: vvv, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = []\n await appendErc20ApproveIfNeeded({ steps, rpcUrl: args.rpcUrl, token: vvv, spender: staking, owner: executor, amountWei })\n steps.push({\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'stake', args: [amountWei] }),\n value: 0n,\n })\n const n = steps.length\n return buildVeniceBatch({\n ...args,\n executorAddress: executor,\n steps,\n actionFallbackGas: VENICE_STAKE_VVV_FALLBACK,\n purposeSuffix:\n n === 1\n ? 'Venice: stake VVV → sVVV on Base (allowance already set).'\n : `Venice: ${n}-tx batch — approve VVV, then stake on Base.`,\n makeBatchMeta: ({ step }) => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: step.kind === 'approve' ? 'approve_vvv' : 'stake_vvv',\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'venice_stake_vvv', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceInitiateUnstakeSvvv(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const amountWei = await parseHumanAmount({\n rpcUrl: args.rpcUrl,\n token: staking,\n amountHuman: args.amountHuman,\n })\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'initiateUnstake', args: [amountWei] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: initiate sVVV unstake on Base (7-day cooldown before claim).',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'initiate_unstake_svvv', amountHuman: args.amountHuman }),\n evm: { type: 'venice_initiate_unstake_svvv', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceCompleteUnstakeSvvv(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'unstake', args: [] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: claim VVV after sVVV unstake cooldown on Base.',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'complete_unstake_svvv' }),\n evm: { type: 'venice_complete_unstake_svvv', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceMintDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n svvvLockAmountHuman: string\n /** Slippage on min DIEM out; default 50 bps. */\n slippageBps?: number\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const lockWei = await parseHumanAmount({\n rpcUrl: args.rpcUrl,\n token: staking,\n amountHuman: args.svvvLockAmountHuman,\n })\n const client = basePublicClient(args.rpcUrl)\n const diemTotalSupply = await client.readContract({\n address: getAddress(DIEM_BASE),\n abi: erc20AllowanceAbi,\n functionName: 'totalSupply',\n })\n const expectedDiem = previewDiemMintedFromSvvcLock({ svvvLockWei: lockWei, diemTotalSupplyWei: diemTotalSupply })\n const minDiem = applyMinOutSlippage(expectedDiem, args.slippageBps ?? 50)\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: staking,\n data: encodeFunctionData({\n abi: stakingAbi,\n functionName: 'mintDiem',\n args: [lockWei, minDiem],\n }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_MINT_DIEM_FALLBACK,\n purposeSuffix: 'Venice: lock sVVV and mint DIEM on Base.',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: 'mint_diem',\n svvvLockAmountHuman: args.svvvLockAmountHuman,\n minDiemOutWei: minDiem.toString(),\n }),\n evm: { type: 'venice_mint_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceBurnDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const diem = getAddress(DIEM_BASE)\n const executor = getAddress(args.executorAddress)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: diem, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = []\n await appendErc20ApproveIfNeeded({ steps, rpcUrl: args.rpcUrl, token: diem, spender: staking, owner: executor, amountWei })\n steps.push({\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'burnDiem', args: [amountWei] }),\n value: 0n,\n })\n const n = steps.length\n return buildVeniceBatch({\n ...args,\n executorAddress: executor,\n steps,\n actionFallbackGas: VENICE_MINT_DIEM_FALLBACK,\n purposeSuffix:\n n === 1\n ? 'Venice: burn DIEM to unlock sVVV on Base (allowance already set).'\n : `Venice: ${n}-tx batch — approve DIEM, then burn to unlock sVVV.`,\n makeBatchMeta: ({ step }) => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: step.kind === 'approve' ? 'approve_diem_burn' : 'burn_diem',\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'venice_burn_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceStakeDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const diem = getAddress(DIEM_BASE)\n const executor = getAddress(args.executorAddress)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: diem, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = []\n await appendErc20ApproveIfNeeded({ steps, rpcUrl: args.rpcUrl, token: diem, spender: diem, owner: executor, amountWei })\n steps.push({\n kind: 'action',\n to: diem,\n data: encodeFunctionData({ abi: diemStakingAbi, functionName: 'stake', args: [amountWei] }),\n value: 0n,\n })\n const n = steps.length\n return buildVeniceBatch({\n ...args,\n executorAddress: executor,\n steps,\n actionFallbackGas: VENICE_STAKE_VVV_FALLBACK,\n purposeSuffix:\n n === 1\n ? 'Venice: stake DIEM for API credits on Base (allowance already set).'\n : `Venice: ${n}-tx batch — approve DIEM, then stake for API credits.`,\n makeBatchMeta: ({ step }) => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: step.kind === 'approve' ? 'approve_diem_stake' : 'stake_diem',\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'venice_stake_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceInitiateUnstakeDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const diem = getAddress(DIEM_BASE)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: diem, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: diem,\n data: encodeFunctionData({ abi: diemStakingAbi, functionName: 'initiateUnstake', args: [amountWei] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: initiate DIEM unstake on Base (1-day cooldown).',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'initiate_unstake_diem', amountHuman: args.amountHuman }),\n evm: { type: 'venice_initiate_unstake_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceCompleteUnstakeDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const diem = getAddress(DIEM_BASE)\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: diem,\n data: encodeFunctionData({ abi: diemStakingAbi, functionName: 'unstake', args: [] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: claim DIEM after unstake cooldown on Base.',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'complete_unstake_diem' }),\n evm: { type: 'venice_complete_unstake_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport { previewDiemMintedFromSvvcLock, computeMintRateSvvcPerDiem } from './mintRate.js'\nexport {\n readVeniceWalletStakingState,\n readVeniceDiemStakedInfo,\n formatVeniceStakingStateSummary,\n} from './stakingRead.js'\n","const VENICE_MODELS_URL = 'https://api.venice.ai/api/v1/models'\n\nexport type VeniceModelRow = {\n id: string\n type?: string\n offline?: boolean\n beta?: boolean\n}\n\n/** Fetch Venice model catalog (public GET /models). */\nexport async function fetchVeniceModels(args?: {\n type?: string\n apiKey?: string\n}): Promise<{ models: VeniceModelRow[] }> {\n const type = (args?.type ?? 'all').trim() || 'all'\n const url = `${VENICE_MODELS_URL}?type=${encodeURIComponent(type)}`\n const headers: Record<string, string> = { Accept: 'application/json' }\n const key = args?.apiKey?.trim()\n if (key) headers.Authorization = `Bearer ${key}`\n\n const res = await fetch(url, { headers, signal: AbortSignal.timeout(30_000) })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Venice models API ${res.status}: ${text.slice(0, 200)}`)\n }\n const json = (await res.json()) as { data?: unknown[]; models?: unknown[] }\n const raw = Array.isArray(json.data) ? json.data : Array.isArray(json.models) ? json.models : []\n const models: VeniceModelRow[] = []\n for (const item of raw) {\n if (!item || typeof item !== 'object') continue\n const o = item as Record<string, unknown>\n const id = String(o.id ?? o.model ?? o.name ?? '').trim()\n if (!id) continue\n const spec = (o.model_spec ?? o.spec) as Record<string, unknown> | undefined\n models.push({\n id,\n type: String(o.type ?? spec?.type ?? '').trim() || undefined,\n offline: Boolean(o.offline ?? spec?.offline),\n beta: Boolean(o.beta ?? spec?.beta),\n })\n }\n return { models }\n}\n\nexport async function veniceListModelsSummary(args?: { type?: string; apiKey?: string }) {\n const { models } = await fetchVeniceModels(args)\n return {\n type: args?.type ?? 'all',\n count: models.length,\n models,\n }\n}\n","import { createPublicClient, defineChain, getAddress, http, parseAbi, parseUnits } from 'viem'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_STAKING_BASE,\n VENICE_TOKEN_DECIMALS,\n} from './constants.js'\nimport { computeMintRateSvvcPerDiem, previewDiemMintedFromSvvcLock } from './mintRate.js'\nimport { formatVeniceStakingStateSummary, readVeniceWalletStakingState } from './stakingRead.js'\nimport { veniceListModelsSummary } from './veniceApi.js'\n\nexport async function veniceReadStakingStateSummary(args: {\n rpcUrl: string\n executorAddress: string\n chainId?: number\n}) {\n const chainId = args.chainId ?? VENICE_BASE_CHAIN_ID\n if (chainId !== VENICE_BASE_CHAIN_ID) {\n throw new Error(`Venice staking reads require Base chain id ${VENICE_BASE_CHAIN_ID}.`)\n }\n const wallet = getAddress(args.executorAddress)\n const state = await readVeniceWalletStakingState({ rpcUrl: args.rpcUrl, wallet })\n return formatVeniceStakingStateSummary(state)\n}\n\nexport async function veniceReadMintDiemPreviewSummary(args: {\n rpcUrl: string\n svvvLockAmountHuman: string\n}) {\n const ch = defineChain({\n id: VENICE_BASE_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const client = createPublicClient({ chain: ch, transport: http(args.rpcUrl.trim()) })\n const lockWei = parseUnits(args.svvvLockAmountHuman.trim(), VENICE_TOKEN_DECIMALS)\n const diemTotalSupply = await client.readContract({\n address: getAddress(DIEM_BASE),\n abi: parseAbi(['function totalSupply() view returns (uint256)']),\n functionName: 'totalSupply',\n })\n const mintRate = computeMintRateSvvcPerDiem(diemTotalSupply)\n const expectedDiemWei = previewDiemMintedFromSvvcLock({ svvvLockWei: lockWei, diemTotalSupplyWei: diemTotalSupply })\n return {\n svvvLockAmountHuman: args.svvvLockAmountHuman,\n svvvLockWei: lockWei.toString(),\n mintRateSvvcPerDiem: mintRate,\n expectedDiemWei: expectedDiemWei.toString(),\n diemTotalSupplyWei: diemTotalSupply.toString(),\n stakingContract: getAddress(VENICE_STAKING_BASE),\n }\n}\n\nexport { veniceListModelsSummary }\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_PROTOCOL_ID,\n VVV_BASE,\n isVeniceBaseChain,\n} from './constants.js'\n\nexport * from './constants.js'\nexport * from './mintRate.js'\nexport * from './stakingRead.js'\nexport * from './multisign.js'\nexport * from './mcpReads.js'\nexport * from './veniceApi.js'\n\nexport const veniceProtocolModule: ProtocolModule = {\n id: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const n = typeof ctx.chainId === 'number' ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10)\n return isVeniceBaseChain(n)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && token.kind === 'erc20'\n },\n actions: [\n {\n id: 'venice.stake-vvv',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake VVV → sVVV on Base',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'VVV amount' } },\n },\n {\n id: 'venice.initiate-unstake-svvv',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Start sVVV unstake (7-day cooldown)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'sVVV amount' } },\n },\n {\n id: 'venice.complete-unstake-svvv',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim VVV after sVVV unstake cooldown',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'venice.mint-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Lock sVVV and mint DIEM',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n svvvLockAmountHuman: { type: 'string', required: true, description: 'sVVV to lock' },\n slippageBps: { type: 'number', required: false, description: 'Min DIEM slippage bps (default 50)' },\n },\n },\n {\n id: 'venice.burn-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Burn DIEM to unlock locked sVVV',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'DIEM to burn' } },\n },\n {\n id: 'venice.stake-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake DIEM for Venice API credits ($1/day per DIEM)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'DIEM amount' } },\n },\n {\n id: 'venice.initiate-unstake-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Start DIEM unstake (1-day cooldown)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'Staked DIEM amount' } },\n },\n {\n id: 'venice.complete-unstake-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim DIEM after unstake cooldown',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(veniceProtocolModule)\n\n/** Canonical VVV/DIEM addresses on Base for UI and advisors. */\nexport const VENICE_BASE_TOKENS = {\n chainId: VENICE_BASE_CHAIN_ID,\n vvv: VVV_BASE,\n diem: DIEM_BASE,\n} as const\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/venice/constants.ts","../../../../src/protocols/evm/venice/mintRate.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/venice/stakingRead.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/venice/multisign.ts","../../../../src/protocols/evm/venice/veniceApi.ts","../../../../src/protocols/evm/venice/mcpReads.ts","../../../../src/protocols/evm/venice/index.ts"],"names":["getAddress","formatUnits","defineChain","createPublicClient","gasLimitFromEstimateAndChainConfig","parseAbi","diemStakingAbi","basePublicClient","parseUnits"],"mappings":"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","file":"index.js","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","/**\n * Venice VVV / sVVV / DIEM on Base — contract addresses and chain coverage.\n * @see https://docs.venice.ai/overview/vvv-diem\n */\nimport { getAddress } from 'viem'\n\nexport const VENICE_PROTOCOL_ID = 'venice' as const\n\nexport const VENICE_BASE_CHAIN_ID = 8453 as const\n\n/** Venice Token (VVV) on Base. */\nexport const VVV_BASE = '0xacfE6019Ed1A7Dc6f7B508C02d1b04ec88cC21bf' as const\n\n/** DIEM on Base (ERC-20 + staking surface for API credits). */\nexport const DIEM_BASE = '0xF4d97F2da56e8c3098f3a8D538DB630A2606a024' as const\n\n/** Venice staking contract (sVVV receipt token). */\nexport const VENICE_STAKING_BASE = '0x321b7ff75154472B18EDb199033fF4D116F340Ff' as const\n\nexport const VENICE_TOKEN_DECIMALS = 18\n\n/** Target DIEM supply used in Venice mint-rate formula (update when Venice raises target). */\nexport const DIEM_TARGET_SUPPLY_HUMAN = 38_000\n\nexport const VENICE_DOCS_VVV_DIEM = 'https://docs.venice.ai/overview/vvv-diem'\nexport const VENICE_DIEM_CALCULATOR = 'https://diem-calculator.venice.ai/'\nexport const VENICE_TOKEN_DASHBOARD = 'https://venice.ai/token'\n\nexport function isVeniceBaseChain(chainId: number): boolean {\n return chainId === VENICE_BASE_CHAIN_ID\n}\n\nexport function isVeniceVvvOnBase(chainId: number, tokenAddress: string): boolean {\n if (!isVeniceBaseChain(chainId)) return false\n try {\n return getAddress(tokenAddress).toLowerCase() === getAddress(VVV_BASE).toLowerCase()\n } catch {\n return false\n }\n}\n\nexport function isVeniceDiemOnBase(chainId: number, tokenAddress: string): boolean {\n if (!isVeniceBaseChain(chainId)) return false\n try {\n return getAddress(tokenAddress).toLowerCase() === getAddress(DIEM_BASE).toLowerCase()\n } catch {\n return false\n }\n}\n\nexport function isVeniceTokenOnBase(chainId: number, tokenAddress: string): boolean {\n return isVeniceVvvOnBase(chainId, tokenAddress) || isVeniceDiemOnBase(chainId, tokenAddress)\n}\n","import { formatUnits, parseUnits } from 'viem'\nimport { DIEM_TARGET_SUPPLY_HUMAN, VENICE_TOKEN_DECIMALS } from './constants.js'\n\n/**\n * Venice published mint rate: sVVV locked per 1 DIEM minted.\n * Formula: baseRate × e^(adj × (S/T)³) with baseRate=90, adj=2, S=current DIEM supply (human), T=target supply.\n */\nexport function computeMintRateSvvcPerDiem(diemTotalSupplyWei: bigint): number {\n const supplyHuman = Number(formatUnits(diemTotalSupplyWei, VENICE_TOKEN_DECIMALS))\n if (!Number.isFinite(supplyHuman) || supplyHuman < 0) return 90\n const ratio = supplyHuman / DIEM_TARGET_SUPPLY_HUMAN\n return 90 * Math.exp(2 * ratio ** 3)\n}\n\n/** Expected DIEM out (wei) when locking `svvvLockWei` sVVV at the current formula rate. */\nexport function previewDiemMintedFromSvvcLock(args: {\n svvvLockWei: bigint\n diemTotalSupplyWei: bigint\n}): bigint {\n const { svvvLockWei, diemTotalSupplyWei } = args\n if (svvvLockWei <= 0n) return 0n\n const rate = computeMintRateSvvcPerDiem(diemTotalSupplyWei)\n if (!Number.isFinite(rate) || rate <= 0) return 0n\n const svvvHuman = Number(formatUnits(svvvLockWei, VENICE_TOKEN_DECIMALS))\n const diemHuman = svvvHuman / rate\n if (!Number.isFinite(diemHuman) || diemHuman <= 0) return 0n\n return parseUnits(diemHuman.toFixed(12), VENICE_TOKEN_DECIMALS)\n}\n\n/** Apply slippage bps (e.g. 50 = 0.5%) to a minimum DIEM out amount. */\nexport function applyMinOutSlippage(amountWei: bigint, slippageBps: number): bigint {\n if (amountWei <= 0n) return 0n\n const bps = Math.max(0, Math.min(10_000, slippageBps))\n return (amountWei * BigInt(10_000 - bps)) / 10_000n\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 { type Address, createPublicClient, defineChain, formatUnits, getAddress, parseAbi } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_STAKING_BASE,\n VENICE_TOKEN_DECIMALS,\n VVV_BASE,\n} from './constants.js'\nimport { computeMintRateSvvcPerDiem } from './mintRate.js'\n\nconst erc20Abi = parseAbi([\n 'function balanceOf(address account) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function totalSupply() view returns (uint256)',\n])\n\nconst diemStakingAbi = parseAbi([\n 'function stakedInfos(address) view returns (uint256 amountStaked, uint256 coolDownEnd, uint256 coolDownAmount)',\n 'function cooldownDuration() view returns (uint256)',\n])\n\nconst stakingCooldownAbi = parseAbi(['function cooldownDuration() view returns (uint256)'])\n\nexport type VeniceDiemStakedInfo = {\n amountStakedWei: bigint\n coolDownEndSec: bigint\n coolDownAmountWei: bigint\n}\n\nexport type VeniceWalletStakingState = {\n chainId: number\n wallet: Address\n vvvBalanceWei: bigint\n svvvBalanceWei: bigint\n diemBalanceWei: bigint\n diemStaked: VeniceDiemStakedInfo\n diemTotalSupplyWei: bigint\n mintRateSvvcPerDiem: number\n diemCooldownDurationSec: bigint\n svvvCooldownDurationSec: bigint\n /** Staked DIEM × $1/day (human). */\n estimatedApiCreditUsdPerDay: string\n}\n\nfunction basePublicClient(rpcUrl: string) {\n const ch = defineChain({\n id: VENICE_BASE_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n })\n return createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl.trim()) })\n}\n\nexport async function readVeniceDiemStakedInfo(args: {\n rpcUrl: string\n wallet: Address\n}): Promise<VeniceDiemStakedInfo> {\n const client = basePublicClient(args.rpcUrl)\n const wallet = getAddress(args.wallet)\n const diem = getAddress(DIEM_BASE)\n const [amountStaked, coolDownEnd, coolDownAmount] = await client.readContract({\n address: diem,\n abi: diemStakingAbi,\n functionName: 'stakedInfos',\n args: [wallet],\n })\n return {\n amountStakedWei: amountStaked,\n coolDownEndSec: coolDownEnd,\n coolDownAmountWei: coolDownAmount,\n }\n}\n\nexport async function readVeniceWalletStakingState(args: {\n rpcUrl: string\n wallet: Address\n}): Promise<VeniceWalletStakingState> {\n const client = basePublicClient(args.rpcUrl)\n const wallet = getAddress(args.wallet)\n const vvv = getAddress(VVV_BASE)\n const diem = getAddress(DIEM_BASE)\n const staking = getAddress(VENICE_STAKING_BASE)\n\n const [vvvBalanceWei, svvvBalanceWei, diemBalanceWei, diemTotalSupplyWei, diemStaked, diemCooldown, svvvCooldown] =\n await Promise.all([\n client.readContract({ address: vvv, abi: erc20Abi, functionName: 'balanceOf', args: [wallet] }),\n client.readContract({ address: staking, abi: erc20Abi, functionName: 'balanceOf', args: [wallet] }),\n client.readContract({ address: diem, abi: erc20Abi, functionName: 'balanceOf', args: [wallet] }),\n client.readContract({ address: diem, abi: erc20Abi, functionName: 'totalSupply' }),\n readVeniceDiemStakedInfo({ rpcUrl: args.rpcUrl, wallet }),\n client.readContract({ address: diem, abi: diemStakingAbi, functionName: 'cooldownDuration' }),\n client.readContract({ address: staking, abi: stakingCooldownAbi, functionName: 'cooldownDuration' }),\n ])\n\n const mintRateSvvcPerDiem = computeMintRateSvvcPerDiem(diemTotalSupplyWei)\n const stakedDiemHuman = formatUnits(diemStaked.amountStakedWei, VENICE_TOKEN_DECIMALS)\n\n return {\n chainId: VENICE_BASE_CHAIN_ID,\n wallet,\n vvvBalanceWei,\n svvvBalanceWei,\n diemBalanceWei,\n diemStaked,\n diemTotalSupplyWei,\n mintRateSvvcPerDiem,\n diemCooldownDurationSec: diemCooldown,\n svvvCooldownDurationSec: svvvCooldown,\n estimatedApiCreditUsdPerDay: stakedDiemHuman,\n }\n}\n\nexport function formatVeniceStakingStateSummary(state: VeniceWalletStakingState): Record<string, unknown> {\n return {\n chainId: state.chainId,\n wallet: state.wallet,\n balances: {\n vvvWei: state.vvvBalanceWei.toString(),\n svvvWei: state.svvvBalanceWei.toString(),\n diemWei: state.diemBalanceWei.toString(),\n diemStakedWei: state.diemStaked.amountStakedWei.toString(),\n },\n diemCooldown: {\n pendingUnstakeWei: state.diemStaked.coolDownAmountWei.toString(),\n unlockAtSec: state.diemStaked.coolDownEndSec.toString(),\n cooldownDurationSec: state.diemCooldownDurationSec.toString(),\n },\n svvvCooldownDurationSec: state.svvvCooldownDurationSec.toString(),\n mintRateSvvcPerDiem: state.mintRateSvvcPerDiem,\n diemTotalSupplyWei: state.diemTotalSupplyWei.toString(),\n estimatedApiCreditUsdPerDay: state.estimatedApiCreditUsdPerDay,\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","/**\n * Venice on Base: VVV → sVVV staking, DIEM mint/burn, DIEM stake for API credits.\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, getAddress, parseAbi, parseUnits } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_STAKING_BASE,\n VENICE_TOKEN_DECIMALS,\n VVV_BASE,\n isVeniceBaseChain,\n} from './constants.js'\nimport { applyMinOutSlippage, previewDiemMintedFromSvvcLock } from './mintRate.js'\n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst VENICE_STAKE_VVV_FALLBACK = 800_000n\nconst VENICE_STAKING_ACTION_FALLBACK = 600_000n\nconst VENICE_MINT_DIEM_FALLBACK = 1_200_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\nconst erc20AllowanceAbi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function totalSupply() view returns (uint256)',\n])\nconst erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nconst stakingAbi = parseAbi([\n 'function stake(uint256 amount)',\n 'function initiateUnstake(uint256 amount)',\n 'function unstake()',\n 'function mintDiem(uint256 sVVVAmountToLock, uint256 minDiemAmountOut)',\n 'function burnDiem(uint256 diemAmountToBurn)',\n])\n\nconst diemStakingAbi = parseAbi([\n 'function stake(uint256 amount)',\n 'function initiateUnstake(uint256 amount)',\n 'function unstake()',\n])\n\ntype VeniceStep = { kind: 'approve' | 'action'; to: Address; data: `0x${string}`; value: bigint }\n\nfunction assertVeniceBase(chainId: number): void {\n if (!isVeniceBaseChain(chainId)) {\n throw new Error(`Venice protocol is only supported on Base (chain id ${VENICE_BASE_CHAIN_ID}).`)\n }\n}\n\nfunction basePublicClient(rpcUrl: string) {\n const ch = defineChain({\n id: VENICE_BASE_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n })\n return createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl.trim()) })\n}\n\nasync function appendErc20ApproveIfNeeded(args: {\n steps: VeniceStep[]\n rpcUrl: string\n token: Address\n spender: Address\n owner: Address\n amountWei: bigint\n}): Promise<void> {\n const client = basePublicClient(args.rpcUrl)\n const allowance = await client.readContract({\n address: args.token,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n if (allowance >= args.amountWei) return\n if (allowance > 0n) {\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({ abi: erc20ApproveAbi, functionName: 'approve', args: [args.spender, 0n] }),\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: [args.spender, args.amountWei],\n }),\n value: 0n,\n })\n}\n\nasync function buildVeniceBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n steps: VeniceStep[]\n purposeSuffix: string\n actionFallbackGas: bigint\n makeBatchMeta: (p: { index: number; step: VeniceStep; gasLimit: bigint }) => Record<string, unknown>\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const executor = getAddress(args.executorAddress)\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.kind === 'approve' ? ERC20_APPROVE_FALLBACK : args.actionFallbackGas,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n const gasLimitConfig =\n args.useCustomGas && args.chainDetail?.gasLimit != null ? Number(args.chainDetail.gasLimit) : undefined\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: VENICE_BASE_CHAIN_ID,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: args.steps[0]!.to,\n resolveGasLimit: ({ index, estimatedGas }) => {\n const s = args.steps[index]!\n if (s.kind === 'action' && index > 0) {\n const gas = args.actionFallbackGas\n return args.useCustomGas ? gasLimitFromEstimateAndChainConfig(gas, gasLimitConfig) : gas\n }\n return estimatedGas\n },\n buildBatchMeta: ({ index, gasLimit }) =>\n args.makeBatchMeta({ index, step: args.steps[index]!, gasLimit: BigInt(gasLimit) }),\n })\n}\n\nasync function parseHumanAmount(args: {\n rpcUrl: string\n token: Address\n amountHuman: string\n}): Promise<bigint> {\n const client = basePublicClient(args.rpcUrl)\n let dec = VENICE_TOKEN_DECIMALS\n try {\n dec = Number(\n await client.readContract({ address: args.token, abi: erc20AllowanceAbi, functionName: 'decimals' }),\n )\n } catch {\n /* default 18 */\n }\n const amountWei = parseUnits(args.amountHuman.trim(), dec)\n if (amountWei === 0n) throw new Error('Amount is zero after converting with token decimals.')\n return amountWei\n}\n\nexport async function buildEvmMultisignBodyVeniceStakeVvv(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const vvv = getAddress(VVV_BASE)\n const staking = getAddress(VENICE_STAKING_BASE)\n const executor = getAddress(args.executorAddress)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: vvv, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = []\n await appendErc20ApproveIfNeeded({ steps, rpcUrl: args.rpcUrl, token: vvv, spender: staking, owner: executor, amountWei })\n steps.push({\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'stake', args: [amountWei] }),\n value: 0n,\n })\n const n = steps.length\n return buildVeniceBatch({\n ...args,\n executorAddress: executor,\n steps,\n actionFallbackGas: VENICE_STAKE_VVV_FALLBACK,\n purposeSuffix:\n n === 1\n ? 'Venice: stake VVV → sVVV on Base (allowance already set).'\n : `Venice: ${n}-tx batch — approve VVV, then stake on Base.`,\n makeBatchMeta: ({ step }) => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: step.kind === 'approve' ? 'approve_vvv' : 'stake_vvv',\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'venice_stake_vvv', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceInitiateUnstakeSvvv(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const amountWei = await parseHumanAmount({\n rpcUrl: args.rpcUrl,\n token: staking,\n amountHuman: args.amountHuman,\n })\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'initiateUnstake', args: [amountWei] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: initiate sVVV unstake on Base (7-day cooldown before claim).',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'initiate_unstake_svvv', amountHuman: args.amountHuman }),\n evm: { type: 'venice_initiate_unstake_svvv', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceCompleteUnstakeSvvv(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'unstake', args: [] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: claim VVV after sVVV unstake cooldown on Base.',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'complete_unstake_svvv' }),\n evm: { type: 'venice_complete_unstake_svvv', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceMintDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n svvvLockAmountHuman: string\n /** Slippage on min DIEM out; default 50 bps. */\n slippageBps?: number\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const lockWei = await parseHumanAmount({\n rpcUrl: args.rpcUrl,\n token: staking,\n amountHuman: args.svvvLockAmountHuman,\n })\n const client = basePublicClient(args.rpcUrl)\n const diemTotalSupply = await client.readContract({\n address: getAddress(DIEM_BASE),\n abi: erc20AllowanceAbi,\n functionName: 'totalSupply',\n })\n const expectedDiem = previewDiemMintedFromSvvcLock({ svvvLockWei: lockWei, diemTotalSupplyWei: diemTotalSupply })\n const minDiem = applyMinOutSlippage(expectedDiem, args.slippageBps ?? 50)\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: staking,\n data: encodeFunctionData({\n abi: stakingAbi,\n functionName: 'mintDiem',\n args: [lockWei, minDiem],\n }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_MINT_DIEM_FALLBACK,\n purposeSuffix: 'Venice: lock sVVV and mint DIEM on Base.',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: 'mint_diem',\n svvvLockAmountHuman: args.svvvLockAmountHuman,\n minDiemOutWei: minDiem.toString(),\n }),\n evm: { type: 'venice_mint_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceBurnDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const staking = getAddress(VENICE_STAKING_BASE)\n const diem = getAddress(DIEM_BASE)\n const executor = getAddress(args.executorAddress)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: diem, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = []\n await appendErc20ApproveIfNeeded({ steps, rpcUrl: args.rpcUrl, token: diem, spender: staking, owner: executor, amountWei })\n steps.push({\n kind: 'action',\n to: staking,\n data: encodeFunctionData({ abi: stakingAbi, functionName: 'burnDiem', args: [amountWei] }),\n value: 0n,\n })\n const n = steps.length\n return buildVeniceBatch({\n ...args,\n executorAddress: executor,\n steps,\n actionFallbackGas: VENICE_MINT_DIEM_FALLBACK,\n purposeSuffix:\n n === 1\n ? 'Venice: burn DIEM to unlock sVVV on Base (allowance already set).'\n : `Venice: ${n}-tx batch — approve DIEM, then burn to unlock sVVV.`,\n makeBatchMeta: ({ step }) => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: step.kind === 'approve' ? 'approve_diem_burn' : 'burn_diem',\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'venice_burn_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceStakeDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const diem = getAddress(DIEM_BASE)\n const executor = getAddress(args.executorAddress)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: diem, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = []\n await appendErc20ApproveIfNeeded({ steps, rpcUrl: args.rpcUrl, token: diem, spender: diem, owner: executor, amountWei })\n steps.push({\n kind: 'action',\n to: diem,\n data: encodeFunctionData({ abi: diemStakingAbi, functionName: 'stake', args: [amountWei] }),\n value: 0n,\n })\n const n = steps.length\n return buildVeniceBatch({\n ...args,\n executorAddress: executor,\n steps,\n actionFallbackGas: VENICE_STAKE_VVV_FALLBACK,\n purposeSuffix:\n n === 1\n ? 'Venice: stake DIEM for API credits on Base (allowance already set).'\n : `Venice: ${n}-tx batch — approve DIEM, then stake for API credits.`,\n makeBatchMeta: ({ step }) => ({\n signatureText: JSON.stringify({\n kind: 'Venice',\n step: step.kind === 'approve' ? 'approve_diem_stake' : 'stake_diem',\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'venice_stake_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceInitiateUnstakeDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n amountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const diem = getAddress(DIEM_BASE)\n const amountWei = await parseHumanAmount({ rpcUrl: args.rpcUrl, token: diem, amountHuman: args.amountHuman })\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: diem,\n data: encodeFunctionData({ abi: diemStakingAbi, functionName: 'initiateUnstake', args: [amountWei] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: initiate DIEM unstake on Base (1-day cooldown).',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'initiate_unstake_diem', amountHuman: args.amountHuman }),\n evm: { type: 'venice_initiate_unstake_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyVeniceCompleteUnstakeDiem(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertVeniceBase(args.chainId)\n const diem = getAddress(DIEM_BASE)\n const steps: VeniceStep[] = [\n {\n kind: 'action',\n to: diem,\n data: encodeFunctionData({ abi: diemStakingAbi, functionName: 'unstake', args: [] }),\n value: 0n,\n },\n ]\n return buildVeniceBatch({\n ...args,\n steps,\n actionFallbackGas: VENICE_STAKING_ACTION_FALLBACK,\n purposeSuffix: 'Venice: claim DIEM after unstake cooldown on Base.',\n makeBatchMeta: () => ({\n signatureText: JSON.stringify({ kind: 'Venice', step: 'complete_unstake_diem' }),\n evm: { type: 'venice_complete_unstake_diem', version: 1, chainId: String(VENICE_BASE_CHAIN_ID) },\n }),\n })\n}\n\nexport { previewDiemMintedFromSvvcLock, computeMintRateSvvcPerDiem } from './mintRate.js'\nexport {\n readVeniceWalletStakingState,\n readVeniceDiemStakedInfo,\n formatVeniceStakingStateSummary,\n} from './stakingRead.js'\n","const VENICE_MODELS_URL = 'https://api.venice.ai/api/v1/models'\n\nexport type VeniceModelRow = {\n id: string\n type?: string\n offline?: boolean\n beta?: boolean\n}\n\n/** Fetch Venice model catalog (public GET /models). */\nexport async function fetchVeniceModels(args?: {\n type?: string\n apiKey?: string\n}): Promise<{ models: VeniceModelRow[] }> {\n const type = (args?.type ?? 'all').trim() || 'all'\n const url = `${VENICE_MODELS_URL}?type=${encodeURIComponent(type)}`\n const headers: Record<string, string> = { Accept: 'application/json' }\n const key = args?.apiKey?.trim()\n if (key) headers.Authorization = `Bearer ${key}`\n\n const res = await fetch(url, { headers, signal: AbortSignal.timeout(30_000) })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Venice models API ${res.status}: ${text.slice(0, 200)}`)\n }\n const json = (await res.json()) as { data?: unknown[]; models?: unknown[] }\n const raw = Array.isArray(json.data) ? json.data : Array.isArray(json.models) ? json.models : []\n const models: VeniceModelRow[] = []\n for (const item of raw) {\n if (!item || typeof item !== 'object') continue\n const o = item as Record<string, unknown>\n const id = String(o.id ?? o.model ?? o.name ?? '').trim()\n if (!id) continue\n const spec = (o.model_spec ?? o.spec) as Record<string, unknown> | undefined\n models.push({\n id,\n type: String(o.type ?? spec?.type ?? '').trim() || undefined,\n offline: Boolean(o.offline ?? spec?.offline),\n beta: Boolean(o.beta ?? spec?.beta),\n })\n }\n return { models }\n}\n\nexport async function veniceListModelsSummary(args?: { type?: string; apiKey?: string }) {\n const { models } = await fetchVeniceModels(args)\n return {\n type: args?.type ?? 'all',\n count: models.length,\n models,\n }\n}\n","import { createPublicClient, defineChain, getAddress, parseAbi, parseUnits } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_STAKING_BASE,\n VENICE_TOKEN_DECIMALS,\n} from './constants.js'\nimport { computeMintRateSvvcPerDiem, previewDiemMintedFromSvvcLock } from './mintRate.js'\nimport { formatVeniceStakingStateSummary, readVeniceWalletStakingState } from './stakingRead.js'\nimport { veniceListModelsSummary } from './veniceApi.js'\n\nexport async function veniceReadStakingStateSummary(args: {\n rpcUrl: string\n executorAddress: string\n chainId?: number\n}) {\n const chainId = args.chainId ?? VENICE_BASE_CHAIN_ID\n if (chainId !== VENICE_BASE_CHAIN_ID) {\n throw new Error(`Venice staking reads require Base chain id ${VENICE_BASE_CHAIN_ID}.`)\n }\n const wallet = getAddress(args.executorAddress)\n const state = await readVeniceWalletStakingState({ rpcUrl: args.rpcUrl, wallet })\n return formatVeniceStakingStateSummary(state)\n}\n\nexport async function veniceReadMintDiemPreviewSummary(args: {\n rpcUrl: string\n svvvLockAmountHuman: string\n}) {\n const ch = defineChain({\n id: VENICE_BASE_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const client = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl.trim()) })\n const lockWei = parseUnits(args.svvvLockAmountHuman.trim(), VENICE_TOKEN_DECIMALS)\n const diemTotalSupply = await client.readContract({\n address: getAddress(DIEM_BASE),\n abi: parseAbi(['function totalSupply() view returns (uint256)']),\n functionName: 'totalSupply',\n })\n const mintRate = computeMintRateSvvcPerDiem(diemTotalSupply)\n const expectedDiemWei = previewDiemMintedFromSvvcLock({ svvvLockWei: lockWei, diemTotalSupplyWei: diemTotalSupply })\n return {\n svvvLockAmountHuman: args.svvvLockAmountHuman,\n svvvLockWei: lockWei.toString(),\n mintRateSvvcPerDiem: mintRate,\n expectedDiemWei: expectedDiemWei.toString(),\n diemTotalSupplyWei: diemTotalSupply.toString(),\n stakingContract: getAddress(VENICE_STAKING_BASE),\n }\n}\n\nexport { veniceListModelsSummary }\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport {\n DIEM_BASE,\n VENICE_BASE_CHAIN_ID,\n VENICE_PROTOCOL_ID,\n VVV_BASE,\n isVeniceBaseChain,\n} from './constants.js'\n\nexport * from './constants.js'\nexport * from './mintRate.js'\nexport * from './stakingRead.js'\nexport * from './multisign.js'\nexport * from './mcpReads.js'\nexport * from './veniceApi.js'\n\nexport const veniceProtocolModule: ProtocolModule = {\n id: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const n = typeof ctx.chainId === 'number' ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10)\n return isVeniceBaseChain(n)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && token.kind === 'erc20'\n },\n actions: [\n {\n id: 'venice.stake-vvv',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake VVV → sVVV on Base',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'VVV amount' } },\n },\n {\n id: 'venice.initiate-unstake-svvv',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Start sVVV unstake (7-day cooldown)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'sVVV amount' } },\n },\n {\n id: 'venice.complete-unstake-svvv',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim VVV after sVVV unstake cooldown',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'venice.mint-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Lock sVVV and mint DIEM',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n svvvLockAmountHuman: { type: 'string', required: true, description: 'sVVV to lock' },\n slippageBps: { type: 'number', required: false, description: 'Min DIEM slippage bps (default 50)' },\n },\n },\n {\n id: 'venice.burn-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Burn DIEM to unlock locked sVVV',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'DIEM to burn' } },\n },\n {\n id: 'venice.stake-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake DIEM for Venice API credits ($1/day per DIEM)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'DIEM amount' } },\n },\n {\n id: 'venice.initiate-unstake-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Start DIEM unstake (1-day cooldown)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: { amountHuman: { type: 'string', required: true, description: 'Staked DIEM amount' } },\n },\n {\n id: 'venice.complete-unstake-diem',\n protocolId: VENICE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim DIEM after unstake cooldown',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(veniceProtocolModule)\n\n/** Canonical VVV/DIEM addresses on Base for UI and advisors. */\nexport const VENICE_BASE_TOKENS = {\n chainId: VENICE_BASE_CHAIN_ID,\n vvv: VVV_BASE,\n diem: DIEM_BASE,\n} as const\n"]}
|
package/package.json
CHANGED