virtuals协议的内外盘交易阶段分析

  • ben46
  • 发布于 2024-12-26 15:32
  • 阅读 729

virtuals协议的内外盘交易阶段分析

上一篇文章我们讲了virtuals的整体业务流程, 这一篇我们讲讲看一下代码看看之前有没有讲的不多或者比较粗略的地方.

bonding.sol

发行和管理ERC20合约

用于购买
发行
支持流动性
管理储备
assetToken
Bonding 合约
FERC20 代币

内盘阶段

发币者用户Bond合约Router合约FERC20 MEME TokenVIRTUAL Token外盘代理 TokenUniswap外盘调用 launch 函数初始化流动性 (addInitialLiquidity)初始化储备量 X初始化储备量 Y调用 buy/sell 函数更新储备量更新储备量调用 _openTradingOnUniswap初始化外盘流动性调用 unwrapToken销毁内盘 Token发送外盘 Token发币者用户Bond合约Router合约FERC20 MEME TokenVIRTUAL Token外盘代理 TokenUniswap外盘

谁可以发布内盘代币?如何发布?发布需要支付费用吗?费用被谁收走了?

  1. 发币者调用bond.sol合约上的launch函数,发币. 从 launch 函数的代码和逻辑可以看出,调用方需要提供一些基本的 Token 信息,并支付一定数量的 VIRTUAL Token(purchaseAmount),其中一部分作为费用(fee),另一部分用于购买初始的 FERC20 MEME Token。fee 最终被转移到一个专门的费用接收地址 feeTo。在 launch 函数中,内盘的初始流动性通过 router.addInitialLiquidity 方法设置:
    该方法初始化了 MEME Token 和 VIRTUAL Token 的储备量(X 和 Y),并计算出初始的 K 值。这一步为 Bonding Curve 的交易逻辑提供了基础。这里的 FERC20合约 是内盘阶段交易的 MEME Token,仅在内盘阶段使用,当进入到外盘后,会变成另一个 Token。
发币者Bond合约Router合约FERC20 MEME TokenVIRTUAL TokenFee地址调用 launch 函数 (提供 Token 信息和 purchaseAmount)转移部分 purchaseAmount 作为 fee调用 addInitialLiquidity初始化储备量 X初始化储备量 Y返回初始 K 值返回交易成功发币者Bond合约Router合约FERC20 MEME TokenVIRTUAL TokenFee地址
用户Bond合约FERC20 MEME Token内盘阶段仅使用 FERC20 MEME Token查询内盘阶段的 MEME Token 信息返回内盘阶段的 Token 类型 (FERC20)返回内盘 Token 信息用户Bond合约FERC20 MEME Token

内盘买卖阶段,需要支付手续费吗?手续费被谁收走了?

  1. 内盘阶段bond.sol合约提供buy和sell函数给内盘交易者进行交易. 在 buy 函数中,用户购买 FERC20 MEME Token 时需要支付 1% 的手续费。手续费会被转移到一个专门的手续费地址(feeTo),由 factory.taxVault() 指定.
用户Bond合约FERC20 MEME TokenVIRTUAL TokenFee地址调用 buy 函数 (支付 VIRTUAL Token)转移 1% 手续费增加用户的 MEME Token 数量更新储备量 Y返回购买成功调用 sell 函数 (出售 FERC20 MEME Token)增加用户的 VIRTUAL Token 数量更新储备量 X返回出售成功用户Bond合约FERC20 MEME TokenVIRTUAL TokenFee地址

内盘交易阶段的价格由什么决定?这个价格机制是在智能合约上实现的吗?

  1. 内盘交易阶段, 内盘阶段的买卖交易基于 Bonding Curve 的恒定乘积公式 X * Y = K,* X 和 Y 分别代表内盘 MEME Token 和 VIRTUAL Token 的储备量。* * K 是一个恒定值,表示储备池的总流动性。用户支付 VIRTUAL Token,按照 Bonding Curve 的公式计算可以获得的 MEME Token 数量,同时更新储备量。
用户Bond合约FERC20 MEME TokenVIRTUAL Token调用 buy 函数 (支付 VIRTUAL Token)计算恒定乘积公式 X * Y = K更新储备量 X更新储备量 Y返回 MEME Token 数量调用 sell 函数 (出售 FERC20 MEME Token)计算恒定乘积公式 X * Y = K更新储备量 X更新储备量 Y返回 VIRTUAL Token 数量用户Bond合约FERC20 MEME TokenVIRTUAL Token

什么时候内盘会发布到外盘?这个逻辑是在智能合约上实现的吗?

  1. 自动发布到外盘. 当内盘 Token 的储备量减少到 gradThreshold 以下,并且 Token 仍在内盘交易阶段时,_openTradingOnUniswap 会被调用。_openTradingOnUniswap 的主要功能是将 Token 从内盘阶段迁移到外盘阶段,具体包括以下步骤:** 停止内盘交易并开启外盘交易**, #### 获取内盘储备池的余额, 调用 graduate 完成毕业, 初始化外盘流动性和代理 Token, 销毁内盘 Token 并授权外盘交易, 触发毕业事件
Bond合约Router合约Uniswap外盘FERC20 MEME Token外盘代理 Token检查内盘储备量是否低于 gradThreshold调用 _openTradingOnUniswap获取内盘储备池余额调用 graduate 完成毕业初始化外盘流动性销毁内盘 Token授权外盘交易触发毕业事件Bond合约Router合约Uniswap外盘FERC20 MEME Token外盘代理 Token

我买了内盘代币如何换成外盘代币?

  1. 用户可以调用unwrapToken 函数, 将内盘的 MEME Token 按照 1:1 的比例兑换成外盘的 MEME Token。整个函数的逻辑是: 用户将持有的内盘 MEME Token(FERC20)发送到合约中。合约按照 1:1 的比例,将等量的外盘 MEME Token(Agent Token)发送给用户。内盘的 MEME Token 在兑换过程中会被销毁,确保总供应量的一致性。
用户Bond合约FERC20 MEME Token外盘代理 Token调用 unwrapToken 函数 (发送 FERC20 MEME Token)销毁内盘 MEME Token按 1:1 比例发送外盘代理 Token返回外盘代理 Token用户Bond合约FERC20 MEME Token外盘代理 Token
点赞 1
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论