-
Notifications
You must be signed in to change notification settings - Fork 75
Bitcoin provenance
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.
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 |
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 |
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) |
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 |
This material is based upon work supported by the National Science Foundation under Grants OCI-0722068, IIS-1116414, and ACI-1547467. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.
- Setting up SPADE
- Storing provenance
-
Collecting provenance
- Across the operating system
- Limiting collection to a part of the filesystem
- From an external application
- With compile-time instrumentation
- Using the reporting API
- Of transactions in the Bitcoin blockchain
- Filtering provenance
- Viewing provenance
-
Querying SPADE
- Illustrative example
- Transforming query responses
- Protecting query responses
- Miscellaneous