Halusitpa sitten tulla blockchain-sovellusten kehittäjäksi tai haluatko vain ymmärtää, mitä tapahtuu hupun alla, kun lähetät bitcoinia ystävällesi, on hyvä olla toimiva tieto siitä, mitä tapahtuu, kun luot ja lähetät Bitcoinia liiketoimet Bitcoin-verkkoon. Miksi?

Koska transaktiot ovat peruskokonaisuus, jonka päälle bitcoin-lohkoketju rakennetaan. Tapahtumat ovat seurausta salauksen, tietorakenteiden ja yksinkertaisten komentosarjojen täydellisestä törmäyksestä. Ne ovat riittävän yksinkertaisia, jotta yleiset tapahtumatyypit eivät ole liian monimutkaisia, mutta riittävän joustavia, jotta kehittäjät voivat koodata myös melko räätälöityjä maksutapoja. Tänään tutustumme entiseen.

Kehittäjänä miten bitcoin-asiakkaasi lähettää uuden tapahtuman verkkoon (ja mitä tapahtuu, kun se vastaanotetaan)?

Mitä tarkalleen tapahtuu, kun lähetät bitcoinia ystävällesi?

Tässä viestissä oletetaan, että lukijalla on perustiedot hajautuksesta, epäsymmetrisestä salauksesta ja P2P-verkostoitumisesta. On myös hyvä olla hyvä käsitys siitä, mikä tarkalleen blockchain on, vaikka et tunne mitään erityistä mekaniikkaa.

Bitcoin-tapahtumat ja niiden rooli laajemmassa kuvassa

Bitcoin koostuu muutamasta pääkappaleesta: solmuista ja lohkoketjusta. Tyypillisen solmun tehtävänä on ylläpitää omaa blockchain-versiotaan ja päivittää se, kun se kuulee “paremman” (pidemmän) version. Yksinkertaisesti sanottuna lohkoketjussa on lohkoja ja lohkoissa on tapahtumia.

Tämän yksinkertaistetun mutta tarkan kuvan mielessä saatat miettiä, mistä tapahtuma tarkalleen tehdään.

  • Kuinka liiketoimien ymmärtäminen auttaa minua tulemaan paremmaksi blockchain-kehittäjäksi?
  • Kuinka transaktiot sallivat minun siirtää bitcoinia ystävälle?

On käynyt ilmi, että vastaukset näihin kysymyksiin vaihtelevat monien asioiden perusteella. Vaikka oletamme, että puhumme vain bitcoinista, voimme käyttää tapahtumia monilla luovilla tavoilla saavuttaa erilaisia ​​henkilökohtaisia ​​tavoitteita. Aloitetaan alusta, ts. Katsotaanpa vanhanaikainen hyvä maksu-PK-hash -tapahtumatyyppi. Tämän tyyppisten tapahtumien osuus on yli 99% kaikista tapahtumista bitcoin-lohkoketju.

Rakennetaan ensin mentaalimalli. On houkuttelevaa ajatella bitcoinia tilipohjaisena järjestelmänä. Loppujen lopuksi, kun lähetän bitcoinia jollekin, kyseinen henkilö saa rahaa ja minulla on jäljellä oleva saldo. Tosielämässä asiat ovat kuitenkin edustettuina hieman eri tavalla. Yleisesti ottaen, kun lähetän rahaa jollekulle, lähetän kaiken rahan käyttämisen (miinus transaktiopalkkiot). Osa rahoista käytetään takaisin omalle henkilökohtaiselle tililleni, jos jäljellä on jäljellä oleva saldo. Asia on, että kaikki rahat liikkuvat joka kerta. Voit siirtyä kohtaan 3.1 selittää, miksi tämä malli on parempi.

Tässä mielessä voimme yleistää ja sanoa, että bitcoin-tapahtumalla on joitain panoksia ja lähtöjä. Graafinen esitys saattaa näyttää tältä:

Kuinka Bitcoin-transaktiot todella toimivat?

Tämä oli minulle hieman hämmentävää, kun näin sen ensimmäisen kerran, joten aion tarkentaa hieman. Kun lähetän tapahtuman, olen lähinnä “vaatinut” tuotosta ja todistan, että minulla on lupa käyttää rahamäärä kyseiseen tulokseen. Joten jos olen Bob ja haluan maksaa Alicelle, nämä panokset ovat todiste siitä, että minulle on annettu tietty määrä rahaa (vaikka tämä saattaa olla vain osa kokonaissaldostani), ja tuotokset vastaavat Alice-tiliä . Tässä yksinkertaisessa tapauksessa olisi vain yksi tulo ja yksi lähtö.

Syvempi katsaus Bitcoin-tapahtumiin

Ymmärretään todellisen bitcoin-tapahtuman mekaniikka. Käytämme yllä olevaa kuvaa viitteenä.

Jos haluat leikata tyypillisen bitcoin-tapahtuman auki, päädytään kolmeen pääosaan: otsikkoon, syötteeseen ja lähtöön. Tarkastellaan lyhyesti näiden osioiden käytettävissä olevia kenttiä, koska ne ovat tärkeitä keskusteluun. Huomaa, että nämä ovat kentät, jotka ovat ns. Raakatapahtumassa. Raakatapahtumat lähetetään vertaisryhmien välillä, kun tapahtuma luodaan.

Otsikko

  • hash: Koko tämän tapahtuman hajautus. bitcoin käyttää yleensä hash-arvoja sekä osoittimella että keinoilla tarkistaa tietokokonaisuuden eheys. Tarkastelemme tätä tarkemmin seuraavassa osiossa.
  • ver: Versionumero, jota tulisi käyttää tämän lohkon vahvistamiseen. Viimeisin versio esiteltiin pehmeällä haarukalla, joka aktivoitui joulukuussa 2015.
  • vin_sz: Tämän tapahtuman syötteiden lukumäärä. Samoin vout_sz laskee lähtöjen lukumäärän.
  • lukitusaika: Tarkastelemme tätä tarkemmin myöhemmissä artikkeleissa, mutta tämä kuvaa periaatteessa aikaisinta aikaa, jolloin lohko voidaan lisätä lohkoketjuun. Se on joko lohkon korkeus tai unix-aikaleima.

Tulo

  • edellinen lähtöhajautus: Tämä on hash-osoitin aiemmin käyttämättömälle tapahtumalähdölle (UTXO). Pohjimmiltaan tämä on rahaa, joka kuuluu sinulle, jonka aiot käyttää tässä tapahtumassa.
  • n: Hakemisto edellisen tapahtuman tuotosluetteloon. Tämä on todellinen tuotos, jonka käytät.
  • scriptSig: Tämä on menoskripti, joka osoittaa, että tapahtuman tekijällä on lupa käyttää 1. ja 2. viitattua rahaa.

Tuotos

  • arvo: Käytetyn Satoshin määrä (1 BTC = 100.000.000 Satoshi).
  • scriptPubKey: Toinen bitcoin-tapahtumassa tarjotuista kahdesta skriptistä, joka osoittaa vastaanottajan hajautettua julkista avainta. Lisätietoja tästä artikkelin viimeisestä osasta.

Tapahtumien todentaminen

Yksi bitcoin-solmun tehtävistä on varmistaa, että saapuvat tapahtumat ovat oikein (tietoja ei ole peukaloitu, rahaa ei luoda, vain aiotut vastaanottajat käyttävät UTXO: ita jne.). Kattavampi luettelo löytyy verkosta, mutta luetelen muutaman tärkeän luettelon täältä:

  • Kaikki tämän tapahtuman tulojen vaatimat lähdöt ovat UTXO-poolissa. Käyttämättömät lähdöt voidaan vaatia vain kerran.
  • Kunkin syötteen allekirjoitukset ovat kelvollisia. Tarkemmin sanomme, että yhdistetyt komentosarjat palaavat oikeiksi suoritettuaan ne peräkkäin. Lisää tästä viimeisessä osassa.
  • Tämä tapahtuma ei käytä UTXO: ta useammin kuin kerran. Huomaa, kuinka tämä on erilainen kuin ensimmäinen kohde.
  • Kaikki tapahtuman tuotosarvot eivät ole negatiivisia.
  • Tämän tapahtuman tuloarvojen summa on suurempi kuin sen tuotosarvojen summa. Huomaa, että jos numerot ovat erilaiset, erona pidetään transaktiomaksua, jonka kaivosmies voi vaatia.

Perusmaksu PK-hash-tapahtumalle

bitcoinilla on oma mukautettu (Forth-tyyppinen) komentosarjakieli, joka on riittävän tehokas, jotta kehittäjät voivat luoda monimutkaisia ​​ja mukautettuja transaktiotyyppejä. Tavallisia bitcoin-asiakkaita [5] hyväksyy noin viisi vakiotapahtumatyyppiä, mutta on muitakin asiakkaita, jotka hyväksyvät muun tyyppiset maksutapahtumat. Tässä käsitellään vain PK-hash -maksun mekaniikkaa.

Jotta tapahtuma olisi kelvollinen, yhdistetyn scriptSig / scriptPubKey-parin on arvioitava tosi. Tarkemmin sanottuna tapahtumankuluttaja tarjoaa scriptSigin, jonka suorittaa ja seuraa vaaditun tapahtumalähdön scriptPubKey (muista, kuinka sanoimme syötteet vaativat aikaisempia käyttämättömiä tapahtumalähtöjä?). Molemmilla skripteillä on sama pino.

Tehokkuuden vuoksi käytetään (virallinen bitcoin-wiki) viite keskustellessamme. Kun vierailet linkillä, mene noin puoliväliin ja etsi taulukko, joka sisältää 7 riviä. Tämä taulukko näyttää, miten komentosarjat yhdistetään, miten suoritus tapahtuu ja miltä pino näyttää jokaisessa vaiheessa.

Yksi asia on huomata, että koska bitcoin-osoitteet ovat tosiasiallisesti hajautuksia (no, se muuttuu vielä hieman monimutkaisemmaksi. Katso ), lähettäjä ei voi mitenkään tietää todellista julkista avainta tarkistaakseen yksityisen avaimen. Siksi Lunastaja määrittää sekä julkisen avaimen että yksityisen avaimen, ja scriptPubKey kopioi ja hajauttaa julkisen avaimen varmistaakseen, että Lunastaja on todella tarkoitettu vastaanottaja.

Suorituksen aikana näet, että vakiot sijoitetaan suoraan pinoon, kun ne kohtaavat. Toiminnot lisäävät tai poistavat kohteita pinosta niiden arvioinnin aikana. Esimerkiksi OP_HASH160 ottaa ylemmän kohteen pinosta ja pitää sen kahdesti, ensin SHA-256: lla ja sitten RIPEMD-160: lla. Kun kaikki komentosarjamme kohteet on arvioitu, koko käsikirjoituksemme arvioi arvon tosi, jos tosi jää pinoon, ja väärin muuten.

Kaiken kaikkiaan pay-to-PK-hash on melko yksinkertainen tapahtumalaji. Se varmistaa, että vain lunastaja, jolla on asianmukainen julkinen / yksityinen avainpari, voi vaatia ja myöhemmin käyttää bitcoinia. Jos oletetaan, että kaikki muut ehdot täyttyvät (katso edellinen osa), tapahtuma on hyvä ja se voidaan sijoittaa lohkoon.

Tulevissa artikkeleissa eritän monimutkaisemmat tapahtumatyypit. Näemme, kuinka useampi kuin kaksi osapuolta voi osallistua tapahtumaan, ja kuinka kauemmin käynnissä olevat tapahtumatyypit voidaan toteuttaa.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me