Skip to content

PSM

The BNB Chain Peg Stability Module (PSM) swaps USDT and VAI. It is a transparent proxy at 0xC138aa4E424D1A8539e8F38Af5a754a2B7c3Cc36.

At BNB Chain block 118,364,540:

FieldValue
Implementation0x9664568e5131e85f67d87fcd55b249f5d25fa43e
PausedNo
Stable tokenUSDT 0x55d398326f99059fF775485246999027B3197955
VAI0x4BD17003473389A42DAF6a0a729f6Fdb328BbBd7
Fee in0 basis points
Fee out10 basis points
VAI mint cap5,000,000 VAI
VAI attributed to PSM mints465,696.242314352647832029 VAI
Treasury0xF322942f644A996A617BD29c16BD7d231d9F35E9
Access Control Manager0x4788629ABc6cFCA10F9f969efdEAa1cF70c23555

These values are governance-configurable. Read the proxy at the relevant block before constructing a swap.

function swapStableForVAI(address receiver, uint256 stableTknAmount)
external
returns (uint256 vaiOut)

The caller must approve the PSM to transfer USDT. The PSM supports fee-on-transfer accounting by measuring the amount actually received. It mints the net VAI to receiver, not necessarily to the caller. The gross USD value counts against vaiMintCap; any fee is minted to the treasury.

function swapVAIForStable(address receiver, uint256 stableTknAmount)
external
returns (uint256 vaiBurned)

The caller must approve the PSM to transfer any VAI fee. The requested stable-token amount is sent to receiver; the corresponding VAI is burned from the caller and vaiMinted is reduced.

function previewSwapStableForVAI(uint256 stableTknAmount) external view returns (uint256)
function previewSwapVAIForStable(uint256 stableTknAmount) external view returns (uint256)

Preview results can differ from execution if oracle prices or configuration change before the transaction is mined.

Every state-changing administrative function below checks its exact signature through the Access Control Manager:

  • pause() and resume();
  • setFeeIn(uint256) and setFeeOut(uint256);
  • setVAIMintCap(uint256);
  • setVenusTreasury(address);
  • setOracle(address).

Permission is signature-specific. Check the live ACM grantee for the target proxy rather than treating “governance” or “guardian” as a universal role.

Source: PegStability.sol in venus-protocol v10.3.0.