跳到主要内容

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>

连接客户端

  1. 为你的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

  1. 你的应用程序应该生成一个配对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将发布一个事件,以便您可以验证响应.

其他