一种基于承诺交易的 NFT 担保借贷合约 #7
editor-Ajian
started this conversation in
提议
Replies: 1 comment
-
|
这种设计下,看上去目前还无法构建免信任的借贷池,只能设计出撮合式的订单簿借贷。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
前言
大概在三个星期前,我完成了这里所述的设计。我认为,推理出其中的内容实际上只需要对比特币合约式编程的基本理解,所以,我毫不怀疑之前曾经有人发明过相同的东西,以及,其他人无需阅读本提议,也能独立发明出同样的东西。
需要提醒的是,本提议使用 “NFT 担保借贷” 作为演示的案例,但显然,同样的设计也适用于别的担保物和借贷标的,比如 BTC 和稳定币。
假定 Alice 拥有一个 NFT(表现为一个 UTXO,但依据某种协议(比如 RGB),这个 NFT 可以转移);Alice 希望获得现金(在这里是 btc),但不希望卖出 NFT。那么,有富余资金的 Bob 就可以向 Alice 提供这样的 NFT 担保借贷合约。
一. 质押的实现
保证 Bob 的利益需要停止 Alice 对该 NFT 的排他性控制权,否则,Bob 就没有任何能力约束 Alice 。
在这里,我们让 Alice 将该 NFT 存放到 Alice -Bob 的 2-of-2 多签名输出中,从而锁定该 NFT。
注意,生成这个 2-of-2 多签名输出的操作应该在后续所有承诺交易都签名完成后再执行;同时,这笔交易还应该把 Alice 借得的 btc 支付给她。
二. 一次性还本付息的到期可赎回条款
假定 Alice 借到了 M,并且跟 Bob 约定了借贷的利息率和时长(我们用利息函数
f(i, t)来描述),那么我们只需两笔承诺交易,就可以保证 Alice 到期还本付息就一定能拿回自己的 NFT;如果到期不能还本付息,Bob 就可以拿走 NFT。Alice Bob 双方需要以合适的方式签名以下两笔承诺交易:M * f(i, T),另一个输出将 NFT 归还给 Alice 。Bob 需要使用SIGHASH_ALL_ANYONECANPAY签名这笔交易并交给Alice 。ANYONECANPAY签名了这笔交易,这就意味着,其他人(包括Alice )可以为之增加输入;当所增加的输入的面额足够大,足以给Bob 还本付息时,这笔交易就会是有效的。M * f(i, T)),随时都可以拿回自己的 NFT;但是,这个数额实际上是根据一定的利率和一定的期限计算出来的,也即是说,它假设的是 Alice 会到这个期限再还款,如果是提前还款,Alice 将联系 Bob 商议减免利息。T + t,即在T + t之前,这笔交易是无法动用的。Alice Bob 各自保管对自己有利的承诺交易,就可以保证:(1)到期之后,只要 Alice 能还本付息,就一定能拿回 NFT;(2)如果到期之后 Alice 没有还本付息,Bob 在等待一段时间后可以获得 NFT,作为对自己的补偿。
三. 多次付息的安排
只需借用第二节中的结构就可以实现多次付息的安排。假设 Alice、Bob 双方约定分三次还款,那就需要签名三组 付息交易-过期交易:
四. 动态清算
在担保借贷协议的设计中,动态清算是极为关键的一环。在担保借贷协议中,担保品的价格会不断改变;在担保品的价格快速下跌的时候,其市场价值可能跌至低于债务的价值,或低于债务的某个比值;这时候,这一笔借贷就成了 “担保不足的借贷”,即担保物的价值将不足以约束(或者说吸引)贷款者还款。为了保护放贷者的利益,必须有一定的动态清算安排 —— 在某种情况下,担保品被转移给放贷者。
缺乏动态清算能力的担保借贷协议并不是无法成立的,只是,可以应用它的市场将大大受限 —— 只有担保品价值较为稳定、担保品价值远高于债务值、借贷周期较短的担保借贷才能成立。而如果有动态清算能力,担保品的门槛将降低,市场将扩大。
与人们的直觉相反的是,动态清算的能力并不需要我们持续为担保借贷合约提供担保品的价格并以此价格(或者该价格与债务的比值)为条件执行合约。因为:
事实证明,只需一种机制,即足以约束动态清算的程序,并让输入价格信息成为不必要的:在 Bob 启动清算程序之后,Alice 总能优先行动;并且,只要 Alice 能还清一定的款项,就可以拿走 NFT。
换言之,我们可以将 “动态清算” 理解为一种 “催促还款” 安排:如果 Alice 不能及时还款,Bob 就可以拿走 NFT;但是,Alice 所需归还的款项并不是上文所说的
M * f(i, T) - 已归还款项(如果有多次还款的安排的话);而是[M * f(i, T) - 已归还款项] * f'(i', T') - A,这里的f'(i', T')表示折现函数,它由预期的折现率和剩余债务时间决定;A 是一个惩罚因子;也就是说,Alice 要归还的是自己的到期债务值的折现值,再减免一部分金额。这种机制即足以实现我们想要的特性:(1)如果担保品的价格稳定,Bob 将不可能通过清算机制获得担保品,即不能诈骗 Alice;(2)如果担保品的价格下跌,Bob 可以启动清算机制,要么 Alice 清偿债务,要么 Bob 得到担保品,无论哪种情况,Bob 都得到了保护;(3)折现函数保护了 Alice,当 Bob 要求她清偿债务时,她只需要支付折现值,而不是债务的到期值;(4)惩罚因子构成了 Bob 启动清算的成本;在 Bob 单纯只是想要催促 Alice 还款时,惩罚因子是他违反合约的代价;因此,只有在担保品真的可能不足以覆盖债务时,Bob 才会动用清算。
Alice 和 Bob 可以通过一组承诺签名来实现这样的机制;这组承诺签名的基本单元是这样的:
T2 + t),意思是在一定的时间之后,Alice 就可以直接拿走 NFT。Alice 要签名这样的承诺交易并交给 Bob。T2)之后广播这笔交易:这样只会让 Alice 可以直接拿走 NFT,而不能起到强迫 Alice 多付利息的目的。SIGHASH_ALL_ANYONECANPAY要签名这样的交易并交给 Alice。[M * f(i, T) - 已归还款项] * f'(i', T - T1) - A,也即,以 T1 为时间点,计算 Alice 的债务的折现值。t,由 Alice 签名并交给 Bob。t的时间窗口来筹备还款。如果 Alice 不能及时还款,Bob 就可以收走 NFT。如此,Alice 和 Bob 各自获得了自己想要的保证:(1)当 Bob 适时广播触发清算交易时,Alice 总是可以在时间窗口
t内通过偿还自己的债务的折现值来拿回自己的担保品 NFT;(2)如果 Alice 无法及时还款,Bob 就可以拿走担保品 NFT;(3)Bob 总是只能广播定价合适的触发清算交易,如果广播更老旧的触发清算交易,Alice 并不会多付利息,而是可以把 NFT 拿走。还需注意的是:
t不应太小,否则便有失公平;t越小,Bob 利用清算机制夺走担保品的激励就越大;这里的t跟闪电通道的争议期时间窗口一样,要求贷款方每t段时间至少上线一次;五. 提前还款及其它
如上所述,动态清算机制也可以认为是 Bob 发起的一种要求提前还款的操作。但是,Alice 也可以主动跟 Bob 商议提前还款并减免利息。在这种情况下,只需双方合作,就可以构造合适的交易,归还欠款并分配担保品 NFT。
在控制 NFT 的输出中使用更复杂的脚本,将允许 Alice 使用链上比特币以外的方式还款,其原理跟 HTLC(哈希时间锁合约)一致,此处不述。
六. 总结
随着越来越多的资产发行协议解决消耗链上资源来获得可编程性的理论问题,其它种类和特性的资产几乎必然在比特币网络上出现并进入不同的应用场景。本提议的设计将为值得金融化的资产提供帮帮助。
本提议也证明了,比特币协议并不缺乏编程能力,尤其不缺乏支持金融应用的编程能力。 最基本的模块 —— 承诺交易、时间锁、SIGHASH —— 就蕴藏了组合出复杂应用的可能性,所需的只是对这些模块的了解,以及对现实生活的合约的认识。这样的可能性,仍未被完全开发。
请给我反馈以及指出我在这里犯的错误。
参考文献:
[1] https://www.btcstudy.org/2021/11/09/bitcoin-signature-types-sighash/
Beta Was this translation helpful? Give feedback.
All reactions