Skip to content

[Bug]: UI - Actions that move money or ownership are not disclosed, confirmed, or truthfully reported #229

Description

@re-gius

Component

Other

Priority

P1

What happened?

Five instances of one pattern in packages/ui: an action that spends funds or transfers ownership charges without saying so, proceeds without confirmation, or reports an outcome that did not happen.

Upload reports success for a write that failed. store/useBulletinStore.ts:277-282 swallows a failed writeCidToStore; :423-425 then sets "Upload complete!", overwriting the "not yet resolvable" message at :284-288; components/preview/FileUpload.vue:92-98 shows "Congratulations! Transaction successful!" with a zero hash. The user then points a name's contenthash at that CID.

Transfer charges an undisclosed fee. components/modals/TransferDomainModal.vue:100-137 has no fee UI while store/useDomainStore.ts:282-291 attaches quoteTransferFee as value, which is either zero or a full startingPrice. components/RegisterModal.vue:427-434 already quotes and displays the equivalent floor.

Release surrenders a name on one click. components/profile/EscrowTab.vue:115-123 hands the name to escrow from a secondary-styled button with no confirmation; the header at :18 describes it only as "Release a name to start its cooldown". Recovery means claiming the deposit and paying to register again.

Withdrawal reports Finalized halfway through. store/useEscrowStore.ts:160-166 is two transactions while components/TransactionTimeline.vue:61 completes after the first. withdraw already zeroes the amount, so a dismissed second prompt leaves the row rendering "Claimed" with no action button and the deposit reachable only through the CLI.

A failed address conversion is shown as resolved. store/useWalletStore.ts:288-300 returns zeroAddress on any RPC error and composables/useAddressResolver.ts:78-80 marks it resolved, so components/modals/AddSubdomainModal.vue:386 mints a paid subdomain to 0x0 and components/modals/DelegateDomainModal.vue:208 issues approve(0), silently revoking a delegation while toasting "Delegation updated". transferDomain (store/useDomainStore.ts:276) is guarded and is the model.

Expected behavior

Before an action that spends funds or transfers ownership, the UI shows what it will cost and what will be given up, and asks for confirmation where the effect is irreversible. After it, the UI reports what actually happened: a success state means the chain write landed, and a failed write is surfaced rather than logged.

Reproduction

  • Upload a file with "Save CID to on-chain Store" enabled and reject the Store prompt. The flow still ends in "Congratulations! Transaction successful!" with a zero transaction hash, and the CID is absent from the Store list.
  • Open the transfer modal for a name whose recipient is a tier downgrade. No fee is shown anywhere, and the submitted transaction carries a non-zero value.
  • Click Release on any funded position. The name is transferred to escrow immediately, with no intermediate confirmation.

Additional context

Scope note: this covers the write and disclosure side. #227 covers the read side, where failed reads are replaced with plausible fallback values. #220 covers the records that follow a name through a transfer, which is the other half of what the transfer warning omits.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1Secondary Prioritydotns-sdkRelated to the DotNS SDKtype: bugBug report

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions