# Class BSV::Wallet::TrustedSelfChainTracker <a id="class-BSV-Wallet-TrustedSelfChainTracker"></a>

**Inherits:** `BSV::Transaction::ChainTracker`

Structural-only chain tracker for the wallet's own egress validation.

Satisfies the SDK's {Transaction::ChainTracker} duck type by saying "yes" to
every merkle root lookup. This is correct, not lax, for one specific use:
validating a BEEF the wallet itself just built from its own persisted proofs.

The wallet's persisted proofs were validated against a real chain tracker at
proof-arrival time (during `import_utxo` for confirmed ancestors, during
incoming BEEF `save_beef_proofs` for ancestors received from peers).
Re-running chain-validity checks at egress would be redundant — what we need
at egress is **structural** completeness: every input path in the just-built
BEEF terminates at a merkle_path or wires through to one. That check is the
verify walk; neutralising the chain_tracker isolates it from network validity.

NEVER use this for incoming BEEFs from peers. Untrusted data must be validated
against {BSV::Network::ChainTracker} so the merkle roots are checked against
real block headers. This tracker exists to express the wallet's confidence in
its own state, not as a general validation shortcut.

**@example At egress (Action#validate_for_handoff!)**
```ruby
subject_tx.verify(chain_tracker: TrustedSelfChainTracker.new)
# passes iff the BEEF is structurally complete; raises otherwise
```

## Constants
### `SENTINEL_HEIGHT` <a id="constant-SENTINEL_HEIGHT"></a> <a id="SENTINEL_HEIGHT-constant"></a>
Sentinel chain tip — high enough that the SDK's coinbase maturity check
(offset-0 leaf must be >= 100 blocks deep) always passes. Real height doesn't
matter; this tracker is structural-only.

## Public Instance Methods
### `current_height()` <a id="method-i-current_height"></a> <a id="current_height-instance_method"></a>
Not documented.

### `known_roots_for_heights(heights)` <a id="method-i-known_roots_for_heights"></a> <a id="known_roots_for_heights-instance_method"></a>
Anchor-liveness stub — HLR #516 Sub 6.

This tracker is egress-only: it exists to isolate the structural verify walk
over a BEEF the wallet itself just built. It never participates in ingress
trust and should never be wired into an
<code>Engine::AnchorLivenessCache</code>. Returning "unknown" (`nil`) for
every height keeps the caller safe in the pathological case a future call site
accidentally passes this tracker to the ingress path: unknown ≠ mismatch, so
the trust set is not invalidated.
- **@param** `heights` [Array<Integer>]
- **@return** [Hash{Integer => nil}]

### `valid_root_for_height?(_root, _height)` <a id="method-i-valid_root_for_height-3F"></a> <a id="valid_root_for_height?-instance_method"></a>
- **@return** [Boolean]
