Dapp 用法
配置网络和配对客户端
首先确保正确配置了网络和客户端配对。
订阅Sign发布者
当你的Sign
实例收到来自对等体的请求时,它将发布相关事件。所以你应该设置订阅来处理它们。
Sign.instance.sessionDeletePublisher
.receive(on: DispatchQueue.main)
.sink { [unowned self] _ in
//handle event
}.store(in: &publishers)
以下发布者可供订阅:
public var sessionProposalPublisher: AnyPublisher<Session.Proposal, Never>
public var sessionRequestPublisher: AnyPublisher<Request, Never>
public var socketConnectionStatusPublisher: AnyPublisher<SocketConnectionStatus, Never>
public var sessionSettlePublisher: AnyPublisher<Session, Never>
public var sessionDeletePublisher: AnyPublisher<(String, Reason), Never>
public var sessionResponsePublisher: AnyPublisher<Response, Never>
public var sessionRejectionPublisher: AnyPublisher<(Session.Proposal, Reason), Never>
public var sessionUpdatePublisher: AnyPublisher<(sessionTopic: String, namespaces: [String : SessionNamespace]), Never>
public var sessionEventPublisher: AnyPublisher<(event: Session.Event, sessionTopic: String, chainId: Blockchain?), Never>
public var sessionUpdateExpiryPublisher: AnyPublisher<(sessionTopic: String, expiry: Date), Never>
连接客户端
- 为你的dApp准备约束最小需求的命名空间:
let methods: Set<String> = ["eth_sendTransaction", "personal_sign", "eth_signTypedData"]
let blockchains: Set<Blockchain> = [Blockchain("eip155:1")!, Blockchain("eip155:137")!]
let namespaces: [String: ProposalNamespace] = ["eip155": ProposalNamespace(chains: blockchains, methods: methods, events: [], extensions: nil)]
要了解更多关于名称空间的信息,请查看我们的specs。
- 你的应用程序应该生成一个配对URI并与钱包共享它。Uri可以显示为QR码,也可以通过通用链接发送。钱包在接收到URI后开始订阅会话建议。为了创建配对并发送会话提议,您需要调用以下命令:
let uri = try await Pair.instance.create()
try await Sign.instance.connect(requiredNamespaces: namespaces, topic: uri.topic)
###向钱包发送请求
一旦会话建立,sessionsettpublisher
将发布一个事件。你的dApp现在可以开始请求钱包了。
let method = "personal_sign"
let requestParams = AnyCodable(["0x4d7920656d61696c206973206a6f686e40646f652e636f6d202d2031363533333933373535313531", "0x9b2055d370f73ec7d8a03e965129118dc8f5bf83"])
let request = Request(topic: session.topic, method: method, params: requestParams, chainId: Blockchain(chainId)!)
try await Sign.instance.request(params: request)
当钱包响应sessionResponsePublisher
将发布一个事件,以便您可以验证响应.
其他
- 尝试我们的Example dApp,它是WalletConnectSwiftV2存储库的一部分。
- 使用XCode: Product -> Build Documentation: go to Product -> Build Documentation