Skip to content

ChainRex/decentralized-stablecoin

Repository files navigation

一种锚定美元的去中心化算法稳定币

  • 外部抵押:ETH & BTC
  • 稳定机制:算法稳定(类似DAI)
  • 挂钩法币:USD

DSC代币合约:0x61E8e7Fa02e6FBeE81C0058f2993C2475916aD46

DSCEngine:0xc672dC446154F7630e15d394EF2910E68DfC1F37

技术栈

Solidity, Foundry, Chainlink Price Feed

  • 使用Chainlink价格预言机获取以太币和比特币价格
  • 规定人们只能使用足够的抵押品铸币
  • 当抵押品价值下跌,使得健康因子达到阈值,其他人就可以清算该用户,即使用折扣的稳定币换取用户的抵押品
  • 使用Foundry框架进行单元测试,集成测试,分叉测试,模糊测试和测试网部署

什么是稳定币?

稳定币是一种购买力相对稳定的加密货币

稳定币的分类方式

  • 相对稳定性

    锚定型:相对于其它事物稳定 e.g. USDT,USDC,DAI

    浮动稳定币:使用不同的机制保持购买力不变 e.g. RAI

  • 稳定性方法

    受治理的稳定币:需要中心化的组织人工干预铸币和销毁 e.g. USDC,USDT,TUSD

    算法稳定币:无需人工干预,通过算法决定铸币和销毁 e.g. DAI,Frax,RAI,UST

  • 抵押品类型

    外部抵押品:例如抵押美元(USDC)或抵押以太等多种资产(DAI)

    内部抵押品:Luna/Terra(UST)

什么是DAI?

将ETH或其它加密货币作为抵押物存入具有DAI算法的智能合约,根据当前的抵押物对美元价格铸造一些DAI,这些DAI的价值只能比抵押物的价值更少。当需要赎回抵押物时,需要将DAI交还给智能合约,合约会销毁这些DAI,然后使用当前抵押物的价格计算应该返还多少抵押物。

该协议需要收取2%的稳定性费用,如果无法支付稳定性费用或抵押品价值下跌,使得抵押品的价值低于铸造的DAI价值(或者是某个阈值),这些抵押品就可能被清算

健康因子

抵押品价值*清算阈值(假定为50%)/稳定币价值,当该值小于1时,将可能被清算,也就是需要至少两倍的超额抵押

清算

清算者可以获得偿还债务10%价值的额外抵押物奖励

已知的隐患

如果抵押物价格暴跌,导致抵押率低于100%,这将无法激励清算员

模糊测试

将随机数据提供给系统,以尝试破坏系统中的不变量(始终保持的属性)。在Foundry框架中,只需要往测试函数传入变量即可,该变量会在每次运行时随机变化,尝试破坏代码中的不变量

在该项目中,关注的不变量有以下这些:

  • 稳定币总供应量应该小于抵押品总价值
  • View函数不应该回滚(这是大部分协议都应该有的)

模糊测试具体还可分为以下两种:

  • 无状态模糊测试:每次测试都是独立的
  • 有状态模糊测试:上一次运行的结束状态是下一次运行的起始状态,在Foundry框架中,将测试合约继承StdInvariant,并使用函数targetContract指定目标合约,Foundry将多次随机运行合约中不同的函数并使用不同的参数

在Foundry中,可以使用Handler方式进行测试,它可以让函数按一定的规则、顺序进行调用,缩小测试范围,增加发现bug的概率。具体而言,可以使用随机种子作为参数,并在函数中合理使用该随机种子,既可以保证随机性,也能限制随机的范围。例如,如果直接将待存入的抵押品的地址作为函数参数,那么该地址的随机范围过大,会不断导致回滚,此时将随机种子作为参数,并在函数中将种子取余数,得到抵押品数组的下标,可以有效避免无意义的调用。

About

锚定美元的去中心化算法稳定币

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published