Summary
To complete the vMANTA redemption wind-down, Bifrost needs to top up the vToken ReadyPool with sufficient MANTA liquidity.
This proposal only covers vMANTA that remains redeemable on Bifrost. vMANTA that has already been bridged to Moonbeam or Ethereum is excluded, as these balances are not expected to return to Bifrost for redemption.
This proposal also disables the following operations:
minimumMint to a very large valueminimumMint for Token2(15) / Token2(16) / Token2(17) / Token2(18) / Token2(19) to a very large valueminimumRedeem to a very large valuevMANTA redemption remains enabled so that existing vMANTA on Bifrost can continue to be redeemed.
The proposal uses utility.batchAll:
10^36 base units.Token2(15) / Token2(16) / Token2(17) / Token2(18) / Token2(19) to 10^36 base units.10^36 base units.tokens.setBalance on the blackhole account 0x000...000 to mint the required MANTA amount.tokens.forceTransfer to transfer the same amount from the blackhole account to the vToken ReadyPool.This avoids directly calling setBalance on the ReadyPool, reducing the risk of overwriting any real-time ReadyPool balance changes.
Network: Bifrost Polkadot
Query block: 13236619
Decimals: MANTA, vMANTA, ETH, and vETH all use 18 decimals
| Item | Amount |
|---|---|
| vMANTA total issuance | 14,456,624.858687184719579028 vMANTA |
| vMANTA tokenPool | 21,339,962.241475636922244504 MANTA |
| Exchange rate | 1 vMANTA = 1.476137234663882150 MANTA |
| vMANTA excluded on Moonbeam | 4,056,231.491610743713897808 vMANTA |
| vMANTA excluded in the Ethereum / Hyperbridge reserve account | 9,732,279.897797404621353412 vMANTA |
| vMANTA still redeemable on Bifrost | 668,113.469279036384327808 vMANTA |
| Required MANTA for local redemption | 986,227.168983249349258282 MANTA |
| Current ReadyPool MANTA | 89,843.578990348654633245 MANTA |
| MANTA to mint and transfer into ReadyPool | 896,383.589992900694625037 MANTA |
Calculation:
localRedeemableVMANTA = totalIssuance - moonbeamVMANTA - ethereumVMANTA
requiredMANTA = ceil(localRedeemableVMANTA * tokenPool / totalIssuance)
mintDelta = requiredMANTA - currentReadyPoolMANTA
The disable threshold is:
1000000000000000000000000000000000000 base units
= 1,000,000,000,000,000,000 tokens with 18 decimals
| Operation | Call | CurrencyId | Current minimum | New minimum |
|---|---|---|---|---|
| Disable vMANTA minting | vtokenMinting.setMinimumMint |
Token2(8) / MANTA |
1 MANTA | 1,000,000,000,000,000,000 MANTA |
| Disable vETH minting | vtokenMinting.setMinimumMint |
Token2(15) |
0 | 1,000,000,000,000,000,000 |
| Disable vETH minting | vtokenMinting.setMinimumMint |
Token2(16) |
0.001 | 1,000,000,000,000,000,000 |
| Disable vETH minting | vtokenMinting.setMinimumMint |
Token2(17) |
0.001 | 1,000,000,000,000,000,000 |
| Disable vETH minting | vtokenMinting.setMinimumMint |
Token2(18) |
0.001 | 1,000,000,000,000,000,000 |
| Disable vETH minting | vtokenMinting.setMinimumMint |
Token2(19) |
0.001 | 1,000,000,000,000,000,000 |
| Disable vETH redemption | vtokenMinting.setMinimumRedeem |
VToken2(15) / vETH |
0.0001 vETH | 1,000,000,000,000,000,000 vETH |
| Purpose | Address / Raw |
|---|---|
| Blackhole account raw | 0x0000000000000000000000000000000000000000000000000000000000000000 |
| Blackhole account decoded in call | 111111111111111111111111111111111HC1 |
| vToken ReadyPool raw | 0x6d6f646c62662f76746b696e0000000000000000000000000000000000000000 |
| vToken ReadyPool decoded in call | 13UVJyLjmw21t1jg4ARiVs3krDn5yQj9QCy6ohChCdTgniwe |
| Moonbeam sovereign account | 9Pz57gn4gCoFvqGPxhCze1hCt137gHb5Nen19rSZPHep9Cv |
| Ethereum / Hyperbridge reserve account | 13UVJyLkyg4DFTWf9rx91TTaGTS5MxYqXNGfg7EtXjmAajNE |
Execute the following call with Root:
utility.batchAll([
vtokenMinting.setMinimumMint(
currency_id = Token2(8),
minimum_amount = 1000000000000000000000000000000000000
),
vtokenMinting.setMinimumMint(
currency_id = Token2(15),
minimum_amount = 1000000000000000000000000000000000000
),
vtokenMinting.setMinimumMint(
currency_id = Token2(16),
minimum_amount = 1000000000000000000000000000000000000
),
vtokenMinting.setMinimumMint(
currency_id = Token2(17),
minimum_amount = 1000000000000000000000000000000000000
),
vtokenMinting.setMinimumMint(
currency_id = Token2(18),
minimum_amount = 1000000000000000000000000000000000000
),
vtokenMinting.setMinimumMint(
currency_id = Token2(19),
minimum_amount = 1000000000000000000000000000000000000
),
vtokenMinting.setMinimumRedeem(
currency_id = VToken2(15),
minimum_amount = 1000000000000000000000000000000000000
),
tokens.setBalance(
who = 0x0000000000000000000000000000000000000000000000000000000000000000,
currency_id = Token2(8),
new_free = 896383589992900694625037,
new_reserved = 0
),
tokens.forceTransfer(
source = 0x0000000000000000000000000000000000000000000000000000000000000000,
dest = 0x6d6f646c62662f76746b696e0000000000000000000000000000000000000000,
currency_id = Token2(8),
amount = 896383589992900694625037
)
])
Calldata:
0x3202247305080800000000109f4bb31507c97bce97c0007305080f00000000109f4bb31507c97bce97c0007305081000000000109f4bb31507c97bce97c0007305081100000000109f4bb31507c97bce97c0007305081200000000109f4bb31507c97bce97c0007305081300000000109f4bb31507c97bce97c0007306090f00000000109f4bb31507c97bce97c000470400000000000000000000000000000000000000000000000000000000000000000008081b0dcb8370bd9e410dd1bd004703000000000000000000000000000000000000000000000000000000000000000000006d6f646c62662f76746b696e000000000000000000000000000000000000000008081b0dcb8370bd9e410dd1bd
Call hash:
0xd8b039d61dbcb164b0df4bce9644823d2df7d05db9328de7e13afaa7d1559317
Calldata file: projects/bifrost/docs/vmanta-readypool-calldata/calldata-batch-mint-to-ready-pool.txt
Metadata file: projects/bifrost/docs/vmanta-readypool-calldata/calldata-meta.json
After execution:
Token2(15) / Token2(16) / Token2(17) / Token2(18) / Token2(19).896,383.589992900694625037 MANTA.986,227.168983249349258282 MANTA.668,113.469279036384327808 vMANTA on Bifrost.