Protocollo di Stratum Mining

Stratum mining pool

Stratum-mining è un protocollo minerario. È una sostituzione per i server di pooling basati sulla rete consentendo ai client di generare lavoro. Il protocollo stratum è descritto qui in dettaglio. Questa è un’implementazione di stratum-mining per la maggior parte delle monete. È compatibile con MPOS in quanto conforme agli standard di pushpool. L’obiettivo finale è quello di costruire su questi standard per trovare una soluzione più stabile.

L’obiettivo è di creare un server di data mining stratum affidabile per una vasta gamma di monete a differenza di altre fork in cui il codice è limitato a specifici algoritmi. col tempo svilupperò questo per essere più ricco di funzionalità e molto stabile. Se si desidera visualizzare una funzione si prega di presentare una richiesta di funzionalità.

Il protocollo di Stratum Overlay è stato esteso per supportare il mining in sostituzione del protocollo getwork obsolete alla fine del 2012. La specifica del servizio minerario è stata inizialmente annunciata tramite il sito web del pool di Slush. Poco dopo, la documentazione di stile “cheat sheet” alternativa è stata fornita da BTC Guild. Poiché l’estensione manca di un BIP formale che descrive uno standard ufficiale, si è ulteriormente sviluppato solo attraverso la discussione e l’implementazione.

Indice

Che Cosa è?

Caratteristica

  • Stratum Mining Pool
  • Risolto Conferma del Blocco
  • Supporto Vardiff basato sul lavoro
  • Solution Block Hash Support
  • Rotazione lei log
  • Iniziale bassa difficoltà Condividi conferma
  • Più coind Stratum portafogli
  • Al volo aggiunta di nuovi portafogli coind
  • MySQL/PostGres/SQLite supporto database
  • Controllo password Bypass per i lavoratori
  • Proof-of-work e Proof-of-Stake Supporto
  • Supporto Alle Transazioni

Metodo

mining.authorize

mining.authorize("username", "password") 

Il risultato di una richiesta di autorizzazione è solitamente vero (riuscito) o falso. La password può essere omessa se il server non richiede password.

mining.capabilities (DRAFT)

Nota: si tratta di un progetto di proposta di estensione. Non è ancora in uso e può cambiare in qualsiasi momento. mining.capabilities({“notify”:[], “set_difficulty”:{}, “set_goal”:{}, “suggested_target”: “hex target”})

Il client può inviare questo per informare il server delle sue capacità e opzioni. Il parametro singleton è un oggetto che descrive le funzionalità; per impostazione predefinita, è considerato come {“notify”:{}, “set_difficulty”:[]} ma non appena questo metodo viene utilizzato, questi devono essere inclusi esplicitamente se lo si desidera. Il tasto “suggested_target” può sostituire il mining.metodo suggest_target

Si noti che la maggior parte delle chiavi non ha alcun valore significativo in questo momento e che i suoi valori dovrebbero essere ignorati.

mining.extranonce.subscribe

mining.extranonce.subscribe() 

Indica al server che il client supporta metodo di mining.set_extranince.

mining.get_transactions

mining.get_transactions("job id") 

Il Server deve inviare un array con un hexdump di ogni transazione nel blocco specificato per l’id del lavoro specificato.

mining.submit

mining.submit("username", "job id", "ExtraNonce2", "nTime", "nOnce") 

I minatori inviano azioni utilizzando il metodo “mining.submit”. Gli invii dei clienti contengono:

  1. Worker Name.
  2. Job ID.
  3. ExtraNonce2.
  4. nTime.
  5. nOnce.

La risposta del Server è il risultato: true per accepted, false per rejected (oppure si può ottenere un errore con maggiori dettagli).

mining.subscribe

mining.subscribe("user agent/version", "extranonce1") 

Il secondo parametro opzionale Specifica un mining.notifica ID abbonamento il cliente desidera riprendere a lavorare con (possibilmente a causa di una connessione interrotta). Se fornito, un server può (a sua scelta) emettere la connessione allo stesso extranonce1. Si noti che extranonce1 potrebbe essere lo stesso (consentendo una connessione ripresa) anche se l’ID di sottoscrizione viene modificato!

Il client riceve un risultato:

[[["mining.set_difficulty", "subscription id 1"], ["mining.notify", "subscription id 2"]], "extranonce1", extranonce2_size] 

Il risultato contiene tre elementi:

  • Abbonamento.”- Una serie di tuple a 2 elementi, ognuna con un tipo di abbonamento e un id.
  • “ExtraNonce1.”- HEX-encoded, per-connessione stringa univoca che verrà utilizzato per la creazione di transazioni di generazione in seguito.
  • “ExtraNonce2_size.”- Il numero di byte che gli utenti minatore per il suo contatore ExtraNonce2.

mining.suggest_difficulty

mining.suggest_difficulty(preferred share difficulty Number) 

Utilizzato per indicare una preferenza per la quota di difficoltà alla piscina. I server non sono tenuti a rispettare questa richiesta, anche se supportano il metodo stratum.

Metodi (server a client)

client.get_version

client.get_version() 

Il client deve inviare una stringa di risultati con il suo nome e la sua versione.

client.reconnect

client.reconnect("hostname", port, waittime) 

Il client deve disconnettersi, attendere i secondi “waittime” (se fornito), quindi connettersi all’host/porta specificato (che di default è il server corrente). Si noti che per motivi di sicurezza, i client possono ignorare tali richieste se la destinazione non è la stessa o simile.

client.show_message

client.show_message("human-readable message") 

Il client dovrebbe visualizzare il messaggio al suo utente in qualche modo ragionevole.

mining.notify

mining.notify(...) 

Settori in ordine:

  1. “Job ID.” Questo è incluso quando i minatori inviano risultati in modo che il lavoro possa essere abbinato a transazioni corrette.
  2. “Hash of previous block.” Usato per costruire l’intestazione.
  3. “Generation transaction (part 1).”Il minatore inserisce ExtraNonce1 ed ExtraNonce2 dopo questa sezione dei dati della transazione.
  4. “Generation transaction (part 2).”Il minatore aggiunge questo dopo la prima parte dei dati della transazione e i due valori ExtraNonce.
  5. “List of Merkle Branch.”La transazione di generazione viene hash contro i rami merkle per costruire la radice merkle finale.
  6. “Bitcoin block version.” Utilizzato nell’intestazione del blocco.
  7. “nBits.” La difficoltà della rete codificata. Utilizzato nell’intestazione del blocco.
  8. “nTime.” L’ora corrente. nTime rolling dovrebbe essere supportato, ma non dovrebbe aumentare più velocemente del tempo reale.
  9. “Clean Jobs.”Se è vero, i minatori dovrebbero interrompere il loro lavoro attuale e utilizzare immediatamente il nuovo lavoro. Se false, possono ancora utilizzare il lavoro corrente, ma dovrebbero passare a quello nuovo dopo aver esaurito l’intervallo nonce corrente.

mining.set_difficulty

mining.set_difficulty(difficulty) 

Il server può regolare la difficoltà richiesta per le condivisioni minatore con il metodo di “mining.set_difficulty”. Il minatore dovrebbe iniziare a far rispettare la nuova difficoltà sul prossimo lavoro ricevuto. Alcuni Pool possono forzare un nuovo lavoro quando viene inviato set_difficulty, utilizzando clean_jobs per forzare il minatore a iniziare immediatamente a utilizzare la nuova difficoltà.

mining.set_extranonce

mining.set_extranonce("extranonce1", extranonce2_size) 

Questi valori, se forniti, sostituiscono i valori di sottoscrizione iniziali che iniziano con il prossimo lavoro di mining.notify.

mining.set_goal (DRAFT)

Nota: si tratta di un progetto di proposta di estensione. Non è ancora in uso e può cambiare in qualsiasi momento.

mining.set_goal("goal name", {"malgo": "SHA256d", ...}) 

Informa il cliente che i lavori futuri lavoreranno su uno specifico obiettivo denominato, con vari parametri (attualmente solo “malgo” è definito come l’algoritmo di mining). I minatori possono assumere obiettivi con lo stesso nome sono equivalenti, ma dovrebbero riconoscere i cambiamenti dei parametri nel caso in cui un obiettivo vari i suoi parametri.

Stratum pool software

Tabelle che mostrano il supporto del minatore/server per il protocollo di Stratum mining:

  • Mining software
  • Poolservers

Critica

Sviluppo chiuso

Le estensioni minerarie sono state criticate come sviluppate a porte chiuse senza input da parte della più ampia comunità di sviluppo e estrazione mineraria, con conseguenti problemi evidenti che avrebbero potuto essere affrontati se avesse seguito il processo di stesura BIP standard.

Spostamento GBT

Le estensioni minerarie sono state annunciate dopo che la comunità aveva trascorso mesi a sviluppare un protocollo standard aperto per l’estrazione (getblocktemplate) per lo più superiore. Poiché le estensioni minerarie di stratum lanciate con il supporto di un importante pool minerario, L’adozione di GBT ha sofferto e l’estrazione decentralizzata è spesso trascurata mentre lo strato viene distribuito.

Vedere Anche