Ръководство за начинаещи за езика на Vyper Smart Contract

Vyper е езикова парадигма за интелигентен договор, произтичаща от синтаксиса и конвенциите на Python 3 и насочена към виртуалната машина Ethereum (EVM).

EVM е симулиран глобален сингълтън компютър, който работи успоредно на блокова верига на Ethereum, позволявайки изграждането на по-сложни транзакции и условни самоизпълняващи се споразумения, кодирани интелигентни обекти на договори.

Самата платформа Ethereum е безлична и агностична по отношение на стойността, предоставяйки само гръбнака на това как да се съставят интелигентните договори и в контекста на какви приложения.

Вайпер е предназначен да бъде използван с предстоящия преход към Proof-of-Stake (Casper) и да осигури по-прагматичен минималистичен режим за четене и писане на интелигентни договори, с акцент върху одит, синтактична простота и праволинейност.

Vyper срещу Solidity

Лого на Solidity

В това, Vyper рязко се отклонява от де факто основната Solidity. Тъй като изчисленията по веригата са ограничени от ресурси, те трябва да бъдат толкова строго дефинирани в рамките на минималната необходимост от предвидената им функция, а Vyper възприема този редуктивен подход към интелигентните договори, като ги оформя като лесно четими потребителски роли и истории, като същевременно оставя почти всичко останало.

Непосредствено забележимо отклонение от Solidity е премахването на наследството, така че да се запазят нещата „на една и съща страница“, вместо да се изгубите в прескачане между множество файлове с договори в йерархията на техния приоритет, за да наредите разпръснатите фрагменти от това, което програма прави под капака.

Вместо това се набляга на усъвършенствана, съкратена композиция и модулност (с типове като собственик, поддържащ, маркер, краен срок и възможни изрази като „докато остане газ“), без в същото време да се отпускат каквито и да било предположения за сигурността, а по-скоро да се налага синтактично прозрачност на нещата, които веднага стават очевидни и лесно ревизируеми, в съответствие с естеството на договорите и разпределените книги.

Функции за сигурност

Сигурността е от първостепенно значение в контекста на интелигентните договори в интегрирана с консенсус глобално разпределена среда, предназначена да функционира като прозрачен нотариус и обобщена институционална агенция за писане на недоверителна бизнес логика.

В съответствие с тези цели, Vyper се фокусира върху яснотата на израза, строгата ясна недвусмисленост и силното писане и като такава премахва претоварването на оператора, опитвайки се да бъде възможно най-фрагментиран и формулиран (фокусирайте се върху строго необходимото) в за да се затрудни писането на подвеждащ код. Всъщност умишлено забранява някои неща, за да ги направи по-трудни с цел увеличаване на сигурността на интелигентните договори чрез налагане на очевидни, самообяснителни кодови модели.

Рекурсивните повиквания и цикли с безкрайна дължина също са изключени като отварящи възможността за атаки с ограничение на газа и вместо това Vyper се стреми да оптимизира показателите за газ, като изчислява точни горни граници за консумацията на газ от всяко повикване на функция. Включени са проверки за граници и препълване за достъп до масив и аритметични операции (не е необходима библиотека SafeMath) и не е позволено модификатори или константи да променят състоянието.

Вътрешни елементи на компилатора и синтаксис на кода

Vyper се опитва да се придържа към синтактичните конвенции, близки до ядрото на това, което описват, а именно EVM. Vyper скриптовете се компилират директно в байт кода на EVM, вместо да се интерпретират, необичаен начин на мислене за Python, какъвто може да бъде. Под капака, както Vyper, така и Solidity се компилират в байт код по един и същ начин и последователност от стъпки, така че до голяма степен са взаимодействащи (и могат да осъществяват външни разговори между договорите на другия).


Накратко, кодът се възприема от парсер, който го разглобява в абстрактно синтаксисно дърво, представящо инструкциите, а оттам процесът на проверка на типа се итерира през дървото, като задава съответните им типове отдолу нагоре. След извършване на проверки на статичен анализ се генерира байт код.

Обща структура на договора

Vyper е функционално пълен и в момента очаква одити и бета тестване. Конвенциите за именуване във Vyper се опитват да бъдат възможно най-близо до ядрото на това, което се опитва да опише този код (т.е. EVM, който е толкова прост, колкото минималния минимум от това, което може да се нарече процесор), макар и в питонески вид от пътя.

Двата типа цели числа са обозначени като unit256 и int128, които съответно означават неотрицателни и подписани цели числа. unit256 не се поддържа изцяло като цифров тип поради увеличаване на сложността, тъй като повечето приложения изискват само int128. unit256 е включен за осигуряване на оперативна съвместимост със стандарта ERC-20.

Интелигентният договор на Ethereum обикновено се състои от държавни променливи и функции.

Променливите на състоянието са стойности, които се съхраняват за постоянно в хранилището на договора и могат да бъдат от числови, низ, адрес или булеви типове истински / неверни изрази.

Променливите на състоянието се декларират просто:

съхранениДата: int256

Съпоставянията са променливи на състоянието, които дефинират набори от ключове и съответни стойности. Във Vyper те са дефинирани и достъпни по този начин:

plainMapping: десетично [int256]

plainMapping [0] = 10.1

Първо се декларира стойността и след това типът. При достъп до картографиране, позицията в таблицата е посочена в квадратни скоби.

Функциите са изпълнимите единици код в рамките на договор, които определят вида на поведението, което могат да предизвикат. Подобно на Python, функциите в Vyper са декларирани с „def“.

Функциите в интелигентните договори са или функции за четене (които са бързи и не струват газ) или функции за запис / изпълнение (които вписват в блокчейна и следователно струват газ за цикъл и се актуализират в следващия блок).

Функция конструктор, която по конвенция Solidity има същото име като договора, създава инстанция на дадения договор и основните му параметри в блокчейна като такава. Тази функция се изпълнява само веднъж и във Vyper тя приема формата на метода Python __init__ (специален метод, извикан всеки път, когато се създава обект от този клас). Например в прост символен договор:

@public

def __init __ (_ име: bytes32, _symbol: bytes32, _decimals: uint256, _initialSupply: uint256):

U

  self.name = _name

  self.symbol = _symbol

  self.decimals = _decimals

  self.totalSupply = uint256_mul (_initialSupply, uint256_exp (конвертиране (10, ‘uint256’), _decimals))

Методът self изрично утвърждава конкретните променливи на своя клас за семантична яснота.

В зависимост от нивото на видимост, функциите могат да бъдат украсени с @public или (по подразбиране) @private. Публична видимост означава, че методът е изложен в ABI (Application Binary Interface) на договора, което позволява на външни участници да го извикат.

В горния пример конструкторска функция създава екземпляри на основните променливи, описващи токен договор, т.е.име, тикер, десетични точки на делимост и обща доставка на сечени жетони в обращение.

Други декоратори включват @constant за методи за декориране, които четат само състояние и @payable за определяне на методи, които могат да бъдат извикани с плащане.

Например:

@public

@payable

def bid (): // Функция

Външните обаждания се поддържат чрез дефиниране на ABI на външния договор в горната част на договора:

клас Foo ():

   foo (bytes32): пас

Събитията могат да се регистрират в индексирани структури, позволяващи на клиентите да ги търсят.

Плащане: __log __ ({сума: int128, arg2: индексирано (адрес)})

U

общо_платено: int128

U

@public

def pay ():

  self.total_paid + = msg.value

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

Събитията трябва да бъдат декларирани преди глобални декларации и дефиниции на функции.

Настройване на околната среда

В Ubuntu инсталирането на vyper като „щракване“ е бърз начин да започнете, ако имате проблеми с изпълнението на Python 3.6:

$ sudo apt-get install snapd

$ sudo snap install vyper –edge –jailmode

Компилирането на договор в байт код е толкова лесно, колкото: vyper filename.v.py (разширението на файла обикновено се означава като .vy, но в момента се запазва .v.py за подчертаване на синтаксиса на Python)

За да получите ABI:

viper -f json example.vy

Като алтернатива е предоставен интегриран онлайн компилатор на адрес vyper онлайн който също предлага богат набор от примери като съвместим с Solidity ERC-20 маркер, финансови събития регистратор и на верига маркет мейкър. За разлика от Remix за Solidity обаче, той не се предлага с платформа за тестово изпълнение, а само се компилира в байт код и дава ABI на договора.

За тестване на договори трябва да завъртим локална блокчейн среда, за целите на която Ганаш (по-рано TestRPC) от пакета Truffle е опция, но миграциите трябва да се извършват ръчно от конзолата.

Изпълнява се алтернатива и може да се стартира с клиента на Parity в режим на частна верига, за който е предоставен предварително конфигуриран образ на Docker (с блокчейн Proof-of-Authority с единичен възел) тук. След като контейнерът се изпълни, графичният потребителски интерфейс може да бъде достъпен от браузъра на localhost: 8180. Базираният на браузър интерфейс позволява локално внедряване и взаимодействие с акаунти и договори.

Въпреки това, pyethereum (основната библиотека на Ethereum за Python) се използва най-вече в момента, тъй като е лек и като цяло съвместим с Python, с плъгин за вътрешно тестване на договори в разработка.

Развитие и участия

Въпреки липсата на много публичност или основно внимание, или дори много документация до съвсем скоро, по Vyper тихо се работи от доста време и е съвсем напоследък.

Той обаче започна да привлича вниманието на разработчиците на интелигентни договори и одиторите за сигурност от OpenZeppelin, и контингент от хора, недоволни от кратките идвания на Solidity, търсещи по-интуитивно прост и по-малко швейцарски армейски нож като алтернативи.

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