Problem
When arkd rotates its signer key and sets a cutoff date, addresses derived from the old key become invalid after that date. Funds sent there get stuck: cooperative boarding is rejected by the server, and unilateral recovery only unlocks after boardingExitDelay (currently 90 days on mainnet).
Real case: a user had a pool auto-paying to their old boarding address. After the June 22 rotation (cutoff July 4), 3 UTXOs accumulated on the deprecated address with no UI warning. The user had no way to know anything was wrong.
Requested behaviour
After cutoff, whenever the wallet detects an address (Ark offchain address or boarding/onchain address) derived from a deprecated signer key:
- Show a persistent warning on the receive screen
- Explain that the address is no longer valid for new deposits
- Show the correct current address (new signer key)
- Optionally: detect UTXOs already received at the deprecated address and surface a recovery prompt
Context
- Deprecated keys + cutoff dates are exposed via
GetInfo → deprecated_signer_pub_keys
- arkd rejects boarding inputs post-cutoff with
"is a deprecated key since [date]" (internal/core/application/utils.go → validateVtxoScriptForSigners())
- Boarding script:
DefaultVtxoScript(userKey, serverSignerKey, boardingExitDelay) — unilateral exit via timelock becomes available after boardingExitDelay
Problem
When arkd rotates its signer key and sets a cutoff date, addresses derived from the old key become invalid after that date. Funds sent there get stuck: cooperative boarding is rejected by the server, and unilateral recovery only unlocks after
boardingExitDelay(currently 90 days on mainnet).Real case: a user had a pool auto-paying to their old boarding address. After the June 22 rotation (cutoff July 4), 3 UTXOs accumulated on the deprecated address with no UI warning. The user had no way to know anything was wrong.
Requested behaviour
After cutoff, whenever the wallet detects an address (Ark offchain address or boarding/onchain address) derived from a deprecated signer key:
Context
GetInfo→deprecated_signer_pub_keys"is a deprecated key since [date]"(internal/core/application/utils.go→validateVtxoScriptForSigners())DefaultVtxoScript(userKey, serverSignerKey, boardingExitDelay)— unilateral exit via timelock becomes available afterboardingExitDelay