主页 > imtoken钱包下载2.0安卓版 > 以太坊DeFi中MakerDAO质押借贷Dai(CDP)详解
以太坊DeFi中MakerDAO质押借贷Dai(CDP)详解
概述
MakerDAO 是一个基于区块链的去中心化金融系统,提供稳定币 (Dai)、抵押贷款 (CDP) 和去中心化治理服务。
MakerDAO Collateralized Dai (CDP) 是在以太坊区块链上运行的智能合约。 它是 Dai 的核心组成部分,Dai 是一个稳定币系统,其目的是创建 Dai 以换取抵押品,然后由第三方保管,直到借出的 Dai 归还。
CDP会动态改变Dai的总量,在用户抵押资产时创建Dai,在用户使用Dai赎回资产时销毁相应的Dai。 这个过程是通过智能合约实现的。
本文主要分析CDP的实现原理。
贷款流程
CDP流程涉及到各种Token的转移和智能合约的调用,如下图所示。 (图中圆圈为Token,圆角矩形为智能合约及其实体)
CDP流程中的token转账流程
第 1 步:创建 CDP 并存储抵押品
用户先向Maker发送交易创建CDP,然后将ETH打包成为WETH,将WETH转换为PETH。 此时以太坊质押时间,CDP被创建,抵押的ETH已经存入CDP。
第 2 步:从 CDP 生成 Dai
CDP 持有者发送一笔交易,指定他们希望从 CDP 中产生的 Dai 数量,CDP 也会产生等量的债务以太坊质押时间,这将锁定抵押品,直到未偿还的债务还清。
第三步:债务偿还和稳定费
当用户想要赎回抵押资产时,需要偿还 CDP 中的债务以及这笔债务的稳定费。 稳定费只能以 MKR 支付。 当用户将应付的 Dai 和 MKR 支付给 CDP 时,CDP 中的债务将被清偿。
第四步:收回抵押资产并关闭CDP
偿还债务和稳定费后,CDP 持有人可以向 Maker 发送交易并取回所有抵押资产。
Token引入智能合约 Sai Tub智能合约
抵押 Dai (CDP) 系统。 CDP 是你抵押 PETH 后产生的 DAI 债务。 Maker DAO 的大部分操作都是在这个合约中完成的。
合约地址:0x448a5065aebb8e423f0896e6c5d525c040f59af3
赛塔智能合约
可用于清偿债务并从中获利。
合约地址: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
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);
}
参考
官方网站:
质押戴:
白皮书(中文):
合约代码:
MakerDAO 代币解释:DAI、WETH、PETH、SIN、MKR。 第1部分:
开发者文档: