transfer: prepare, decode for review, sign, submit and watch, with a reversal window #22

Closed
opened 2026-09-15 12:38:20 +00:00 by grenade · 0 comments
Owner

Parent: #3

Scope

ChainAdapter::prepare for TransferIntent::Transfer: Balances::transfer_keep_alive for ordinary accounts, ReversibleTransfers::schedule_transfer (with the chosen delay) when reversible is set or when the account is high-security and therefore may not send plainly. Fee via TransactionPaymentCallApi::query_call_info. The review summary is decoded from the encoded call bytes with the runtime metadata, not from the intent, and prepare fails if the two disagree. submit and status follow the extrinsic to InBlock and Finalized, surfacing a dispatch error's pallet and variant name.

Also: cancel_transfer for a pending reversible transfer, and listing PendingTransfersBySender.

Acceptance

Against Heisenberg: a reversible send appears in the pending list, is cancelled, and the balance returns; a plain send finalizes and the recipient sees it. A dispatch error (insufficient balance) reads as Balances::InsufficientBalance, not a hex code.

Depends on

Balances and nonce.

Parent: #3 ## Scope `ChainAdapter::prepare` for `TransferIntent::Transfer`: `Balances::transfer_keep_alive` for ordinary accounts, `ReversibleTransfers::schedule_transfer` (with the chosen delay) when `reversible` is set or when the account is high-security and therefore may not send plainly. Fee via `TransactionPaymentCallApi::query_call_info`. The review summary is decoded from the encoded call bytes with the runtime metadata, not from the intent, and `prepare` fails if the two disagree. `submit` and `status` follow the extrinsic to `InBlock` and `Finalized`, surfacing a dispatch error's pallet and variant name. Also: `cancel_transfer` for a pending reversible transfer, and listing `PendingTransfersBySender`. ## Acceptance Against Heisenberg: a reversible send appears in the pending list, is cancelled, and the balance returns; a plain send finalizes and the recipient sees it. A dispatch error (insufficient balance) reads as `Balances::InsufficientBalance`, not a hex code. ## Depends on Balances and nonce.
grenade added the child label 2026-09-15 12:39:05 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: blackbeard/wallet#22