fix: can't add ens name as watched address

Fixes #13902
This commit is contained in:
Sale Djenic 2024-08-20 14:29:56 +02:00 committed by saledjenic
parent f59ce285a9
commit f3a33f414d
2 changed files with 44 additions and 3 deletions

View File

@ -24,10 +24,31 @@ Column {
id: d id: d
property bool incorrectChecksum: false property bool incorrectChecksum: false
property string uuid
property string resolvedEnsAddress
function checkIfAddressChecksumIsValid(address) { function checkIfAddressChecksumIsValid(address) {
d.incorrectChecksum = !root.store.isChecksumValidForAddress(address) d.incorrectChecksum = !root.store.isChecksumValidForAddress(address)
} }
function validateEnsAsync(value) {
var name = value.startsWith("@") ? value.substring(1) : value
d.uuid = Utils.uuid()
root.store.validateEnsAsync(name, d.uuid)
}
}
Connections {
target: root.store
function onResolvedENS(resolvedPubKey: string, resolvedAddress: string, uuid: string) {
if (uuid !== d.uuid) {
return
}
d.resolvedEnsAddress = resolvedAddress
addressInput.validate()
root.store.changeWatchOnlyAccountAddressPostponed(resolvedAddress)
}
} }
StatusInput { StatusInput {
@ -63,19 +84,30 @@ Column {
} }
} }
validators: [ validators: [
StatusAddressOrEnsValidator { StatusValidator {
name: "address-or-ens"
validate: (value) => {
return Utils.isValidAddress(value) ||
Utils.isValidEns(value) &&
!!d.resolvedEnsAddress
}
errorMessage: qsTr("Please enter a valid Ethereum address or ENS name") errorMessage: qsTr("Please enter a valid Ethereum address or ENS name")
} }
] ]
onTextChanged: { onTextChanged: {
d.incorrectChecksum = false d.incorrectChecksum = false
if (addressInput.valid) { const trimmedText = text.trim()
const trimmedText = text.trim() if (Utils.isValidEns(trimmedText)) {
d.resolvedEnsAddress = ""
d.validateEnsAsync(trimmedText)
return
} else if (Utils.isValidAddress(trimmedText)) {
root.store.changeWatchOnlyAccountAddressPostponed(trimmedText) root.store.changeWatchOnlyAccountAddressPostponed(trimmedText)
d.checkIfAddressChecksumIsValid(trimmedText) d.checkIfAddressChecksumIsValid(trimmedText)
return return
} }
root.store.cleanWatchOnlyAccountAddress() root.store.cleanWatchOnlyAccountAddress()
} }

View File

@ -55,6 +55,11 @@ BasePopupStore {
] ]
signal showLimitPopup(int warningType) signal showLimitPopup(int warningType)
signal resolvedENS(string resolvedPubKey, string resolvedAddress, string uuid)
Component.onCompleted: {
mainModule.resolvedENS.connect(root.resolvedENS)
}
function resetStoreValues() { function resetStoreValues() {
root.enteredSeedPhraseIsValid = false root.enteredSeedPhraseIsValid = false
@ -119,6 +124,10 @@ BasePopupStore {
root.addAccountModule.changeSelectedOrigin(keyUid) root.addAccountModule.changeSelectedOrigin(keyUid)
} }
readonly property var validateEnsAsync: Backpressure.debounce(root, 500, function (name, uuid) {
mainModule.resolveENS(name, uuid)
});
readonly property var changeDerivationPathPostponed: Backpressure.debounce(root, 400, function (path) { readonly property var changeDerivationPathPostponed: Backpressure.debounce(root, 400, function (path) {
root.changeDerivationPath(path) root.changeDerivationPath(path)
}) })