Ugrás a fő tartalomra
Change page

Blokkok

Utolsó módosítás: @Satglow(opens in a new tab), 2024. május 26.

A blokkok tranzakciókból álló csoportosítások a láncban lévő előző blokk hash-ével ellátva. Ez összeköti a blokkokat (egy lánccá), mivel a hasheket kriptográfiailag származtatjuk a blokk adatból. Ez megelőzi a csalásokat, mivel bármely blokkon történő változtatás érvénytelenítené az összes következő blokkot, mivel az összes többi hash megváltozna és bárki aki a blokkláncot futtatja észrevenné.

Előfeltételek

A blokkok könnyen feldolgozhatók még a legkezdőbb felhasználóknak is. De ennek az oldalnak a jobb megértése érdekében javasoljuk, hogy először olvassa el a Számlák, a Tranzakciók és a Bevezetés az Ethereumba című cikkeinket.

Miért kellenek a blokkok?

Annak biztosítása érdekében, hogy az Ethereum-hálózat minden résztvevője egy szinkronizált állapotot tart fenn és megegyezik a pontos tranzakciós történetben, a tranzakciókat blokkokba rendezzük. Ez azt jelenti, hogy több tucatnyi (vagy több száz) tranzakció felett van elköteleződés, egyetértés és szinkronizáció egyszerre.

Diagram, amely egy státuszt módosító blokkban lévő tranzakciót mutat Diagram átvéve az Ethereum EVM illusztrálva(opens in a new tab) anyagból

Az elkötelezettségek elosztásával elegendő időt adunk az összes hálózati résztvevőnek arra, hogy konszenzusra tudjanak jutni: annak ellenére, hogy a tranzakciós kérelmek másodpercenként több tucatszor fordulnak elő, az Ethereum blokkjai tizenkét másodpercenként köteleződnek el.

Hogy működnek a blokkok

Hogy megőrizzük a tranzakciós történetet, a blokkoknak szigorú sorrendet kell betartaniuk (minden létrejövő új blokk tartalmaz egy referenciát a szülő blokkjára), és a blokkokban lévő tranzakciók is szigorú sorrendet követnek. Ritka esetek kivételével bármikor amikor a hálózat összes résztvevője egyetért a blokkok pontos számában és előzményeiben, és azon dolgozik, hogy az aktuális élő tranzakciós kérelmeket a következő blokkba csomagolja.

Amint egy blokkot egy véletlenszerűen választott validátor összeállít által a hálózaton, az továbbterjed a hálózat többi részére; az összes csomópont hozzáfűzi ezt a blokkot a blokkláncukra, majd egy új validátort választanak a következő blokk összeállításához. A pontos blokk-összeállítási folyamatot és az elköteleződés/konszenzus folyamatot jelenleg az Ethereum „proof-of-stake” protokollja specifikálja.

Proof-of-stake protokoll

A proof-of-stake a következőket jelenti:

  • A validációt végző csomópontoknak letétbe kell helyezniük 32 ETH-t egy letéti szerződésbe fedezetként, hogy elkerülhető legyen a rosszhiszemű viselkedés. Ez segít megvédeni a hálózatot, mert a rosszhiszemű viselkedés következtében a letét egy része vagy egésze megsemmisül.
  • Minden slotban (tizenkét másodpercben) a validátort véletlenszerűen választják ki, hogy javasoljon egy blokkot. Tranzakciókat gyűjt össze, végrehajtja azokat és meghatározza a blokklánc új státuszát. Ezt az információt egy blokkba csomagolja és elküldi a többi validátornak.
  • A többi validátor megtudja, hogy van egy új blokk, újra végrehajtja a tranzakciókat, hogy azok megegyeznek-e a javasolt új státusszal. Feltéve a blokk érvényes, hozzáteszik a saját adatbázisukhoz.
  • Ha egy validátor két ütköző blokkot talál ugyanarra a slotra, akkor az elágazást választó algoritmussal azt választják, amelyet a legtöbb letétbe helyezett ETH támogat.

A proof-of-stake-ről bővebben

Mi van egy blokkban?

A blokkban rengeteg információ van. A legmagasabb szinten a következő mezőket tartalmazza:

MezőLeírás
slotaz a slot, amelyhez a blokk tartozik
proposer_indexa validátor azonosítója, aki a blokkot javasolta
parent_rootaz előző blokk hash-e
state_roota státusz objektum gyökér hash-e
bodyegy olyan objektum, amely számos mezőt tartalmaz, ahogy azt alább definiáljuk

A blokk body számos mezőt tartalmaz:

MezőLeírás
randao_revealegy érték, amely a következő blokkjavaslót választja ki
eth1_datainformáció a letéti szerződésről
graffititetszőleges adat a blokkok taggelésére
proposer_slashingsa validátorok listája, akiket slashelni kell
attester_slashingsa tanusítók listája, akiket slashelni kell
attestationsa tanúsítók listája, akik ezt a blokkot támogatják
depositsaz új letétek listája a letéti szerződésbe
voluntary_exitsa validátorok listája, akik kilépnek a hálózatból
sync_aggregatea validátorok egy csoportja, akik a könnyű klienseket szolgálják ki
execution_payloada végrehajtási klienstől jövő tranzakciók

A attestations (tanúsítások) mező tartalmazza a blokkban lévő az összes tanúsítást. A tanúsítások saját adattípussal rendelkezik, amelyben számos adat megtalálható. A tanúsítások a következőket tartalmazzák:

MezőLeírás
aggregation_bitsa validátorok listája, akik részt vettek a tanúsításban
datakonténer számos almezővel
signatureaz összes tanúsítást végző validátor aláírásának aggregátuma

A data mező a tanúsítás részen belül tartalmazza:

MezőLeírás
slota slot, amelyhez a tanúsítás kapcsolódik
indexa tanúsítást végző validátorok indexei
beacon_block_roota Beacon blokk gyökér hash-e, amely ezt az objektumot tartalmazza
forrásaz utolsó igazolt ellenőrzési pont
targeta legutolsó korszak határoló blokkja

A tranzakciók végrehajtása az execution_payload paraméterben frissíti a globális állapotot. Minden kliens újra végrehajtja a tranzakciókat, amelyek a execution_payload paraméterben vannak, hogy biztosítsa, az új állapot egyezik az új blokk state_root mezőjében lévőjével. Így tudják a kliensek megmondani, hogy az új blokkot érvényes és biztonságos-e hozzáadni a saját blokkláncukhoz. Az execution payload maga egy objektum, amely számos mezővel rendelkezik. Van egy execution_payload_header is, ami fontos összegzőinformációkat tartalmaz a végrehajtási adatokról. Ezek az adatstruktúrák a következőképpen vannak rendezve:

Az execution_payload_header a következő mezőket tartalmazza:

MezőLeírás
parent_hasha jelenlegi blokk elődjének a hash-e
fee_recipienta számla címe, amelyre a tranzakciós díjakat fizették
state_roota globális állapot gyökér hash-e, miután a változások bementek a blokkba
receipts_roota tranzakció fogadói fájának hash-e
logs_bloomeseménynaplókat tartalmazó adatstruktúra
prev_randaoegy érték, amit a véletlenszerű validátor kiválasztásnál használnak
block_numbera jelenlegi blokk száma
gas_limita jelenlegi blokkban megengedett maximális gáz
gas_useda jelenlegi blokkban elhasznált gáz aktuális összege
timestampa blokk ideje
extra_datatetszőleges hozzáadott adat, mint nyers bájt
base_fee_per_gasaz alapdíj értéke
block_hasha végrehajtó blokk hash-e
transactions_roota végrehajtási csomagban lévő tranzakciók gyökér hash-e
withdrawal_roota végrehajtási csomagban lévő visszavonások gyökér hash-e

Az execution_payload maga a következőket tartalmazza (ami azonos a fejléccel, kivéve, hogy a gyökér hash-ek helyett a tranzakciók és visszavonások aktuális listáját tartalmazza):

MezőLeírás
parent_hasha jelenlegi blokk elődjének a hash-e
fee_recipienta számla címe, amelyre a tranzakciós díjakat fizették
state_roota globális állapot gyökér hash-e, miután a változások bementek a blokkba
receipts_roota tranzakció fogadói fájának hash-e
logs_bloomeseménynaplókat tartalmazó adatstruktúra
prev_randaoegy érték, amit a véletlenszerű validátor kiválasztásnál használnak
block_numbera jelenlegi blokk száma
gas_limita jelenlegi blokkban megengedett maximális gáz
gas_useda jelenlegi blokkban elhasznált gáz aktuális összege
timestampa blokk ideje
extra_datatetszőleges hozzáadott adat, mint nyers bájt
base_fee_per_gasaz alapdíj értéke
block_hasha végrehajtó blokk hash-e
tranzakcióka tranzakciók listája, amit végre kell hajtani
withdrawalsa visszavonásra kerülő objektumok listája

A withdrawals (visszavonások) listája tartalmazza a withdrawal (visszavonási) objektumokat, amelyek a következőképpen vannak strukturálva:

MezőLeírás
addressa visszavonásra került számla címe
amounta visszavonás összege
indexa visszavonás index értéke
validatorIndexa validátor index értéke

Blokk idő

A blokk ideje arra utal, hogy mennyi idő választja el a blokkokat. Az Ethereumban az időt tizenkét másodperces egységekre bontják, amelyet slotnak neveznek. Minden slotban egy validátort választanak, hogy javasoljon blokkot. Feltéve, hogy minden validátor online van és teljesen működőképes, minden slotban lesz egy blokk, tehát a blokk idő 12 másodperc. Azonban a validátorok lehetnek néha offline is, amikor felkérik őket blokkjavaslatra, tehát a slot néha üresen megy.

Ez különbözik a proof-of-work alapú rendszerektől, ahol a blokk ideje valószínű érték és a protokoll céljának kibányászási nehézsége állítja be. Az Ethereum átlagos blokkideje(opens in a new tab) egy tökéletes példa erre, ahol az átállás a proof-of-work mechanizmusról a proof-of-stake-re egyértelműen kikövetkeztethető az új 12 másodperces blokkidő konzisztens voltából.

Blokkméret

Utolsó fontos megjegyzés, hogy a blokkok maguk is korlátozott méretűek. Minden blokk 15 millió gáz célmérettel rendelkezik, de a blokk mérete a hálózati kereslet függvényében, egészen a 30 millió gáz határig (ami a célméret kétszerese) változik. A blokkban lévő tranzakciók által elköltött teljes gáz mennyisége kevesebb kell legyen, mint a blokk gázkorlátozása. Ez fontos, mert ez azt jelenti, hogy a blokkok nem lehetnek tetszőlegesen nagyok. Ha a blokkok tetszőlegesen nagyok lehetnének, akkor a kevésbé teljesítőképes teljes csomópontok egyre kevésbé tudnának lépést tartani a hálózattal a tárhely- és sebességigények miatt. Minél nagyobb a blokk, annál nagyobb számítási erő kell ahhoz, hogy időben fel legyen dolgozva a következő slotra. Ez egy centralizáló erő, amelynek úgy áll ellen, hogy határt szab a méretnek.

További olvasnivaló

Van olyan közösségi erőforrása, amely segített Önnek? Szerkessze ezt az oldalt, és adja hozzá!

Hasznosnak találta a cikket?