Files
smom-dbis-138/contracts/wrapped-lp-public

Wrapped LP / Public Chain Program (Scaffold)

Solidity for Option A (lock → mint wLP → redeem) and Option B (ERC-4626 vault + NAV oracle). This is a new vertical: not an extension of CWMultiTokenBridgeL1/L2 or catalog cW* CCIP paths.


Documentation (exhaustive index)

Doc Description
WRAPPED_LP_PROGRAM_REFERENCE.md Master index, invariants, glossary, phase gates
ADR_WRAPPED_LP_VAULT_PUBLIC_CHAIN.md Architecture decisions, alternatives
WRAPPED_LP_MESSAGE_SCHEMA.md lockRef, payloads, CCIP, redemption
WRAPPED_LP_ORACLE_STACK.md Two-price model, keepers, lending
WRAPPED_LP_LENDING_GOVERNANCE.md Venues, listing, risk matrix
WRAPPED_LP_OPERATIONS_RUNBOOK.md SLOs, RACI, incidents
WRAPPED_LP_AUDIT_CHECKLIST.md Auditor scope, threats

Contracts

File Role
Chain138LPLocker.sol Escrow LP on 138; lockRef; releaseLock / releaseAmount
WLPReceiptToken.sol Public-chain wLP (MINTER/BURNER)
PublicChainMintController.sol Idempotent mintForLock; mintPaused
WLPRedemptionGateway.sol Burn + RedemptionRequested
WrappedLPNAVVault.sol ERC-4626 + depositCap
WLPNAVOracle.sol USD-style feed, heartbeat, breaker, isStale()
interfaces/IWLPProgramEvents.sol Shared events

Build / test (scoped Forge)

Full-repo forge test may fail on legacy 0.5.x/0.6.x vendor trees; always use scope:

cd smom-dbis-138
bash scripts/forge/scope.sh build wrapped-lp-public
bash scripts/forge/scope.sh test wrapped-lp-public --match-path 'test/wrapped-lp-public/*.t.sol'

Deployment

Script Use
DeployWrappedLPLockerChain138.s.sol Chain 138 onlyChain138LPLocker
DeployWrappedLPPublicChain.s.sol Public chain — wLP, mint controller, gateway, oracle, optional vault
DeployWrappedLPProgram.s.sol Single-chain / Anvil — full stack on one RPC (not production two-chain)

Production: two forge script runs (138 RPC then destination RPC). See WRAPPED_LP_DEPLOYMENT_RUNBOOK.md.

Post-deploy role wiring (required)

Grant To
WLPReceiptToken.MINTER_ROLE PublicChainMintController
WLPReceiptToken.BURNER_ROLE WLPRedemptionGateway
PublicChainMintController.RELAYER_ROLE Relayer worker(s)
Chain138LPLocker.BRIDGE_RELEASE_ROLE Relayer (138 release path)
WLPNAVOracle.KEEPER_ROLE Price keeper

Use multisig for DEFAULT_ADMIN_ROLE on production.

Environment variables (deploy script)

Variable Purpose
LP_TOKEN DODO LP ERC20 on 138
ADMIN Multisig / admin
PRIVATE_KEY Broadcast key (lab only)
USDC Optional; if set, deploys WrappedLPNAVVault

Limitations (read before mainnet)

  1. Relayer trust: Mint path assumes honest relayer until ZK/attestation hardening.
  2. Fungible wLP: Secondary trading breaks simple per-lock redemption; see message schema doc.
  3. Vault: totalAssets() follows ERC-20 balance; off-chain strategy on 138 is operational.

Repo context

  • PMM pools: docs/11-references/DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md §4.1
  • cW bridge pattern only: docs/07-ccip/CW_BRIDGE_APPROACH.md
  • GRU policy orthogonality: docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md