轉(zhuǎn)載請(qǐng)注明來(lái)自94eth工具站
上文描述了MakerDao的整體結(jié)構(gòu),這里從用戶(hù)角度,給出普通借貸者,和清道夫(我不太知道用什么詞表述這種用戶(hù)比較準(zhǔn)確)如何跟各個(gè)智能合約交互來(lái)參與到MakerDao中的過(guò)程。有了清晰的主線,之后才好深入看每個(gè)合約的實(shí)現(xiàn)。
普通用戶(hù)貸款
舉個(gè)例子,如果你想抵押ETH,貸出Dai,需要以下步驟:
抵押物劃入合約
調(diào)用抵押物對(duì)應(yīng)的Join合約 join.sol,比如ETH,就需要調(diào)用ETH_JOIN合約,這個(gè)過(guò)程里最終會(huì)調(diào)用vat.slip函數(shù),在Vat合約里為參與者建立儲(chǔ)備金(儲(chǔ)備金是凈資產(chǎn),還沒(méi)有做任何抵押)。
vat就是MakerDao系統(tǒng)的總賬單合約,里面記錄了所有的借貸數(shù)據(jù)。用儲(chǔ)備金抵押dai代幣
用戶(hù)調(diào)用vat合約的frob接口,指定抵押物類(lèi)型,貸出Dai到自己指定的賬戶(hù)名下。將Dai轉(zhuǎn)換成erc20代幣
第二部借貸出來(lái)的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
用戶(hù)最后還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)。
清道夫用戶(hù)
清道夫用戶(hù)通過(guò)監(jiān)控MakerDao系統(tǒng)運(yùn)行,尋找資不抵債的借貸,從而尋找套利機(jī)會(huì)。他們主要通過(guò)發(fā)起清算和拍賣(mài)來(lái)逐出系統(tǒng)中資不抵債的用戶(hù),獲取他們的抵押。
清道夫一般需要走以下流程:
- 發(fā)起清算
當(dāng)發(fā)現(xiàn)系統(tǒng)中有資不抵債的抵押時(shí),調(diào)用cat.sol合約的bite函數(shù),cat合約會(huì)清算該用戶(hù)的未償貸款和抵押,然后調(diào)用flipper發(fā)起一個(gè)競(jìng)拍。 - flipper發(fā)起競(jìng)拍后時(shí),會(huì)標(biāo)定競(jìng)拍的抵押物,最低的起始價(jià)格和最高價(jià)格。
- 競(jìng)拍分兩個(gè)階段:每個(gè)用戶(hù)先從低價(jià)開(kāi)始往上出,如果出價(jià)已經(jīng)到達(dá)最高價(jià)格,則進(jìn)入第二階段,參與者保持該出價(jià),降低抵押物數(shù)量。
- 當(dāng)競(jìng)拍到期后,任何都可以調(diào)用flip.deal來(lái)結(jié)算一個(gè)競(jìng)拍,當(dāng)結(jié)算時(shí),抵押物交給獲勝者。
總結(jié)
在剛剛的介紹中,我們提到了vat,flip,cat等好幾個(gè)合約,搞不懂沒(méi)關(guān)系,先大概明白MakerDao的運(yùn)行過(guò)程即可。
有關(guān)MakerDao每個(gè)合約的實(shí)際內(nèi)容和作用,在之后的文章會(huì)一一闡述。