自己部署簽名頁

Vela 喺你批准每一筆交易之前都會先解碼,呢份解碼係實打實嘅功夫——但做呢份功夫嘅, 係砌呢筆交易嘅同一個應用。如果呢個應用、或者佢送到你手上嗰條路俾人郁過手腳, 佢就可以畀你睇一樣嘢、但係簽低另一樣。Bybit 遇到嘅正正就係呢件事。

簽名頁存在嘅意義,就係將呢件事一分為二:交易由一個地方嚟,而核對同簽名發生喺 另一個由你控制嘅地方。

佢係乜

一個資料夾——儲存庫裡面嘅 app-web/clearsigning——佢既係一個網頁,亦係一個 Chrome 擴充功能。純 HTML、CSS 同 JavaScript:冇框架,冇打包工具,冇建置步驟, 冇依賴,亦唔會自己發任何網絡請求。

收到一個簽名請求嗰陣,佢唔會信隨請求送嚟嗰份摘要。佢自己解原始 calldata、 自己計摘要、將呢個簽名實際會授權嘅內容擺出嚟畀你睇,然後先去請求你把通行密鑰。

因為冇建置步驟,你讀到嘅檔案就係行緊嗰啲檔案。你可以將呢個資料夾同儲存庫逐隻字 對,咁就確切知道自己架緊嘅係乜。

邊一份副本先幫到你個錢包簽

通行密鑰綁喺佢被建立嗰陣嘅網域上面。你嘅 Vela 鎖匙註冊喺 getvela.app 之下, 而瀏覽器淨係會將佢哋提供畀一個依賴方(relying party)係 getvela.app 嘅頁面。 呢一條規則,決定咗邊一種「自己行一份」對你有用。

做 Chrome 擴充功能——呢個先係配合你現有錢包該用嗰種。 無論呢個資料夾由邊度嚟, 擴充功能嘅依賴方都係 getvela.app,所以你現有嘅鎖匙喺入面簽得到,而行緊嘅代碼 正正係你載入並檢查過嗰個資料夾。

  1. 打開 chrome://extensions,開啟開發人員模式
  2. 載入解封裝項目,揀 app-web/clearsigning 資料夾。
  3. 工具列上面嘅圖示會喺新分頁打開呢個頁面。

做你自己網域上面、或者 localhost 上面嘅一個頁面。 用 HTTP(S) 提供服務嗰陣, 呢個頁面嘅依賴方係佢自己嘅主機名——所以佢用得到註冊喺嗰個主機名下嘅鎖匙, 而唔係註冊喺 getvela.app 下嘅鎖匙。咁令佢好適合將成套流程由頭到尾行一次、 行桌面端嘅流程,以及幫一個鎖匙就開喺你自己網域下嘅錢包簽名。佢唔係一種幫現有 getvela.app 錢包簽名嘅方法。

cd app-web/clearsigning
python3 -m http.server 8080   # → http://localhost:8080

應用裡面所有路徑都係相對嘅,所以擺喺現有主機嘅一個子目錄都得;直接由磁碟打開 index.htmlfile://)都可以四圍睇吓——嗰種情況冇來源,亦冇依賴方, 乜都簽唔到。

佢喺簽名之前會做啲乜

  • 佢自己解呢筆交易。 呢個調用做乜、畀邊個、幾多錢,全部由 calldata 度讀出嚟 ——包括批次交易裡面嵌住嘅調用。
  • 佢淨係簽自己計出嚟嘅摘要。 EIP-191、EIP-712、SafeOp 同 SafeMessage 嘅摘要 全部喺頁面度計,並同 vela-core——錢包用嘅同一份代碼——對拍。計唔到嘅摘要就係 拒簽,而唔係簽一個。
  • 佢檢查呢筆交易就係被請求嗰一筆。 網站請求嗰個調用,必須真係喺被簽嘅操作入面。
  • 佢拒絕無限額度嘅授權。 唔係警告——係拒絕,仲會話你知應該點做。
  • 佢睇唔明嘅時候會講出嚟, 而唔係攞一段自己都擔唔起責任嘅友善摘要頂住。
  • 佢顯示帳戶嘅地址同識別圖案, 而唔顯示由請求方提供嘅收款方名。凡係請求方 控制得到嘅嘢,要麼攞走,要麼明確標示成「呢個係佢話嘅」。

佢特登冇啲乜

  • 冇任何編輯器。 請求一到就定死:你要麼簽,要麼唔簽。費用選擇器或者額度編輯器 都會重寫 calldata,而嗰樣正正係呢個頁面要防嗰種病。
  • 開唔到鎖匙。 簽名頁冇建立通行密鑰嘅能力。開一把新鎖匙,等於開一個唔同嘅帳戶。
  • 唔發任何網絡請求。 冇嘢要攞,亦即係冇嘢俾人截。

一個請求點樣去到佢度

請求方通道
同一個瀏覽器入面嘅一個頁面postMessage
同一個瀏覽器入面嘅頁面,送去擴充功能擴充功能連接埠
同一部機上面嘅桌面應用URL 片段 + 回環回呼
一部電話或者另一部電腦低功耗藍牙(協定已實作;射頻部分未喺真機測過)

線上格式、摘要演算法,同埋一張「畫面上每一項由邊度嚟」嘅對照表,都喺代碼隔籬嘅 PROTOCOL.md 入面。

幾時應該用佢

由呢個帳戶開始放住你輸唔起嘅錢嗰日起——而且由嗰日之後,每一次簽名都用佢。唔止 大額嘅時候:一筆好細嘅授權,就可能交出足以掏空個帳戶嘅權限。一個淨係喺特別場合先 攞出嚟嘅簽名習慣,到真正需要佢嗰日,其實根本唔喺位。