如何让Nervos DAO的资产流动起来?

目标
在DAO质押的时候,还能够拥有流动性的资产(既有质押的收益,又有流动性的UDT可以进行其他操作)
方式
创建一个新的UDT,用于表示Nervos DAO中锁定的CKB数量(不考虑收益情况)
这种UDT可以叫做dCKB,它与其他的UDT类似,转账等操作都没有任何限制。
所以1dCKB的价值略大于CKB
用户要取回质押的CKB时,销毁等量的dCKB,就可以取回CKB+收益

默认的方式:https://mp.weixin.qq.com/s/P4KIzRom6-rbfTe3ZOlB5A

Input1: Cell: {
            capacity: 10000
            lock: User
            type: null
            data: null
        } 
Output1: Cell: {
            capacity: 10000
            lock: User
            type: Nervos DAO
            data: 0x0000000000000000
        }

新的方式:

Input: Cell: {
            capacity: 10000
            lock: User
            type: null
            data: null
        } 
Output1: Cell: {
            capacity: 10000
            lock: 特殊的lock
            type: Nervos DAO
            data: 0x0000000000000000
        }
Output2: Cell: {
            capacity: 150
            lock: User
            type: DAO Info
            data: 10000
        }
Output3: Cell: {
            capacity: 150
            lock: User
            type: dCKB(UDT)
            data: 10000
        }

大家可以发现,新的方式比默认的复杂了很多,这就是为了流动性引入的。
Output1和Output2的lock相同,它的解锁不需要任何签名,仅仅要求存在type为“DAO Info”的cell,其他的逻辑交给“DAO Info”处理。
下面的流程涉及到多个script,多个script之间需要相互信任(可以通过配置组等方式规避循环依赖问题)
流程1:质押CKB流程

  1. “DAO Info”要求output1的lock为“特殊的lock”
  2. “DAO Info”要求output1的type为"Nervos DAO"
  3. “DAO Info”要求data中保存的是要铸造的dCKB数量
  4. “DAO Info”要求dCKB增加的数量等于CKB锁定数量
  5. “DAO Info”要求"Nervos DAO"处于存款流程
  6. "dCKB"为自定义的UDT,它的args为DAO Info
  7. “dCKB"要求output中存在type为"DAO Info”(铸造流程)
  8. “Nervos DAO”:验证对应的流程

流程2:取款阶段1

Input1: Cell: {
            capacity: 10000
            lock: 特殊的lock
            type: Nervos DAO
            data: 0x0000000000000000
        }
Input2: Cell: {
            capacity: 150
            lock: 特殊的lock
            type: DAO Info
            data: Owner
        }
Input3: Cell: {
            capacity: 150
            lock: User
            type: dCKB(UDT)
            data: 10000
        }
Output1: Cell: {
            capacity: 10000
            lock: User
            type: Nervos DAO
            data: 0x0012300000000000
        }
  1. “特殊的lock”:判断input2的type为“DAO Info”
  2. “DAO Info”:判断input1、input2、input3的type正确
  3. “DAO Info”:判断input1、input2的tx_hash一致
  4. “DAO Info”:判断dCKB销毁的数量等于CKB存款数量
  5. “Nervos DAO”:验证对应的流程

流程3:取款阶段2

Input1: Cell: {
            capacity: 10000
            lock: User
            type: Nervos DAO
            data: 0x0012300000000000
        }
Output1: Cell: {
            capacity: 10010
            lock: User
            type: null
            data: null
        }

该流程与原有流程一样。

1 Like

对流程进行了简化,验证脚本已经开发完成,后续会开源

2 Likes