SatoshiDice like pour Duniter

J’en suis pas loin à vrai dire, j’ai juste évité la partie Crypto_scrypt, mais la lib existe en PHP.

Je m’y colle une fois mon satoshiDice en prod alors. :smiley:

Besoin d’un petit coup de main ici, j’ai beau le tourner dans tous les sens, je n’arrive pas via ma clé privée à signer ma transaction je crois que j’ai un souci dans le format de la TX que je signe.

Voici le format que j’utilise :

Version: 10\nType: Transaction\nCurrency: g1\nBlockstamp: 194495-000004D87E91420DE2F1C764ED6715B02E31E470A3965586566BC1C3160B84AF\nLocktime: 0\nIssuers:\nFNVeWqnZCjGFspj1sjBmwFfoT8tDv99ifGLbNY2UpzPw\nInputs:\n1002:0:D:FNVeWqnZCjGFspj1sjBmwFfoT8tDv99ifGLbNY2UpzPw:140471\nUnlocks:\n0:SIG(0)\nOutputs:\n100:0:SIG(2LyLcCf3vQDDggPkECGeVrFMMvQdJACLNZet9HUxeY73)\n902:0:SIG(FNVeWqnZCjGFspj1sjBmwFfoT8tDv99ifGLbNY2UpzPw)\nComment: \n

voici ce que je fais :

// transform seed in keypair via sodium
$keyPair = sodium_crypto_sign_seed_keypair ( sodium_hex2bin ("MaSeed"));

// extract publickey and encode it in base58 (bitcoin format)
echo(base58_encode(gmp_import (sodium_crypto_sign_publickey($keyPair))));
// j'ai bien ma clé publique ici !

// sign TX with secretKey
$tx="Version: 10\nType: Transaction\nCurrency: g1\nBlockstamp: 194495-000004D87E91420DE2F1C764ED6715B02E31E470A3965586566BC1C3160B84AF\nLocktime: 0\nIssuers:\nFNVeWqnZCjGFspj1sjBmwFfoT8tDv99ifGLbNY2UpzPw\nInputs:\n1002:0:D:FNVeWqnZCjGFspj1sjBmwFfoT8tDv99ifGLbNY2UpzPw:140471\nUnlocks:\n0:SIG(0)\nOutputs:\n100:0:SIG(2LyLcCf3vQDDggPkECGeVrFMMvQdJACLNZet9HUxeY73)\n902:0:SIG(FNVeWqnZCjGFspj1sjBmwFfoT8tDv99ifGLbNY2UpzPw)\nComment:\n";

// output signature
echo(sodium_bin2base64 (sodium_crypto_sign_detached($tx ,sodium_crypto_sign_secretkey($keyPair)),SODIUM_BASE64_VARIANT_ORIGINAL));

Et j’ai pas la bonne, j’ai essayer avec tx entre simple quote (non interprété en PHP) et double quote (interprété donc), j’ai deux résultats différents, mais qui ne sont pas les bons.

Coté protocole on peut lire que les signatures utilisent :

Signatures follow the Ed25519 pattern

Il me semble que c’est bien ce que fait crypto_sign right ?

Ma question est donc est ce que le format de ma TX est bon ?
Si oui où est ce que ça cloche ?

Regarde du côté des examples python peut être :

:face_with_head_bandage:

Je me démène à lire du TypeScript et tu me files du Python. :smiley:

OMG il manquait un espace après Comment:

C’est tout bon, merci @Inso pour le support. ^^

EDIT : pour mémoire, réponse trouvé ici : https://git.duniter.org/clients/cesium-grp/cesium/blob/master/www/js/api/api-demo-services.js#L37

2 Likes

Bon du coup, j’ai séparer mon code, il utilise la mini-librairie duniterWallet ^^

Tant qu’à écrire une lib autant quelle me serve d’emblé.

Pour le moment, j’ai ça comme fonction :

duniter wallet utils 
	
	- createTX
	- getBlock
	- getInputs
	- getTXHash
	- setOutputs
	- sendTX
	- signTX

Pour le moment il n’y a que les fonctions dont j’ai besoin, il en manque surement, si vous voyez des choses à ajouter, n’hésitez pas. ^^

2 Likes

PHP 7 permet de faire du typage strict, qui plante au runtime puisque pas de compilation, mais un bon IDE PHP donnera des alertes en cas de problème de typage flagrant.
Si tu fais une librairie PHP, essaie aussi de respecter les PSR.

Keep up the good job ! :slightly_smiling_face:

2 Likes

Oui merci pour les encouragements.

Je m’en sers effectivement à quelque endroit stratégique.

Oui, pour le moment c’est un simple fichier qui embarque les fonctions utilitaires. A voir pour en faire une classe pour intégration composer plus tard.

La todo liste s’agrandie au fur et à mesure que j’avance. A ce demander comment les chiffres du chômage font eux ? :trollface:

2 Likes