What is the difference between approving a transaction and confirming transaction in IOTA? Does confirmation of a transaction indicate finality? How are these concepts different from that in Blockchain.
This important question should be answered clearly & with detail. There are three parts to your question:
- How does IOTA confirm transactions now?
- How will IOTA confirm transaction after coordicide?
- How is this different from a blockchain confirmation?
I will answer these in order.
How does IOTA confirm transactions now?
tl;dr The coordinator, run by the IOTA Foundation, issues milestones. When a transaction is between milestones it is considered confirmed.
Around August 2020 phase 1 of the Chrysalis update occurred. This changed the implementation in which the coordinator issues milestones to what is called white flag issued in this hyperlinked RFC. White flag removes the coordinator's responsibility of checking for double spends. It puts the responsibility onto node operators to follow order the transactions of the tangle in a deterministic way and if a double spend occurs between two milestones, invalidate the later transaction and confirm the first. Every IOTA transaction references two other transactions, the trunk and branch, such that every IOTA node is connected to each other through a directed acyclic graph. The deterministic order that all nodes follow is post-order depth-first-search, using trunk & branch transactions as the edges.
When a milestone is issues by the coordinator nodes will go through, order transactions making sure that there are no double spends, confirming all transactions between milestones.
How will IOTA confirm transaction after coordicide?
tl;dr A leaderless consensus mechanism, Fast Probabilistic Consensus, settles double spends and the deeper a transaction is in the Tangle, the higher probability it is confirmed.
Without milestones, the IOTA network can actually confirm transactions as they come with just a delay. When a transaction shows up, a node puts it in quarantine twice for some duration. Each quarantine, the node checks to see if this transaction has a conflicting double spend. If a transaction conflicts, the leaderless consensus mechanism, Fast Probabilistic Consensus (FPC), settles the dispute quickly.
After a transaction has survived quarantine and possibly FPC, it is confirmed when it receives at least 50% approval weight and its branch is confirmed. The branch is confirmed when its approval weight is 50% higher than any other conflicting branches. Approval weight is essentially the number of nodes that agree that a transaction has survived quarantine & FPC, weighted by the node's mana. Mana is a form of delegated proof or stake.
The approval weight itself is calculated every time a new supporter is added to a branch. The AW for a branch B is calculated as follows:
AW(B) = supporters(B) dot 'active cMana nodes' / 'total active cMana'source
They cleverly use lookup tables to keep track of approval weight efficiently. Approval weight can also be thought of as duration or depth in the tangle: how deep and for how long it has fallen into the sea of transactions.
Similarly to Bitcoin's 6 block rule, [Approval Weight] describes how deeply buried a message in the Tangle is. If a message reaches >50% of active consensus mana approving it, i.e., its future cone contains messages of nodes that together assert >50% of active consensus mana, it [is] finalized and, thus, confirmed. source
All the details about confirmation in coordicide can be found in the goshimmer docs.
How is this different from how blockchain confirms transactions?
tl;dr After a block is minted, the transaction is valid. The more blocks that are attached thereafter, raises the confidence that the transaction should be considered confirmed.
Blockchain uses randomized elected leaders through either proof of stake or proof of work to determine in a distributed way a single node to issue a block. The reward from confirming a block is contingent upon if the block does not have double spends. If it contains double spends the block minter loses their reward. Generally, when a new block is issued, and you trust the node you are connected to, that block confirmed the transaction.
Although, there is the chance that two blocks are simultaneously formed at the same time, so blockchains choose a number of blocks that make it implausible to have a simultaneous blocks form that many times. It is like saying, "If are rolling a dice, it is implausible that your roll one, a billion times in a row." It is extremely unlikely that bitcoin will issues six block simultaneously in a row. So waiting six blocks is a good threshold to consider the transactions inside as confirmed. Also, after a series of simultaneous blocks form, the longer streak of blocks emerges as the true blockchain and the other chain of blocks is orphaned.
Both IOTA & Blockchain are just simply waiting until it is implausible that the transaction is a double spend. IOTA uses FPC to settle double spends, whereas Blockchains use the death trigger strategy of losing block rewards. IOTA transactions weight until the approval weight reaches a threshold, whereas Blockchain waits for a certain number of consecutive blocks to form.
Please comment feedback if you have any.