CKB 社區成員Retric提出 Nostr Binding Protocol

原文發表在 Github https://github.com/RetricSu/nostr-binding/blob/main/docs/lightpaper-zh.md

在這篇文章裏,我們提出了一種協議,將 Nostr 協議中的基本數據結構綁定到 CKB 區塊鏈上。通過這種綁定,我們允許 Nostr 原生數據繼承 CKB 區塊鏈上 UTXO/Cell 的特性,爲 Nostr 協議帶來了基於鏈上機制的新的可能性。一個潛在的用例是在 Nostr 上發行原生資產。Nostr 綁定協議也爲 dApp 帶來了一種新的開發範式。與將你的 dApp 分成兩個系統不同(一個是鏈下服務器,另一個是鏈上智能合約),我們使用一個具有不同數據級別的一致系統來構建 dApp。這與以太坊的模式有根本不同。

Web5 的三層結構:

關於 Nostr

Nostr 是一種簡單且開放的信息分發協議,它使用中繼-客戶端模型在全球網絡中分發標準消息。中繼-客戶端模型類似於區塊鏈中的 P2P 網絡,但更便宜、更靈活、更實用(也更集中化),更適合用來打造消費級應用的大規模採用。標準消息是 Nostr 的核心創新。Nostr 基於 JSON 定義了一種標準的消息格式(這個消息格式同時也是協議的基本數據結構),用於描述各種不同的數據。它被稱爲"Event"。

Event 結構:

Event 是一個包含任意內容並由用戶簽名的數據片段,因此可以在客戶端進行驗證,而無需信任任何中繼服務器。你在 Nostr 協議中發佈的所有消息都是不同種類和要求的 Event。你可以從 NIPs 瞭解更多關於 Nostr 的信息。

關於 CKB

CKB 是比特幣的二層網絡,具有類 UTXO 和 POW 的設計。CKB 的基本數據結構稱爲 Cell。Cell 是一種具有強大可編程性的通用 UTXO。

Cell 結構:

Script結構:

你可以從 docs.nervos.org 瞭解更多關於 CKB 的信息。

綁定

所謂的綁定,就是在 Nostr Event 和 CKB Cell 之間創建一對一的映射關係。Event 用於定義你資產的詳細信息,而與這個 Event 互相映射的 Cell 則用於提供所有權的保護和其他區塊鏈特定的能力。要創建這種一對一映射,你需要讓一個 Nostr Event 指向一個 CKB Cell,反之亦然。由於 Nostr 和 CKB 協議的簡單性,創建這種綁定非常容易。

我們需要的只是兩個 Script

我們在 Nostr 綁定協議中引入了兩個 CKB Script。第一個是 Nostr binding Script,它是一個 Type Script,定義了從 Nostr 協議的 Event 綁定到 CKB 上的方法。它是一個非常簡單的 Script,但涵蓋了綁定的核心邏輯。第二個是 Nostr lock Script,一個使用 Nostr Event 作爲解鎖簽名的 Lock Script。它用於簡化用戶體驗和構建基於 CKB 的 Nostr dApp 的過程。

Nostr binding Script

Nostr binding Script是一個Type Script,用於定義從 Nostr 協議的某些特殊 Event 綁定到鏈上的規則。Nostr binding Script 確保使用該 Script 作爲 Type Script的 Cell 是 CKB 區塊鏈中唯一存在的一個與特定的 Nostr Event 綁定的 live Cell。

binding Script:

  • TYPE_ID 用於確保區塊鏈中只有一個 live Cell 具有這種 type hash

  • NOSTR_EVENT_ID 用於確保該 Cell 只指向一個唯一的 Nostr Event

使用 Nostr binding Script 作爲 Type Script的 Cell 是 Nostr Event 的綁定 Cell。

Nostr 綁定的 Event 結構:

  • cell_type_id 標籤在 Nostr 資產 Event 中確保該 Event 只指向一個唯一的 CKB Cell

Nostr 資產 Event 呈現了用戶鑄造的資產。Nostr 資產元數據 Event 用於描述同一資產集合的元數據。

Nostr 資產元數據 Event 結構:

Nostr Lock Script

Nostr lock Script 是一個使用 Nostr Event 作爲解鎖證明的 Lock Script。它用於簡化用戶體驗和構建基於 CKB 的 Nostr dApp 的過程。

Nostr lock Script結構:

  • args 設置爲 Nostr 賬戶的公鑰。你也可以在最後 4 個字節中添加一個 POW 值,這意味着解鎖 Event 必須滿足一定的 POW 難度。

  • 當 args 是 32 個字節全爲 0 時,意味着沒有人可以解鎖該鎖。

  • 當前 32 個字節全爲 0,最後 4 個字節是非零值時,意味着該鎖可以被任何 Nostr 賬戶解鎖,只要解鎖 Event 滿足一定的 POW 難度值(這可用於公平發行)

Nostr 解鎖 Event 結構:

要解鎖使用 Nostr lock Script的 CKB Cell,必須在交易的 witness 字段中提供一個 Nostr 解鎖 Event。用戶可以生成多個解鎖 Event,但由於 Event 在上傳到鏈時會在標籤中記錄相應的 CKB 交易,剩餘的 Event 將自動失效,因此不會有重放風險。

Nostr lock Script也可以支持多重簽名。它的lock Script args 可以是一個 Nostr Event ID。該 Event 的 Tag 字段記錄了所有所有者 M 個 P 公鑰。解鎖需要至少 N 個(N<=M)Nostr 賬戶提供 Nostr unlock Event 作爲證明。

有了 Nostr lock Script的幫助,用戶可以使用 Nostr 生態客戶端和瀏覽器插件直接簽名並生成解鎖的 Event 作爲簽名證明來解鎖 CKB 交易,因此這些鏈下 Nostr 生態工具的開發者可以儘可能少地瞭解和引入 CKB 與區塊鏈相關的代碼。同時,用戶幾乎可以"不關心"區塊鏈。項目方或其他志願者可以運行一個特殊的中繼,監控 Nostr 網絡中是否有新的解鎖 Event,如果有,就幫助解析交易並提交到 CKB 鏈進行解鎖。交易費用可以通過預留部分餘額作爲手續費的 Cell 來支付。

發行資產

直接綁定

用戶:需要 Nostr 賬戶和 CKB

  1. 索引 CKB Cell 並計算該 Cell 的 TYPE_ID

  2. 使用 TYPE_ID 生成帶有 Nostr 簽名的 Nostr 資產 Event

  3. 使用 Nostr 資產 Event 生成 CKB 綁定交易,併發送到鏈上

通過 RGB++

用戶:需要 Nostr 賬戶、比特幣錢包和聰

  1. 索引 UTXO,通過 RGB++ 生成映射 Cell,並計算該 Cell 的 TYPE_ID

  2. 使用 TYPE_ID 生成帶有 Nostr 簽名的 Nostr 資產 Event

  3. 使用 Nostr 資產 Event 生成 CKB 綁定交易,併發送到鏈上

轉賬

使用 Nostr 鎖定時

用戶:需要 Nostr 賬戶

  • 在 CKB 上索引你想要解鎖的使用 Nostr lock Script的 Cell

  • 構造一個 CKB 交易,用其他lock Script替換這個 Cell

  • 使用第 2 步的結果,通過 Nostr 客戶端/瀏覽器擴展生成 Nostr 解鎖 Event

  • 將 Nostr 解鎖 Event 發送到一個特殊的中繼組,並提交到鏈上

使用其他鎖定時

用戶:需要擁有對應其他鎖定的錢包,無需任何 Nostr 相關操作

只需按照 CKB/RGB++ 上的正常流程解鎖轉賬即可。

可擴展性問題

Nostr 綁定協議的主要優勢是非常簡單直接。簡單性也使客戶端開發者更容易在其之上構建產品。另一方面,Nostr 綁定協議的缺點是可擴展性問題。在這種簡單設計下,Nostr token 的吞吐量與 CKB 區塊鏈綁定,因此 CKB 區塊鏈將成爲瓶頸。考慮到 Nostr 作爲一個更靈活的社交網絡,旨在大規模採用,當未來有大量用戶與這些原生資產交互時,這種吞吐量可能會成爲問題。

然而,我們看到了一些解決這個問題的選擇:

  1. 與 CKB 閃電網絡集成

由於 Nostr 綁定協議創建的 Nostr 原生資產可以被視爲普通的 CKB 資產,因此一旦 CKB 閃電網絡推出,我們可以利用它來擴展 Nostr 綁定協議。Nostr 綁定協議本身不需要任何更改,這是一個免費的功能。但缺點是需要等待 CKB 閃電網絡推出。

  1. 實現簡單但有用的支付通道

在 CKB 閃電網絡推出之前的另一種選擇是實現一些非常簡單但有用的支付通道,如 spillman 通道。spillman 通道是一種單向支付通道,實現更簡單。通道中有一個付款人和一個收款人。對於區塊鏈來說,這種支付通道可能不太有用,但在 Nostr 綁定協議的情況下,它非常適合內容創作者與他們的關注者之間的訂閱模式。

  1. N 對 1 綁定而不是 1 對 1 綁定

與創建 1 對 1 綁定不同,我們可以在 Nostr Event 和 CKB Cell 之間創建 N 對 1 綁定。換句話說,我們將多個事件捆綁到一個單元格中,以實現可擴展性。這將使鏈上映射存儲成本比鏈下 Nostr Event 小得多。但是,N 對 1 綁定的問題在於,它需要設計一種新的模式來控制和拆分捆綁事件的所有權。這將更加複雜,需要額外的設計和實現工作。

  1. RGB 風格解決方案

實現最終可擴展性的另一種方式是創建一種 RGB 風格的解決方案,將 CKB Cell 用作一次性密封,並使 Nostr 協議成爲類似 RGB 協議的實現層。這種解決方案可以選擇只實現代幣標準,而排除原始 RGB 協議中的通用智能合約理念,從而簡化工作流程。

常見問題解答

爲什麼選擇 Nostr?

Nostr 是基於加密技術的大衆級應用的理想層。它是一種超級簡單、直接、實用、不帶偏見且易於集成的信息分發協議。許多 web3 項目可能會使用類似 Arweave 和 IPFS 的東西,它們持有完全不同的價值觀和理念。你可以將 Nostr 視爲一種超級鬆散的協議,沒有對完全去中心化的 P2P 網絡的執着,也沒有長期存在於 web3 世界中對代幣經濟和激勵機制的過度承諾,這使得 Nostr 更加實用和不帶偏見。

爲什麼不直接使用區塊鏈資產?

讓用戶能夠基於 Event 在 Nostr 網絡中發行自己的原生資產,而不是在 Nostr 網絡中直接使用現有的區塊鏈代幣,主要是基於這樣一個簡單的事實:如果沒有創造價值,代幣就沒有意義。對於消費級產品,大多數區塊鏈資產只會在產品工作流程中帶來阻力,而不會爲產品增加價值。與其將代幣機制強加到產品中,不如從用戶角度出發,看看他們需要什麼,區塊鏈能提供什麼幫助。我們認爲基於 Event 的原生資產符合這種方法論。應用開發者和用戶可以從自己的角度看看他們能用資產做什麼,而不是強制他們接受現有的區塊鏈資產和規則。此外,基於 Event 的資產更容易與 Nostr 協議無縫協作,爲現有的 Nostr 生態系統產品和工具帶來了新的玩法。

爲什麼選擇 CKB?

由於 CKB 的可編程性,使用 CKB 實現綁定協議要容易得多。比特幣就更難了。此外,考慮到 CKB 與 BTC 綁定的獨特方式,通過先與 CKB 綁定,再與 BTC 綁定會更容易。

結語

總的來說,Nostr 作爲一種簡單實用的信息分發協議,非常適合消費級應用的大規模採用。而 CKB 的可編程性和與比特幣的綁定關係,使其成爲實現 Nostr 綁定協議的理想選擇。同時,基於 Nostr Event 發行原生資產,可以從應用出發設計新的產品機制,從而讓 Nostr 與其他傳統互聯網應用進行競爭,尋找自己獨特的 PMF。