web-dev-qa-db-fra.com

Voici comment envoyer une transaction BTC brute à l'aide de la commande Bitcoin-cli

Scénario:

Michael reçoit 0,05000000 BTC de Pablo et un autre 0,01000000 BTC de Kuradang. Michael souhaite également envoyer 0,02500000 BTC à Berteng . Chaque montant que Michael reçoit a le txid correspondant et autre détails. Vérifions cela en utilisant la commande listunspent puis créons un transaction brute utilisant createrawtransaction après cette signature en utilisant signrawtransaction et envoyez cette transaction brute en utilisant sendrawtransaction.

Donné:

  • Adresse Bitcoin de Michael: mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe
  • L'adresse Bitcoin de Berteng: mxh3H416KCRoBDiweSESew5YJyAk1nxLrN
  • Envoyer à Berteng: 0.02500000 mBTC

Étape 1)

listunspent

Format:

$ bitcoin-cli listunspent [misconf=1] [max_number_confirmation=99999999] '''["<wallet_address>"]'''

Permet de vérifier la liste des achats non dépensés de Michael avec son adresse.

Execute:

$ bitcoin-cli listunspent 1 99999999 '''["mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe"]'''

Résultat:

[{
    "txid": "12b8e7ede4992f4d30f93idj3085746951d945e39f40becebd7c290af8c2e7ad",
    "vout": 1,
    "address": "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe",
    "account": "micz",
    "scriptPubKey": "76a9143aa28e1740a6a5a2190975b6e7f1ad67aaec9a3988ac",
    "amount": 0.05000000,
    "confirmations": 94,
    "spendable": true
}, {
    "txid": "8443bc63b65d569ff9ekwm37sy3b67b9c7c6f8f386c3cdf372b260961b64ec9fc",
    "vout": 1,
    "address": "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe",
    "account": "micz",
    "scriptPubKey": "76a9143aa28e1740a6a5a2190975b6e7f1ad67aaec9a3988ac",
    "amount": 0.01000000,
    "confirmations": 93,
    "spendable": true
}]

Ce que nous voyons ici, ce sont les résultats qui ont affecté 50 et 10 mBTC à notre adresse mkrz…. Pour utiliser cette sortie, nous allons créer une nouvelle transaction.

Étape 2)

createrawtransaction

Nous devons choisir des blocs avec une quantité suffisante du résultat de listunspent. Comme nous n’avons besoin que d’envoyer 0,02500000 mBTC, je pense que le premier bloc a le montant suffisant pour effectuer la transaction.

Format:

$ bitcoin-cli createrawtransaction
    '[{
        "txid" : "<txid_of_selected_block>",
        "vout" : <vout>
    }]'
    '{"<recipient_address>": <amount_to_send>, "<sender_address>": <amount_change>}'

Pour payer les frais, nous réduirons la production de modification de 0,5 millibits à l’aide de vous pouvez voir ci-dessous.

Execute:

$ bitcoin-cli createrawtransaction
    '[{
        "txid" : "12b8e7ede4992f4d30f93idj3085746951d945e39f40becebd7c290af8c2e7ad",
        "vout" : 0
    }]'
    '{"mxh3H416KCRoBDiweSESew5YJyAk1nxLrN": 0.025, "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe": 0.0245}'

Résultat

0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c0000000000ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000

La commande createrawtransaction génère une chaîne hexadécimale brute qui code les détails de la transaction que nous avons fournis. Si vous voulez décoder le hex utilise simplement la commande decoderawtransaction.

Étape 3)

signrawtransaction

signe la transaction au format de transaction sérialisée à l'aide de clés privées stockées dans le portefeuille ou fournies dans l'appel.

Format:

$ bitcoin-cli signrawtransaction <hex_createrawtransaction>

Execute:

$ bitcoin-cli signrawtransaction 0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c0000000000ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000

Résultat:

{
   "hex" : "0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c000000006a47304402203e8a16522da80cef66bacfbc0c800c6d52c4a26d1d86a54e0a1b76d661f020c9022010397f00149f2a8fb2bc5bca52f2d7a7f87e3897a273ef54b277e4af52051a06012103c9700559f690c4a9182faa8bed88ad8a0c563777ac1d3f00fd44ea6c71dc5127ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000",
   "complete" : true
}

À présent, la commande signrawtransaction renvoie un autre fichier brut .__ codé en hexadécimal. transaction.

Étape 4)

sendrawtransaction

RPC valide une transaction et la diffuse vers le peer-to-peer réseau.

Format:

$ bitcoin-cli sendrawtransaction <hex_signrawtransaction>

Execute:

$ bitcoin-cli sendrawtransaction 0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c000000006a47304402203e8a16522da80cef66bacfbc0c800c6d52c4a26d1d86a54e0a1b76d661f020c9022010397f00149f2a8fb2bc5bca52f2d7a7f87e3897a273ef54b277e4af52051a06012103c9700559f690c4a9182faa8bed88ad8a0c563777ac1d3f00fd44ea6c71dc5127ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000

Résultat:

ae74538baa914f3799081ba78429d5d84f36a0127438e9f721dff584ac17b346

La commande sendrawtransaction renvoie un hachage de transaction (txid) sous la forme soumet la transaction sur le réseau. Pour vérifier le hash de la transaction, vous pouvez aller à tbtc.blockr.io

Pour plus d'informations, voir ce site mastering bitcoin

14
Michael Blanza

Implémentation multisig de send rawtransaction dans un environnement regtest)

1) Créer une Rawtransaction

syntaxe:

bitcoin-cli -regtest createrawtransaction '[{"txid": "", "vout":}]' '{"receive_address": amount}'

Exemple: 

 > bitcoin-cli -regtest createrawtransaction
    > '[{"txid":"eee0de90e9878c039f87c9eedbdf5b9a5da157b19e5354a51ff3b2f84c8a901b","vout":0},]'
    > '{"2MxieCJNTKiiBj6U3SjghQaatZYbM7Qn6GW":30}'

2) Signer la transaction brute

syntaxe

<hexstring> [{"txid":txid,"vout":n,"scriptPubKey":hex},...] [<privatekey1>,...]
bitcoin-cli -regtest signrawtransaction "0200000001a1c33ebb12d94f96effc70c9dd4488faf32dc15269d6a41d115ac956033cadbb0100000000ffffffff0100e1f505000000001976a9145768a869521bb01af8bdd787e6e1e65ec3d9870e88ac00000000" '''
        [
          {
            "txid":"bbad3c0356c95a111da4d66952c12df3fa8844ddc970fcef964fd912bb3ec3a1",
            "vout":1,
            "scriptPubKey":"a91401a8f0509da2396f58d3f9948a76331964524c9687",
            "redeemScript": "5221022d6f957dd76773432d2493edb5601b2d0791286e31c83483ab299672c3d44fc921022dd9c36eece99cc308986a8334c3a0bf24d7ef8b842dacebf56f2477b0f6daab21030544c9613bf27c9773e6fcd79c7786a297188a2647d346da0c3305e22d3e28da53ae"
          }
        ] 
    ''' '''
    [
    "cUdhE3NvePyjqksgJTc5BQfXGDJckPgEKfoRT72x2BRoG2uMS81H"
    ]
    '''

o/p sera un hexagone que je stocke comme

signed_raw_txn = 0200000001a1c33ebb12d94f96effc70c9dd4488faf32dc15269d6a41d115ac956033cadbb01000000fdfe0000483045022100f9561640d9cf6c7fa7decdd2a3e0c40b0f05d167ee96f22dc11b7ef120c8483902201e53915eed3399e07a4e2648ab76c665fca6486d872d10964ad1926e792d2d6001483045022100a0a084182fb84efdf21757b9caa723cb013a469dc47c5bd8007c23f6201260c8022014fa11cb241c2e63ed0a043aceb1c3f89344c22b4ea6662f93da30820ef18796014c695221022d6f957dd76773432d2493edb5601b2d0791286e31c83483ab299672c3d44fc921022dd9c36eece99cc308986a8334c3a0bf24d7ef8b842dacebf56f2477b0f6daab21030544c9613bf27c9773e6fcd79c7786a297188a2647d346da0c3305e22d3e28da53aeffffffff0100e1f505000000001976a9145768a869521bb01af8bdd787e6e1e65ec3d9870e88ac00000000

3) envoyer rawtransaction

bitcoin-cli -regtest sendrawtransaction $signed_raw_txn
2
cryptoKTM

Encore une autre façon plus simple avec quelques fundrawtransaction supplémentaires. Les docs nous disent quelles entrées et sortent tous les champs obligatoires. Mais n'oubliez pas que la liste vide est aussi un objet:

Étape 1)

$ bitcoin-cli createrawtransaction '[]' \
    '{"mxh3H416KCRoBDiweSESew5YJyAk1nxLrN": 0.025}'

Étape 2)

$ bitcoin-cli fundrawtransaction <hex_createrawtransaction> \
    '{"changeAddress": "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe"}'

Après la deuxième étape, vous pouvez consulter les frais générés par votre portefeuille. Et changez-le avec l'option feeRate de la commande fundrawtransaction. Tout cela peut être fait avant de signer et d’envoyer au réseau votre transaction.

1