[PYTHON] Überprüfen Sie die Zunahme / Abnahme der Bitmünzen für jede Adresse aus der Blockchain

Dieser Artikel verwendet Mac OS Sierra 10.12.4. Dies ist der dritte Artikel zu Bitcoin.

Teil 1: Erstellen einer Umgebung für Bitcoind mit Docker Teil 2: Zugriff auf Bitcoind von Python

Überprüfen Sie die Zunahme / Abnahme der Bitmünzen aus der Transaktion

Letztes Mal holte einen Block Bitmünzen von Python und schaute nach innen. Bitcoin-Daten sind ein Stapel von Blöcken, in denen Transaktionen aufgezeichnet werden. Da die Transaktion aufzeichnet, welche Adresse das Bitcoin von welcher Adresse zu welcher Adresse verschoben hat, kann theoretisch der Saldo der Adresse aus ihrer Anhäufung berechnet werden.

Schauen Sie sich den Inhalt des Blocks an

Schauen wir uns zunächst den Inhalt des Blocks an

Verbindung herstellen


from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
rpc_user="bitcoinrpc"
rpc_password="passwordxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
rpc_connection = AuthServiceProxy("http://%s:%[email protected]:8332"%(rpc_user, rpc_password))

Holen Sie sich einen Block mit einer Blockhöhe von 110.000


blhash = rpc_connection.getblockhash(110000) #blhash ist die Block-Hash-Zeichenfolge
rpc_connection.getblock(blhash) #Blockinformationen abrufen

Ergebnis


{'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}

Obwohl es auf verschiedene Arten geschrieben ist, ist es eine Transaktion, bei der tx in einen Block geschrieben wird. In diesem Block sind 12 gespeichert.

Schauen Sie sich den Inhalt der Transaktion an

Werfen wir einen Blick auf die Transaktion im vorherigen Block. Verwenden Sie getrawtransaction, um den Inhalt der Transaktion zu überprüfen.

Holen Sie sich den Inhalt der Transaktion


rpc_connection.getrawtransaction("76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b")

Ergebnis


'0100000001601f2f0143aa441690c7a2e1c90ae3696ceabf977afad8e08905a1efa20adced010000008b483045022100c3a2945b4cf7b6346a7e5e479bd3a7a2ca828ae6db2be5207f2377c737f64887022059116e34fded0bf5df39e2862cff59489b7701d60fe52367b62ea650b6360faf0141042d4b24c0c1a54e86399cc32e2f4b8524bae9442e6890960b4b11fd511794ccc16bd085102efdea3bb0f1809d10103f54db9597908eaf4f47bee694f73c742992ffffffff02404b4c00000000001976a914ec0994cb53016845edb1e207323faca42884629288ac40162094040000001976a914cb186543ad2d7c1195351678f1e94488c2813a0588ac00000000'

Sie wissen nicht, was das ist, Ich werde decoderawtransaction aufrufen, um es zu decodieren.

Transaktionen dekodieren


rpc_connection.decoderawtransaction(rpc_connection.getrawtransaction(txid))

Transaktionsdecodierungsergebnis


{'hash': '76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b',
 'locktime': 0,
 'size': 258,
 'txid': '76dc5788be4a8cf6925aff15fd8c8fbf6417b4ad6c30a1ac12cd117e95c5820b',
 'version': 1,
 'vin': [{'scriptSig': {'asm': '3045022100c3a2945b4cf7b6346a7e5e479bd3a7a2ca828ae6db2be5207f2377c737f64887022059116e34fded0bf5df39e2862cff59489b7701d60fe52367b62ea650b6360faf[ALL] 042d4b24c0c1a54e86399cc32e2f4b8524bae9442e6890960b4b11fd511794ccc16bd085102efdea3bb0f1809d10103f54db9597908eaf4f47bee694f73c742992',
    'hex': '483045022100c3a2945b4cf7b6346a7e5e479bd3a7a2ca828ae6db2be5207f2377c737f64887022059116e34fded0bf5df39e2862cff59489b7701d60fe52367b62ea650b6360faf0141042d4b24c0c1a54e86399cc32e2f4b8524bae9442e6890960b4b11fd511794ccc16bd085102efdea3bb0f1809d10103f54db9597908eaf4f47bee694f73c742992'},
   'sequence': 4294967295,
   'txid': 'eddc0aa2efa10589e0d8fa7a97bfea6c69e30ac9e1a2c7901644aa43012f1f60', #Informationen zu Bestimmungsort und Überweisungsbetrag finden Sie in dieser Transaktion
   'vout': 1 #Nummer der Transaktion, auf die Bezug genommen werden soll}],
 'vout': [{'n': 0,
   'scriptPubKey': {'addresses': ['1NX3wzGPxFaMJotm2KcDjrqAYGwu3N7rXb'] #Zieladresse,
    'asm': 'OP_DUP OP_HASH160 ec0994cb53016845edb1e207323faca428846292 OP_EQUALVERIFY OP_CHECKSIG',
    'hex': '76a914ec0994cb53016845edb1e207323faca42884629288ac',
    'reqSigs': 1,
    'type': 'pubkeyhash'},
   'value': Decimal('0.05000000') #Überweisungsbetrag},
  {'n': 1,
   'scriptPubKey': {'addresses': ['1KWsPyZ9BYFq9izzRcQXeGffLunCAKx32d'] #Zieladresse,
    'asm': 'OP_DUP OP_HASH160 cb186543ad2d7c1195351678f1e94488c2813a05 OP_EQUALVERIFY OP_CHECKSIG',
    'hex': '76a914cb186543ad2d7c1195351678f1e94488c2813a0588ac',
    'reqSigs': 1,
    'type': 'pubkeyhash'},
   'value': Decimal('196.65000000') #Überweisungsbetrag}],
 'vsize': 258}

Es ist eine Form geworden, die man irgendwie verstehen kann. Es gibt verschiedene Artikel, aber wir werden uns nur auf vin und vout konzentrieren. Auf dem vout sind die Zieladresse und der Betrag angegeben. Konzentriert man sich auf den Wert, heißt es 0,05 und 196,65. 0,05-Bit-Münze an der Adresse "1NX3wzGPxFaMJotm2KcDjrqAYGwu3N7rXb", Sie haben insgesamt 196,70-Bit-Münzen an 196,65-Bit-Münzen an die Adresse "1KWsPyZ9BYFq9izzRcQXeGffLunCAKx32d" gesendet.

Auf vin steht eine andere txid (Transaktions-ID) und "vout" -Nummer. Dies gibt die Nummer der Zieladresse und den Betrag an, die im vout dieser Transaktions-ID geschrieben sind. Es ist ein bisschen verwirrend, was bedeutet, dass Sie zu einem anderen in vin geschriebenen txid gehen müssen, um das Ziel und den Betrag der Übertragung zu erhalten. Der Code sieht so aus.

vin Transaktionsakquisition


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]

Ergebnis


{'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')}

Sie können sehen, dass vin 196,70-Bit-Münzen sendet. Dies ist die gleiche Summe wie die Summe der Vouts. Mit anderen Worten, dies ist von der Adresse "1LfAi3G7xYmZKjr823RHWTANnCYdZvmDhK". 0,05-Bit-Münze für "1NX3wzGPxFaMJotm2KcDjrqAYGwu3N7rXb" Dies ist eine Transaktion, bei der 196,65-Bit-Münzen an "1KWsPyZ9BYFq9izzRcQXeGffLunCAKx32d" gesendet wurden.

In der Abbildung sieht es so aus. スクリーンショット 2017-07-16 11.51.46.png

Holen Sie sich Bitcoin erhöhen / verringern für jede Adresse

Zu diesem Zeitpunkt haben Sie die Transaktion erfolgreich erfasst. Wenn Sie dies aus der Vergangenheit verfolgen, können Sie die Zunahme / Abnahme der Bitmünzen in der Adresse überprüfen.

Teil des Akquisitionsergebnisses

Blocktransaktion für Adresssubtraktionsadditionsblock
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...

Es ist aus. Da wir dieses Mal auf die frühen Blöcke abgezielt haben, ist es ein Rekord, als Satoshina Kamoto Bergbau betrieben hat. Coinbase ist eine abgebaute Aufzeichnung, die formell gerade erstellt wurde. Der Abzug ist der Überweisungsdatensatz und der Zusatz ist der Belegdatensatz. Dieser Block ist nur Bergbau, Sie haben also gerade 50-Bit-Münzen von Coinbase erhalten.

Auf diese Weise wurde bestätigt, dass die Blockchain für jedermann bereit ist, den Transaktionsdatensatz als Ledger eines Drittanbieters zu überprüfen.

Recommended Posts

Überprüfen Sie die Zunahme / Abnahme der Bitmünzen für jede Adresse aus der Blockchain
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Überprüfen Sie, ob in Java BigQuery-Tabellen vorhanden sind
Weisen Sie dem Namen der zerlegten PDF-Datei für jede Seite ein Datum zu
Überprüfen Sie die Verarbeitungszeit und die Anzahl der Aufrufe für jeden Prozess mit Python (cProfile).
Ermitteln Sie die Anzahl der Vorkommen für jedes Element in der Liste
[tensorflow, keras, mnist] Extrahieren Sie n Blätter für jedes Etikett aus den Daten von mnist und erstellen Sie 10 * n Datenblätter.
Studieren von Web Scraping zum Extrahieren von Daten aus Filmarks # 2
Überprüfen Sie den Speicherschutz von Linux Kern mit Code für ARM
Python Hinweis: Map - Machen Sie dasselbe für jedes Element der Liste
(Für Anwälte) Extrahieren Sie das Verhalten von Office-Software aus .evtx-Dateien
Existenz aus Sicht von Python
Untersuchung zur praktischen Anwendung von BlockChain
Erhöhen Sie die Benutzeroberfläche von MyPaint
Holen Sie sich eine Adresse aus einer Postleitzahl
Ich habe versucht, die Abstimmungsergebnisse der Metropolregion Osaka für jede Gemeinde zu analysieren
[Ota Ward] Überprüfen Sie den Status der Antragsbearbeitung auf besondere Pauschalleistungen
Rufen Sie die Paketliste des angegebenen Benutzers aus den in PyPI registrierten Paketen ab