Ohjelmoijan bitcoin-kaivosalgoritmi ' n näkökulma

Tämä sivu: Blocks sanoi, että kaivostoiminnalla on tarkoitus ratkaista matemaattinen ongelma, mutta lukemalla lohkon hajautusalgoritmi ei ole paljon apua. bitcoind-lähdekoodin lukeminen, mutta koodin lukeminen vie paljon enemmän aikaa kuin dokumentaation lukeminen 🙂

Ja olen kirjoittanut yksinkertaisen json-RPC-asiakkaan kutsumaan getwork () -metodin ”tietojen” noutamiseksi, mutta mitä pitäisi Teen tämän ”datan” vieressä?

Kuka voisi selittää kaivosprosessin ohjelmoijan näkymässä?

Kommentit

  • but what should I do next to this "data"? Tässä ’ on lyhyt viitteellinen toteutus. github.com/jgarzik/pyminer/blob/master/pyminer.py
  • myös explain the mining process in programmer's view on melko laaja kysymys. Mitä ongelmaa yrität ratkaista?
  • @NickODell Kiitos koodistasi! Nyt ymmärrän kuinka luoda uusia lohkoja. Mutta ovatko kaikki lähetetyt lohkot kelvollisia (bitcoin-verkko lähettää bitin tälle henkilölle)? Löysin Bitcoin-wikin, että vain 6 lohkoa luodaan joka tunti. Oletetaan, että 100 ihmistä saa lohkon otsikon käyttämällä getworkia samanaikaisesti samoin vaikeuksin, mielestäni nämä ihmiset luovat paljon enemmän kuin 6 lohkoa. Olenko oikeassa?
  • Vastaaminen järjestyksessä: Ei. Ei.
  • Mahdollinen kopio -ominaisuudesta en pysty selvittämään getwork-api

vastaus

Kaivosalgoritmi on seuraava:

  • Vaihe 0 – Nouda edellisen lohkon hajautusverkko.

  • Vaihe 1 – Kerää luettelo mahdollisista tapahtumista, joita kutsutaan nimellä ”lohko”. Tämä tapahtumaluettelo on peräisin vertaisverkko-bitcoin-verkosta.

  • Vaihe 2 – Laske hash mahdollisten tapahtumien lohkolle sekä satunnaisluku.
  • Vaihe 3 – Jos hajautusarvo on enemmän kuin asetettu vaikeustaso, olet kaivanut kyseisen lohkon. Jos ei, aloita alusta vaiheesta 1. Mahdolliset lisäykset vaiheen 1 tapahtumaluetteloon sekä vaiheen 2 satunnaisluvun muutos tarkoittavat, että on mahdollista, että kriteeri täyttyy seuraavalla kierroksella.

Ohjelmoijan näkökulmasta pseudokoodi voi näyttää tältä:

 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 

Varoitan, että on olemassa muutama epätarkkuus tässä kuvauksessa, mutta suurimmaksi osaksi sen pitäisi olla tarpeeksi hyvä. Tässä on vielä muutama hyödyllinen selvennys:

Mitä ”has has?”

Hajautus on funktio, joka muuntaa datan tietylle alueelle. Hajautusmerkillä on ominaisuus, että sen lähdön tunteminen on oleellisesti arvaamatonta (annetulla alueella). Bitcoinin louhintaan käytetty erityinen hash-toiminto on SHA256, jota käytetään kahdesti.

Kuinka vaikeustaso toimii?

Tämä arvaustoiminnon arvaamaton luonne tarkoittaa, että satunnaisdatan (tapahtuma + satunnaisluku) syöttäminen tuottaa olennaisesti satunnaisluvun tietyllä alueella. Halutun tuotoksen alueen rajoittaminen edelleen vaikuttaa siihen, kuinka todennäköisesti se löydetään yhdellä kierroksella. Tämä luo tavan todennäköisesti määrittää, kuinka usein ratkaisu löydetään sen perusteella, kuinka monta kertaa algoritmi voidaan ajaa verkossa. Tarkemmin sanottuna, kun kuulet termit ”gigahashes” tai ”terahashes”, tämä viittaa siihen, kuinka monta kertaa vaihe 3 voidaan suorittaa. Kun sekoitusten määrä sekunnissa koko verkossa kasvaa, verkko nostaa ongelman automaattisesti siten, että ratkaisu löydetään noin 10 minuutissa.

Mitä tapahtuu, kun lohko louhitaan?

Kun lohko louhitaan, kaivosmies lähettää lohkon kaikille muille verkon kaivostyöläisille todisteeksi siitä, että sillä on löytänyt sen. Tämä lohko sisältää luettelon tapahtumista, löydetystä hashista, tietystä satunnaisluvusta ja viittauksen edelliseen hashiin. Kun jokainen kaivosmies vastaanottaa vasta kaivetun lohkon, se poistaa kaikki lohkon sisällä olevat kaivostoiminnot (koska ne on jo vahvistettu lohkoketjussa) ja lähettää lohkon muille kaivostyöläisille, jotka tekevät saman asian. eteneminen tapahtuu melko nopeasti.

Huomaa: Lohkon alkuperäinen kaivosmies saa ”kaivostyöläisten” palkkion, joka on palkkio, joka koostuu kaikista tapahtumien käyttämättömistä kolikoista ”kolikkopohjaisen” palkkion lisäksi. Kolikkopalkkio alkoi 50 bitcoinilla ja puolikkaalla jokaista 210 000 lohkoa kohti (noin kerran 4 vuodessa). Kolikkopalkkio lopulta pienenee niin pieneksi, että se on vähäpätöinen verrattuna kaivostyöläisten palkkioihin.

Kommentit

  • Palkinto puolitetaan 210000 lohkon välein .- > Näki juuri tämän ja ajattelin sen olevan siisti: bitcoinclock.com
  • Oh , ja vaikeusastetta mukautetaan joka vuoden 2016 lohko olettaen, että verkko jatkaa toimintaansa mainittujen viimeisten 2016 lohkojen keskimääräisellä hajautusnopeudella ja asettamalla uudet vaikeudet siten, että tämä hashraatti johtaisi noin 10 minuutin lohkoon.
  • Voisin olla väärässä, mutta uskon, että lohko sisältää myös viimeisen lohkon hashin. Ja näin lohkot ketjutetaan taaksepäin, mikä johtaa termiin blockchain.
  • @Murch, vaikeus säädetään jokaisessa lohkossa sen mukaan, kuinka kauan edellisen lohkon löytäminen kesti, ja tässä vaiheessa vaikeus voi vain nousta. Jokaisella vuoden 2016 lohkolla vaikeus säädetään suhteessa viimeisiin vuoden 2016 lohkoihin ja se voi nousta ylös tai alas. Tämä auttaa suojautumaan laskentatehon äkillisiltä putoamisilta, mikä muuten johtaisi siihen, että lohkon löytämisaika kasvaa yli 10 minuuttiin.
  • @ Tarandeep-Gill, että ’ s oikein! Edellisen lohkon tiiviste sekoitetaan tapahtumaluettelon kanssa. Tämä saa minut ajattelemaan, että selitys hajautuksesta on vähän epätäydellinen – Erityistä hajautusfunktiota ei sovelleta SHA256: ta kahdesti ilmoitetulla tavalla, vaan pikemminkin lohkon eri osiin (mukaan lukien tapahtumat ja edellisen lohkon hajautus) sovellettu funktio. eri tavoin. Tämä on yksi niistä ” epätarkkuuksista ”, joista varoitin teitä. Ihmettelen, löydätkö muut …

Vastaa

”Palapelin” ratkaisemisen tarkoitus on (a) viivyttää lohkon louhinta keskimäärin 10 minuuttiin ja (b) aiheuttaa lohkon louhinnasta reaalimaailman kustannuksia (prosessorin tehon, siis energian kulutus). Kustannukset ovat Sybil-hyökkäyksen estämiseksi (monien kaivoskoneiden työllistäminen 51%: n hyökkäykseen).

Viive asetetaan, jotta hyvä lohko leviää ympäri maailmaa kaikille muille kaivostyöläisille , antamatta uuden lohkon lyöneelle kaivosmiehelle etumatkaa. Tätä varten estoajan (10 minuuttia) on oltava suuruusluokkaa suurempi kuin etenemisviive (muutama sekunti).

Joten palapelin lajilla ei ole merkitystä, se voi myös olla jättiläinen Sudoku.

Vastaa

Mikä tahansa hash on kelvollinen hash. Kysymys kuuluu, jos ”hajautus täyttää kriteerimme. Se, mitä hajautat, on itse asiassa pari asiaa (palaamme tähän uudelleen), jotka riviin muodostavat merkkijonon, joka on tietyn pituinen merkkijono. Sitten hajautat koko merkkijonon. Ajattele tuloksena olevaa hajautusta numerona. Haluamme, että tuloksena oleva luku on pienempi kuin tavoiteluku. Joten se on kuin miljardin puoleisen muotin vierittäminen ja tavoitearvon alla olevan luvun keksiminen. Tätä tavoitenumeroa pidetään ”vaikeutena”. Kun yhä useammat ihmiset vierittävät muottia, pienennämme tavoitemäärää pienentämään todennäköisyyttä kuka tahansa die-roll osuu.

Joten tärkeätä, jotkut niistä asioista, jotka olemme rivissä merkkijonossa, jonka hajautamme, ovat asioita, joita annamme säätää. Hajautus ei ole aivan kuin muotin vierittäminen, koska jos meillä on sama asia uudestaan ja uudestaan, saamme saman tuloksen uudestaan ja uudestaan. Jopa pienellä hajautuksen säätämisellä voi olla merkittävä vaikutus siihen johtavaan hajautukseen. ensisijaista kohdetta, jota voimme muokata, kutsutaan ”nonce”. Pohjimmiltaan valitsemme merkkijonossa käytettävän noncen, tiivistämme koko merkkijonon ja näemme mitä saamme. Jos hash ei ole ”ta”, muokkaamme noncea ja yritämme uudelleen . Itse nonce ei ole kovin suuri, joten voit kokeilla rajoitettua määrää nonce-muunnelmia. Seuraava kohta, jota voimme muuttaa, on aikaleima. Annamme myös heiluttaa aikaleimaa. Jokainen aikaleiman heilutus antaa meille mahdollisuuden käydä läpi kaikki mahdolliset nonce-arvot uudelleen. Toistamme tämän prosessin, jossa hyödynnetään nonce-mahdollisuudet, ja sitten heilutetaan aikaleimaa yhä uudelleen, kunnes tuloksena on hash on pienempi kuin vaikeuskohteen numero.

Kun se tapahtuu, julistamme sitten maailmalle, että tämä aikaleima ja tämä nonce toimivat ratkaisemaan lohkon. Toiset vahvistavat sen totta ja se lisätään lohkoketju. Lohkoa pidetään ”Vahvistettuna”, kun se on tietyn määrän lohkoja ”syvällä” lohkoketjussa, mikä tarkoittaa, että se on historiallinen lohko verrattuna nykyiseen lohkoon. Vahvistus on tässä hieman väärä nimi, koska ei ole, että lohko ei jo tiedetä olevan kelvollinen. Vahvistamme työn todistuksen, mikä tarkoittaa, että kun historiallinen lohko on haudattu riittävän pitkälle, historian luomiseen liittyvä ponnistus on ylitsepääsemätön, jotta joku muu yrittäisi luoda erilaisen muunnelman historiasta. oman versionsa kyseisestä lohkosta (ainoa syy on kirjoittaa oma versio tapahtumista, tsvarastaa kolikoita), ratkaise se sitten itse, ratkaise seuraava lohko ja seuraava ja niin edelleen ja ”kiinni” kaikkien muiden kanssa. Tämä tarkoittaa sitä, että heidän täytyisi kilpailla maailmasta nopanheittopelissä. Ehkä kerran maailmankaikkeuden historiassa joku voi saada onnekas nonce kahdella tai kolmella korttelilla taaksepäin, mutta 120 korttelin kanssa, jota useimmat kaivosaltaat ja -vaihdot vaativat nyt? Ei tule koskaan.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *