Bitcoin blockchain

Nagyon vázlatos leírás a bitcoin blockchainről. További részletekért google.

Szóval mire ez a rengeteg CPU cycle?

A 1 BTC-t küld B-nek. Előfeltételek:

  • A rendelkezik bitcoinnal, valaki a most leírt folyamattal korábban küldött neki pénzt
  • Ebből következik, hogy rendelkezik bitcoin címmel
  • Ebből következik, hogy rendelkezik egy kulcspárral, ami egy titkos és egy nyilvános kulcsból áll
  • B szintén rendelkezik egy kulcspárral

Cím
Egy bitcoin cím egy kulcspár nyilvános kulcsából képződik. Egy címről tehát megállapítható, hogy egy adott kulcspárhoz tartozik. B generál egy címet, amit A-nek megmutat.

Tranzackció
A létrehoz egy tranzakciót, amivel elküldi az 1 BTC-t B-nek. Minden tranzakciónak van legalább egy inputja és legalább egy outputja. Az input mindig egy korábbi tranzakció outputja. Ha egy tranzakció elkölti egy korábbi tranzakció outputjait, akkor a tranzakció összes outputját el kell költeni.
Tehát a tranzakció nagyjából:

  • Egy vagy több korábbi tranzakció adatai, amik együtt elég fedezetet nyújtanak a küldendő mennyiségre.
  • Egy output 1 BTC értékben B címére
  • Egy output, ami a maradékot A saját címére utalja (jellemzően egy új, generált címre)
  • Digitális aláírás A titkos kulcsával
  • Egy tranzakció azonosító, ami a fenti tartalmak hash-e.

A digitális aláírásnak köszönhetően B ellenőrizni tudja, hogy A írta alá a tranzakciót, a pénz egy olyan tranzakcióból jön, amit A-nak küldtek, és így tovább.

Blockchain
A következő dolog, amiről B szeretne meggyőződni, hogy A nem küldte el ugyanezt a pénzt valaki másnak is. Ehhez szükség van egy adatbázisra, ami nyilvántartja ezeket a tranzakciókat: ez a blockchain.
A blockchain, ahogy a neve is mutatja, blockok láncolata. Egy block tartalma nagyjából:

  • Block azonosító, ami a lentiek hash-e
  • Előző block hash-e
  • A block tényleges tartalma a tranzakciók.
  • +1 tranzakció 25 BTC értékben tetszőleges címre (bányász címe)
  • timestamp
  • nonce, egy véletlen szám

A következő dolog, amit B szeretne elkerülni, hogy mindenki kedvére hozzon létre blockokat, hatalmas káoszt okozva, ki kinek mennyit küldött. A blockok létrehozását korlátok közé kell szorítani, ha lehet előre kiszámítható időközönként jöjjön létre egy új block, ami tartalmazza az összes addigi tranzakciót.
Ez a bányászat. A szabályok nagyon egyszerűek: A block azonosítója (ami a block tartalmából képzett hash) adott számú nullával kell kezdődjön. Minden bányász azzal van elfoglalva, hogy végigpróbálgatja a block hash-elését különböző nonce értékekkel (és timestamp-pel) addig, amíg a létrejövő block hash adott számú nullával kezdődik. Tehát ez az a titokzatos matematikai algoritmus :).
Hogy pontosan hány nullával kell kezdődjön a hash, azt a hálózat állapítja meg bizonyos időközönként, úgy, hogy a blockok átlagosan 10 percenként kövessék egymást.

Fee
Minden bányász annyi tranzakciót tesz a blockba, amennyi jól esik neki. Ha túl sok tranzakció gyűlne össze, akkor válogathat (egy block max. 1 MB lehet jelenleg). Ha egy tranzakció nem költi el az összes outputját, a fenmaradó összeget a bányász elteheti (saját magának utalja). A szabály egyszerűen:
(a block összes tranzakciójának inputja) + 25 BTC = (a block összes tranzakciójának outputja)

Tehát ha valaki szeretné gyorsan egy blockban tudni a tranzakcióját, a fee-t úgy választja meg. Van egy default fee, amit a kliens felajánl. Egy tranzakció fee nélkül is átmehet, minden a bányászon múlik.

Fork
A hálózat úgy működik, hogy minden node elfogad minden szabályos elemet (tranzakciót, blockot). Előfordulhat, hogy két miner egy időben talál egy érvényes blockot, és azt szétküldik a hálózatban. Minden node az először érkező blockot tekinti érvényesnek, de a másodjára (harmadjára, stb) érkező blockot sem dobja el. Ilyenkor a blockchain forkolódik, és ez teljesen normális.
A miner a hozzá elsőnek érkező blockhoz készíti a következő blockot. Ha sikerrel jár, szétküldi a hálózatban. Ekkor a fork egyik szála hosszabb lesz. Még mindíg előfordulhat, hogy egy másik bányász a fork másik blockja után talál egy újabb blockot, és szétküldi. Ekkor már két-két elemet tartalmaz a fork. Ha ez tovább folytatódna, az egy idő után már problémát jelentene, de normál működés mellett a hálózat hamar megtalálja azt a chaint, amit validnak tekint.

Coinbase tranzakció
Minden block tartalmaz egy tranzakciót, amit a bányász küld saját magának jelenleg 25 BTC értékben. Ezt a tranzakciót nevezik coinbase tranzakciónak. Minden elköltött bitcoin visszavezethető egy coinbase tranzakcióra.

Script
A fent leírt folyamat nincs előre beégetve a bitcoin kliensekbe. A tranzakció tartalma valójában egy assembly-hez hasonló script, amit a kliensek végrehajtanak. Ennek a scriptnek a kimenetét ellenőrzi a kliens. Jelenleg a kliensek kérdés nélkül eldobnak minden olyan tranzakciót, aminek a scriptje nem "standard".

Hozzászólások

Subscribe, bár úgyis könyvjelzőzöm. :)

Köszönöm, hasznos infók ezek. Egy kérdés. Annak, aki BTC-t (most BTC vagy XBC a jelölése?) akar elfogadni és max. átutalgatni másnak, kb. milyen erőforrásokra van szüksége? Főleg tárhelyre gondolok (bár a memória és processzorhasználat is érdekes), mert egy hazai webáruháznál lehet ezzel fizetni, viszont tudnom kell, hogy kb. miből mennyire lesz szükség ehhez.

„Ha egy tranzakció elkölti egy korábbi tranzakció outputjait, akkor a tranzakció összes outputját el kell költeni.”

Ez azt jelenti, hogy ha egy tranzakcióban jön nekem 5 BTC és ebből vásárolok kettőért, akkor a maradék hárommal is kell kezdenem valamit?

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

A bitcoin kliens kb 500MB RAMot kér, ez a QT kliens, nem tudom ebből mennyi a QT (Virt: 1976m Res: 423m Shr: 65m). CPU használat elenyésző.
$ du -hs ~/.bitcoin/
24G /home/xxx/bitcoin/

Ezt a mennyiséget induláskor le is kell töltenie.

A maradék hárommal is kezdened kell valamit. Ha 2.9995 BTC-t saját magadnak utalsz, akkor 0.0005 BTC fee-t hagysz a minernél. Ha a GUI klienst használod, mindez automatikus.
Még egy fontos részlet ezzel kapcsolatban, hogy ezt a magadnak visszautalt pénzt gyakorlatilag addig nem tudod elkölteni, amíg nem kerül block-ba. Ha egy címen van sok bitcoinod, akkor abból nagyjából 10 percenként tudsz költeni belőle. Ezért nem érdemes egy címen tartani az összes coint amit gyorsan akarsz esetleg elkölteni.

bug:
Ahhoz, hogy a hash algoritmust, vagy a scriptet lecsereljek az _OSSZES_ banyasz meg kell, hogy egyezzen. Minel tobben hasznaljak, annal lehetetlenebb ez.
Vagyis ha a jelenleg hasznalt scripttel kiderul valami problema, akkor osszeomlik a bitcoin arfolyama, es az a alternativa (litecoin, anoncoin, peercoin,...) fog belepni a helyere, amelyiket az adott problema nem érinti.

Valodi penzt/erteket hosszu tavra atvaltani BTC-re kbasz kockazatos.
A banyaszat meg az áram árát sem hozza vissza jelenleg -> hosszu tavra felejtos.

--
Live free, or I f'ing kill you.

Ha a bitcoinban használt hash algoritmusokkal (SHA-256, RIPEMD-160) kapcsolatban kiderül valami turpisság, akkor az kbasz nagy probléma lesz, nem csak a bitcoinnak, hanem gyakorlatilag mindennek.
Volt már példa software bug miatti forkra (ha jól emlékszem idén tavasszal). Az összes bányász nagyon gyorsan, terv szerint váltott verziót. Akkor szinte fel sem tűnt senkinek. Ma valószínűleg nagyobb visszhangja lenne, de minden menne tovább.

Valodi penzt/erteket hosszu tavra atvaltani BTC-re kbasz kockazatos

Ezzel teljesen egyetértek. Senkinek sem tanácsolnám hogy annyi pénzt tegyen bitcoinba, aminek elvesztése érzékenyen érintené. Ugyanakkor van egy nem elhanyagolható esélye a nagy nyereségnek is.

Jelenleg a BTC gyors felértékelődése miatt a bányászok középtávon gondolkodnak szvsz a kibányászott coinokkal kapcsolatban. Az bányászat akkor lesz veszteséges, ha a BTC-jét nem tudja beváltani/elcserélni a megfelelő értékben. Biztos vagyok benne, hogy a hatékonyság nagyságrendekkel fog még nőni. Az így fennmaradó tranzakciós költségeket akkor is ki kell fizetni. Ha ezt coinbase tranzakciók már nem fogják fedezni, akkor megnő a fee jelentősége.

A multkori threadben belinkelt tanulmany 70%-ra tette azt a bitcoin mennyiseget, ami regota ucsorog felhasznalas nelkul, vagyis akik a jo arfolyamra varnak, hogy kiszalljanak.
hHa valaki akar csak 50k BTC-t ont be a tozsdekre az is osszeomlasztja az arfolyamot es milliokat tartanak nehanyan (~max 100 ember) kiszallasra varva.

--
Live free, or I f'ing kill you.

Pár kérdés.

1: A fent leírtakból számomra nem világos, hogy mi garantálja, hogy a hálózat működése nem fog összeomlani, amint beáll a bitcoinok száma egy konstans értékre (ami ugye elvileg az egyik nagy ötlet benne). Ha jól értem maga a bitcoin előállítása annyit tesz, hogy minden egyes block +25 bitcoint visz be a rendszerbe, tehát ezért, illetve a fee-ért érdemes bányászni. Előbb utóbb viszont el fognak fogyni azok a hashek, amiket a hálózat elfogad, innentől kezdve viszont nincs mit bányászni, nincs mibe rakni a tranzakciókat.

2: Többször olvastam már, hogy a bitcoint azért tartják jónak, mert ingyenesek a tranzakciók. De mint látszik, valójában a bányászon múlik, és nem látom, a bányásznak miért érné meg a fee-t 0-ra állítania. Persze az világos, hogy mivel a fee értékét is a piac határozza meg, ezért a piaci egyensúly pontjára fog beállni, de az biztos, hogy az nem a 0 értéknél van.

1. A hashek nem fogynak el. A hálózat teljesítményének függvényében a nehézségi szint növekedhet. Mire a mining reward lecsökkenne 1 BTC alá, addigra a bitcoin vagy megszűnt vagy elterjedt az egész világon. Ha az utóbbi, az akkori mining reward értéke többszöröse lesz a mainak.
1 BTC értéke idén kb. $13 és $1100 között változott. Ha a spekuláció hatásait ki tudnánk ebből szűrni, akkor maradna az az érték, amennyi a fair price lenne. Ez a fair price elsősorban annak függvénye, mennyien használják, hány helyen lehet vele fizetni. November elején a baidu (kb. kínai google?) bejelentette, hogy elfogadja a BTC-t bizonyos szolgátatásokért. A BTC árfolyam $200-ról $1100-ig ment 3 hét alatt. Pár napja megjelent a kínai központi bank közleménye, majd a baidu bejelentette, hogy várhatóan megszünteti a BTC elfogadást. Az árfolyam lezuhant $550 alá zuhant.
Emellett a széleskörű elterjedtség miatt mindenkinek érdeke lesz a hálózat működtetése, a minerek számíthatnak a fee-re, mert mindenki szeretné a tranzakcióit a továbbítani a hálózaton.

2. A tranzakciók nem ingyenesek, minden block előállításának költsége (és így a tranzakcióké) elég pontosan kiszámolható a hálózat teljesítménye és a mining hardware ismeretében.

egy blokk eleje egy specialis tranzakcio, aminek a bemenete az ajandek 25 bc (ez megadott idonkent csokkeni fog) + a blokkab epitett tranzakcio feeje. ha elfogy a kibanyaszhato bc, onnantol mar csak a feeket kapja meg a banyasz. mivel ez a "elfogy" egy nagyon tavoli jovo (>10 evek), eleg sokaig fognak banyaszni. es ha befut a technologia igy egyre tobben hasznaljak (=soksok tranzacio), az abbol megkapott fee is jelentos lesz.

2. a tranzakciokhoz adhatsz fee-t, de ez csak amolyan prioritas: a nagyobb fee-s tranzakciok elobb epulhetnek be a blokkba mint a kisebb fee-sek (a miner donti el hogy priorizal-e vagy sem). de a 0-as fee nem kizaro ok: ha megnezed a linkelt blokkot, ott is jo sok 0-as van. az a 0.0001 fee meg elhanyagolhato osszeg mondjuk egy 100-as utalashoz kepest. namost hasolitsd ossze ezt egy kulfoldi banki utalassal, szinte igye' van :D

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!