Send a request to WalletConnect to get a pairing URI for Keeper Wallet.
let methods: Set<String> = [
"waves_signTransaction",
"waves_signTransactionPackage",
"waves_signOrder",
"waves_signMessage",
"waves_signTypedData"
]
// Set the chain ID: 'W' for Mainnet or 'T' for Testnet
let blockchains: Set<Blockchain> = [Blockchain("waves:T")!]
let namespaces: [String: ProposalNamespace] = [
"waves": ProposalNamespace(chains: blockchains, methods: methods, events: [])
]
let uri = try! await Pair.instance.create()
try! await Sign.instance.connect(
requiredNamespaces: namespaces,
topic: uri.topic
)
Step 6. Connect Keeper Wallet
Here's how it works:
Your app calls Keeper, specifying the callback URL in the request.
The Keeper Wallet app opens and prompts the user to connect.
Once the user confirms or cancels the connection, your app receives a callback.
let callback = "YOUR_LINK_OR_SCHEME"
var params: [String] = [];
let urlEncode = uri.absoluteString.addingPercentEncoding(withAllowedCharacters: .alphanumerics)
params.append("wcurl=\(urlEncode!)")
params.append("callback=\(callback)")
let query = params.joined(separator: "&")
let url = URL(string: "https://link.keeper-wallet.app/auth?\(query)")
UIApplication.shared.open(url)
The result of connecting comes to the listener:
Sign.instance.sessionSettlePublisher
.receive(on: DispatchQueue.main)
.sink { [unowned self] (session: Session) in
// Result handler
// print(session) to display the result in the console
}.store(in: &publishers)
Step 7. Sign a transaction/order/message
Here is how it works:
Your app sends a signing request via WalletConnect.
Your app calls Keeper, specifying the callback URL in the request.
The Keeper Wallet app opens and prompts the user to sign the transaction, order, or custom message.
Once the user confirms or cancels the request, your app receives a callback.
Transaction
Example:
let method = "waves_signTransaction"
let invokeJson = { YOUR_TX_PARAMS }
let requestParams = AnyCodable([invokeJson])
let request = Request(topic: currentSession!.topic, method: method, params: requestParams, chainId: blockchains.first!)
try! await Sign.instance.request(params: request)
Order
let method = "waves_signOrder"
let orderJson = { YOUR_ORDER_PARAMS }
let requestParams = AnyCodable([orderJson])
let request = Request(topic: currentSession!.topic, method: method, params: requestParams, chainId: blockchains.first!)
try! await Sign.instance.request(params: request)
Custom message
let method = "waves_signMessage"
let message = "YOUR_MESSAGE"
let requestParams = AnyCodable([message])
let request = Request(topic: currentSession!.topic, method: method, params: requestParams, chainId: blockchains.first!)
try! await Sign.instance.request(params: request)
Call Keeper Wallet
Specify topic and callback in the request.
let callback = "YOUR_LINK_OR_SCHEME"
var params: [String] = [];
params.append("topic=\(topic)")
params.append("callback=\(callback)")
let query = params.joined(separator: "&")
let url = URL(string: "https://link.keeper-wallet.app/wakeup?\(query)")
UIApplication.shared.open(url)
The result of signing the request comes to the listener:
Sign.instance.sessionResponsePublisher
.receive(on: DispatchQueue.main)
.sink { [unowned self] (response: Response) in
// Result handler
// print(response) to display the result in the console
}.store(in: &publishers)
To call Keeper Wallet, use the universal link. For the callback, a universal link or a must be defined for your app.