ordspv
    Preparing search index...

    Interface HeaderTrustReport

    interface HeaderTrustReport {
        anchored: boolean;
        anchoredBySync?: boolean;
        attests: HeaderAttestation;
        builderIsSource: boolean;
        checkpointHit: boolean;
        disagreements: { baseUrl: string; hash: string }[];
        independentSources: number;
        malformed: { baseUrl: string; length: number }[];
        sourcesAgreed: number;
        sourcesDisagreed: number;
        sourcesMalformed: number;
        sourcesQueried: number;
        sourcesUnreachable: number;
        tipHeight?: number;
        tipsAnswered?: number;
        tipsQueried?: number;
    }
    Index
    anchored: boolean

    the header is pinned by a checkpoint, a synced chain, or enough independent sources

    anchoredBySync?: boolean

    set when the anchor was a locally validated header chain (headersync)

    What the anchor asserted, in the core trustHeader hook's vocabulary. 'hash-at-height' means this block hash was compared against a view of the chain AT this height and agreed, which is what binds a sub-BIP34 coinbase height (see CoinbaseHeightUnprovenError). A caller adapting this async anchor into the core hook returns this value from it. A disagreement recorded under onDisagreement: 'flag' leaves this undefined: the pair (hash, height) is what a disagreeing attester denies, so a contested pair must assert nothing.

    builderIsSource: boolean

    a serving backend was named, so its vote was excluded. Kept as a fact of its own rather than folded into independentSources.

    checkpointHit: boolean
    disagreements: { baseUrl: string; hash: string }[]

    every disagreeing attester and the hash it served at this height

    independentSources: number

    independent sources supporting the header: the agreeing attesters, none of which served the bundle. 0 for checkpoint/sync anchors, which pin the header without live sources.

    malformed: { baseUrl: string; length: number }[]

    every malformed answer's source and the character count of what it sent, measured after the same trim and case fold the comparison uses. The body itself is carried neither here nor into a message: it is attacker controlled text that would land in somebody's log, and the length already separates an empty response from an error page.

    sourcesAgreed: number

    attesting sources whose hash-at-height matched the header

    sourcesDisagreed: number

    attesting sources that answered a well-formed block hash which was not the header's, so they assert a different block at this height. Counted apart from the sources that said nothing, because an endpoint that is down and an endpoint serving another chain are different problems with different responses.

    sourcesMalformed: number

    attesting sources that answered something which is no block hash, an HTTP 200 carrying an error page being the shape that produces it. That is a broken or intercepted endpoint rather than a competing claim.

    sourcesQueried: number

    attesting sources queried (backends that served the bundle excluded). Equal to sourcesAgreed + sourcesDisagreed + sourcesMalformed + sourcesUnreachable on every arm, so every source asked is accounted for rather than dropped into the complement of the agreeing set.

    sourcesUnreachable: number

    attesting sources whose query failed, so they stated nothing at all

    tipHeight?: number
    tipsAnswered?: number

    attesters that answered a tip height this check could read as a height

    tipsQueried?: number

    Attesters asked for a tip height. Absent when no confirmation depth was enforced, which is a different fact from a depth enforced against zero answers and is why these are absent rather than 0 on the arms that never reach the phase.