Skip to content

VDB-12: VIP-664 [BNB Chain Testnet] Add MCBT market to the Core pool#728

Closed
trumpgpt-bot wants to merge 1 commit into
mainfrom
bot/VDB-12-add-a-new-market-for-mcbt-modern-central-bank-token-to-the
Closed

VDB-12: VIP-664 [BNB Chain Testnet] Add MCBT market to the Core pool#728
trumpgpt-bot wants to merge 1 commit into
mainfrom
bot/VDB-12-add-a-new-market-for-mcbt-modern-central-bank-token-to-the

Conversation

@trumpgpt-bot

Copy link
Copy Markdown
Contributor

Adds VIP-664 (vips/vip-664/bsctestnet.ts) listing and configuring the vMCBT market in the Venus Core pool on BNB Chain testnet, plus a fork simulation (simulations/vip-664/bsctestnet.ts).

Market parameters: Chainlink direct price $2.50, resilient oracle routed to Chainlink (main only); collateral factor 60%, liquidation threshold 70%, liquidation incentive 10%, reserve factor 25%; supply & borrow caps 236 MCBT; borrowing enabled (setIsBorrowAllowed(0, vMCBT, true)); JumpRateModel base 0% / multiplier 6.67%/yr / kink 75% / jump 627%/yr. Seeds initial liquidity and routes the remainder to VTreasury. ProposalType.REGULAR.

Deployed addresses used: MockMCBT 0x00298c15260FbE3C51D2a30765B1EedBd4f8b1F1, vMCBT 0xf9C77bFA1F86574E6F39A61dab94d9Bb9ED21AFe, JumpRateModel 0x1CcDaf39085bae4e27c3Ba100561b1AD1B5A6b80.

Tests: node_modules/.bin/hardhat test simulations/vip-664/bsctestnet.ts --fork bsctestnet59 passing. The 4-part sim asserts the market is listed, all risk params/oracle/IRM are correct, supply+borrow works, and CF, supply cap and borrow cap are enforced. Oracle staleness across the timelock is handled (MCBT direct price is staleness-proof; canonical setMaxStalePeriodForAllAssets guard applied). eslint/prettier clean.

Note: the request's VIP block referenced vUXRP/UXRP/236 UXRP — treated as copy-paste artifacts; the market added is MCBT/vMCBT with 236 MCBT caps.


Opened by the Venus dev bot. Review required; the bot cannot merge.

List vMCBT (mock Modern Central Bank Token) in the Venus Core Pool on BNB
Chain testnet via VIP-664: Chainlink direct price $2.50, resilient oracle
routed to Chainlink, CF 60% / LT 70% / liquidation incentive 10% / reserve
factor 25%, supply & borrow caps 236 MCBT, borrowing enabled.

Adds a 4-part fork simulation proving the market is listed and functional
(supply MCBT + borrow against it) and that the collateral factor, supply
cap and borrow cap are all enforced.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@trumpgpt-bot trumpgpt-bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test

@trumpgpt-bot trumpgpt-bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean VIP that closely follows the VIP-633 pattern. All deployed addresses verified on-chain: vMCBT (0xf9C77...AFe) → symbol "vMCBT", underlying MCBT, decimals 8, IRM = RATE_MODEL; MCBT (0x00298...F1) → symbol "MCBT", decimals 18; RATE_MODEL → multiplierPerBlock 951769406 = 0.0667e18/70080000 ✓, jumpMultiplierPerBlock 89469178082 = 6.27e18/70080000 ✓, kink 0.75e18 ✓; vMCBT.comptroller() = 0x94d1820b... = bsctestnet UNITROLLER (Diamond proxy) ✓; PROTOCOL_SHARE_RESERVE matches VIP-633. All Comptroller function signatures (_supportMarket, _setMarketSupplyCaps, _setMarketBorrowCaps, setCollateralFactor, setLiquidationIncentive, setIsBorrowAllowed) confirmed present in the deployed ABI. Pool ID 0 for setIsBorrowAllowed is correct for the Core pool (matches VIP-581 addendum). One minor clarity issue: the checkRiskParameters call in the simulation passes liquidationThreshold, which is silently not checked when isLegacyPool=true — the actual coverage comes from the inline it() below it, but the extra field is misleading at the callsite.


checkRiskParameters(vMCBT_ADDRESS, MARKET_MCBT.vToken, {
collateralFactor: MARKET_MCBT.riskParameters.collateralFactor,
liquidationThreshold: MARKET_MCBT.riskParameters.liquidationThreshold,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor] liquidationThreshold passed here is silently ignored: checkRiskParameters only calls checkILRiskParameters (which verifies it) when isLegacyPool is false. For isLegacyPool: true (this market) the field is a no-op in this call. The actual coverage lives in the standalone it("liquidation threshold is 70%", ...) at line 117, so there is no gap — but keeping this field here suggests it's being verified by checkRiskParameters when it isn't. Drop liquidationThreshold from this call (or type the third argument as LegacyPoolRiskParameters) to make the intent clear.

@fred-venus fred-venus closed this Jul 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants