<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <issn pub-type="ppub">1613-0073</issn>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Systems⋆</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Nadjette Rebouh</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Louiza Bouallouche-Medjkoune</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Agreement Problem</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Blockchain Systems, Atomic Broadcast, Distributed System</institution>
          ,
          <addr-line>Failure Detectors, Rotating Coordinator</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Research Unit LaMOS, Faculty of Exact Sciences, University of Bejaia</institution>
          ,
          <addr-line>Bejaia</addr-line>
          ,
          <country country="DZ">Algeria</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Blockchains are decentralized and immutable ledgers that ensure secure transaction recording. In these systems, the atomic broadcast is pivotal, ensuring consistent transaction delivery to all participants. It ensures either all nodes receive a transaction or none, preserving ledger integrity. This paper addresses the atomic broadcast problem in asynchronous systems. The existing atomic broadcast protocols sufer from relying on strong temporal assumptions and generating a significant number of messages. In response, we propose a novel protocol based on the rotating coordinator principle for message ordering and the ♢ failure detector for fault tolerance. It has been demonstrated that ♢ is the minimal and suficient class of failure detectors to solve the atomic broadcast in asynchronous systems. Simulation results, conducted using the Neko simulator, demonstrate significant enhancements in latency and message throughput compared to two existing protocols, implemented within the same simulator. The robustness and eficiency of the proposed solution are convincingly demonstrated through extensive simulations. This research contributes valuable insights into enhancing the reliability and performance of atomic broadcast protocols, crucial for the development of resilient and scalable distributed systems in blockchain technology and beyond.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>CEUR
ceur-ws.org</p>
    </sec>
    <sec id="sec-2">
      <title>1. Introduction</title>
      <p>
        systems, combined with the dificulty of providing global system control and the presence of
failures (crashes or byzantine). This dificulty is significantly reduced by relying on group
communication primitives that ofer better guarantees than standard point-to-point communication.
In these systems, the atomic broadcast (with reduction to consensus) is pivotal, ensuring
consistent transaction delivery to all participants. It ensures either all nodes receive a transaction or
none, preserving the systems integrity [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        Several algorithms solving the atomic broadcast problem in a distributed systems have been
proposed in the literature. These algorithms can be classified according to two main criteria: The
message ordering approach and the fault tolerance mechanism implemented [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Several
approaches have been employed to enforce message order, either relying on a single entity to
enforce delivery order uniqueness (the coordinator principle) or leveraging the system structure,
which demands fewer control messages but at the expense of other characteristics [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. However,
the chosen fault tolerance approach plays a pivotal role in the correctness, eficiency, and
complexity of the atomic broadcast protocol. Furthermore, the type of failures supported by
the system significantly impacts the protocol performance and the system as a whole. The
challenge then lies in designing a simple and eficient atomic broadcast protocol based on
minimal temporal assumptions inherent in the necessary and suficient failure detector for
fault tolerance, the optimal process structure within the system, and the appropriate message
ordering technique, while also considering the type of tolerated failures.
      </p>
      <p>
        This paper presents a new atomic broadcast protocol for all types of asynchronous distributed
systems. The protocol is based on the utilization of unreliable failure detectors ♢ for fault
tolerance [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. This class of failure detectors incorporates the minimal synchrony assumptions
to address a given agreement problem [9]. Consequently, the protocol requires a majority of
correct processes relative to the number of tolerated failures. Accordingly, the protocol generates
fewer control messages necessary for the system execution and correction. Consequently, the
protocol leverages the unique output of the failure detector to designate it as the coordinator
for imposing message delivery order. Participating processes behave symmetrically to ensure
system integrity through a fully centralized approach.
      </p>
      <p>The paper is structured as follows. Section 2 surveys some related work. Section 3
introduces the system model and, formally, defines the concepts. Then, Section 4 presents the
proposed atomic broadcast protocol and Section 5 proves its correctness. Section 6 evaluates
the performances of the proposed protocol. Finally, Section 7 concludes the paper.</p>
    </sec>
    <sec id="sec-3">
      <title>2. Related Work</title>
      <p>
        In [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], authors discuss various protocols and approaches for achieving atomic broadcast,
including both pessimistic and optimistic strategies. Pessimistic approaches typically rely on atomic
broadcast protocols, where messages are delivered to all processes in a predefined order.
      </p>
      <p>Two classes of atomic broadcast protocols have been identified according to the ordering
of messages and the fault tolerance mechanism used. Token-based solutions rely on the ring
structure of processes to transmit the order information handled by a token. They have been
divided into two classes according to the fault tolerance mechanism used: [10], [11], [12] are
based on group membership service while [13], [14] are failure detector based protocols.</p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], they rely on a collaboration between the coordinator principle and the consensus to
achieve the ordering task in a centralized manner. However, in [15], they use the same approach
as [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] but in a decentralized manner. In this paper, we use the same approach but without the
use of the consensus problem as a building block. The processes communicate directly with the
coordinator of the round and get the appropriate information to decide on the set of messages
to be atomically delivered.
      </p>
      <p>In blockchain systems, the atomic broadcast protocols tolerate Byzantine failures when the
processes are distributed across a decentralized network of nodes. These protocols ensure fault
tolerance, allowing the system to maintain the consistency and integrity of data even in the
presence of malicious processes or Byzantine faults [16], [17], [18], [19], [20].</p>
    </sec>
    <sec id="sec-4">
      <title>3. Computation Model and Definitions</title>
      <p>In this section, we present the system model and some definitions related to our study.</p>
      <sec id="sec-4-1">
        <title>3.1. Computation Model</title>
        <p>We consider an asynchronous distributed system composed of a set Π = { 0, …,  −1 } of 
processes, connected by reliable communication channels forming a fully connected network.
Processes can only tolerate failures by permanent crashes. We assume a majority of correct
processes ( &lt; /2 ; where  represents the maximum number of faulty processes). The system
is augmented with the unreliable failure detector ♢ .</p>
      </sec>
      <sec id="sec-4-2">
        <title>3.2. Unreliable Failure Detectors</title>
        <p>
          Informally, a failure detector consists of a set of modules, each attached to a process: The
module attached to a process maintains a set of suspected faulty processes. A failure detector
is considered unreliable because it may suspect a correct process as well as fail to suspect a
genuinely faulty process. Chandra and Toueg [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] defined eight classes of failure detectors
based on two properties: Completeness (a liveness property ensuring that faulty processes will
eventually be suspected) and Accuracy (a safety property restricting false suspicions about
correct processes). In this paper, we consider the ♢ class defined as follows:
• Strong completeness: Every faulty process will eventually be permanently suspected by
every correct process.
• Weak ultimate accuracy: There exists a moment from which at least one correct process
is never suspected again.
        </p>
        <p>Chandra et al. [9] showed that ♢ is the weakest class of failure detectors and is the minimal
and necessary class to solve the atomic broadcast problem in an asynchronous distributed
system (by reduction to the consensus problem).</p>
      </sec>
      <sec id="sec-4-3">
        <title>3.3. Reliable Broadcast</title>
        <p>
          This problem ensures an atomic delivery of messages to the processes of the system (a message
sent by a process is received by all processes) [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. It is defined using two communication
primitives  −  () and  −   () . Formally, it is specified by the following properties:
1. Agreement: If a correct process broadcasts a message  , then inevitably all correct
processes deliver this message;
2. Validity: If a process delivers a message  , then  has been broadcast by at least one
process;
3. Integrity: A message delivery occurs at most once.
        </p>
      </sec>
      <sec id="sec-4-4">
        <title>3.4. Atomic Broadcast</title>
        <p>
          The atomic broadcast is an extension of the reliable broadcast. In addition to ensuring that
all processes receive the same number of messages (reliable broadcast), it also ensures the
same delivery order of these messages [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. It is defined using two communication primitives:
 −  () and  −   () . Atomic validation in the context of transactional databases
and blockchain systems is an example of an application using the atomic broadcast primitives.
This problem concerns the dissemination and delivery of messages by processes. More formally,
atomic broadcast is completely defined by the properties of reliable broadcast plus the following
order property:
• Total order: If a correct process delivers a message  before message  ′, then all processes
deliver  before message  ′.
        </p>
      </sec>
      <sec id="sec-4-5">
        <title>3.5. Data structures and messages</title>
        <p>Each correct process, participating in the atomic broadcast protocol, emits and receives messages
of various types:
4.</p>
        <p>tasks.
1.   : To elect the new coordinator for the current round;
2.  : When the process wants to cancel the processing done during the current round;
3.  : As soon as the coordinator receives a suficient number of votes, it broadcasts
this message to inform the other processes of its decision regarding the order of the
message list to be atomically delivered.</p>
        <p>: A simple message broadcast by a correct process to participate in the application
The first three messages are control messages, while the last message leads to a system
evolution (its execution). To achieve this, a process manipulates the following data structures:
•    _  : A list containing the messages identifiers (   ) and it does not allow
duplication of elements.
•   : A data structure composed of two integers, the first representing the message
sender number and the second is the timestamp of this message. The use of this structure
guarantees the uniqueness of broadcast messages.
•   
•  
• 
•  
•  
• 
identifiers ( ∀ ∈ Π : 
_</p>
        <p>[] = ? ).</p>
        <p>_  : The list of broadcast messages that have not been yet ordered.</p>
        <p>: An integer representing the current round, initially set to zero.
_</p>
        <p>: An array of integers containing the votes of the processes according to their
 : An integer containing the number of positive votes (vote=1) present in 
 : An integer containing the number of negative votes (vote=2) present in 
_ 
_ 

.</p>
        <p>.</p>
        <p>: A list containing all messages belonging to rounds succeeding the current round.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>4. The Atomic Broadcast Protocol</title>
      <p>The section is devoted to the description and the algorithm of the proposed solution.</p>
      <sec id="sec-5-1">
        <title>4.1. The proposed protocol description</title>
        <p>The principle of the protocol is quite straightforward. It operates in a series of asynchronous
rounds. During each round, a process is elected (rotating coordinator) to enforce the list of
messages to be delivered by all correct processes. The algorithm relies on the use of the failure
detector ♢ to provide the list of faulty processes in the system. To achieve this, the use of
communication primitives, reliable broadcast, is paramount to ensure messages sending and
receiving. The algorithm unfolds in two tasks:
1. Task1: It consists of two phases:
a) Phase1: Each process broadcasts its messages by invoking the − 
primitive
(which is the indirect implementation of  −  
).
b) Phase2: During this phase, each process   must vote for one of two values: (1) If it
does not suspect the coordinator process   ; (2) If it suspects it to be faulty based
on the list of faulty processes provided by the failure detector ♢ attached to this
process. The process   can only cast one vote during a round.
2. Task2: Upon receiving a message  , the process   must perform one of the following
treatments depending on the type of the received message:
a)  is a simple message:   adds  to its   
_  and places the message identifier
_   and its local variables  
 and  
.
in   
_</p>
        <p>.
b)  is a vote message:   updates</p>
        <p>Two cases can be considered:
•  
•  
its</p>
        <p>_  .
 ≥ ( −  ) :   broadcasts a</p>
        <p>message to start a new round.</p>
        <p>≥ ( −  ) and   is the coordinator: In this case,   decides and broadcasts
c)  ∈</p>
        <p>_  : If the round number of  ( 
  delivers its recorded messages in the   
imposed order and initiates a new round. However, if  
 ) is equal to the current round,
_  according to the coordinator
 is greater than the
current round, the process   adds the message  to the temporary list 
.
d)  is a</p>
        <p>message: If  
round. However, if  
message  to the temporary list</p>
        <p>.</p>
        <p>is equal to the current round,   initiates a new
 is greater than the current round, the process   adds the</p>
        <p>Lemma 1. If a process delivers a message  , then  has been broadcast by at least one process
(validity property).</p>
        <p>Proof. The use of reliable broadcast primitives ensures this lemma.</p>
        <p>Lemma 2. If a correct process delivers a message  , then inevitably all correct processes deliver
 (agreement property).</p>
        <p>Proof. The use of the reliable broadcast primitives ensures that inevitably all processes deliver
the same set of messages or none of them. By using the coordinator principle, we ensure that
any message sent by a correct process will be delivered by all correct processes as soon as the
coordinator broadcasts its final ordered list of messages.</p>
        <p>Lemma 3. For any message  , each correct process delivers the message  at most once, and
only if  has previously been broadcast by a certain correct process (integrity property).
Proof. This property is guaranteed by the use of the reliable broadcast primitives.</p>
        <p>Lemma 4. If two correct processes  and  deliver two messages  and  ′, then  delivers 
before  ′ if, and only if,  delivers  before  ′ (total order property).</p>
        <p>Proof. This property is guaranteed by broadcasting the coordinator list of messages. Once a
process is elected as the coordinator of the current round, it will impose its list of messages to
be atomically delivered by all the correct processes. This list will be broadcast to the processes
through the reliable broadcast primitive  −   . Therefore, all correct processes will
deliver their messages according to the order imposed by the coordinator, which will be the
same for every process.</p>
        <p>Theorem.The algorithm in Algorithm 1 implements the primitives of the atomic broadcast.</p>
        <sec id="sec-5-1-1">
          <title>Proof. The proof follows directly from the four lemmas.</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6. Performance Evaluation</title>
      <p>In this section, we evaluate the performance of the proposed protocol. To do so, we utilize a
well-known simulator in distributed systems, Neko [21].</p>
      <sec id="sec-6-1">
        <title>6.1. Simulation model</title>
        <p>In our work, we employ the same simulation model as [22] Fig. 1.</p>
        <p>The parameter  ( ≥ 0 ) indicates the relative speed of processing a message on a process
compared to its transmission on the network. Diferent values for modeling the network
environment were chosen ( = 0.1,  = 1,  = 10). The values of  are selected based on the
approach followed in [23]:
•  = 1: Indicates that the processor processing and network transmission have the same
cost;
•  = 10: Indicates that the processor processing is higher compared to network
transmis•  = 0.1: Indicates that network transmission is higher compared to processor processing.</p>
      </sec>
      <sec id="sec-6-2">
        <title>6.2. Simulation results</title>
        <p>
          In this section, we present the simulation results obtained by comparing the proposed protocol
with two other protocols existing in the literature [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] (referred to as  96 ) and [13] (referred to
as 11 ). To undertake this task, we consider two execution scenarios:
1. Execution without process crashes (failure-free execution),
2. Execution with process crashes.
6.2.1. Performance Metrics
We consider a single metric for evaluating the performance of our protocol in two execution
scenarios, with and without process crashes. This metric is the Latency, denoted as  , which is
measured by varying the overall atomic emission rate, referred to as throughput ( : Representing
the number of messages broadcast per second). For a single atomic emission, the latency  is
calculated as follows:
1 −1
        </p>
        <p>=1
 =</p>
        <p>(∑   ) −  
Where:</p>
        <p>).
•  ∈ 0, 1, ...,  − 1 : Represents the number of processes in the system;
•   : Represents the time of broadcasting  −  ()
•   : Represents the time of consumption  −   ()
;
(message validation by the process
6.2.2. Execution without process crashes
In this section, we present the simulation results in terms of latency/ throughput. We consider
a number of processes  = 5 for our proposal and that of  96 , and  = 7 for 11 , 1, while
varying the values of  (0.1, 1, 10), in a scenario without process failures.</p>
        <p>Through the obtained results in Fig. 2, Fig. 3, and Fig. 4, we notice that our proposal
outperforms in terms of latency compared to  96 and 11 . In the case where  = 0.1 , our proposal
practically overlaps with that of 11 . As soon as the throughput exceeds 800 msgs/s (Fig. 4), the
protocol 11 reaches its limits, unlike our protocol which experiences a considerable increase
but remains operational.
6.2.3. Execution with process crashes
In this section, we present the simulation results in terms of latency and throughput. We
consider  = 5 as the total number of processes for our proposal,  = 7 for 11 , and  = 2 as
the maximum number of crashed processes for both protocols. We also vary the values of 
(0.1, 1, 10) in an environment with process failures.</p>
        <p>
          Through the obtained results in Fig. 5, Fig. 6, and Fig. 7, we observe that 11 outperforms
our proposal in the case of low throughput. However, once this throughput exceeds a certain
threshold, the latency of our protocol improves significantly, while the protocol of 11
becomes non-operational.
1Since the number of processes required to support two failures is  = 7 in [13], and  = 5 in our proposal and [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]
        </p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>7. Conclusion</title>
      <p>This paper proposed a distributed protocol addressing the atomic broadcast problem in an
asynchronous system. This protocol combines two approaches for message ordering and fault
tolerance, including the rotating coordinator principle and the unreliable failure detector ♢ .
Through simulation results obtained using the distributed systems simulator Neko, we observed
that our proposal exhibits a remarkable improvement in terms of protocol latency and the
number of messages generated compared to two other reference protocols implemented in the
same simulator.</p>
    </sec>
    <sec id="sec-8">
      <title>Declaration on Generative AI</title>
      <sec id="sec-8-1">
        <title>The authors have not employed any Generative AI tools.</title>
        <p>[9] T. Chandra, V. Hadzilacos, S. Toueg, The weakest failure detector for solving consensus,</p>
        <p>Journal of the ACM (JACM) 43 (1996) 685–722.
[10] J. Chang, N. Maxemchuk, Reliable broadcast protocols, ACM Transactions on Computer</p>
        <p>Systems (TOCS) 2 (1984) 251–273.
[11] Y. Amir, L. Moser, P. Melliar-Smith, D. Agarwal, P. Ciarfella, The totem single-ring ordering
and membership protocol, ACM Transactions on Computer Systems (TOCS) 13 (1995)
311–342.
[12] P. Jalili-Marandi, M. Primi, N. Schiper, F. Pedone, Ring paxos: High-throughput atomic
broadcast, The Computer Journal 60 (2017) 866–882.
[13] R. Ekwall, A. Schiper, A fault-tolerant token-based atomic broadcast algorithm, IEEE</p>
        <p>Transactions on Dependable and Secure Computing 8 (2011) 625–639.
[14] N. Rebouh, A. Ifeticene, N. Aidoun, L. Bouallouche-Medjkoune, Failure detector-ring
paxos-based atomic broadcast algorithm, International Journal of Critical Computer-Based
Systems 7 (2017) 78–90.
[15] A. Mostefaoui, M. Raynal, Low cost consensus-based atomic broadcast, in: Proceedings.
2000 Pacific Rim International Symposium on Dependable Computing, IEEE, 2000, pp.
45–52.
[16] M. Yin, D. Malkhi, M. K. Reiter, G. Gueta, I. Abraham, Hotstuf: Bft consensus with
linearity and responsiveness, in: Proceedings of the 2019 ACM Symposium on Principles
of Distributed Computing, 2019, pp. 347–356.
[17] R. Kotla, L. Alvisi, M. Dahlin, A. Clement, E. Wong, Zyzzyva: speculative byzantine fault
tolerance, in: Proceedings of twenty-first ACM SIGOPS symposium on Operating systems
principles, 2007, pp. 45–58.
[18] S. Liu, P. Viotti, C. Cachin, V. Quema, M. Vukolic, {XFT}: Practical fault tolerance beyond
crashes, in: 12th USENIX Symposium on Operating Systems Design and Implementation
(OSDI 16), 2016, pp. 485–500.
[19] Y. Gilad, R. Hemo, S. Micali, G. Vlachos, N. Zeldovich, Algorand: Scaling byzantine
agreements for cryptocurrencies, in: Proceedings of the 26th symposium on operating
systems principles, 2017, pp. 51–68.
[20] M. Castro, B. Liskov, et al., Practical byzantine fault tolerance, in: OsDI, volume 99, 1999,
pp. 173–186.
[21] P. Urban, X. Defago, A. Schiper, Neko: A single environment to simulate and prototype
distributed algorithms, in: Proceedings 15th International Conference on Information
Networking, IEEE, 2001, pp. 503–511.
[22] P. Urban, X. Defago, A. Schiper, Contention-aware metrics for distributed algorithms:
Comparison of atomic broadcast algorithms, in: Proceedings Ninth International
Conference on Computer Communications and Networks (Cat. No. 00EX440), IEEE, 2000, pp.
582–589.
[23] P. Urban, I. Shnayderman, A. Schiper, Comparison of failure detectors and group
membership: Performance study of two atomic broadcast algorithms, in: 2003 International
Conference on Dependable Systems and Networks, 2003. Proceedings., IEEE Computer
Society, 2003, pp. 645–645.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>S.</given-names>
            <surname>Nakamoto</surname>
          </string-name>
          ,
          <article-title>Bitcoin: A peer-to-peer electronic cash system, Bitcoin</article-title>
          .org (
          <year>2008</year>
          ). URL: https://bitcoin.org/bitcoin.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>R.</given-names>
            <surname>Wattenhofer</surname>
          </string-name>
          ,
          <article-title>Blockchain science: Distributed ledger technology</article-title>
          ,
          <source>Inverted Forest Publishing</source>
          (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>T.</given-names>
            <surname>Chandra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Toueg</surname>
          </string-name>
          ,
          <article-title>Unreliable failure detectors for reliable distributed systems</article-title>
          ,
          <source>Journal of the ACM (JACM) 43</source>
          (
          <year>1996</year>
          )
          <fpage>225</fpage>
          -
          <lpage>267</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>V.</given-names>
            <surname>Hadzilacos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Toueg</surname>
          </string-name>
          ,
          <article-title>A modular approach to fault-tolerant broadcasts and related problems</article-title>
          ,
          <source>Technical Report, Technical Report</source>
          , Cornell University,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>M.</given-names>
            <surname>Ferdous</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Chowdhury</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Jabed</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hoque</surname>
          </string-name>
          ,
          <article-title>A survey of consensus algorithms in public blockchain systems for crypto-currencies</article-title>
          ,
          <source>Journal of Network and Computer Applications</source>
          <volume>182</volume>
          (
          <year>2021</year>
          )
          <fpage>103035</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>X.</given-names>
            <surname>Defago</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schiper</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <article-title>Total order broadcast and multicast algorithms: Taxonomy and survey</article-title>
          ,
          <source>ACM Computing Surveys (CSUR) 36</source>
          (
          <year>2004</year>
          )
          <fpage>372</fpage>
          -
          <lpage>421</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Xiao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Zhang</surname>
          </string-name>
          , W. Lou,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Hou</surname>
          </string-name>
          ,
          <article-title>A survey of distributed consensus protocols for blockchain networks</article-title>
          ,
          <source>IEEE Communications Surveys &amp; Tutorials</source>
          <volume>22</volume>
          (
          <year>2020</year>
          )
          <fpage>1432</fpage>
          -
          <lpage>1465</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>R.</given-names>
            <surname>Ekwall</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schiper</surname>
          </string-name>
          ,
          <article-title>A fault-tolerant token-based atomic broadcast algorithm</article-title>
          ,
          <source>IEEE Transactions on Dependable and Secure Computing</source>
          <volume>8</volume>
          (
          <year>2010</year>
          )
          <fpage>625</fpage>
          -
          <lpage>639</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>