如何实现抵押借贷功能?MakerDAO

  1. 接收用户的UDT,通过lock script(lock01)锁定用户的UDT
  2. 因为锁定用户的UDT,type script就只能是UTD的type script,
  3. lock01不能是普通的签名验证的script,要求任何人都可以调用,它还需要关联特定的type script
  4. output中的借贷cell会生成借贷的UDT,所以它也会占用type script
    大家有什么好的建议吗?
    刚开始接触,感觉要实现这样的功能,非常麻烦

第一步的时候生成两个 cell 就行了,一个是 lock01 管理的用户 UDT,一个是用户的债权 token。可以认为一个是 makerdao 的 cdt,一个是生成的 dai。

就是想实现类似MakerDAO
input cell:用户ETH的UDT,他的签名
output cell:
cell01{lock01,ETH UDT}
cell02{签名验证的lock+用户地址,DAI UDT}
因为DAI UDT是mint流程,需要它的type script与lock01配合
归还DAI时,相当于lock01需要type script的配置
感觉相互依赖死锁了

建议你把流程完整梳理一遍,“依赖锁死”的点也明确描述一下。

  1. 抵押(交易):
    1. 调用者:借款人
    2. input:用户的cToken,可以多个cell
    3. output:
      1. cell001{ lock_script:lock01,type script:cToken}
      2. cell002{ lock_script:验证借款人的签名,type script:DAI}
      3. cell003{ lock script:lock02,type script:CDP,type003}
    4. deps:
      1. deps001:cToken的价格
      2. deps002:cToken的抵押率
    5. 要求:
      1. lock001:设定任何人都可以调用,但要求与cell003一起使用
      2. lock002:任何人都可以调用,但要求与cell001一起使用
      3. type003:根据抵押信息,验证cell001,cell002,cell003的满足限制
  2. 还款(交易):
    1. 调用者:抵押交易的创建者,即借款人
    2. input:
      1. cell001{ lock_script:lock01,type script:cToken}
      2. cell003{ lock script:lock02,type script:CDP,type003}
      3. cell004{lock script:不限制,type script:DAI}
    3. output:
      1. cell005{lock script:借款人,type script:cToken}
      2. cell006{lock script:lock03(DAO账户),type script:DAI}:借贷手续费
    4. 要求
      1. cell001和cell003一起作为input
      2. cell004的DAI数量大于借贷的DAI
  3. 清算:
    1. 调用者:任何人
    2. input:
      1. cell001{ lock_script:lock01,type script:cToken}
      2. cell003{ lock script:lock02,type script:CDP,type003}
    3. output:
      1. cell007{lock script:lock03(DAO账户),type script:cToken}
      2. cell008{lock script:清算人,type script:cToken}:清算奖励,以一定比例获得抵押物
    4. deps:
      1. deps001:cToken的价格
      2. deps002:cToken的抵押率
    5. 要求
      1. cell001和cell003一起作为input
      2. 抵押物资产价值小于指定门限

问题:
lock01和lock02需要怎么实现?相互依赖了
type003是不是限制lock必须为lock02?
还有DAI的创建,必须确定存在type003才可以

你的抵押交易在 input 中必须存在特殊的 input cell,其 lock script 唯一决定了 DAI 的发行逻辑,否则 DAI 无法实现通过合约发行。例如:

  • 抵押(交易):
    • input:
      • 用户的cToken,可以多个cell
      • CDP_issue_cell { lock script: lock00, type script: null, data: total_issued_DAI }
    • output:
      • CDP_issue_cell { lock script: lock00, type script: null, data: total_issued_DAI }
      • cell001{ lock_script:lock01,type script:cToken, data: token_amount | CDP info}
      • cell002{ lock_script:借款人,type script:DAI}

lock00 的解锁逻辑:

  • 输出必须存在一个 CDP_issue_cell
  • total_issued_DAI += new issued DAI
  • 锁定的 cToken 数量比新增的 DAI 必须高于满足预定义的抵押率
  • 锁定的 cToken cell 必须包含相关的抵押率等信息