Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Ciao a tutti!

Di recente, Waves Labs ha annunciato un concorso per sviluppatori in occasione del rilascio della rete di test dell'estensione del linguaggio di smart contract RIDE per le applicazioni decentralizzate Ride4Dapps!

Abbiamo scelto il caso d'uso DAO, poiché Ventuary prevede di sviluppare un dApp con funzionalità sociali: voto, raccolta fondi, gestione fiduciaria e altro.
Abbiamo iniziato con un semplice esempio in una sessione Q&A e nel RIDE IDE — un esempio con un portafoglio condiviso..

Analizziamo questo esempio, verifichiamo le ipotesi e discutiamo alcune peculiarità:

Supponiamo di avere Alice — dApp Owner.
Boob e Cooper — partner di Alice, cofondatori di Alice-BC DAO.
Neli — proprietario di un'azienda che ha bisogno di finanziamenti.
Bank — una banca che distribuisce token.

Fase 1. Inizializzazione dei saldi

Per ricevere token nella rete di test Waves, bisogna rivolgersi a faucet e indicare l'indirizzo a cui inviare i token.
L'indirizzo può essere trovato nell'IDE, espandendo i dati dell'account.
Assegniamo 10 WAVES a Bank. Dopo controlliamo che siano stati ricevuti tramite l'esploratore di blocchi e transazioni: esploratore

Ora distribuiamo i token dalla banca agli altri partecipanti. (Note: tutte le transazioni sulla rete Waves non sono gratuite, quindi è necessario un saldo positivo minimo per tutti i partecipanti per effettuare transazioni).

1 WAVES = 100000000 unità (wavelets), poiché gli importi possono essere solo interi.
0.01 WAVES (commissione di transazione) = 1000000

Banca -> [3 WAVES] -> Alice, tramite TransferTransaction (Tipo: 4).

Verifichiamo che env.SEED, da cui vengono firmate le transazioni, corrisponda alla nostra banca:
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Se non hai le frasi seed corrispondenti, passa a quelle nella scheda Accounts e controlla di nuovo.
Dopo di che, creiamo, annunciamo e firmiamo la transazione per trasferire 3 WAVES ad Alice.
Puoi scoprire i dati di Alice anche attraverso la variabile env.accounts. La numerazione inizia da 0, quindi Alice è env.accounts[1].
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Il risultato può anche essere osservato nell'esploratore, il link a cui verrà restituito subito dopo l'esecuzione della transazione..

Assicuriamoci che il saldo di Alice sia aumentato di 3 WAVES, mentre il saldo della banca è rimasto di 10 — 3 — 0.01 = 6.99.
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Invieremo 3 WAVES a Boob e Cooper, mentre a Neli, Xena e Mark 0.2 WAVES con lo stesso metodo.
(Note: Abbiamo commesso un errore di un carattere e abbiamo inviato a Neli 0,02 WAVES. Fate attenzione!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Dopo aver ricaricato i saldi di tutti i partecipanti, vediamo:
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Fase 2. Creazione dell'account dApp

Abbiamo concordato che il creatore e proprietario dell'applicazione decentralizzata sarà Alice.
Andiamo su Accounts e la impostiamo come SEED, verificando che env.SEED corrisponda ad Alice.

Proviamo a impostare sull'account di Alice il contratto più semplice possibile.
I contratti intelligenti in Waves sono predicati che proibiscono o consentono l'esecuzione di un determinato tipo di transazione in uscita a determinate condizioni. In questo caso, la condizione è ALWAYS. Il codice del contratto è true. Chiamiamo deploy().

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

La fee per la transazione setScript è 1400000/100000000 = 0,014 WAVES. Ad Alice sono rimasti 2,986 WAVES.

Ora proveremo a impostare sull'account di Alice una logica di smart contract più complessa, descritta in un esempio

Ride4Dapps ora include 2 nuovi tipi di annotazioni:

  1. @Callable(i) — accetta come parametro i, informazioni su quale account ha invocato/firmato la transazione. È il risultato di questa funzione a determinare il cambiamento dello stato dell'account dApp. Altri account possono creare transazioni ed eseguire funzioni con questa annotazione e modificare lo stato dell'account dApp.
  2. @Verifier(tx) — Verificatore della transazione con il parametro tx della transazione. Corrisponde alla logica dei predicati in RIDE. È in questa espressione che si può consentire o vietare ulteriori modifiche alla logica dei contratti smart sull'account dApp.

Facciamo dApp l'account come un portafoglio condiviso per tutti i partecipanti.
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Per verificare quale contratto è attivo sull'account, è possibile copiare il codice base64 del contratto smart nell'esploratore di blocchi e riconoscerlo tramite un decompilatore (ad esempio)
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Assicuriamoci che la logica del contratto smart corrisponda a ciò che ci aspettiamo.
Alice ha un saldo di 2,972 WAVES.

Questo dApp tiene traccia di quanto ciascun partecipante contribuisce al fondo comune attraverso il meccanismo data transaction — DataEntry(currentKey, newAmount), dove currentKey è l'account che invoca la funzione deposit e newAmount è l'importo del saldo ricaricato.

Boob e Cooper depositano i loro fondi sul conto dApp con 1 WAVES.
Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Si verifica un errore e la transazione non va a buon fine. Nonostante ci siamo accertati di effettuare la transazione a nome di Bob, abbiamo commesso un errore nell'indice e abbiamo indicato l'account Bank, sul quale non è presente un contratto intelligente. È importante sottolineare che per i tentativi non riusciti di avviare transazioni, la commissione non viene addebitata! Alice ha 2,972 WAVES nel suo saldo. Bob ha 3 WAVES.

Bob ha inviato 1 WAVES al conto dApp.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

A Bob sono rimasti 1.99 WAVES. Quindi Bob ha pagato 0.01 WAVES di commissione.

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Alice aveva 2.972 WAVES, adesso ne ha 3.972. Anche sul conto di Alice è registrata una transazione, tuttavia non è stata addebitata alcuna commissione dal conto dApp (Alice).
Dopo che Cooper ha anche ricaricato il conto, Alice ha un saldo di 4.972 WAVES.

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Si può scoprire a chi appartiene quanto WAVES nel portafoglio generale nel blocco esploratore nella sezione Data.

Cooper ha cambiato idea riguardo a mantenere la somma di 1 WAVES nel portafoglio comune e ha deciso di prelevare metà dei fondi. Per farlo, deve chiamare la funzione withdraw.

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Tuttavia, abbiamo nuovamente sbagliato, poiché la funzione withdraw ha parametri e una firma completamente diversi. Quando progetterete smart contract su RIDE4DAPPS, dovrete prestare attenzione a questo aspetto.

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Cooper ha ora 2,48 WAVES sul suo saldo. Di conseguenza, 3 WAVES - 1 - 0,01, e poi + 0,5 - 0,01. Pertanto, ogni chiamata a deposit e withdraw costa 0,01 WAVES. Di conseguenza, nella tabella dei proprietari delle dApps le voci sono cambiate nel seguente modo.

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Bob ha anche deciso di prelevare una certa somma dal portafoglio comune, ma ha commesso un errore e ha cercato di estrarre 1,5 WAVES.

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Tuttavia, nel contratto intelligente c'era un controllo per tale situazione.

Xena è una truffatrice, ha tentato di prelevare 1 WAVES dal conto comune.

Impariamo a scrivere smart contract Waves in RIDE e RIDE4DAPPS. Parte 1 (Wallet multiutente)

Anche lei non ci è riuscita.

Nella prossima parte, esamineremo aspetti più complessi legati all'imperfezione dell'Account dApp di Alice.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster