Ingestion - Algorand Specifications
Keyboard shortcuts
Press ← or → to navigate between chapters
Press S or / to search in the book
Press ? to show this help
Press Esc to hide this help
- Auto
- Light
- Dark
Algorand Specifications
This function determines which transaction groups should be passed to the pending Block Evaluator for possible inclusion in the next block, and which ones should be deferred for evaluation in a future round.
When deferring transactions, the node checks that their remaining validity period is sufficient for future inclusion; otherwise, they are marked for removal if they exceed their validity period.
The TxPoolTxPool also verifies that each transaction group meets the minimum required fee to qualify for execution.
A BlockEvaluatorBlockEvaluator is the construct used to ingest TxnGroupTxnGroup.
The following pseudocode snippet illustrates how this ingestion process could be implemented:
Algorithm 4: Transaction Ingestion
1: function Ingest(TxnGroup gtx) 2: … 3: if ¬BlockEvaluator then 4: return No pending Block Evaluator exists 5: endif 6: if ¬recompute then 7: r ← Ledger.getLatestRound() 8: t* ← now() + δnewBlock 9: while BlockEvaluator.round() ≤ r ∧ now() < t* do 10: Give time to the BlockEvaluator to catch up 11: end while 12: if ¬CheckSufficientFee(gtx) then 13: return gtx Discarded for insufficient fees 14: endif 15: endif 16: TxPool ← BlockEvaluator.add(gtx) 17: … 18: end function
Transaction ingestion reference implementation.
This algorithm requires a pending BlockEvaluatorBlockEvaluator to be already initialized and ready to process transaction groups.
It uses a recomputerecompute flag to verify whether the Update function has handled the latest block. If not, the algorithm enters a wait phase, controlled by the δNBδNB parameter (as described in the parameters section).
This waiting period can end early if the pending BlockEvaluatorBlockEvaluator catches up to the current round. Once synchronized, the algorithm performs a preliminary check to ensure that the candidate transaction group gtx is adequately funded, per the fee prioritization rules.
Finally, an attempt is made to add gtx to the pending BlockEvaluatorBlockEvaluator. After evaluating gtx and performing all necessary checks, this step effectively enqueues the transaction group into the TxPool.