這個專案是 Nostr 的網頁版客戶端,使用 Rust WebAssembly 撰寫,仍在非常初期的開發階段。
Nostr 是一種去中心化的通訊協議,使用者可以自由連接到不同的中繼器並發送訊息。
Nostr 主要由中繼器與客戶端組成。
-
中繼器
就是伺服器,負責接收和轉發使用者傳送的訊息。
可以想成是玩手遊時要選的伺服器。
任何人都可以自由運行中繼器,使用者也可自由選擇要連到哪些中繼器。
-
客戶端
就是這個專案正在嘗試打造的東西,包括使用者界面和各功能,主要用於和中繼器溝通,接收和傳送訊息。
以手遊來比喻就是遊戲的 App。
開發者可以開發各種客戶端,使用者可以自由選擇要使用的客戶端。
如 Snort 即為 Nostr 客戶端之一。
-
公鑰
識別你在 Nostr 上的身份。
可以想成是門牌,只要知道門牌,就能找到你家。
公鑰是公開的。
-
私鑰
有私鑰 = 擁有該 Nostr 帳號的完整權限,可以發訊息、讀訊息、追蹤別人。
可以想成是家裡鑰匙,有鑰匙就能進屋,不論要在廚房煎牛排或從保險箱搬金條出來都可以。
私鑰應妥善保存,洩漏給他人知道會是場災難。
-
簽章
Nostr 會藉由公鑰密碼學驗證使用者的真實性。
使用者發訊息時會使用個人私鑰對內容做簽名。
透過演算法的特性,任何人都可以用公鑰驗證 經私鑰簽名過的內容是否是本人所簽署。
Rust 是一種非常安全且高效的高階語言,效能甚至等效 C++。
WebAssembly 目前沒有比較好的中文翻譯,雖然組合語言的英文是 Assembly,但 WebAssembly 與 Assembly 並不是相同的東西。
WebAssembly 簡單來說是用 JavaScript 以外的程式語言(大多是C、C++、Rust 等高執行效率的語言)寫邏輯的部分,經過編譯後的函數可以在網頁中與 JavaScript 搭配使用,大幅提升運行效率。
src/lib.rs
是使用 Rust 撰寫的 WebAssembly,這個檔案經過編譯後,結果會存在 pkg
資料夾。
pkg
中 web_application.js
會調用 pkg/web_application.wasm
。
website
資料夾中存放的則是正常的 html css js,與傳統網站並無差異。
✅發送自訂訊息
✅儲存私鑰至 local storge
☐ 驗證輸入的私鑰的格式是否正確
☐ 產生私鑰
☐ 若私鑰已存在 local storge,則顯示編輯框
☐ 讀取訊息
☐ 過濾訊息 ChatGPT API (?)
wasm-pack build --target web
編譯 Rust 至 WASM