bitcoind : Comment créer une transaction coinbase à partir du noyau bitcoin ?


Ma question est la suivante : Dans BTC ADRESS, je mets n’importe quelle adresse que je choisis dans mon portefeuille bitcoin-qt?

Oui ! .

Bien que vous auriez besoin d’appeler le obtenir une nouvelle adresse commande par tout moyen à votre disposition, après quoi vous pourrez en faire usage.

bitcoind : Comment créer une transaction coinbase à partir du noyau bitcoin ?

En supposant que vous avez déjà changé de répertoire dans lequel se trouve votre fichier exécutable bitcoin-cli ou bitcoind

L’approche CMD ressemblerait à ceci  :

bitcoin-cli getnewaddress qui afficherait l’adresse nouvellement générée dans la fenêtre du terminal cmd.

txt qui stockerait la sortie dans un fichier texte

Pour rendre les choses plus dynamiques, vous auriez besoin d’écrire un script batch pour gérer les aspects que votre langage de programmation n’est pas capable de gérer. Mais j’espère que vous avez compris l’idée.

Et si je double le hachage du résultat hexadécimal donné, sans ajouter aucune autre transaction, cela peut être le merkleroot (avec uniquement la transaction coinbase) et l’utiliser pour construire l’en-tête de bloc ?

Oui. Vous insérez le résultat du double hachage des données de transaction brutes en tant que merkleroot sans l’échanger (cela sera fait plus tard lors de l’échange de l’en-tête de bloc pour l’extraction). Si vous échangez deux fois, vous vous retrouverez avec un hachage coinbase incorrect.

En dehors de cela, vous devrez corriger et insérer quelques éléments.

En supposant une réponse hexadécimale de créer une transaction brute produit ->

: :

Ma solution C++ :

bHeight – Hauteur de bloc donnée par ** »`getblocktemplate »`** réponse En-têtes nécessaires – sstream, string, iostream. Espaces de noms utilisés – en utilisant std ::stringstream, en utilisant std ::string. // variable de retour globale if(data. byte2, byte3; byte3 = data.substr(5, 2); byte2 = data.substr(3, 2); byte1 = data.substr(1, 2); bits = octet3 + octet2 + octet1 ., byte2, byte3; byte3 = data.substr(4, 2); byte2 = data.substr(2, 2); byte1 = data.substr(0, 2); bits = octet3 + octet2 + octet1 ., byte2, byte3, byte4; byte4 = data.substr(6, 2); byte3 = data.substr(4, 2); byte2 = data.substr(2, 2); byte1 = data.substr(0, 2); bits = octet4 + octet3 + octet2 + octet1 ;;; char je; sprintf(je, « %x », bHauteur); stringstream aa ; aa > données inversées ; // reversedDATA = SwapBlockHeight(reversedDATA); // L’approche optimisée de l’appel de fonction ci-dessus est appliquée ci-dessous // En supposant que le résultat de la conversion hexadécimale est = « 1d34f589 » string byte ; // Approche optimisée pour (int i = 0, k = 0; i < reversedDATA.length()/2.substr(k, 2); k+=2 ;; // ou vous pouvez simplement renvoyer l'octet lui-même // reversedDATA.length()/. retourne reversedDATA ;;; ArbitraryData = "abcdefgh" ; // N'importe quoi dans les 100 octets..length() + ArbitraryData.length(); // TOUTES LES VALEURS SONT HEXADECIMALES

Vous cherchez json parser/serialisation ? ?

  • Obtenir la bibliothèque nlohmann json
  • Inclure dans le dossier du projet
  • Un petit script batch utilisé mais rien de trop avancé.

    #include « json.hpp » // pour l’analyseur de sérialisation json #include // pour ifstream #include // pour les appels système #include « windows.h » // si sur Windows en utilisant l’espace de noms nlohmann ; en utilisant std : : ifstream;,;;.;; // exécute la commande // std ::cout