随着Web3世界的蓬勃发展,加密钱包已成为我们进入这个数字新世界的“钥匙”,而在与各种DApp(去中心化应用)交互时,“扫码授权”无疑是最高频也最基础的操作之一,这短短几秒钟的“扫一扫”,背后究竟隐藏着怎样的技术原理和安全机制呢?本文将为你详细拆解Web3钱包扫码授权的全过程,让你明明白白地授权,安安心心地交互。

什么是Web3钱包扫码授权

Web3钱包扫码授权是指用户通过其加密钱包(如MetaMask、Trust Wallet、imToken等)的移动端App或硬件钱包的配套App,扫描DApp页面显示的二维码,从而完成对DApp特定操作请求的快速身份验证和权限授予的过程。

它类似于Web2世界的“扫码登录”,但核心目的不同:Web2扫码登录主要用于身份识别,而Web3扫码授权的核心是数字资产的操作权限管理和交易签名

扫码授权的底层原理:连接与签名

要理解扫码授权,首先需要了解Web3交互的两个核心概念:连接(Connect)授权/签名(Authorize/Sign)

  1. 连接(Connect)

    • 当你在DApp页面上点击“连接钱包”时,DApp会向你的钱包发送一个连接请求。
    • 这个请求通常包含了DApp的域名(origin)图标(icon)链ID(chainId) 等基本信息。
    • 你在钱包App中确认连接后,钱包会生成一个加密的session(会话),并返回一个连接成功的信息给DApp,DApp知道了你的钱包地址,但还无法进行任何资产操作。
  2. 授权/请求(Request)

    • 连接成功后,DApp如果想执行某些操作(如转账、调用某个合约函数、获取你的账户信息等),会向你的钱包发送一个具体的请求。
    • 这个请求会包含操作的详细信息,
      • eth_sendTransaction:发起一笔转账交易,包含接收方地址、金额、gas费等。
      • eth_sign:对一段消息进行签名,用于身份验证。
      • wallet_switchEthereumChain:请求切换到其他区块链网络。
      • 自定义的合约方法调用。
  3. 扫码:移动端与PC端/网页端的桥梁

    • 很多时候,我们可能是在电脑浏览器上访问DApp,而主要的私钥和签名操作在更安全的移动端钱包App中进行。
    • DApp(在PC端)会生成一个包含上述请求信息的二维码(QR Code),这个二维码本质上是一个编码后的URL或数据对象,通常遵循特定的协议(如 wc:walletconnect:,WalletConnect协议是主流实现方式之一)。
    • 用户打开手机钱包App,使用内置的扫码功能扫描该二维码。
    • 钱包App解析二维码内容,获取请求的详细信息,并在移动端界面展示给用户。
  4. 签名(Sign)与广播(Broadcast)

    • 用户在钱包App中仔细核对请求的详细信息(如转账金额、接收地址、合约地址等),确认无误后,点击“确认”或“签名”。
    • 钱包App使用用户存储在设备中的私钥对这笔交易或消息进行数字签名,签名是私钥对交易数据哈希值的加密操作,确保了交易的真实性和不可否认性。
    • 签名完成后,钱包App会将签名后的交易数据通过安全的通道(如WalletConnect协议的Relay服务器)返回给DApp。
    • DApp再将这笔已签名的交易广播到区块链网络上,等待矿工打包确认。

扫码授权的详细步骤(以WalletConnect为例)

以目前广泛使用的WalletConnect协议为例,扫码授权的典型步骤如下:

  1. DApp发起连接请求

    • 用户在PC浏览器上打开支持Web3的DApp(如某个NFT市场或DeFi协议)。
    • 点击“连接钱包”按钮。
  2. DApp生成二维码

    DApp通过WalletConnect SDK,创建一个连接会话,并生成一个包含会话URL(通常是一个包含连接参数的二维码编码字符串)的二维码,显示在网页上。随机配图