feat: watch transactions with new wallet API
This commit is contained in:
parent
2000018834
commit
6fd7142cb5
|
@ -36,6 +36,8 @@ type
|
||||||
ResolveEnsTaskArg = ref object of QObjectTaskArg
|
ResolveEnsTaskArg = ref object of QObjectTaskArg
|
||||||
ens: string
|
ens: string
|
||||||
uuid: string
|
uuid: string
|
||||||
|
WatchTransactionTaskArg = ref object of QObjectTaskArg
|
||||||
|
transactionHash: string
|
||||||
|
|
||||||
const sendTransactionTask: Task = proc(argEncoded: string) {.gcsafe, nimcall.} =
|
const sendTransactionTask: Task = proc(argEncoded: string) {.gcsafe, nimcall.} =
|
||||||
let arg = decode[SendTransactionTaskArg](argEncoded)
|
let arg = decode[SendTransactionTaskArg](argEncoded)
|
||||||
|
@ -165,6 +167,22 @@ proc resolveEns[T](self: T, slot: string, ens: string, uuid: string) =
|
||||||
)
|
)
|
||||||
self.status.tasks.threadpool.start(arg)
|
self.status.tasks.threadpool.start(arg)
|
||||||
|
|
||||||
|
const watchTransactionTask: Task = proc(argEncoded: string) {.gcsafe, nimcall.} =
|
||||||
|
let
|
||||||
|
arg = decode[WatchTransactionTaskArg](argEncoded)
|
||||||
|
response = status_wallet.watchTransaction(arg.transactionHash)
|
||||||
|
output = %* { "result": response }
|
||||||
|
arg.finish(output)
|
||||||
|
|
||||||
|
proc watchTransaction[T](self: T, slot: string, transactionHash: string) =
|
||||||
|
let arg = WatchTransactionTaskArg(
|
||||||
|
tptr: cast[ByteAddress](watchTransactionTask),
|
||||||
|
vptr: cast[ByteAddress](self.vptr),
|
||||||
|
slot: slot,
|
||||||
|
transactionHash: transactionHash
|
||||||
|
)
|
||||||
|
self.status.tasks.threadpool.start(arg)
|
||||||
|
|
||||||
QtObject:
|
QtObject:
|
||||||
type
|
type
|
||||||
WalletView* = ref object of QAbstractListModel
|
WalletView* = ref object of QAbstractListModel
|
||||||
|
@ -453,6 +471,10 @@ QtObject:
|
||||||
|
|
||||||
proc transactionSent(self: WalletView, txResult: string) {.slot.} =
|
proc transactionSent(self: WalletView, txResult: string) {.slot.} =
|
||||||
self.transactionWasSent(txResult)
|
self.transactionWasSent(txResult)
|
||||||
|
let jTxRes = txResult.parseJSON()
|
||||||
|
let txHash = jTxRes{"result"}.getStr()
|
||||||
|
if txHash != "":
|
||||||
|
self.watchTransaction("transactionWatchResultReceived", txHash)
|
||||||
|
|
||||||
proc sendTransaction*(self: WalletView, from_addr: string, to: string, assetAddress: string, value: string, gas: string, gasPrice: string, password: string, uuid: string) {.slot.} =
|
proc sendTransaction*(self: WalletView, from_addr: string, to: string, assetAddress: string, value: string, gas: string, gasPrice: string, password: string, uuid: string) {.slot.} =
|
||||||
self.sendTransaction("transactionSent", from_addr, to, assetAddress, value, gas, gasPrice, password, uuid)
|
self.sendTransaction("transactionSent", from_addr, to, assetAddress, value, gas, gasPrice, password, uuid)
|
||||||
|
@ -519,6 +541,13 @@ QtObject:
|
||||||
addresses.add(acc.address)
|
addresses.add(acc.address)
|
||||||
discard status_wallet.checkRecentHistory(addresses)
|
discard status_wallet.checkRecentHistory(addresses)
|
||||||
|
|
||||||
|
proc transactionWatchResultReceived(self: WalletView, watchResult: string) {.slot.} =
|
||||||
|
let wTxRes = watchResult.parseJSON()["result"].getStr().parseJson(){"result"}
|
||||||
|
if wTxRes.kind == JNull:
|
||||||
|
self.checkRecentHistory()
|
||||||
|
else:
|
||||||
|
discard #TODO: Ask Simon if should we show an error popup indicating the trx wasn't mined in 10m or something
|
||||||
|
|
||||||
proc getAccountBalanceSuccess*(self: WalletView, jsonResponse: string) {.slot.} =
|
proc getAccountBalanceSuccess*(self: WalletView, jsonResponse: string) {.slot.} =
|
||||||
let jsonObj = jsonResponse.parseJson()
|
let jsonObj = jsonResponse.parseJson()
|
||||||
self.status.wallet.update(jsonObj["address"].getStr(), jsonObj["eth"].getStr(), jsonObj["tokens"])
|
self.status.wallet.update(jsonObj["address"].getStr(), jsonObj["eth"].getStr(), jsonObj["tokens"])
|
||||||
|
|
Loading…
Reference in New Issue