您的位置:

全面解析WalletConnect

在加密货币的世界里,我们需要一种方式让我们在不牺牲数据安全性的前提下与分散式应用(DApps)进行交互。这就是WalletConnect所提供的服务:它是一个开源协议,用于创建安全的通信渠道,使移动钱包与DApps之间能够安全地互相通信。本文将探讨WalletConnect的核心机制,以及使用它来连接不同的应用程序的方法。

一、基本原理

从实现的角度来看,WalletConnect可分为两部分:移动钱包应用程序和DApps。

首先,移动钱包应用程序需要具备以下两个功能:

  • 建立一个加密通道并在移动设备上运行
  • 提供签名等加密操作功能

然后,DApps需要做到以下几点:

  • 向用户展示移动钱包客户端的二维码
  • 等待移动钱包客户端连接和加密通道等服务
  • 可以与移动钱包客户端进行安全通信进行加密操作

下面是一个示例流程:

当用户想要与DApps进行交互时,DApps会向用户展示一个二维码。用户需要在钱包客户端扫描这个二维码以连接DApps。连接建立后,会自动启动一个加密通道,允许DApps通过该通道向移动钱包客户端发送请求以进行签名和其他加密操作。

二、使用WalletConnect连接DApps应用程序

下面是一个基本的集成流程,介绍如何使用WalletConnect将DApps应用程序与移动钱包应用程序连接到一起。

WaleltConnect API

WalletConnect SDK提供了一个易于使用的JavaScript API来完成与手机钱包应用程序的连接。为了使用WalletConnect,DApps应用程序需要使用WalletConnect的服务器。Web3提供了一个默认的服务器URL作为资产,但可以使用自己的服务器进行连接。

// Create a WalletConnect client instance
const walletConnector = new WalletConnect({
  bridge: "https://bridge.walletconnect.org", // Overriden by provided WC server. Use default for testnet.
})

连接移动钱包

当用户通过DApps应用程序触发请求并向移动钱包发送二维码时,移动钱包应用程序会尝试打开一个新的连接。以下是如何等待来自手机钱包的连接请求并连接的方法。

 // Subscribe to connect
walletConnector.on("connect", (error, payload) => {
  if (error) {
    throw error
  }

  // Get provided accounts and chainId from payload
  const { accounts, chainId } = payload.params[0]

  // TODO: Handle session connection
})

移动钱包签名

如果我们想要在移动钱包之间发送请求并获取签名,我们可以使用WalletConnect API。我们可以使用该API发送请求,而不必考虑与移动钱包之间的具体通信方式。

// Send transaction
walletConnector.sendTransaction({
  from: accounts[0],
  to: "0x36791424a33A0Ed45b21aE95c91fb5EEAe20DdE1",
  value: "0x1500",
  gas: "0x27100",
  chainId: 1,
},
(error, hash) => {
  if (error) {
     throw error
  }

  // Transaction hash created
})

三、集成WalletConnect SDK

如果您想要在您的应用程序中支持WalletConnect的连接,我们建议您使用WalletConnect SDK来使DApps应用程序从我们的服务器端进行连接。以下是如何集成SDK。

WalletConnect Typescript SDK

WalletConnect SDK提供了多种语言环境版本,包括TypeScript,可以提供自动完成和类型类型检查的优点。

npm i -S @walletconnect/client
npm i -S @walletconnect/types

创建session

创建一个新会话,以便用户在钱包上扫描二维码以连接DApps应用程序。

import WalletConnectClient from "@walletconnect/client"
import { IClientMeta } from "@walletconnect/types"

const clientMeta: IClientMeta = {
  description: "My DApp on Web",
  url: "https://my-dapp.com",
  icons: ["https://my-dapp.com/favicon.ico"],
  name: "My DApp",
}

const walletConnector = new WalletConnectClient({ clientMeta })

// After wallet has connected, you can start sending requests
walletConnector.on("connect", (error, payload) => {
  if (error) {
    throw error
  }

  // Get accounts and chainId from payload
  const { accounts, chainId } = payload.params[0]

  // TODO: Take some action with session information
})

关闭连接

当您的应用程序完成其工作时,您应该从WalletConnect服务器中断连接,以释放资源。

walletConnector.killSession()

四、结论

通过使用WalletConnect,您可以轻松地将移动钱包与您的DApps应用程序连接在一起,提供安全而高效的数据通信渠道,使用户的加密数据得到最大程度的保护,同时保证不牺牲实现效率。将WalletConnect集成到DApps应用程序中并将移动钱包连接到您的应用程序中,并确保了客户端的隐私和数据的最大化保护,让用户参与加密经济生态体系更加轻松、便捷、安全。