Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir

Merhaba! Bu makalede size Waves düğümünde normal bir dApp'in nasıl yazılacağını ve çalıştırılacağını göstereceğim. Gerekli araçlara, yöntemlere ve bir geliştirme örneğine bakalım.

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir

DApp'ler ve normal uygulamalar için geliştirme şeması neredeyse aynıdır:

  • kodu yazıyoruz
  • Otomatik test yazma
  • Uygulamayı başlatma
  • Test yapmak

Araçlar

1. docker düğümü ve Waves Explorer'ı çalıştırmak için

Bir düğüm başlatmak istemiyorsanız bu adımı atlayabilirsiniz. Sonuçta bir test ve deney ağı var. Ancak kendi düğümünüzü konuşlandırmadığınız takdirde test süreci uzayabilir.

  • Test belirteçlerine sahip yeni hesaplara sürekli olarak ihtiyacınız olacak. Test ağı musluğu her 10 dakikada bir 10 DALGA aktarır.
  • Test ağındaki ortalama blok süresi 1 dakika, düğümde ise 15 saniyedir. Bu, özellikle bir işlemin birden fazla onay gerektirdiği durumlarda fark edilir.
  • Genel test düğümlerinde agresif önbelleğe alma mümkündür.
  • Ayrıca bakım nedeniyle geçici olarak kullanılamayabilirler.

Artık kendi düğümünüzle çalıştığınızı varsayacağım.

2. Sörf Tahtası Komut Satırı Aracı

  • Node.js'yi ppa, homebrew veya exe kullanarak buradan indirip yükleyin: https://nodejs.org/en/download/.
  • Mevcut bir düğümde testler çalıştırmanıza olanak tanıyan bir araç olan Surfboard'u yükleyin.

npm install -g @waves/surfboard

3. Visual Studio Kodu eklentisi

IDE hayranı değilseniz ve metin düzenleyicileri tercih ediyorsanız bu adım isteğe bağlıdır. Gerekli tüm araçlar komut satırı yardımcı programlarıdır. Vim kullanıyorsanız eklentiye dikkat edin vim yolculuğu.

Visual Studio Code'u indirip yükleyin: https://code.visualstudio.com/

VS Code'u açın ve wave-ride eklentisini yükleyin:

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir

Waves Keeper tarayıcı uzantısı: https://wavesplatform.com/products-keeper

Bitti!

Düğümü ve Waves Explorer'ı başlatın

1. Düğümü başlatın:

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

Düğümün REST API aracılığıyla başlatıldığından emin olun. http://localhost:6869:

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
Düğüm için Swagger REST API'si

2. Waves Explorer'ın bir örneğini başlatın:

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

Bir tarayıcı açın ve şuraya gidin: http://localhost:3000. Boş bir yerel düğüm devresinin ne kadar hızlı kurulduğunu göreceksiniz.

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
Waves Explorer yerel bir düğüm örneğini görüntüler

RIDE yapısı ve Sörf Tahtası aracı

Boş bir dizin oluşturun ve içindeki komutu çalıştırın

surfboard init

Komut, proje yapısını, "merhaba dünya" uygulamalarını ve testlerini içeren bir dizini başlatır. Bu klasörü VS Code ile açarsanız şunu göreceksiniz:

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
Surfboard.config.json

  • ./ride/ klasörünün altında, dApp kodunun bulunduğu dizin olan tek bir cüzdan.ride dosyası bulacaksınız. Bir sonraki blokta dApp'leri kısaca analiz edeceğiz.
  • ./test/ klasörünün altında bir *.js dosyası bulacaksınız. Testler burada saklanır.
  • ./surfboard.config.json – testleri çalıştırmak için yapılandırma dosyası.

Envs önemli bir bölümdür. Her ortam şu şekilde yapılandırılmıştır:

  • Ağın dApp'ini ve CHAIN_ID'sini başlatmak için kullanılacak düğümün REST API uç noktası.
  • Test jetonlarınızın kaynağı olacak jetonlara sahip bir hesap için gizli ifade.

Gördüğünüz gibi Surfboard.config.json varsayılan olarak birden fazla ortamı desteklemektedir. Varsayılan yerel ortamdır (defaultEnv anahtarı değiştirilebilir bir parametredir).

Cüzdan demo uygulaması

Bu bölüm RIDE diline bir referans değildir. Bunun yerine, blockchainde neler olup bittiğini daha iyi anlamak için dağıttığımız ve test ettiğimiz uygulamaya bir bakış.

Basit bir Cüzdan demo uygulamasına bakalım. Herkes bir dApp adresine token gönderebilir. Yalnızca WAVES'inizi çekebilirsiniz. InvokeScriptTransaction aracılığıyla iki @Callable işlevi kullanılabilir:

  • deposit()WAVES cinsinden ek bir ödeme gerektirir
  • withdraw(amount: Int)jetonları döndüren

dApp yaşam döngüsü boyunca yapı (adres → tutar) korunacaktır:

Action
Ortaya çıkan durum

ilk
boş

Alice 5 DALGA yatırdı
Alice'in adresi → 500000000

Bob 2 DALGA yatırır

Alice'in adresi → 500000000
bob adresi → 200000000

Bob 7 DALGA'yı geri çeker
REDDEDİLDİ!

Alice 4 DALGA'yı geri çeker
Alice'in adresi → 100000000
bob adresi → 200000000

Durumu tam olarak anlamak için kod:

# 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

Örnek kod şu adreste de bulunabilir: GitHub.

VSCode eklentisi, bir dosyayı düzenlerken sürekli derlemeyi destekler. Bu nedenle hataları her zaman SORUNLAR sekmesinden izleyebilirsiniz.

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
Dosyayı derlerken farklı bir metin düzenleyici kullanmak istiyorsanız

surfboard compile ride/wallet.ride

Bu, bir dizi base64 derlenmiş RIDE kodu üretecektir.

'wallet.ride' için test komut dosyası

Şuna bakalım test dosyası. JavaScript'in Mocha çerçevesi tarafından desteklenmektedir. Bir “Önce” işlevi ve üç test vardır:

  • “Önce”, MassTransferTransaction yoluyla birden fazla hesaba fon sağlar, betiği derler ve onu blok zincirine dağıtır.
  • "Para yatırabilir", ağa bir InvokeScriptTransaction göndererek iki hesabın her biri için mevduat() işlevini etkinleştirir.
  • Hiç kimsenin başkalarının tokenlarını çalamayacağına dair “Yatırılan miktardan daha fazlasını çekememe” testleri.
  • Para çekme işlemlerinin doğru şekilde işlenip işlenmediğini kontrol eden "para yatırabilir".

Surfboard'dan testler çalıştırın ve sonuçları Waves Explorer'da analiz edin

Testi çalıştırmak için çalıştırın

surfboard test

Birden fazla komut dosyanız varsa (örneğin, ayrı bir dağıtım komut dosyasına ihtiyacınız varsa) çalıştırabilirsiniz.

surfboard test my-scenario.js

Surfboard, test dosyalarını ./test/ klasöründe toplayacak ve betiği, Surfboard.config.json dosyasında yapılandırılan düğümde çalıştıracaktır. Birkaç saniye sonra şöyle bir şey göreceksiniz:

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)

Yaşasın! Testler geçti. Şimdi Waves Explorer'ı kullanırken neler olduğuna bir bakalım: bloklara bakın veya yukarıdaki adreslerden birini aramaya yapıştırın (örneğin, karşılık gelen adres) wallet#. Burada işlem geçmişini, dApp durumunu, derlenmemiş ikili dosyayı bulabilirsiniz.

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
Dalgalar Gezgini. Yeni devreye alınan bir uygulama.

Bazı Sörf Tahtası İpuçları:

1. Test ağı ortamında test yapmak için şunu kullanın:

surfboard test --env=testnet

Test jetonlarını alın

2. İşlemlerin JSON sürümlerini ve bunların düğüm tarafından nasıl işlendiğini görmek istiyorsanız testi -v ile çalıştırın ("ayrıntılı" anlamına gelir):

surfboard test -v

Uygulamaları Waves Keeper ile kullanma

1. Waves Keeper'ı çalışacak şekilde ayarlayın: http://localhost:6869

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
Waves Keeper'ı yerel bir düğümle çalışacak şekilde ayarlama

2. Ağ için belirteçler içeren gizli ifadeyi içe aktarın mı? Basit olması açısından düğümünüzün ilk tohumunu kullanın: waves private node seed with waves tokens. Adres: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. NPM'yi kullanarak sunucusuz tek sayfalı bir uygulamayı kendiniz çalıştırabilirsiniz. Veya mevcut olana gidin: chrome-ext.wvservices.com/dapp-wallet.html

4. Test çalıştırmasındaki cüzdan adresini (yukarıda altı çizili) dApp adresi metin kutusuna girin

5. "Para Yatırma" alanına küçük bir miktar girin ve düğmeye tıklayın:

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
Waves Keeper, 10 WAVES ödeyerek bir InvokeScriptTransaction imzalamak için izin istiyor.

6. İşlemi onaylayın:

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
İşlem oluşturulur ve ağa yayınlanır. Artık kimliğini görebilirsin

7. Waves Explorer'ı kullanarak işlemi izleyin. Arama alanına kimliği girin

Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir

Sonuçlar ve ek bilgiler

Waves Platformunda basit dApp'leri geliştirmeye, test etmeye, dağıtmaya ve kullanmaya yönelik araçlara baktık:

  • RIDE dili
  • VS Kod Düzenleyicisi
  • Dalgalar Gezgini
  • Surfboard
  • Dalga Bekçisi

RIDE öğrenmeye devam etmek isteyenler için linkler:

Daha fazla örnek
Örneklerle çevrimiçi IDE
Dalgalar Belgeleri
Telegram'da geliştirici sohbeti
Yığın akışında dalgalar ve RIDE
YENİ! Waves Platformunda dApp'ler oluşturmaya ilişkin çevrimiçi kurslar

RIDE konusuna dalmaya devam edin ve ilk dApp'inizi yaratın!

TL; DR: bit.ly/2YCFnwY

Kaynak: habr.com

Yorum ekle