文章概览

  • 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 交互,并能在其移动设备上收到通知,签字同意任何交易请求。

来源丨BitTribeLab   作者丨王荣强

一文读懂 WalletConnect相关推荐

  1. 从实验室走向大众,一文读懂Nanopore测序技术的发展及应用

    关键词/Nanopore测序技术    文/基因慧 随着基因测序技术不断突破,二代测序的发展也将基因检测成本大幅降低.理想的测序方法,是对原始DNA模板进行直接.准确的测序,消除PCR扩增带来的偏差, ...

  2. 一文读懂Faster RCNN

    来源:信息网络工程研究中心本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络. 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在20 ...

  3. 福利 | 一文读懂系列文章精选集发布啦!

    大数据时代已经悄然到来,越来越多的人希望学习一定的数据思维和技能来武装自己,虽然各种介绍大数据技术的文章每天都扑面而来,但纷繁又零散的知识常常让我们不知该从何入手:同时,为了感谢和回馈读者朋友对数据派 ...

  4. ​一文读懂EfficientDet

    一文读懂EfficientDet. 今年年初Google Brain团队在 CVPR 2020 上发布了 EfficientDet目标检测模型, EfficientDet是一系列可扩展的高效的目标检测 ...

  5. 一文读懂序列建模(deeplearning.ai)之序列模型与注意力机制

    https://www.toutiao.com/a6663809864260649485/ 作者:Pulkit Sharma,2019年1月21日 翻译:陈之炎 校对:丁楠雅 本文约11000字,建议 ...

  6. AI洞观 | 一文读懂英特尔的AI之路

    AI洞观 | 一文读懂英特尔的AI之路 https://mp.weixin.qq.com/s/E9NqeywzQ4H2XCFFOFcKXw 11月13日-14日,英特尔人工智能大会(AIDC)在北京召 ...

  7. 一文读懂机器学习中的模型偏差

    一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...

  8. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  9. 一文读懂你该了解的5G知识:现在别买5G手机

    来源: 腾讯科技 2019年是中国全力布局5G的一年:三大运营商纷纷搭建基站,手机厂商发布5G手机,部分城市已经开启了5G测试--在电信日这天,腾讯科技联合知乎推出重磅策划,聚焦和5G相关的小知识,精 ...

最新文章

  1. [leetcode]Surrounded Regions @ Python
  2. 世界上第一个程序员竟然是女性,难以置信......
  3. 谈谈在.NET Core中使用Redis和Memcached的序列化问题
  4. 电脑遇到脱机状态怎么解除?
  5. [中级01]java为什么能跨平台,而C\C++语言不能跨平台
  6. stringbuffer java API_java API中Object,String,Stringbuffer,StringBuilder的总结
  7. C++STL之整理算法
  8. 阿里云吴翰清:我对计算的理解
  9. git上传提示鉴权失败的问题
  10. 【华为OD机试真题 JS】统计射击比赛成绩
  11. 用Gitolite 构建 Git 服务器
  12. Exp9 Web安全基础实践 20164323段钊阳
  13. Python plot() 画图标记 marker
  14. 电脑处理器多核心好还是高频率好?
  15. android手机刷新率,终于知道为何苹果手机60Hz刷新率,却比大部分安卓的120Hz更强了...
  16. android 极光推送混淆,android 混淆文件的编写(proguard-rules.pro)
  17. 什么因素让唐僧是一个领导,而孙悟空只是一个打工者呢?
  18. spwm调制c语言程序,SPWM基本原理详解(图文并茂+公式推导+C程序实现)
  19. netty 系列之:netty 中常用的字符串编码解码器
  20. 安保巡更室内外定位系统解决方案

热门文章

  1. PostOffice
  2. hevc编码merge 模式
  3. Prometheus监控系统:监控交换机流量、状态等(snmp_exporter)
  4. el-form组件提示英文问题,改成中文
  5. clip和clip-path inset
  6. Linux在安装文件时,yum基本配置出现错误
  7. 棋牌游戏开发的风险有哪些?
  8. 快速选取单元格的10种方法。
  9. WIFI认证WPA3
  10. 服务器怎么买,腾讯云服务器购买三种流程介绍