[PYTHON] Vérifiez l'augmentation / la diminution des pièces de monnaie pour chaque adresse de la blockchain

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

Vérifiez l'augmentation / diminution des pièces de monnaie de la transaction

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.

Jetez un œil au contenu du bloc

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.

Jetez un œil au contenu de la transaction

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. スクリーンショット 2017-07-16 11.51.46.png

Obtenez une augmentation / diminution de Bitcoin pour chaque adresse

À 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

Vérifiez l'augmentation / la diminution des pièces de monnaie pour chaque adresse de la blockchain
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
Vérifier l'existence de tables BigQuery en Java
Attribuer une date au nom du PDF décomposé pour chaque page
Vérifiez le temps de traitement et le nombre d'appels pour chaque processus avec python (cProfile)
Obtenez le nombre d'occurrences pour chaque élément de la liste
[tensorflow, keras, mnist] Extraire n feuilles pour chaque étiquette à partir des données mnist et créer 10 * n feuilles de données.
Etudier le web scraping dans le but d'extraire des données de Filmarks # 2
Vérifiez la protection de la mémoire de Linux Kerne avec le code pour ARM
python Remarque: map -faire la même chose pour chaque élément de la liste
(Pour les avocats) Extraire le comportement du logiciel Office à partir de fichiers .evtx
Existence du point de vue de Python
Enquête pour l'utilisation pratique de BlockChain
Augmenter la taille de l'interface utilisateur de MyPaint
Obtenir une adresse à partir d'un code postal
J'ai essayé d'analyser les résultats du vote de la région métropolitaine d'Osaka pour chaque quartier
[Ota Ward] Vérifiez l'état du traitement des demandes de prestations forfaitaires spéciales
Obtenir la liste des packages de l'utilisateur spécifié à partir des packages enregistrés dans PyPI