转载请注明来自94eth工具站
上文描述了MakerDao的整体结构,这里从用户角度,给出普通借贷者,和清道夫(我不太知道用什么词表述这种用户比较准确)如何跟各个智能合约交互来参与到MakerDao中的过程。有了清晰的主线,之后才好深入看每个合约的实现。
普通用户贷款
举个例子,如果你想抵押ETH,贷出Dai,需要以下步骤:
抵押物划入合约
调用抵押物对应的Join合约 join.sol,比如ETH,就需要调用ETH_JOIN合约,这个过程里最终会调用vat.slip函数,在Vat合约里为参与者建立储备金(储备金是净资产,还没有做任何抵押)。
vat就是MakerDao系统的总账单合约,里面记录了所有的借贷数据。用储备金抵押dai代币
用户调用vat合约的frob接口,指定抵押物类型,贷出Dai到自己指定的账户名下。将Dai转换成erc20代币
第二部借贷出来的Dai还不是ERC20标准代币,只是一个记账。如果要当ERC20代币使用,还需要调用Dai的Join合约,即DAI_JOIN合约的exit函数,将记账的Dai兑现为标准ERC20 Dai。归还Dai
用户最后还Dai时,需要先调用DAI_JOIN合约的join函数(就跟之前调用ETH_JOIN存ETH一样),将ERC20 Dai转成vat合约里的账单,然后调用vat.sol的frob接口,不同于借出的时候,这时候调用的dink和dart都是负数,清算自己的抵押和负债,将抵押物归还到储备金池中。注意这里会检查几个必须条件,比如剩下的负债不能太小。避免零碎的数字出现。
清道夫用户
清道夫用户通过监控MakerDao系统运行,寻找资不抵债的借贷,从而寻找套利机会。他们主要通过发起清算和拍卖来逐出系统中资不抵债的用户,获取他们的抵押。
清道夫一般需要走以下流程:
- 发起清算
当发现系统中有资不抵债的抵押时,调用cat.sol合约的bite函数,cat合约会清算该用户的未偿贷款和抵押,然后调用flipper发起一个竞拍。 - flipper发起竞拍后时,会标定竞拍的抵押物,最低的起始价格和最高价格。
- 竞拍分两个阶段:每个用户先从低价开始往上出,如果出价已经到达最高价格,则进入第二阶段,参与者保持该出价,降低抵押物数量。
- 当竞拍到期后,任何都可以调用flip.deal来结算一个竞拍,当结算时,抵押物交给获胜者。
总结
在刚刚的介绍中,我们提到了vat,flip,cat等好几个合约,搞不懂没关系,先大概明白MakerDao的运行过程即可。
有关MakerDao每个合约的实际内容和作用,在之后的文章会一一阐述。