  Despite the hype about blockchains and distributed ledgers, no formal
abstraction of these objects has been proposed. To face this issue, in this
paper we provide a proper formulation of a distributed ledger object. In brief,
we define a ledger object as a sequence of records, and we provide the
operations and the properties that such an object should support.
Implementation of a ledger object on top of multiple (possibly geographically
dispersed) computing devices gives rise to the distributed ledger object. In
contrast to the centralized object, distribution allows operations to be
applied concurrently on the ledger, introducing challenges on the consistency
of the ledger in each participant. We provide the definitions of three well
known consistency guarantees in terms of the operations supported by the ledger
object: (1) atomic consistency (linearizability), (2) sequential consistency,
and (3) eventual consistency. We then provide implementations of distributed
ledgers on asynchronous message passing crash-prone systems using an Atomic
Broadcast service, and show that they provide eventual, sequential or atomic
consistency semantics. We conclude with a variation of the ledger - the
validated ledger - which requires that each record in the ledger satisfies a
particular validation rule.
