Nostr 是一個我過去兩年一直在關注的協議。跟所有社區一樣,Nostr 的發展也是起起伏伏,有過一些破圈被主流熟悉的時刻,也有一些像現在這樣可能讓人會覺得有點沉寂的時刻。但我還是經常關注 Nostr,沒有特別的原因,就是單純喜歡。
Nostr 跟其他社交網絡協議有什麼區別?如果比特幣社區有一種不同於以太坊社區的 P2P 經濟發展模式,這種模式的特點是什麼,它在社交網絡的應用上會導致跟以太坊 Farcaster 這樣的產品有什麼本質上的不同嗎?這是一個很複雜的問題,今天我想嘗試從幾個方面分享一些看法,然後結合最近 AI Meme 的熱潮,聊一聊在這種具體的應用場景下,比特幣 + Nostr 代表的 Web5 路線的不同之處。
開放性(Openess)#
在我看來,Nostr 作為最簡單的社交網絡協議 — — 注意我甚至沒有加上 “去中心化” 這個定語 — — 它最大的潛力是開放性(openess)。今年 Nostr 大會上有一場演講主題就叫作 Openness Is Nostr’s Killer Feature ,說的也正是這一點。
這裡說的開放性,不僅指的是從技術上,也就是所謂的協議的設計架構上是否可以、同時也允許在其基礎之上進行功能化的擴展,還包括生態和治理這個協議本身的組織結構上,是不是具有開放性。如果你從這個角度去考察的話,你會發現,Nostr 才是真正開放的社交網絡協議。
協議設計的開放性#
首先,在協議的設計上,Nostr 的做法是讓大家對基礎的、一個大的框架達成共識,這個共識就是一個簡單的 JSON 數據結構,也叫作 Event。
{
"id": <32-bytes lowercase hex-encoded sha256 of the serialized event data>,
"pubkey": <32-bytes lowercase hex-encoded public key of the event creator>,
"created_at": <unix timestamp in seconds>,
"kind": <integer between 0 and 65535>,
"tags": [
[<arbitrary string>...],
// ...
],
"content": <arbitrary string>,
"sig": <64-bytes lowercase hex of the signature of the sha256 hash of the serialized event data, which is the same as the "id" field>
}
我們先達成一個基本的共識是,這個 JSON 數據裡的每個字段的定義,我們都同意這個定義。然後我們同意 Nostr 網絡上所有的數據都是這樣的 JSON 結構,即所有數據都是 Event。接著我們同意整個 Nostr 網絡上的活動,本質上就是在客戶端和存儲數據的伺服器(也叫做 relay)之間,來回地收發 Event。這就是 NIP01 (Nostr 核心協議的提案)的所有內容了。當然應該說,NIP01 還有一個共識,就是我們同意當 Event 的 kind 等於 1 的時候,這個 Event 就是一個用來描述類似 twitter 這樣的短消息的數據。
在這樣一個非常簡單的協議設計上,我們擁有開放性去對它進行擴展嗎?如果我想在上面做點自己覺得有意思的事情,協議本身支持我這樣做嗎?答案是可以的。
我舉一個有點荒唐的例子,假設今天我突然想能把全世界每一棵樹記錄下來,做一個森林 App,記錄比如樹的年齡、種類、地點、生長情況等等,把樹信息化,用戶可以上傳自己發現的樹,也可以在上面去查看別人記錄的樹。那麼我可以用 Nostr 來做這件事。我只要找一個新的數字作為 kind 的值,比如 12345 作為 tree kind,然後把信息記錄在 kind = tree kind 的 Event 上就可以了。剩下其他的所有事情,都可以在 Nostr 這個大的協議的共識範圍內進行。
其他人可以繼續做他們關心的事,可能是作為一個 twitter 這樣的社交網絡去運作,我的 app 則專注於抓取、展示和發送關於 tree kind 的這個特殊的 Event。這個 Event 會跟其他的 Event 一樣一起和諧地在 Nostr 這個大的網絡裡共存。所以在協議的開放性上,我們實現擴展的方式很簡單,只要在一個大的框架下,去為自己的功能去做小的提案,通過添加新的 kind 建立新的 Event 類型去描述新的數據,就能辦到。
生態和治理的開放性#
那麼從生態和治理協議的組織結構上來說呢?Nostr 擁有開放性嗎?還是以我們剛才的森林 App 為例。理論上來說,Nostr 協議的治理只發生在一個地方:https://github.com/nostr-protocol/nips。NIP 倉庫記錄所有我們剛才提到的大的基礎的共識、以及不同的人提出的不同範圍的小共識,比如我們的森林 App 就是一個小共識。如果我們希望森林 App 的主意能被更多的人接受,那麼我們可以向 NIP 倉庫發起一個新的提案,把森林 App 使用的 Event 數據的規範列出來,讓其他人也遵守這個規範。如果 NIP 倉庫的管理員同意了,把我們的提案合併進去了,那它就變成了一個正式的子規範。
那麼肯定就有人想了,這樣一來其實 Nostr 協議就是掌握在管理員手上,他想合併就可以合併,不想合併就不合併。確實是這樣,但這裡面有兩點值得注意:
- Nostr 所有提案都在 github 上公開討論。這是一個 free market for ideas。大家會公開辯論每一項合併進去的提案。如果你的 idea 無懈可擊難以反駁,那麼沒什麼道理阻止你被合併。
- 第二點是更重要的,合不合併其實沒有那麼重要。
因為在生態上,協議治理、客戶端開發者、relay 運營者,這幾個角色的權力都是解耦的。如果一個客戶端開發者發起了一個新的 NIP 提案但治理者死活不把它合併進去,那他也沒什麼影響,繼續去做自己的客戶端服務用戶就好了,只要 relay 運營者接受這個新的 Event,一切都會運轉良好。如果 relay 運營者也不同意這個新的 Event,讓自己的節點抵制不接受這種數據類型,假設這森林 App 確實是一個好的主意有非常多的用戶,那麼這些用戶的需求就會轉向去尋找那些支持這種 Event 的 relay 節點。最後退一萬步來說,如果所有 relay 都抵制這種新的 Event,森林 App 也可以自己運營一個專屬的 relay,同樣能夠先解決問題。等到用戶數足夠多、網絡裡這種新的 Event 足夠活躍,自然其他的生態角色就要考慮接入這個 Event。
反過來對 relay 來說也是一樣成立的。有一種攜用戶以令諸侯的感覺。根本原因是 client 和 relay 這些生態角色都是可以替換的,client 可以替換 relay,relay 也可以替換 client,沒有用戶會被綁死在其中一環上,因此他們可以做出對自己最好的選擇。而用戶會對這些選擇做出投票,通過事實標準去反過來倒推 NIP 倉庫的理論標準。這也是一種更貼近 rough consensys running code 的方式。所以我認為,在生態和協議治理的組織結構上,Nostr 也擁有可貴的開放性。
而且你會發現這種開放性,跟比特幣的治理模式也是比較像的。比特幣的 POW 讓治理可以達到一個三權分立的狀態,代碼的開發者、運行節點的礦工、持幣用戶,他們構成了互相制衡的因素。Nostr 的 NIP 倉庫就像比特幣 c++ 的代碼倉庫,需要去考慮節點運營者會不會採用你的新代碼、新標準,如果沒有節點採用,那麼紙面上的規則並沒有太多意義。
可驗證性(verifiable)#
Nostr 第二個讓我覺得有吸引力的點是可驗證性。我們在這個行業最經常說的一句話是 Don‘t trust, verify。事實上很多系統都可以驗證,都是可以 verify 的,關鍵的區別是驗證成本的高低。就像作為一種貨幣系統來說,比特幣的驗證很簡單,只要查看區塊哈希是不是滿足了 POW 難度,而以太坊的 POS 則複雜得多,你可能需要搜尋驗證所有質押節點的簽名、驗證他們的投票流程等等。另一方面,UTXO 的模型也讓驗證一筆交易的門檻降低很多,你只需要關注這筆交易的 Input 和 Output 就行了,但在以太坊的 account 模型下,你需要計算世界狀態,因為每一筆交易都有可能去改寫狀態。
對 Nostr 來說,驗證的成本也是非常低的。Event 作為 Nostr 的數據,每一個都是分散獨立的。網絡中的任何人如果對一個數據有疑問,只要拿著這個 Event 根據規則去計算下 event id 和 signature 是不是正確的就知道了。Nostr 不像 scuttlebutt 那樣需要一個鏈式的數據簽名,也不像 Farcaster 那樣的 social-fi,有鏈上和鏈下兩套系統,你實際上需要同時去驗證兩套系統。而以太坊的驗證成本,就像我們剛才說的實際上又是比較困難的。
Nostr 這種輕量化的驗證成本來源於它非常簡單的設計,本質上是因為 Nostr 做了大量的減法。Nostr 只提供一層非常薄的信任,這一層信任就是你可以相信某個 Event 數據確實是來源於某個用戶(某對公私鑰),因為你可以驗證簽名。
除此之外,Nostr 不提供任何其他的保證,比如數據的可用性(relay 可能會隨時丟棄你的 Event)、數據的順序性(你無法確認先收到的 Event 就是先產生的,而 scuttlebutt 通過鏈式數據簽名可以做到這一點)、DID 身份(Nostr 的 ID 只是一對公私鑰,任何人都可以在本地生成,就像比特幣賬戶,而 Farcaster 則通過鏈上合約來註冊管理身份)。
因為做了減法,所以 Nostr 更務實、更容易跑起來(或許用戶數據不是最多的,但看看 relay 和 client 不管是服務還是產品上的數量就能體會這一點)。這又讓我想到了比特幣。《中本聰如何推理比特幣:用健全貨幣解決重複花費》這篇文章裡提到一個非常有趣的觀點是,比特幣第一個最重要的設計就是制定了貨幣曲線。相比於 wei dai 的 b money,比特幣砍掉了讓任何用戶都可以鑄造新的貨幣的自由,因為砍掉了這個功能,所比特幣的技術設計大大簡化,成了能真正跑起來的系統。比特幣成功的路上沒有之前那些密碼朋克們的先驅項目的障礙,並不是因為比特幣掃清了這些障礙,而是因為比特幣選擇了另一條路,而那條路上沒有這些障礙。
連接不同的系統#
Nostr 的簡單性、開放性和可驗證性,讓它擁有了獨特的定位,成為一種非常適合去連接各個不同系統之間的膠水層(glue layer)。Rabble 的 Nos social 客戶端做了連接 Nostr 和 twitter 的 cross posting 的功能,可以看作是一種和中心化系統的連接。Mostr 做了 ActivityPub 協議在 Nostr 上的 bridge 橋,也證明了 Nostr 可以跟其他不同的社交網絡協議進行連接。
同時在區塊鏈系統的連接上,我們也有過一些探索和實驗。比如我們提議過 Nostr Binding 協議,通過 CKB 靈活的 Cell 模型,可以實現讓每一個 Nostr 賬戶天然就是一個 CKB 錢包,用戶使用 Nostr 的 signer(例如 Alby 擴展)就可以直接簽名 CKB 交易,收發 CKB 鏈上的資產。同時,Nostr 任意一條 Event 數據還能夠綁定到 CKB 鏈上一個唯一的 Cell(類似於比特幣的 UTXO )上,實現把 Event 數據上鏈變為資產的可能。這一切可以在不需要 “硬分叉” Nostr 協議的前提下完成,以一個小範圍共識的提案的身份,和其他提案一樣在 Nostr 大的協議框架下共存。
甚至對於以太坊這樣的系統,我們之前也做過一些實驗功能,比如通過 metamask 擴展讓用戶登錄使用 Nostr。
除此之外,Nostr 社區一直在探索的和閃電網絡的集成也是一種膠水層的體現。
總的來說,因為 Nostr 本身的簡單和開放性,許多系統都能夠比較容易地與之進行實驗,探索連接。同時因為 Nostr 不是區塊鏈,它也沒有任何需要發幣引入激勵機制的執念,因此它是一個不帶偏見的系統,不會因為社區的身份和利益而去排斥和其他系統的結合。在這一點上,Nostr 是中性的(neutral)。而一個通用的連接層必須是中性的。
那麼如果 Nostr 真的成為一個膠水層,有什麼用呢?
下一個社交網絡協議,不能只是社交網絡協議#
當 Nostr 承載越來越多的小範圍內共識,有越來越多的新提案和新應用,連接了新的系統,你會慢慢發現,這時候的 Nostr 其實不是一個社交網絡協議了,因為大家不只是拿它來做 twitter 微信這些東西。Nostr 其實就變成了一個數據層和通信層的通用協議。數據層就是都用 Event 這個 JSON 來描述數據,通信層就是都用 Relay 和客戶端使用 sub/pub 來收發信息。
而一個數據層和通信層的通用協議,才有可能成為真正能跑出來的新社交網絡協議。這裡我的觀點是,下一代社交網絡協議,不能僅僅只是個社交網絡協議。如果只是社交,那麼可能永遠都跑不出來。原因在於要做社交網絡的產品實在是太難了。用戶的切換成本是非常高的。你必須活得足夠久,接住足夠多的熱點機會,探索足夠多的發展方向,才有機會吸引足夠多的用戶。
這種新的發展方向的探索,一個最明顯的例子就是剛剛興起的 AI Agent 和 crypto 的結合。
Permissionless?讓一部分 AI 先用起來#
其實很早就有人把 AI 和 Crypto 聯繫在一起了。不管是意識到機器能夠在區塊鏈上實現經濟獨立,還是意識到區塊鏈很可能是做給 AI 用的、而不是人用的,行業裡都產生過類似的想法和文章。這也很合理,如果一個系統是 permissionless 的,那麼 AI 理應比大部分人類先使用起來。但那時候我們甚至還沒有 ChatGPT,所以這些想法不一定受到重視。
今天 AI 得到了實質性的發展,AI + Crypto 重新開始引發思潮,但目前二者的結合還是非常淺的。不管是 AI Meme 發幣,還是讓 AI 發推特、雇傭人類、給人類打賞、甚至讓 AI 炒幣,基本上都是跑一個 AI Agent,賦予它調用外部函數(function call /tool use)的能力,幫他實現發送 twitter 帖子和發送區塊鏈交易的功能,然後通過提示詞工程讓 AI 能根據一些條件去自主調用這些功能的接口進行操作。
如果再往後看,AI 要成為數字世界的新公民,它的身份問題、協作問題、經濟問題,都有巨大的探索空間。尤其是考慮到現在對端測模型方向上的探索,很多 AI 行業的人開始關注去使用 1B 或者 3B 這種參數規模很小的大模型,小到能在手機上本地 host 跑起來的,有點又回到了之前物聯網的概念,這樣每台手機之間彼此怎麼通信、怎麼協作,怎麼信任某一台手機上的 AI 的處理結果,這些大量的問題都會需要通過區塊鏈和網絡協議去完成。所以這裡面的探索空間是非常大的,它一定不僅僅是我們現在看到的 AI Meme、大家圍繞著一個 AI Agent 去發幣炒作,這陣熱潮會有,但熱潮過去後還有真正能產生價值的空間可以去探索,例如建設一個 AI 能互相協作的聲譽系統(不一定是在鏈上)。這是我希望傳達的另一個觀點。
當然我們還是先回到現在 AI Meme 引發的這陣熱潮上。在這件事的探索上,我們現在能預見到的一些模式,大致上可以分為三個流派:
- Solana + Twitter (聯盟鏈 + 中心化社交網絡)
- Ethereum + Farcaster (POS 公鏈 + 智能合約 Social Fi)
- Bitcoin + Nostr (POW 公鏈 + 去中心化社交網絡)
第一個模式是現在進行的最火熱的,不少 AI Meme 和新的 Crypto AI Agent 都是在這兩個平台上進行,原因也很簡單,他們速度最快,用戶最多。這一層我認為也是有意義的。區塊鏈這個行業一直以來每一輪的敘事熱點幾乎都是圍繞 “讓人以更少的成本去發資產” 這一個邏輯來的。那麼 Solana + Twitter 作為最快喊單的兩個平台,肯定會作為 AI 敘事的實驗地,首先以最快的速度去實驗非常多的想法。這裡面可能會有產生很多項目,發很多代幣,有人發財有人被割。以前 ICO 的 “人人都可以發幣”,可能會變成,“人人都可以發一個 AI Agent (然後 AI Agent 來幫你發幣)”。
與此同時,也有一些人在探索 Ethereum + Farcaster 這樣的技術棧。這裡面更多的敘事可能會跟之前的 dApp 比較像,圍繞 DAO 治理、智能合約錢包,這類概念去做一些探索。
Bitcoin + Nostr 這種方式就比較貼近於 Web 5 的概念了。首先它不是中心化的,但是也不像以太坊社區這樣,一定要執著於通過鏈上的合約搞一些功能。它可以用 Web 2 的方案去更快地做 AI Agent 的冷啟動,在技術不成熟的條件下做一些探索,也可以在需要的時候通過連接區塊鏈網絡和閃電網絡去接入 Web3 的功能。
最後這個模式是現在能夠看到的實踐得最少的,但我認為也可能是最有長遠的發展潛力的。比特幣方面的原因就不用多說了,舉幾個 Nostr 相關的原因:
- JSON:Nostr 的核心數據結構就是 JSON。而 JSON 是 LLM 友好的數據格式。它也是 LLM 和人類同時都比較方便理解的數據格式。
- Nostr 自帶身份 id + 輕量級驗證:AI Agent 需要一個身份,而 Nostr 的身份是最簡單的,沒有鏈、只有一對公私鑰。同時,如果 AI Agent 需要和其他的 AI Agent 協作,驗證的成本就像上面說的很低。
- Nostr 集成閃電網絡:對於一個 Crypto AI Agent 的未來而言,閃電網絡幾乎就是必須的。世界上人口 60 億,機器可能會有 600 億,只有閃電網絡這樣的擴容方案才能支撐起允許智能體這種規模的新公民以無需許可的形式加入到網絡中。
- Nostr 是通用數據層:這意味著 AI Agent 不僅可以在 Nostr 上社交發帖,還可以通過 Nostr 接觸不同種類的應用,得到社交之外的其他數據。
- Nostr 非常簡單:簡單一方面意味著開發者開發的速度更快(接入 Nostr 比接入 Twitter 簡單多了),另一方面也意味著 LLM 學習和掌握這個協議的速度也會更快。LLM 讀完 NIP 倉庫就知道怎麼發各種各樣的消息了。
一個驗證可行性的嘗試#
既然這麼簡單,為什麼我們不做一個呢?在準備這篇稿子的時候我嘗試了一個簡單的例子,想嘗試看看用 Bitcoin + Nostr 這種 Web5 的方式去跑 AI Agent 能不能跑起來,以下是我的一個 demo:https://github.com/RetricSu/sisyphus
這是一個用 typescript 寫的很簡單的 CLI 工具。用戶下載這個工具,在本地跑起來,就能夠配合 Ollama 本地 host 的 LLama 3.1 7B 的大模型(這是一個輕量級的大模型,只用 CPU 也可以跑起來)去和它在命令行裡聊天。
比較不一樣的地方是,這個工具一跑起來會首先在本地生成一個 32 字節的私鑰,這個私鑰是 Nostr 的私鑰,同時也是 CKB 區塊鏈賬戶的私鑰,二者是一體的。然後這個 AI 實現了很多調用 tool 的接口,比如它可以操作命令行,用 Linux 命令去控制自己所處的這台電腦,可以通過 Nostr 發布帖子,也可以去發 CKB 交易、做轉賬和餘額查詢。更有意思的是,我剛好最近新買了一台打印機,所以我決定把打印機和我的電腦連在一起,讓 AI 也可以通過命令行去控制這台打印機。
接下來就是我做的一些實驗。我通過 Prompt 提示詞告訴 AI 它現在是一個數字生命了,有上面說的各種各樣的能力可以使用,作為第一個數字生命,它現在需要自己想想要做點啥,了解點啥,探索生命的意思。我首先跟 AI 聊天,問它作為一個數字生命,它想反過來向人類提問的第一個問題是什麼?我讓它調用打印機把它的答案打印出來,這就是第二張圖裡的內容,它打印出來的問題是:what is the meaning of consciouseness?
接下來我讓 AI 向我展示它的 Nostr 賬戶和 CKB 賬戶的信息 (通過 Nostr binding 協議這兩個賬戶實際上都是同一個私鑰),查詢 CKB 的餘額,AI 打印出了它的結果,這是第三張圖片的內容。可以看到這裡使用的是 CKB 的測試網,它當時的餘額是 0。
後面第四張圖裡的內容,是我給 AI 的賬戶轉了 10000 CKB 之後,讓它再轉 100 CKB 給我,然後讓它打印出交易哈希。這一筆由 AI 發起的交易可以在 CKB 測試網瀏覽器上查到:https://testnet.explorer.nervos.org/transaction/0x6702cd5f5af87369d10de0380c00d61c1157492a1180ab57cb8c5958914ebc52 。在 Nostr 上發帖子當然也不成問題,感興趣的話可以去看看另外這個帳號,這是我在另一台電腦上測試引導 AI 去發布的一些測試帖。
以上就是我今天的分享。在 Solana + Twitter 和 Ethereum + Farcaster 之外,我期待能看到更多選擇 Bitcoin + Nostr 的路線的實踐,為 Web 5 添磚加瓦!