BAC:Code Review 回顾:算法稳定币 Basis

2021年1月6日晚上9点,我们组织大家一起review了算法稳定币中的Basis,视频回顾在这里:https://www.bilibili.com/video/BV1bK4y157aR/,非常感谢菠菜的分享。

目前的稳定币一共分为三种:

锚定法币,比如USDT和USDC,也包括交易所发行的稳定币,例如BUSD、HUSD等。

链上资产抵押型,比如MakerDAO的DAI和Synthetix的sUSD。

算法稳定币,比如AMPL、ESD、Frax,还有今天要说的Basis。

Paradigm为审计DAO Code4rena提供600万美元代币购买资金:金色财经报道,加密风投公司Paradigm正在资助Code4rena DAO,该DAO通过600万美元的代币购买为寻找漏洞的独立审计人员提供激励。

据悉,Code4rena于去年成立,致力于通过众包任务并将人员与他们独特的专业领域相匹配来解决困扰传统审计模式的低效率问题。目前,DAO已经有3500名审计员(在平台上被称为“监督员”)参与了217次审计。Code4rena曾与OpenSea、Blur、zkSync、Aave、Trader Joe、Sushi和Chainlink等业内知名公司合作。[2023/3/17 13:09:04]

算法稳定币经历了几个阶段,basis是一个很新的项目,采用了三币模型。

Basis机制

Basis有三个币:BAC、BAS、BAB,三者相当于货币,股票和债券。可以将Basis理解为一个央行,BAC是央行发行的货币;BAS是央行的股东持有的股票,需要承担系统风险,也获取系统的收益;BAB是债券,相当于央行的债券。这3个都是erc20token,BAB目前没有日期限制,只要在合适的价格就可以兑付。

YouSwap已与9月1日正式上线行情平台Coincodex:据官方消息,YouSwap正式上线行情平台Coincodex,Coincodex是用于加密货币市场信息跟踪的行情平台,覆盖6,000多种虚拟货币数据、历史图表以及400多家交易所数据。

YouSwap是部署在ETH、HECO、BSC上的多链去中心化交易所,所有的交易都在链上进行,YouSwap已上线多重挖矿方式:流动性挖矿,交易挖矿,NFT DAO池锁仓挖矿和邀请挖矿。

截至9月1日10:00,YouSwap累计交易总额达130,088,518 USDT,TVL达1.35亿美金,累计挖矿总产值2,132,912USDT。[2021/9/1 22:51:28]

ConsenSysCodefi推出Filecoin市场应用程序以及基于Ren的以太坊桥接功能:由ConsenSys推出的、支持机构级以太坊2.0Staking质押服务的平台Consen SysCodefi宣布将于本月通过市场应用程序Filecoin Storage以及以太坊桥接服务FilecoinDeFi Bridge帮助去中心化存储项目Filecoin启动主网。根据公告显示,ConsenSysCodefi增加对Filecoin的支持,并通过旗下专注于提供DeFi相关的代币化合规产品的Activate平台帮助Filecoin启动网络。Filecoin主网将于区块148,888高度启动,预计将在10月15日左右启动。ConsenSys Codefi Activate将提供Filecoin Storage以及FilecoinDeFi Bridge两种产品,旨在为Filecoin主网的早期市场动态带来必要的可用性。Filecoin Storage为Filecoin矿工市场,将帮助矿工提供买卖的最佳价格。FilecoinDeFi Bridge将帮助桥接Filecoin代币FIL转化为基于以太坊网络的ERC20FIL代币,同时该桥接服务将去中心化跨链解决方案RenProtocol提供支持。[2020/10/2]

BAC价格调节机制就是一个市场供需的调节机制。

动态 | VScode上线支持Motoko语言的Dfinity插件:据AnchorDAO消息,Visual Studio Code上线首个支持Motoko语言的Dfinity插件,VScode搜索插件 Dfinity 即可安装。去中心化计算平台Dfinity于2018年完成一轮a16z领投的1.02亿美金融资,Motoko是Dfinity的智能合约语言,该语言可以与WebAssembly模块连接。[2019/12/12]

当BAC价格少于1美元,需要减少BAC流通,让BAC的价格自然上升到1美元

BAC价格少于1美元,用户可以用申购债券BAB,方式是销毁BAC,得到BAB

BAB价格=BAC价格的平方,因为BAC价格小于1,所以平方后的BAB的价格会更低

未来可以用一个BAB换回一个BAC

区块链创业公司Bloq首席执行官重启Segwit2x Code工作:此前曾宣布SegWit2x已经失败的区块链创业公司Bloq首席执行官Jeff Garzik又回来了,据悉他正在重新启动Segwit2x Code工作,但是他承认自己也不确定这项工作是否会取得成功。[2018/1/5]

当BAC价格超过1美元,需要增加BAC流通,让BAC的价格自然下降到1美元

目前的阈值是当BAC>1.05时,可以触发系统增发BAC

增发的BAC会发给持有BAB和BAS的用户

优先还债,所以先给持有BAB的用户,方式是销毁BAB,得到BAC

剩下的BAC给BAS持有人,如果没有剩余,则不给BAS持有人分配

BAS相当于股东,只有锁定到boardroom合约的BAS才能获得这部分收益

代码解读

源码:https://github.com/Basis-Cash/basiscash-protocol

treasury.sol

合约中主要的方法包括:

setFund:修改社区发展基金接收地址?

setFundAllocationRate:修改社区发展基金从BAC增发中接收的比率?

getBondOraclePrice:通过预言机获取Uniswap上BAB的价格?

getSeigniorageOraclePrice:通过预言机获取Uniswap上BAC的价格

bugBonds:购买债券,targetPrice参数是给前端进行校验的,只有当BAC小于1美元才能执行

redeemBonds:赎回债券,BAC价格要大于1.05美元才能执行

allocateSeigniorage:分配系统收入

价格小于1.05不执行,大于1.05才计算发多少钱

需要在一个epoch开始后才能执行,代码中的checkEpoch是1个modifier,用来检查这个条件

计算增发量,并增发

uint256?seigniorage?=?cashSupply.mul(percentage).div(1e18);?

IBasisAsset(cash).mint(address(this),?seigniorage);

每次增发的总量的2%会进入到CommunityDevelopmentFund

uint256?fundReserve?=?seigniorage.mul(fundAllocationRate).div(100);

IERC20(cash).safeApprove(fund,?fundReserve);

ISimpleERCFund(fund).deposit(...)

发给债券持有人

uint256?treasuryReserve?=?...;

accumulatedSeigniorage?=?accumulatedSeigniorage.add(treasuryReserve);

emit?TreasuryFunded(now,?treasuryReserve);

给股票持有人,也就是给boardroom

IBoardroom(boardroom).allocateSeigniorage(boardroomReserve);

Boardroom.sol

Boardroom相当于董事会,是Basis股份的持有者。合约的主要方法有:

allocateSeigniorage:计算可以分配多少钱?

claimReward:取钱操作

Timelock.sol

时间锁是治理体系不可或缺的一部分,通过Timelock限制超级用户对系统参数的修改,使普通用户有足够的时间进行决策,这里的Timelock,参数需要等待至少2天才能生效。

uint256?public?constant?MINIMUM_DELAY?=?2?days;uint256?public?constant?GRACE_PERIOD?=?14?days;uint256?public?constant?MAXIMUM_DELAY?=?30?days;

还有个巧妙的onlyOneBlock,限制1个块中只能有1个操作者,防止多次调用。

_status?=?true;_status?=?true;

总结

Basis的代码很巧妙,化繁为简,也很整洁,通过3种token的互相转化,保持价格稳定。AMPL的供应量是自动调整的,而Basis的token供应调整是通过激励用户的投机行为,让用户主动参与的。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:0ms0-1:596ms