Vyperin ymmärtäminen: Uuden Ethereumin kieli

Kattava opas Vyperistä, tyylikkäästä uudesta Ethereum-kielestä

Vyper on yleiskäyttöinen, kokeellinen ohjelmointikieli, joka kääntyy EVM (Ethereum Virtual Machine) tavukoodiksi, samoin kuin Solidity. Vyper on kuitenkin suunniteltu yksinkertaistamaan prosessia massiivisesti luomaan helpommin ymmärrettäviä älykkäitä sopimuksia, jotka ovat avoimempia kaikille osapuolille ja joilla on vähemmän pääsypisteitä hyökkäykseen.

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Kaikkien EVM: ään kohdistuvien koodien on oltava erittäin tehokkaita, jotta minimoidaan älykkäiden sopimusten toteuttamiseen tarvittava kaasu, koska tehottoman koodin omaava sopimus kirjaimellisesti maksaa enemmän eetteriä, ja se voi nopeasti tulla kohtuuttoman kalliiksi, etenkin käyttötapauksissa, kuten mikroyritykset. liiketoimia. Lopputuloksena on, että Vyper näyttää loogisesti samankaltaiselta kuin Solidity ja syntaktisesti samanlainen kuin Python, mutta ilman monia olio-ohjelmointiparadigmeja – vaatii ehkä uuden paradigman määritelmän transaktio-ohjelmoinnille.

Näiden loogisten ja syntaktisten erojen oppiminen auttaa sinua tulemaan maailmanluokan Vyper-kehittäjäksi, koska Vyper on edelleen versiossa 0.1.0-beta.1 kesäkuusta 2018 lähtien!

Ymmärtäminen Vyper

0. Pythonin, Vyperin ja Solidityn vertailu

Tässä käsitellään Vyperin korkean tason “miksi” – tarjotaan meille jousipiste analysoida ja kirjoittaa Vyper-koodi, mukaan lukien älykkäät sopimukset.

Keskeinen parannus 1: Yksinkertaisuus

Vyper ei sisällä monia rakenteita, jotka ovat tuttuja useimmille ohjelmoijille: luokan periytyminen, toimintojen ylikuormitus, käyttäjän ylikuormitus ja rekursio. Mikään näistä ei ole teknisesti välttämätöntä Turingin täydelliselle kielelle, ja ne aiheuttavat turvallisuusriskejä monimutkaisentamalla. Tämän monimutkaisuuden vuoksi nämä rakenteet tekisivät älykkäitä sopimuksia liian vaikeaksi ymmärtää ja tarkastaa maallikoille, mikä näkyy vakavaraisuussopimuksissa.

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Harvinaisempia rakenteita, joita ei myöskään sisällytetä, ovat muokkaajat (nämä tekevät harhaanjohtavan koodin kirjoittamisen liian helpoksi), inline-kokoonpano (tämä rikkoo Ctrl + F) ja binaarinen kiinteä piste (binäärisen kiinteän pisteen kanssa tarvitaan usein likiarvoja).

Keskeinen parannus 2: Turvallisuus

Itse Vyper-kehittäjien sanoin Vyper

“Kieltää asioita tarkoituksella tai vaikeuttaa asioita, jos se pitää sitä sopivana turvallisuuden lisäämiseksi.”

Siksi Vyper ei ole kaikki-kaikki-korvike Soliditylle, vaan pikemminkin loistava kieli käytettäväksi missä tahansa turvallisuudessa, kuten älykkäissä sopimuksissa, jotka käsittelevät potilaan terveystietojen metadataa tai mallin kaltevuudet hajautetulle tekoälylle.; Pp0

Vyper-koodi ja syntaktiset erot

Vyper rakennettiin olemaan mahdollisimman samanlainen kuin Python pyrittäessä samalla turvallisuuden ja yksinkertaisuuden tavoitteisiin, joten kielten yleinen tunnelma on sama, vaikka huomioitavissa on monia eroja.

Suoritetaan tiedosto

Kun Python-komentosarja suoritetaan muodossa

python-tiedostonimi.py

, vyper-komentosarja kootaan käyttäen

vyper tiedosto_nimi.vy.

Tilamuuttujat

Tilamuuttujat ovat arvoja, jotka on pysyvästi tallennettu sopimusvarastoon, ja ne voivat olla minkä tahansa tyyppisiä, kuten:

exampleStateVariable: int256.

Kartoitus

Ensimmäinen asia, jonka Vyper-sopimus sisältää, ovat sopimuksen tallennuskentät, kuten tunnussaldokartoitus:

saldo: julkinen (wei_value [osoite])

joka on tilamuuttuja, joka määrittelee avaimet ja vastaavat arvot.

Vyper-kartoitukset ovat pohjimmiltaan hash-taulukoita, jotka alustetaan, kuten yllä on esitetty, niin

“Jokainen mahdollinen avain on olemassa ja se on yhdistetty arvoon, jonka tavuesitys on kaikki nollat: tyypin oletusarvo.”

Avaintietoja ei ole tallennettu kartoitukseen, mutta vain sen keccak256-hash etsii arvonsa.

Määritettäessä tasapainoa, tyyppi public () annetaan, jota seuraa kartoituksen syntaksit: Missä arvon tyyppi wei_value annetaan ensin ja sen jälkeen avain (osoite) hakasulkeissa – samanlainen kuin Pythonin taulukoiden käsittely.

Määritelmät

Huomaat, että Vyper käyttää kaksoispistettä nimien (kuten tasapainon) määrittelyssä toisin kuin Pythonin yhtäläisyysmerkit, vaikka Python 3.6 sisältää saman syntaksin muuttujien merkinnöille:

context = {} # tyhjä sanakirjan konteksti ["a"]: 2 # merkitse sanakirjamuuttuja

Jos kaksoispistesyntaksi on muuttuvalle merkinnälle, ja kaksoispistettä käytetään määritysoperaattorina, joka määrittää vain tyyppimerkinnän. Vyper käyttää tätä syntaksia todellisen arvon määrittämiseen.

Kokonaislukutyypit

Vyperillä on vain kaksi kokonaislukutyyppiä: uint256 (ei-negatiiviset kokonaisluvut) ja int128 (allekirjoitetuille kokonaisluvuille) – toisin kuin vakavuus uint8 – uint256 vaiheissa 8 ja sama int8: sta int256: een (tämä tarkoittaa 64 erilaista avainsanaa int-tyypeille).

Totuusarvot, operaattorit, vertailut ja toiminnot

Vyperillä on lähes identtinen syntaksi Pythonin kanssa useimmille operaattoreille, mukaan lukien:

tosi ja väärä boolean; ei, ja, tai, == ja! = operaattorit; <, <=, ==,! =, >= ja > vertailut; ja +, -, *, /, ** ja% aritmeettiset operaattorit (vain int128)

Jotkut samanlaiset sisäänrakennetut toiminnot sekä:

len (x) palauttaa int: n pituuden; lattia (x) pyöristää desimaalin alaspäin lähimpään int: iin; ja ceil (x) pyöristää desimaalin ylöspäin lähimpään int

Ja joitain uusia:

sha3 (x) palauttaa sha3-hash tavuina 32; konkat (x, …) liittämään useita tuloja; viipale (x, start = _start, len = _len) palauttaaksesi _len-siivun aloituksesta _start

Luettelot

Vyperin luettelot ilmoitetaan käyttäen muotoa _nimi: _ValueType [_Integer], kun taas arvojen asettamisella ja palautuslausekkeilla on sama syntakse kuin Py = thon.

Esimerkiksi:

lst: int128 [3] # määritä luettelo lst = [1, 2, 3] # aseta arvot lst [2] = 5 # aseta arvo indeksipalautuksella lst [0] # palauttaa 1

Rakenteet

Struktorit ovat tyyppejä, jotka määrittelet, mitkä ryhmämuuttujat ja joihin pääsee käsiksi struct.argname-nimellä (hieman samanlainen kuin Python-sanakirjat):

struct: {# määritä rakenne

arg1: int128, arg2: desimaali

} struct.arg1 = 1 #access arg1 strukturissa

Menetelmien määrittely

Menetelmät (sopimusmenetelmät Vyperissä) määritellään samalla tavalla Pythonissa ja Vyperissä:

def-menetelmä ():

tee jotain()

Pythonin tarjoamien lisäksi Vyper sisältää Ethereum-spesifisiä sisustajia, kuten @payable ja @assert – entisen avulla sopimus pystyttiin toteuttamaan liiketoimia ja jälkimmäinen totuusarvoinen lauseke:

Huomaa def funktion_nimi (arg1, arg2,…, argx) -> lähtö: syntakse määrittääksesi toiminnon. Toisin kuin Pythonissa, Vyper määrittelee nimenomaisesti ulostulotyypin def-rivillä ->.

Rakentajan toiminnot

Rakentajatoiminnot kulkevat samalla tavoin kuin Python ja ilmentävät tietyn sopimuksen ja parametrit lohkoketjussa. Init alustaa ohjelman ja suoritetaan vain kerran. Esimerkiksi:

@public def __init __ (_ nimi: tavut32, _decimals: uint256, _initialSupply: uint256):

self.name = _name self.decimals = _decimals self.totalSupply = uint256_mul (_initialSupply, uint256_exp (convert (5, ‘uint256’), _decimals))

Kuten Pythonissa, itseään käytetään esiintymämuuttujien vahvistamiseen. Yllä oleva toiminto on koristeltu @julkinen sisustaja antaa sille julkista näkyvyyttä ja sallia ulkopuolisten tahojen kutsua sitä (toisin kuin oletusarvo – tai jättää koristaja – joka on yksityinen).

Sisustaja @vakio käytetään koristamaan menetelmiä, jotka lukevat vain tilaa, kun @maksettava minkä tahansa menetelmän voi kutsua maksulla.

Tapahtumat

Voit kirjata tapahtumia käyttämällä __Hirsi__ indeksoiduissa rakenteissa siten:

maksu: __log __ ({summa: uint256, param2: indeksoitu (osoite)}) tot_payment: uint256 @public def pay ():

self.tot_payment + = msg.value log.payment (msg.value, msg.sender)

Vyper-sopimusten kirjoittaminen

Kirjoitetaan nyt muutama yksinkertainen älykäs sopimus. Seuraavan koodinpätkän avulla sopimus voi vastaanottaa NFT: n (ei vaihdettavissa oleva merkki) ja pystyä lähettämään kyseistä tunnusta vastaan.

@public def safeTransferFrom (_from: osoite, _to: osoite, _tokenId: uint256):

self._validateTransferFrom (_from, _to, _tokenId, msg.sender) self._doTransfer (_from, _to, _tokenId) if (_to.codesize > 0):

returnValue: tavut [4] = raw_call (_to, ‘xf0xb9xe5xba’, outsize = 4, gas = msg.gas)

puolustaa returnValue == ‘xf0xb9xe5xba’

Seuraava osoittaa @julkinen sisustaja, määritetään funktio yhdellä parametrilla, jolle on nimenomaisesti annettu tyyppi, ja yksinkertaisella koodirungolla, joka käyttää väittämälauseita varmistaakseen, että käyttäjällä on äänioikeus osana äänestämistä valtuutetun kanssa -ohjelmassa:

# Anna äänestäjälle oikeus äänestää tästä äänestyksestä # Tämän voi kutsua vain puheenjohtaja @public def give_right_to_vote (äänestäjä: osoite):

vakuuttaa msg.sender == itse.puheenjohtaja # heittää, jos lähettäjä ei ole puheenjohtaja, väitä ei itse. äänestäjät [äänestäjä]. äänestänyt # heittää, jos äänestäjä on jo äänestänyt puolustaa itse. äänestäjät [äänestäjä]. paino == 0 # heittää, jos äänestäjä äänestää paino ei ole 0

itse. äänestäjät [äänestäjä]. paino = 1 itse. äänestäjien määrä + = 1

Koodi ei ole liian pelottava keskusteltuaan syntaktisista ja loogisista erotteluista. vyper.online tarjoaa koko lähdekoodin ”äänestäminen valtuuskunnan kanssa” -ohjelmalle käyttäen äänestäjille tarkoitettuja ohjeita ja ehdotuksia sekä seuraavia osuvasti nimettyjä toimintoja:

def delegoitu (addr: osoite) -> bool def direct_voted (addr: osoite) -> bool def __init __ (_ javaslatNimet: tavut32 [2]) def anna_oikea_äänen_äänestys (äänestäjä: osoite) def eteenpäin_paino (valtuutettu_painotettu_osoitus eteenpäin: osoite) def valtuutettu (osoitteeseen: osoite) lopullinen äänestys (ehdotus: int128) def voittaja_ehdotus () -> int128 voittaja_nimi () -> tavua32

Kuten minkä tahansa ohjelmointikielen kohdalla, suurten rakenteiden (tässä tapauksessa toimintosopimusten) suunnittelu etukäteen helpottaa ohjelmointia. Suurin ero mielessä Vyperissä on OOP-paradigmojen puute. Nykyisessä kehitysvaiheessa et voi vielä soittaa ulkoisia koodipuheluja.

Ulkoisten koodipuhelujen sallimisen näkökohdat näkyvät seuraavassa kehitysehdotuksessa:

# Ulkoinen sopimus A:

def foo (): vakio def bar (): muokkaus # Tämä sopimus B: a: A def baz (): a.foo () a.bar ()

Jos sopimus B pyytää sopimusta A, mukaan lukien menetelmät A: ssa, mahdollisimman yksinkertaisessa esimerkissä.

Käynnissä Vyper

Voit seurata koodin kirjoittamista siirtymällä osoitteeseen vyper.online ja kirjoittamalla koodiesimerkkejä Lähdekoodi-välilehteen ja napsauttamalla Käännä, kun olet valmis. Vyperin käyttöönoton ja testauksen suorittamiseen eniten käytetty asiakas (vaikkakin alfa-versiossa) on Py-EVM, jonka alun perin kehitti Vitalik itse ja jonka avulla käyttäjä voi lisätä opkoodeja tai muokata olemassa olevia muuttamatta ydinkirjastoa, mikä mahdollistaa paljon suuremman modulaarisuuden ja laajennettavuus kuin tyypillisen asiakkaan kanssa.

Py-EVM: n saamiseksi käytä vain pip install py-evm == 0.2.0a16.

3a. Vyper-sopimusten käyttöönotto

Vaikka Py-EVM on tällä hetkellä alfa-versiossa ja saattaa olla vaikea päästä ylös ja käyntiin, Vyper-sopimusten käyttöönottoon julkisissa testiverkkoissa (ja bonuksessa) on kaksi yksinkertaisempaa vaihtoehtoa:

1) Liitä vyper.online-tiedostosta luotu tavukoodi Mistiin tai gethiin

2) Käytä myetherwallet-sopimusvalikkoa asentaaksesi nykyiseen selaimeen 3) (Tuleva)

Tulevaisuudessa Vyper integroituu populaatioon, jolloin voit helposti ottaa Vyper-sopimukset käyttöön

Yksinkertaisuuden vuoksi otamme käyttöön sopimukset käyttämällä vaihtoehtoa (1) ja Mistiä (uusi käyttöliittymä gethin päällä päätelaitteeseen perustuvan gethin sijaan). Koska Vyper kääntyy samaan Bytecode-koodiin kuin Solidity, emme tarvitse mitään Vyper-spesifisiä asiakkaita, ja voimme seurata näitä hieman pyöristettyjä vaiheita:

  1. Siirry osoitteeseen vyper.online ja napsauta “Käännä” esitäytetyssä äänestyksessä “Lähdekoodi”
  2. Kopioi kaikki “Bytecode” -välilehden alla
  3. Asenna Mist käyttöjärjestelmääsi, jos et ole vielä tehnyt niin
  4. Anna solmun ladata ja synkronoida (tämä tapahtuu automaattisesti)
  5. Valitse Mist-asetuksessa ”USE THE TEST NETWORK”
  6. Luo salasana (ja muista se …)
  7. Syötä sopimus
  8. Valitse Mist-käyttöliittymästä ”Sopimukset”
  9. Valitse “UUDEN SOPIMUKSEN TEKEMINEN”
  10. Siirry SOPIMUKSEN TAVARAKOODI -välilehdelle
  11. Liitä Bytecode, jonka kopioit osoitteesta vyper.online

Ota sopimus käyttöön

  1. Valitse “TYHJENNÄ” ja kirjoita aikaisempi salasana
  2. Varmista, että Vyper-sopimus on otettu käyttöön
  3. Siirry Mistin Lompakot-välilehdelle
  4. Vieritä alas kohtaan Viimeisimmät tapahtumat
  5. Sinun pitäisi nähdä juuri käyttämämme sopimus!

*Vaikka “Luomissopimus” tilassa, koska sitä ei ole kaivettu ja vahvistettu

Johtopäätös

Tämä opas tarjoaa loogisen ja syntaktisen johdannon Vyperiin, jonka avulla voimme aloittaa ohjelmoinnin ja toteuttaa sopimuksia. Tämän oppaan avulla sinun pitäisi pystyä osallistumaan Vyperin ja sen dokumentaation kehittämiseen ja jatkamaan oppimista koodaamalla osoitteeseen vyper.online.

Jälleen Vyperin ei ole tarkoitus korvata vakautta, mutta koska eräässä tutkimuksessa löydettiin yli 34 000 haavoittuvaa sopimusta, vahvemman turvallisuuden tarve tällä alueella on suurempi kuin koskaan, mikä antaa Vyperille tärkeän tulevaisuuden Ethereumissa

Lisälukemista ja tiekartta

Koska Vyper on edelleen kokeellisessa kehityksessä, virallinen dokumentaatio ja GitHub ovat kattavimmat resurssit, ja niillä on myös seuraava arvo:

01.Vyper’s Community Gitter

02.Vyper-työkalut ja -resurssit

03. “Ethereum Book ”-sivut Vyperillä

04.Tutkimus: “Ahneiden, tuhlaaja- ja itsemurhasopimusten löytäminen mittakaavassa”

05.“Vaiheittaiset ohjeet: Ethereum Mist -lompakon käytön aloittaminen”

07.Vyper-sopimusten testaaminen ja käyttöönotto

08. “Rakenna ensimmäinen Ethereum Smart -sopimus vakavasti – opetusohjelma ” [Vyperiin sopivien vaiheiden yleistäminen on melko suoraviivaista]

Vyperin version 1.0 kehitystyössä keskitytään käyttöliittymiin (samoin kuin sisäisten ja ulkoisten puheluiden parannuksiin, muun muassa), jotka määrittelevät rajoitukset, jotta voit kommunikoida minkä tahansa tämän käyttöliittymän toteuttavan objektin kanssa. Liitännät mahdollistavat vaihtoehtoiset ratkaisut älykkäiden sopimusten päivittämiseen, joten niitä ei tarvita perustoimintoihin, ja voit aloittaa koodauksen Vyperissä, vaikka kieli on puutteellinen.

Kehityksen etenemissuunnitelma versioon 1.0, haettu ja muokattu Vyperin gitteristä:

01.Kaksi tiedostotyyppiä: käyttöliittymät (yksi käyttöliittymä tiedostoa kohden) ja sopimukset (yksi sopimus)

tiedostoa kohden).

02. Voit määrittää rajapinnan, kuten ERC721Metadata, rajapintatiedostoon ja myös

sopimustiedosto.

03. Liitäntätiedosto on henkilökohtainen, täysin yhteensopiva Ethereum ABI: n kanssa.

04. Kirjoita kääntäjä Soliditystä Vyper-rajapintoihin.

05. Tee kirjasto kaikista lopullisista ERC-rajapinnoista, vaikka joudut tekemään manuaalisesti

niitä.

06.Tuo rajapinnat käyttöliittymätiedostoista sopimuksiin.

07. Liitäntä on tyyppi, joka koristaa osoitetta.

08. Liitännät voivat periä muita rajapintoja.

09. Tutki huolellisesti ERC-165: n rajapintatunnuksia ja toista kohdassa annetut esimerkit

ERC-721 tämä liittyy siihen, miten rajapinnat perivät muita rajapintoja.

10. Liitännöillä voi olla valinnaisia ​​toimintoja. (Tauko vakavuudesta.)

11. Sopimukset voivat toteuttaa rajapintoja.

12. Sopimus, joka toteuttaa käyttöliittymän, mutta ei toteuta vaadittua

toiminto on VIRHE.

13. Sopimus, joka toteuttaa käyttöliittymän, mutta ei toteuta valinnaista

toiminto ei ole VIRHE tai VAROITUS.

14. Nimeä @public nimeksi @external vastaamaan vakautta.

15. Esittele uusi funktion sisustus @ sisempi, joka sallii toiminnon kutsumisen

sisäisesti.

16. Palauta ulkoisiin puheluihin tällä hetkellä käytetty toimintopuhelun syntakse (poistettu sisään

vaihe 14), mutta onko sitä sovellettava sisäisiin puheluihin.

17.Toteuta ulkoiset puhelut näin: Ulkoinen hyppypuhelutaulukko -> LATAA KUTSUTIEDOT

pura pakkauksesta -> lisää toimintoparametrit pinoon -> puhelun sisäinen toiminto -> tehdä toiminto

tavaraa.

18. Suorita sisäiset puhelut näin: lisää toimintoparametrit pinoon -> puhelu sisäiseksi

toiminto -> tee toimintoa.

Kuten voit nähdä kirjoittamastamme koodista, Vyper tekee kehityksessään suuria edistysaskeleita, ja sillä on vain muutama merkittävä päivitys (jaettuna yllä oleviin pienempiin vaiheisiin), kunnes 1.0 on julkaistu!

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