EAV7 does not ask you to count confirmations. It publishes the finalized height, and that height is derived from the chain itself — no voting subprotocol.
Walk back from the head collecting distinct producers. Once the set reaches the BFT quorum, everything below the window is final.
# n = validadores ativos; quórum = 2n/3 + 1 # varre da cabeça para trás juntando PRODUTORES DISTINTOS n < 3 ──► finalizedHeight = -1 (sem garantia BFT) produtores distintos ≥ 2n/3+1 em [h, cabeça] ──► finalizedHeight = h - 1
3Below this there is no finality: with few validators the quorum would be trivial to forge.27Size of the active set, elected by weight (stake + votes).1 000One block per second — finality usually lands within tens of blocks.A longer fork replaces the tail of the chain, but three guards bound how far back it can reach.
5 000Maximum reorg depth — beyond it the proposal is refused.49 500Below this height history is immutable — it closes the weak-validation window.5 000State anchor interval; it is what makes a reorg cost proportional to the window.If you are an exchange, a custodian, or you sell something against on-chain payment, the trigger is finality, not inclusion.
let recibo = cliente.transferir("E7DEST…9A02", 5 * UNIT)?;
let bloco = cliente.aguardar_confirmacao(&recibo.id, Duration::from_secs(30))?;
// crédito só depois da FINALIDADE, não da inclusão
loop {
let s = cliente.status()?;
let fin = s["finalizedHeight"].as_i64().unwrap_or(-1);
if fin >= bloco.block_height as i64 {
break;
}
std::thread::sleep(Duration::from_secs(1));
}