🇮🇹 "Capire la mempool di Cardano"

:it: Traduzione italiana di Understanding the Cardano Mem-Pool

Traduzione italiana a cura di Lordwotton di RIOT Stake Pools. Se apprezzi queste traduzioni, per favore valuta di supportare il mio lavoro delegando i tuoi ada a RIOT :pray: entra nel nostro gruppo Telegram


Capire la mempool di Cardano


La mem-pool è il luogo in cui le transazioni attendono di essere inserite in un blocco. Ogni nodo produttore di blocchi deve mantenere la propria mem-pool. Avere il controllo sulla mem-pool è un vantaggio di cui si può abusare. Nel corso dell’articolo verrà spiegato a cosa serve la mem-pool. Spiegheremo come funziona un attacco front-running.

Che cos’è la mem-pool?

In una rete distribuita, non esiste un punto centrale che controlli la produzione dei blocchi. Nella rete Cardano, un nodo (slot leader) viene eletto casualmente ogni 20 secondi circa e ottiene il diritto di coniare un nuovo blocco. I produttori di blocchi (o pool) si trovano in tutto il mondo e una nuova pool può essere lanciata in qualsiasi momento e ovunque.

Quando un utente invia una transazione alla rete, questa deve raggiungere tutte le pool. Questo perché non si sa in anticipo quale slot leader verrà sorteggiato nel turno successivo. Nel caso ideale, la transazione raggiunge tutti i nodi, quindi c’è la possibilità che il prossimo slot leader la inserisca in un nuovo blocco.

In ogni momento, gli utenti di tutto il mondo inviano transazioni. I nodi convalidano le transazioni, ma è l’unica cosa che possono fare con esse in un determinato momento. Se le transazioni sono valide, devono aspettare da qualche parte prima di essere inserite in un nuovo blocco.

La mem-pool serve come una sorta di sala d’attesa per le transazioni prima che vengano aggiunte al libro mastro.

Si può pensare alla mem-pool come a una memoria temporanea su ogni nodo, dove le transazioni vengono temporaneamente memorizzate prima di essere inserite nel blocco. Una volta che le transazioni vengono inserite nel blocco, saranno memorizzate nel libro mastro per sempre (a meno che la blockchain non venga riorganizzata).

Ogni pool (nodo) può avere una composizione diversa della mem-pool perché riceve le transazioni in un ordine diverso.

Se Alice dall’Europa, Bob dagli Stati Uniti e Carol dalla Cina inviano transazioni nello stesso momento, i nodi in diverse parti del mondo riceveranno le transazioni in un ordine diverso.

Nella figura, si possono vedere 3 utenti che hanno inviato una transazione nello stesso momento. Ciascun utente ha utilizzato un nodo diverso (perché, ad esempio, ha utilizzato un portafoglio leggero diverso). Ogni transazione ha raggiunto il nodo più vicino, che l’ha inserita nella propria mem-pool. I nodi trasmettono poi la transazione ai peer. A seconda della qualità della connessione di rete, le transazioni arrivano ai peer molto probabilmente in un ordine diverso. I nodi peer convalidano le transazioni e le inseriscono nella mem-pool dove altre transazioni sono già in attesa. Come si può vedere, ogni mem-pool ha un aspetto diverso. Ogni mem-pool contiene tutte le transazioni inviate, ma in ordine diverso.

Per semplicità, i nodi relay non sono mostrati nella figura.


Le transazioni sono disponibili nella mem-pool di tutti i nodi, quindi non importa quale di essi diventi il prossimo leader del blocco. Se le transazioni si adattano al nuovo blocco, verranno tutte inserite in esso.

Nella figura, si può vedere che il nodo 1 è stato eletto leader dello slot. Il nodo 1 prende tutte le transazioni dalla mem-pool e le inserisce in un nuovo blocco. Il nodo 1 conia un nuovo blocco e lo aggiunge al suo libro mastro. Il nodo 1 trasmette il blocco ai peer (nodo 2 e nodo 3). I peer non sanno ancora del nuovo blocco, quindi le transazioni sono ancora nella loro mem-pool.


Nella figura, si può notare che il nodo 2 e il nodo 3 hanno ricevuto un nuovo blocco dal nodo 1. I nodi 2 e 3 hanno convalidato il blocco e lo hanno aggiunto al loro libro mastro. I nodi 2 e 3 hanno convalidato il blocco e lo hanno aggiunto al loro libro mastro. Durante questo processo, questi nodi hanno cancellato dalla mem-pool le transazioni presenti nel nuovo blocco. Si noti che nel frattempo gli utenti hanno inviato nuove transazioni. Le transazioni già presenti nel libro mastro sono state cancellate da tutte le mem-pool. Tuttavia, la mem-pool viene costantemente riempita con nuove transazioni.


Nell’ultima figura, tutti i nodi hanno lo stesso stato del libro mastro, ma un diverso ordine di transazioni nei mem-pool. Nel turno successivo, verrà eletto un nuovo leader di slot e l’intero processo verrà ripetuto.

Prima di poter scrivere qualcosa su un blocco, questo deve passare attraverso la mem-pool. È parte integrante del funzionamento di un nodo blockchain. La stessa cosa che accade con le transazioni si applica anche ai certificati (certificati di delegazione, certificati di registrazione del pool, ecc.) Durante la convalida delle transazioni, possono essere eseguiti degli script.

La mem-pool memorizza le transazioni candidate (in una memoria locale) prima che vengano inserite in un nuovo blocco. Ogni nodo cerca di rimanere sincronizzato con gli altri nodi della rete. Poiché la comunicazione in rete non è sempre affidabile o tempestiva, ogni nodo ha un mem-pool leggermente (o talvolta significativamente) diverso. I nodi mettono in coda le transazioni in base all’ordine di arrivo.

La mem-pool funziona come una sorta di buffer di rete. Se non è possibile inserire tutte le transazioni in un nuovo blocco, le transazioni possono attendere nella mem-pool. Ma solo fino a un limite fisso. La dimensione della mem-pool non è significativamente più grande della dimensione del blocco. Idealmente, la mem-pool dovrebbe rimanere vuota dopo il conio di un nuovo blocco.

Le transazioni lasciano la mem-pool di un nodo perché sono incluse in un blocco. La mem-pool può raggiungere la piena capacità. In questo caso, non è possibile accettare le transazioni appena arrivate. Si tratta di un meccanismo di back-pressure. Gli utenti possono trovarsi a constatare che la loro transazione non viene accettata dalla rete. Devono provare a ripresentare la transazione dopo qualche tempo (o un portafoglio/agente può farlo per loro).

Attualmente, la dimensione della mem-pool è di 145 kb. La dimensione dei blocchi è di 90 kb. Una transazione tipica è di circa 300 byte. Circa 500 transazioni comuni possono essere inserite nella mem-pool.

L’obiettivo della mem-pool non è quello di memorizzare tutte le transazioni inviate, nel caso in cui la rete sia sovraccarica. L’obiettivo del mem-pool è quello di contenere un numero sufficiente di transazioni per un nuovo blocco. In altre parole, garantire il massimo throughput possibile. L’aumento della mem-pool non può risolvere il problema della bassa scalabilità.

In generale, mem-pool più grandi creano solo più lavoro e maggiore latenza. Cardano è stato progettato per non bufferizzare molte transazioni, ma per mettere pressione ai bordi del sistema. Questo sembra essere un approccio migliore rispetto all’utilizzo di grandi mem-pool, poiché fornisce un feedback migliore e utilizza meno risorse per gestire il lavoro in sospeso.

Attacco Front-Running

Ogni operatore di nodo controlla il proprio mem-pool. Tuttavia, nessuno ha il controllo sui mem-pool degli altri operatori. Le transazioni nel mem-pool non sono criptate. L’operatore del pool può analizzarle. È persino possibile pubblicare le transazioni del proprio mem-pool.

Avere il controllo sul mem-pool può essere un vantaggio. Soprattutto nel caso in cui un nodo specifico sia il gateway per le transazioni degli utenti. L’operatore può identificare una specifica transazione e il suo impatto sul libro mastro nel caso in cui la transazione venga inserita in un nuovo blocco.

L’operatore fraudolento può ritardare la transazione dell’utente e inserire la propria transazione davanti ad essa. La transazione dell’aggressore avrà parametri simili a quelli della transazione dell’utente. Può trarne profitto. Un utente potrebbe voler effettuare un’operazione redditizia sul DEX. L’operatore può trattenere la transazione dell’utente e inviare rapidamente la sua transazione. La transazione fraudolenta raggiunge le altre mem-pool prima della transazione dell’utente. L’operatore potrà così effettuare un’operazione redditizia davanti all’utente.

Nella figura, si può vedere che l’utente ha inviato la transazione T1 al tempo N. L’operatore ha analizzato la transazione prima di inserirla nel suo mem-pool e trasmetterla ai peer. Ha valutato che si tratta di un’operazione redditizia. Pertanto, al tempo N+1 (un po’ più tardi), ha inviato la transazione (fraudolenta) T0 e l’ha trasmessa alla rete prima della transazione dell’utente. I peer ricevono prima la transazione T0 e poi T1. Il nodo 2 ha già transazioni nel mem-pool. Il nodo 3 riceve le transazioni nell’ordine scelto dall’operatore del nodo 1.


Gli utenti dovrebbero pensare di più al nodo attraverso il quale la loro transazione viene inviata alla rete. Tuttavia, qualsiasi operatore di nodo nella figura precedente può teoricamente tentare un attacco simile di front-running. Quindi l’operatore dei nodi 2 e 3.

Se l’operatore del nodo 1 fosse onesto e non volesse commettere un attacco di front-running, la transazione dell’utente verrebbe trasmessa alla rete. Se gli operatori dei nodi 2 e 3 volessero commettere un attacco front-running, sarebbe più difficile per loro, perché la transazione dell’utente avrebbe già raggiunto la parte dei nodi della rete (che la trasmetteranno nuovamente). Il successo dell’attacco sarebbe una questione di fortuna e dipenderebbe da quale nodo viene eletto come leader dello slot nel turno successivo.

La presenza di un numero elevato di nodi produttori di blocchi nella rete può potenzialmente contribuire a mitigare gli attacchi front-running (e la censura delle transazioni). Infatti, più la rete è decentralizzata, più diventa difficile per una singola entità controllare o manipolare l’ordine delle transazioni. Tuttavia, è importante notare che questa misura da sola potrebbe non essere sufficiente a prevenire completamente tali attacchi.

In Cardano, le commissioni di transazione non sono utilizzate come fattore decisionale per includere le transazioni in un blocco. Ciò significa che gli utenti (compresi gli operatori dei pool) non possono pagare commissioni più alte per dare priorità alle loro transazioni.

Questo design può rendere più difficili gli attacchi di front-running rispetto alle reti che utilizzano il concetto di mercato a pagamento. Nelle reti che utilizzano il mercato a pagamento, gli utenti possono pagare tariffe più alte per far elaborare le loro transazioni più rapidamente, il che può essere potenzialmente sfruttato dagli aggressori.

Conclusione

Gli operatori vedono le transazioni degli utenti e possono scegliere quali inserire in un nuovo blocco se diventano leader dello slot, ma non possono rubare i beni degli utenti. Tuttavia, possono manipolare le transazioni a loro favore. Ad esempio, rallentando le loro trasmissioni ai peer.

La comprensione della funzione del mem-pool è importante nel contesto del ciclo di vita delle transazioni. Ci sono due periodi importanti tra l’invio di una transazione e il momento in cui questa diventa immutabile: la latenza della transazione e la finalità della transazione.

La latenza della transazione è il tempo che intercorre tra l’invio di una transazione e la sua comparsa nel libro mastro (in un nuovo blocco). La finalizzazione della transazione è il tempo che intercorre tra la comparsa nel primo blocco e l’immutabilità della transazione. Una transazione sarà immutabile non appena ci sarà un numero sufficiente di blocchi appena aggiunti dietro il blocco che la contiene (almeno 5).

1 Like