Průvodce pro začátečníky k Vyper Smart Contract Language

Vyper je inteligentní paradigma smluvního jazyka odvozené ze syntaxe a konvencí Pythonu 3 a cílení na virtuální stroj Ethereum (EVM).

EVM je simulovaný globální singletonový počítač, který běží paralelně s blokovou řetězcovou knihou na Ethereu, což umožňuje konstrukci složitějších transakcí a podmíněných samočinných dohod zakódovaných inteligentních kontraktních objektů.

Samotná platforma Ethereum je bezvýznamná a hodnotově agnostická a poskytuje pouze páteř toho, jak mají být chytré smlouvy sestavovány dohromady a v kontextu toho, jaké aplikace.

Vyper má být využit s nadcházejícím přechodem na Proof-of-Stake (Casper) a poskytnout pragmatičtější minimalistický režim pro čtení a psaní chytrých smluv se zaměřením na auditovatelnost, syntaktickou jednoduchost a přímočarost.

Vyper vs. solidnost

Logo solidity

V tom se Vyper ostře odchyluje od de facto hlavního proudu Solidity. Vzhledem k tomu, že on-chain výpočty jsou omezené zdroji, měly by být striktně definovány v rámci minimální potřeby jejich zamýšlené funkce a Vyper používá tento redukční přístup k inteligentním smlouvám a rámuje je jako snadno čitelné uživatelské role a příběhy, přičemž téměř všechno ostatní vynechává.

Okamžitým odklonem od Solidity je zbavení se dědičnosti, aby věci zůstaly „na stejné stránce“, než aby se ztratily ve skákání mezi více soubory smluv v hierarchii jejich priority, aby se dali dohromady roztroušené fragmenty toho, co program dělá pod kapotou.

Místo toho je kladen důraz na rafinované, zbavené složení a modularitu (u typů jako vlastník, udržovatel, token, termín a možné výrazy jako „zatímco zbývá plyn“), aniž by současně došlo k uvolnění jakýchkoli bezpečnostních předpokladů, ale spíše k prosazení syntaktických transparentnost toho, aby byly věci okamžitě zřejmé a snadno kontrolovatelné, v souladu s povahou smluv a distribuovaných účetních knih.

Bezpečnostní funkce

Zabezpečení je v kontextu inteligentních smluv v globálním distribuovaném prostředí s konsensem prvořadé a má fungovat jako transparentní notář a zobecněná institucionální agentura pro psaní důvěryhodné obchodní logiky..

V souladu s těmito cíli se Vyper zaměřuje na srozumitelnost výrazu, důslednou jednoznačnou jednoznačnost a silné psaní, a tak se zbavuje přetížení operátora a snaží se být co nejvíce nefragmentovaný a formulovat (zaměřit se na nezbytně nutné) v aby bylo obtížné psát zavádějící kód. Ve skutečnosti úmyslně zakazuje některé věci, aby je ztěžoval s cílem zvýšit zabezpečení inteligentních smluv prostřednictvím prosazování zřejmých, vysvětlujících vzorů kódu.

Rekurzivní volání a smyčky s nekonečnou délkou jsou také vyloučeny, protože otevírají možnost útoků na limit plynu, a Vyper se místo toho snaží optimalizovat metriky plynu odhadem přesných horních mezí spotřeby plynu u libovolného volání funkce. Zahrnuty jsou kontroly hranic a přetečení pro přístupy k maticím a aritmetické operace (není nutná žádná knihovna SafeMath) a ke změně stavu nejsou povoleny žádné modifikátory ani konstanty.

Interní překladače a syntaxe kódu

Vyper se snaží dodržovat syntaktické konvence blízké jádru toho, co popisují, konkrétně EVM. Vyper skripty se kompilují přímo do bytecode EVM, místo aby byly interpretovány, neobvyklý způsob přemýšlení o Pythonu, jak to může být. Pod kapotou se Vyper i Solidity kompilují do bytecode stejným způsobem a sledem kroků, takže jsou do značné míry interoperabilní (a jsou schopni uskutečňovat externí hovory mezi smlouvami toho druhého).

Stručně řečeno, kód je převzat syntaktickým analyzátorem, který jej rozebere na abstraktní syntaxi stromové reprezentace instrukcí a odtud proces kontroly typu iteruje stromem a přiřazuje jejich odpovídající typy zdola nahoru. Po provedení statické analýzy se vygeneruje bytecode.

Obecná struktura smlouvy

Vyper je funkčně kompletní a v současné době čeká na audity a beta testování. Konvence pojmenování ve Vyperu se snaží být co nejblíže jádru toho, co se tento kód pokouší popsat (tj. EVM, který je tak jednoduchý, jak jen minimum z toho, co lze nazvat procesorem), jak je to možné, i když v pythonovském stylu cesty.

Dva typy celých čísel jsou označeny jako unit256 a int128, což znamená nezáporná a podepsaná celá čísla. unit256 není plně podporován jako číselný typ kvůli nárůstu složitosti, protože většina aplikací vyžaduje pouze int128. unit256 byla zahrnuta pro zajištění interoperability se standardem ERC-20.

Inteligentní kontrakt Ethereum se obvykle skládá ze stavových proměnných a funkcí.

Stavové proměnné jsou hodnoty, které jsou trvale uloženy ve smluvním úložišti a mohou být typu number, string, address nebo boolean true / false expression.

Stavové proměnné jsou deklarovány jednoduše:

storedData: int256

Mapování jsou stavové proměnné, které definují sady klíčů a odpovídající hodnoty. Ve Vyperu jsou definovány a je k nim přistupováno takto:

plainMapping: desítkové [int256]

plainMapping [0] = 10.1

Nejprve je deklarována hodnota a poté typ. Při přístupu k mapování je pozice v tabulce uvedena v hranatých závorkách.

Funkce jsou spustitelné jednotky kódu v rámci smlouvy, které definují druh chování, které mohou spustit. Podobně jako v Pythonu jsou funkce ve Vyperu deklarovány s „def“.

Funkce v inteligentních kontraktech jsou buď funkce pro čtení (které jsou rychlé a nestojí náklady na plyn), nebo funkce pro zápis / provedení (které zapisují do blockchainu, a proto stojí plyn za cyklus a aktualizují se v dalším bloku).

Funkce konstruktoru, která má podle konvence Solidity stejný název jako kontrakt, vytvoří instanci dané smlouvy a jejích základních parametrů na blockchainu jako takovém. Tato funkce je spuštěna pouze jednou a ve Vyperu má formu metody Python __init__ (speciální metoda volaná při každém vytvoření objektu této třídy). Například ve smlouvě s jednoduchým tokenem:

@veřejnost

def __init __ (_ name: bytes32, _symbol: bytes32, _decimals: uint256, _initialSupply: uint256):

Zloženie: 100% bavlna.

  self.name = _name

  self.symbol = _symbol

  self.decimals = _decimals

  self.totalSupply = uint256_mul (_initialSupply, uint256_exp (převod (10, ‘uint256’), _decimals))

Metoda self výslovně prosazuje proměnné konkrétní instance své třídy pro sémantickou jasnost.

V závislosti na jejich úrovni viditelnosti mohou být funkce zdobeny buď @ veřejností, nebo (ve výchozím nastavení) @ soukromými. Veřejná viditelnost znamená, že metoda je vystavena v kontraktu ABI (Application Binary Interface), což umožňuje externím aktérům jej nazývat.

Ve výše uvedeném příkladu funkce konstruktoru vytvoří instanci základních proměnných popisujících kontrakt tokenu, tj. Název, ticker, desetinná místa dělitelnosti a celkovou dodávku vyražených tokenů v oběhu.

Mezi další dekoratéry patří @constant pro zdobení metod, které čtou pouze stav, a @payable pro označování metod, které lze vyvolat pomocí platby.

Například:

@veřejnost

@ splatné

def bid (): // Funkce

Externí volání jsou podporována definováním ABI externí smlouvy v horní části smlouvy:

třída Foo ():

   foo (bytes32): projít

Události lze zaznamenávat v indexovaných strukturách, které klientům umožňují je vyhledávat.

Platba: __log __ ({částka: int128, arg2: indexovaná (adresa)})

Zloženie: 100% bavlna.

total_paid: int128

Zloženie: 100% bavlna.

@veřejnost

def pay ():

  self.total_paid + = msg.value

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

Události musí být deklarovány před globálními deklaracemi a definicemi funkcí.

Nastavení prostředí

V Ubuntu je instalace vyperu jako „rychlá“ rychlý způsob, jak začít, pokud máte problémy se spuštěním Pythonu 3.6:

$ sudo apt-get install snapd

$ sudo snap install vyper –edge –jailmode

Kompilace smlouvy do bytecode je stejně přímočará jako: vyper název_souboru.v.py (přípona souboru je obecně označována jako .vy, ale v současné době se zachovává .v.py pro zvýraznění syntaxe Pythonu)

Získání ABI:

viper -f json example.vy

Alternativně je k dispozici integrovaný online překladač na adrese Vyper online který také obsahuje bohatou sadu příkladů, jako je Solidity kompatibilní Token ERC-20, finanční události záznamník a on-chain Tvůrce trhu. Na rozdíl od Remixu pro Solidity však nepřichází s platformou pro provádění testů, ale pouze se kompiluje do bytecode a dává ABI kontraktu.

Pro testování kontraktů potřebujeme roztočit místní blockchainové prostředí, pro které účely Ganache (dříve TestRPC) ze sady Truffle je možnost, ale migrace je třeba provést ručně z konzoly.

Je spuštěna alternativa, kterou lze spustit s klientem Parity v režimu privátního řetězce, pro který je k dispozici předkonfigurovaný Docker image (s blockchainem Proof-of-Authority s jedním uzlem) tady. Jakmile je kontejner spuštěn, ke grafickému uživatelskému rozhraní lze přistupovat z prohlížeče na adrese localhost: 8180. Rozhraní založené na prohlížeči umožňuje místní nasazení a interakci s účty a kontrakty.

Pyethereum (základní knihovna Ethereum pro Python) se však v tuto chvíli většinou používá, protože je lehký a celkově kompatibilní s Pythonem, s zapojit pro nativní testování vyvíjených smluv.

Rozvoj a zapojení

Přes nedostatek velké publicity nebo pozornosti hlavního proudu, nebo dokonce až do nedávné doby hodně dokumentace, na Vyperu se už nějakou dobu tiše pracovalo a teprve v poslední době.

Začalo však přitahovat pozornost vývojářů inteligentních smluv a bezpečnostních auditorů z OpenZeppelin, a kontingent lidí nespokojených s nedostatkem Solidity, kteří hledají intuitivněji jednoduché a méně švýcarské armádní nože jako alternativy.

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