DeFi科普系列之(三)深入理解Synthetix如何玩转合成资产



  • 原文链接:

    https://defiweekly.substack.com/p/defi-audit-1-synthetix

    原文作者:Kerman kohli

    翻译&校对:Cortex(CTXC)运营团队

    313b92cc-2d34-4263-b22a-cb79682b1a04-image.png

    前段时间,我在推特上进行过一场投票,简单调研了一下用户希望了解的DeFi项目。结果有相当多的用户表示希望了解Synthetix这个项目。

    在开始详细介绍Synthetix之前,有必要花点时间来了解一下它的工作方式和主要功能。

    ﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
    基本原理
    Synthetix允许用户通过系统自己的原生代币SNX作为抵押品来生成任何资产(包括货币、黄金、股票等)。这样做的一大好处是,根本无需把(包括货币、黄金、股票在内的这些链下资产引入链上,而只需要处理这些合成的资产。从这个角度来说,MakerDAO其实也是一种合成资产协议,其中ETH是基础抵押品,DAI是生成的的合成美元。

    如果用作抵押品来生成合成资产的SNX的价值下降,则掌握铸币权的人(一般指抵押SNX生成合成资产的用户)必须补充更多的SNX才能赎回原来抵押的SNX。这和MakerDAO的工作原理类似,只是Maker还会处罚你10%的ETH抵押品。

    把上面说的整理一下,可以举一个简单的例子来说明:

    1. 假设我拥有750个SNX代币(当时的价格为1美元)

    2. 我存入750个SNX代币来铸造产生价值100美元的合成美元(系统需要750%抵押率)

    3. 如果某个时间SNX的价值跌至0.9美元,此时我要想赎回SNX,则需要再存入0.9美元的sUSD才能平仓。

    注:根据系统750%的抵押率,其750个SNX代币就能铸造价值100美元的sUSD

    看到现在好像没什么问题,不过接下来的问题是,为什么会有人首先购买并持有SNX代币?它到底有什么作用?下面我会解释:

    • 基于通胀的Staking奖励

    通过铸造合成资产,持有SNX的用户实际上成了此协议的股东。因此,这些人有资格获得更多新增的SNX代币。这些新增代币是基于协议中的通胀设计增发的。

    • 交易所交易费

    每次有人交易这些基于SNX抵押发行的合成资产时,必须要支付一定的手续费(0.3%)。抵押SNX生成合成资产的人可瓜分这些手续费。

    • Uniswap LP奖励

    严格来说,这也是第一点中的一部分,但在这里需要注意的是,凡是抵押SNX生成sETH的人,并且为Uniswap上的sETH/ETH流动资金池提供流动性的用户,还可以获得额外的奖励。这一点非常重要,因为它可以维持sETH和ETH之间的价格锚定,这样就为Synthetix中的所有合成资产之间建立了一个流动通道。

    最后,Synthetix工作原理的最后一部分是要理解合成一种资产的成本。在MakerDAO中,有一个稳定币的概念,它是由MKR持有者不定期设定的。而Synthetix有自己的特点,那就是每个用户实际上是在与其他交易者博弈竞争。

    fea1291c-45ef-4738-94fd-2653c6365c50-image.png

    注:原文作者出现计算错误,其750个SNX代币就能铸造100美元的sUSD,因此本文按照750SNX进行举例说明。

    1. John使用750 SNX铸造100 sUSD。

    2. Jill也使用750 SNX铸造100 sUSD

    3. 该网络现在有200 sUSD的债务,其中John和Jill分别占债务的50%

    4. John决定赌一把,用他抵押合成的sUSD购买了100 sLINK(当时每个sLINK价值1美元),并为此支付交易费。(John和Synthetix网络的债务变成了100 sLink,此时仍为100美元)

    5. 现在sLINK的价格上涨到了4美元一个,因此John的100 sLINK代表价值$400。而Jill的手里的价值仍为$100(100 sUSD)

    6. 该网络的债务总额现在总计为500美元。由于John和Jill分别承担债务的50%,因此John欠Synthetix网络250美元的债务,Jill同样也欠Synthetix网络250美元的债务。

    7. John和Jill之间的区别是,John从价格上涨中赚了300美元,因此他赚了150美元(100美元+300美元-250美元),而Jill则下跌到250美元。

    这样看,Synthetix的Staking奖励其实会产生一定误导,因为它实际上只是激励人们不只要承担债务累积风险,同时还要积极开启交易头寸。正所谓,这世上没有免费的午餐。

    注意:你可以在不持有SNX或质押权益(Staking)的情况下交易合成资产。

    接下来,让我们来看看Synthetix在各种状况下的表现:

    所有权架构和管理密钥

    Synthetix是迄今为止我遇到过最复杂的DeFi架构之一,从头至尾它大量使用Proxies(直译为“代理”)。Proxies是某人指向一个地址,但从另一个合约执行代码的一种方式。可以将其视为能替其他人执行代码的一个“代理人”。

    以下是Synthetix的智能合约和所有权架构的高级架构概述。

    293724f7-eb88-4fb2-880a-f37e3b8df75f-image.png
    接下来将是又臭又长的内容阐述,不过别担心,我尽量把它们掰开揉碎了逐一进行说明。

    首先,与Synthetix系统的每次交互都是调用Proxy.sol这个合约,合约地址为:0xC011A72400E58ecD99Ee497CF89E3775d4bd732F。这个合约的两个关键属性是targetAddress和owner。

    owner就是简单字面意思:所有者。但是target实质上是把所有调用都转发到智能合约。

    在这个例子中,target就是Synthetix.sol,您可以将其视为整个系统的核心。owner(可以随意切换Synthetix合约的整体部署,使它们按照自己的意愿做任何事情。这并不是什么新鲜事物,但我认为系统整体部署不能随意更改。一些架构通过使用特定的代理向用户来保证哪些可以更改哪些不可以更改。

    Synthetix.sol(0x8454190C164e52664Af2c9C24ab58c4e14D6bbE4)是一个大脑,它负责协调系统内部的所有交互,它有以下几个职责:

    • 跟踪所有合成资产代币余额

    • 列出系统内所有有效的合成资产地址

    • 获取生态系统中任何合约地址的解析器

    本合约和proxy.sol合约的owner相同,但是它有一个特殊的变量叫做selfDestructBeneficiary。

    当前部署在:

    0xde910777c787903f78c89e7a0bf7f4c435cbb1fe合约里。但有一件事特别奇怪,在收款人收到所有资产之前还有28天的时间延迟期。而且,前面这个0xde9只是一个普通的以太坊地址,没有多重签名,基本上可以认为是某个人的钱包。

    我认为,在这里最重要的问题就是“谁是Owner?”它到底是如何运作的?

    Owner的地址是:

    0xeb3107117fead7de89cd14d463d340a2e6917769,它是另一个Proxy合约。由于这层代理合约的原因,我无法直接在Etherscan上直接查看,所以我编写了一些代码来直接获取结果。

    83450013-1f9e-4c0f-87f5-14643356da20-image.png

    结果如下:

    33489bab-1322-4720-b18d-e0e891d414f2-image.png
    好消息是,需要4个地址才可以对主合约进行更改。

    坏消息是,没有时间锁,所以如果这四个人都做了签名,他们就可以立即进行更改。

    代码质量

    5af60300-1bca-4957-8bd1-744156d79857-image.png

    结构

    我个人很喜欢类似在链上注册地址这种小操作,但我非常不喜欢复杂的升级控制代理引入到智能合约系统中。Synthetix的整个架构严重依赖于代理。从集成的角度来看,这意味着你在一个区块上和Synthetix进行的交互,可能和下一个区块上与Synthetix进行的交互,是完全不同的(因为他们在在这期间进行了一次升级)。其他协议可能已经实现了控制升级,因为你使用的合约永远不会更改,有更改也只会是其中的一小部分,所以你会知道系统的哪些特定部分可以升级,哪些是不会更改升级的。这时,可以实现代码高度模块化,管理员可以替换系统中的不同模块,而不是替换整个系统。但使用代理体系架构可以通过完全的控制权使你实现缓慢决策,快速部署的效果。

    甚至代币也有自己的代理,它们被部署在后面。我很理解Synthetix想要完整迭代升级的意图,但是如果每一个合约都有一个代理,那在我看来可能会有人过度使用权利。将来,我还会介绍一些其他的体系架构,这些架构可通过一个更好、更简单、无代理的结构同样实现那些升级的好处。

    文档

    Synthetix的文档给我留下了深刻的印象。他们的图表展示了集成架构,便于访问合约地址和很多 DeFi团队通常不会发现的东西。在撰写本指南时,他们的文档能够帮助我理解他们的系统是如何工作的。

    单元测试

    仔细阅读他们的代码的话,可以发现他们确实进行了测试。但是有一点很值得注意,那就是他们采用的测试方式是集成测试,而不是单元测试。这两个的区别在于,他们的测试检查可以确保一切正常,但并不能保障系统可以针对恶意或意外的输入进行防御。

    Synthetix可以对主要部署的合约进行审计,但我个人认为,审计公司效率最高也只能达到80%。因此我认为可能还是会存在部分漏洞。

    你可以给我看一个智能合约的漏洞,我就能告诉你是哪家审计公司做的审计。

    综合评价

    这部分我有点自以为是。但我发现Synthetix的开发工具基本还算不错。他们的Javascript库依赖于即将更新的JSON ABI文件,而不是使用提供集成保证的Typescript类型。Set,dYdX和0x都是使用Typescript类型并受益匪浅。他们的Javascript库没有进行大范围测试来确保任何ABI更改都不会破坏整个系统。这不是什么大不了的事情,但它告诉我的更多信息是,团队对开发人员经验的关心程度,以及将智能合约集成到外部系统中的难易程度。

    流动性分析

    当前Uniswap最大的两个流动性池是ETH/sETH和ETH/SNX。ETH/sETH的规模主要是来自于Synthetix的通胀设计,它奖励给在Uniswap上提供流动性的抵押用户更多的SNX代币。

    2cc214a9-9e90-4853-8aaf-7e5166b6d055-image.png
    afec6484-4a53-42be-aa6d-d1b189f77c38-image.png

    然而,我从这一点意识到,长远来看,如果他们不能攻克真正困难的挑战,Synthetix的模型并不是可持续的。

    1.如前所述,合成资产是一种有担保的抵押品。并且他们声称没有清算机制,只有需要偿还的债务。该系统面临潜在的抵押担保不足问题(尽管抵押率目前为750%,离资不抵债的安全空间相当大),但仍然有待观察。

    2.合成资产的持有者所持有的资产并不能完全用稳定的抵押品赎回。如果SNX的价格迅速下跌,那么许多头寸将开始变得抵押不足,即使可以赎回SNX,也将面临挤兑的情况。

    由于采取了Staking的激励措施,只有20%的SNX供应没有主动抵押,这就引发了一个问题:如果大部分的真实的、健康的流动性都被吸走了,那么如何从其他地方再产生?请记住,你需要激励机制是为了对SNX的健康需求,而不是为了让合成资产拥有真正价值。

    267a5aca-2e47-48ec-bce0-ce0745bb7235-image.png

    我和很多人一样都讨厌CoinMarketCap,即便如此,我还是展示一下CMC提供的以下关于Synthetix在Uniswap之外的流动性数据。

    2697f81a-ccd6-4eac-a47f-3ccbfcd1144e-image.png

    我想表达的不是Synthetix注定要失败,而是它要想成为一个成功的合成资产协议:还需要一些额外的东西:

    1.只有当SNX在 Uniswap或激励机制之外的其他市场中价格提升才能获得流动性;

    2.只有当SNX能够产生足够多交易费,多到足以让人们引起关注时,它才能获得价值/需求(到目前为止,它已经赚得了700万美元,这意味有一些机会);

    3.只有当人们打开合成资产头寸,进行交易,并实际将合成资产用于预期用途时,才会产生交易费;

    4.只有当人们持有拥有某种合成资产或者认为某种合成资产具有价值的时候,才会将其视为MoE(Medium of Exchange,交易媒介)。

    5.在SNX获得流动性之前,人们不会有信心持有合成资产,其他生态系统参与者也不会在其他交易所上市。

    这本质上是一个棘手的问题,需要两者以上才能获得成功。Maker使用ETH作为整个系统的基础抵押品,避免了这一系列问题。Synthetix正在通过引入ETH抵押品来获取解决方案,但这一系列问题仍然始终存在,即代币持有者想要的SNX数量要比ETH多,以确保SNX变得更像有价值的代币。

    Oracle(预言机)分析

    在Synthetix的早期,一个预言机出现过故障,有人用它造了3700万个SNX。人们的信心遭到重创,这是对人们信心的一次大动摇。不过团队果断地改成使用Chainlink预言机。

    https://www.theblockcrypto.com/linked/28748/synthetix-suffers-oracle-attack-potentially-looting-37-million-synthetic-ether

    我也想对Chainlink进行分析,但这超出了本文的范围。该团队确实运行了一些自己的Oracle,可以在此处直接查看这些Oracle:https://developer.synthetix.io/tokens/

    从本质上讲,这只是一个将价格发布到智能合约并进行更新的地址。我不确定opsec是否会出现在这些文件上,但我可以确定它可以连接到钱包。在Synthetix的例子中,内部有多个连接到Internet的私钥,其实这是一个非常危险的行为。我曾经在前公司担任开发人员的时候遇到过这种问题,但不幸的是,目前没有解决方案。

    我向团队提出的唯一建议是,放慢脚步,并且研发一个更强大的opsec程序。否则只能在网络中添加另外10个中心化的预言机喂价,然后慢慢变成一个中心化交易所并乐在其中。该团队确实有一个积极的路线图并努力实现。希望他们能循序渐进,专注于基础架构的建设。

    保险流动性

    目前,Nexus Mutual和Opyn保险业务都不涵盖Synthetix的合约。如果在出现违约的情况下,通胀奖励的一部分可以用来为Synthetix用户提供保险来进一步产生流动性,还是很不错的。这可能会让用户对持有SNX或合成资产更有信心。

    结尾

    到这,我对Synthetix深入研究基本就结束了。总体而言,Synthetix显然是DeFi领域的先驱,它采用了一些非常独特且有效的策略来确保代币能够在获取价值的同时成为生态系统的组成部分。

    而未来面临的主要挑战是,该系统能否成功激励人们创建想要持有的合成资产、用于商业的合成资产或其他非投机用途的合成资产。到目前为止,这个团队已经做出了一些令人印象深刻的转变(从Havven)成为现在的经济模型。我会持续关注这个项目,尽管我想说他们今后面临的挑战并不容易解决。

    这篇评测我最喜欢的部分就是看到了大量来自第三方的文档和教程来帮助我理解整个系统是如何工作和运行的。假设他们能解决其他大部分的问题,我相信其他开发者们也会感激这点。


Log in to reply