tBTC: Navigálás a keresztláncos talányban
ETH_dev#6218Nemrégiben elvégeztük a Thesis tBTC biztonsági értékelését: egy megbízhatóság által minimalizált, beváltható, Bitcoin által támogatott ERC20 tokent. A projekt, amely a Keep Network-t használja a Bitcoin és az Ethereum átfogására, egy új, több láncot átfogó gazdaságot kíván lehetővé tenni, lehetővé téve a felhasználók számára, hogy a Bitcoin által támogatott ERC20 segítségével tranzakciókat folytassanak az Ethereumon. Jelentésünk nyilvánosan elérhető itt.
Nem gyakran szoktunk olyan projektet áttekinteni, mint a tBTC. Végül is a tBTC több rendszerre is kiterjed: a Bitcoin, az Ethereum és a Keep Network. Az intelligens szerződések, amelyek megkönnyítik ezt az átjárhatóságot, meglehetősen összetettek és mindhárom protokoll megértését igénylik. Bár korábbi, az Liquality és az Atomic Loans munkánk hasonló jellegű, a tBTC hatalmas kódbázisa egy másik szintre emeli.
Áttekintésünk során sokat tanultunk a láncok közötti rendszerek fejlesztéséről. Különösen a Bitcoin tranzakciókkal kapcsolatos kutatásaink tárták fel az Ethereum Bitcoin tranzakció-ellenőrzésének különösen érdekes korlátozását. Ezt a megállapítást itt bővítjük.
Mi az SPV bizonyíték?
A Bitcoin összefüggésében egy SPV bizonyítékot használnak egy tranzakció létezésének bizonyítására egy adott blokkon belül. Egyszerűen fogalmazva: a bizonyítás Merkle-bizonyítást párosít egy Bitcoin blokk hashMerkleRoot-jával annak bemutatására, hogy tranzakció létezik a blokkon belül:
Az ilyen bizonyítékokat gyakran használják, mert számításilag viszonylag könnyűek. Ez a tulajdonság különösen fontos a tBTC-t alkotó intelligens szerződések összefüggésében. Mivel az EVM-en (az Ethereum virtuális gépen) fut, a tBTC-t természetesen korlátozza az Ethereum korlátozott számítási erőforrásai.
Tegyük fel, hogy be akarjuk bizonyítani, hogy valamilyen tranzakció létezik a Bitcoin-on. Ehhez az SPV-bizonyításhoz néhány bemenetre van szükségünk:
1 A tranzakciót tartalmazó blokk fejlécfejléce
2 Maga a nyers tranzakció
3 A tranzakció indexe (pozíciója a blokkban)
4 Merkle proof (azoknak a csomópontoknak a listája, amelyek „utat” képeznek a tranzakciótól a Bitcoin blokk fejlécéig)
Ezeknek a bemeneteknek a használatával be lehet bizonyítani, hogy egy tranzakció létezik a blokkban, mindezt anélkül, hogy csatlakoznunk kellene egy Bitcoin csomóponthoz. Feltéve, hogy elfogadja, hogy a megadott Bitcoin blokkfejléc a leghosszabb munkabiztonsági láncból származik, az egyszerű fizetésellenőrzés (SPV) bárhol, bármilyen eszközön elvégezhető.
A keresztláncos talány
A Bitcoin tranzakciók kutatása közben az Ethereumon elvégzett SPV bizonyítások alapvető korlátozására bukkantunk: Bitcoin tranzakció nagysága.
A Bitcoin tranzakciókat elsősorban a 4 MB maximális Bitcoin blokkméret korlátozza. Továbbá, mivel az SPV-bizonyítékok kizárhatják a tanúi adatokat, csökkenthetjük az elméleti maximális Bitcoin tranzakciós méretet 1 MB-ra. Céljaink szempontjából azonban a pontos felső határt valójában nem a Bitcoin blokk mérete határozza meg, mert kiderül, hogy valójában az Ethereum blokklánc korlátozza.
Miért? A Bitcointól eltérően az Ethereum tranzakcióit korlátozza a végrehajtásuk során felhasznált számítási erőforrások mennyisége. Minden végrehajtott művelethez bizonyos mennyiségű gáz szükséges, és a tranzakciók nem fogyaszthatnak több gázt, mint amennyit egyetlen blokk tartalmaz. Ezt gázkorlátnak nevezik, amely az írás idején körülbelül 10 millió gáz.
Annak megértéséhez, hogy ez nagyjából egyenlő a Bitcoin tranzakció méretével, használhatunk egy definíciót az Ethereum sárga könyvéből, a Gtxdatanonzero-ból, amely a tranzakció során az egyes bájtokhoz szükséges gázköltség. A Gtxdatanonzero bájtonként 16 gáz.
Ez azt jelenti, hogy az SPV-bizonyíték részeként szállított Bitcoin tranzakciók minden byteja legalább 16 gázt fogyaszt. Vegye figyelembe, hogy az SPV-bizonyítás elvégzésével további költségek merülnek fel, de ezt a durva becslés szempontjából ezeket figyelmen kívül hagyom.
Szóval, mekkora lehet egy Bitcoin tranzakció, mielőtt lehetetlenné válik SPV bizonyítás végrehajtása az Ethereumon? A válasz az Ethereum blokkgáz-határértéke elosztva a Gtxdatanonzero-val:
(10 000 000 gáz) / (16 gáz byte-on) = 625 000 bájt, vagyis az 1 MB maximális Bitcoin tranzakciós méret körülbelül 63% -a.
Mit jelent ez a tBTC szempontjából?
A tBTC-ben az SPV-bizonyítékok eredetileg két célt szolgáltak:
1 Betéti igazolások: lehetővé tették a felhasználók számára, hogy bizonyítsák, hogy helyesen tettek BTC betétet, ami a tBTC szerződéseket a megfelelő Bitcoin által támogatott ERC20 felszabadítására indította.
2 Csalási bizonyítékok: lehetővé tették a felhasználók számára, hogy bizonyítsák, hogy a betét letétkezelőjét aláíró csoport engedélye nélkül költötték el a BTC-betétet, kiváltva ezzel az aláírót és megkötve a betét tulajdonosát.
Csalási bizonyítékok
Az SPV csalásbizonyításai lehetővé tették a felhasználók számára, hogy védekezzenek a rosszindulatú aláírók ellen. Ha egy aláíró csoport összefog, a felhasználó kifejezett engedélye nélkül elköltheti a letétbe helyezett BTC-t. Azzal, hogy ezt az illetéktelen tranzakciót a tBTC szerződéseihez juttatta, a felhasználók bizonyítani tudták, hogy a kiadás megtörtént, megbüntethetik a rosszindulatú aláírókat, és biztosíthatják, hogy méltányosan megtérítsék őket az előlegük elvesztéséért.
A fentiekben leírt Bitcoin tranzakciós méretkorlátozás alkalmazásával azonban az aláírók elkerülhetik ezt a büntetést, ha elég nagy tranzakcióban költik el a betétet.
Szerencsére az SPV csalásbizonyításai a tBTC-ben megvalósított két csalásbiztos mechanizmus egyike voltak. Az alternatív módszer, az ECDSA csalásbizonyítások, sokkal megbízhatóbb alternatívát kínáltak az SPV csalásbizonyításaihoz. Ennek eredményeként az SPV csalásokkal kapcsolatos bizonyítékait eltávolították a tBTC szerződéseiből.
Betéti igazolások
A betétbizonylatokat továbbra is használják a tBTC-ben, amikor minden felhasználó belép a rendszerbe. A Bitcoin által támogatott ERC20 Ethereumon történő kiadásához a felhasználóknak SPV igazolást kell benyújtaniuk a sikeres befizetésről. Bár a Bitcoin tranzakcióméret nem ad egyértelmű módszert a betéti rendszerrel való visszaélésre, lehetséges, hogy a felhasználó érvényes BTC tranzakcióval finanszírozhat betétet, csak azért, hogy megállapítsa, hogy a tranzakciója túl nagy, és a tBTC szerződéseken belül nem érvényesíthető. .
Nincs egyértelmű út a függőség megszüntetésére; Az előleg érvényesítéséhez SPV igazolásokat kell benyújtani. Szerencsére a Bitcoin tranzakció méretkorlátozása nem olyan szigorú, hogy megakadályozza a tBTC teljes működését; egy egyszerű ráfordítás egyetlen bemenettel és kimenettel jóval az Ethereum jelenlegi blokkgáz-határának határain belül van. Amíg arra törekszenek, hogy a felhasználók kellően tisztában legyenek ezzel a korlátozással, a Bitcoin tranzakció nagysága nem jelenthet jelentős problémát a betétek finanszírozása során.
Mit tehet a tBTC (és más, láncokon átívelő projektek), hogy biztosítsa a rendszereik megfelelő működését?
Értse meg mindkét lánc primitívjeit. Az Ethereum használatakor értse meg, hol marad az EVM más láncok primitívjeinek replikálásában. A láncokon átívelő alkalmazások két világot hidalnak át, mindegyiknek megvan a maga időrendszere, szabályai és finom giccei.
- A teljesítmény-összehasonlítás bizonyos alapértékeket nyújt, amelyek alapján a rendszer mérhető. Például a Bitcoin tranzakciónagyságról folytatott megbeszélésünket követően a dolgozat néhány alapvető benchmarkingot hajtott végre, hogy pontosabb korlátozásokat hozzon létre SPV-bizonyítékaikhoz.
Az egységvizsgálatok soha nem lesznek elégek. A keresztláncú dappeknek természetüknél fogva a rendszer minden végén vannak mozgó alkatrészek. Az alkatrészek együttműködésének biztosítása érdekében a fejlesztőknek túl kell lépniük az egyszerű egységteszten.
- Az integrációs tesztek segítenek feltárni az elszigetelt alkatrészek közötti kölcsönhatások következetlenségeit, és modellt nyújtanak a rendszer számára a valós élethez közeli körülmények között.
Készülj fel a legrosszabbra. Nagy összetettséggel jár a nagy felelősség. Nem reális minden lehetséges kérdést azonosítani a megjelenés előtt.
- Készenléti terv: Ha van egy terv, amely gyorsan reagál a kérdésekre, tompíthatja a súlyos problémák hatását. A készenléti terv elkészítése az indítás előtt munkát igényelhet, de ez végtelenül jobb, mint felkészületlen.
Végül oktassa ki felhasználóit. A csata része annak megértése, hol romlhatnak el a dolgok; a következő lépés annak biztosítása, hogy felhasználói megegyezzenek egymással. Ennek érdekében Matt Luongo (Thesis) nemrég egy hosszú szálat tett közzé, amely leírja a tBTC biztonsági modelljét és irányítását.
Frissítés 2020. május 16 .: Ez a cikk eredetileg 68 bájt gázárat adott meg, amelyet azóta frissítettek, és nem említette, hogy a tanúk adatait ki lehet zárni az SPV bizonyítékból. Köszönöm James Prestwichnek és Paul Vienhage-nek a javításokat.