Lineage and Attribution
Lineage describes how Blocks are connected through parentHashes. By following declared parent relationships, applications can trace dependencies, inspect ancestry, and understand how a Block was produced.
ALX records only the structure of these relationships. The protocol does not assign ownership, authorship, legal rights, or economic meaning. Applications interpret lineage according to their own policies.
Lineage Model
Lineage provides a deterministic view of Block relationships without embedding application-specific semantics. Equivalent protocol inputs produce equivalent structural results, while attribution, ownership, and trust remain application decisions.
When to Use Lineage
Use lineage when an application needs to:
- Trace dependencies
- Inspect ancestor relationships
- Validate graph integrity
- Build application-specific attribution or provenance
- Graph Rules
- Graph Verification
- Attribution Trace
- Attribution Boundary
Conforming lineage uses normalized hashes and rejects duplicate parents, self-references, and cycles.
A conforming lineage graph:
- Uses normalized Block hashes
- Rejects self-references
- Rejects duplicate parent references
- Rejects cycles
- Reports unresolved parent references
Applications that intentionally load a partial data set may classify unresolved references as incomplete lineage.
Complete verification validates both Block identities, required parent references, and graph structure.
Complete graph verification combines:
validateBlock()for each Block, confirmingcontentHashandblockHash.validateGraph()for parent resolution, self-references, duplicate parents, and cycles.
A successful workflow confirms that every Block identity recomputes correctly, every required parent reference resolves, and the lineage graph satisfies the graph rules.
traceAttribution returns reachable ancestors, edges, parentless roots, depths, path counts, and cycle status.
traceAttribution(rootHash, graph) returns:
- The selected Block and reachable ancestors
- Child-to-parent relationships
- Root Blocks with no declared parents
- Minimum and maximum depth values
- Distinct path counts
- Cycle status
Given the same root Block and graph, the function always produces the same result.
The current JavaScript reference surface returns parentless root Blocks in the leaves field. The field name is retained for compatibility.
A structural trace does not assign ownership, authorship, trust, rights, or economic meaning.
An attribution trace describes only the structure of a lineage graph. The trace does not imply ownership, authorship, approval, trust, licensing, payouts, or any other legal or economic interpretation. Those decisions belong to the application using ALX.