原文標題:《一文讀懂 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 主題,讓對方訂閱,這樣就形成了⼀個可以相互通信的通道。
Dapp 端與中繼伺服器建立 Socket 連接;
Dapp 端⽣成 Dapp ClientID(監聽該 Topic 會得到發送給 Dapp 的消息),Dapp Topic(監聽該Topic 會得到 Dapp 發出的登陸請求),並訂閱 Dapp ClientID;
Dapp 端向中繼伺服器發送 Topic 為 Dapp Topic 的信息,並攜帶 Dapp ClientID 信息;
Dapp 端展示⼆維碼包含 Dapp Topic 信息,中繼伺服器的地址,密碼;
錢包端掃描 Dapp 端的⼆維碼,解析出⼆維碼信息獲得 Dapp Topic,中繼伺服器地址,密碼;
錢包端與中繼伺服器建立socket 連接,然後產生 Wallet PeerID(監聽該 Topic 可以獲得發送給錢包端的消息),並訂閱 Dapp Topic 和 Wallet PeerID ;
接下來錢包端將接收到中繼伺服器轉發過來的 Dapp 的登陸請求;
錢包端處理是否同意 Dapp 的登陸,發送 Topic 為 Dapp ClientID 的消息,並把處理結果和Wallet PeerID 的信息傳遞迴去;
此時連接建立成功,如果「Dapp」想給「錢包端」發送消息,則發送 Topic 為 Wallet PeerID 的信息即可;
如果「錢包端」想給「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 消息安全如何保障
使用 AES-256 對稱加密來加密通訊的信息,HMAC-SHA256 做 Hash 簽名;
Dapp 端⽣成的⼆維碼中包含對稱加密的密碼,⼿機端掃描該⼆維碼獲得密碼,所以 Dapp ⼆維碼不會過網傳遞。
06 WalletConnect 如何快速接入推送
//底層做支持的技術 WebHook
WebHook 是⼀種 HTTP 回調:某些條件下觸發的 HTTP POST 請求;
WalletConnect 的中繼服務中也有這個接受 WebHook URL 的 API 接⼝;
WalletConnect 單獨提供了 Firebase 推送服務。
消息接收方將⼀個 URL 和想接收的消息發送給消息發送⽅;
消息發送方達成⼀定的條件,就會去調⽤ 消息接收⽅的 URL,來通知消息接收方接收消息。
//WalletConnect 推送使⽤流程
⼿機端收到 Dapp 的登陸請求,⼿機端如果同意登陸請求,可以使⽤ Topic Dapp ClientID 和Firebase ID 向「推送服務」訂閱消息;
「推送服務」收到 Topic 會繼續向「中繼服務」發送 WebHook 訂閱 Topic;
如果「中繼伺服器」發現「推送服務」訂閱的 Topic 有信息,它就會通知「推送服務」;
「推送服務」找到訂閱相關 Topic 的 fitebase ID 發起推送。
07 總結
WalletConnect 是⼀種通過掃描 QR 碼使⽤端到端加密技術將桌⾯ DApp 連接到移動設備的開放性協議。它開啟了整個曾經只有Metamask 錢包可⽤的 DApps 世界。⽤戶可以在不損害其私鑰安全的情況下與任何 DApp 交互,並能在其移動設備上收到通知,簽字同意任何交易請求。
冷萃財經原創,作者:awing,轉載請註明出處:https://www.lccjd.top/2021/07/12/%e8%b0%81%e5%bc%80%e5%90%af%e4%ba%86%e6%9b%be%e7%bb%8f%e5%8f%aa%e6%9c%89-metamask-%e9%92%b1%e5%8c%85%e5%8f%af%e7%94%a8%e7%9a%84-defi-%e4%b8%96%e7%95%8c%ef%bc%9f%e4%b8%80%e6%96%87%e8%af%bb%e6%87%82-w-2/?variant=zh-tw
文章評論