Kot razvijalec se morate zavedati pomembnosti nenehnega izobraževanja. Svet kriptovalut in verige blokov je v stalnem stanju gibanja. Norma pred letom dni bi lahko bila popolnoma nepomembna čez nekaj mesecev. V duhu te nenehne spremembe vam bomo predstavili, kako bodo videti pametne pogodbe in koda Vyper in Plutus. Ethereum načrtuje uporabo Vyperja za svoje prihodnje pogodbe, medtem ko je Cardano za izbiro programskega jezika pametnih pogodb izbral Plutus.

Pametne pogodbe prihodnosti? Vyper in Plutus

Solidity je pametni pogodbeni jezik, ki je trenutno izbran za Ethereum. Solidity so razvili Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai in več nekdanjih sodelavcev Ethereuma, da bi omogočili pisanje pametnih pogodb na blockchain platformah, kot je Ethereum.

Na to so vplivali številni priljubljeni programi in programski koncepti. Vsebuje elemente objektno usmerjenega programiranja, spletnega razvoja, montažnega jezika itd. In zajema širok spekter primerov uporabe. Vendar, revizija solidarnostne pogodbe so lahko res težke, saj so lahko zelo dopustilne in zapletene.

Vyper je jezik, ki temelji na Pythonu in je zasnovan izključno zaradi berljivosti in preprostosti. Ker je sam python eden najlažje razumljivih in najpogosteje uporabljenih programskih jezikov, upamo, da bodo lahko netehnični ljudje skočili in začeli kodirati svoje pametne pogodbe. Vyper je bil razvit kot minimalističen, preprost jezik, ki se osredotoča na trivialne primere uporabe (npr. Ni ga mogoče uporabiti za kodiranje zapletenega Dappa) in ni tako prilagodljiv kot trdnost.

Torej, čeprav lahko nekoliko omeji prilagodljivost pogodbe, to ponuja več

“Neposreden, pragmatičen in lahko razumljiv režim branja in pisanja pametnih pogodb, ki poskuša jasno ujeti namen tistega, ki piše kodo.”

Zdi se, da so velike lasulje Ethereum in Ethereum Classic popolnoma zaostale za Vyperjem iz dveh glavnih razlogov:

  • Izvedba ostrenja Ethereuma in Casper FFG sta kodirana v Vyperju.

  • Tudi Ethereum Commonwealth, ki vzdržuje in razvija Ethereum Classic, je izjavil, da želijo Vyper sprejeti kot privzeti jezik pametnih pogodb..

Vyperjev minimalistični pristop odpravlja dedovanje, modifikatorje stanja rekurzivno klicanje in preobremenitev operaterja, ki se umakne vektorskim napadom. Poleg tega ima tudi tone preverjanj prelivanja za velike računske operacije. Zaradi pristopa Vyper ne samo, da je učinkovit z viri, temveč je tudi težko pisati zlonamerno kodo, ne da bi jo opazili med revizijo.

Pametna pogodba Vyper

Oglejmo si vljudnost pametne pogodbe Vyper CoinPupil. To je preprosta in enostavna pogodba ERC-20.

# Dogodki

Prenos: dogodek ({_ iz: indeksirano (naslov), _v: indeksirano (naslov), _vrednost: uint256})

Odobritev: dogodek ({_ lastnik: indeksirano (naslov), _poraba: indeksirano (naslov), _vrednost: uint256})

U

# Spremenljivke stanja

ime: javno (bytes32)

simbol: javni (bytes32)

totalSupply: javni (uint256)

decimalk: javno (int128)

stanja: int128 [naslov]

dovoljeno: int128 [naslov] [naslov]

U

# Funkcija konstruktorja / Instantiranje pogodbe

@public

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

self.name = _ime

self.symbol = _symbol

self.decimals = _decimals

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

self.balances [msg.sender] = pretvori (self.totalSupply, ‘int128’)

U

# Stanje na računu

@public

@constant

def balanceOf (_owner: naslov) -> uint256:

U

vrnitev pretvorbe (self.balansi [_owner], ‘uint256’)

U

# Pošlji _število žetonov _na naslov

@public

def transfer (_to: address, _amount: int128 (uint256)) -> bool:

U

če self.balansi [sporočilo pošiljatelja] >= _znesek in

samo.tehta [_do] + _znesek >= self.balansi [_to]:

self.balances [msg.sender] – = _amount # Odštevanje od pošiljatelja

self.balances [_to] + = _amount # Dodajte isto prejemniku

vrni True

sicer:

vrnitev False

U

# Prenos dovoljenih žetonov

@public

def transferFrom (_from: address, _to: address, _value: int128 (uint256)) -> bool:

U

če _vrednost <= samo.dovoljeno [_od] [sporočilo pošiljatelja] in

_vrednost <= self.balansi [_od]:

U

self.balansi [_od] – = _value # zmanjšanje stanja od naslova.

self.allowed [_from] [msg.sender] – = _value # znižanje dodatka.

self.balansi [_to] + = _value # stanje začetka naslova.

U

vrni True

sicer:

vrnitev False

U

# Dovoli _spenderju dvig z računa do zneska _value.

@public

def odobriti (_spender: naslov, _mount: int128 (uint256)) -> bool:

U

samo.dovoljeno [msg.sender] [_ spender] = _znesek

log.Approval (msg.sender, _spender, convert (_amount, ‘uint256’))

U

vrni True

U

# Pridobite dovoljenje za naslov

@public

dodatek za def (_owner: naslov, _spender: naslov) -> uint256:

vrnitev pretvorbe (samo.dovoljeno [_owner] [_ spender], ‘uint256’)

V tej pogodbi:

  • Metoda “self” se uporablja za prikaz spremenljivk primerka svojega razreda za razjasnitev.

  • @public in @private se uporabljata za nastavitev vidnosti in izpostavljenosti pogodb ABI (Application Binary Interface) vmesnik, ki zunanjim akterjem (drugi naslovi pogodb ali denarnice) omogoča, da ga pokličejo.

Plutus

Cardano je za svoja jezika izbral Haskella in Plutusa. Haskell bo uporabljen za kodiranje Cardano, Plutus pa za ustvarjanje pametne pogodbe. Oba sta funkcionalna jezika.

Kaj s tem mislimo?

Dve družini jezikov (majhen obhod)

Ko gre za programske jezike, obstajata dve družini:

  • Nujno
  • Delujoč.

Nujni programski jeziki

V nujnem pristopu mora kodir določiti vse korake, ki jih mora računalnik narediti, da doseže cilj. Vsi naši tradicionalni programski jeziki, kot so C ++, Java in celo Solidity, so nujni programski jeziki. Takšen pristop programiranja imenujemo tudi algoritemsko programiranje.

Vzemimo primer, kaj s tem mislimo. Poglejmo C ++. Recimo, da želimo dodati 5 in 3.

int a = 5;

int b = 3;

int c;

c = a + b;

Kot lahko vidite, postopek dodajanja zajema več korakov in vsak korak nenehno spreminja stanje programa, saj se vsi izvajajo posamezno.

Postopek dodajanja je potekal v štirih korakih in so naslednji:

  • Razglasitev celotnega števila a in dodelitev vrednosti 5.

  • Deklariranje celega števila b in dodelitev vrednosti 3.

  • Razglasitev celotnega števila c.

  • Dodajanje vrednosti in b in njihovo shranjevanje v c.

Funkcionalni programski jeziki

Druga družina programskih jezikov je Funkcionalni jeziki. Ta slog programiranja je bil ustvarjen za oblikovanje funkcionalnega pristopa k reševanju problemov. Takšen pristop se imenuje deklarativno programiranje.

Torej, kako deluje funkcionalno programiranje?

Recimo, da obstaja funkcija f (x), ki jo želimo uporabiti za izračun funkcije g (x), nato pa jo želimo uporabiti za delo s funkcijo h (x). Namesto da bi jih rešili v zaporedju, jih lahko preprosto združimo v eno samo funkcijo, kot je ta:

h (g (f (x)))

Tako je funkcionalni pristop lažje matematično utemeljiti. Zato naj bi bili funkcionalni programi varnejši pristop k ustvarjanju pametnih pogodb. To pomaga tudi pri preprostejšem formalnem preverjanju, kar precej pomeni, da je lažje matematično dokazati, kaj program počne in kako deluje. To daje Cardanu lastnost “High Assurance Code”.

Ravno zato je funkcionalni pristop tako zaželen.

In prav to Cardano uporablja Haskell za kodiranje njihovega ekosistema in Plutusa za pametne pogodbe. Tako Haskell kot Plutus sta funkcionalna jezika.

Nazaj k Plutusu

Plutus je poenostavljena različica Haskella. To pomeni, da ima tako kot Haskell več podobnosti z matematiko kot s programiranjem. Plutus je predvidena za uporabo

“Finančne institucije, kraji, ki elektronsko trgujejo in druge takšne finančne operacije z denarjem.”

Poglejmo si torej nekaj osnovnih programov Plutusa. Naslednja koda je vzeta iz Dokumenti Cardano.

Ta preprost program Plutus prikazuje seštevanje, množenje, faktorje in Fibonacci:

dodaj: Nat -> Nat -> Nat {

dodajte ničlo n = n;

add (Suc m) n = Suc (dodaj m n)

}

mul: Nat -> Nat -> Nat {

mul Zero _ = Zero;

mul (Suc m) n = dodaj (mul m n) n

}

fac: Nat -> Nat {

fac Zero = Suc Zero;

fac (Suc n) = mul (Suc n) (fac n)

}

fib: Nat -> Nat {

fib Zero = Suc Zero;

fib (Suc Zero) = Suc Zero;

fib (Suc (Suc n)) = dodaj (fib n) (fib (Suc n))

}

V sami kodi lahko vidite razlike med funkcionalnim in nujnim pristopom.

Zaključek

Ves čas spreminjajoči se svet kripto in blockchain pomeni, da moramo biti nenehno na nogah. Poznavanje teh novih programskih jezikov je nujno za vse lovce na glave in razvijalce.

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