ProHoster > Blog > yönetim > Waves RIDE dApp Nasıl Oluşturulur, Dağıtılır ve Test Edilir
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.
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.
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/
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 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:
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
VSCode eklentisi, bir dosyayı düzenlerken sürekli derlemeyi destekler. Bu nedenle hataları her zaman SORUNLAR sekmesinden izleyebilirsiniz.
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.
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:
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):
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.