项目介绍:Magnety protocol

Duke
9 min readJun 7, 2022

--

由于我们即将在测试网上发布我们的α版本,我们想给你一个简短的概述,说明Magnety是如何工作的。

α版架构

3个主要组成部分:

  • Fund initializer:管理基金部署及其初始化
  • 控制器:用户与基金之间的中介
  • 基金: NFT合约、存储追踪资产、外部头寸

3个子组件:

  • 价值解释器:管理资产价格和转化率。
  • 扩展:为每个基金存储一个配置。
  • 前逻辑合约:为每个集成的 DeFi 协议提供一组独特的合约

让我们通过四个主要功能来探索协议。

  • 购买股票
  • 赎回资金
  • 与 DeFi 互动
  • 部署和初始化资金

我们先来看看获取股份的过程:

作为用户,您需要提供基金的地址,以及您想要投资的金额。

  • 允许存款人?

首先,主计长将断言该基金是公共的还是私有的,但您是一个允许的存款人,通过从策略管理器扩展中询问资金配置。

  • 允许的货币和金额?

您发送的资产将是面额资产:它对每个基金都是独一无二的,并存储在基金本身中,它可以是 ETH、BTC、USDC 或其他任何东西,它通常用于评估业绩。该金额必须遵守策略管理器扩展给出的最小和最大投资金额。

  • 入场费

入场费由费用管理器扩展提供,如果启用,此金额的 x% 将发送给费用接收者:16% 到 staking Vault,4% 到 Dao 国库,80% 到资产管理器(这每种费用的重新分配都是一样的)。

  • 入股金额

正如通过这个非常简单的公式所解释的那样,我们需要获得一股股票的价格。基金的GAV(总资产价值)是基金所有资产和头寸的总和。

为了计算 GAV,我们首先获取基金的所有跟踪资产和头寸的列表及其数量,然后我们以基金的面额资产为基准,逐一计算它们的价格。这里我们需要ValueInterpretor组件,我们提供要计算价格的资产、数量和面额资产,最终得到面额资产的数量。

计算资产价格的4种不同情况:

  1. 传入资产是面额资产

金额被退回。

2.传入资产是受支持的原语

值解释器调用Primitive PriceFeed Manager将传入资产转换为面额资产。

重要的是检查两种资产是否具有相同的小数点并具有相同的资产利率(带有 Pontis 价格馈送的美元)

感谢 Pontis 团队帮助我们实施 🤟

3.传入资产为衍生资产

这里的目标是找到衍生品的标的资产,直到我们获得价格已知的原始资产。让我们看一个例子。

我想从 Alpha Road Finance AMM 流动性池中获取 ARFBTC-TST LP 的价格。ValueInterpretor 会将其识别为衍生品,并从合约“ARF_LP_helper”中调用 calcUnderlyingValues。

调用此函数后,值解释器将收到 [ARFBTC, TST] 和 [ARFBTC_amount, TST_amount] 并在此选项卡上循环调用之前的函数 calculAssetValue。第一个资产 ARFBTC 将被识别为原始资产,我们将通过 Pontis PriceFeed 获得我们想要的数量。第二个资产将被确认为衍生资产,我们实现了相同的工作,但这次使用的是“ARF_token_helper”合约。我们将获得以下选项卡 [ARFBTC_amount,ARFBTC] 并再次调用函数 calculAssetValue。同样,ARFBTC 将被识别为原始的并且金额将被退回。最后,将两个金额相加并返回结果。

感谢 Alpha 道路团队帮助我们进行 AMM 集成⚡

4.传入资产为外部头寸

该方法与前一种方法类似,但带有仓位外部仓位助手合约。

现在我们得到股价,我们可以得到股票数量,铸造 NFT 并将金额转移到金库🚩

我们选择将份额表示为 NFT 比 ERC20 更好,因为我们需要存储时间戳和份额在铸币时的价格,用于时间锁定和性能费用。因此,一个 NFT 可以包含一个或多个份额。

现在让我们来看看出售股票和赎回您的资金的过程:

您可以选择要赎回的资产,提供地址标签和金额标签,总和必须为100%。此外,您选择要出售的股票数量,如果您出售所有股票,NFT 将被烧毁。

  • 允许出售?

首先,审计员将根据策略管理器扩展中存储的时间锁值和 NFT 中存储的铸币时间戳检查您是否被允许出售股票。然后我们检查资产经理是否允许用户赎回资金,如果启用了该策略,他可以在一段时间内阻止出售股票。这适用于使用外部头寸的资产管理人,例如在永续协议上提供抵押品或借出基金资产。

  • 允许的货币和金额?

您可以在基金跟踪资产时收到您想要的任何资产。

  • 股份对资产金额

我们使用最后一种方法计算股价,然后计算选项卡中每种资产的数量。由于ValueInterpreter,我们首先计算面额资产中我们想要的资产的 1 个单位的值(查看小数) 。

然后我们对标签的每个资产做同样的事情,我们得到了要赎回的金额。

  • 演出费

绩效费由费用管理器扩展程序提供,如果启用,将从每项资产中提取 x% 的股份增值并发送给费用接收者。

  • 退出费

退出费用由费用管理器扩展程序提供,如果启用,将收取绩效费剩余金额的 x% 并将其发送给费用接收者。

然后我们将剩余的金额发送给用户🚩

我们看到了入场费、出场费、业绩费,但是资产管理人什么时候会感知到管理费呢?

管理费可以直接由资产管理人索取。和以前一样,他可以选择一组资产来赎回。

我们首先计算以 ETH 为单位的费用金额以赎回

请注意,声明的时间戳在资产经理声明这些费用后更新,并且还在基金创建时初始化。

然后,我们计算要发送的每个资产的数量,就像我们之前计算份额到资产数量一样,我们将其发送给费用接收者。

现在让我们看看资产管理器如何与 DeFi 协议进行交互。

比为我们在 Magnety 上集成的每个协议创建数千个适配器要好,我们选择通过直接提供合约地址和选择器函数来执行调用来使其更加灵活。然而,验证一些条件很重要。

  • 允许呼叫?

主计长询问Policy Manager Extension是否允许该基金使用合同和选择器。(见稍后向基金添加允许的协议)

  • 前置逻辑?

审计员将要求集成管理器扩展提供合同的地址,以根据我们调用的性质运行前逻辑内容。例如,如果我们对任何 AMM 执行掉期,我们需要确保基金跟踪传入的资产。如有必要,我们将 runPreLogic 调用到正确的合约,它会分析 arg _callData 以确保一切都被授权。

请注意,对于我们集成的任何协议,我们都需要编写 priceFeed 和 preLogic 代码。

如果在此之前我们没有收到任何错误,我们会调用基金合约并要求执行调用。🚩

让我们以基金初始化结束

没有任何特殊条件,每个人都可以创建任意数量的资金。根据初始化基金所需的汽油价格,我们将加税以防止任何滥用。

我们稍后会整合一些新功能,但基金已经是高度可定制的,您可以选择:

  • 基金名称和符号
  • 面额资产(必须是原语)
  • 头寸限制(​​收集资产和外部头寸)
  • 存款人的间隔
  • 一种将您的基金货币化的费用配置(0–5% 的入场费和退出费,0–20% 的绩效和管理费)。
  • 集成配置:选择您将被允许跟踪的资产以及您将能够与之交互的协议

协议的可用资产和集成存储在集成管理器扩展中。为了存储您的集成配置,我们将确保它们在 Magnety 上可用。

  • 时间锁定(3 小时到 15 天之间)
  • 公开与否

如果不公开,则必须在基金初始化后添加允许的存款人。

如果您想在基金初始化后修改这些规则,您可以执行重新配置。您必须等待至少 1 周(可以由 DAO 更改)才能验证您的更改,因此如果股东不同意您的新规则,他们可以出售他们的股份。

初始化后,您必须激活您的基金(铸造第一批股票)。知道股票供应量和总资产价值为零,我们不能直接使用购买股票功能。您将铸造 10.000 股,股票的价格将是您投资的金额 / 10.0000。

β版

用户从他的仪表板管理他的基金资产可能很烦人。即使是开发,也很难导入每个协议 UI 并从 Dapps 服务器获取数据。

是的,Staknet 帐户抽象现在可以实现这一点,这是链上资产管理协议的重要一步。

从这里,您将能够将您的资金导入您的钱包。因为账户地址不一定与私钥相关联,我们无法在 Starknet 上最常用的钱包(如 Argent X 或 Braavos)上导入提供私钥的账户。这就是我们开发钱包的原因,一旦准备好,我们将在测试网上部署β版本。借助 get-starknet 软件包,Magnety 钱包在 Dapp 上的集成将很容易,它允许 dApp 连接到 StarkNet 上的任何钱包

Magnety α — 19/06 在测试网上

更多最新测试信息请加入官方DC关注!

--

--