Author

Topic: chiarimenti meccanismo mining (Read 301 times)

newbie
Activity: 9
Merit: 0
December 16, 2017, 04:26:20 AM
#12
Ok, ora è quasi tutto chiaro.
E per la macchina asic?
Come si interfaccia a bitcoin core?
Graz!!!
Capito questo, c'è qualcuno che ha voglia di aiutarmi a
creare un bitcoin core con una piccola modifica nell'interfaccia
che ottiene il nonce dalla mia macchina di calcolo?
Me la sto facendo da solo e non avrà intelligenza a bordo,
quindi niente usb o simili.
Pago poco ma pago.....
legendary
Activity: 2562
Merit: 2640
December 15, 2017, 03:05:01 PM
#11
Parto dal fondo:

Nell'header che compilo per inviare il nonce non c'è l'hash che ho estratto con il nonce
il quale soddisfa la condizione.
In questo modo chi riceve il blocco deve applicare il mio nonce e ricalcolare l'hash, giusto?
Esatto. Chi riceve ricalcola l'hash proprio per verificare che il nonce sia valido. Il concetto è "non fidarsi di nessuno" e ricontrollare tutto in autonomia, quindi chi riceve ricalcola per fare la verifica in autonomia. La verifica come ti ha spiegato Plutosky è molto veloce, o almeno lo è se confrontata al tempo di ricerca del nonce.


Perchè il full node deve scaricare l'intera blockchain?
Non basta l'ultima parte, quella su cui si calcola la difficoltà?
Partire da un determinato blocco e andare in avanti significherebbe dare fiducia a chi ti ha passato quel blocco considerandolo come buono. Invece il concetto è proprio non dare fiducia a nessuno e ricalcolare tutto da zero. Pertanto ogni full node riscarica tutti i blocchi perché poi li verifica uno per uno prima di metterli nella copia della blockchain che conserva in locale ed ha così garanzia che quella copia sia tutta valida/verificata, dal primo blocco all'ultimo.
newbie
Activity: 9
Merit: 0
December 15, 2017, 01:39:04 PM
#10
Perfetto, ho letto il libro.
Ancora due piccoli chiarimenti e vi lascio in pace:
Perchè il full node deve scaricare l'intera blockchain?
Non basta l'ultima parte, quella su cui si calcola la difficoltà?
Come si interfaccia bitcoin core con la macchina asic che fa i conti?
E' una sorta di superpc dove gira anche il s.o. oppure è una periferica?
Nell'header che compilo per inviare il nonce non c'è l'hash che ho estratto con il nonce
il quale soddisfa la condizione.
In questo modo chi riceve il blocco deve applicare il mio nonce e ricalcolare l'hash, giusto?
grazie ancora!!
legendary
Activity: 2450
Merit: 4309
December 14, 2017, 02:45:05 AM
#9
Bene, vi ringrazio molto e leggerò tutto quello che mi avete segnalato.
Nel frattempo chiedo due chiarimenti sulla risposta di Plutosky:
"La verifica della correttezza del risultato viene fatta in automatico da tutti i nodi della rete che ricevono l'header del blocco dal miner che ha risolto la funzione e che ha ricevuto la ricompensa di blocco"

Che relazione c'è tra il nonce giusto e l'Header del blocco' che dovrei inviare? Lo contiene?
Quindi, in linea teorica, uno potrebbe sparare fuori nonce a caso, e la rete li boccerebbe, o c'è un meccanismo che mi
impedisce di inviare nonce a caso?
Non mi riferisco alle funzionalità dei sw locali, ma alla rete....
Nello specifico, "risolvere la funzione" è indispensabile per trasmettere l'header?
Non sto cercando trucchi stupidi, solo di capire il sistema!!

Un'altra cosa: Come fa il miner a ricevere la ricompensa? Il suo portafogli in qualche modo è collegato alla
conferma data dalla rete?

Grazie!!

Una funzione di hash converte una stringa di lunghezza arbitraria in un hash di lunghezza fissa . In base alle sue proprietà deve essere praticamente impossibile dall'hash risalire alla stringa (come è praticamente impossibile da una chiave pubblica risalire a quella privata), ma grazie alla sua proprietà di asimmetria è relativamente facile in termini computazionali risalire all'hash, data la stringa.
I miners in pratica fanno quello che fa un cracker quando tramite bruteforce cerca di risalire da un testo crittografato a quello che lo ha generato: provano miliardi di miliardi   di possibili nonce al secondo fin quando non ne trovano uno  che, applicato all'header del blocco precedente, dà un hash inferiore al target.
A quel punto propagano il risultato e, in base alla asimmetria della funzione di hash, diventa semplice per un nodo anche con poca potenza computazionale fare la riprova ossia usare il nonce per verificare che quell'hash sia quello giusto.
L'hash non deve essere per forza uguale ad un singolo valore ma deve essere più piccolo del target: siccome il target è l'inverso della difficoltà, più la difficoltà aumenta meno combinazioni possono soddisfare il requisito e quindi il mining diventa più dispendioso in termini computazionali.
legendary
Activity: 2562
Merit: 2640
December 12, 2017, 04:58:27 PM
#8
Provo a rispondere io, vediamo se ci prendo.

Il nonce è contenuto nell'header, vedi qui:  https://en.bitcoin.it/wiki/Block_hashing_algorithm
per cui se nell'header tu mettessi un nonce a caso ma che non soddisfi il "problema" (cioè che dopo l'applicazione della funziona di hash non fornisca un numero minore a quello previsto dalla difficulty di quel momento)  qualsiasi nodo - che come sai rifa il calcolo della verifica da zero - si accorgerebbe dell'errore e scarterebbe il blocco.

Va aggiungo che di soluzioni al problema (cioè di nonce) non ne esiste solo una ma ce ne sono tantissime, quindi in questo senso potresti "sparare" (rubo le tue parole) nonce a caso, ma se esso non soddisfacesse il problema sarebbe rigettato.

Per l'ultima domanda: il miner aggiunge una tx in cima al blocco che sta minando, in questa tx si autoaccredita (cioè la indirizza ad un proprio address) la quantità di btc prevista in quel momento come ricompensa di mining.
Ovviamente ogni miner metterà un proprio address, e solo quello che arriverà primo nel creare il nuovo blocco si prenderà questi btc.
newbie
Activity: 9
Merit: 0
December 12, 2017, 04:35:39 PM
#7
Bene, vi ringrazio molto e leggerò tutto quello che mi avete segnalato.
Nel frattempo chiedo due chiarimenti sulla risposta di Plutosky:
"La verifica della correttezza del risultato viene fatta in automatico da tutti i nodi della rete che ricevono l'header del blocco dal miner che ha risolto la funzione e che ha ricevuto la ricompensa di blocco"

Che relazione c'è tra il nonce giusto e l'Header del blocco' che dovrei inviare? Lo contiene?
Quindi, in linea teorica, uno potrebbe sparare fuori nonce a caso, e la rete li boccerebbe, o c'è un meccanismo che mi
impedisce di inviare nonce a caso?
Non mi riferisco alle funzionalità dei sw locali, ma alla rete....
Nello specifico, "risolvere la funzione" è indispensabile per trasmettere l'header?
Non sto cercando trucchi stupidi, solo di capire il sistema!!

Un'altra cosa: Come fa il miner a ricevere la ricompensa? Il suo portafogli in qualche modo è collegato alla
conferma data dalla rete?

Grazie!!
legendary
Activity: 2562
Merit: 2640
December 12, 2017, 04:00:35 PM
#6
Ciao a tutti.
Sto cercando delle info che forse sono banali, vi chiedo scusa,
............ [CUT]

Se vuoi capire davvero bene il funzionamento ti consiglio di leggere "Mastering Bitcoin" di Antonopoulos. E' spiegato tutto molto bene ma ovviamente ci metterai un po' a leggerlo....

Avendo invece già una base aggiungerei un'occhiata a questo thread che personalmente ho ritenuto molto interessante, ma ovviamente devi già sapere benino di cosa si sta parlando:

https://bitcointalksearch.org/topic/m.18291216

p.s. ottima sintesi comunque quella di Plutosky   Wink
legendary
Activity: 2450
Merit: 4309
December 12, 2017, 03:40:45 PM
#5
Ciao a tutti.
Sto cercando delle info che forse sono banali, vi chiedo scusa,
ma non sono riuscito a trovarle in nessun modo, trovo descrizioni troppo generiche
o esempi sw che senza un filo conduttore servono a poco.
Vorrei capire, anche se ormai sembra inutile, il meccanismo del mining in
senso pratico, cioè:
Se ho ben capito bisogna ottenere da qualche parte un file criptato
(dove? che formato ha?)
Applicargli un algoritmo con bruteforce, e ottenere una chiave che deve essere valida
(chi ne attesta la validità, il sw locale o la rete?)
Poi in qualche modo bisogna comunicare questa chiave (Huh) e se è valida si viene pagati in bitcoin?
So che ci sono i sw che permettono di fare tutto in automatico ma ho bisogno di capire
dal mio punto di vista di programmatore, almeno di avere un "flow chart" che mi faccia da guida.
Ringrazio anticipatamente chi avrà la pazienza di spiegarmi o di indirizzarmi verso qualche
guida che non ho trovato da solo!!
Grazie!!

Si tratta di trovare un numero (chiamato nonce di 4byte) che immesso come input in una funzione di hash (applicata all'header del blocco precedente) dia come risultato un valore più piccolo di un certo target (che corrisponde all'inverso della difficoltà).
Siccome la funzione è una funzione crittografica  essa non è deterministica: basta cambiare di una virgola il nonce che il risultato sarà completamente differente. Ne consegue che la ricerca del risultato diventa una operazione di bruteforce che funziona solo per tentativi. La verifica della correttezza del risultato viene fatta in automatico da tutti i nodi della rete che ricevono l'header del blocco dal miner che ha risolto la funzione e che ha ricevuto la ricompensa di blocco. Questo processo nella rete bitcoin riparte in media ogni 10 minuti e garantisce l'emissione della moneta in base alla progressione stabilita nelle regole del consenso.
sr. member
Activity: 521
Merit: 306
December 12, 2017, 03:37:33 PM
#4
Ti ringrazio tantissimo, ma questa l'avevo trovata....è solo che non riesco a
trovare il filo di tutti questi argomenti, esempi, ecc.
C'è un flusso da qualche parte, e la spiegazione dei formati, degli indirizzi, ecc?
Grazie!!

cercai queste cose molto tempo fa, ma mi sembra di ricordare che partendo dal link che ti ho dato trovai tutto, anche gli algoritmi e i template dei file.

però sinceramente non ricordo bene...
...comunque guarda bene che si trova tutto.

in bocca al lupo

ZK
newbie
Activity: 9
Merit: 0
December 12, 2017, 03:35:28 PM
#3
Ti ringrazio tantissimo, ma questa l'avevo trovata....è solo che non riesco a
trovare il filo di tutti questi argomenti, esempi, ecc.
C'è un flusso da qualche parte, e la spiegazione dei formati, degli indirizzi, ecc?
Grazie!!
sr. member
Activity: 521
Merit: 306
December 12, 2017, 03:24:16 PM
#2
mi sembra di capire che non ti basta il solito video di descrizione per l'utente normale...

e allora da programmatore a programmatore....
https://bitcoin.org/en/developer-documentation

buon lavoro!
newbie
Activity: 9
Merit: 0
December 12, 2017, 03:08:38 PM
#1
Ciao a tutti.
Sto cercando delle info che forse sono banali, vi chiedo scusa,
ma non sono riuscito a trovarle in nessun modo, trovo descrizioni troppo generiche
o esempi sw che senza un filo conduttore servono a poco.
Vorrei capire, anche se ormai sembra inutile, il meccanismo del mining in
senso pratico, cioè:
Se ho ben capito bisogna ottenere da qualche parte un file criptato
(dove? che formato ha?)
Applicargli un algoritmo con bruteforce, e ottenere una chiave che deve essere valida
(chi ne attesta la validità, il sw locale o la rete?)
Poi in qualche modo bisogna comunicare questa chiave (Huh) e se è valida si viene pagati in bitcoin?
So che ci sono i sw che permettono di fare tutto in automatico ma ho bisogno di capire
dal mio punto di vista di programmatore, almeno di avere un "flow chart" che mi faccia da guida.
Ringrazio anticipatamente chi avrà la pazienza di spiegarmi o di indirizzarmi verso qualche
guida che non ho trovato da solo!!
Grazie!!
Jump to: