Kezdő útmutató a Vyper intelligens szerződéses nyelvéhez

A Vyper egy intelligens szerződéses nyelvi paradigma, amely a Python 3 szintaxisából és konvencióiból származik, és az Ethereum virtuális gépet (EVM) célozza meg.

Az EVM egy szimulált globális szingulett számítógép, amely párhuzamosan fut az Ethereum blokkláncolt főkönyvével, amely lehetővé teszi bonyolultabb tranzakciók és feltételes önmegvalósító megállapodások kódolását intelligens szerződéses objektumok létrehozására.

Maga az Ethereum platform jellegtelen és agnosztikus, csupán az okos szerződések összeállításának gerincét és milyen alkalmazások összefüggésében nyújtja.

Vyper célja, hogy kihasználja a tétbiztosításra (Casper) való közelgő átállást, és pragmatikusabb minimalista rendszert biztosít az intelligens szerződések olvasásához és megírásához, különös tekintettel az auditálhatóságra, a szintaktikai egyszerűségre és az egyszerűségre.

Vyper kontra szilárdság

Szilárdság logó

Ebben Vyper élesen eltér a szilárdság tényleges mainstreamjétől. Mivel a láncon végzett számítások erőforrás-korlátozottak, azokat szigorúan meg kell határozni a tervezett funkció minimális szükségességén belül, és Vyper ezt a reduktív megközelítést alkalmazza az intelligens szerződéseknél, könnyen olvasható felhasználói szerepekként és történetekként fogalmazza meg őket, miközben szinte minden mást elhagy..

A szilárdságtól azonnal észrevehető eltérés az öröklés megszüntetése annak érdekében, hogy a dolgok “ugyanazon az oldalon maradjanak”, ahelyett, hogy eltévednének a több szerződési fájl közötti ugrásban az elsőbbségük hierarchiájában, hogy összeszedjék a szétszórt töredékeket. program csinál a motorháztető alatt.

Ehelyett a finomított, lecsupaszított összetételre és a modularitásra helyezik a hangsúlyt (olyan típusokkal, mint a tulajdonos, a fenntartó, a token, a határidő és a lehetséges kifejezések, mint például: „amíg gáz van”) anélkül, hogy egyidejűleg enyhítenék a biztonsági feltételezéseket, hanem a szintaktikai szempontokat érvényesítik. a dolgok azonnali nyilvánvalóvá és könnyen ellenőrizhetővé tételének átláthatósága, összhangban a szerződések és az elosztott főkönyvek jellegével.

Biztonsági jellemzők

A biztonság kiemelt fontosságú az intelligens szerződések összefüggésében, konszenzusban integrált, globálisan elosztott környezetben, amely átlátható közjegyzőként és általános intézményi ügynökségként működik a bizalmatlan üzleti logika megírásához..

Ezeknek a céloknak megfelelően a Vyper a kifejezés egyértelműségére, a szigorú, egyértelmű egyértelműségre és az erőteljes gépelésre összpontosít, és mint ilyen megszünteti a kezelő túlterhelését, igyekszik a lehető legkevésbé töredezett és tagolt lenni (a feltétlenül szükségesre összpontosítani). annak érdekében, hogy megnehezítsék a megtévesztő kód írását. Valójában szándékosan tilt néhány dolgot annak érdekében, hogy a nyilvánvaló, magától értetődő kódminták érvényesítésével megnehezítse azokat az intelligens szerződések biztonságának növelése céljából..


A rekurzív hívások és a végtelen hosszúságú hurkok szintén kizártak, mivel megnyitják a lehetőséget a gázkorlát-támadásokra, és ehelyett Vyper célja a gázmutatók optimalizálása azáltal, hogy megbecsüli a függvényhívások gázfogyasztásának pontos felső határait. A tömb-hozzáférések és a számtani műveletek határait és túlcsordulását ellenőrzik (nincs szükség SafeMath könyvtárra), és módosító vagy állandó nem változtathatja meg az állapotot.

Fordító belső és kódszintaxisa

Vyper megpróbál ragaszkodni azokhoz a szintaktikai konvenciókhoz, amelyek közel állnak az általuk leírt maghoz, nevezetesen az EVM-hez. A Vyper-szkriptek közvetlenül az EVM bájtkódjába állnak össze, ahelyett, hogy értelmezhető, szokatlan gondolkodásmódot kapnának a Pythonról. A motorháztető alatt mind a Vyper, mind a Solidity bájtkódolással áll össze, azonos módon és lépésekben, tehát nagyrészt együttműködnek (és képesek külső hívásokat kezdeményezni egymás szerződései között)..

Röviden: a kódot egy elemző veszi fel, amely szétbontja az utasítások absztrakt szintaxis fa ábrázolásaként, és onnan egy típusellenőrzési folyamat végigvezet a fán, és alulról felfelé rendeli hozzá a megfelelő típusokat. A statikus elemzés elvégzése után a bájtkód keletkezik.

A szerződés általános felépítése

A Vyper funkciók szerint teljes és jelenleg auditokra és béta tesztekre vár. A Vyperben történő elnevezési konvenciók megpróbálnak a lehető legközelebb állni ahhoz a maghoz, amelyet a kód megpróbál leírni (azaz az EVM-et, amely a lehető legegyszerűbb, mint a processzornak nevezhető minimum), bár pythonesque-ban a módját.

A két típusú egészet egységként 256 és int128 jelöljük, amelyek nem negatív és aláírt egész számokat jelentenek. Az unit256 nem teljesen támogatott numerikus típusként a bonyolultság növekedése miatt, mivel a legtöbb alkalmazás csak int128-at igényel. Az egységet 256 beépítették az ERC-20 szabványral való átjárhatóság biztosítása érdekében.

Az Ethereum intelligens szerződése általában állapotváltozókból és függvényekből áll.

Az állapotváltozók olyan értékek, amelyeket állandóan a szerződéses tárolókban tárolnak, és lehetnek szám, karakterlánc, cím vagy logikai igaz / hamis kifejezés típusok.

Az állapotváltozókat egyszerűen deklaráljuk:

tárolt adatok: int256

A leképezések olyan állapotváltozók, amelyek meghatározzák a kulcskészleteket és a megfelelő értékeket. A Vyper-ben így vannak meghatározva és elérhetõk:

plainMapping: tizedes [int256]

plainMapping [0] = 10,1

Először az értéket deklaráljuk, majd a típust. A leképezés elérésekor a táblázat helyét szögletes zárójelben adjuk meg.

A függvények a szerződés futtatható kódegységei, amelyek meghatározzák, hogy milyen viselkedést válthatnak ki. A Pythonhoz hasonlóan a Vyperben szereplő funkciókat is def-vel deklarálják.

Az intelligens szerződésekben szereplő funkciók vagy olvasási függvények (amelyek gyorsak és nem kerülnek gázba), vagy írási / végrehajtási funkciók (amelyek beírják a blokkláncot, és ezért ciklusonként gázba kerülnek, és a következő blokkban aktualizálódnak)..

Egy konstruktor függvény, amely a Solidity megegyezés szerint megegyezik a szerződés nevével, példányosítja az adott szerződést és annak alapvető paramétereit a blokkláncon. Ezt a függvényt csak egyszer hajtják végre, és a Vyperben a Python __init__ metódus formáját ölti (egy speciális metódust hívnak, valahányszor az adott osztály objektumát létrehozzák). Például egy egyszerű token szerződésben:

@nyilvános

def __init __ (_ név: bytes32, _szimbólum: bytes32, _decimals: uint256, _initialSupply: uint256):

A

  önnév = _név

  én.szimbólum = _szimbólum

  én.tizedesek = _tizedesek

  self.totalSupply = uint256_mul (_initialSupply, uint256_exp (convert (10, ‘uint256’), _decimals))

Az én módszer a szemantikai egyértelműség érdekében kifejezetten állítja osztályának adott példányváltozóit.

A láthatóság szintjétől függően a funkciókat @public vagy (alapértelmezés szerint) @private díszítheti. A nyilvános láthatóság azt jelenti, hogy a módszer ki van téve a szerződés ABI-jében (Application Binary Interface), amely lehetővé teszi a külső szereplők számára, hogy felhívják.

A fenti példában egy konstruktor függvény példányosítja az alapváltozókat, amelyek leírják a token szerződést, azaz a nevet, a ticker-t, az oszthatóság tizedespontjait és a forgalomban lévő vert tokenek teljes készletét..

Egyéb dekorátorok közé tartozik a @constant, a csak állapotot leolvasó módszerek díszítéséhez, és @ fizethető a fizetéssel lehívható módszerek kijelöléséhez.

Például:

@nyilvános

@kifizetendő

def bid (): // Funkció

A külső hívásokat úgy támogatjuk, hogy a szerződés tetején meghatározzuk a külső szerződés ABI-jét:

Foo osztály ():

   foo (bytees32): passz

Az eseményeket indexelt struktúrákba lehet naplózni, így az ügyfelek megkereshetik őket.

Fizetés: __log __ ({összeg: int128, arg2: indexelt (cím)})

A

total_paid: int128

A

@nyilvános

def pay ():

  self.total_paid + = msg.value

  log.Payment (msg.value, msg.sender)

Az eseményeket a globális deklarációk és a függvénydefiníciók előtt kell deklarálni.

A környezet beállítása

Az Ubuntuban a vyper telepítése „snapként” gyors módja annak, hogy elinduljon, ha problémái adódnak a Python 3.6 futtatásával:

$ sudo apt-get install snapd

$ sudo snap install vyper –edge –jailmode

A szerződés bájtkódra fordítása ugyanolyan egyszerű, mint: vyper fájlnév.v.py (a fájlkiterjesztés általában .vy néven értendő, de jelenleg a .v.py megtartása a Python szintaxis kiemeléséhez)

Az ABI megszerzése:

vipera -f json példa.vy

Alternatív megoldásként egy integrált online fordító található a címen vyper online amely gazdag példakészletet is tartalmaz, például a Solidity-kompatibilitást ERC-20 token, pénzügyi események naplózó és egy láncon piacvezető. A Remix for Solidity-vel ellentétben azonban nem rendelkezik tesztfuttató platformmal, hanem csak byte-kódra fordít és megadja a szerződés ABI-jét.

A szerződések teszteléséhez meg kell forgatnunk egy helyi blokklánc-környezetet, ennek érdekében Ganache (korábban TestRPC) a Szarvasgomba csomagból választható, de az áttéréseket kézzel kell végrehajtani a konzolról.

Alternatív megoldás fut, és a Parity klienssel privát lánc módban futtatható, amelyhez egy előre konfigurált Docker kép (egy csomópontú, hatósági igazolású blokklánccal) biztosított. itt. Miután a tároló fut, a grafikus felhasználói felület a böngészőből érhető el a localhost címen: 8180. A böngészőalapú felület lehetővé teszi a fiókok és a szerződések helyi telepítését és interakcióját.

A pyethereumot (Ethereum core library for Python) azonban jelenleg leginkább használják, mivel könnyű és összességében Python-kompatibilis, egy csatlakoztat a fejlesztési szerződések natív teszteléséért.

Fejlesztés és bevonások

Annak ellenére, hogy a legutóbbi időkig nem volt sok nyilvánosság, a mainstream figyelem, sőt sok dokumentáció hiányzik, a Vyperrel már jó ideje csendesen dolgoznak, és csak mostanában.

Azonban kezdte felhívni az intelligens szerződések fejlesztői és a biztonsági auditorok figyelmét OpenZeppelin, és egy olyan csapat, aki nem elégedett a szilárdság rövid távával, intuitívabban egyszerűbb és kevésbé svájci kést keres, mint alternatívák.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map