Cet article utilise Mac OS Sierra 10.12.4. Ceci est le troisième article lié au bitcoin.
Partie 1: Créer un environnement pour bitcoind avec docker Partie 2: Accéder à bitcoind depuis python
La dernière fois a obtenu un bloc de pièces de monnaie de python et est allé au point de regarder à l'intérieur. Les données Bitcoin sont une pile de blocs dans lesquels les transactions sont enregistrées. Étant donné que la transaction enregistre quelle adresse le bitcoin est passée de quelle adresse à quelle adresse, théoriquement, le solde de l'adresse peut être calculé à partir de leur accumulation.
Jetons d'abord un coup d'œil au contenu du bloc
Créer une connexion
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
rpc_user="bitcoinrpc"
rpc_password="passwordxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
rpc_connection = AuthServiceProxy("http://%s:%[email protected]:8332"%(rpc_user, rpc_password))
Obtenez un bloc avec une hauteur de bloc de 110000
blhash = rpc_connection.getblockhash(110000) #blhash est la chaîne de hachage de bloc
rpc_connection.getblock(blhash) #Obtenir des informations sur le bloc
résultat
{'bits': '1b01cc26',
'chainwork': '000000000000000000000000000000000000000000000000135fae65c9d5f919',
'confirmations': 219401,
'difficulty': Decimal('36459.88692507513'),
'hash': '000000000001bbda3f22ef8e476b470a2d3ae16821c23a6d22db77318d0799a9',
'height': 110000,
'mediantime': 1298490035,
'merkleroot': 'bb988af992654871e8cefe8bbe05e9f9679611eadcfa53980ee515978eebcd52',
'nextblockhash': '0000000000018d067c617c2e262e544bae4807e413122b1f4814077a15ac57c6',
'nonce': 3052574605,
'previousblockhash': '0000000000017947e1ea1c4f011b5bf712a9edd5e35d2c4db331f2d1764c593a',
'size': 3202,
'strippedsize': 3202,
'time': 1298491791,
'tx': ['4e10436ca8206a2dd760dd351210a5120a3824d4eb53011be0a7b9a33b368208',
'76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b',
'7452bfa629b104985f7c937e0f7836206935d83872882c88ae183234fe9bcf97',
'e325a8a968368aeb6d89bcdb362d311833f5a9fe5a80f3f0730b684922439a68',
'8510c531b585e77a66a986cb0dfdd0ca280ff0747d2dca0d6fa87b0f8af4810a',
'f9a5d31e7894c3983d38215060c55665db0024ad7fb373fa58db7316dd223ea9',
'83e74406b0876fed2db187444dd0a4f3eedad42e9adb32ce82b3ff729fe77b58',
'0f3e5f5b833dfad8ff19115ecd29fa40566aace67f2880da0ab4fa1acac00bcc',
'a1743f0803926ef4343e217c78324ec3e3ebc4cfc7c96739f3696b3c510cc7d1',
'5015ed6455e7d3fb50ce5ef1f63888fe7d4c37042f17f5f89bea176dce4ca0bd',
'7b14b05552f053a862df22824f92e94f155722f9e5d91341b934a6de010b6560',
'2564b40ef226c73eb63409f9dbdcc64aeacca6e3a7136e86156a64573ba3f6d1'],
'version': 1,
'versionHex': '00000001',
'weight': 12808}
Bien qu'il soit écrit de différentes manières, il s'agit d'une transaction dans laquelle tx est écrit dans un bloc. Il y en a 12 stockés dans ce bloc.
Jetons un coup d'œil à la transaction à l'intérieur du bloc précédent. Utilisez getrawtransaction pour vérifier le contenu de la transaction.
Obtenez le contenu de la transaction
rpc_connection.getrawtransaction("76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b")
résultat
'0100000001601f2f0143aa441690c7a2e1c90ae3696ceabf977afad8e08905a1efa20adced010000008b483045022100c3a2945b4cf7b6346a7e5e479bd3a7a2ca828ae6db2be5207f2377c737f64887022059116e34fded0bf5df39e2862cff59489b7701d60fe52367b62ea650b6360faf0141042d4b24c0c1a54e86399cc32e2f4b8524bae9442e6890960b4b11fd511794ccc16bd085102efdea3bb0f1809d10103f54db9597908eaf4f47bee694f73c742992ffffffff02404b4c00000000001976a914ec0994cb53016845edb1e207323faca42884629288ac40162094040000001976a914cb186543ad2d7c1195351678f1e94488c2813a0588ac00000000'
Tu ne sais pas ce que c'est, J'appellerai decoderawtransaction pour le décoder.
Décodage des transactions
rpc_connection.decoderawtransaction(rpc_connection.getrawtransaction(txid))
Résultat du décodage de la transaction
{'hash': '76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b',
'locktime': 0,
'size': 258,
'txid': '76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b',
'version': 1,
'vin': [{'scriptSig': {'asm': '3045022100c3a2945b4cf7b6346a7e5e479bd3a7a2ca828ae6db2be5207f2377c737f64887022059116e34fded0bf5df39e2862cff59489b7701d60fe52367b62ea650b6360faf[ALL] 042d4b24c0c1a54e86399cc32e2f4b8524bae9442e6890960b4b11fd511794ccc16bd085102efdea3bb0f1809d10103f54db9597908eaf4f47bee694f73c742992',
'hex': '483045022100c3a2945b4cf7b6346a7e5e479bd3a7a2ca828ae6db2be5207f2377c737f64887022059116e34fded0bf5df39e2862cff59489b7701d60fe52367b62ea650b6360faf0141042d4b24c0c1a54e86399cc32e2f4b8524bae9442e6890960b4b11fd511794ccc16bd085102efdea3bb0f1809d10103f54db9597908eaf4f47bee694f73c742992'},
'sequence': 4294967295,
'txid': 'eddc0aa2efa10589e0d8fa7a97bfea6c69e30ac9e1a2c7901644aa43012f1f60', #Reportez-vous à cette transaction pour connaître la destination et le montant du versement
'vout': 1 #Numéro de transaction auquel se référer}],
'vout': [{'n': 0,
'scriptPubKey': {'addresses': ['1NX3wzGPxFaMJotm2KcDjrqAYGwu3N7rXb'] #adresse de destination,
'asm': 'OP_DUP OP_HASH160 ec0994cb53016845edb1e207323faca428846292 OP_EQUALVERIFY OP_CHECKSIG',
'hex': '76a914ec0994cb53016845edb1e207323faca42884629288ac',
'reqSigs': 1,
'type': 'pubkeyhash'},
'value': Decimal('0.05000000') #Montant de la remise},
{'n': 1,
'scriptPubKey': {'addresses': ['1KWsPyZ9BYFq9izzRcQXeGffLunCAKx32d'] #adresse de destination,
'asm': 'OP_DUP OP_HASH160 cb186543ad2d7c1195351678f1e94488c2813a05 OP_EQUALVERIFY OP_CHECKSIG',
'hex': '76a914cb186543ad2d7c1195351678f1e94488c2813a0588ac',
'reqSigs': 1,
'type': 'pubkeyhash'},
'value': Decimal('196.65000000') #Montant de la remise}],
'vsize': 258}
C'est devenu une forme que vous pouvez comprendre d'une manière ou d'une autre. Il existe différents éléments, mais nous nous concentrerons uniquement sur le vin et le vout. L'adresse de destination et le montant sont inscrits sur le vout. En se concentrant sur la valeur, il indique 0,05 et 196,65. Pièce de 0,05 bit à l'adresse "1NX3wzGPxFaMJotm2KcDjrqAYGwu3N7rXb", Vous avez envoyé un total de pièces de 196,70 bits à des pièces de 196,65 bits à l'adresse «1KWsPyZ9BYFq9izzRcQXeGffLunCAKx32d».
vin a un autre txid (ID de transaction) et un numéro "vout" écrit dessus. Cela indique le numéro de l'adresse de destination et le montant inscrit dans la vout de cet ID de transaction. C'est un peu déroutant, ce qui signifie que vous devez vous rendre sur un autre txid écrit en vin pour obtenir la destination et le montant du transfert. Le code ressemble à ceci.
acquisition de transaction vin
txid = "76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b"
in_txid = rpc_connection.decoderawtransaction(rpc_connection.getrawtransaction(txid)).get("vin")[0].get("txid")
in_no = rpc_connection.decoderawtransaction(rpc_connection.getrawtransaction(txid)).get("vin")[0].get("vout")
rpc_connection.decoderawtransaction(rpc_connection.getrawtransaction(in_txid)).get("vout")[in_no]
résultat
{'n': 1,
'scriptPubKey': {'addresses': ['1LfAi3G7xYmZKjr823RHWTANnCYdZvmDhK'],
'asm': 'OP_DUP OP_HASH160 d7a24cc6e59ca8a1e553bc5c42c5f6e4c1277bbf OP_EQUALVERIFY OP_CHECKSIG',
'hex': '76a914d7a24cc6e59ca8a1e553bc5c42c5f6e4c1277bbf88ac',
'reqSigs': 1,
'type': 'pubkeyhash'},
'value': Decimal('196.70000000')}
Vous pouvez voir que vin envoie des pièces de 196,70 bits. C'est la même chose que la somme des vouts. En d'autres termes, il s'agit de l'adresse "1LfAi3G7xYmZKjr823RHWTANnCYdZvmDhK" Pièce de 0,05 bit pour «1NX3wzGPxFaMJotm2KcDjrqAYGwu3N7rXb» Il s'agit d'une transaction dans laquelle des pièces de 196,65 bits ont été envoyées à "1KWsPyZ9BYFq9izzRcQXeGffLunCAKx32d".
Cela ressemble à ceci sur la figure.
À ce stade, vous avez réussi à capturer la transaction. Si vous suivez cela à partir de l'historique passé, vous pouvez vérifier l'augmentation / la diminution des pièces de monnaie dans l'adresse.
Une partie du résultat d'acquisition
Transaction de hauteur de bloc d'addition de soustraction d'adresse
0 12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX 0 50.0 1 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68be...
1 coinbase 0 0.0 1 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68be...
2 1HLoD9E4SDFFPDiYfNYnkBLQ85Y51J3Zb1 0 50.0 2 9b0fc92260312ce44e74ef369f5c66bbb85848f2eddd5a...
3 coinbase 0 0.0 2 9b0fc92260312ce44e74ef369f5c66bbb85848f2eddd5a...
4 1FvzCLoTPGANNjWoUo6jUGuAG3wg1w4YjR 0 50.0 3 999e1c837c76a1b7fbb7e57baf87b309960f5ffefbf2a9...
C'est sorti. Cette fois, j'ai ciblé les premiers blocs, c'est donc un record lorsque Satoshina Kamoto minait. coinbase est un disque miné, officiellement créé. La déduction est l'enregistrement de transfert et l'ajout est l'enregistrement de réception. Ce bloc est uniquement minier, vous venez donc de recevoir des pièces de 50 bits de coinbase.
De cette façon, il a été confirmé que la blockchain est prête à permettre à quiconque de vérifier l'enregistrement de la transaction en tant que registre tiers.
Recommended Posts