pod: An Optimal-Latency, Censorship-Free,
and Accountable Generalized Consensus Layer
Abstract
This work addresses the inherent issues of high latency in blockchains and low scalability in traditional consensus protocols. We present pod, a novel notion of consensus whose first priority is to achieve the physically-optimal latency of , or one round-trip, i.e., requiring only one network trip (duration ) for writing a transaction and one for reading it.
To accomplish this, we first eliminate inter-replica communication. Instead, clients send transactions directly to all replicas, which independently process transactions and append them to local logs. Replicas assign a timestamp and a sequence number to each transaction in their logs, allowing clients to extract valuable metadata about the transactions and the system state. Later on, clients retrieve these logs and extract transactions (and associated metadata) from them.
Necessarily, this construction achieves weaker properties than a total-order broadcast protocol, due to existing lower bounds. Our work models the primitive of pod and defines its security properties. We then show pod-core, a protocol that satisfies properties such as transaction confirmation within , censorship resistance against Byzantine replicas, and accountability for safety violations. We show that single-shot auctions can be realized using the pod notion and observe that it is also sufficient for other popular applications.
Keywords and phrases:
consensus, censorship resistance, accountability, auctionsCopyright and License:
2012 ACM Subject Classification:
Security and privacy Distributed systems security ; Computer systems organization Dependable and fault-tolerant systems and networksEditor:
Dariusz R. KowalskiSeries and Publisher:
Leibniz International Proceedings in Informatics, Schloss Dagstuhl – Leibniz-Zentrum für Informatik
1 Introduction
Despite the widespread adoption of blockchains, a significant challenge remains unresolved: they are inherently slow. The latency from the moment a client submits a transaction to when it is confirmed in another client’s view of the blockchain can be prohibitively long for certain applications. Notice that we define latency in terms of the blockchain liveness property, referring to finalized, non-reversible outputs: once a transaction is received by a reader, it remains in the protocol’s output permanently. Moreover, we do not assume “optimistic” or “happy path” scenarios, where transactions might finalize faster under favorable conditions (such as having honest leaders or optimal network conditions).
Indeed, Nakamoto-style blockchain protocols require a large number of rounds in order to achieve consensus on a new block, even when considering the best known bounds [15]. On the other hand, it is known that permissioned protocols for parties (out of which are corrupted) realizing traditional notions of broadcast and Byzantine agreement require at least rounds in the synchronous case [1] and at least rounds in the asynchronous case [14], even when allowing for digital signatures and probabilistic termination.
In a model where replicas maintain the network, writers submit transactions, and readers read the network, the minimum latency is one network round trip, or , letting denote the actual network delay, as the information must travel from the writers to the replicas and then to the readers. More importantly, we want that any transaction from an honest writer appears in the output of honest readers within time, regardless of the current value of and corrupted parties’ actions. In this context, we are motivated by the following question:
Can we realize tasks that blockchains are commonly used for with optimal latency?
We give a positive answer to this question with a protocol realizing pod, a new notion of consensus that trades off traditional agreement properties for optimal latency, while retaining sufficient security guarantees to realize important tasks (e.g., decentralized auctions).
1.1 Our Contributions
In order to motivate the notion of pod, we first introduce the architecture of our protocol, pod-core, which realizes this notion. To achieve the single-round-trip latency, our first key design decision is to eliminate inter-replica communication entirely. Instead, writers send their transactions directly to all replicas. Each replica maintains its own replica log, processes incoming transactions independently, and transmits its log to readers on request. Readers then process these replica logs to extract transactions and relevant associated information. See Figure 1 for a summary of the pod-core architecture.
This design raises two important questions. First, what meaningful information can readers derive from replica logs when replicas operate in isolation? Second, given that in two rounds even randomized authenticated broadcast is proven impossible [14], what capabilities can this – necessarily weaker – primitive offer? We demonstrate that, by incorporating simple mechanisms, such as assigning timestamps and sequence numbers to transactions, replicas can enable readers to extract valuable information beyond mere low-latency guarantees. Furthermore, we show how the properties of pod can enable various applications, including auctions (as shown in Section 6). Specifically, a secure pod delivers the following guarantees (formally defined in Section 3):
-
Transaction confirmation within , with each transaction assigned a confirmed round: we say that the transaction becomes confirmed at the time indicated by the confirmed round.
-
Censorship resistance when facing up to Byzantine and omission-faulty replicas, ensuring all confirmed transactions appear in every honest reader’s output.
-
A past-perfect round can be computed by readers, such that the reader is guaranteed to have received all transactions that are or will be confirmed prior to this round, even though not all transactions are strictly ordered.
-
Accountability for all safety violations, i.e., if any safety property is violated, at least replicas can be identified as misbehaving.
In particular, our Protocol pod-core, presented in Section 4, realizes the notion of pod with the properties above, supporting a continuum of two adversarial models: up to Byzantine replicas and up to omission-faulty replicas, out of a total of replicas. Protocol pod-core requires no expensive cryptographic primitives or setup beyond digital signatures and a PKI registering replicas’ public keys. We showcase pod-core’s efficiency by means of experiments with a prototype implementation presented in Section 5. Our experiments show that even with 1000 replicas distributed around the world, the latency achieved by our protocol is just under double (resp. about 5 times) the round-trip time between writer and reader clients with security against omission-faulty (resp. Byzantine) replicas.
1.2 Technical Overview
We consider that time proceeds in rounds, and that parties (replicas and clients) know the current round, so we can express timestamps in terms of rounds. The output of pod associates each transaction tx with timestamp values (minimum round), (maximum round) and (confirmed round). We call these values the trace of tx, and they evolve over time. Initially we have but later we get , when a transaction is confirmed. The protocol guarantees confirmation within rounds, meaning that, at most rounds after tx was written, every party who reads the pod will see tx as confirmed with some . The protocol also guarantees that , a property we call confirmation bounds: while each party reads different values for the same tx, pod guarantees that values read by different parties stay within these limits.
When clients read the pod, they obtain a pod data structure , where T is the set of transactions and their traces and is a past-perfect round. The past-perfection safety property guarantees that T contains all transactions that every other honest party will ever read with a confirmed round smaller than . A pod also guarantees past-perfection within , meaning that is at most rounds in the past.
In summary, pod provides past-perfection and confirmation bounds as safety properties, ensuring parties cannot be blindsided by transactions suddenly appearing as confirmed too far in the past, and that the different (and continuously changing) transaction timestamps stay in a certain range. The liveness properties of confirmation within and past-perfection within ensure that new transactions get confirmed within a bounded delay, and that each party’s past-perfect round must be constantly progressing.
Besides introducing the notion of pod, we present protocol pod-core, which realizes this notion while requiring minimal interaction among parties and achieving optimal latency, i.e., optimal parameters and , where is the current network delay (not a delay upper bound, which we assume to be unknown). The only communication is between each client and the replicas. Writing a transaction tx to pod-core only requires clients to send tx to the replicas, who each assign a timestamp ts (their current time) and a sequence number sn to tx and return a signature on . When reading the pod, the client simply requests each replica’s log of transactions, validates the responses, and determines , , and from the received timestamps. Protocol pod-core supports a continuum of mixed adversarial models, tolerating up to Byzantine and at the same time up to additional omission-faulty replicas.
1.3 Related work
Many previous works have lowered the latency of ordering transactions. HotStuff [27] uses three rounds of all-to-leader and leader-to-all communication pattern, which results in a latency (measuring from the moment a client submits a transaction until in appears in the output of honest replicas) of in the happy path. Jolteon [16], Ditto [16], and HotStuff-2 [19] are two-round versions of HotStuff with end-to-end latency of . MoonShot [10] allows leaders to send a new proposal every time, before receiving enough votes for the previous one, but still achieves an end-to-end latency of . In the “DAG-based” line of word, Tusk [8] achieves and end-to-end latency of , the partially-synchronous version of BullShark [23] an end-to-end latency of , and Mysticeti [3] an end-to-end latency of . All these protocols aim at total-order properties and have their lower latency is inherently restricted by lower bounds, whereas pod starts from the single-round-trip latency requirement and explores the properties that can be achieved.
The redundancy of consensus for implementing payment systems has been recognized by previous works [18, 22, 7, 5]. The insight is that total transaction order is not required in the case that each account is controlled by one client. Instead, a partial order is sufficient, ensuring that, if transactions and are created by the same client, then every party outputs them in the same order. This requirement was first formalized by Guerraoui et al. [18] as the source-order property. The constructions of Guerraoui et al. [18] and FastPay [5] require clients to maintain sequence numbers. ABC [22] requires clients to reference all previous transaction in a DAG (including its own last transaction). Cheating clients might lose liveness [5, 18, 22], but equivocating is not possible. To the best of our knowledge, previous work in the consensusless literature has not considered or achieved a property like our past-perfection, which we show sufficient for implementing auctions.
2 Preliminaries
Notation.
We denote by the set of natural numbers including . Letting be a bounded sequence, we denote by the element (starting from ), and by its length. Negative indices address elements from the end, so is the element from the end, and in particular is the last. The notation means the subarray of from onwards, while means the subsequence of up to (but not including) . We denote an empty sequence by . We denote the concatenation of sequences and by .
Pseudocode notation.
Command “require ” causes a function to terminate immediately and return if evaluates to . Notation “upon ” causes a block of code to be executed when event occurs. Notations “” and “” denote receiving and sending a message from and to party , respectively. Finally, denotes that variable is a map from elements of type to elements of type . When obvious from the context, we do not explicitly write the types or . For a map , the operations and return all keys and all values in , respectively. With we denote an empty map.
Parties.
We consider replicas and an unknown number of clients. Parties are stateful, i.e., store state between executions of different algorithms. We assume that replicas are known to all parties and register their public keys (for which they have corresponding secret keys) in a Public Key Infrastructure (PKI). Clients do not register keys in the PKI.
Adversarial model.
We call a party (replica or client) honest, if it follows the protocol, and malicious otherwise. We assume static corruptions, i.e., the set of malicious replicas is decided before the execution starts and remains constant. This work uses a combination of two adversarial models, the Byzantine and the omission models. In the Byzantine model, corrupted replicas are malicious and may deviate arbitrarily from the protocol. The adversary has access to the internal state and secret keys of all corrupted parties. We denote by the number of Byzantine replicas in an execution. The Byzantine adversary is modelled as a probabilistic polynomial time overarching entity that is invoked in the stead of every corrupted party. That is, whenever the turn of a corrupted party comes to be invoked by the environment, the adversary is invoked instead. In the omission model, corrupted replicas may only deviate from the protocol by dropping messages that they were supposed to send, but follow the protocol otherwise. Observe that this includes crash faults, where replicas crash (i.e. stop execution) and remain crashed until the end of the execution of an algorithm. We denote by the number of omission-faulty replicas in an execution.
Modeling time.
We assume that time proceeds in discrete rounds, and parties have clocks allowing them to determine the current round. For simplicity, our analysis will assume synchronized clocks. Notice that although we assume synchronized clocks as a setup, clock synchronization can be achieved in partially synchronous networks [11] using existing techniques [21], also in the case where replicas gradually join the network [26]. By timestamp we refer to a round number assigned to some event.
Modeling network.
We denote by the actual delay (measured in number of rounds) it takes to deliver a message between two honest parties, a number which is finite but unknown to all parties. We denote by an upper bound on this delay, i.e., , which is also finite. In the synchronous model, is known to all parties. In the partially synchronous model [11], is unknown but still finite, i.e., all messages are eventually delivered. A protocol is called responsive if it does not rely on knowledge of and its liveness guarantees depend only on the actual network delay .
Digital signatures
We assume that replicas (and auctioneers in bidset-core) authenticate their messages with digital signatures. A digital signature scheme consists of the following three algorithms, satisfying the EUF-CMA security [17]: (1) : The key generation algorithm takes as input a security parameter and outputs a secret key sk and a public key pk. (2) : The signing algorithm takes as input a private key sk and a message and returns a signature . (3): The verification algorithm takes as input a public key pk, a message , and a signature , and outputs a bit . We say is a valid signature on with respect to pk if .
Accountable safety
Taking a similar approach as Neu, Tas, and Tse [20, Def. 4], we define accountable safety through an identification function.
Definition 1 (Transcript and partial transcript).
We define as transcript the set of all network messages sent by all parties in an execution of a protocol. A partial transcript is a subset of a transcript.
Definition 2 (-Accountable safety).
A protocol satisfies accountable safety with resilience if its interface contains a function , which takes as input a partial transcript and outputs a set of replicas , such that the following conditions hold except with negligible probability.
- Correctness:
-
If safety is violated, then there exists a partial transcript , such that and .
- No-framing:
-
For any partial transcript produced during an execution of the protocol, the output of does not contain honest replicas.
Remark 3.
For simplicity, we have defined the transcript based on messages sent by all replicas. We can also define a local transcript as the set of messages observed by a single party. As will become evident from the implementation of , in practice, adversarial behavior can be identified from the local transcripts of a single party or of a pair of parties.
3 Modeling pod
In this section, we introduce the notion of a pod, a distributed protocol where clients can read and write transactions. We first define the basic data structures of a pod protocol.
Definition 4 (Transaction trace and trace set).
The transaction trace of a transaction is a tuple containing the values , which change during the execution of a pod protocol. We call the minimum round, the maximum round, the confirmed round. We denote by an unbounded maximum round and by an undefined confirmed round. We also denote these values as , and . A trace set T is a set of transaction traces .
Definition 5 (Confirmed transaction).
A transaction with confirmed round is called confirmed if , and unconfirmed otherwise.
Definition 6 (Pod data structure).
A pod data structure is a tuple , where T is a trace set and is a round number called the past-perfect round.
We denote the components of a pod data structure as and . We write if an entry exists in . We remark that transactions in T may be confirmed on unconfirmed. Moreover, will be used to define a completeness property on T (the past-perfection property of pod).
Definition 7 (Auxiliary data).
We associate with a pod data structure some auxiliary data , which will be used to validate . The exact implementation of is irrelevant for the definition of pod; however, it is helpful to mention that in pod-core it will be a tuple , where will be a past-perfection certificate and a map from each transaction tx in to a transaction certificate for tx. Both contain digital signatures.
Definition 8 (Interface of a pod).
A pod protocol has the following interface.
-
: It writes a transaction tx to the pod.
-
: It outputs a pod data structure and auxiliary data .
We say that a client reads the pod when it calls read(). If tx appears in T, we say that the client observes tx and, if , we say that the client observes tx as confirmed.
Definition 9 (Validity function).
Apart from its interface functions, a pod protocol also specifies a computable, deterministic, and non-interactive function valid(, ) that takes as input a pod data structure and auxiliary data and outputs a boolean value. We say that a pod data structure is valid if .
Definition 10 (View of the pod).
We call view of the pod and denote by the data structure returned by read(), where read() is invoked by client c and the output is produced at round r. We remark that r denotes the round when read() outputs, as the client may have invoked it at an earlier round.
We now introduce the basic definition of a secure pod protocol, as well as some additional properties (timeliness and monotonicity) that it may satisfy.
Definition 11 (Secure pod).
A protocol is a secure pod if it implements the pod interface of Definition 8 and specifies a validity function valid(), such that the following properties hold.
- (Liveness) Completeness:
-
Honest clients always output a valid pod data structure. That is, if read() returns to an honest client, then .
- (Liveness) Confirmation within :
-
Transactions of honest clients become confirmed after at most rounds. Formally, if an honest client c writes a transaction tx at round r, then for any honest client (including ) it holds that and .
- (Liveness) Past-perfection within :
-
Rounds become past-perfect after at most rounds. Formally, for any honest client c and round , it holds that .
- (Safety) Past-perfection:
-
A valid pod contains all transactions that may ever obtain a confirmed round smaller than . Formally, the adversary cannot output and to the network, such that and there exists a transaction tx such that and and and .
- (Safety) Confirmation bounds:
-
The values and bound the confirmed round that a transaction may ever obtain. Formally, the adversary cannot output and to the network, such that and there exists a transaction tx such that and and or .
The confirmation bounds property gives , for computed by honest clients, but it does not guarantee anything about the values of and (for example, it could trivially be and ). To this purpose we define an additional property of pod, called timeliness. Previous work has observed a similar property as orthogonal to safety and liveness [25].
Definition 12 (pod -timeliness for honest transactions).
A pod protocol is -timely if it is a secure pod, as per Definition 11, and for any honest clients , if writes transaction tx in round r and has view in round , such that , then:
(1) ;
(2) ;
(3) , implying and .
Moreover, a pod protocol allows , , to change during an execution – for example, clients in construction pod-core will update them when they receive votes from replicas. In the full version of this paper [2, Appendix A] we define monotonicity properties that impose restrictions on how these values evolve.
4 Protocol pod-core
Before we present protocol pod-core, we define basic concepts and structures.
Definition 13 (Vote).
A vote is a tuple , where tx is a transaction, ts is a timestamp, sn is a sequence number, is a signature, and is a replica. A vote is valid if is a valid signature on message with respect to the public key of replica .
Remark 14 (Sequence numbers, session identifiers, streaming algorithm).
Honest clients process votes from each replica in the same order, namely in order of increasing timestamps. For this, a replica maintains a sequence number which it increments and includes every time it assigns a timestamp to a transaction. We also assume that all messages between clients and replicas are concatenated with a session identifier (sid), which is unique for each concurrent execution of the protocol and included in all messages signed by the replicas. Finally, the client protocol we show in Protocol 1 is streaming, that is, clients maintain a connection to the replicas, and stateful, that is, they persist their state (received transactions and votes) across all invocations of write() and read().
Past-perfection and transaction certificates.
In pod-core, clients store certain votes which they output upon read() as part of the certificate , which will be used to prove the validity of the returned and for accountability in case of safety violations. Specifically, consists of two parts, : the past-perfection certificate contains, for each replica, the vote on the most recent timestamp received from that replica. It is implemented as a map from replicas to votes, i.e., . The transaction certificate contains, for each transaction, all valid votes received for it. It is implemented as a map from transactions to a map from replicas to votes, i.e., and . We remark that can be derived by taking the union of certificates for all transactions and keeping the most recent vote for each replica, but we define explicitly for clarity and readability.
Protocol 1 (pod-core).
Protocol pod-core is executed by replicas that follow the steps of Algorithm 1 and an unknown number of clients that follow the steps of Algorithms 2 and 3 with parameters , and , where denotes the number of Byzantine replicas and the number of omission-faulty replicas (in addition to the Byzantine) and is the number of honest replicas.
4.1 Replica code
We show the pseudocode for the replica code in Algorithm 1. The state of a replica (lines 1–3) contains replicaLog, a log implemented as a sequence of votes created by the replica, where ts is the timestamp assigned by the replica to tx, sn is a sequence number, and its signature. When the replica receives from a client c, it appends c to its set of connected clients and sends to c all entries in replicaLog (lines 7–12).
When it receives , a replica first checks whether it has already seen tx, in which case the message is ignored. Otherwise, it assigns tx a timestamp ts equal its local round number and the next available sequence number sn, and signs the message (line 18). Honest replicas use incremental sequence numbers for each transaction, implying that a vote with a larger sequence number than a second vote will have a larger or equal timestamp than the second. The replica appends to replicaLog, and sends it via a message to all connected clients (line 20).
Heartbeat messages.
Clients maintain a most-recent timestamp variable for each replica. This is updated every time they receive a vote and is crucial for computing the past-perfect round . To make sure that clients update even when does not have any new transactions in a round, we have replicas send a vote on a dummy heartBeat transaction the end of each round (lines 23–26). An obvious practical optimization is to send heartBeat only for rounds when no other transactions were sent. When received by a client, a heartBeat is handled as a vote (i.e., it triggers line 11). To avoid being considered a duplicate vote by clients (see line 33 in Algorithm 2), replicas append the round number to the heartBeat transaction.
4.2 Client code
The state of a client is shown in Algorithm 2 in lines 1–6. Variable tsps is a map from transactions tx to a map from replicas to timestamps ts. The state gets initialized in lines 7–10. At initialization the client also sends a message to each replica, which initiates a streaming connection from the replica to the client.
Receiving votes.
A client maintains a connection to each replica and receives votes through messages (lines 11–16). When a vote is received from replica , the client first verifies the signature under ’s public key (line 30). If invalid, the vote is ignored. Then the client verifies that the vote contains the next sequence number it expects to receive from replica (line 31). If this is not the case, the vote is backlogged and given again to the client at a later point (the backlogging functionality is not shown in the pseudocode). The client then checks the vote against previous votes received from . First, ts must be greater or equal to , the most recent timestamp returned by replica . Second, the replica must have not previously sent a different timestamp for tx. If both checks pass, the client updates and with ts (line 34). The client also updates and for each valid vote (lines 13–14).
If any of these checks fail, the client ignores the vote, since both of these cases constitute accountable faults: In the first case, the client can use the message and the vote it received when it updated to prove that has misbehaved. In the second case, it can use and the previous vote it has received for tx. The function we show in Algorithm 8 can detect such misbehavior
Writing to and reading from pod.
Clients interact with a pod using the write(tx) and read() functions. In order to write a transaction tx, a client sends to each replica (lines 17–19). Since the construction is stateful and streaming, the client state contains at all times the latest view the client has of the pod. Hence, read() operates on the local state (lines 20–24). It returns all the transactions the client has received so far and their traces, and the current past-perfect round . We will show the details of in Algorithm 3. As per the pod interface, read() also returns auxiliary data , which has two parts: the past-perfection certificate and a list of transaction certificates (line 23). Note that on line 3 returns all entries in tsps.
Computing the trace values and the past-perfect round.
Function computeTxSet() (Algorithm 3), computes the current transaction set from the timestamps received so far. A transaction becomes confirmed when the client receives votes for it, in which case is the median of all received timestamps (lines 6–8). The computation of , and is done using the functions minPossibleTs(), maxPossibleTs(), and computePastPerfectRound(), respectively. Function minPossibleTs() gets the timestamps timestamps from each replica on tx and the most recent timestamps mrt. It fills a missing timestamp from replica with (line 16), the minimum timestamp that can ever be accepted from (see the check in line 32 of Algorithm 2). It then prepends times the value, pessimistically assuming that up to replicas will try to bias tx by sending a timestamp to other clients. It then returns the median of the smallest timestamps, which, again pessimistically, are the smallest timestamps another client may use to confirm tx. Function maxPossibleTs() is analogous, filling a missing vote with (line 24) and appending the value, the worst-case timestamp that Byzantine replicas may send to other clients. Finally, computePastPerfectRound() is similar to minPossibleTs() but it operates on timestamps mrt. As honest clients will not accept a timestamp smaller than mrt on any future transaction (line 32 of Algorithm 2), the returned value bounds from below the confirmed round of any transaction not yet seen.
4.3 Validation function
The validation function valid() allows a pod client to verify that a given pod data structure satisfies the security properties of pod (Definition 11) without necessarily communicating with pod replicas. The function valid() for pod-core is shown in Appendix A. The verifier repeats the logic of an honest client: it is initialized in the same way as a pod client, goes through the votes found in , and checks that the resulting values match the ones in .
4.4 Analysis
Theorem 15 (pod-core security).
Assume that the network is partially synchronous with actual network delay , that is the number of Byzantine replicas, the number of omission-faulty replicas, the confirmation threshold, and the total number of replicas. Protocol pod-core (Protocol 1), instantiated with a EUF-CMA secure signature scheme, the valid() function shown in Algorithm 7, and the function described in Algorithm 8, is a responsive secure pod (Definition 11) with Confirmation within , Past-perfection within and -accountable safety (Definition 2), except with negligible probability.
Proof.
Shown in Appendix B.
5 Evaluation
To validate our theoretical results regarding optimal latency in Protocol pod-core, we implement111Our prototype implementation is available at https://github.com/commonprefix/pod-experiments a prototype pod-core in Rust 1.85. Our benchmarks measure the end-to-end confirmation latency of a transaction from the moment it is written by client until it is read as confirmed by another client in a different continent, both interacting with replicas distributed around the world. Specifically, the latency is computed as the difference between the timestamp recorded by the reading client upon receiving sufficiently many votes (quorum size ) from different replicas and the initial timestamp recorded by the writing client. We present the results in Figure 4.
The implementation follows a client-server architecture where each replica maintains two TCP listening sockets: one for the reading client connection and one for the writing client connection. Upon receiving a transaction payload from a writer, the replica creates a tuple containing the payload, a sequence number, and the current local timestamp. The replica then signs this tuple using a Schnorr signature222https://crates.io/crates/secp256k1 on secp256k1 curve, appends it to its local log, and forwards the signed tuple to the reading client. Replicas are deployed round-robin across seven AWS regions: Frankfurt, London, N. Virginia, N. California, Canada, Mumbai, and Seoul. Each replica is deployed on a t2.medium EC2 instance (2 vCPUs, 4GB RAM) and is initialized with user data that contains the replica’s unique secret signing key.
We implement two types of clients. The writing client establishes connections to all replicas, records the timestamp (in its local view) right before sending the transaction and sends transaction payloads to each replica. The reading client maintains connections to all replicas, validates incoming signed transactions, and records the timestamp (in its local view) upon receiving a quorum of valid signatures for a particular transaction. We deploy the reading client in London and the writing client in N. Virginia, both initialized with the complete list of replica information (IP addresses, public keys).
We conduct experiments with two different values for the quorum size : (1) and , for a client that only expects omission faults, and (2) and , for a client that expects Byzantine faults. We repeat the experiments for different numbers of replicas (). We repeat each experiment five times and report the mean latency and a 95% confidence interval.
As shown in Figure 4, our experimental results demonstrate that the latency remains largely independent of the number of replicas. The reading client reports a transaction as confirmed as soon as the fastest replicas have responded, which gives rise to the happy artifact that the 1 - slowest replicas do not slow down confirmation. This also explains why the omission-fault experiment exhibits lower latency than the Byzantine experiment. Even with 1000 replicas the mean confirmation latency is 138ms for the omission-fault experiment and 375ms for the Byzantine experiment. This approximates the physical network round-trip time between the reading client and the writing client that stands at 76ms.
6 Auctions on pod through the bidset protocol
In this section, we show how single-shot distributed auctions can be implemented on top of pod. This is achieved through bidset, a primitive for collecting a set of bids. The idea is as follows. A pre-appointed sequencer – which can be any party, even a pod replica – runs the auction, but the bids are collected from pod using a bidset protocol. The past-perfection property of pod renders the sequencer unable to censor bids: when it creates an output, all timely and honestly-written bids must be in it, otherwise the sequencer has provably misbehaved and can be held accountable.
Definition 16 (bidset protocol).
A bidset protocol has a starting time parameter and exposes the following interfaces to bidder and consumer parties:
-
function submitBid(): It is called by a bidder at round to submit a bid .
-
event result(, ): It is an event generated by a consumer. It contains a bid-set , which is a set of bids, and auxiliary information .
A bidset protocol satisfies the following liveness and safety properties:
- (Liveness) Termination within :
-
An honest consumer generates an event result(, ) by round .
- (Safety) Censorship resistance:
-
If an honest bidder calls submitBid() and an honest consumer generates an event result(, ), then .
- (Safety) Weak consistency:
-
If two honest consumers generate result() and result() events, such that and , then .
Protocol 2 (bidset-core).
Construction bidset-core is parameterized by an integer (looking ahead, we will prove security in synchrony, i.e., assuming the network delay is smaller than ) and assumes digital signatures and a pod with -timeliness, and . At time , bidders execute Algorithm 4, the sequencer Algorithm 5, and the consumers Algorithm 6.
A bidder (Algorithm 4) submits a bid by writing it on the pod at round . The sequencer (Algorithm 5) waits until the pod returns a past-perfect round larger than (line 3) and then constructs the bid-set from the set of transactions in T (line 4). The sequencer concludes by signing and (which can be used as evidence, in case of a safety violation) and writing on pod. The consumer (Algorithm 6) waits until one of the following two conditions is met. First, a confirmed transaction appears in T, for which (line 4), in which case it outputs bid-set as result. Second, a round higher than becomes past-perfect in pod (line 6) without a confirmed transaction appearing, in which case it outputs .
Theorem 17 (Bidset security).
Assuming a synchronous network where , protocol bidset-core (Construction 2) instantiated with a digital signature and a secure pod protocol that satisfies the past-perfection within , confirmation within and -timeliness properties, is a secure bidset protocol satisfying termination within . It satisfies accountable safety with an function that identifies a malicious sequencer.
Proof.
Additional intuition, formal proofs, and are shown in the full version of this paper [2, Appendix D].
Remark 18.
Observe that bidset-core terminates within in the worst case, but, if the sequencer is honest, then it terminates within . Moreover, bidset-core is not responsive because Algorithm 5 waits for a fixed interval. This step can be optimized if the set of bidders is known (e.g., requiring them to pre-register), which allows for the protocol to be made optimistically responsive (i.e., ) when all parties are honest.
Remark 19 (Implicit sub-session identifiers).
We assume that each instance of the bidset-core protocol is identified by a unique sub-session identifier (ssid). All messages written to the underlying pod are concatenated with the ssid.
7 Conclusion
In this work we present pod, a novel consensus layer that finalizes transactions with the optimal one-round-trip latency by eliminating communication among replicas. Instead, clients read the system state by performing lightweight computation on logs retrieved from the replicas. As no validator has a particular role in pod (as compared to leaders, block proposers, miners, etc. in similar protocols), pod achieves censorship resistance by default, without any extra mechanisms or additional cost. Furthermore, validator misbehavior, such as voting in incompatible ways or censoring confirmed transactions, is accountable.
As an application, we present an efficient and censorship-resistant mechanism for single-shot first-price and second-price open auctions, which leverages pod as a bulletin board. We show how the accountability, offered by pod, is also inherited by applications built on it – the auctioneer cannot censor confirmed bids without being detected. In the full version [2] of this paper we discuss further applications, including payments in the style of Fastpay [5].
We conjecture that single-shot sealed bid auction protocols, such as those of [12, 4, 9, 24, 6, 13], can also be instantiated on top of a bidset protocol. Intuitively, this holds because such protocols first agree on a set of sealed bids and then determine the winner. A formal analysis of sealed-bid auction protocols based on bidset is left as future work. The architecture of pod also motivates the design of light clients, which would not have to connect to all replicas or to download all transactions. This is achieved through cryptographic primitives such as Merkle mountain ranges and segment trees. We leave the formal description as future work.
Finally, we remark that pod differs from standard notions of consensus because it does not offer an agreement property, neither to validators nor to clients. A client reading the pod obtains a past-perfect round , and it is guaranteed to have received all transactions that obtained a confirmed round such that , or that may obtain such an in the future, even though the transaction presently appears to the client as unconfirmed. However, the client cannot tell which unconfirmed transactions will become confirmed. Moreover, a transaction might appear confirmed to one client and unconfirmed to another (in this case, this is a transaction written by a malicious client).
References
- [1] Marcos Kawazoe Aguilera and Sam Toueg. A simple bivalency proof that t-resilient consensus requires t + 1 rounds. Inf. Process. Lett., 71(3-4):155–158, 1999. doi:10.1016/S0020-0190(99)00100-3.
- [2] Orestis Alpos, Bernardo David, and Dionysis Zindros. Pod: An optimal-latency, censorship-free, and accountable generalized consensus layer. CoRR, abs/2501.14931, 2025. doi:10.48550/arXiv.2501.14931.
- [3] Kushal Babel, Andrey Chursin, George Danezis, Lefteris Kokoris-Kogias, and Alberto Sonnino. Mysticeti: Low-latency DAG consensus with fast commit path. CoRR, abs/2310.14821, 2023. doi:10.48550/arXiv.2310.14821.
- [4] Samiran Bag, Feng Hao, Siamak F. Shahandashti, and Indranil Ghosh Ray. Seal: Sealed-bid auction without auctioneers. IEEE Transactions on Information Forensics and Security, 15:2042–2052, 2020. doi:10.1109/TIFS.2019.2955793.
- [5] Mathieu Baudet, George Danezis, and Alberto Sonnino. Fastpay: High-performance byzantine fault tolerant settlement. In AFT, pages 163–177. ACM, 2020. doi:10.1145/3419614.3423249.
- [6] Tarun Chitra, Matheus V. X. Ferreira, and Kshitij Kulkarni. Credible, Optimal Auctions via Public Broadcast. In Rainer Böhme and Lucianna Kiffer, editors, 6th Conference on Advances in Financial Technologies (AFT 2024), volume 316 of Leibniz International Proceedings in Informatics (LIPIcs), pages 19:1–19:16, Dagstuhl, Germany, 2024. Schloss Dagstuhl – Leibniz-Zentrum für Informatik. doi:10.4230/LIPIcs.AFT.2024.19.
- [7] Daniel Collins, Rachid Guerraoui, Jovan Komatovic, Petr Kuznetsov, Matteo Monti, Matej Pavlovic, Yvonne-Anne Pignolet, Dragos-Adrian Seredinschi, Andrei Tonkikh, and Athanasios Xygkis. Online payments by merely broadcasting messages. In 50th Annual IEEE/IFIP International Conference on Dependable Systems and Networks, DSN 2020, Valencia, Spain, June 29 - July 2, 2020, pages 26–38. IEEE, 2020. doi:10.1109/DSN48063.2020.00023.
- [8] George Danezis, Lefteris Kokoris-Kogias, Alberto Sonnino, and Alexander Spiegelman. Narwhal and tusk: a dag-based mempool and efficient BFT consensus. In EuroSys, pages 34–50. ACM, 2022. doi:10.1145/3492321.3519594.
- [9] Bernardo David, Lorenzo Gentile, and Mohsen Pourpouneh. FAST: Fair auctions via secret transactions. In Giuseppe Ateniese and Daniele Venturi, editors, ACNS 22International Conference on Applied Cryptography and Network Security, volume 13269 of LNCS, pages 727–747. Springer, Cham, June 2022. doi:10.1007/978-3-031-09234-3_36.
- [10] Isaac Doidge, Raghavendra Ramesh, Nibesh Shrestha, and Joshua Tobkin. Moonshot: Optimizing chain-based rotating leader BFT via optimistic proposals. CoRR, abs/2401.01791, 2024. doi:10.48550/arXiv.2401.01791.
- [11] Cynthia Dwork, Nancy Lynch, and Larry Stockmeyer. Consensus in the presence of partial synchrony. J. ACM, 35(2):288–323, April 1988. doi:10.1145/42282.42283.
- [12] Hisham S. Galal and Amr M. Youssef. Trustee: Full privacy preserving vickrey auction on top of ethereum. In Andrea Bracciali, Jeremy Clark, Federico Pintore, Peter B. Rønne, and Massimiliano Sala, editors, Financial Cryptography and Data Security, pages 190–207, Cham, 2020. Springer International Publishing.
- [13] Chaya Ganesh, Shreyas Gupta, Bhavana Kanukurthi, and Girisha Shankar. Secure vickrey auctions with rational parties. Cryptology ePrint Archive, Paper 2024/1011, 2024. To appear at CCS 2024. doi:10.1145/3658644.3670311.
- [14] Juan A. Garay, Jonathan Katz, Chiu-Yuen Koo, and Rafail Ostrovsky. Round complexity of authenticated broadcast with a dishonest majority. In FOCS, pages 658–668. IEEE Computer Society, 2007. doi:10.1109/FOCS.2007.44.
- [15] Peter Gazi, Ling Ren, and Alexander Russell. Practical settlement bounds for longest-chain consensus. In Helena Handschuh and Anna Lysyanskaya, editors, Advances in Cryptology - CRYPTO 2023 - 43rd Annual International Cryptology Conference, CRYPTO 2023, Santa Barbara, CA, USA, August 20-24, 2023, Proceedings, Part I, volume 14081 of Lecture Notes in Computer Science, pages 107–138. Springer, 2023. doi:10.1007/978-3-031-38557-5_4.
- [16] Rati Gelashvili, Lefteris Kokoris-Kogias, Alberto Sonnino, Alexander Spiegelman, and Zhuolun Xiang. Jolteon and ditto: Network-adaptive efficient consensus with asynchronous fallback. In Financial Cryptography, volume 13411 of Lecture Notes in Computer Science, pages 296–315. Springer, 2022. doi:10.1007/978-3-031-18283-9_14.
- [17] Shafi Goldwasser, Silvio Micali, and Ronald L. Rivest. A digital signature scheme secure against adaptive chosen-message attacks. SIAM J. Comput., 17(2):281–308, 1988. doi:10.1137/0217017.
- [18] Rachid Guerraoui, Petr Kuznetsov, Matteo Monti, Matej Pavlovic, and Dragos-Adrian Seredinschi. The consensus number of a cryptocurrency. Distributed Comput., 35(1):1–15, 2022. doi:10.1007/S00446-021-00399-2.
- [19] Dahlia Malkhi and Kartik Nayak. Extended abstract: Hotstuff-2: Optimal two-phase responsive BFT. IACR Cryptol. ePrint Arch., page 397, 2023. URL: https://eprint.iacr.org/2023/397.
- [20] Joachim Neu, Ertem Nusret Tas, and David Tse. The availability-accountability dilemma and its resolution via accountability gadgets. In Ittay Eyal and Juan A. Garay, editors, FC 2022, volume 13411 of LNCS, pages 541–559. Springer, Cham, May 2022. doi:10.1007/978-3-031-18283-9_27.
- [21] Barbara Simons. An overview of clock synchronization. In Barbara Simons and Alfred Spector, editors, Fault-Tolerant Distributed Computing, pages 84–96, New York, NY, 1990. Springer New York.
- [22] Jakub Sliwinski and Roger Wattenhofer. ABC: asynchronous blockchain without consensus. CoRR, abs/1909.10926, 2019. arXiv:1909.10926.
- [23] Alexander Spiegelman, Neil Giridharan, Alberto Sonnino, and Lefteris Kokoris-Kogias. Bullshark: The partially synchronous version. CoRR, abs/2209.05633, 2022. doi:10.48550/arXiv.2209.05633.
- [24] Nirvan Tyagi, Arasu Arun, Cody Freitag, Riad Wahby, Joseph Bonneau, and David Mazières. Riggs: Decentralized sealed-bid auctions. In Weizhi Meng, Christian Damsgaard Jensen, Cas Cremers, and Engin Kirda, editors, ACM CCS 2023, pages 1227–1241. ACM Press, November 2023. doi:10.1145/3576915.3623182.
- [25] Apostolos Tzinas, Srivatsan Sridhar, and Dionysis Zindros. On-chain timestamps are accurate. Cryptology ePrint Archive, Report 2023/1648, 2023. URL: https://eprint.iacr.org/2023/1648.
- [26] Josef Widder. Booting clock synchronization in partially synchronous systems. In Faith Ellen Fich, editor, Distributed Computing, pages 121–135, Berlin, Heidelberg, 2003. Springer Berlin Heidelberg. doi:10.1007/978-3-540-39989-6_9.
- [27] Maofan Yin, Dahlia Malkhi, Michael K. Reiter, Guy Golan-Gueta, and Ittai Abraham. Hotstuff: BFT consensus with linearity and responsiveness. In PODC, pages 347–356. ACM, 2019. doi:10.1145/3293611.3331591.
Appendix A Validation function for pod-core
In this section we present the function valid(), which allows a pod client, which is not necessarily communicating with the pod replicas, to verify that a given pod data structure satisfies the security properties of pod (Definition 11).
The function valid() for pod-core is shown in Algorithm 7. The idea is to have the verifier repeat the logic of an honest client. The verifier is initialized in the same way as in Algorithm 2 – importantly, it knows the identifiers and public keys of pod replicas. Function valid() takes as input a pod data structure and auxiliary data , which contains two parts, a past-perfection certificate and a collection of transaction certificates , one for each transaction in .T. Both contain vote messages, as constructed by a pod client in lines 13 and 14 of Algorithm 2. The verifier processes each vote in order of increasing sequence number sn using function processVote(). If any vote is invalid, valid() returns . Observe that if the votes are valid the verifier will have updated its local tsps and mrt variables with the same values as the pod client that constructed . Finally, the verifier computes the transaction set T and the past-perfect round (using its local tsps and mrt variables) and requires that the values match the ones in (lines 9–10).
Finally, the verifier also verifies the past-perfection certificate. Given that the previous checks have passed, we require that each vote in is contained in one of the transaction certificates in and has the maximum sequence number received from the client that sent the vote (lines 11–14). As we have remarked earlier, can be derived from by taking the union of certificates for all transactions and keeping the most recent vote for each replica, in which case the checks on lines 11–14 can be omitted. We maintain the past-perfection certificate for readability and simplicity in the proofs.
Appendix B Security of Protocol pod-core under a Continuum of Byzantine and Omission faults
In order to prove Theorem 15 and establish the security of Protocol pod-core shown Construction 1, we first prove some useful intermediate results. We remind that , where denotes the total number of replicas, denotes the number of Byzantine replicas, denotes the number of omission-faulty replicas in an execution, and denotes the number of replicas required to confirm a transaction.
Lemma 20 (The values for minimum, maximum and confirmed rounds).
Regarding Algorithm 3, we have the following. Consider the list of all timestamps received by a client for a particular transaction, replacing a missing vote from with a special value ( for computing , for computing ), to get values in total, sorted in increasing order. Assume mrt is also sorted in increasing order of timestamps.
-
1.
is the timestamp at index of this list.
-
2.
is the timestamp at index of this list.
-
3.
is the timestamp at index of mrt.
Proof.
Functions minPossibleTs() and computePastPerfectRound() prepend times the value in the beginning of the list and return the median of the first values, hence they return the timestamp at index . Function maxPossibleTs() appends times the value at the end of the list and returns the median of the last values of that list, that is, it ignores the first values and returns the timestamp at index .
Lemma 21 ( bounded by honest timestamp).
Assuming (equiv., ), for a valid pod with auxiliary data , there exists some honest replica , such that the most-recent timestamp mrt from included in satisfies .
Proof.
Since , the past-perfect round is the value returned by computePastPerfectRound() of Algorithm 3. From Lemma 20 we have that is the timestamp at index of sorted mrt. The condition implies that , hence the number of not honest replicas () cannot fill all positions between and , hence at least one of the indexes between and (inclusive) will contain the timestamp created and sent by an honest replica. We now recall Theorem 15, which we prove through a series of lemmas.
Theorem 15 (pod-core security).
Assume that the network is partially synchronous with actual network delay , that is the number of Byzantine replicas, the number of omission-faulty replicas, the confirmation threshold, and the total number of replicas. Protocol pod-core (Protocol 1), instantiated with a EUF-CMA secure signature scheme, the valid() function shown in Algorithm 7, and the function described in Algorithm 8, is a responsive secure pod (Definition 11) with Confirmation within , Past-perfection within and -accountable safety (Definition 2), except with negligible probability.
Proof.
Lemma 22 (Confirmation within ).
For the conditions stated in Theorem 15, Protocol 1 satisfies the confirmation within property (Definition 11) for .
Proof.
Assume an honest client c calls write(tx) at round r. It sends message to all replicas at round r (line 18). An honest replica receives this by round and sends a message back to all connected clients (line 20). An honest client receives the vote by round . As are at least honest replicas, receives at least such votes, hence the condition in line 6 is satisfied and observes tx as confirmed.
Lemma 23 (Past-perfection within ).
For the conditions stated in Theorem 15, Protocol 1 satisfies the past-perfection within property (Definition 11) for .
Proof.
Assume an honest client c at round r has view . From Lemma 21, there exists some honest replica , such that the most-recent timestamp that has sent to c satisfies . The honest replica sends at least one heartbeat or vote message per round (line 25), which arrives within rounds, and an honest client updates when it receives the heartbeat or vote message. Hence, c will have . All together, .
Lemma 24 (Past-perfection safety).
For the conditions stated in Theorem 15, Protocol 1 satisfies the past-perfection safety property (Definition 11), except with negligible probability.
Proof.
Assume the adversary outputs valid and that violate the property, i.e., there exists a transaction tx such that and and and . Let and .
Let be the set of replicas for which contains a vote with timestamp . From Lemma 20 ( is computed as the timestamp at index of sorted mrt), and since is valid, there exist at least such replicas, hence . For each , the transaction certificates contain the whole log of with timestamps up to (line 31 of Algorithm 2 does not allow gaps in the sequence number of the received votes). That is, for each the certificates contains votes
| (1) |
where is the smallest sequence number for which , and are transactions.
Since tx is confirmed in and , the transaction certificate must contain votes on tx with timestamp , such that , from at least replicas. Let be the set of these replicas, with . For each , certificate contains a vote
| (2) |
such that . We will show that, if at most replicas are Byzantine, this leads to a contradiction. Observe from the cardinality of and that at least replicas must be in both sets, hence at least one honest replica must be in both sets (except if the adversary forges a signature under the public key of an honest replica, which happens with negligible probability). For that replica, the vote in (2) must be one of the votes in (1) since and . Hence, one of the in (1) is tx, and tx must appear in , a contradiction.
Lemma 25 (Confirmation bounds).
For the conditions stated in Theorem 15, Protocol 1 satisfies the confirmation bounds property (Definition 11), except with negligible probability.
Proof.
Assume the adversary outputs and , such that and there exists a transaction tx such that and . Let and , and and .
First assume . From Lemma 20, can include at most votes with a timestamp for tx smaller than . Allowing up to replicas to equivocate, the adversary can obtain at most votes on tx with a timestamp smaller than , except if it forges a digital signature from an honest replica, which happens with negligible probability. In order to compute for tx, the adversary must include in timestamps smaller than from at least replicas.
Now assume . Using Lemma 20, can include at most votes with a timestamp larger than , hence the number of honest replicas, from which a vote with timestamp larger than can be included in is at most (since are malicious). If is odd, this upper bound becomes , while at least votes larger that are required to compute a median larger than , and if is even, then , while at least votes larger that are required to compute a median larger than . (We remind that Algorithm 3 returns as median the value at position ). In either case, we get a contradiction, except for the negligible probability that the adversary forges a digital signature from an honest replica.
Lemma 26 (-Accountable safety).
For the conditions stated in Theorem 15, Protocol 1 satisfies accountable safety (Definition 2) with resilience , except with negligible probability.
Proof.
We show that (Algorithm 8) satisfies the correctness and no-framing properties required by Definition 2, in three steps.
1.
If the past-perfection safety property (Definition 11) is violated, there exists a partial transcript , such that on input returns at least replicas.
Proof:
We resume the proof of Lemma 24. There, we constructed sets ,
such that .
We saw that, for each , certificates contain the replica log shown in (1), containing all votes with timestamp up to .
In a similar logic, certificates contains the following votes from (possibly more, but we care for the votes up to transaction tx)
| (3) |
with and . Obviously, for an honest , the replica logs of (1) and (3) must be identical, i.e., and , for . We will show that they differ in at least one sequence number. If , then the replica logs differ at sequence number , because the transaction in (1) cannot be tx, as does not contain tx, and . If , the log of (1) should be identical with the first positions of the log of (3), which would imply that and, since a valid pod only accepts non-decreasing timestamps, , and all together . This is impossible, because and . Hence, the two logs will contain a different timestamp for some sequence number in .
Summarizing, we have shown for at least replicas , certificate and contain votes and , such that but or . On input a set that contains these votes, function returns .
2.
If the confirmation-bounds property (Definition 11) is violated, there exists a partial transcript , such that Algorithm 8 on input returns at least replicas.
Proof:
As in the proof of Lemma 25, assume the adversary outputs and , such that and there exists a transaction tx such that , , and
Let and , and and .
Let’s take the case first. From Lemma 20 (timestamps contains at least timestamps ts such that ), there is a set with at least replicas , from each of which contains votes
| (4) |
up to some sequence number , such that and either (i.e., a vote from on tx is included in , and we only consider the votes up to this one), or (i.e., a vote from on tx is not included in , in which case timestamps contains the timestamp has sent on ).
Now, for a valid to output , certificate must contain timestamps smaller than from at least replicas. Call this set . From each of these replicas, certificates must contain votes
| (5) |
considering only votes up to tx, for which .
By counting arguments there are at least replicas in . For each one, we make the following argument. Since and , we get , and it must be the case that (otherwise, the two logs will differ at a smaller sequence number, similar to the previous case). But in this case the two logs differ at sequence number , i.e., . This is because the log of (4) either does not contain tx, or contains it at sequence number , in which case it must contain a different transaction at sequence number . On input a set that contains all votes for replicas in and votes, function returns .
For the case , similar arguments apply. In order to compute , certificate must contain at least or (depending on the parity of ) votes on tx with timestamp larger than . On the other hand, from Lemma 20 certificate contains at least votes on tx with a timestamp smaller or equal than . As before, the replicas in the intersection of these two sets have sent conflicting votes for some sequence numbers.
3.
The function never outputs honest replicas.
Proof: The function only adds a replica to if given as input two vote messages from that replica, where the same sequence number is assigned to two different votes (line 7 on Algorithm 8). An honest replica always increments nextsn after each vote it inserts to its log (line 21 on Algorithm 1), hence, the adversary can only construct valid votes by forging a signature under the public key of an honest replica, which happens with negl. probability.
