Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Hola a tots!

Més recentment, Waves Labs va anunciar competició per a desenvolupadors dedicats al llançament de l'extensió de llenguatge de contracte intel·ligent RIDE per a aplicacions descentralitzades Ride4Dapps a la xarxa de prova!

Hem escollit el cas DAO perquè Ventuari preveu desenvolupar dApps amb funcions socials: votació, captació de fons, gestió de la confiança, etc.
Hem començat amb un exemple senzill a Sessions de preguntes i respostes i RIDE IDE - exemple amb cartera compartida.

Vegem aquest exemple, comprovem hipòtesis i observem algunes curiositats:

Tinguem Alice - propietari d'App
Boob i Cooper són socis d'Alice, cofundadors d'Alice-BC DAO
Neli és un empresari que necessita finançament
Banc: un banc que distribueix fitxes

Etapa 1. Inicialització de balanços

Per rebre fitxes a la xarxa de proves d'onades, cal que us poseu en contacte aixeta i indiqueu l'adreça a la qual enviar els testimonis.
Podeu trobar l'adreça a l'IDE obrint les dades del vostre compte.
Destaquem Bank 10 WAVES. A continuació, comprovem que han arribat a través del navegador de blocs i transaccions: revisor

Ara distribuirem fitxes del banc a la resta de participants. (Notes: totes les transaccions a la xarxa waves no són gratuïtes, per la qual cosa es requereix un saldo positiu mínim perquè tots els participants facin transaccions).

1 ONDES = 100000000 unitats (onades), ja que les quantitats només poden ser senceres
0.01 WAVES (Comissió de transacció) = 1000000

Banc -> [3 ONDES] -> Alice, mitjançant TransferTransaction (Tipus: 4).

Comprovem que l'env.SEED des del qual es signen les transaccions coincideix amb el nostre Banc:
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Si no teniu cap frase inicial que coincideixi, només cal que canvieu-hi a la pestanya Comptes i torneu a comprovar-ho.
Després d'això, creem, anunciem i signem una transacció per a la transferència de 3 WAVES Alice.
També podeu conèixer les dades de l'Alice a través de la variable env.accounts. La numeració comença des de 0, de manera que Alice és env.accounts[1].
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

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

El resultat també es pot observar al navegador, un enllaç al mateix ens tornarà immediatament després de l'execució transaccions.

Ens assegurem que el saldo de l'Alice es reompli amb 3 ONDES i que el saldo bancari es mantingui en 10 - 3 - 0.01 = 0.699.
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Enviem a Boob i Cooper 3 ONDES cadascun, i la Neli, la Xena i la Mark 0.2 ONDES cadascuna de la mateixa manera.
(Notes: vam cometre un error d'un caràcter i vam enviar a Neli 0.02 ONDES. Aneu amb compte!)

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

Després de reposar els saldos de tots els participants, veiem:
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Etapa 2. Crear un compte dApp

Vam acordar que l'Alice seria la creadora i propietaria de l'aplicació descentralitzada.
Aneu a Comptes, configureu-lo com a SEED i comproveu que env.SEED coincideix amb l'Alice.

Intentem instal·lar l'script (contracte) més senzill possible al compte de l'Alice.
Els contactes intel·ligents a Waves són predicats que prohibeixen o permeten que qualsevol tipus de transacció sortint es produeixi sota determinades condicions. En aquest cas, aquesta condició és SEMPRE. El codi del contracte és cert. Truqueu a desplegar().

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Tarifa per transacció setScript 1400000/100000000 = 0.014 WAVES. A l'Alice li queden 2.986 ONDES a la seva balança.

Ara intentem instal·lar una lògica de contracte intel·ligent més complexa al compte d'Alice, descrit a exemple

Ride4Dapps ara inclou 2 nous tipus d'anotacions:

  1. @Callable(i) — pren com a paràmetre i, les dades sobre quin compte ha trucat/ha signat la transacció. És el resultat d'aquesta funció el que determina el canvi en l'estat del compte dApp. Altres comptes poden crear transaccions i executar funcions amb aquesta anotació i canviar l'estat del compte dApp.
  2. @Verifier(tx) — Verificador de transaccions amb el paràmetre de transacció tx. Correspon a la lògica de predicats de RIDE. És en aquesta expressió que podeu permetre o prohibir més canvis a la lògica dels contractes intel·ligents al compte dApp.

Fem-ho dApp compte com a cartera comú per a tots els participants.
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Per comprovar quin contracte està actiu actualment al vostre compte, podeu copiar el codi base64 del contracte intel·ligent a l'explorador de blocs i reconèixer-lo mitjançant un descompilador (per exemple)
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Ens assegurem que la lògica del contracte intel·ligent coincideixi amb el que esperem.
A l'Alice li queden 2.972 ONDES a la seva balança.

Aquesta dApp fa un seguiment de quant contribueix cada participant al fons comú mitjançant un mecanisme transacció de dades — DataEntry(currentKey, newAmount), on currentKey és el compte que crida a la funció de dipòsit i newAmount és el valor del saldo reposat.

Boob i Cooper fan els seus dipòsits al compte dApp amb 1 WAVES.
Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Ens equivoquem i la transacció no es realitza. Ja que, malgrat que estàvem convençuts que estàvem fent una transacció en nom d'en Bob, vam cometre un error a l'índex i vam indicar un compte bancari que no té un contracte intel·ligent. Val la pena assenyalar un punt important aquí: hi ha una tarifa per intents infructuosos d'iniciar transaccions no es pot eliminar! A l'Alice li queden 2.972 ONDES a la seva balança. Bob té 3 ONDES.

En Bob ha enviat 1 WAVES al compte dApp.

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

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

A Bob li queden 1.99 ONDES. És a dir, Bob va pagar 0.01 comissió WAVES

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

L'Alice tenia 2.972 ONDES al seu saldo, ara són 3.972. També es va registrar una transacció al compte d'Alice, però no es va cobrar cap comissió des del compte dApp (Alice).
Després que Cooper també va reposar el compte, el saldo d'Alice es va convertir en 4.972 ONDES.

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Podeu esbrinar qui és el propietari de quantes WAVES a la cartera comuna a l'explorador de blocs a la pestanya Dades.

Cooper va canviar d'opinió sobre deixar la quantitat d'1 ONADA a la cartera general i va decidir retirar la meitat de l'afinitat. Per fer-ho, ha de cridar la funció de retirada.

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Tanmateix, ens vam equivocar de nou, ja que la funció de retirada té paràmetres completament diferents i una signatura diferent. Quan dissenyeu contractes intel·ligents a RIDE4DAPPS, hauríeu de prestar atenció a aquest punt

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Cooper té ara 2.48 ONDES al seu balanç. En conseqüència, 3 ONDES - 1 - 0.01, i després + 0.5 - 0.01. En conseqüència, cada trucada per dipositar i retirar costa 0.01 ONDES. Com a resultat, les entrades de la taula de propietaris dApps van canviar de la següent manera.

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Bob també va decidir retirar una mica de diners de la cartera compartida, però va cometre un error i va intentar retirar 1.5 ONDES.

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

Tanmateix, el contracte intel·ligent tenia un control per a aquesta situació.

La Xena és una estafadora, va intentar retirar 1 ONADA del total del compte.

Aprendre a escriure contractes intel·ligents Waves a RIDE i RIDE4DAPPS. Part 1 (cartera multiusuari)

A ella tampoc li va sortir bé.

A la següent part, veurem qüestions més complexes relacionades amb la imperfecció del compte d'Alice dApp.

Font: www.habr.com

Afegeix comentari