Dandelion Simulation ================== This document describes a network of node with Dandelion. In this scenario, we simulate a successfull aggregation but a failed transaction cut-through forcing a node to revert its stempool state. This document also helps visualizing all the timers in a simple way. ## T = 0 - Initial Situation ![t = 0](images/t0.png) ## T = 5 A sends grins to B. B flips a coin and decides to add it to its stempool and starts the embargo timer for this transaction. ![t = 5](images/t5.png) ## T = 10 B waits until he runs out of patience. ![t = 10](images/t10.png) ## T = 30 B runs out of patience and broadcasts the aggregated stem transaction to its Dandelion relay H. H receives the stem transaction, flips a coin and decides to add it to its stempool and starts the embargo timer for this transaction. ![t = 30](images/t30.png) ## T = 40 G sends grins to E. E flips a coin and decides to add it to its stempool and starts the embargo timer for this transaction. B and H wait. ![t = 40](images/t40.png) ## T = 55 B spends B1 to D. D flips a coin and decides to add it to its stempool and starts the embargo timer for this transaction. H runs out of patience broadcasts the aggregated stem transaction to its Dandelion relay E. E receives the stem transaction, flips a coin and decides to add it to its stempool and starts the embargo timer for this transaction. ![t = 55](images/t55.png) ## T = 65 Nodes are waiting. ![t = 65](images/t65.png) ## T = 70 E runs out of patience broadcasts the aggregated stem transaction to its Dandelion relay F. F receives the stem transaction, flips a coin and decides to add it to its stempool and starts the embargo timer for this transaction. ![t = 70](images/t70.png) ## T = 80 D runs out of patience, broadcasts the aggregated stem transaction to its Dandelion relay. E receives the stem transaction, flips a coin and decides to add it to its stempool and starts the embargo timer for this transaction. aggregates them (thus removing duplicate input/output pair B1) and starts its patience timer. ![t = 80](images/t80.png) ## T = 85 Nodes are waiting. ![t = 85](images/t85.png) ## T = 95 - Step 1 F runs out of patience, broadcasts the aggregated stem transaction to its Dandelion relay H. H receives the transaction, flips a coin and decide to broadcast the transaction to all its peers (fluff in the mempool). ![t = 95_1](images/t95_1.png) ## T = 95 - Step 2 All the nodes add this transaction to their mempool and remove the related transactions from their stempool. E receives the transaction in its mempool and reverts the state of its stempool to avoid conflicting transactions. ![t = 95_2](images/t95_2.png)