đŸ‡«đŸ‡· #3 - Faire une transaction entre deux adresses de type ‘account’

Si tout s’est bien passĂ©, vous avez pu crĂ©er deux adresses de type ‘account’. Vous avez bien sĂ»r conservĂ© les clĂ©s privĂ©es et publiques associĂ©es dans les dossiers respectifs.

But de la manip du jour : Envoyer quelques ADA de l’adresse 1 vers l’adresse 2


Avant de débuter

Effectuer une transaction sur le rĂ©seau Cardano n’est pas gratuit. Il existe des frais de transaction que l’envoyeur doit rĂ©gler afin que la transaction rĂ©ussisse. Le calcul de ces frais de transaction dĂ©pend des constantes qui sont dĂ©clarĂ©es dans le “genesis block”.

Pour connaĂźtre ces constantes, tapez dans votre terminal :

jcli rest v0 settings get -h http://127.0.0.1:3101/api

Sur le testnet actuellement en cours, vous aurez la réponse

block0Hash: adbdd5ede31637f6c9bad5c271eec0bc3d0cb9efb86a5b913bb55cba549d0770
block0Time: "2019-02-22T07:53:34+00:00"
consensusVersion: genesis
currSlotStartTime: "2019-10-01T19:18:16+00:00"
fees:
certificate: 10000
coefficient: 50
constant: 1000
maxTxsPerBlock: 255

Tout est lĂ . Envoyer un certificate, c’est 10000 lovelaces (Cela ne nous intĂ©resse pas pour aujourd’hui). Le coefficient est le coĂ»t Ă  payer (en lovelace) pour chaque opĂ©ration d’entrĂ©e ou de sortie (input/output). constant est un coĂ»t fixe (en lovelace) qui sera toujours lĂ  (une constante quoi !).


Pour commencer, il faut vous placer dans le dossier qui contient votre addr1, la clé privées sk1 et la clé publique pk1.

A partir de ce dossier, vous allez effectuer dans le terminal l’enchainement de commandes qui suit.

Tout d’abord, vous allez dĂ©clarer vouloir faire une transaction. Ici, la transaction portera le nom de “tx”. Mais vous pouvez mettre ce que vous voulez.

jcli transaction new --staging tx

DĂ©clarer d’oĂč vont partir les fonds et quel montant va partir.

jcli transaction add-account $(cat addr1) 1001100 --staging tx

DĂ©clarer oĂč doivent arriver ces fond. Il serait bon d’avoir copiĂ© au prĂ©alable l’adresse de rĂ©ception quelque part et accessible 


jcli transaction add-output COLLER_ICI_ADRESSE_DE_RECEPTION 1000000 --staging tx

Vous remarquerez que le chiffre qui apparait est exactement : montant envoyé - (coût fixe + entrée + sortie). Cela nous fait donc : 1001100-(1000+50+50) = 1000000

Il est important de ne pas rater ce calcul, sinon votre transaction sera refusĂ©e. Attention toutefois, personne ne vous empĂȘchera de payer plus de frais que nĂ©cessaire 


Finalisez votre transaction

jcli transaction finalize --staging tx

RĂ©cupĂ©rer l’identifiant de la transaction

jcli transaction id --staging tx

Cette commande va vous renvoyer un IDENTIFIANT_DE_TRANSACTION. Copiez le dans le presse-papier.

Signez la transaction Ă  l’aide de la clĂ© privĂ©e du compte envoyeur.

jcli transaction make-witness IDENTIFIANT_DE_TRANSACTION --genesis-block-hash adbdd5ede31637f6c9bad5c271eec0bc3d0cb9efb86a5b913bb55cba549d0770 --type account --account-spending-counter 0 witness.output sk1

Ici, --type se rĂ©fĂšre Ă  la nature du compte. Nous avons utilisĂ© une adresse de type “account” (comme sur Ethereum), et non un “utxo” (comme sur Bitcoin).

Vous noterez la présence de --account-spending-counter. Ce paramÚtre est tout simplement le nombre de transactions déjà effectuées à partir de cette adresse. Si votre compte est tout neuf, il est à 0. Si vous ne vous en souvenez plus, il existe un moyen facile de le retrouver :

jcli rest v0 account get $(cat addr1) -h http://127.0.0.1:3101/api

Le terminal vous retournera les infos relative à cette adresse dont le fameux “counter :”.

Le terme witness.output est la sortie de la commande. Et le terme sk1 est la clĂ© privĂ©e du compte. Si vous ĂȘtes bien dans le dossier account_1, alors tout est bon - ca devrait fonctionner.

Ajoutez le witness.output Ă  votre transaction

jcli transaction add-witness witness.output --staging tx

Scellez votre transaction

jcli transaction seal --staging tx

Transformez votre transaction en message et l’envoyer sur le rĂ©seau en une seule commande

jcli transaction to-message --staging tx | jcli rest v0 message post -h http://127.0.0.1:3101/api

Vérifier que les ADA sont bien partis de votre compte envoyeur, en réitérant la commande présentée plus haut

jcli rest v0 account get $(cat addr1) -h http://127.0.0.1:3101/api

Vous devriez voir que le counter est passĂ© Ă  1 (si vous Ă©tiez Ă  0) et que l’adresse a perdu 1001100 lovelaces.

Vous pouvez vérifier la bonne réception des fonds en tapant :

jcli rest v0 account get ADRESSE_RECEVEUSE -h http://127.0.0.1:3101/api


Amusez vous bien. C’est tout pour ce soir.
@Psychomb

1 Like