【项目学习】Timeswap:第一个完全去中心化的基于 AMM 的货币市场协议
总览
Timeswap 是世界上第一个完全去中心化的基于 AMM 的货币市场协议,无需预言机或清算人即可工作。 Timeswap 采用 3 变量来维持 AMM 的运作。它通过允许用户决定他们的风险状况并相应地为每笔借贷交易设置利率和抵押品,允许任何人为任何 ERC-20 代币创建货币市场。
核心公式
X × Y × Z = K
X:本金相关
Y:利率相关
Z:抵押率相关
K:固定值

举例说明,初始化一个为期 6 个月的 DAI-ETH 币对池,投入本金 10,000 DAI,年利率15% 以及抵押率(CDP)为167%。
- X = 10000 DAI
- Y / X = 0.15 / 31556926 (一年 31556926 秒)
- Y = 0.0000475
- Z / X = 1.67
- Z = 16700 DAI,假设建立池子时的 1 ETH 价格为 4000 DAI,则 Z = 4.175ETH
- K = X * Y * Z = 10000 * 0.0000475 * 4.175 = 1.98


四种原生代币
每个 pool 有四种原生代币:3个ERC20,1个ERC721
分别是保险代币、债券代币、流动性代币以及REC721抵押债务代币
债券代币(Bond Token)
债券代币代表到期后对资产中资产的确切索取权,包括借款人偿还的资产。
债券代币基本上是本金加上到期后欠贷方的利息。Bond 代币的所有者可以在到期日之后销毁它们,以提取与 Principal 池中完全相同数量的基础资产代币。
保险代币(Insurance Token)
保险代币持有人在到期后获得借款人违约的抵押品的索赔,其金额等于保险上的债券代币未实现资产的百分比。贷款人持有的保险。
接受者是贷入资金池并选择获得保险的贷方。只有当 Bond 代币无法从本金池中提取相同数量的资产时,保险代币才有助于保护贷方。当本金池中的资产少于贷方持有的债券代币总数时,就会发生这种情况。保险代币的所有者可以在到期日之后销毁它,以提取与保险代币数量相同的百分比。
抵押债务代币(Collateralized Token)
抵押债务代币包含有关要支付的债务和借款人锁定的抵押物的信息
接受者是借款人。抵押债务代币的所有者可以在到期日之前支付标的比例债务时将其销毁以提取锁定的比例抵押品。例如,有一个用户拥有一个池的抵押债务代币将于 2021 年 12 月 30 日到期用 2 WETH 作为抵押品锁定 300 DAI 的债务。如果用户在 2021 年 12 月 30 日之前偿还了 300 个 DAI 债务,则用户可以销毁他/她的抵押债务代币以提取锁定的 2 个 WETH 作为抵押。如果用户没有偿还 300 DAI 的债务,抵押的债务代币将失去偿还债务的功能,因此用户将永远无法提取抵押的抵押品。
流动性代币
流动性代币赋予代币持有者对现有流动性的索取权,即在贷方的索取权实现后,本金池中的资产和锁定在抵押池中的抵押品
接受者是向池中添加流动性的流动性提供者。到期后,他们可以销毁流动性代币以从池中提取流动性。
角色
贷方
贷方使用该协议来收取在固定期限内借出代币的利息。他们还通过池的配对代币获得保险,这为债券代币中未实现的资产提供了成比例的保险 这明确地让每个贷方控制他或她想要承担的违约风险与他或她将获得的利息奖励.
放贷公式:
(X + x) * (Y - y) * (Z - z) = K

借款
他们使用该协议借用具有固定利息值和固定期限设置的代币。他们将抵押品的股份锁定在他们认为高于 AMM 得出的最低抵押品的任何数量。锁定的抵押品在债务存续期内永远不会被清算。借款人必须在到期前偿还债务才能收回抵押品,否则,他们的抵押品将分配给贷方。
借贷公式:
(X - x) * (Y + y) * (Z + z) = K

流动性提供者
流动性提供者是池的做市商。他们将代币添加到池中并同时进行借贷交易。他们根据池的交易数量和规模在贷方和借方之间赚取差价。它们有助于增加流动性,以促进贷方和借方之间的交易。
(X + x) * (Y + y) * (Z + z) = K , (x/X = y/Y = z/Z)
架构
主要分为核心合约和外部合约两部分,通过数据结构 Native 进行交互。

相关文档
- Timeswap Whitepaper
- Timeswap V1 Core Product Specification
- Timeswap V1 Convenience Product Specification
- Timeswap Gitbook Documentation
- Code Walkthrough
- 什么是抵押债务头寸 (CDP)?
【项目学习】Timeswap:第一个完全去中心化的基于 AMM 的货币市场协议的更多相关文章
- 一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店
今天我们来编写一个完整的去中心化(区块链)应用(Dapps), 本文可以和编写智能合约结合起来看. 写在前面 阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么除此之 ...
- 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目技术对比(下)
在上篇文章中,我们主要从价值定位.技术层次架构.服务质量.去中心化程度,和经济激励机制五个方面分析了三个项目的不同.在这一篇文章中,我们将着重从区块链的架构设计.数据传输技术设计和数据存储技术设计三方 ...
- 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目异同
Filecoin,Storj 以及 PPIO 这三个存储公链的设计思路是不一样的,没有优劣之分,写这篇文章也并不是为了争论各项目的好坏对错.去中心化存储是一个长期商业赛道,不同团队在同一个赛道上往不同 ...
- 从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp
P90 .1-从零构建和部署去中心化投票App-01 P91 .2-从零构建和部署去中心化投票App-02 P92 .3-从零构建和部署去中心化投票App-03 参考博文:http://liyuech ...
- 去中心化预言机如何助力NGK DeFi 项目发展?
早在 2014 年前后,协议智能合约就已经出现了,最初协议很笨重,包含了许多不同的部分,每个部分都是一个单独的智能合约,你需要在区块链本身的协议中添加不同的智能合约,这需要几个月甚至几年的时间,而之后 ...
- NGK DeFi项目即将上线,打造去中心化闭环金融生态!
据最新官方消息称:NGK已于近日宣布将进军DeFi领域,NGK此次的DeFi的项目将会是一个去中心的交易平台,其最大的功能是进行数字货币的交换.在用户选择了需要支付的数字货币和想购买的数字货币后,系统 ...
- 谈互联网开放平台:“去中心化”大势所趋 zz
文/磐石之心 几天前与好友聊到众筹咖啡馆的事情,他向我讲述了一个非常具有特色的众筹咖啡馆案例.而这个案例也引发我对当前互联网开放.去中心和集权的一些思考,今天就简单写出来与大家分享. 一个无赚钱目的的 ...
- 为什么比特币和以太坊未必真得比EOS更去中心化?
在区块链行业里,有两派人一直在争论:一个是以比特币和以太坊为首的社群,另一个是以EOS为首的社群.这两群人一直在争论谁才是真正的未来,双方都认为自己这边更有未来.其中EOS抗争的重点就是100万TPS ...
- 去中心化存储的QoS是什么?
我的前面一篇文章讲到如何做去中化存储,文其中提到了QoS (Quality of Service),那么QoS是什么?为什么QoS那么重要?下面将详细描述. 什么是QoS? 提到QoS,就要先了解Qo ...
- 比特股-去中心化交易所, STEEM - 去中心化社区, EOS - 下一代智能合约
libsnark 是实现了 zkSNARK 模式的 C++ 库.zkSNARK 是一个证明/验证计算完整性的加密方法,也即零知识验证的算法, https://github.com/scipr-lab/ ...
随机推荐
- Java封装xml格式参数请求第三方接口
Java封装xml格式参数请求第三方接口 1.引用包 import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers ...
- SpringBoot配置启动页(首页)控制台打印项目访问入口url
一.SpringBootApplication 1 package com.reliable.yang; 2 3 /** 4 * @author Administrator 5 * @date 202 ...
- list集合中的实现类Vector
Vector: 它底层也是用数组来存数据对象的,但它是唯一一个线程安全的,线程安全也就意味着时间长,效率慢,如果是单一线程的话,建议不使用该实现类 add(E element): 将指定的元素追加到此 ...
- #并查集,线性筛#nssl 1470 X
分析 显然答案就是\(2^{连通块个数}-2\), 将每个数的质数所在的集合合并, 最后判断连通块个数即可(线性筛少了个等号改了半天QWQ) 代码 #include <cstdio> #i ...
- OpenHarmony父子组件双项同步使用:@Link装饰器
子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定. 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用. 概述 @Link装饰的变量与其父组件中的数 ...
- C# 字符串操作指南:长度、连接、插值、特殊字符和实用方法
字符串用于存储文本.一个字符串变量包含由双引号括起的字符集合 示例: // 创建一个string类型的变量并赋予一个值 string greeting = "Hello"; 如果需 ...
- nginx重新整理——————http请求的11个阶段中的precontent阶段[十六]
前言 简单介绍一下precontent阶段. 正文 介绍一下这个阶段的几个模块. ngx_http_try_files_module 模块. syntax : tryfiles file... uri ...
- spring boot yaml 配置[三]
前言 我们知道java 因为历史的原因,一直有一个配置地狱的痛点.那么如何解决掉它呢? spring boot 是一柄利器,但是呢,还是要配置. 看来配置的避免不了的了. 那么如何可以减轻这种痛苦呢? ...
- 初识大数据技术之Hadoop
先上一张图: 看到这张图,我脑子里出现的第一个东西就是:这货太像旅行商问题了 有限的输入与有限的输出,当输入大于一定数值时,输出趋向于无法计算.... 其实要我说啊,旅行商问题其实没必要管他,因为这个 ...
- Node 中的 Process 理解,有哪些常用方法?
一.是什么 process 对象是一个全局变量,提供了有关当前 Node.js进程的信息并对其进行控制,作为一个全局变量 我们都知道,进程计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础, ...