Title: Émettre une transaction Post by: jackjack on August 12, 2011, 02:25:39 PM Bonjour
C'est un peu dans la continuité du post d'hier J'ai créé une transaction (testnet) à la main, je l'ai signée et je l'ai importée dans un wallet mais quand je lance bitcoin j'obtiens ces erreurs : Code: ************************ Ça semble être une erreur de lecture, donc peut-être une erreur dans les longueurs des variables, mais j'ai vérifié et tout colle Voici la transaction : Code: 01000000 Title: Re: Émettre une transaction Post by: sirk390 on August 12, 2011, 05:04:47 PM Salut,
J'ai vérifié ta transaction et pour moi elle est bonne. Elle décode bien, la signature valide bien, les inputs sont correcte et le montant OK. J'aurais tendance à dire qu'il s'agit d'un problème d'insertion dans le wallet.dat. Par contre, je maitrise moins cette partie là. Y a t'il une transaction pool pour les transactions qui ne sont pas encore dans un block? Title: Re: Émettre une transaction Post by: jackjack on August 12, 2011, 05:46:07 PM Merci de confirmer qu'elle est bonne déjà. Au cas où tu as bien le même hash?
C'est quoi une transaction pool? Ce que je peux te dire c'est que je peux importer correctement une transaction qui a été faite par un client bitcoin totalement offline, et qui n'a aucun rapport avec le client dans lequel j'importe Donc l'importation de tx créée par un client bitcoin fonctionne bien Le client doit donc écrire les transactions différemment... Par exemple, la transaction c49d31616ad6554a1fcf51cadfab0c3a6350a586f5d05e7c56be363266e889f9 ( http://blockexplorer.com/tx/c49d31616ad6554a1fcf51cadfab0c3a6350a586f5d05e7c56be363266e889f9 ) a un nombre assez conséquent d'octets (inutiles?) à la fin.... Et encore, j'ai pris en exemple une de celles qui en a le moins Code: 01000000 Title: Re: Émettre une transaction Post by: sirk390 on August 12, 2011, 07:39:17 PM Pour le hash je trouve "d82f4ad23c0df709aedf16ac95cd9ddbb6332471f9585d671aa44cdd7e5fbc22".
Par contre j'ai implementé ça uniquement cet apres-midi et j'ai testé qu'une seule fois. J'ai relu rapidement le code source c++. Pour les transactions non confirmés (e.g. incluses dans aucun block), le client écris quand même une sérialisation de la classe "WalletTx". Ca consiste dans l'ordre dans : -la transaction sérialisé (classe CTransaction) -le hashBlock (0) (classe CMerkleTx) -le vMerkleBranch (liste de hash) (classe CMerkleTx) -nIndex (classe CMerkleTx) -vtxPrev (classe WalletTx) -mapValue (classe WalletTx) -vOrderForm (classe WalletTx) -fTimeReceivedIsTxTime (classe WalletTx) -nTimeReceived(classe WalletTx) -fFromMe (classe WalletTx) -fSpent (classe WalletTx) Je pense qu'il te manque des valeurs par défaut pour tout ces champs. Il faudrait que tu fasse un test avec une transaction ayant 0 confirmation et que tu dump les valeurs dans le wallet.dat Title: Re: Émettre une transaction Post by: jackjack on August 12, 2011, 08:28:50 PM Merci, ça va m'aider à décortiquer tout ça
Je viens de faire une nouvelle transaction et j'ai quitté bitcoin instantanément, mais c'est pas mieux Code: 01000000016fced4f8b8ebac7ec340d57e8f35fba68c30d8cd38dd5f011282f0d6c45c727f010000008b483045022100947e8dc37dcdca2531e6cdd8a549fc83bcecf8d1f75d703226036ea32f480c16022011f6620483a182b656bcf809c01132259f72c76b8b79d117516aebb3e8ab8dc801410431e04e5604398a2475f813e23d1a0105bbe98324207c952ff44f27a196a037eebdaa05183ebcfd65cfac67aaaa4e2ea53654facccc0125a8d44b570e6f298666ffffffff0230ca5a00000000001976a914863b319cbef4716230f5cc609334bc0041ff88a488ac404b4c00000000001976a9148e69ca0454bcba192c1a25188fa047716136289188ac00000000 |