Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Ciao a tutti!

Più recentemente, Waves Labs annunciato concorso per sviluppatori dedicato al rilascio dell'estensione linguistica del contratto intelligente RIDE per applicazioni decentralizzate Ride4Dapps nella rete di test!

Abbiamo scelto il caso DAO perché Ventuario prevede di sviluppare dApp con funzioni social: voto, raccolta fondi, gestione fiduciaria, ecc.
Abbiamo iniziato con un semplice esempio in Sessioni di domande e risposte e IDEALE DI GUIDA - esempio con portafoglio condiviso.

Diamo un'occhiata a questo esempio, testiamo le ipotesi e osserviamo alcune stranezze:

Prendiamo Alice - Proprietaria della dApp
Boob e Cooper sono partner di Alice, co-fondatori di Alice-BC DAO
Neli è un imprenditore che ha bisogno di finanziamenti
Banca: una banca che distribuisce token

Fase 1. Inizializzazione dei saldi

Per ricevere token sulla rete di test delle onde, è necessario contattare faucet e indicare l'indirizzo a cui inviare i token.
Puoi trovare l'indirizzo nell'IDE aprendo i dettagli del tuo account.
Evidenziamo il Banco 10 WAVES. Successivamente controlliamo che siano arrivati ​​tramite il browser dei blocchi e delle transazioni: browser browser

Ora distribuiamo i gettoni dalla banca al resto dei partecipanti. (Nota: tutte le transazioni sulla rete Waves non sono gratuite, quindi è richiesto un saldo positivo minimo affinché tutti i partecipanti possano effettuare transazioni).

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

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

Controlliamo che l'env.SEED da cui vengono firmate le transazioni corrisponda alla nostra Banca:
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Se non disponi di una frase seed corrispondente, passa ad essa nella scheda Account e controlla di nuovo.
Successivamente, creiamo, annunciamo e firmiamo una transazione per il trasferimento di 3 WAVES Alice.
Puoi anche scoprire i dati di Alice attraverso la variabile env.accounts. La numerazione parte da 0, quindi Alice è env.accounts[1].
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

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

Il risultato può essere osservato anche nel browser, un collegamento ad esso ci verrà restituito immediatamente dopo l'esecuzione transazioni.

Ci assicuriamo che il saldo di Alice venga reintegrato in 3 ONDE e che il saldo bancario rimanga a 10 - 3 - 0.01 = 0.699.
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Inviamo a Boob e Cooper 3 ONDE ciascuno, e Neli, Xena e Mark 0.2 ONDE ciascuno allo stesso modo.
(Note: abbiamo commesso un errore di un carattere e abbiamo inviato Neli 0.02 WAVES. Fai attenzione!)

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

Dopo aver reintegrato i saldi di tutti i partecipanti, vediamo:
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Fase 2. Crea un account dApp

Abbiamo concordato che Alice sarebbe stata la creatrice e proprietaria dell'applicazione decentralizzata.
Vai su Account, impostalo come SEED e controlla che env.SEED corrisponda ad Alice.

Proviamo a installare lo script (contratto) più semplice possibile sull'account di Alice.
I contatti intelligenti in Waves sono predicati che vietano o consentono il verificarsi di qualsiasi tipo di transazione in uscita a determinate condizioni. In questo caso, questa condizione è SEMPRE. Il codice del contratto è vero. Chiama deploy().

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Tariffa per transazione setScript 1400000/100000000 = 0.014 ONDE. Alice ha 2.986 ONDE rimaste sul suo saldo.

Proviamo ora a installare sull'account Alice una logica di smart contract più complessa, descritta in esempio

Ride4Dapps ora include 2 nuovi tipi di annotazioni:

  1. @Callable(i) — prende come parametro i, i dati su quale conto ha chiamato/firmato la transazione. È il risultato di questa funzione che determina il cambiamento dello stato dell'account della dApp. Altri account possono creare transazioni ed eseguire funzioni con questa annotazione e modificare lo stato dell'account dApp.
  2. @Verifier(tx) — Verificatore di transazione con il parametro transazione tx. Corrisponde alla logica dei predicati di RIDE. È in questa espressione che puoi consentire o vietare ulteriori modifiche alla logica degli smart contract sull'account della dApp.

Facciamo Däpp conto come portafoglio comune per tutti i partecipanti.
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Per verificare quale contratto è attualmente attivo sul tuo account, puoi copiare il codice base64 dello smart contract nel block explorer e riconoscerlo tramite un decompilatore (per esempio)
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Ci assicuriamo che la logica del contratto intelligente corrisponda a ciò che ci aspettiamo.
Alice ha 2.972 ONDE rimaste sul suo saldo.

Questa dApp tiene traccia di quanto ciascun partecipante contribuisce al fondo comune attraverso un meccanismo transazione dati: DataEntry(currentKey, newAmount), dove currentKey è il conto che richiama la funzione di deposito e newAmount è il valore del saldo reintegrato.

Boob e Cooper effettuano i loro depositi sul conto dApp con 1 WAVES.
Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Commettiamo un errore e la transazione non va a buon fine. Poiché, nonostante fossimo convinti di effettuare una transazione per conto di Bob, abbiamo commesso un errore nell'indice e abbiamo indicato un conto bancario che non dispone di uno smart contract. Vale la pena notare un punto importante qui: è prevista una commissione per i tentativi falliti di avviare transazioni non può essere rimosso! Alice ha 2.972 ONDE rimaste sul suo saldo. Bob ha 3 ONDE.

Bob ha inviato 1 WAVES all'account dApp.

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

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

A Bob restano 1.99 ONDE. Cioè, Bob ha pagato 0.01 di commissione WAVES

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Alice aveva 2.972 ONDE sul suo saldo, ora è 3.972. È stata registrata una transazione anche sul conto Alice, ma sul conto dApp (Alice) non è stata addebitata alcuna commissione.
Dopo che anche Cooper ha riempito il conto, il saldo di Alice è diventato 4.972 ONDE.

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Puoi scoprire chi possiede quante WAVES nel portafoglio comune nel Block Explorer nella scheda Dati.

Cooper ha cambiato idea sul lasciare l'importo di 1 WAVES sul portafoglio generale e ha deciso di ritirare metà dell'affinità. Per fare ciò, deve chiamare la funzione di ritiro.

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Tuttavia ci sbagliavamo ancora una volta, poiché la funzione di ritiro ha parametri completamente diversi e una firma diversa. Quando progetti contratti intelligenti su RIDE4DAPPS dovresti prestare attenzione a questo punto

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Cooper ora ha 2.48 WAVES nel suo bilancio. Di conseguenza, 3 ONDE - 1 - 0.01, quindi + 0.5 - 0.01. Di conseguenza, ogni chiamata per depositare e prelevare costa 0.01 ONDE. Di conseguenza, le voci nella tabella dei proprietari delle dApp sono cambiate come segue.

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Anche Bob ha deciso di prelevare del denaro dal portafoglio condiviso, ma ha commesso un errore e ha provato a prelevare 1.5 WAVES.

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Tuttavia, il contratto intelligente aveva un controllo per questa situazione.

Xena è una truffatrice, ha provato a prelevare 1 WAVES dal conto totale.

Imparare a scrivere contratti intelligenti Waves su RIDE e RIDE4DAPPS. Parte 1 (Portafoglio multiutente)

Anche per lei non ha funzionato.

Nella parte successiva, esamineremo questioni più complesse legate all'imperfezione dell'Account Alice dApp.

Fonte: habr.com

Aggiungi un commento