基于订单簿的借贷系统
- 这只是一个想法
- 支持借贷,就能够对任意代币进行做多/做空,是很基础的金融手段。
场景
- 在中心化交易所里,支持杠杆交易,可以做多/做空各种代币。
- 在DeFi中,只有主流的代币支持做多/做空
- euler虽然支持任意代币,但长尾资产的交易深度不够,非常容易被恶意操控价格
- 市场上还没有其他的协议能够支持任意代币的借贷。
目标
- 不限制代币,没有白名单;支持任意数字代币的借贷(新代币、长尾代币)
- 没有价格波动的清算,只有到期清算
- 利息固定,借款双方更方便计算收益
流程
- 出借人:借出token的人,可以获得利息收益
- 只需要链下签名,一般情况下,无需直接与合约交互,挂单无需手续费
- 借款人:想要借token的人,需要抵押指定的资产,到期需要还款并支付利息
sequenceDiagram
participant a as 出借人
participant b as 借款人
participant c as 平台(前段/数据库)
participant d as 智能合约
loop 出借
a ->> c: 创建出借单:出借的代币/金额/利率/时间/抵押物等,签名
c ->> c: 存储到数据库
end
loop 借款
b ->> c: 浏览/查询
c -->> b:
b ->> d: 借款,信息上链(拿着出借单找智能合约撮合)
d ->> d: 确认订单ID未使用
d ->> d: 标记订单ID
d ->> d: 确认借款时间
d ->> d: 验证签名
d ->> d: 创建借款单
d ->> b: 转移资产(抵押物)
b -->> d:
d ->> a: 转移资产(出借的代币)
a ->> b: 代币
end
loop 还款
b ->> d: 还款
d ->> d: 删除借款单
d ->> b: 转移代币(借款的代币)
b ->> a: 转移代币
a ->> a: 代币和对应利息
d ->> b: 解锁抵押物
b ->> b: 取回抵押物
end
loop 清算
a ->> d: 清算
d ->> d: 借款已经超时
d ->> d: 删除借款单
d ->> a: 抵押物转给出借人
a ->> a: 损失代币,得到抵押物
end
角色
出借人
- 可以自己指定要借出的token
- 需要approve给撮合合约
- 同一份资产,允许多次挂单,不同的数量、利息、到期事件等
- 出借人只需要挂单并签名,挂单是放到平台的数据库里的
- 默认出借人不需要支付任何手续费。
- Token参数:
- id
- 代币类型:合约地址
- 数量
- 利息代币类型:序号
- 借出的代币
- 抵押的代币
- eth
- dai
- usdt
- 年利息:数量
- 时间:最短时间,最长时间
- 抵押物资产类型和数量
- 默认是WETH
- 可以指定其他类型代币
- 可以是NFT
- 限定借款人:地址为空表示不限制
- 预言机:为空表示不需要
- NFT参数:
- id
- NFT类型
- 利息代币类型:序号
- 抵押的代币
- eth
- dai
- usdt
- 年利息:数量
- 时间:最短时间,最长时间
- 抵押物资产类型和数量
- 限定借款人
- 出借人可以是合约
- 合约实现特定的接口,用于校验挂单的合法性(代替签名校验)
- 返回订单id
借款人
- 从平台上,选择想要借的资产,数量
- 参数:
- id
- 选择要借贷的时间
- 大于最小时间
- 小于最大时间
- 小于1年
- 要使用的存储空间id
- 空间复用,节省成本
- 将出借人的挂单和自己选项提交上链,通过合约完成撮合
智能合约
- 撮合双方的交易
- 代持抵押物
- 记录挂单完成状态
- 偿还流程处理
- 超时清算处理
- 一键卖出(做空)
平台(链下部分)
- 展示:显示所有的挂单
- 查询:可以根据需要,选择/过滤自己需要的挂单
- 存储服务:存储用户提交的挂单
模式
- maker
- 由出借人挂单,借款人上链
- taker
- 由借款人提出需求,出借人同意并上链
扩展
资金池
- 用智能合约(子合约)实现一个资金池,合约作为出借方
- 资金池作为一个出借账号,它可以基于预言机
- 用户只需要将资金放入借贷池,所有人平分收益
- 借款人通过借贷池创建一个虚拟挂单
- 由于是固定利息,所以利息会偏高,允许出借用户主动承接借条(降低利息)
- 出借方为借款人偿还掉资金
- 出借方享受后续的利息
- 出借方承担借款人违约的风险
- 出借方要的利息必须低于合约的利息
- 借款人到期赎回时,按默认的利息支付
- 如果没有人承接借条,利息归智能合约
- 如果有人承接借条,根据新的利息,返还多余的利息,其他的本金和利息转给出借人
- 实际出借人提供了更低的利息的资金,所以多的利息需要返还给借款人
- 遗留问题:
- 如何吸引用户将资金放到池子里?
- 如何解决多个出借方对同一笔借款的承接问题?
- 用户将资产放入池子
- A借100U,时间3个天,利息为10%,借条上出借人为池子
- 第二天,B愿意8%的利息出借,(100U+1天的10%利息)还给池子,借条的出借人改为B
- 3天到期,A需要偿还的利息为1天的10%+2天的8%
- 池子收到的利息为1天的10%
- B收到的利息为2天的8%
- 资金池不足,资金提供者如何取回资产;提供更多资金,如何计算份额
- 计算当前贷出去的资金和应收利息是多少
- 根据资金可占用份额,给与对应的cToken
可能存在的问题
- EthLend本身就是基于P2P的方式
- 流动性不足,撮合有难度
- 用户抵押的资产没有利用起来,资金利用率低
- 将其放到Compound/Aave产生收益
- 需要和其他DEX组合,方便一键借贷后与DEX实现买卖,从而实现杠杆交易