Skip to content

[VPD-1542] VIP for creating Ceffu Custody BTC (vceBTC) Fixed Rate Vault#730

Open
GitGuru7 wants to merge 15 commits into
mainfrom
feat/vpd-1542
Open

[VPD-1542] VIP for creating Ceffu Custody BTC (vceBTC) Fixed Rate Vault#730
GitGuru7 wants to merge 15 commits into
mainfrom
feat/vpd-1542

Conversation

@GitGuru7

@GitGuru7 GitGuru7 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Onboards vceBTC ("Ceffu Custody BTC for Venus"), a governance-controlled accounting mirror for BTC held in Ceffu custody, and creates a Venus Fixed Rate Vault (Institutional Loan Vault) that uses vceBTC as collateral. vceBTC is priced identically to BTCB by cloning BTCB's full oracle configuration.

Ships on both bscmainnet and bsctestnet.

What changes

The VIP executes these on-chain actions (single REGULAR proposal):

  1. Oracle — clone BTCB's full config for vceBTC: main/pivot/fallback sub-oracle feeds (Chainlink, RedStone, Atlas), the BoundValidator bounds, and the ResilientOracle token config.
  2. Ownership — accept ownership of vceBTC (already offered to the Normal Timelock by the deployer).
  3. Access control — grant mint(address,uint256) and burn(address,uint256) on vceBTC to the Normal Timelock and the Critical Guardian.
  4. Initial supply — mint the initial vceBTC collateral to the Venus Treasury.
  5. Vault creation — create the Fixed Rate Vault with vceBTC as collateral.

Open parameters (to finalize before proposing)

  • SUPPLY_ASSET — currently USDT (0x55d3…7955); confirm intended.
  • INSTITUTION_OPERATOR — placeholder 0x1111…1111; replace with the real Ceffu operator address.
  • VAULT_SHARE_NAME / VAULT_SHARE_SYMBOL / INSTITUTION_NAME
  • VaultConfig / InstitutionalConfig / RiskConfig numerics — marked TODO: finalize values (APY, caps, durations, collateral amount, margin/liquidation/penalty rates).

Test plan

Fork simulations pass on both networks:

npx hardhat test simulations/vip-999/bscmainnet.ts --fork bscmainnet   # 39 passing
npx hardhat test simulations/vip-999/bsctestnet.ts --fork bsctestnet   # 34 passing

Coverage per network:

  • Pre-VIP: vceBTC deployed with correct ACM/name/symbol/decimals, ownership offered but not accepted, no oracle config yet (getPrice reverts), timelock/guardian cannot mint/burn.
  • Execution: proposal proposes, votes, queues, and executes within the per-tx gas cap.
  • Post-VIP: vceBTC priced ~= BTCB, ownership accepted, timelock/guardian can mint/burn, initial supply minted to Treasury, vault created and registered.
  • Oracle: BTCB and vceBTC prices resolve; vceBTC price/bounds match BTCB's cloned config.
  • Vault lifecycle (full e2e): margin deposit → open → top-up → lender deposit → lock → claim funds → repay → mature → redeem → withdraw collateral.

@GitGuru7 GitGuru7 self-assigned this Jul 6, 2026
@GitGuru7 GitGuru7 changed the title feat: draft Ceffu Custody BTC fixed rate vault proposal [VPD-1542] VIP for creating Ceffu Custody BTC (vceBTC) Fixed Rate Vault Jul 6, 2026
@GitGuru7 GitGuru7 marked this pull request as ready for review July 6, 2026 15:02
Comment thread vips/vip-999/bscmainnet.ts Outdated
{
target: VCEBTC,
signature: "mint(address,uint256)",
params: [bscmainnet.VTREASURY, VCEBTC_INITIAL_SUPPLY],

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I think we should mint to multisig address, rather than treasury.

Otherwise action relative to vceBTC need to have a VIP, which take a lot of time.

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.

Comment thread simulations/vip-999/bscmainnet.ts Outdated
import ORACLE_ABI from "./abi/ResilientOracle.json";
import ERC20_ABI from "./abi/VenusERC20.json";

const BOUND_VALIDATOR_ABI = ["function validateConfigs(address) external view returns (uint256, uint256)"];

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

shouldnt be (address, uint256, uint256) ?

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.

Comment thread vips/vip-999/bscmainnet.ts Outdated
// institutionOperator, positionTokenId]
export const instConfig = [
VCEBTC, // collateral = vceBTC
parseUnits("2000", 18), // idealCollateralAmount (sized off-chain from 50% CF + 20% buffer)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

why 2000 ?

Image

Comment thread vips/vip-999/bscmainnet.ts Outdated
// maxBorrowCap, minSupplierDeposit, openDuration, lockDuration, settlementWindow]
export const vaultConfig = [
SUPPLY_ASSET,
800, // fixedAPY = 8%

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

6%

Comment thread vips/vip-999/bscmainnet.ts Outdated
800, // fixedAPY = 8%
parseUnits("0.1", 18), // reserveFactor = 10%
parseUnits("1000000", 18), // minBorrowCap = 1M
parseUnits("50000000", 18), // maxBorrowCap = 50M loan market size

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

1M ~ 50M ?

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.

3 participants