As mentioned in the whitepaper, the finality of a transaction comes with 3 confirmations. However the libra command line client doesn’t provide any information about the block. So how can I confirm a transaction is finalized? Is it possible the transaction I got from Admission Control can get rolled back?
You can do a few things
Query the Account Balance (if you own the account)
query balance <index_number> / <acct_number>
Run the transfer in “Blocking” mode which won’t return a prompt until it is complete
transferb 1 b31c76a6c781bdc1426ad95272cc74eb2f6579bbc5efe7f63c1a4976a760c2fc 10 for instance
Or you can query the transaction by Account and Sequence number and specify True for gathering events
txn_acc_seq 0 0 true
Thanks for the quick reply!
I understand the “blocking” mode can ensure the transaction get broadcasted (or even included into the blockchain probably). I didn’t check the code but it looks like nothing mentions how a transaction is “finalized” by the LibraBFT consensus. While the balance query is eventually consistent with the final state, the finality of a transaction remains a question.
I am sure one of the core project team members will be by to confirm what is under the covers, but LibraBFT is based on HotStuff Byzantine Fault Tolerance which unlike something like SBFT that Hyperledger Sawtooth uses, it (HotStuff) is more deterministic and does leader-elections in rounds versus SBFT which has a known set of Validators and through a simple leader election they will verify hash values in the Merkle Tree and if those values are found to be true, they will validate and publish the transaction to the Ledger. (https://arxiv.org/pdf/1803.05069.pdf)
From what I gather on Libra, it will be a sort of Proof of Authority scheme, but I assume that of the pool of Validators, not all will take place in consensus. So it may be between SBFT derivatives like Plenum that Hyperledger Indy uses and what is described in the HotStuff white paper. I assume the cryptographic primitive verification functions are largely the same
However, my understand could be wrong too, so take the above with a large grain of salt
When you see a transaction included in the chain, it means it has a 3-chain. We don’t write to disk until we have the 3-chain, so anytime that you see your transaction via the queries (and see a committed transaction), it means that it already has had the 3 chain
Thanks you, jonrau1 and kph. Under the current circumstance it takes only seconds to finalize a transaction. That’s really impressive.