Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp

Talofa! I lenei tusiga o le a ou faʻaali atu ia te oe pe faapefea ona tusi ma faʻatautaia se dApp masani i luga o le Waves node. Sei o tatou tilotilo i meafaigaluega talafeagai, metotia ma se faʻataʻitaʻiga o le atinaʻe.

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp

Ole polokalame ole atina'e mo dApps ma talosaga masani e toetoe lava tutusa:

  • Fa'ailoga tusitusi
  • Tusitusi otometi su'ega
  • Tatala le talosaga
  • Su'ega

Meafaigaluega

1. docker e taufetuli le node ma Waves Explorer

Afai e te le mana'o e amata se node, e mafai ona e fa'ase'e le la'asaga lea. A uma mea uma, o loʻo i ai se suʻega ma faʻataʻitaʻiga fesoʻotaʻiga. Ae a aunoa ma le fa'aogaina o lau lava node, e mafai ona fa'asolosolo le faiga o su'ega.

  • E te mana'omia i taimi uma ni tala fou ma fa'ailoga su'ega. Ole paipa feso'ota'iga su'ega e fesiita'i 10 GALU i 10 minute uma.
  • Ole taimi ole poloka ile suʻega ole suʻega ole 1 minute, ile node - 15 sekone. E matua iloga lava lenei mea pe a mana'omia e se fefa'ataua'iga ni fa'amaoniga se tele.
  • E mafai ona fa'asao fa'amalosi i nodes su'ega lautele.
  • E mafai fo'i ona le avanoa mo se taimi le tumau ona o le tausiga.

Mai le taimi nei o le a ou manatu o loʻo e galue i lau lava node.

2. Meafaigaluega Laina Polofe'au Fa'atonu

  • Tikia ma faʻapipiʻi Node.js faʻaaoga ppa, homebrew poʻo exe iinei: https://nodejs.org/en/download/.
  • Fa'apipi'i le Surfboard, o se meafaigaluega e mafai ai ona e su'e su'ega i se node o iai.

npm install -g @waves/surfboard

3. Visual Studio Code plugin

O lenei laasaga e filifili pe afai e le o oe o se tagata IDE ma e te manaʻo e faʻatonu tusitusiga. O meafaigaluega mana'omia uma o fa'atonuga fa'atonu. Afai e te faʻaogaina vim, faʻalogo i le plugin vim-ti'eti'e.

La'u mai ma fa'apipi'i le Visual Studio Code: https://code.visualstudio.com/

Tatala VS Code ma faʻapipiʻi le galu-ride plugin:

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp

Fa'aopoopoga ole su'esu'ega ole Waves Keeper: https://wavesplatform.com/products-keeper

Ua faia!

Amata le node ma Waves Explorer

1. Amata le node:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Ia mautinoa o loʻo faʻalauiloa le node e ala i le REST API i totonu http://localhost:6869:

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
Swagger REST API mo node

2. Amata se fa'ata'ita'iga o Waves Explorer:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Tatala se browser ma alu i http://localhost:3000. O le a e va'ai i le vave ona fausia o se ta'amilosaga node fa'apitonu'u gaogao.

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
Waves Explorer fa'aalia se fa'ata'ita'iga node i le lotoifale

fausaga RIDE ma mea faigaluega laupapa faasee

Fausia se lisi gaogao ma fa'atonu le fa'atonuga i totonu

surfboard init

O le fa'atonuga e amatalia ai se fa'atonuga fa'atasi ai ma le fa'atulagaga o le poloketi, "hello world" talosaga ma su'ega. Afai e te tatalaina lenei faila i le VS Code, o le a e vaʻai:

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
Surfboard.config.json

  • I lalo o le ./ride/ folder o le ae maua ai se faila faila e tasi wallet.ride - o le lisi o loʻo i ai le code dApp. O le a matou auiliiliina faʻapuupuu dApps i le isi poloka.
  • I lalo o le ./test/ folder o le ae maua ai se faila *.js. O su'ega o lo'o teuina iinei.
  • ./surfboard.config.json – faila fa'atulagaina mo su'ega fa'atino.

Envs o se vaega taua. O si'osi'omaga ta'itasi ua fa'atulaga e pei o lenei:

  • REST API pito pito o le node o le a faʻaaoga e faʻalauiloa ai le dApp ma CHAIN_ID o le fesoʻotaʻiga.
  • O se fuaitau faalilolilo mo se tala o loʻo i ai faʻailoga o le a avea ma faʻapogai o au faʻailoga suʻega.

E pei ona e va'ai, e lagolagoina e surfboard.config.json le tele o si'osi'omaga ona o le faaletonu. O le faaletonu o le si'osi'omaga fa'apitonu'u (le defaultEnv key o se parakalafa e mafai ona suia).

Talosaga fa'atupe-temo

O lenei vaega e le o se faasinomaga i le gagana RIDE. Nai lo lena, se'i va'ai i le talosaga matou te fa'atinoina ma fa'ata'ita'i ina ia malamalama atili i mea o lo'o tupu i le poloka poloka.

Se'i o tatou va'ai i se talosaga fa'atau-fa'aliga faigofie. So'o se tasi e mafai ona lafo fa'ailoga i se tuatusi dApp. E na'o lou ave'ese o lau WAVES. E lua @Callable galuega e maua ile InvokeScriptTransaction:

  • deposit()lea e mana'omia ai se totogi fa'apipi'i ile WAVES
  • withdraw(amount: Int)lea e toe faafoi mai ai faailoga

I le olaga atoa o le dApp, o le fausaga (tuatusi → aofaiga) o le a tausia:

faatinoga
Tulaga i'uga

muamua
leai se mea

Ua teuina e Alice 5 GALU
Alice-tuatusi → 500000000

E teuina e Bob 2 GALU

Alice-tuatusi → 500000000
tuatusi bob → 200000000

Ua aveese e Bob le 7 GALU
FAAfitia!

Ua aveese e Alisa 4 GALU
Alice-tuatusi → 100000000
tuatusi bob → 200000000

O le code lea e malamalama atoatoa ai i le tulaga:

# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
 let pmt = extract(i.payment)
 if (isDefined(pmt.assetId))
    then throw("works with waves only")
    else {
     let currentKey = toBase58String(i.caller.bytes)
     let currentAmount = match getInteger(this, currentKey) {
       case a:Int => a
       case _ => 0
     }
     let newAmount = currentAmount + pmt.amount
     WriteSet([DataEntry(currentKey, newAmount)]) 
   }
 }
@Callable(i)
func withdraw(amount: Int) = {
 let currentKey = toBase58String(i.caller.bytes)
 let currentAmount = match getInteger(this, currentKey) {
   case a:Int => a
   case _ => 0
 }
 let newAmount = currentAmount - amount
 if (amount < 0)
   then throw("Can't withdraw negative amount")
   else if (newAmount < 0)
     then throw("Not enough balance")
     else ScriptResult(
       WriteSet([DataEntry(currentKey, newAmount)]),
       TransferSet([ScriptTransfer(i.caller, amount, unit)])
      )
 }
@Verifier(tx)
func verify() = false

Fa'ata'ita'iga code e mafai fo'i ona maua ile GitHub.

O le VSCode plugin e lagolagoina le faʻapipiʻi faʻaauau aʻo faʻasaʻo se faila. O le mea lea, e mafai ona e mata'ituina mea sese i le PROBLEMS tab.

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
Afai e te manaʻo e faʻaoga se isi faʻamatalaga tusitusia pe a tuʻufaʻatasia le faila, faʻaoga

surfboard compile ride/wallet.ride

Ole mea lea ole a maua mai ai se fa'asologa o le code RIDE tu'ufa'atasia base64.

Tusi su'ega mo 'wallet.ride'

Sei o tatou vaavaai i faila su'ega. Fa'aola e le JavaScript's Mocha framework. O loʻo i ai se "Muamua" galuega ma tolu suʻega:

  • "A'o le'i" fa'atupe le tele o fa'amatalaga e ala i le MassTransferTransaction, tu'ufa'atasia le fa'amaumauga ma tu'uina atu i le poloka poloka.
  • "E mafai ona teuina" auina atu se InvokeScriptTransaction i le fesoʻotaʻiga, faʻagaoioia le tupe teu() galuega mo tala taitasi e lua.
  • “E le mafai ona tala i tua le sili atu nai lo le mea na teuina” suega e le mafai e se tasi ona gaoia faailoga a isi tagata.
  • "E mafai ona teu" siaki o tala faauigaina o loʻo faʻagasolo saʻo.

Fa'atino su'ega mai le Surfboard ma au'ili'ili i'uga ile Waves Explorer

Ina ia faia le suega, tamoe

surfboard test

Afai e tele au tusitusiga (mo se faʻataʻitaʻiga, e te manaʻomia se faʻasalalauga tuʻufaʻatasia), e mafai ona e tamoe

surfboard test my-scenario.js

O le a aoina e le Surfboard faila o su'ega i le ./test/ folder ma fa'agasolo le fa'amaumauga i luga o le node o lo'o fa'atulagaina i le surfboard.config.json. A maeʻa ni nai sekone o le a e vaʻai i se mea e pei o lenei:

wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
   √ Can deposit (4385ms)
   √ Cannot withdraw more than was deposited
   √ Can withdraw (108ms)
3 passing (15s)

Talofa! Na pasi su'ega. Seʻi o tatou vaʻai i le mea e tupu pe a faʻaaogaina Waves Explorer: vaʻai i poloka pe faapipii se tasi o tuatusi o loʻo i luga i le sailiga (mo se faʻataʻitaʻiga, o le fetaui wallet#. O iina e mafai ona e maua ai le talafaasolopito o fefaʻatauaiga, tulaga o le dApp, faila faila binary decompiled.

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
Galu Su'esu'e. O se talosaga faatoa uma ona fa'atinoina.

Nisi Fautuaga Laupapa Ta'avale:

1. Ina ia fa'ata'ita'i ile siosiomaga testnet, fa'aoga:

surfboard test --env=testnet

Maua fa'ailoga su'ega

2. Afai e te manaʻo e vaʻai i le JSON versions o fefaʻatauaiga ma pe faʻafefea ona faʻaogaina e le node, faʻataʻitaʻi le suʻega ma -v (o lona uiga 'verbose'):

surfboard test -v

Fa'aaogāina polokalame ma Waves Keeper

1. Seti Waves Keeper e galue: http://localhost:6869

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
Fa'atulaga Waves Keeper e galue ma se node i le lotoifale

2. Fa'aulufale mai fuaitau faalilolilo ma fa'ailoga mo le feso'ota'iga? Mo le faigofie, faʻaaoga le fatu muamua o lau node: waves private node seed with waves tokens. tuatusi: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. E mafai ona e fa'atautaia se talosaga e leai se sauvaa itulau e tasi e fa'aaoga ai le npm. Pe alu i le mea o iai nei: chrome-ext.wvservices.com/dapp-wallet.html

4. Ulufale le tuatusi atotupe mai le su'ega fa'ata'ita'iga (vasiva i luga) i totonu o le dApp address text box

5. Ulufale se vaega itiiti i le fanua “Teuga tupe” ma kiliki le faamau:

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
E talosagaina e Waves Keeper le faatagaga e saini ai se InvokeScriptTransaction ma le totogiina o le 10 WAVES.

6. Fa'amaonia le fefa'atauaiga:

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp
O le fefaʻatauaʻiga e faia ma faʻasalalau i le fesoʻotaʻiga. Ua mafai nei ona e va'ai i lana ID

7. Mataʻituina le fefaʻatauaiga e faʻaaoga ai Waves Explorer. Ulufale ID ile fanua su'esu'e

Auala e Fausia ai, Fa'atino ma Su'e Galu RIDE dApp

Fa'ai'uga ma fa'amatalaga fa'aopoopo

Na matou vaʻavaʻai i meafaigaluega mo le atinaʻeina, faʻataʻitaʻiga, faʻaogaina ma le faʻaogaina o dApps faigofie ile Waves Platform:

  • gagana RIDE
  • VS Code Editor
  • Galu Su'esu'e
  • Vaʻalele
  • Tausi galu

So'oga mo i latou e fia fa'aauau a'oa'oga RIDE:

Nisi faʻataʻitaʻiga
IDE i luga ole laiga ma faʻataʻitaʻiga
Fa'amaumauga o Galu
Fa'atupu talatalanoaga ile Telegram
Galu ma RIDE ile stackoverflow
FOU! Kosi i luga ole laiga ile fatuina o dApps ile Waves Platform

Fa'aauau le su'esu'e ile autu ole RIDE ma fai lau dApp muamua!

TL; AMA: bit.ly/2YCFnwY

puna: www.habr.com

Faaopoopo i ai se faamatalaga