Nervos DAO 中的存入和取出

買賣虛擬貨幣
Nervos DAO 是 CKB 經濟模型的重要亮點之一,它可以有效的消除二級發行所帶來的增發影響,是對抗稀釋的一劑良藥。一週前,Nervos 團隊釋出了其 RFC,詳細說明了 Nervos DAO 中的存入和取出機制。以下是來自 Nervos 中文社羣的部分翻譯。我們也期待更多的社羣夥伴對 Nervos DAO 進行解讀。摘要本文描述了 Nervos DAO 中的存入和取出機制。動機Nervos DAO 是一個智慧合約,就像 CKB 上其他的智慧合約一樣,使用者可以與之互動。Nervos DAO 的功能之一就是為 CKByte 持幣者提供一種抗稀釋的功能。透過將 CKByte 存入 Nervos DAO 中,持有者可以獲得一定比例的二級發行,在存款和取款之間的這段時間內,他們的持有比例只會受到創世塊和基礎發行的影響,就像和有硬頂的比特幣一樣。持有者可以隨時將他們的 CKByte 存入 Nervos DAO 中。Nervos DAO 是一種定期存款,存在一個最短存款期限(會按照區塊計算),持有者只能在一個完整的存款期之後進行取款。如果持有者在存款期結束時沒有取款,這些 CKByte 將自動進入新的存款週期,這樣可以儘量減少持幣人的操作次數。
背景CKB 的發行曲線由兩部分組成:· 基礎發行:獎勵給礦工的有硬頂的代幣發行,使用與比特幣相同的發行曲線,約每 4 年減半。· 二級發行:常量發行,每個難度調節週期(Epoch)都會發行相同數量的 CKByte,這意味著隨著時間的推移,二級發行比率將逐漸趨近於零。因為每個 Epoch 內的區塊數量是動態調整的,所以每個區塊的二級發行會是一個變數。如果在 CKB 中只有基礎發行而沒有二級發行,那麼 CKByte 的總供應量將會存在一個硬頂,其發行曲線將會和比特幣完全一樣。為了保障 CKB 的長期持有者不被二級發行稀釋,在 Nervos DAO 中鎖定的 CKByte 將獲得部分比例的二級發行,該比例等於鎖定在 Nervos DAO 中的 CKByte 佔整個 CKByte 流通量的百分比。更多關於 Nervos DAO 和 CKB 經濟模型的細節,請檢視[Nervos RFC #0015]
https://github.com/nervosnetwork/rfcs/blob/master/rfcs/0015-ckb-cryptoeconomics/0015-ckb-cryptoeconomics.md存款使用者可以隨時傳送交易將 CKBytes 存入 Nervos DAO。CKB 在創世塊中包含一種特殊的 Nervos DAO 型別指令碼。想要儲存到Nervos DAO 中,只需隨時建立一個包含新 Output Cell 的交易,並滿足以下要求:· 建立的 Output Cell 型別指令碼必須設定為 Nervos DAO 指令碼。· 該 Output Cell 的 Cell Data 必須有 8 個位元組長度,並用 0 將其填充完整。為方便起見,一個滿足上述條件的 Cell 被稱為「Nervos DAO 存款單」。為了遵循 CKB 的指令碼驗證邏輯,存款交易還需要將 Nervos DAO 型別指令碼的引用包含在封閉交易的 cell_deps 部分中。注意,在一個交易中,我們不對完整的存款數量進行限制,一個有效的交易中可以建立多個「Nervos DAO 存款單」。
取款使用者可以隨時傳送交易從 Nervos DAO 中取出已儲存的 CKByte(但這裡會涉及到一個鎖定期來確定什麼時候可以取出代幣)。一個 Nervos DAO Cell 獲得的利息只會在取出階段發放,這意味著對於一個包含 Nervos DAO 提取交易來說,所有 Onput Cell 的Capacity 總和可能超過所有 Input Cell 的 Capacity 總和。與存款過程不同,從 Nervos DAO 取出需要兩個步驟:· 在第一階段,第一個交易是將 Nervos DAO 存款單轉換為 Nervos DAO 取款單。· 在第二階段,第二個交易是從 Nervos DAO 取款單中提取代幣。取款階段 1第一階段是將 Nervos DAO 存款單轉換為 Nervos DAO 取款單,這裡的目的是確定一個 Cell 存入 Nervos DAO 的時間。一旦第一階段的交易完成上鍊,那麼就可以透過 Nervos DAO 存款單和 Nervos DAO 取款單之間的持續時間來計算利息,以及計算所存代幣的剩餘鎖定期。
第一階段的交易應符合下列條件:· 交易中應包含一個或多個 Nervos DAO 存款單作為輸入。· 對於每個 Nervos DAO 存款單來說,交易需要在 header_deps 中包含對其相關(存款)區塊的引用,Nervos DAO 型別指令碼將以此作為存款的起點。· 在 Input 索引 i 中的 Nervos DAO 存款單,應該在 Onput 索引 i 中建立 Nervos DAO 取款單,並滿足以下要求:取款單應該與存款單具有相同的鎖定指令碼取款單應該與存款單具有相同的 Nervos DAO 型別指令碼
取款單應該與存款單具有相同的 Capacity取款單也應該有 8 個位元組長度的 Cell Data,但不是 8 個零,Cell Data 部分應該儲存存款單所在區塊的區塊數。該數字應該以 64 位未簽名小端序整數格式打包。· Nervos DAO 型別指令碼應該包含在取出交易的 cell_deps 中。一旦該交易完成上鍊,使用者就可以開始準備階段二的交易了。取款階段 2階段 2 的交易是從 Nervos DAO 中取出已存的代幣和利息。注意,與第一階段交易不同的是,使用者可以在任何時候傳送第一階段的交易,但在第二階段的交易中,我們將會設定一個「since」欄位來實現鎖定期的要求,因此,可能會事先只生成一個交易,但是必須等待一段時間後,他/她才可以傳送交易到 CKB。
第二階段的交易應符合以下條件:· 一個交易應該包含一個或多個 Nervos DAO 取款單作為 Input。· 對於每個 Nervos DAO 取款單來說,交易需要在 header_deps 中包含對其相關(取款)區塊的引用,Nervos DAO 型別指令碼將以此作為存款的終點。· 對於在 Input 索引 i 中的 Nervos DAO 取款單來說,使用者應該定位到包含原始 Nervos DAO 存款單的區塊頭。有了這個存入區塊頭之後,我們還需要做 2 個操作:當前交易的 header_deps 中應該包含存入區塊頭的雜湊header_deps 中存入區塊頭雜湊的索引應該使用 64 位未簽名小端序整數格式,並儲存在屬於相應 Witness 輸入 Cell 型別指令碼部分的索引 i 中。Witness 當前的論證組織將會在另外一個單獨的 RFC 中闡述。下面我們還將透過一個詳細的例子來介紹這個過程。
· 對於一個 Nervos DAO 取款單來說,Cell 交易輸入中的 since 欄位應該反映 Nervos DAO Cell 的鎖定週期要求,即 180 個Epoch。例如,如果一個人在第五個 Epoch 存入 Nervos DAO,則他/她只能在第 185、365 或 545 等 Epoch 從 Nervos DAO 中取出。注意,鎖定期的計算與利息的計算無關。在第五個 Epoch 存入,在第一百個 Epoch 使用 withdraw block,在第 185 個 Epoch 使用 since 欄位是完全有效的。請參考 since RFC (https://github.com/nervosnetwork/rfcs/blob/master/rfcs/0017-tx-valid-since/0017-tx-valid-since.md) 來了解如何表示有效的 Epoch 數,Nervos DAO 型別指令碼目前只接受絕對的 Epoch 數作為 since 值。· 利息計算邏輯完全獨立於鎖定期限的計算邏輯,我們將在下一節中解釋利息計算邏輯。· Nervos DAO 型別指令碼中,所有 Input Cell 的 Capacity 加上利息的總和應該大於或等於所有 Onput Cell 的 Capacity 的總和。· Nervos DAO 型別指令碼應該被包含在 cell_deps 中。正如上面的步驟所示的那樣,在一個交易中執行多個取款是完全有可能的。更重要的是,Nervos DAO 並沒有限制提取代幣的目的,在同一交易中,將剛提取的代幣重新存入 Nervos DAO 中也是有效的。實際上,一個交易可以用來自由地混合以下所有操作:將代幣存入 Nervos DAO 中。
將一些 Nervos DAO 存款單轉化為 Nervos DAO 提款單。從其它 Nervos DAO 中提取 Cell。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;