Herkese Merhaba!
Yakın zamanda Waves Labs
DAO vakasını seçtik çünkü
Basit bir örnekle başladık
Bu örneğe bakalım, hipotezleri test edelim ve bazı tuhaflıklara bakalım:
Alice'e sahip olalım - dApp Sahibi
Boob ve Cooper, Alice ortakları ve Alice-BC DAO'nun kurucu ortaklarıdır.
Neli finansmana ihtiyacı olan bir işletme sahibi
Banka – jeton dağıtan bir banka
Aşama 1. Bakiyelerin başlatılması
Waves test ağında token almak için iletişime geçmeniz gerekir.
Hesap ayrıntılarınızı açarak adresi IDE'de bulabilirsiniz.
Bank 10 WAVES'ı vurguluyoruz. Daha sonra blok ve işlem tarayıcısı aracılığıyla ulaşıp ulaşmadıklarını kontrol ederiz:
Şimdi jetonları bankadan diğer katılımcılara dağıtalım. (Notlar: Waves ağındaki tüm işlemler ücretsiz değildir, dolayısıyla tüm katılımcıların işlem yapabilmesi için minimum pozitif bakiye gereklidir).
1 DALGA = 100000000 birim (dalgacık), çünkü miktarlar yalnızca tamsayı olabilir
0.01 WAVES (İşlem Ücreti) = 1000000
Banka -> [3 DALGA] -> Alice, TransferTransaction yoluyla (Tür: 4).
İşlemlerin imzalandığı ortam SEED'in Bankamızla eşleşip eşleşmediğini kontrol ediyoruz:

Eşleşen bir başlangıç ifadeniz yoksa Hesaplar sekmesinde ona geçin ve tekrar kontrol edin.
Bundan sonra 3 WAVES Alice'in transferi için bir işlem oluşturuyor, duyuruyor ve imzalıyoruz.
Alice'in verilerini env.accounts değişkeni aracılığıyla da öğrenebilirsiniz. Numaralandırma 0'dan başlar, dolayısıyla Alice env.accounts[1] olur.
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Sonuç tarayıcıda da gözlemlenebilir; bunun bağlantısı, yürütmenin hemen ardından bize iade edilecektir.
Alice'in bakiyesinin 3 DALGA ile doldurulmasını ve banka bakiyesinin 10 - 3 - 0.01 = 0.699'da kalmasını sağlıyoruz.
Boob ve Cooper'a 3'er WAVES, Neli, Xena ve Mark'a ise 0.2 WAVES gönderiyoruz.
(Notlar: Tek karakter hatası yaptık ve Neli'ye 0.02 WAVES gönderdik. Dikkatli olun!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Tüm katılımcıların bakiyelerini yeniledikten sonra şunu görüyoruz:
Aşama 2. Bir dApp hesabı oluşturun
Alice'in merkezi olmayan uygulamanın yaratıcısı ve sahibi olacağı konusunda anlaştık.
Hesaplar'a gidin, SEED olarak ayarlayın ve env.SEED'in Alice ile eşleştiğini kontrol edin.
Mümkün olan en basit betiği (sözleşmeyi) Alice'in hesabına yüklemeye çalışalım.
Waves'teki akıllı kişiler, belirli koşullar altında her türlü giden işlemin gerçekleşmesini yasaklayan veya buna izin veren tahminlerdir. Bu durumda bu durum HER ZAMAN olur. Sözleşme kodu doğrudur. Dağıtımı () çağırın.
setScript işlemi başına ücret 1400000/100000000 = 0.014 WAVES. Alice'in bakiyesinde 2.986 DALGA kaldı.
Şimdi Alice hesabına daha karmaşık akıllı sözleşme mantığını kurmaya çalışalım.
Ride4Dapps artık 2 yeni açıklama türü içeriyor:
- @çağrılabilir(i) — işlemi hangi hesabın çağırdığı/imzaladığı hakkındaki verileri i parametresi olarak alır. DApp hesabının durumundaki değişikliği belirleyen bu işlevin sonucudur. Diğer hesaplar bu açıklamayla işlemler oluşturabilir, işlevler yürütebilir ve dApp hesabının durumunu değiştirebilir.
- @Doğrulayıcı(tx) — İşlem tx parametresine sahip işlem doğrulayıcı. RIDE'ın yüklem mantığına karşılık gelir. Bu ifadede, dApp hesabındaki akıllı sözleşmelerin mantığında daha fazla değişiklik yapılmasına izin verebilir veya yasaklayabilirsiniz.
Yapalım Dapp hesabı tüm katılımcılar için ortak bir cüzdan olarak kullanın.
Hesabınızda şu anda hangi sözleşmenin etkin olduğunu kontrol etmek için akıllı sözleşmenin base64 kodunu blok gezginine kopyalayabilir ve bir kod çözücü kullanarak tanıyabilirsiniz (
Akıllı sözleşmenin mantığının beklediğimizle eşleştiğinden emin oluyoruz.
Alice'in bakiyesinde 2.972 DALGA kaldı.
Bu dApp, bir mekanizma aracılığıyla her katılımcının ortak fona ne kadar katkıda bulunduğunu takip ediyor veri işlemi — DataEntry(currentKey, newAmount)burada currentKey, para yatırma işlevini çağıran hesaptır ve newAmount, yenilenen bakiyenin değeridir.
Boob ve Cooper dApp hesabına 1 WAVES ile para yatırıyorlar.
Hata yapıyoruz ve işlem gerçekleşmiyor. Çünkü Bob adına işlem yaptığımıza ikna olmamıza rağmen endekste hata yaptık ve akıllı sözleşmesi olmayan bir Banka hesabı belirttik. Burada önemli bir noktaya dikkat çekmekte fayda var; başarısız işlem başlatma girişimleri için bir ücret alınır kaldırılamaz! Alice'in bakiyesinde 2.972 DALGA kaldı. Bob'un 3 DALGA'sı var.
Bob dApp Hesabına 1 WAVES gönderdi.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bob'un 1.99 DALGA'sı kaldı. Yani Bob 0.01 WAVES komisyon ödedi
Alice'in bakiyesinde 2.972 DALGA vardı, şimdi 3.972. Alice hesabına da işlem kaydedildi ancak dApp Hesabından (Alice) herhangi bir komisyon alınmadı.
Cooper da hesabı yeniledikten sonra Alice'in bakiyesi 4.972 WAVES oldu.
Veri sekmesindeki blok gezgininde ortak cüzdanda kimin kaç WAVES'a sahip olduğunu öğrenebilirsiniz.
Cooper, 1 WAVES miktarını genel cüzdanda bırakma konusundaki fikrini değiştirdi ve affinity'nin yarısını geri çekmeye karar verdi. Bunu yapmak için geri çekme işlevini çağırması gerekir.
Ancak geri çekme fonksiyonunun tamamen farklı parametreleri ve farklı bir imzası olduğundan yine yanıldık. RIDE4DAPPS üzerinde akıllı sözleşmeler tasarlarken bu noktaya dikkat etmelisiniz.
Cooper'ın bilançosunda şu anda 2.48 DALGA var. Buna göre 3 DALGA - 1 - 0.01 ve ardından + 0.5 - 0.01. Buna göre, her para yatırma ve çekme çağrısının maliyeti 0.01 DALGA'dır. Sonuç olarak dApps sahipleri tablosundaki girişler aşağıdaki gibi değişti.
Bob da paylaşılan cüzdandan bir miktar para çekmeye karar verdi ancak bir hata yaptı ve 1.5 WAVES çekmeye çalıştı.
Ancak akıllı sözleşmenin bu duruma karşı bir denetimi vardı.
Xena bir dolandırıcıdır, toplam hesaptan 1 DALGA çekmeye çalıştı.
Onun için de işe yaramadı.
Bir sonraki bölümde Alice dApp Hesabının kusuruyla ilgili daha karmaşık konulara bakacağız.
Kaynak: habr.com