誰開啟了曾經只有 Metamask 錢包可用的 DeFi 世界?一文讀懂 Wallet Connect 工作原理

原文標題:《一文讀懂 WalletConnect》

作者:王榮強

文章概覽

  • WalletConnect 能干什么
  • WalletConnect 的市場支持情況
  • WalletConnect 消息通訊工作原理
  • WalletConnect 消息安全如何保障
  • WalletConnect 如何快速接入推送

01 WalletConnect 能干什么

它是⼀個基于⼆維碼建立連接的基礎通訊設施。你可以在它的基礎上去建⽴各種交互,它默認的交互協議都是與以太坊的交互,當然你也可以做能夠想象到的各種事,可以不只局限于 Dapp 通訊交互,如果你把默認的以太坊協議改掉,也意味著你將與其他⽀持 WalletConnect 錢包、Dapp 脫離關系,互不兼容。

現在出現了很多針對電腦這種大屏幕的 Dapp 應用,在 WalletConnect 沒有出現之前,必須使用Chrome 插件或者桌面端錢包來授權操作,這讓原本使用移動端錢包的用戶操作和使用習慣出現了割裂感,還需另外操作下載插件或錢包,再將私鑰導⼊進去,很麻煩,

02 WalletConnect 的市場支持情況

最近較為常見的錢包都在支持,比如:

  • imToken
  • TokenPocket
  • 麥子錢包
  • Trust Wallet

03 WalletConnect 消息通訊工作原理

//WalletConnect 建立連接原理

Topic 名詞解釋:文本意思為“主題”,在 WalletConnect 中錢包端與 Dapp 端各有⼀個 Topic 主題,讓對方訂閱,這樣就形成了⼀個可以相互通信的通道。

  1. Dapp 端與中繼服務器建立 Socket 連接;
  2. Dapp 端⽣成 Dapp ClientID(監聽該 Topic 會得到發送給 Dapp 的消息),Dapp Topic(監聽該Topic 會得到 Dapp 發出的登陸請求),并訂閱 Dapp ClientID;
  3. Dapp 端向中繼服務器發送 Topic 為 Dapp Topic 的資訊,并攜帶 Dapp ClientID 資訊;
  4. Dapp 端展示⼆維碼包含 Dapp Topic 資訊,中繼服務器的地址,密碼;
  5. 錢包端掃描 Dapp 端的⼆維碼,解析出⼆維碼資訊獲得 Dapp Topic,中繼服務器地址,密碼;
  6. 錢包端與中繼服務器建立socket 連接,然后產生 Wallet PeerID(監聽該 Topic 可以獲得發送給錢包端的消息),并訂閱 Dapp Topic 和 Wallet PeerID ;
  7. 接下來錢包端將接收到中繼服務器轉發過來的 Dapp 的登陸請求;
  8. 錢包端處理是否同意 Dapp 的登陸,發送 Topic 為 Dapp ClientID 的消息,并把處理結果和Wallet PeerID 的資訊傳遞回去;
  9. 此時連接建立成功,如果「Dapp」想給「錢包端」發送消息,則發送 Topic 為 Wallet PeerID 的資訊即可;
  10. 如果「錢包端」想給「Dapp」發送消息,則發送 Topic 為 Dapp ClientID 的資訊即可,

錢包端 Topic 和 Dapp 端 Topic 兩方共同組成了 Session,WalletConnect 的 Session 生命周期才是 Dapp 與錢包雙方建立的連接的生命周期,WebSocket 只是它的“通訊⼯具”,WebSocket 的斷開不代表此次與錢包的連接斷開,

04 WalletConnect 通訊工作原理

  • WalletConnect 只是⼀套通訊協議,雙⽅通信什么資訊都可以;
  • WalletConnect 默認通過 WebHook 的⽅式來⽀持推送服務,你可以在⼿機 App 沒有打開的情況下來通知⽤戶處理資訊;
  • 如果有⼀方 A 斷開 Socket 連接,另⼀⽅ B 發送消息會暫存在中繼服務中,當下⼀次 A 與中繼服務器建⽴ Socket 連接,并訂閱相關的 Topic,才會將中繼服務暫存的消息發送給 A,

05 WalletConnect 消息安全如何保障

  1. 使用 AES-256 對稱加密來加密通訊的資訊,HMAC-SHA256 做 Hash 簽名;
  2. Dapp 端⽣成的⼆維碼中包含對稱加密的密碼,⼿機端掃描該⼆維碼獲得密碼,所以 Dapp ⼆維碼不會過網傳遞,

06 WalletConnect 如何快速接入推送

//底層做支持的技術 WebHook

  • WebHook 是⼀種 HTTP 回調:某些條件下觸發的 HTTP POST 請求;
  • WalletConnect 的中繼服務中也有這個接受 WebHook URL 的 API 接⼝;
  • WalletConnect 單獨提供了 Firebase 推送服務。
  1. 消息接收方將⼀個 URL 和想接收的消息發送給消息發送⽅;
  2. 消息發送方達成⼀定的條件,就會去調⽤ 消息接收⽅的 URL,來通知消息接收方接收消息,

//WalletConnect 推送使⽤流程

  1. ⼿機端收到 Dapp 的登陸請求,⼿機端如果同意登陸請求,可以使⽤ Topic Dapp ClientID 和Firebase ID 向「推送服務」訂閱消息;
  2. 「推送服務」收到 Topic 會繼續向「中繼服務」發送 WebHook 訂閱 Topic;
  3. 如果「中繼服務器」發現「推送服務」訂閱的 Topic 有資訊,它就會通知「推送服務」;
  4. 「推送服務」找到訂閱相關 Topic 的 fitebase ID 發起推送,

07 總結

WalletConnect 是⼀種通過掃描 QR 碼使⽤端到端加密技術將桌⾯ DApp 連接到移動設備的開放性協議,它開啟了整個曾經只有Metamask 錢包可⽤的 DApps 世界。⽤戶可以在不損害其私鑰安全的情況下與任何 DApp 交互,并能在其移動設備上收到通知,簽字同意任何交易請求,

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧