Bitcoin provenance - ashish-gehani/SPADE GitHub Wiki
Data model
The description below explains how the Bitcoin blockchain is represented in the W3C PROV framework.
The data model allows rapid graph traversal of paths between arbitrary pairs of transactions, computation of the lineage of a payment, derivation of all transitive payees, identification of all payments associated with a Bitcoin address, and a suite of other analyses.
Blocks
Each Bitcoin block is represented by an Activity vertex. All the transactions that are part of the block are connected to it via WasInformedBy edges. Successive blocks are also connected via WasInformedBy edges.
PROV element | Annotation Key | Annotation Value's semantics |
---|---|---|
Activity | ||
blockHash |
Identifier of the block | |
blockHeight |
Number of earlier blocks | |
blockChainwork |
Cumulative hashing to compute blockchain | |
blockConfirmations |
Count of later blocks | |
blockDifficulty |
Complexity of mining, explained here |
Transactions
Each Bitcoin transaction is represented by an Activity vertex. All the input payments that are part of the transaction are connected to it via Used edges. All output payments that are part of the transaction are connected to it via WasGeneratedBy edges.
PROV element | Annotation Key | Annotation Value's semantics |
---|---|---|
Activity | ||
transactionHash |
Identifier of the transaction | |
transactionLocktime |
Earliest time transaction is valid, explained here | |
transactionCoinbase |
Used to claim mining reward, explained here | |
Used | ||
transactionValue |
Input payment amount | |
WasGeneratedBy | ||
transactionValue |
Output payment amount |
Payments
Each Bitcoin payment is represented by an Entity vertex. It is connected to a Bitcoin address via a WasAttributedTo edge.
PROV element | Annotation Key | Annotation Value's semantics |
---|---|---|
Entity | ||
transactionHash |
Transaction in which the payment was an input or output | |
transactionIndex |
Which of the transaction's payments this is (with the count starting from 0) |
Addresses
Each Bitcoin address is represented by an Agent vertex.
PROV element | Annotation Key | Annotation Value's semantics |
---|---|---|
Agent | ||
address |
Payer's or payee's Bitcoin address, explained here |