feat(@desktop/walletconnect): aligning namespaces with WalletConnect v2.0 protocol
Closes: #12825
This commit is contained in:
parent
1e567e4cc2
commit
ce0dbe533b
|
@ -1,4 +1,4 @@
|
|||
import NimQml, logging, json
|
||||
import NimQml, strutils, logging, json
|
||||
|
||||
import backend/wallet_connect as backend
|
||||
|
||||
|
@ -70,22 +70,38 @@ QtObject:
|
|||
|
||||
proc respondSessionRequest*(self: Controller, sessionRequestJson: string, signedJson: string, error: bool) {.signal.}
|
||||
|
||||
proc sendTransaction(self: Controller, signature: string) =
|
||||
proc sendTransactionAndRespond(self: Controller, signature: string) =
|
||||
let finalSignature = singletonInstance.utils.removeHexPrefix(signature)
|
||||
var res: JsonNode
|
||||
let err = backend.sendTransaction(res, finalSignature)
|
||||
let err = backend.sendTransactionWithSignature(res, finalSignature)
|
||||
if err.len > 0:
|
||||
error "Failed to send tx"
|
||||
return
|
||||
let sessionResponseDto = res.toSessionResponseDto()
|
||||
self.respondSessionRequest($self.sessionRequestJson, sessionResponseDto.signedMessage, false)
|
||||
let txHash = res.getStr
|
||||
self.respondSessionRequest($self.sessionRequestJson, txHash, false)
|
||||
|
||||
proc buildRawTransactionAndRespond(self: Controller, signature: string) =
|
||||
let finalSignature = singletonInstance.utils.removeHexPrefix(signature)
|
||||
var res: JsonNode
|
||||
let err = backend.buildRawTransaction(res, finalSignature)
|
||||
if err.len > 0:
|
||||
error "Failed to send tx"
|
||||
return
|
||||
let txHash = res.getStr
|
||||
self.respondSessionRequest($self.sessionRequestJson, txHash, false)
|
||||
|
||||
proc finishSessionRequest(self: Controller, signature: string) =
|
||||
let requestMethod = getRequestMethod(self.sessionRequestJson)
|
||||
if requestMethod == RequestMethod.SendTransaction:
|
||||
self.sendTransaction(signature)
|
||||
self.sendTransactionAndRespond(signature)
|
||||
elif requestMethod == RequestMethod.SignTransaction:
|
||||
self.buildRawTransactionAndRespond(signature)
|
||||
elif requestMethod == RequestMethod.PersonalSign:
|
||||
self.respondSessionRequest($self.sessionRequestJson, signature, false)
|
||||
elif requestMethod == RequestMethod.EthSign:
|
||||
self.respondSessionRequest($self.sessionRequestJson, signature, false)
|
||||
elif requestMethod == RequestMethod.SignTypedData:
|
||||
self.respondSessionRequest($self.sessionRequestJson, signature, false)
|
||||
else:
|
||||
error "Unknown request method"
|
||||
|
||||
|
|
|
@ -6,7 +6,10 @@ type
|
|||
RequestMethod* {.pure.} = enum
|
||||
Unknown = "unknown"
|
||||
SendTransaction = "eth_sendTransaction"
|
||||
SignTransaction = "eth_signTransaction"
|
||||
PersonalSign = "personal_sign"
|
||||
EthSign = "eth_sign"
|
||||
SignTypedData = "eth_signTypedData"
|
||||
|
||||
## provided json represents a `SessionRequest`
|
||||
proc getRequestMethod*(jsonObj: JsonNode): RequestMethod =
|
||||
|
|
|
@ -16,7 +16,13 @@ rpc(wCSignMessage, "wallet"):
|
|||
address: string
|
||||
password: string
|
||||
|
||||
rpc(wCSendTransaction, "wallet"):
|
||||
rpc(wCBuildRawTransaction, "wallet"):
|
||||
signature: string
|
||||
|
||||
rpc(wCSendRawTransaction, "wallet"):
|
||||
rawTx: string
|
||||
|
||||
rpc(wCSendTransactionWithSignature, "wallet"):
|
||||
signature: string
|
||||
|
||||
rpc(wCPairSessionProposal, "wallet"):
|
||||
|
@ -40,9 +46,25 @@ proc signMessage*(res: var JsonNode, message: string, address: string, password:
|
|||
warn e.msg
|
||||
return e.msg
|
||||
|
||||
proc sendTransaction*(res: var JsonNode, signature: string): string =
|
||||
proc buildRawTransaction*(res: var JsonNode, signature: string): string =
|
||||
try:
|
||||
let response = wCSendTransaction(signature)
|
||||
let response = wCBuildRawTransaction(signature)
|
||||
return prepareResponse(res, response)
|
||||
except Exception as e:
|
||||
warn e.msg
|
||||
return e.msg
|
||||
|
||||
proc sendRawTransaction*(res: var JsonNode, rawTx: string): string =
|
||||
try:
|
||||
let response = wCSendRawTransaction(rawTx)
|
||||
return prepareResponse(res, response)
|
||||
except Exception as e:
|
||||
warn e.msg
|
||||
return e.msg
|
||||
|
||||
proc sendTransactionWithSignature*(res: var JsonNode, signature: string): string =
|
||||
try:
|
||||
let response = wCSendTransactionWithSignature(signature)
|
||||
return prepareResponse(res, response)
|
||||
except Exception as e:
|
||||
warn e.msg
|
||||
|
|
|
@ -243,6 +243,18 @@ Item {
|
|||
|
||||
WebChannel.id: "statusObject"
|
||||
|
||||
function bubbleConsoleMessage(type, message) {
|
||||
if (type === "warn") {
|
||||
console.warn(message)
|
||||
} else if (type === "debug") {
|
||||
console.debug(message)
|
||||
} else if (type === "error") {
|
||||
console.error(message)
|
||||
} else {
|
||||
console.log(message)
|
||||
}
|
||||
}
|
||||
|
||||
function sdkInitialized(error)
|
||||
{
|
||||
d.sdkReady = !error
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -180,10 +180,21 @@ window.wc = {
|
|||
|
||||
respondSessionRequest: function (topic, id, signature) {
|
||||
const response = formatJsonRpcResult(id, signature)
|
||||
return {
|
||||
result: window.wc.web3wallet.respondSessionRequest({ topic, response }),
|
||||
error: ""
|
||||
};
|
||||
|
||||
try {
|
||||
let r = window.wc.web3wallet.respondSessionRequest({ topic: topic, response: response });
|
||||
return {
|
||||
result: r,
|
||||
error: ""
|
||||
};
|
||||
|
||||
} catch (e) {
|
||||
wc.statusObject.bubbleConsoleMessage("error", `respondSessionRequest error: ${JSON.stringify(e, null, 2)}`)
|
||||
return {
|
||||
result: "",
|
||||
error: e
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
rejectSessionRequest: function (topic, id, error = false) {
|
||||
|
|
Loading…
Reference in New Issue