轉(zhuǎn)載請(qǐng)注明來自94eth工具站
上文描述了MakerDao的整體結(jié)構(gòu)险污,這里從用戶角度姻灶,給出普通借貸者谎仲,和清道夫(我不太知道用什么詞表述這種用戶比較準(zhǔn)確)如何跟各個(gè)智能合約交互來參與到MakerDao中的過程幻梯。有了清晰的主線戳寸,之后才好深入看每個(gè)合約的實(shí)現(xiàn)呈驶。
普通用戶貸款
舉個(gè)例子,如果你想抵押ETH疫鹊,貸出Dai袖瞻,需要以下步驟:
抵押物劃入合約
調(diào)用抵押物對(duì)應(yīng)的Join合約 join.sol,比如ETH拆吆,就需要調(diào)用ETH_JOIN合約聋迎,這個(gè)過程里最終會(huì)調(diào)用vat.slip函數(shù),在Vat合約里為參與者建立儲(chǔ)備金(儲(chǔ)備金是凈資產(chǎn),還沒有做任何抵押)。
vat就是MakerDao系統(tǒng)的總賬單合約伦糯,里面記錄了所有的借貸數(shù)據(jù)酗洒。用儲(chǔ)備金抵押dai代幣
用戶調(diào)用vat合約的frob接口,指定抵押物類型九秀,貸出Dai到自己指定的賬戶名下。將Dai轉(zhuǎn)換成erc20代幣
第二部借貸出來的Dai還不是ERC20標(biāo)準(zhǔn)代幣,只是一個(gè)記賬伟葫。如果要當(dāng)ERC20代幣使用,還需要調(diào)用Dai的Join合約院促,即DAI_JOIN合約的exit函數(shù)筏养,將記賬的Dai兌現(xiàn)為標(biāo)準(zhǔn)ERC20 Dai。歸還Dai
用戶最后還Dai時(shí)一疯,需要先調(diào)用DAI_JOIN合約的join函數(shù)(就跟之前調(diào)用ETH_JOIN存ETH一樣)撼玄,將ERC20 Dai轉(zhuǎn)成vat合約里的賬單,然后調(diào)用vat.sol的frob接口墩邀,不同于借出的時(shí)候掌猛,這時(shí)候調(diào)用的dink和dart都是負(fù)數(shù),清算自己的抵押和負(fù)債,將抵押物歸還到儲(chǔ)備金池中荔茬。注意這里會(huì)檢查幾個(gè)必須條件废膘,比如剩下的負(fù)債不能太小。避免零碎的數(shù)字出現(xiàn)慕蔚。
清道夫用戶
清道夫用戶通過監(jiān)控MakerDao系統(tǒng)運(yùn)行丐黄,尋找資不抵債的借貸,從而尋找套利機(jī)會(huì)孔飒。他們主要通過發(fā)起清算和拍賣來逐出系統(tǒng)中資不抵債的用戶灌闺,獲取他們的抵押。
清道夫一般需要走以下流程:
- 發(fā)起清算
當(dāng)發(fā)現(xiàn)系統(tǒng)中有資不抵債的抵押時(shí)坏瞄,調(diào)用cat.sol合約的bite函數(shù)桂对,cat合約會(huì)清算該用戶的未償貸款和抵押,然后調(diào)用flipper發(fā)起一個(gè)競(jìng)拍鸠匀。 - flipper發(fā)起競(jìng)拍后時(shí)蕉斜,會(huì)標(biāo)定競(jìng)拍的抵押物,最低的起始價(jià)格和最高價(jià)格缀棍。
- 競(jìng)拍分兩個(gè)階段:每個(gè)用戶先從低價(jià)開始往上出宅此,如果出價(jià)已經(jīng)到達(dá)最高價(jià)格,則進(jìn)入第二階段爬范,參與者保持該出價(jià)父腕,降低抵押物數(shù)量。
- 當(dāng)競(jìng)拍到期后坦敌,任何都可以調(diào)用flip.deal來結(jié)算一個(gè)競(jìng)拍侣诵,當(dāng)結(jié)算時(shí),抵押物交給獲勝者狱窘。
總結(jié)
在剛剛的介紹中杜顺,我們提到了vat,flip蘸炸,cat等好幾個(gè)合約躬络,搞不懂沒關(guān)系,先大概明白MakerDao的運(yùn)行過程即可搭儒。
有關(guān)MakerDao每個(gè)合約的實(shí)際內(nèi)容和作用穷当,在之后的文章會(huì)一一闡述。