Questa pagina: Blocks ha detto che il mining serve in realtà per risolvere un problema matematico, ma leggere algoritmo di hashing dei blocchi non è di grande aiuto. Ho anche provato leggere il codice sorgente bitcoind, ma leggere il codice richiede molto più tempo che leggere la documentazione 🙂
E ho scritto un semplice client json-rpc per chiamare il metodo getwork () per recuperare i “dati”, ma cosa dovrebbe Faccio accanto a questi “dati”?
Qualcuno potrebbe spiegare il processo di mining nella vista del programmatore?
Commenti
Risposta
Lalgoritmo di mining è il seguente:
-
Passaggio 0 – Recupera lhash del blocco precedente dalla rete.
-
Passaggio 1 – Raccogli un elenco di potenziali transazioni noto come “blocco”. Questo elenco di transazioni proviene dalla rete bitcoin peer-to-peer.
- Passaggio 2: calcola un hash per un blocco di potenziali transazioni insieme a un numero casuale.
- Passaggio 3: se lhash è superiore al livello di difficoltà attualmente impostato, hai estratto quel blocco. In caso contrario, ricomincia dal passaggio 1. Qualsiasi aggiunta allelenco delle transazioni dal passaggio 1 insieme alla modifica del numero casuale dal passaggio 2 significa che “cè una possibilità che il criterio venga soddisfatto nel prossimo giro.
Dal punto di vista di un programmatore, lo pseudo codice potrebbe assomigliare a questo:
P := The hash of the previously mined block B := A block of transactions H := A hash function D := Difficulty Level 0 Retreive P 1 Construct/Modify B 2 IF H(P, B, Some Random Number) > D END 3 GOTO 1
Dovrei avvertirti che ci sono alcune imprecisioni in quella descrizione, ma per la maggior parte dovrebbero essere abbastanza buone. E qui ci sono alcuni chiarimenti più utili:
What “sa hash?
Un hash è una funzione che converte i dati in un numero allinterno di un certo intervallo. Lhash ha la proprietà che conoscendo il suo output è essenzialmente imprevedibile (allinterno dellintervallo dato). La funzione hash specifica utilizzata per il mining di bitcoin è SHA256 applicata due volte.
Come funziona il livello di difficoltà?
Questa natura imprevedibile della funzione hash significa che linserimento di dati casuali (la transazione + il numero casuale) produrrà essenzialmente un numero casuale entro un certo intervallo. Limitare ulteriormente lintervallo delloutput desiderato influisce sulla probabilità di trovarlo in un singolo round. Ciò crea un modo per determinare probabilisticamente la frequenza con cui verrà trovata una soluzione in base al numero di volte in cui lalgoritmo può essere eseguito sulla rete. In particolare, quando si sente il termine “gigahash” o “terahash”, questo si riferisce al numero di volte in cui è possibile eseguire il passaggio 3. Man mano che il numero di hash al secondo sullintera rete cresce, la rete aumenta automaticamente la difficoltà in modo tale che una soluzione verrà trovata entro circa 10 minuti.
Cosa succede quando si estrae un blocco?
Quando si estrae un blocco, il miner invia il blocco a tutti gli altri miner sulla rete come prova che ha trovato. Questo blocco contiene un elenco di transazioni, lhash trovato, il numero casuale specifico e un riferimento allhash precedente. Quando ogni minatore riceve il blocco appena estratto, rimuove tutte le transazioni che sta attualmente estraendo che esistono allinterno del blocco (perché sono già state confermate nella catena di blocchi) e trasmette il blocco ad altri minatori che fanno la stessa cosa. la propagazione avviene abbastanza rapidamente.
Nota: il minatore originale del blocco riceve una “commissione minatori”, che è una ricompensa composta da eventuali monete non spese dalle transazioni oltre a una ricompensa “coinbase”. La ricompensa coinbase è iniziata a 50 bitcoin e si dimezza ogni 210.000 blocchi (circa una volta ogni 4 anni). La ricompensa coinbase alla fine diventerà così piccola che sarà minuscola rispetto alle commissioni dei minatori.
Commenti
- La ricompensa viene dimezzata ogni 210000 blocchi .- > Lho appena visto e penso che sia pulito: bitcoinclock.com
- Oh e la difficoltà viene regolata ogni 2016 blocchi assumendo che la rete continuerà a funzionare con il tasso di hash medio di detti ultimi blocchi 2016 e impostando la nuova difficoltà in modo tale che questo hashrate risulti in un ciclo di blocchi di circa 10 minuti.
- Potrei sbagliarmi, ma credo che il blocco contenga anche lhash dellultimo blocco. Ed è così che i blocchi vengono concatenati allindietro, portando al termine blockchain.
- @Murch, la difficoltà viene effettivamente regolata ogni blocco in base al tempo impiegato per trovare il blocco precedente e, a questo punto, il la difficoltà può solo salire. Ogni blocco del 2016, la difficoltà viene adattata rispetto agli ultimi blocchi del 2016 e può aumentare o diminuire. Questo aiuta a proteggersi da improvvisi cali di potenza di calcolo, che altrimenti porterebbero il tempo a trovare un blocco che aumenta a più di 10 minuti.
- @ Tarandeep-Gill, che ‘ è corretto! Lhash del blocco precedente viene sottoposto a hash insieme allelenco delle transazioni. Questo in realtà mi fa pensare che la mia spiegazione dellhashing sia un po incompleta: la funzione hash specifica non è SHA256 applicata due volte come affermato, ma piuttosto quella funzione applicata a varie parti del blocco (comprese le transazioni e lhash del blocco precedente) in diversi modi. Questa è una di quelle ” imprecisioni ” di cui ti avevo avvertito. Mi chiedo se riesci a trovare gli altri …
Risposta
Lo scopo di risolvere un “puzzle” è quello di (a) ritardare lestrazione del blocco a una media di 10 minuti e (b) sostenere costi reali per lestrazione di un blocco (spendendo potenza della CPU, quindi energia). I costi ci sono per prevenire un attacco Sybil (mettendo molte macchine miner al lavoro per eseguire un attacco del 51%).
Il ritardo viene inserito per consentire a un buon blocco di propagarsi in tutto il mondo a tutti gli altri minatori , senza dare al minatore che ha appena coniato il nuovo blocco un vantaggio di partenza. Per questo, il blocktime (10 minuti) deve essere un ordine di grandezza maggiore del ritardo di propagazione (pochi secondi).
Quindi il tipo di puzzle è in un certo senso irrilevante, potrebbe anche essere un sudoku gigante.
Risposta
Qualsiasi hash è un hash valido. La domanda è se “il tuo hash soddisfa i nostri criteri. Quello che hai hash in realtà è un paio di cose (torneremo su questo) che allineate insieme formano una stringa che è una stringa di una lunghezza specifica. Quindi si esegue lhashing dellintera stringa. Pensa al tuo hash risultante come un numero. Quello che vogliamo è che il numero risultante sia inferiore a un numero di destinazione. Quindi è come tirare un dado da un miliardo di facce e ottenere un numero sotto il numero target. Quel numero target è considerato “difficoltà”. Man mano che più persone tirano il dado, abbassiamo il numero target per ridurre la probabilità qualsiasi tiro di dado andrà a segno.
Quindi, cosa importante, alcune di quelle cose che mettiamo in fila nella stringa che abbiamo cancellato sono cose che ci è permesso di aggiustare. Lhashing non è esattamente come tirare il dado perché se abbiamo la stessa cosa più e più volte otteniamo lo stesso risultato più e più volte. Tuttavia, anche un piccolo aggiustamento in ciò che abbiamo hash può avere un impatto maggiore su ciò che è lhash risultante. lelemento principale che possiamo manipolare è chiamato “nonce”. Fondamentalmente scegliamo un nonce da usare nella stringa, cancelliamo lintera stringa e vediamo cosa otteniamo. Se lhash non è “da colpire, modifichiamo il nonce e riproviamo . Il nonce in sé non è molto grande, quindi cè un numero limitato di variazioni del nonce che puoi provare. Il prossimo elemento che possiamo modificare è un timestamp. Abbiamo anche il permesso di oscillare il timestamp. Ogni oscillazione del timestamp ci consente di rivedere lintero insieme di possibili valori nonce. Ripetiamo questo processo di esaurimento delle possibilità nonce, quindi dimenando il timestamp più e più volte fino allhash risultante è inferiore al numero dellobiettivo di difficoltà.
Quando ciò accade, proclamiamo al mondo che questo timestamp più questo nonce funziona per risolvere il blocco. Altri lo convalidano come vero e viene aggiunto al catena di blocchi. Un blocco è considerato “Convalidato” quando si trova un certo numero di blocchi “in profondità” nella catena di blocchi, il che significa che è un blocco storico rispetto al blocco corrente. La convalida è un po un termine improprio qui perché non è che il blocco non sia già noto per essere valido. Ciò che stiamo convalidando è la prova del lavoro, il che significa che una volta che il blocco storico è sepolto abbastanza lontano, la quantità di sforzo necessaria per creare quella storia è insormontabile perché qualcun altro cerchi di creare una variazione diversa della storia. Dovrebbero creare la propria versione di quel blocco (lunico motivo è scrivere nella propria versione delle transazioni, ad esrubare monete) quindi risolverlo da solo, quindi risolvere il blocco successivo e quello successivo e così via e “recuperare il ritardo” con tutti gli altri. Ciò significa che dovrebbero superare il mondo nel gioco del lancio dei dadi. Forse una volta nella storia delluniverso qualcuno potrebbe essere fortunato sul nonce con due o tre blocchi uno dopo laltro, ma con i 120 blocchi che la maggior parte dei pool e degli scambi minerari richiede ora? Non succederà, mai.
but what should I do next to this "data"?
Qui ‘ una breve implementazione di riferimento. github.com/jgarzik/pyminer/blob/master/pyminer.pyexplain the mining process in programmer's view
è una domanda piuttosto ampia. Quale problema specifico stai cercando di risolvere?