llbartekll / WalletConnectSwiftV2

WalletConnect Swift SDK v2

Home Page:https://docs.walletconnect.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Wallet Connect v.2 - Swift

Swift implementation of WalletConnect v.2 protocol for native iOS applications.

Requirements

  • iOS 13
  • XCode 13
  • Swift 5

Usage

Responder

Responder client is usually a wallet.

Instantiate Client
let url = URL(string: "wss://relay.walletconnect.org")!
let options = WalletClientOptions(apiKey: String, name: String, isController: true, metadata: AppMetadata(name: String?, description: String?, url: String?, icons: [String]?), relayURL: url)
let client = WalletConnectClient(options: options)

The controller client will always be the "wallet" which is exposing blockchain accounts to a "dapp" and therefore is also in charge of signing.

After instantiation of a client set its delegate.

Pair Clients

Pair client with a uri generated by the proposer client.

let uri = "wc:..."
try! client.pair(uri: uri)

Approve Session

Sessions are always proposed by the Proposer client so Responder client needs either reject or approve a session proposal.

class ClientDelegate: WalletConnectClientDelegate {
...
    func didReceive(sessionProposal: SessionType.Proposal) {
        client.approve(proposal: proposal)
    }
...

or

    func didReceive(sessionProposal: SessionType.Proposal) {
        client.reject(proposal: proposal, reason: Reason)
    }

Handle Delegate methods

    func didSettle(session: SessionType.Settled) {
        // handle settled session
    }
    func didReceive(sessionProposal: SessionType.Proposal) {
        // handle session proposal
    }
    func didReceive(sessionRequest: SessionRequest) {
        // handle session request
    }

JSON-RPC Payloads

Receive

You can parse JSON-RPC Requests received from "Requester" in didReceive(sessionRequest: SessionRequest) delegate function.

Request parameters can be type casted based on request method as below:

            let params = try! sessionRequest.request.params.get([EthSendTransaction].self)
Respond
            let jsonrpcResponse = JSONRPCResponse<AnyCodable>(id: request.id, result: AnyCodable(responseParams))
            client.respond(topic: sessionRequest.topic, response: jsonrpcResponse)

Installation

Swift Package Manager

Add .package(url:_:) to your Package.swift:

dependencies: [
    .package(url: "https://github.com/WalletConnect-Labs/WalletConnectSwiftV2", .branch("main")),
],

Example App

open Example/ExampleApp.xcodeproj

License

LGPL-3.0

About

WalletConnect Swift SDK v2

https://docs.walletconnect.com

License:GNU Lesser General Public License v3.0


Languages

Language:Swift 99.8%Language:Shell 0.2%