fix(@desktop/wallet): Fix for wrong link is generated when transaction is done on testnet

fixes #8681
This commit is contained in:
Khushboo Mehta 2022-12-08 16:56:02 +01:00 committed by Khushboo-dev-cpp
parent 5b423a6dbd
commit 9825a48eec
17 changed files with 84 additions and 59 deletions

View File

@ -41,7 +41,7 @@ proc getNetwork*(self: Controller): NetworkDto =
proc init*(self: Controller) =
self.events.on(PROVIDER_SIGNAL_ON_POST_MESSAGE) do(e:Args):
let args = OnPostMessageArgs(e)
self.delegate.onPostMessage(args.payloadMethod, args.result)
self.delegate.onPostMessage(args.payloadMethod, args.result, args.chainId)
self.events.on(SIGNAL_WALLET_ACCOUNT_NETWORK_ENABLED_UPDATED) do(e: Args):
self.delegate.updateNetwork(self.getNetwork())

View File

@ -27,7 +27,7 @@ method postMessage*(self: AccessInterface, payloadMethod: string, requestType: s
method ensResourceURL*(self: AccessInterface, ens: string, url: string): (string, string, string, string, bool) =
raise newException(ValueError, "No implementation available")
method onPostMessage*(self: AccessInterface, payloadMethod: string, result: string) {.base.} =
method onPostMessage*(self: AccessInterface, payloadMethod: string, result: string, chainId: string) {.base.} =
raise newException(ValueError, "No implementation available")
method viewDidLoad*(self: AccessInterface) {.base.} =

View File

@ -71,8 +71,8 @@ method viewDidLoad*(self: Module) =
method postMessage*(self: Module, payloadMethod: string, requestType: string, message: string) =
self.controller.postMessage(payloadMethod, requestType, message)
method onPostMessage*(self: Module, payloadMethod: string, result: string) =
self.view.postMessageResult(payloadMethod, result)
method onPostMessage*(self: Module, payloadMethod: string, result: string, chainId: string) =
self.view.postMessageResult(payloadMethod, result, chainId)
method ensResourceURL*(self: Module, ens: string, url: string): (string, string, string, string, bool) =
return self.controller.ensResourceURL(ens, url)

View File

@ -70,7 +70,7 @@ QtObject:
proc getHost*(self: View, url: string): string {.slot.} =
result = url_host(url)
proc postMessageResult*(self: View, payloadMethod: string, result: string) {.signal.}
proc postMessageResult*(self: View, payloadMethod: string, result: string, chainId: string) {.signal.}
proc postMessage*(self: View, payloadMethod: string, requestType: string, message: string) {.slot.} =
self.delegate.postMessage(payloadMethod, requestType, message)

View File

@ -2,6 +2,8 @@ import NimQml, Tables, strutils, strformat
import ./item
const EXPLORER_TX_PREFIX* = "/tx/"
type
ModelRole* {.pure.} = enum
ChainId = UserRole + 1,
@ -182,3 +184,9 @@ QtObject:
if item.getLayer() == 1 and item.getIsTest() == testNet:
return item.getChainId()
return 0
proc getBlockExplorerURL*(self: Model, chainId: int): string {.slot.} =
for item in self.items:
if(item.getChainId() == chainId):
return item.getBlockExplorerURL() & EXPLORER_TX_PREFIX
return ""

View File

@ -1,5 +1,7 @@
import ../../common/utils
const WEB3_SEND_ASYNC = "web3-send-async-read-only"
type
PostMessageTaskArg = ref object of QObjectTaskArg
payloadMethod: string
@ -9,9 +11,13 @@ type
const postMessageTask: Task = proc(argEncoded: string) {.gcsafe, nimcall.} =
let arg = decode[PostMessageTaskArg](argEncoded)
var chainId = ""
if(arg.requestType == WEB3_SEND_ASYNC):
chainId = $parseJson(arg.message)["payload"]["chainId"]
let result = status_go_provider.providerRequest(arg.requestType, arg.message).result
let responseJson = %* {
"payloadMethod": arg.payloadMethod,
"result": $result,
"chainId": chainId
}
arg.finish(responseJson)

View File

@ -19,6 +19,7 @@ type
OnPostMessageArgs* = ref object of Args
payloadMethod*: string
result*: string
chainId*: string
QtObject:
type Service* = ref object of QObject
@ -55,6 +56,7 @@ QtObject:
var data = OnPostMessageArgs()
discard responseObj.getProp("payloadMethod", data.payloadMethod)
discard responseObj.getProp("result", data.result)
discard responseObj.getProp("chainId", data.chainId)
self.events.emit(PROVIDER_SIGNAL_ON_POST_MESSAGE, data)
@ -67,4 +69,4 @@ QtObject:
requestType: requestType,
message: message
)
self.threadpool.start(arg)
self.threadpool.start(arg)

View File

@ -191,9 +191,8 @@ StatusSectionLayout {
_internal.signingError.text = message
return _internal.signingError.open()
}
showToastMessage: function(result) {
// TODO: WIP under PR https://github.com/status-im/status-desktop/pull/4274
let url = `${WalletStore.getEtherscanLink()}/${result}`;
showToastMessage: function(result, chainId) {
let url = "%1/%2".arg(WalletStore.getEtherscanLink(chainId)).arg(result)
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",

View File

@ -10,11 +10,10 @@ QtObject {
property string defaultCurrency: walletSection.currentCurrency
property string signingPhrase: walletSection.signingPhrase
function getEtherscanLink() {
return profileSectionModule.ensUsernamesModule.getEtherscanLink()
function getEtherscanLink(chainID) {
return networksModule.all.getBlockExplorerURL(chainID)
}
function switchAccountByAddress(address) {
browserSectionCurrentAccount.switchAccountByAddress(address)
walletSectionTransactions.setModel(address)

View File

@ -41,7 +41,7 @@ QtObject {
}
if (isTx) {
showToastMessage(responseObj.result.result)
showToastMessage(responseObj.result.result, chainId)
}
} catch (e) {

View File

@ -162,14 +162,16 @@ Item {
releaseEnsModal.sendingError.text = response.result
return releaseEnsModal.sendingError.open()
}
usernameReleased(username);
let url = `${releaseEnsModal.store.getEtherscanLink()}/${response.result}`;
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
for(var i=0; i<releaseEnsModal.bestRoutes.length; i++) {
usernameReleased(username);
let url = "%1/%2".arg(releaseEnsModal.store.getEtherscanLink(releaseEnsModal.bestRoutes[i].fromNetwork.chainId)).arg(response.result)
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
}
} catch (e) {
console.error('Error parsing the response', e)
}

View File

@ -60,14 +60,14 @@ Item {
Component {
id: transactionDialogComponent
SendModal {
id: releaseEnsModal
id: connectEnsModal
modalHeader: qsTr("Connect username with your pubkey")
interactive: false
sendType: Constants.SendType.ENSSetPubKey
preSelectedRecipient: root.ensUsernamesStore.getEnsRegisteredAddress()
preDefinedAmountToSend: LocaleUtils.numberToLocaleString(0)
preSelectedAsset: {
let assetsList = releaseEnsModal.store.currentAccount.assets
let assetsList = connectEnsModal.store.currentAccount.assets
for(var i=0; i< assetsList.count;i++) {
if("ETH" === assetsList.rowData(i, "symbol"))
return {
@ -105,21 +105,23 @@ Item {
if (response.result.includes(Constants.walletSection.cancelledMessage)) {
return
}
releaseEnsModal.sendingError.text = response.result
return releaseEnsModal.sendingError.open()
connectEnsModal.sendingError.text = response.result
return connectEnsModal.sendingError.open()
}
for(var i=0; i<connectEnsModal.bestRoutes.length; i++) {
usernameUpdated(ensUsername.text);
let url = "%1/%2".arg(connectEnsModal.store.getEtherscanLink(connectEnsModal.bestRoutes[i].fromNetwork.chainId)).arg(response.result)
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
}
usernameUpdated(ensUsername.text);
let url = `${releaseEnsModal.store.getEtherscanLink()}/${response.result}`;
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
} catch (e) {
console.error('Error parsing the response', e)
}
releaseEnsModal.close()
connectEnsModal.close()
}
}
}

View File

@ -94,14 +94,16 @@ Item {
buyEnsModal.sendingError.text = response.result
return buyEnsModal.sendingError.open()
}
usernameRegistered(username)
let url = `${buyEnsModal.store.getEtherscanLink()}/${response.result}`;
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
for(var i=0; i<buyEnsModal.bestRoutes.length; i++) {
usernameRegistered(username)
let url = "%1/%2".arg(buyEnsModal.store.getEtherscanLink(buyEnsModal.bestRoutes[i].fromNetwork.chainId)).arg(response.result)
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
}
} catch (e) {
console.error('Error parsing the response', e)
}

View File

@ -541,7 +541,7 @@ StatusDialog {
}
for(var i=0; i<popup.bestRoutes.length; i++) {
let txHash = response.result[popup.bestRoutes[i].fromNetwork.chainId]
let url = `${popup.store.getEtherscanLink()}/${txHash}`
let url = "%1/%2".arg(popup.store.getEtherscanLink(popup.bestRoutes[i].fromNetwork.chainId)).arg(txHash)
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",

View File

@ -197,13 +197,15 @@ Item {
buyStickersModal.sendingError.text = response.result
return buyStickersModal.sendingError.open()
}
let url = `${buyStickersModal.store.getEtherscanLink()}/${response.result}`;
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
for(var i=0; i<buyStickersModal.bestRoutes.length; i++) {
let url = "%1/%2".arg(buyStickersModal.store.getEtherscanLink(buyStickersModal.bestRoutes[i].fromNetwork.chainId)).arg(response.result)
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
}
buyStickersModal.close()
} catch (e) {
console.error('Error parsing the response', e)

View File

@ -110,13 +110,16 @@ ModalPopup {
buyStickersPackModal.sendingError.text = response.result
return buyStickersPackModal.sendingError.open()
}
let url = `${buyStickersPackModal.store.getEtherscanLink()}/${response.result}`;
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
for(var i=0; i<buyStickersPackModal.bestRoutes.length; i++) {
let txHash = response.result[buyStickersPackModal.bestRoutes[i].fromNetwork.chainId]
let url = "%1/%2".arg(buyStickersPackModal.store.getEtherscanLink(buyStickersPackModal.bestRoutes[i].fromNetwork.chainId)).arg(response.result)
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
"",
true,
Constants.ephemeralNotificationType.normal,
url)
}
buyStickersPackModal.close()
} catch (e) {
console.error('Error parsing the response', e)

View File

@ -53,8 +53,8 @@ QtObject {
}
}
function getEtherscanLink() {
return profileSectionModule.ensUsernamesModule.getEtherscanLink()
function getEtherscanLink(chainID) {
return networksModule.all.getBlockExplorerURL(chainID)
}
function copyToClipboard(text) {