Chapter 2
Distributed Systems and Ledger Architecture
Advance Diploma in Blockchain
Blockchain Fundamentals
•
Advance Diploma
Distributed Systems and Ledger Architecture
Introduction
A blockchain is best understood not as a special kind of database alone, but as a distributed system that enables multiple participants to maintain a shared, tamper-evident record without relying entirely on one central administrator. Its architecture combines peer-to-peer communication, replicated state, cryptographic linking, time ordering, consensus, and governance rules.
This chapter develops the systems concepts required to analyse blockchain platforms. It distinguishes a distributed ledger from an ordinary replicated database, explains how nodes agree on state, examines fault models and the Byzantine Generals Problem, and compares public, private, consortium, and hybrid ledgers. The emphasis is on architectural reasoning: selecting an appropriate ledger design requires understanding trust, performance, failure, access, legal responsibility, and data-governance requirements.
Learning Objectives
By the end of this chapter, you should be able to:
Explain the architecture and operating principles of peer-to-peer distributed systems.
Distinguish replicated state, data replication, and consensus.
Analyse crash faults, omission faults, and Byzantine faults.
Explain timestamps, blocks, hash pointers, Merkle trees, and transaction-state models.
Describe forks and the Byzantine Generals Problem.
Compare public, private, consortium, and hybrid ledgers.
Evaluate ledger architectures for practical organisational scenarios.
Identify governance, privacy, security, and regulatory implications.
1. Distributed Systems as the Foundation of Blockchain
A distributed system consists of independent computing entities that communicate over a network and cooperate to provide a service. The entities may be called nodes, peers, validators, replicas, or participants. They do not share one physical memory or one universal clock. Messages can be delayed, duplicated, reordered, or lost, and individual nodes can fail independently.
A centralised database normally has one authoritative service or a tightly controlled cluster. A blockchain, by contrast, distributes copies of transaction history or current state across multiple nodes. The central architectural problem is therefore not simply storing data; it is ensuring that participants obtain an acceptably consistent view of which transactions are valid and in what order they should be applied.
Three properties should be distinguished:
Replication is the maintenance of multiple copies of data.
Consensus is the process by which participants select an agreed sequence, set, or state of operations.
Execution is the deterministic application of accepted operations to produce a new state.
Replication without consensus can produce divergent copies. Consensus without deterministic execution can still produce different results on different nodes. A robust blockchain requires all three.
Peer-to-peer architecture
In a peer-to-peer (P2P) network, nodes communicate directly or indirectly with one another rather than depending on a single permanent server. A node may perform several roles: it can receive transactions, relay messages, validate blocks, store history, participate in consensus, or provide an application interface.
Most blockchain networks use an overlay network. The physical Internet supplies connectivity, while the blockchain protocol defines logical neighbours, message formats, discovery, authentication, and propagation rules. A node need not maintain a connection to every other node. Instead, it maintains a set of peers and forwards valid messages according to protocol rules.
P2P designs offer resilience and reduce dependence on a single infrastructure operator, but they introduce challenges:
Network latency prevents instantaneous knowledge of all events.
Different nodes may temporarily observe different transaction sets.
Malicious peers may send invalid, conflicting, or deliberately delayed messages.
Network topology affects propagation speed and censorship resistance.
Sybil attacks may create many false identities unless participation is costly or permissioned.
A blockchain protocol must therefore define not only data structures but also membership, communication, validation, and incentives or sanctions.
2. Replicated State and Consistency
The state of a ledger is the information needed to determine the result of future valid operations. Depending on the platform, state may include account balances, unspent transaction outputs, smart-contract storage, asset ownership, permissions, or validator information.
Suppose a deterministic transition function is represented as:
St+1 = F(St, Ot)
Here, St is the state before step t, Ot is the ordered set of accepted operations at that step, and F is the protocol-defined transition function. The equation assumes that all honest nodes use the same software rules and that operations are applied in the same order. If two honest replicas begin with the same state and process identical ordered operations deterministically, they should reach the same next state.
This principle is called state-machine replication. Each replica stores or reconstructs a copy of a logical machine. Consensus determines the operation order; deterministic execution determines the resulting state.
Consistency models
Traditional distributed systems use several consistency models. Strong consistency attempts to make operations appear as if they occurred in one agreed order. Eventual consistency allows temporary divergence but expects replicas to converge if updates stop. Blockchains vary: a permissioned ledger may provide rapid finality, while a public proof-of-work chain may provide probabilistic confidence that increases as additional blocks are added.
Blockchain consistency is often described using two ideas:
Safety: honest nodes do not accept incompatible histories or states, subject to stated assumptions.
Liveness: valid operations eventually receive service or become included, subject to network and participation assumptions.
Safety and liveness can conflict. A protocol that refuses to progress during uncertainty may preserve safety but lose liveness. A protocol that accepts competing proposals rapidly may improve liveness but increase forks or reconciliation costs.
3. Fault Models and Fault Tolerance
Fault tolerance is the capacity of a system to continue providing defined guarantees despite specified failures. No protocol is fault tolerant against every possible failure; its claims are always conditional on a fault model.
Main fault categories
Fault type
Behaviour
Typical response
Crash fault
A node stops operating
Replication, failover, restart
Omission fault
A node fails to send or receive some messages
Retransmission, timeouts
Timing fault
A node or network violates timing assumptions
Time bounds, adaptive protocols
Byzantine fault
A node behaves arbitrarily, inconsistently, or maliciously
Authentication, quorum rules, Byzantine consensus
Sybil behaviour
One actor creates many apparent identities
Membership control or resource-based cost
A crash-fault model is substantially easier than a Byzantine model. A crashed node is silent; a Byzantine node may appear honest to one peer and dishonest to another, sign conflicting messages, attempt censorship, or exploit software weaknesses.
Quorum reasoning
In a permissioned Byzantine fault-tolerant protocol, a common design target is to tolerate f Byzantine nodes among n replicas with:
n ≥ 3f + 1
This is a standard resilience condition for many practical Byzantine fault-tolerant designs under their stated communication and authentication assumptions. Here, n is the total number of replicas and f is the maximum number of Byzantine replicas tolerated. For example, if f = 1, at least four replicas are required. The condition is not a universal rule for every consensus protocol; proof-of-work, proof-of-stake, and crash-fault protocols use different assumptions and thresholds.
A quorum certificate commonly requires a sufficient number of authenticated votes. If two quorums are large enough that they must overlap in at least one honest node, that honest node cannot validly support conflicting decisions under the protocol rules. The exact quorum size depends on the algorithm and fault model.
The network assumption
Many consensus protocols assume a partially synchronous network: messages may be delayed for an unknown period, but eventually communication becomes timely enough for progress. In a completely asynchronous network, it is impossible to guarantee both deterministic agreement and termination in the presence of even one crash failure under the well-known FLP impossibility result. This does not make distributed consensus useless; it means that real systems must use timing assumptions, randomisation, failure detectors, or probabilistic guarantees.
4. The Byzantine Generals Problem
The Byzantine Generals Problem is a model of agreement in which geographically separated commanders must coordinate an action despite some commanders being traitors. In blockchain terms, validators must agree on valid operations even when some nodes send contradictory or dishonest messages.
Validity: if conditions are correct, the decision reflects a valid proposal or rule.
Termination: honest participants eventually decide or continue making progress.
Digital signatures improve the problem by allowing a participant to prove who signed a message and whether it was altered. Signatures do not, however, make a dishonest signer truthful. Consensus still needs rules for conflicting valid signatures, unavailable nodes, and admission to the validator set.
Blockchain consensus mechanisms implement different trust and cost models:
Proof of work makes block production costly in computational resources and commonly offers probabilistic finality.
Proof of stake assigns influence according to economically bonded stake and normally imposes penalties for specified misbehaviour.
Classical Byzantine fault-tolerant protocols use authenticated voting and quorums, usually in a known or permissioned validator set.
Federated or quorum-based designs allow participants to choose trusted groups or quorum relationships, producing a trust model based on overlapping selections.
No mechanism eliminates trust completely. Trust is shifted into assumptions about computing power, economic incentives, validator identities, software, governance, or quorum configuration.
5. Time, Ordering, and Timestamps
Distributed systems do not possess a perfectly shared clock. A timestamp may indicate when a node observed or proposed an event, but it is not automatically proof of real-world time or causal order. Network delay and clock manipulation limit what can be inferred from timestamps.
Two forms of ordering are useful:
Physical-time ordering uses clocks and timestamps, subject to clock error.
Logical ordering records causal relationships or protocol sequence without claiming exact wall-clock time.
A logical clock can be updated conceptually as follows. A node increments its local counter before creating an event; when receiving a message carrying counter value m, it sets its counter to at least one greater than both its current value and m. Such a clock establishes a partial order: if event A causally precedes event B, then A receives a lower logical value. The converse is not necessarily true.
In a blockchain, block height, parent reference, consensus rounds, and transaction sequence numbers usually provide more reliable protocol ordering than an untrusted timestamp. A block timestamp may be constrained by validation rules, but it should not automatically be treated as an exact legal or scientific time record.
6. Block and Ledger Architecture
A block is a protocol-defined container of transactions or state updates. A typical block includes:
a block header;
a reference to the parent block;
a transaction or state-root commitment;
a protocol version;
a timestamp or logical-time field;
consensus-related data, such as a signature, vote certificate, or proof;
an ordered transaction list or a commitment to that list.
A cryptographic hash maps input data to a fixed-length digest. If the header contains the parent hash, changing an earlier block changes its hash and breaks the subsequent chain of references. This creates tamper evidence, not absolute immutability. A sufficiently powerful adversary, compromised keys, or a governing authority may still alter history or cause a reorganisation.
Merkle trees
A Merkle tree summarises many transactions using repeated hashing. Leaf hashes represent transactions; pairs of hashes are combined until one root remains. An inclusion proof contains the transaction and the sibling hashes needed to recompute the root. Verification requires approximately logarithmic proof length relative to the number of leaves, assuming a balanced tree.
If a block contains N leaves in a balanced binary tree, the number of sibling hashes in a typical inclusion path is approximately log2 N, with details depending on padding and tree construction. This statement concerns proof size, not the computational cost of validating the entire block or the storage required by the system.
Simplified blockchain block and Merkle tree architecture
Figure: Simplified blockchain block and Merkle tree architecture
Figure: A block header links to the previous block and commits to transactions through a Merkle root.
7. Transaction-State Models
Blockchain platforms commonly use two state models.
Unspent transaction output model
In the UTXO model, transactions consume previous unspent outputs and create new outputs. An output may specify an amount and the conditions required for spending it. A transaction is valid only if its inputs exist, are unspent, and satisfy the spending conditions. The ledger state is the set of currently unspent outputs.
Advantages include explicit ownership history, straightforward prevention of double spending, and parallel validation of transactions that use different outputs. Limitations include less direct representation of mutable account data and potentially complex transaction construction.
Account-based model
An account model stores balances and, often, a transaction nonce for each account. A transaction changes account state when it is authorised and executed. Smart-contract storage is naturally represented in this model.
A nonce prevents accidental or malicious replay of an earlier transaction and can impose an order on transactions from one account. Account systems are convenient for programmable applications, but concurrent updates and contract interactions can require careful execution rules.
Feature
UTXO model
Account model
Basic state unit
Unspent output
Account record
Spending control
Unlocking conditions
Authorisation and account rules
Parallelism
Often high for independent outputs
Depends on shared account state
Typical strength
Explicit spend tracking
Convenient programmable state
Typical challenge
Transaction composition
Ordering and shared-state conflicts
8. Forks and Chain Selection
A fork occurs when compatible-looking histories diverge. Forks may be accidental, planned, or adversarial.
A temporary or natural fork can arise when two valid blocks are produced before the network learns of the other.
A protocol upgrade fork occurs when participants adopt different rule sets; it may be backward-compatible or incompatible.
A contentious fork reflects disagreement among stakeholders over rules, governance, or history.
Fork choice rules determine which candidate history is treated as canonical. In a longest-chain or greatest-work design, the selected history is the one with the greatest accumulated resource measure, not necessarily the one with the greatest number of transactions. Other systems select a chain using validator votes, finality certificates, or a combination of fork choice and finality.
A transaction included in a branch that is later abandoned may return to the pending pool or become invalid if its inputs were spent in the selected branch. Consequently, users often wait for confirmations or finality evidence before treating a transaction as irreversible.
9. Ledger Architectures and Access Models
The words public, private, consortium, and hybrid describe governance and access arrangements rather than one specific consensus algorithm.
Architecture
Participation
Typical consensus
Strengths
Limitations
Public permissionless
Anyone may read, submit, and often validate under protocol rules
One organisation controls admission and governance
Crash or Byzantine fault-tolerant protocols
Performance, access control, privacy
Operator concentration and trust
Consortium permissioned
Several known organisations share control
BFT voting, federated arrangements
Shared governance and efficient inter-organisational coordination
Membership disputes, collusion risk
Hybrid
Public and restricted components are combined
Mixed mechanisms
Selective transparency and confidentiality
Integration complexity and unclear responsibility
Public ledgers
Public ledgers are suitable where open verification, censorship resistance, and participation without prior institutional approval are important. Their costs may include transaction fees, throughput constraints, visible metadata, governance disputes, and energy or hardware requirements depending on consensus design. Pseudonymous addresses do not guarantee anonymity; transaction graphs can often be analysed and combined with external information.
Private ledgers
A private ledger can enforce identity, roles, geographic restrictions, and data-retention rules. It may use known validators and rapid finality. However, if one organisation can rewrite history or exclude participants, the system should not be marketed as trustless. In many cases, a conventional replicated database may be simpler and more economical.
Consortium ledgers
Consortium systems are useful when several organisations need a shared process but do not want one party to control the database. Examples include trade documentation, interbank settlement, supply-chain provenance, and shared registries. Governance must specify membership, voting rights, software upgrades, dispute resolution, liability, data access, and procedures for compromised keys or dishonest members.
Hybrid ledgers
A hybrid arrangement may keep sensitive documents or personal data in controlled repositories while publishing hashes, proofs, or selected events to a public network. This can provide evidence of integrity without exposing the underlying data. A hash is not automatically anonymous: if the original document can be guessed or obtained, the hash may support correlation. Personal data should therefore not be placed on an immutable ledger without a lawful and technically justified design.
The following is an illustrative case, not a report of a named implementation.
Background
Four pharmaceutical manufacturers, two logistics providers, and a national wholesaler want to trace temperature-sensitive medicines. Existing records are fragmented across enterprise systems. Participants disagree about who should operate the authoritative database, and counterfeit products have entered the distribution channel.
Problem
The parties need a shared event history covering manufacture, packaging, dispatch, custody transfer, receipt, and recall. The system must restrict commercial information, identify accountable organisations, tolerate an unavailable participant, and provide evidence that records were not silently altered.
Analysis
A public permissionless ledger would provide broad auditability but could expose commercially sensitive shipment data and create unnecessary transaction fees. A single private database would be efficient but would not resolve the governance concern that no participant should unilaterally control the shared record. A consortium ledger is therefore appropriate.
The consortium defines an admission authority, a validator committee, data schemas, digital-signature requirements, and a Byzantine fault tolerance target. Documents remain in controlled repositories. The ledger stores document hashes, event identifiers, timestamps, custody transitions, and references to authorised records. Each participant operates a node, while an independent auditor receives read access.
Approach and solution
At each custody transfer, the sending and receiving organisations sign an event. Validators check signatures, participant permissions, sequence rules, and whether the product identifier is in an acceptable state. The consensus service orders valid events and produces a finality certificate. The application rejects a receipt event if the product was not previously dispatched or if a recall status prohibits transfer.
Outcome
The design improves shared visibility and makes unauthorised alteration detectable. It does not, by itself, prove that a sensor was accurate, that a worker entered truthful data, or that a physical package was not replaced. Those risks require calibrated sensors, secure procedures, audits, and legal accountability.
Learning points
The ledger is only one component of a socio-technical system.
Permissioned membership can improve privacy but introduces governance responsibility.
On-chain hashes establish integrity evidence, not truth of the original physical event.
A conventional database may remain appropriate for private operational data.
Finality, access control, identity management, and dispute procedures must be designed together.
11. Design, Governance, and Professional Implications
A sound ledger architecture begins with requirements rather than a preference for a particular technology. Designers should ask:
Is there a genuine multi-party coordination problem?
Do participants need a shared writer-resistant history?
Can a trusted database operator be accepted?
Who may read, submit, validate, and upgrade the system?
What finality, throughput, latency, and availability are required?
What data must be deleted, corrected, or kept confidential?
What happens when keys are lost or a participant becomes malicious?
Which jurisdiction governs records, contracts, identity, and dispute resolution?
Privacy and data protection
Immutable or append-only records can conflict with rights of correction and erasure. Designers should minimise personal data, use off-chain storage where suitable, apply encryption and access controls, and assess whether hashes or metadata can identify individuals. Encryption does not permanently guarantee confidentiality because keys can be compromised and cryptographic algorithms can become obsolete.
Identity and accountability
Public-key signatures authenticate control of a key, not necessarily the real-world identity of a person or organisation. Permissioned systems require identity issuance, revocation, recovery, and separation of duties. Lost keys, insider abuse, and compromised administrator privileges are governance problems as much as technical problems.
Smart-contract risk
A smart contract is deterministic software executed according to ledger rules. Bugs may become difficult to correct after deployment. Professional practice requires code review, testing, formal analysis where justified, controlled upgrades, emergency procedures, and clear specification of what legal obligations the code represents. Oracles that bring external data into a ledger are additional trust boundaries.
12. Contemporary Developments and Limitations
Current ledger research focuses on scalability, interoperability, privacy-preserving computation, rollups and other off-chain execution approaches, energy efficiency, cross-chain communication, decentralised identity, and verifiable credentials. These developments can reduce costs or expand functionality, but they often introduce new assumptions: additional operators, bridges, sequencers, cryptographic parameters, or governance bodies.
Important limitations remain:
Consensus cannot guarantee truthful input from the physical world.
A ledger cannot remove legal or institutional disputes.
Replication increases storage, bandwidth, and operational costs.
Public transparency can expose business relationships and personal patterns.
Smart-contract composability can amplify failures across applications.
Interoperability mechanisms may create concentrated bridge or oracle risks.
Governance decisions can override purely technical interpretations of immutability.
The best practice is therefore architectural proportionality: use a blockchain where its coordination and audit properties justify its complexity, and use ordinary databases, signed documents, or secure APIs where they are sufficient.
Chapter Summary
Distributed ledgers are distributed systems that combine networking, replicated state, validation, consensus, and deterministic execution. Peer-to-peer communication removes dependence on a single communication hub but introduces latency, partial knowledge, and malicious-node risks. Replication stores multiple copies; consensus establishes an agreed operation order; deterministic execution produces a common state.
Safety and liveness are distinct goals, and their guarantees depend on the fault and network models. Byzantine faults are more difficult than crashes because malicious nodes may behave inconsistently. The Byzantine Generals Problem explains why authenticated messages, quorum rules, economic incentives, or membership controls are needed. Timestamps assist protocol operation but do not provide perfect global time.
Blocks use parent hashes and state or transaction commitments to create tamper-evident histories. Merkle trees permit compact inclusion proofs. UTXO and account models represent ledger state differently, each with practical strengths and limitations. Forks arise from concurrent proposals, rule changes, or governance disputes, and chain-selection or finality mechanisms determine the accepted history.
Public, private, consortium, and hybrid ledgers differ primarily in participation, governance, visibility, and trust assumptions. A successful deployment must address identity, privacy, data quality, legal responsibility, upgrades, key recovery, and operational security. Blockchain is not a substitute for governance; it is a component of a larger socio-technical system.
Key Terms
Distributed system: A system whose components operate on different machines and coordinate through communication.
Peer-to-peer network: A network in which participating nodes communicate through an overlay without requiring one central service for all interactions.
Replicated state: Multiple nodes maintaining equivalent logical information or copies of a system state.
Consensus: A protocol process for selecting an agreed decision, operation order, or ledger history.
State-machine replication: Running deterministic state transitions on multiple replicas after agreeing on operation order.
Safety: The property that honest nodes do not accept incompatible outcomes under stated assumptions.
Liveness: The property that valid operations or decisions eventually progress.
Byzantine fault: Arbitrary or malicious behaviour by a system component.
Quorum: A sufficiently large set of authenticated participants whose agreement supports a decision.
Timestamp: A value associated with an event to represent physical or protocol time.
Logical clock: An ordering mechanism that represents causality without requiring a perfectly synchronised physical clock.
Block: A protocol-defined container of transactions, state commitments, metadata, and consensus information.
Hash pointer: A reference containing a cryptographic hash of prior data.
Merkle tree: A hash tree that commits to many data items through one root hash.
UTXO: An unspent transaction output that represents spendable ledger state.
Account model: A state model based on balances, permissions, nonces, and often contract storage.
Fork: A divergence between competing ledger histories or protocol rules.
Finality: The degree to which a ledger decision is considered irreversible under a protocol.
Permissionless ledger: A ledger whose participation is generally open under protocol rules.
Consortium ledger: A permissioned ledger jointly governed by multiple organisations.
Review Questions
Short Answer Questions
What is the difference between replication and consensus?
Why does a peer-to-peer network experience partial knowledge of events?
Define a Byzantine fault and contrast it with a crash fault.
What information does a block header commonly contain?
State one important difference between the UTXO and account models.
Long Answer Questions
Explain how state-machine replication supports agreement among blockchain nodes.
Discuss the roles and limitations of timestamps and logical ordering in distributed ledgers.
Explain the Byzantine Generals Problem and compare how proof of work, proof of stake, and permissioned BFT systems address it.
Describe how hashes, parent references, and Merkle roots contribute to tamper evidence.
Compare public, private, consortium, and hybrid ledgers in terms of participation, governance, privacy, and performance.
Analytical / Application Questions
A group of six known organisations wants shared shipment records, rapid finality, and restricted commercial visibility. Which ledger architecture would you recommend, and what governance controls would you require?
A company proposes storing all customer identity documents directly on an immutable public ledger. Evaluate the proposal using privacy, security, legal, and architectural considerations.
Two valid blocks are produced nearly simultaneously and different nodes receive them in different orders. Explain why a fork occurs, how a protocol can resolve it, and what happens to transactions in the discarded branch.
Multiple Choice Questions with Answers
Question 1
Which statement best distinguishes consensus from replication?
A. Replication stores multiple copies, while consensus selects an agreed decision or order.
B. Replication authenticates users, while consensus encrypts transactions.
C. Replication prevents all faults, while consensus removes the need for networking.
D. Replication is used only in public ledgers, while consensus is used only in private ledgers.
Correct Answer: A. Replication stores multiple copies, while consensus selects an agreed decision or order.
Question 2
Which fault involves a node behaving inconsistently or maliciously toward different peers?
A. Crash fault
B. Byzantine fault
C. Power-saving fault
D. Read-only fault
Correct Answer: B. Byzantine fault
Question 3
Under the stated common BFT resilience condition n ≥ 3f + 1, how many replicas are required to tolerate one Byzantine replica?
A. 2
B. 3
C. 4
D. 5
Correct Answer: C. 4
Question 4
What is the primary purpose of including a previous block hash in a block header?
A. To guarantee that all input data is truthful
B. To link the block to prior history and make alteration detectable
C. To eliminate the need for consensus
D. To reveal the identity of every transaction user
Correct Answer: B. To link the block to prior history and make alteration detectable
Question 5
What does a Merkle root primarily provide?
A. A compact commitment to a collection of transactions
B. A guarantee that a physical product is genuine
C. A replacement for digital signatures
D. A global synchronised clock
Correct Answer: A. A compact commitment to a collection of transactions
Question 6
Which state model represents ledger state primarily as unspent outputs?
A. Account model
B. UTXO model
C. Relational-only model
D. Timestamp model
Correct Answer: B. UTXO model
Question 7
Why is a blockchain timestamp not automatically proof of exact real-world time?
A. Nodes may have clock differences and messages may be delayed.
B. Hashes cannot be stored in blocks.
C. Consensus prevents timestamps from being recorded.
D. A timestamp can only be used in private networks.
Correct Answer: A. Nodes may have clock differences and messages may be delayed.
Question 8
Which architecture is generally most appropriate when several known organisations jointly require a shared ledger?
A. Consortium permissioned ledger
B. Single-user local database
C. Open public ledger in every case
D. Unreplicated file system
Correct Answer: A. Consortium permissioned ledger
Question 9
What is a temporary fork?
A. A permanent deletion of all previous blocks
B. A divergence caused when competing valid blocks are briefly observed
C. A change from digital signatures to passwords
D. A failure that occurs only in account models
Correct Answer: B. A divergence caused when competing valid blocks are briefly observed
Question 10
Which statement about an on-chain hash of an off-chain document is correct?
A. It proves every fact in the document is true.
B. It can provide evidence that the document has not changed, but does not prove the original event was truthful.
C. It makes the document automatically anonymous and legally binding.
D. It prevents all authorised users from modifying the document.
Correct Answer: B. It can provide evidence that the document has not changed, but does not prove the original event was truthful.