Im vorigen Artikel BitcoinJ 03 Daten aus einem Wallet auslesen haben wir wichtige Informationen rund um unsere Geldbörse und die darin gespeicherten Transaktionen ausgelesen. Wer nun wissen möchte, welche Informationen noch zusätzlich einer Transaktion verborgen sind, dem empfehle ich diese erweiterte Version des Programms.
Weiterhin benötigt Ihr diverse Bibliotheken zur Nutzung von BitcoinJ – ladet Euch diese aus dem separaten Github-Archiv (https://github.com/java-crypto/BitcoinJ_Libraries) herunter und bindet Sie über Eure Entwicklungsumgebung ein.
Auch hier zeige ich zuerst die Konsolenausgabe und dann den Quellcode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
BitcoinJ 03 Daten eines Wallets Extended Wir benutzen für unsere Versuche das Bitcoin Testnetz und nicht das Mainnetz Laden einer bestehenden Walletdatei - die Datei bitcoinj02createwalletW.wallet wird geladen ********************************************************************************** Ausgabe von Daten des Wallets Adresse für Zahlungseingänge: n3Wa5ZC1ihiR4BbUBU2tfq4A7v14kanTiq Balances (Guthaben) Balance bei Abfrage getBalance : 1626622 Balance bei Abfrage getBalance().toFriendlyString() : 0.01626622 BTC Balance bei Abfrage getBalance(Wallet.BalanceType.AVAILABLE) : 1626622 Balance bei Abfrage getBalance(Wallet.BalanceType.AVAILABLE_SPENDABLE): 0 Balance bei Abfrage getBalance(Wallet.BalanceType.ESTIMATED) : 1626622 Balance bei Abfrage getBalance(Wallet.BalanceType.ESTIMATED_SPENDABLE): 0 Transaktionen im Wallet Es befinden sich 4 Transaktionen im Wallet --------------------------------------------------------------------------------- Transaktion Nummer 1 Zahlungseingang Transaktions-Id: 18866d7e03a0b8958769382afe24ff7671fbc911cbdf3006fd1fbb3a3c49c4cf Transaktionsdatum : Wed Mar 11 13:45:06 CET 2020 Transaktionsbetrag (getValue) : 0.01098238 BTC Transaktionsgebuehr (fee) : wegen Zahlungseingang keine Fee Grund der Transaktion (purpose) : UNKNOWN Confidence (Bestaetigungen) : Appeared in best chain at height 1669535, depth 66. Source: NETWORK Confidence (Bestaetigungen) (Depth/Tiefe): 66 Confidence (Bestaetigungen) (Type) : BUILDING Confidence (Bestaetigungen) (ChainHeight): 1669535 Transaction{18866d7e03a0b8958769382afe24ff7671fbc911cbdf3006fd1fbb3a3c49c4cf, wtxid 737f09206fe0b153d50ae0ad237c6e80552cb7df8d147152776bb1cb7cb9ae34 updated: 2020-03-11T12:45:06Z version 2 time locked until block 1669534 purpose: UNKNOWN in PUSHDATA(22)[0014f291210a0ee3a75b033aa10926af271d96524f20] witness:304402201f65f5b84b7479e46d8554232ac9946589415f6835b2209ec0f0f6a9ece01e31022010f405898ec29a46e41343ae0964094646941e33565b2642b58b694d8f03a08501 03193529144a6d7b8a1d3f5401881c28e821d9d7abc4158c730a97df620394e695 unconnected outpoint:9dc7316f5a43dd42c3f20c4f0e1d2870eef4ec683cf251ca4e3b543336946502:1 sequence:fffffffe out DUP HASH160 PUSHDATA(20)[f190520f1bf78f5f418ec574a4b0ffcc67c3e8bd] EQUALVERIFY CHECKSIG 0.01098238 BTC P2PKH addr:n3YE2rPKNhefnjrSHvEScXazNaSyeK52ML spent by:905277665a3eb6cd1cf0af30b00f15db3ec6fc7ae86b3c150aa2fdcdb589d0b1:0 out HASH160 PUSHDATA(20)[68a66f6d6a304638780e5e91aa9accce4d9d7a14] EQUAL 77.54615822 BTC P2SH addr:2N2nZeMnQYrxnE8yJbG3gZ7EUa6HP29RGRL } --------------------------------------------------------------------------------- Transaktion Nummer 2 Zahlungsausgang Transaktions-Id: 905277665a3eb6cd1cf0af30b00f15db3ec6fc7ae86b3c150aa2fdcdb589d0b1 Transaktionsdatum : Wed Mar 11 14:55:45 CET 2020 Transaktionsbetrag (getValue) : -0.005225 BTC Transaktionsgebuehr (getFee) : -0.000225 BTC Transaktionsbetrag (getValueSendFromMe) : -0.01098238 BTC Transaktionsbetrag (getValueSendToMe) : 0.00575738 BTC Transaktionsbetrag an Empfaenger : -0.005 BTC Grund der Transaktion (purpose) : UNKNOWN Confidence (Bestaetigungen) : Appeared in best chain at height 1669539, depth 62. Source: NETWORK Confidence (Bestaetigungen) (Depth/Tiefe): 62 Confidence (Bestaetigungen) (Type) : BUILDING Confidence (Bestaetigungen) (ChainHeight): 1669539 Transaction{905277665a3eb6cd1cf0af30b00f15db3ec6fc7ae86b3c150aa2fdcdb589d0b1 updated: 2020-03-11T13:55:45Z purpose: UNKNOWN in PUSHDATA(71)[304402201c175385ce3dd9ca411060949b3f5bfc16840623236aee73bb88002ab5cdb0fc0220797f97d2fedf72de4493e7c745cd7b0f55ee416a4f84adb95815d418545dfead01] PUSHDATA(33)[02c8508a80ac5c29b891a443b599e827155a71cb9ab702c3745a083bbbdc98155a] 0.01098238 BTC P2PKH addr:n3YE2rPKNhefnjrSHvEScXazNaSyeK52ML outpoint:18866d7e03a0b8958769382afe24ff7671fbc911cbdf3006fd1fbb3a3c49c4cf:0 out DUP HASH160 PUSHDATA(20)[c17fe3e9ea4561d70dc255a266d5eab4c8e10997] EQUALVERIFY CHECKSIG 0.00575738 BTC P2PKH addr:myA5v3sQo4VdhFGNJ9Gv22aRLnw7q7KhDw spent by:3b04ff0742625ad5123e3a6bc74b407fde68e098c97244bd6a413b9550effe34:0 out HASH160 PUSHDATA(20)[41a37afc980ac078df37b24f2a687102f79b0ab3] EQUAL 0.005 BTC P2SH addr:2MyEHka6Whdt87LyK3VuUGGfuWkNTtSD3Hj fee 0.00100896 BTC/kB, 0.000225 BTC for 223 bytes } --------------------------------------------------------------------------------- Transaktion Nummer 3 Zahlungsausgang Transaktions-Id: 3b04ff0742625ad5123e3a6bc74b407fde68e098c97244bd6a413b9550effe34 Transaktionsdatum : Thu Mar 12 11:22:01 CET 2020 Transaktionsbetrag (getValue) : -0.001425 BTC Transaktionsgebuehr (getFee) : -0.000225 BTC Transaktionsbetrag (getValueSendFromMe) : -0.00575738 BTC Transaktionsbetrag (getValueSendToMe) : 0.00433238 BTC Transaktionsbetrag an Empfaenger : -0.0012 BTC Grund der Transaktion (purpose) : UNKNOWN Confidence (Bestaetigungen) : Appeared in best chain at height 1669600, depth 1. Source: NETWORK Confidence (Bestaetigungen) (Depth/Tiefe): 1 Confidence (Bestaetigungen) (Type) : BUILDING Confidence (Bestaetigungen) (ChainHeight): 1669600 Transaction{3b04ff0742625ad5123e3a6bc74b407fde68e098c97244bd6a413b9550effe34 updated: 2020-03-12T10:22:01Z purpose: UNKNOWN in PUSHDATA(72)[3045022100f873e0f5d4d3b9302aaa2cb374443e000a5c2e17cdd44bb4389056a36ab935880220632dd6451bcf235f20393f3545eaec98a0159fda9281031eb1851bf5e5f90cc301] PUSHDATA(33)[0325eab72b88d818f9b61456586151eeeafed64687c0ea666e8b9c64d57074a435] 0.00575738 BTC P2PKH addr:myA5v3sQo4VdhFGNJ9Gv22aRLnw7q7KhDw outpoint:905277665a3eb6cd1cf0af30b00f15db3ec6fc7ae86b3c150aa2fdcdb589d0b1:0 out HASH160 PUSHDATA(20)[41a37afc980ac078df37b24f2a687102f79b0ab3] EQUAL 0.0012 BTC P2SH addr:2MyEHka6Whdt87LyK3VuUGGfuWkNTtSD3Hj out DUP HASH160 PUSHDATA(20)[446f865811cad957a865e4514e83f1234bf708d8] EQUALVERIFY CHECKSIG 0.00433238 BTC P2PKH addr:mmkoqyZzzP9fPS6LD6i1xPy7UtAkX1YLi7 fee 0.00100446 BTC/kB, 0.000225 BTC for 224 bytes } --------------------------------------------------------------------------------- Transaktion Nummer 4 Zahlungseingang Transaktions-Id: aa844f9e5f93716e5207b1479ba9c1209a3660a1a1514f9f0d6b3fa0164e1770 Transaktionsdatum : Thu Mar 12 11:22:01 CET 2020 Transaktionsbetrag (getValue) : 0.01193384 BTC Transaktionsgebuehr (fee) : wegen Zahlungseingang keine Fee Grund der Transaktion (purpose) : UNKNOWN Confidence (Bestaetigungen) : Appeared in best chain at height 1669600, depth 1. Source: NETWORK Confidence (Bestaetigungen) (Depth/Tiefe): 1 Confidence (Bestaetigungen) (Type) : BUILDING Confidence (Bestaetigungen) (ChainHeight): 1669600 Transaction{aa844f9e5f93716e5207b1479ba9c1209a3660a1a1514f9f0d6b3fa0164e1770, wtxid bace738da6e6564ea8e1f2a0e861a4eefa3fbbd24d5600490c616d5b71b22e08 updated: 2020-03-12T10:22:01Z version 2 time locked until block 1669599 purpose: UNKNOWN in PUSHDATA(22)[0014c8ddfc57886eefc15d8aca178e0af380bfc438e6] witness:304402203f446ad12147b0c2d765767e844e6c44c9f72fb7662e720d1ba90adc9a723a730220441130bcec59dba0d47a8bc1b679e157ff7a08b1ca98561db9adc16e3dd87b2c01 022142a70a3d1c0e197c2031a2101bbb0192d915f0f0a00d2ead931b8d8a2e3010 unconnected outpoint:b28a7c419643181599db28f288c861d4ca9c87f26a3ea82028fc787f51acb5ee:1 sequence:fffffffe out HASH160 PUSHDATA(20)[d41022753b1f1f4fd4c2f2e7cdd51afd86623b43] EQUAL 71.17587963 BTC P2SH addr:2NCaWa1AswER8a2tTNFbRrRgbo6nnAEHmKb out DUP HASH160 PUSHDATA(20)[f140390225dabfac9d9a5157f5f27140948f9a75] EQUALVERIFY CHECKSIG 0.01193384 BTC P2PKH addr:n3Wa5ZC1ihiR4BbUBU2tfq4A7v14kanTiq } ********************************************************************************** |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
/* * Herkunft/Origin: http://javacrypto.bplaced.net/ * Programmierer/Programmer: Michael Fehr * Copyright/Copyright: Michael Fehr * Lizenttext/Licence: verschiedene Lizenzen / several licenses * getestet mit/tested with: Java Runtime Environment 11.0.5 x64 * verwendete IDE/used IDE: intelliJ IDEA 2019.3.1 * Datum/Date (dd.mm.jjjj): 11.03.2020 * Funktion: 03 Liest Daten eines Wallets aus * Function: 03 Get data from a wallet * * Sicherheitshinweis/Security notice * Die Programmroutinen dienen nur der Darstellung und haben keinen Anspruch auf eine korrekte Funktion, * insbesondere mit Blick auf die Sicherheit ! * Prüfen Sie die Sicherheit bevor das Programm in der echten Welt eingesetzt wird. * The program routines just show the function but please be aware of the security part - * check yourself before using in the real world ! * * Sie benötigen diverse Bibliotheken (alle im Github-Archiv im Unterordner "libs") * You need a lot of libraries (see my Github-repository in subfolder "libs") * verwendete BitcoinJ-Bibliothek / used BitcoinJ Library: bitcoinj-core-0.15.6.jar * my Github-Repository: https://github.com/java-crypto/BitcoinJ * libs in my Github-Repo: https://github.com/java-crypto/BitcoinJ_Libraries * */ import org.bitcoinj.core.Coin; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.core.Transaction; import org.bitcoinj.params.TestNet3Params; import org.bitcoinj.wallet.UnreadableWalletException; import org.bitcoinj.wallet.Wallet; import java.io.File; import java.io.IOException; import java.util.ArrayList; public class BitcoinJ03GetDataFromWalletExtended { public static void main(String[] args) throws IOException, UnreadableWalletException { System.out.println("BitcoinJ 03 Daten eines Wallets Extended"); System.out.println("Wir benutzen für unsere Versuche das Bitcoin Testnetz und nicht das Mainnetz"); NetworkParameters netParams = TestNet3Params.get(); //NetworkParameters netParams = MainNetParams.get(); String filenameWallet = "bitcoinj02createwalletW.wallet"; // notice: uses the watching wallet version final File walletFile = new File(filenameWallet); Wallet wallet = null; if (walletFile.exists()) { System.out.println("Laden einer bestehenden Walletdatei - die Datei " + filenameWallet + " wird geladen"); wallet = Wallet.loadFromFile(walletFile); } else { System.out.println("Die Datei " + filenameWallet + " ist nicht vorhanden und das Programm wird beendet"); System.exit(0); } System.out.println("**********************************************************************************"); System.out.println("Ausgabe von Daten des Wallets"); System.out.println("\nAdresse für Zahlungseingänge: " + wallet.currentReceiveAddress()); System.out.println("\nBalances (Guthaben)"); System.out.println("Balance bei Abfrage getBalance : " + wallet.getBalance()); System.out.println("Balance bei Abfrage getBalance().toFriendlyString() : " + wallet.getBalance().toFriendlyString()); // verschiedene BalanceTypes: System.out.println("Balance bei Abfrage getBalance(Wallet.BalanceType.AVAILABLE) : " + wallet.getBalance(Wallet.BalanceType.AVAILABLE)); System.out.println("Balance bei Abfrage getBalance(Wallet.BalanceType.AVAILABLE_SPENDABLE): " + wallet.getBalance(Wallet.BalanceType.AVAILABLE_SPENDABLE)); System.out.println("Balance bei Abfrage getBalance(Wallet.BalanceType.ESTIMATED) : " + wallet.getBalance(Wallet.BalanceType.ESTIMATED)); System.out.println("Balance bei Abfrage getBalance(Wallet.BalanceType.ESTIMATED_SPENDABLE): " + wallet.getBalance(Wallet.BalanceType.ESTIMATED_SPENDABLE)); // transaktionen System.out.println("\nTransaktionen im Wallet"); ArrayList<Transaction> txList = new ArrayList(wallet.getTransactions(true)); int txListSize = txList.size(); System.out.println("Es befinden sich " + txListSize + " Transaktionen im Wallet"); for (int txIterator = 0; txIterator < txListSize; txIterator++) { Transaction tx = txList.get(txIterator); System.out.println("---------------------------------------------------------------------------------"); String txDirection = ""; if (tx.getValue(wallet).isNegative()) txDirection = " Zahlungsausgang"; else txDirection = " Zahlungseingang"; System.out.println("Transaktion Nummer " + (txIterator + 1) + txDirection); System.out.println("Transaktions-Id: " + tx.getTxId()); System.out.println("Transaktionsdatum : " + tx.getUpdateTime()); System.out.println("Transaktionsbetrag (getValue) : " + tx.getValue(wallet).toFriendlyString()); try { System.out.println("Transaktionsgebuehr (getFee) : -" + tx.getFee().toFriendlyString()); System.out.println("Transaktionsbetrag (getValueSendFromMe) : -" + tx.getValueSentFromMe(wallet).toFriendlyString()); System.out.println("Transaktionsbetrag (getValueSendToMe) : " + tx.getValueSentToMe(wallet).toFriendlyString()); // berechnung der netto-zahlung an den empfänger Coin txGetValue = tx.getValue(wallet); // ist negativ bei ausgehender zahlung Coin txGetFee = tx.getFee(); // ist positiv ! Coin txEmpfaenger = txGetValue.add(txGetFee); System.out.println("Transaktionsbetrag an Empfaenger : " + txEmpfaenger.toFriendlyString()); } catch (NullPointerException e) { System.out.println("Transaktionsgebuehr (fee) : " + "wegen Zahlungseingang keine Fee"); } System.out.println("Grund der Transaktion (purpose) : " + tx.getPurpose()); System.out.println("Confidence (Bestaetigungen) : " + tx.getConfidence()); System.out.println("Confidence (Bestaetigungen) (Depth/Tiefe): " + tx.getConfidence().getDepthInBlocks()); System.out.println("Confidence (Bestaetigungen) (Type) : " + tx.getConfidence().getConfidenceType()); try { System.out.println("Confidence (Bestaetigungen) (ChainHeight): " + tx.getConfidence().getAppearedAtChainHeight()); } catch (IllegalStateException e) { System.out.println("Confidence (Bestaetigungen) (ChainHeight): " + "keine Bestaetigung da die Transaktion nicht im BUILDING-Typ ist"); } System.out.println(tx.toString()); } System.out.println("**********************************************************************************"); } } |
Alle Quellcodes zum Bitcoin findet Ihr zum Download in meinem Github-Repository BitcoinJ, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/BitcoinJ. Alle Programme sind unter Java 11 lauffähig (vermutlich auch unter Java 8) und wurden mit intelliJ IDEA entwickelt, welches für dieses Programm aber nicht notwendig ist.
Noch ein Wort zum Thema „Lizenz“: Die von mir erstellten Beispiele selber stehen unter der „Unlicense“-Lizenz, allerdings werden zur Laufzeit diverse Bibliotheken eingebunden, welche zum Teil ganz eigene Lizenzen mitbringen. Darauf kann ich in meinen Lizenzhinweisen nicht hinweisen.
Letzte Bearbeitung: 12.03.2020