Files
bal-docs/internal/design-choices-DRAFT.md
2026-07-29 22:38:03 -04:00

134 lines
8.1 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DRAFT — Design choices and comparison with other approaches
> **STATUS: NOT PUBLISHED. NOT VALIDATED BY THE DEVELOPERS.**
>
> This page contains technical positioning material that must be reviewed before it
> becomes an official project statement. It is kept here, out of the published site,
> so it is ready when that review happens.
>
> Source: internal drafts (July 2026), corrected version of 24/07/2026.
> Tone rule: factual, no disparagement — these are design trade-offs, not mistakes.
## Three different approaches
| | Liana (Wizardsardine) | Timelock Recovery (Electrum plugin) | BAL |
|---|---|---|---|
| Mechanism | **Script-based** wallet (Miniscript): the timelock lives in the script locking the UTXOs | **Pre-signed transactions**: an Alert + Recovery pair | **Pre-signed transactions** with absolute `nLockTime` |
| Timelock type | Relative (CSV / BIP 68), per UTXO | Relative (nSequence / BIP 68) on the *second* transaction | Absolute (`nLockTime`) |
| What the BIP 68 cap limits | Maximum inactivity before the recovery key becomes usable | Only the **cancellation window** (2388 days), not the inheritance horizon | — (does not use relative timelocks) |
| Distribution | None: on-chain | User/heir keeps the plan; monitoring services exist | Decentralized Will-Executor network |
## Liana: where the ~15 month limit comes from
Liana uses **relative** timelocks (CSV/BIP 68) inside the script: the countdown starts
when each individual UTXO is received. The field is 2 bytes, so it cannot exceed 65,535 —
a **Bitcoin consensus limit**, not a wallet limitation. In blocks: 65,535 blocks ≈ **455
theoretical days (~15 months)**. In the time variant (512-second units) the cap is
equivalent to **~388 days**.
Documented consequence, acknowledged by its own developers: the user must periodically
"rotate" coins (send them to a new address of their own) to reset the timer — paying fees
each time — otherwise the recovery path opens. The project itself notes this fits poorly
with cold wallets that are never touched, and that a non-technical heir may struggle,
since not all UTXOs unlock at the same block height.
**The DCA example (valid for Liana, NOT for Timelock Recovery):** someone buying monthly
for a year accumulates twelve UTXOs with twelve distinct countdowns. If they die after the
last purchase, the heirs do not find a single inheritance but **unlocks staggered over more
than a year**, with several recovery transactions to execute at different moments — unless
the user had manually consolidated the UTXOs (which is the same periodic rotation already
required).
## Timelock Recovery: NOT like Liana — closer to BAL
Timelock Recovery is **not** a script wallet and does **not** cap the inheritance horizon
at ~1 year. It uses a pair of pre-signed transactions:
1. **Alert Transaction** — consolidates funds to a new address of the user's own wallet
(plus small anchor outputs for CPFP). The heir broadcasts it when needed, and its
appearance on-chain acts as an *alert* to the user.
2. **Recovery Transaction** — spends the Alert's output to the heirs' wallets, with a
**relative nSequence** imposing a waiting period.
The **388** figure belongs here: it is the maximum **cancellation window** (whole days,
2 to 388), not the duration of the inheritance. Beyond 388 days you overflow BIP 68's
bits. The logic is the opposite of Liana's: that window gives a still-living user time to
cancel everything (by spending the funds) if the plan is triggered by mistake or under
duress.
**Positioning note:** the author of Timelock Recovery has filed **BIP 128** (draft,
assigned 5 February 2026) to standardise the JSON format of such plans, with a reference
implementation in the plugin officially included in Electrum's repository. This is a
competitor on a standardisation trajectory — to be treated with respect and precision.
## BIP 128's critique of BAL's approach — have the answer ready
The Motivation section of BIP 128 explicitly criticises the scheme BAL uses: the single
pre-signed transaction with a future `nLockTime`. The argument: in the "all is well"
scenario (user alive, seed not lost), as the date approaches the user **must** access the
wallet and spend a UTXO to revoke the transaction, otherwise it becomes valid and moves
the funds **with no cancellation period**. There is no window for second thoughts: on the
date, the transaction is valid and the Will-Executors broadcast it.
This is the most serious technical objection BAL will face from a competent audience. It
should be met head-on, not avoided. Elements of a reply (**to be validated by the devs**):
- The **23 year renewal policy** with a rolling deadline is precisely the safeguard: someone
who renews never gets close to the date.
- The user always retains control: spending a single UTXO invalidates the inheritance.
Revocation is always in their hands and requires nobody's permission.
- The plugin allows setting a reminder in the system calendar.
- Declared trade-off: BAL chooses **simplicity for the heir** (one date, one transaction,
nothing to execute) at the price of requiring **renewal discipline from the owner**.
Timelock Recovery chooses the opposite: no looming deadline for the owner, but the heir
must execute two transactions in sequence and wait out the cancellation period.
- Possible future improvement (issue for [DEV]): an alert / cancellation-window mechanism
in BAL as well.
## BAL's real advantage, stated precisely
Not "the others are limited to one year" — that is imprecise and easy to attack. The
correct positioning rests on three points:
1. **Nothing required of the heirs.** With Timelock Recovery someone must broadcast the
Alert, wait days or months, then broadcast the Recovery — knowing what they are doing
and having kept the plan. With BAL the Will-Executor network broadcasts on its own: the
heir may not even know in advance.
2. **No consensus-forced rotation** (vs Liana), and no problem of UTXOs unlocking at
different times: a single date for the whole wallet.
3. **Distributed redundancy.** The plan does not depend on a file someone must keep and
find: one Will-Executor out of N still operating is enough. (The USB file remains as an
extra backup.)
## Technical points not to get wrong in public
- The 65,535 limit is a **Bitcoin consensus** limit (BIP 68) and applies only to **relative**
timelocks. Absolute `nLockTime` has no such cap: in practice it can set dates decades away
(with 32-bit Unix timestamps the practical limit is the year 2106).
- Do **not** say "Timelock Recovery only allows one year of inheritance" — it is **false**,
and anyone familiar with the project would dismantle it instantly. The 388 is the maximum
cancellation window.
- Do **not** say "Liana is limited to 388 days" without qualification: in the block variant
it is 65,535 blocks (~455 theoretical days, ~15 months); 388 days is the time variant.
- Remember that transactions with a future `nLockTime` are **not accepted by the mempool**
until the date is reached — this is why someone (the Will-Executors) must broadcast them
at the right moment.
- Balance note: any very long timelock carries a theoretical risk tied to the future
evolution of the Bitcoin network — a further argument for periodic renewal.
## Editorial rules carried over from the source drafts
- Never use, in any public version: "investment", "return", "yield", "pension",
"passive income", or any projection of future sat or fee prices.
- Always keep the risk disclaimer when publishing Will-Executor recruitment material.
- Correct formula for Electrum: "listed in Electrum's third-party plugin directory" —
**never** "approved by Electrum".
## Open actions
1. Have the devs validate the technical FAQ answers (what a Will-Executor can actually see,
CPFP) and above all the reply to the BIP 128 critique — the most exposed point of BAL's design.
2. Evaluate as a [DEV] issue a possible alert / cancellation mechanism in BAL.
3. Turn the Will-Executor recruitment article into a blog post (the remaining `[to complete]`
fields need dev input: current fee range, minimum system requirements).