₿itcoinItaliaNetwork 

Testnet

Difficoltà: intermedio

Argomento: tecnologia


DEFINIZIONE

La testnet è una blockchain alternativa utilizzata dagli sviluppatori per testare le varie funzionalità della piattaforma nella quale le monete non hanno valore reale.
Si contrappone alla blockchain in produzione e operativa, definita mainnet.

La testnet è una rete P2P completa, dotata di tutte le funzionalità, inclusi wallet, bitcoin di test (monete testnet), mining e tutte le altre caratteristiche della mainnet.

La differenza più importante è che le monete testnet dovrebbero essere prive di valore. Ogni sviluppo software destinato all'uso sulla rete principale di Bitcoin può essere testato preventivamente su testnet con monete di prova. Ciò protegge sia gli sviluppatori da perdite monetarie dovute a bug, sia la rete da comportamenti indesiderati causati da bug.

La testnet utilizza le stesse strutture dati di Bitcoin e lo stesso meccanismo di sicurezza PoW, proof-of-work.

Con la testnet, anche i miner possono testare le proprie attrezzature e infrastrutture per generare blocchi in un ambiente di test.

Le principali differenze tra testnet e mainnet sono le seguenti:

  • la difficoltà su testnet è equivalente a una difficoltà di metà su mainnet (1,0 su testnet corrisponde a 0,5 su mainnet). Questo significa che qualsiasi difficoltà su testnet è il doppio di quella su mainnet.;
  • la minimum difficulty rule, o regola della difficoltà mininma, stabilisce che se non viene trovato alcun blocco per 20 minuti, la difficoltà si reimposta automaticamente al valore minimo per un blocco singolo, prima di ritornare al valore precedente (con una eccezione nel caso del blocco retarget, di seguito spiegato);
  • è disabilitato il controllo di validità delle transazioni standard (IsStandard()), in modo che sia possibile sperimentare transazioni non standard
  • gli indirizzi testnet hanno un formato diverso (un valore diverso del campo ADDRESSVERSION) per garantire che non possano funzionare sulla mainnet

Il meccanismo PoW di Bitcoin dipende da incentivi economici che non esistono nella testnet, dove le transazioni contengono commissioni che non dovrebbero avere un valore economico.

Sulla mainnet, i miner sono incentivati a includere le transazioni degli utenti nei loro blocchi perché tali transazioni pagano commissioni.
Su testnet, le transazioni contengono ancora qualcosa chiamato commissioni, ma tali commissioni non hanno un corrispondente valore economico. Ciò significa che l’unico incentivo per un miner testnet ad includere transazioni è perché o vuole testare le funzioni del mining, o vuole aiutare gli utenti e gli sviluppatori a testare il proprio software.
Poiché il mining PoW è progettato per essere senza autorizzazione, chiunque può eseguire il mining, indipendentemente dal fatto che la sua intenzione sia buona o meno. Ciò consente ad esempio che i miner possono creare molti blocchi di seguito su testnet senza includere alcuna transazione dell'utente.
Quando si verificano questi attacchi, la testnet diventa inutilizzabile per utenti e sviluppatori.

La difficoltà di estrazione dovrebbe essere abbastanza bassa da permettere a chiunque di fare mining testnet in modo relativamente semplice.

La testnet ha la caratteristica che garantisce che si possa essere in grado di estrarre blocchi se i suoi più grandi miner la abbandonano improvvisamente: la difficoltà minima di 1,0 su testnet è uguale a una difficoltà di 0,5 su mainnet. Ciò significa che l’equivalente mainnet di qualsiasi difficoltà del testnet è la metà della difficoltà di testnet.

Nonostante le richieste di utilizzare equipaggiamento low-end da parte degli sviluppatori, i miner testano su testnet le loro attrezzature da mining avanzate (GPU e ASIC).

Ciò può far aumentare la difficoltà rendendo impossibile minare con una CPU, e di conseguenza rende altrettanto difficile ottenere monete di prova e le persone hanno iniziato a darne un valore, rendendole non realmente inutili e prive di valore.

Testnet3

Di tanto in tanto, la testnet dovrebbe essere scartata e riavviata da un nuovo genesis block, ripristinando la difficoltà e scartando le transazioni.

L'attuale testnet è chiamata testnet3, la terza iterazione di testnet, riavviata a febbraio 2011.

La prima versione di testnet è stata avviate il 19 ottobre 2010, per consentire agli sviluppatori di testare le modifiche al software senza modificare la main net.
La versione precedente rispetto all'attuale ha iniziato ad avere una elevata difficoltà, e a causa di questo le monete testnet sono diventate scarse e molti utenti ne hanno approfittato per venderle.
L'idea del riavvio dovrebbe essere proprio quella di evitare questo incentivo a creare un mercato per le monete testnet.

La vulnerabilità Timewarp della testnet

Il meccanismo di PoW della testnet, che ha dei parametri leggermente diversi da quello della mainnet Bitcoin, soffre di una vulnerabilità chiamata Timewarp.

Così come succede con la mainnet bitcoin, anche testnet ricalcola la difficulty di mining ogni 2016 blocchi.

La difficoltà viene regolata regolarmente in modo da mirare a un intervallo di blocco medio di 10 minuti, ma non tutti gli intervalli di blocco sono esattamente di 10 minuti.
La distribuzione dei blocchi nel tempo segue un processo statistico noto come processo di Poisson, secondo la quale eventi casuali si verificano con la stessa probabilità in ogni intervallo di tempo.

Poiché per il mining della testnet non ci sono gli stessi incentivi economici che esistono sulla mainnet, l'hashrate della testnet può variare in modo sostanziale, poiché uno dei partecipanti al mining testnet potrebbe avere una grande potenza di calcolo rispetto agli altri partecipanti, portare la difficulty a valori molto alti e poi smettere di minare: questo impedisce agli altri miner di trovare un blocco in tempi relativamente brevi.

A causa dell’imprevedibilità della potenza di hashing e dei tempi del blocco, esiste una regola speciale nella testnet che consente di minare un blocco contro la difficoltà minima di 1 (e quindi praticamente istantaneamente su una GPU o ASIC) se non c’è stato un blocco per 20 minuti.
Questa funzionalità garantisce che gli utenti non debbano mai attendere più di 20 minuti per un blocco, anche se l'unico miner rimasto sulla rete ha un hardware poco potente.
Se non viene trovato alcun blocco entro 20 minuti, la difficoltà si reimposta automaticamente al minimo per un singolo blocco, dopodiché ritorna al valore precedente.
Questa regola viene invocata abbastanza regolarmente su testnet.
Secondo alcuni studi quasi 200.000 blocchi (circa il 12% di tutti i blocchi) su testnet sono stati estratti con una difficoltà pari a 1 dopo che è trascorsa la finestra di 20 minuti dal blocco precedente.

Se questa diminuzione improvvisa della difficoltà avviene nel blocco del retarget, si genera un problema di tipo retarget overflow, chiamato Timewarp.
Questo problema avviene diverse volte all'anno, in modo naturale o provocato volutamente, che consente di effettuare un griefing attack e tramite questo fare un block storm ovvero inondare la testnet di un numero insolitamente elevato di blocchi che provocano con un tasso di orfani molto elevato.

Perché il ripristino della difficoltà causa tali conflitti con i servizi in esecuzione su testnet?
Mentre nella main net di solito in una giornata vengono minati circa 144 blocchi, se sulla testnet si verifica un ripristino della difficoltà al minimo, anche un ASIC economico può estrarre più blocchi al secondo.
Se si hanno diversi miner testnet che emettono blocchi sulla rete, ci saranno parecchi conflitti.

Quando un nodo Bitcoin riceve un nuovo insieme di blocchi in conflitto che hanno più prove di lavoro di quella che considera la migliore catena attuale, deve eseguire una riorganizzazione della blockchain. Ciò comporta il rollback sequenziale dell'attuale catena di blocchi e transazioni e quindi l'applicazione della nuova catena: è un processo molto intenso che avviene molto raramente sulla main net e quasi mai con più di un blocco alla volta.
Molti nodi o servizi scritti in modo approssimativo eseguiranno semplicemente questa operazione in memoria per avere un miglioramento delle prestazioni, ma quando ricevono una riorganizzazione che ha centinaia o migliaia di blocchi la macchina potrebbe esaurire la memoria e causare il crash del nodo o del servizio, congelandolo così all'ultimo blocco elaborato con successo.
È anche possibile che il servizio non abbia un blocco attorno a questa operazione e se è nel mezzo di un'esecuzione di riorganizzazione mentre si verifica un'altra riorganizzazione, il servizio bloccherà/bloccherà/corromperà i dati.

Altri tipi di test net

Per gli sviluppatori, alcune caratteristiche della testnet come l'imprevedibilità della creazione dei blocchi e dell'inclusione delle transazioni può essere un problema, con i miner che si uniscono e lasciano la rete in modo imprevedibile.
Inoltre, poiché i miner spesso testano le proprie impostazioni su questa rete, non sempre includono le transazioni che gli sviluppatori si aspettano.

Per questi motivi sono state create delle diverse forme di testnet:


aggiornato il 2021-10-21