返回文章列表
ChainsBitcoinTimelocksWallet Recovery
🔗

A Bitcoin Recovery Timelock Is Not a Calendar Appointment

Four recovery timelines compare absolute and relative Bitcoin timelocks, chain time, change outputs, signing authority, and the practical steps after maturity.

iBuidl Research2026-10-2218 min 阅读

TL;DR: A Bitcoin timelock makes a spending path eligible only after a specified chain condition; it does not schedule an automatic payment or guarantee confirmation at a wall-clock appointment. Absolute locks refer to a height or time threshold, while relative locks depend on the age of the output being spent. Recovery design must identify the exact starting event, required keys, transaction fields, fee strategy, and the effect of spending funds into a new output.

A fictional organization, Juniper Archive, wants a recovery path for its Bitcoin funds if its ordinary signing team becomes unavailable. The proposal says, “The backup signer can recover the funds after ninety days.” That sentence sounds clear until the engineers ask: ninety days after what, measured by which clock, for which output, and with what transaction ready to spend it?

The answers determine whether the recovery promise is accurate. A delay from a calendar date differs from a delay after an output confirms. A path becoming valid differs from a transaction being broadcast, accepted by a peer, or included in a block. A backup signer may still need script information and sufficient fee flexibility even after the lock matures.

This article examines four fictional timelines. It explains protocol concepts using BIP-65, BIP-68, BIP-112, and BIP-113. It does not supply a production wallet script or recommend deploying a custody policy without specialist review and end-to-end testing.

Timeline one: a fixed height arrives whenever the chain reaches it

Juniper's first proposal uses an absolute block-height condition. The recovery branch becomes eligible after the relevant height condition is satisfied, assuming the spending transaction meets the other rules. The threshold is a chain coordinate, not a promise that a particular date on a calendar will be reached at the same moment.

Bitcoin's expected block interval can help estimate a rough schedule, but actual block arrival is variable. A count of blocks should not be converted into a guaranteed number of hours. A user interface that displays an estimated date should label it as an estimate and retain the underlying height condition.

BIP-65's CHECKLOCKTIMEVERIFY mechanism allows a script path to require a compatible transaction locktime. The transaction's fields and the script condition work together; putting a number in an explanatory document does not enforce the policy. The exact construction needs to satisfy the opcode's semantics and transaction-finality rules.

Juniper's review therefore asks the wallet provider to show the actual recovery path and how the supported signing software constructs a valid spending transaction. The review includes the relevant sequence behavior, because transaction fields can affect whether locktime constraints are active or compatible. This is one reason the article avoids a hand-written example that readers might mistake for audited custody code.

The fixed-height approach has a useful property: every relevant output using the same absolute condition refers to the same threshold. It also has a consequence: a new deposit made shortly before that threshold does not automatically receive a fresh full delay. If the organization intended a delay from each deposit, the absolute condition expresses a different policy.

Consider a hypothetical threshold at height one million. An output created long before that height and an output created shortly before it can share the same absolute recovery condition. Their waiting periods since creation differ. The number is illustrative; it is not a current chain-height claim or a recommended threshold.

The committee rewrites the requirement accordingly: recovery becomes available after a named chain-height condition, rather than after a fixed duration from every deposit. That wording makes the tradeoff visible to the people authorizing the wallet. A precise technical mechanism should be matched by an equally precise human promise.

Timeline two: a time threshold uses chain time

The second proposal uses an absolute time-based condition. This seems closer to a calendar appointment, but the relevant consensus time is not simply the operator's laptop clock. BIP-113 specifies median time past as the endpoint used in the applicable locktime calculation, based on the preceding block timestamps.

Median time past is derived from the median of the last eleven block timestamps in the relevant chain context. It provides a protocol-defined measure that differs from checking whether a local wall clock has crossed midnight. A transaction may remain ineligible under the consensus condition even when a person's calendar has reached the displayed date.

Juniper's interface separates three statements: the intended human date, the encoded threshold, and the current chain condition used to evaluate maturity. It does not promise a precise minute of spendability based only on local time. The purpose is to prevent a recovery operator from interpreting a clock display as proof that every validation condition is satisfied.

The distinction also matters during testing. Advancing a computer's clock is not an adequate test that a timelocked transaction will be valid on the intended chain. The test environment must exercise the relevant block and timestamp conditions through the node's supported mechanisms, then verify the actual transaction behavior at the boundary.

A time-based threshold does not make the transfer automatic. Once the condition is satisfied, an authorized party still needs to construct or possess a valid transaction, sign as required, broadcast it, and obtain inclusion under the prevailing conditions. The lock removes one barrier; it does not perform the remaining workflow.

The organization also distinguishes eligibility from final settlement. A transaction can be eligible for inclusion and still wait because of its fee or other policy and network conditions. A recovery plan tied to a legal or operational deadline should include that uncertainty rather than equate maturity with completed delivery.

Juniper's revised statement becomes: the recovery path is constrained by a documented time threshold evaluated under Bitcoin's locktime rules, with actual confirmation occurring only after a valid transaction is submitted and included. The sentence is less convenient than “available at midnight,” but it describes what the system can actually enforce.

Timeline three: a relative delay begins with the output's chain history

The third proposal uses a relative timelock. BIP-68 gives specified transaction sequence fields consensus meaning as relative height or time constraints, and BIP-112's CHECKSEQUENCEVERIFY allows a script path to require a compatible relative condition. The relevant age is associated with the output being spent, not with when an operator wrote the recovery document.

This can match a policy such as “the recovery branch becomes available only after this output has aged sufficiently.” A deposit that confirms later receives a later maturity under the relative rule. That differs from the shared deadline in Timeline one and may be closer to Juniper's intended protection.

The origin still needs careful wording. Creating a transaction file, signing it, or broadcasting it does not start the same chain-age calculation as confirmation of the output. If the funding transaction remains unconfirmed, an interface that begins counting from broadcast can mislead the recovery operator.

For time-based relative locks, BIP-68 uses units of five hundred twelve seconds, with defined median-time-past references. A desired human duration therefore needs an explicit encoding choice and rounding policy. The protocol's granularity is part of the design, not a formatting detail that can be ignored.

As a pure arithmetic illustration, one day is eighty-six thousand four hundred seconds. Dividing by five hundred twelve gives 168.75 units. Rounding upward to one hundred sixty-nine units represents eighty-six thousand five hundred twenty-eight seconds, or one day plus one hundred twenty-eight seconds, before considering the chain-time semantics. This is an encoding example, not an exact wall-clock maturity prediction.

Block-based relative locks instead refer to a block-age condition. They avoid a direct timestamp unit but still do not guarantee a calendar duration. Juniper chooses between height and time according to the actual recovery policy, then tests the selected construction rather than treating the two as interchangeable labels.

The recovery documentation identifies the funding output, its confirmation context, the required relative condition, and the transaction fields needed to satisfy it. The organization can now answer the original question “after what?” with a precise chain event rather than a vague memory of when the wallet was created.

Timeline four: ordinary spending starts a new history

Juniper spends part of its funds through the ordinary branch and receives change into a new output governed by a similar recovery policy. The old output has been consumed. The new output has its own chain history. A relative delay attached to that new output does not inherit the old output's age merely because the same organization controls both.

This behavior can be useful: routine movement can renew a delayed recovery condition. It can also frustrate a plan if the backup signer expects every balance in the wallet to become recoverable on the same day. The interface must show maturity per relevant output or otherwise explain the actual policy.

The organization models a simple sequence. An initial output confirms, ages for a period, and is then spent into a new protected output. The recovery delay for the new output is evaluated from its own confirmation context under the chosen relative rules. The elapsed time since the first deposit is no longer the relevant age for that new spending condition.

The same issue arises when consolidating several outputs with different ages. The resulting output is new. A consolidation that looks like internal housekeeping can therefore change the recovery timeline. The treasury's coin-management policy must be reviewed alongside the recovery design rather than treated as an unrelated fee optimization.

Absolute conditions behave differently. Recreating an output with the same fixed threshold does not move that threshold forward. If the organization intends to renew an absolute deadline, it must create a policy with a new threshold and verify that the change is reflected in the actual output. Merely receiving change at a familiar wallet label does not establish that renewal.

Juniper's operations team adds recovery-policy effects to its transaction review. A routine payment is assessed for destination, fee, authorization, and the conditions attached to change. This avoids discovering during an emergency that maintenance operations have altered the recovery path in a way nobody tracked.

The four timelines can now be compared without pretending they solve the same problem:

Policy shapeReference conditionEffect of a later depositEffect of spending to a new similarly protected output
Absolute heightA specified chain heightSame threshold if encoded identicallyThreshold stays fixed unless the policy changes
Absolute timeA specified threshold evaluated under locktime rulesSame threshold if encoded identicallyThreshold stays fixed unless the policy changes
Relative block ageAge of the spent output in the applicable chainLater confirmation means later maturityNew output starts its own age
Relative time ageDefined chain-time age with protocol granularityLater confirmation changes the reference historyNew output starts its own age

A matured branch still needs an authorized spender

A timelock is only one condition in a spending policy. If the recovery branch also requires a signature, the necessary key must remain available and usable. If it requires multiple parties, the coordination and signing tools must still work. Maturity does not reconstruct a lost key or replace missing script information.

Juniper's recovery package therefore includes the information needed to identify and satisfy the policy, stored according to its custody design. The organization tests recovery from those backups on an appropriate nonproduction setup. A seed phrase alone may not describe every custom script, descriptor, key ordering, or derivation detail needed for a particular wallet arrangement.

The backup signer also needs to know which branch is being used and what it authorizes. A recovery policy can be misunderstood if the ordinary and delayed paths require different parties or expose different conditions. The human instructions should explain the authority model in terms the responsible people can follow.

If both an ordinary path and a matured recovery path can spend the same output, the timelock does not necessarily disable the ordinary path. Which transaction confirms determines the spend. The policy must be reviewed as a whole rather than assuming that maturity automatically transfers exclusive control to the backup signer.

That distinction matters for compromised-key scenarios. A delayed recovery branch alone is not automatically a complete vault or theft-response protocol. Additional mechanisms may be required for a specific security objective. Juniper states the threat it intends to address and asks whether the complete policy actually provides that protection.

The review avoids marketing terms as substitutes for mechanics. “Inheritance,” “dead man's switch,” and “recovery vault” can refer to very different constructions. The organization wants a concrete answer about who can spend each output under which conditions, not a reassuring product category.

Fees and transaction availability belong in the recovery test

A recovery transaction must be able to obtain inclusion under conditions that may differ from those at setup. A presigned transaction with a fixed fee can become inconvenient if fee conditions change. Whether and how it can be adjusted depends on the transaction construction, signatures, available outputs, and supported wallet workflow.

Juniper does not assume that every fee-bumping method applies to every recovery design. It asks the wallet provider to demonstrate the intended strategy and its limitations. The plan should identify which party can act, which transaction fields can change, and what additional funds or outputs are needed, if any.

The recovery operator also needs access to compatible software and a working network path. A policy that is mathematically valid but supported only by an abandoned tool can create an operational obstacle. The organization keeps a tested recovery procedure and reviews it when software or custody arrangements change.

The rehearsal includes a deliberately inconvenient fee scenario in the test environment. The objective is to establish that the recovery path can be constructed, recognized, and managed through the supported tools, not to predict a future mainnet fee. The test records the exact software versions and transaction form used.

Transaction availability is another concern. If the design depends on a presigned artifact, its storage and integrity need protection. If it depends on constructing a transaction later, the required policy data and signing capability must be available. These are different recovery dependencies and should not be confused in the backup inventory.

The organization treats the timelock as one component in a larger recovery chain: identify funds, establish maturity, construct the correct spend, authorize it, manage fees, broadcast, and verify settlement. A failure at any link can defeat the practical promise even when the script condition itself is correct.

The monitoring record follows outputs, not wallet birthdays

Juniper's monitoring record identifies each protected output by its transaction and output index, then associates it with the policy needed to spend it. This is more precise than a wallet-level field called “recovery date.” A wallet can contain outputs created at different times and governed by different conditions, even when the interface presents one total balance.

For an illustrative relative-height policy, one output confirms at height eight hundred thousand and another at height eight hundred ten. If both require the same block-age condition, the second reaches that condition later. The exact earliest eligible block must be calculated according to the implemented consensus semantics; the example deliberately avoids replacing that calculation with an informal confirmation-count shortcut.

The record also distinguishes an unconfirmed funding transaction from a confirmed output. If a funding transaction is replaced or never confirms, the expected recovery object may differ from the one originally prepared. The operator must follow the actual chain result and preserve any updated policy information needed for the resulting output.

A chain reorganization can change the confirmation context relevant to maturity. A monitoring system should obtain its view from the node and handle that possibility rather than permanently freezing the first observed confirmation as unquestionable. The required confirmation policy depends on the custody use case and should be documented separately from the timelock condition.

Alerts are useful when they describe an actionable event: an output approaching an absolute threshold, a new output with a different recovery policy, an unexpected spend, or missing information needed by the backup operator. A daily message repeating that funds remain locked adds little value if no action is required. The purpose of monitoring is to preserve readiness and detect changed assumptions.

Juniper assigns ownership for those alerts. A recovery plan can fail because everyone assumes another person is checking it. The responsible operator needs enough information to identify the affected output and the next authorized step without exposing unnecessary sensitive policy data in a public notification channel.

A review card separates intention from enforcement

Before approving the wallet arrangement, the organization prepares a short card with four fields: intended human promise, encoded spending condition, operational dependencies, and evidence from the rehearsal. The fields are deliberately separate. A reassuring description should not be accepted as proof that the encoded policy enforces it.

For example, the intended promise might be that a backup group can act after an output has aged under a defined relative rule. The encoded condition must actually express that relative rule and the backup group's authority. The dependencies include policy data, compatible signing tools, and a fee-management path. The rehearsal establishes only the cases that were executed successfully.

A reviewer then asks what would falsify the promise. Routine change that resets the age, loss of one required backup signer, or an unsupported transaction form may each matter. Naming these conditions makes the policy maintainable. The organization can trigger a review when one changes instead of assuming that the original setup remains valid indefinitely.

This card also supports communication with nontechnical stakeholders. They do not need to read script opcodes to understand that “eligible after a chain condition” differs from “automatically transferred on a date.” The engineering team's job is to preserve that distinction while providing a practical recovery process the authorized people can actually use.

Test the boundary, the reset, and the missing operator

Juniper's acceptance exercise tests a transaction before the intended maturity condition, at the relevant boundary under the implementation's exact semantics, and after maturity. The test checks actual node validation behavior rather than only the wallet's countdown display. Off-by-one mistakes in height or time handling are precisely the kind of issue a boundary test should expose.

A second exercise spends the original output and tests recovery of the resulting change. This confirms whether the new output uses the intended absolute or relative policy and whether the interface reports its maturity correctly. The test also checks that the old output is no longer treated as available.

A third exercise removes the ordinary signing team from the process. The backup operator starts from the documented package and attempts the authorized recovery in the test environment. This reveals hidden dependencies on a person, password, device, or undocumented derivation step that the normal team had taken for granted.

The exercise uses controlled funds and an appropriate test setup; it is not a reason to experiment blindly with production holdings. The report records which properties were demonstrated and which remain dependent on specialist review. A successful small test does not establish that every possible wallet state or failure has been covered.

The final recovery promise is deliberately specific. It names the lock type, reference event, required authorities, data dependencies, and confirmation uncertainty. Juniper can now explain when a branch becomes eligible and what work remains afterward. That is a stronger assurance than a calendar reminder that says the money will simply unlock on a chosen day.

Sources

更多文章