Bundles

Let \(V\) be any set of votes and equivocation votes.

We say that \(V\) is a bundle for \(v\) in round \(r\), period \(p\), and step \(s\) (or a bundle for \(v\) at \((r, p, s)\)), denoted \(Bundle(r, p, s, v)\).

⚙️ IMPLEMENTATION

Bundle reference implementation.

Moreover, let \(L\) be a ledger where \(|L| \geq \max{\delta_b, \delta_s}\).

We say that this bundle is valid with respect to \(L\) (or simply valid if \(L\) is unambiguous) if the following conditions are true:

⚙️ IMPLEMENTATION

The reference implementation makes use of an asynchronous Bundle verifying function.

See the non-normative Algorand ABFT Overview for further details.

  • \(s \neq 0\) (there are no bundles for the \(Propose\) step).

  • Every element \(a_i \in V\) is valid with respect to \(L\).

  • \(|V| \leq CommitteeThreshold(s)\).

Intuitively, the largest possible bundle is a bundle where every vote’s weight is exactly one.

  • For any two elements \(a_i, a_j \in V\), \(I_i \neq I_j\).
  • For any element \(a_i \in V\), \(r_i = r, p_i = p, s_i = s\).
  • For any element \(a_i \in V\), either \(a_i\) is a vote and \(v_i = v\), or \(a_i\) is an equivocation vote.

  • Let \(w_i\) be the weight of the signature in \(a_i\). Then \(\sum_i w_i \geq CommitteeThreshold(s)\).