美文网首页区块链研习社
以太坊DeFi之MakerDAO质押借Dai(CDP)详解

以太坊DeFi之MakerDAO质押借Dai(CDP)详解

作者: 六天天天向上 | 来源:发表于2019-10-12 18:18 被阅读0次

    概述

    MakerDAO是一个去中心化的基于区块链的金融系统,提供稳定币(Dai)、抵押贷款(CDP)和去中心化治理服务。
    MakerDAO质押借Dai(CDP)是在以太坊区块链上运行的智能合约。它是稳定币系统Dai的核心组成部分,其目的是创建Dai来换取抵押品,然后将其保留在托管中,直到归还借入的Dai为止。
    CDP会动态改变Dai的总量,在用户抵押资产时创建Dai,当用户使用Dai赎回资产时销毁对应的Dai,这个过程通过智能合约实现。
    本文主要分析CDP的实现原理。

    借贷流程

    CDP过程涉及多种Token的流转与智能合约的调用,如下图所示。(图中圆形为Token,圆角矩形为智能合约及其实体)

    CDP过程中Token流转过程

    第一步:创建CDP并存储抵押物

    用户首先发送一个交易到 Maker 创建CDP,然后打包ETH成为WETH,将WETH转换为PETH,此时CDP创建完成,抵押的ETH已经存入到CDP中。

    第二步:从CDP中生成 Dai

    CDP持有者发送一个交易并明细想要从CDP中生成Dai的数量,同时CDP也会产生同等数量的债务,这笔债务会锁定抵押物直到未偿付的债务被付清。

    第三步:偿还债务和稳定费用

    当用户希望赎回抵押资产的时候,他们需要偿还CDP中的债务以及这个债务的稳定费用。稳定费 用只能用MKR支付。当用户将应付的Dai和MKR支付给CDP后,CDP中的债务就会偿清。

    第四步:拿回抵押资产并关闭CDP

    当债务和稳定费用偿还后,CDP持有者可以发送一个交易给Maker并拿回所有的抵押资产。

    Token介绍

    • WETH是ETH的1对1映射,是一种符合ERC-20标准的Token,可与以太币互换。代币地址:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
    • PETH是Maker DAO中ETH池产生的一种Token,当用户把WETH存入Maker DAO时,会得到对应的PETH,但PETH与WETH不是1对1映射的,是根据一定的汇率计算出来的。代币地址:0xf53ad2c6851052a81b42133467480961b2321c09
    • DAI,Maker DAO的稳定币,价格接近1$,使用CDP借贷得到的就是DAI。代币地址:0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359
    • SIN,代表已清算的债务,价值等于1DAI,在债务清算过程中使用。代币地址:0x79f6d0f646706e1261acf0b93dcb864f357d4680
    • MKR,用于偿还债务时支付佣金的代币,通过wipe方法,地址:0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2

    智能合约

    Sai Tub智能合约

    抵押借Dai(CDP)系统。CDP 是你在 PETH 抵押后生成的 DAI 的债务。Maker DAO 的大多数操作都是在该合约中完成。

    合约地址:0x448a5065aebb8e423f0896e6c5d525c040f59af3

    Sai Tap智能合约

    可以用于清算债务并从中产生利润。

    合约地址:0xbda109309f9fafa6dd6a9cb9f1df4085b27ee8ef

    Maker DAO中的的智能合约有很多方法,下表对主要部分进行了分类:

    智能合约方法分类

    核心代码

    1、创建一个CDP

    function open() public note returns (bytes32 cup) {
    
            require(!off);
            // cup是指一个CDP借贷,借贷总数+1
            cupi = add(cupi, 1);
    
            cup = bytes32(cupi);
            // 绑定cup的创建者,lad是指所有者
            cups[cup].lad = msg.sender;
    
            LogNewCup(msg.sender, cup);
    
        }
    

    2、锁定PETH到CDP中

    function lock(bytes32 cup, uint wad) public note {
    
            require(!off);
            // 将wad数量的PETH累加到cup中,ink为抵押品
            cups[cup].ink = add(cups[cup].ink, wad);
            // skr是抵押品抽象出来的一种Token
            skr.pull(msg.sender, wad);
    
            require(cups[cup].ink == 0 || cups[cup].ink > 0.005 ether);
    
        }
    

    3、向用户释放DAI,通过增加art

    function draw(bytes32 cup, uint wad) public note {
    
            require(!off);
    
            require(msg.sender == cups[cup].lad);
    
            require(rdiv(wad, chi()) > 0);
            // art是一个抵押的债务
            cups[cup].art = add(cups[cup].art, rdiv(wad, chi()));
            // rum是所有CDP art的总和
            rum = add(rum, rdiv(wad, chi()));
    
            cups[cup].ire = add(cups[cup].ire, rdiv(wad, rhi()));
            // 发行新的DAI,并发送给债权人
            sai.mint(cups[cup].lad, wad);
    
            require(safe(cup));
    
            require(sai.totalSupply() <= cap);
    
        }
    

    参考

    官网:https://makerdao.com

    质押借Dai:https://cdp-cn.makerdao.com/

    白皮书(中文):https://makerdao.com/whitepaper/Dai-Whitepaper-Dec17-zh.pdf

    合约代码:https://github.com/makerdao/sai/tree/master/src

    MakerDAO Tokens Explained: DAI, WETH, PETH, SIN, MKR. Part 1:https://medium.com/coinmonks/makerdao-tokens-explained-dai-weth-peth-sin-mkr-part-1-a46a0f687d5e

    开发者文档:https://github.com/makerdao/sai/blob/master/DEVELOPING.md

    相关文章

      网友评论

        本文标题:以太坊DeFi之MakerDAO质押借Dai(CDP)详解

        本文链接:https://www.haomeiwen.com/subject/alkcmctx.html