Dieses Programm ist eine kleine Abwandlung des Artikels zu BitcoinJ 07 Zeige Transaktionen, daher gehe ich nicht mehr auf alle Details ein.
Nach der Online-Aktualisierung werden die Daten in zwei Fenster und parallel in zwei Textdateien geschrieben und diese Dateinamen vergeben: BitcoinJ07TransactionTab_Output_xxx.txt und BitcoinJ07TransactionTab_Logfile_xxx.txt, wobei „xxx“ für das aktuelle Datum und die Uhrzeit steht; so könnt Ihr die Ausgaben später ganz in Ruhe studieren. Die hierfür notwendige Klasse RedirectedFrame.java findet Ihr in meinem GitHub-Archiv.
Zur Nutzung 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.
Dieses Programm ist ebenfalls für den Regtest-Modus vorbereitet, die Voreinstellung verweist auf das Bitcoin Testnet.
In der Output-Datei finden sich die Transaktionen übersichtlich in Form einer Tabelle:
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 |
BitcoinJ 07 Zeige die Transaktionen eines Wallets tabellarisch Das Programm arbeitet im Netzwerk: org.bitcoin.test Startzeit des WalletAppKit : 18.03.2020 10:43:58 Bitte warten, das Wallet App Kit geht online und aktualisiert das Wallet Ausgabe der Transaktionen des Wallets tabellearisch ********************************************************************************************************************************************** Nr. Richtung Datum + Uhrzeit Tx Betrag in BTC Fee in BTC Dep Transaction ID 24 Zahlungseingang 17.03.2020 17:04:39 0.00 BTC 0.00 BTC 113 951b6137b3b3a04b78486ae5e6d2564b01c4fef59d20ca8927a07ca1e1231175 23 Zahlungsausgang 17.03.2020 16:44:29 -0.001 BTC 0.000225 BTC 114 4e7c11ec81b28a5adfb4807341df2647dde56121ecb4c106603e45b4066e2c18 22 Zahlungseingang 17.03.2020 14:15:39 0.00 BTC 0.00 BTC 126 27df279e8721cd30394e16f5181e508d8f57689715a6a9f43410bbd6623314e4 21 Zahlungsausgang 17.03.2020 14:12:59 -0.001 BTC 0.000374 BTC 127 59ffadf84d1b17ab0ec655756d361b71d549d4901d4a2ece4addb4c9edb801be 20 Zahlungsausgang 17.03.2020 14:12:59 -0.001 BTC 0.000374 BTC 127 7b1a8fa596536be249631737cefd706fbea9239dc35449a53dfe2b2d0bdd6177 19 Zahlungsausgang 17.03.2020 14:12:59 -0.001 BTC 0.000225 BTC 127 ae1e70df67155e208e6013d15433ea5aaaa965dbecdc81aca81fa16513b50466 18 Zahlungsausgang 17.03.2020 14:12:59 -0.001 BTC 0.000225 BTC 127 5d5d22c35ef0d9ba0588a944b9bdcbc1fd191d4a6ba5184a586019f4e5a62e53 17 Zahlungsausgang 17.03.2020 14:12:59 -0.001 BTC 0.000225 BTC 127 ee9bc13d7f0f41d8eed8014a59085bfc6ca55d266e33ff36bb5ad3614fead1d2 16 Zahlungsausgang 17.03.2020 13:52:43 -0.001 BTC 0.000225 BTC 128 6ba9adf42b9c4463984531db8b12bc6840567341ebb19b9df24bdcc284a630b2 15 Zahlungsausgang 17.03.2020 13:52:43 -0.001 BTC 0.000225 BTC 128 69b2f6ed69fa6afa9a23444f25eb239b165b092fe96805178107421ec18bc03e 14 Zahlungsausgang 17.03.2020 13:32:39 -0.001 BTC 0.000225 BTC 129 fd5a14fd75cbaf0d3ad017a1d7a3935bdc5e33005bbd5c5d02fac4248bb7dace 13 Zahlungsausgang 17.03.2020 13:32:39 -0.001 BTC 0.000225 BTC 129 41063813cac83e28233d9facc2df05f1ded2faa66b042ea7ffb3eabc020a87b3 12 Zahlungsausgang 17.03.2020 13:19:33 0.00 BTC 0.000674 BTC 130 ff71b0c15b87a295b4a59bc7db1e96c52e46b4a4e269c8c88b95b27ce60e7f7e 11 Zahlungsausgang 17.03.2020 13:19:33 0.00 BTC 0.000227 BTC 130 bd630add4ca45435c5ad29313d29efee53f990c551b16dee343f6dc0510806bc 10 Zahlungsausgang 17.03.2020 13:19:33 0.00 BTC 0.000227 BTC 130 1915fc8e81695ed196b45cde18b39ea1e19627c091aa26837c52132453bcb1c9 9 Zahlungsausgang 17.03.2020 13:19:33 0.00 BTC 0.000227 BTC 130 207bd90e41dd34e22faa639ba6b2608ef0a50fc00de6c4246df680cd0913cf0c 8 Zahlungsausgang 15.03.2020 19:25:46 -0.000051 BTC 0.000225 BTC 463 db6ccf60d1953a24fb184c63f08976e569eb91ab6aa61f6be13bda0f4d6fd8ec 7 Zahlungseingang 15.03.2020 19:25:46 0.00 BTC 0.00 BTC 463 f1385570beffb71aa075ac92311b722a09b31b0d85a19481014b9fd898ed2489 6 Zahlungseingang 13.03.2020 15:03:06 0.00 BTC 0.00 BTC 631 147ceb133fb04577e6e724e46e8792042ba02bdd01086792505aec6583ffb9f5 5 Zahlungseingang 12.03.2020 12:23:07 0.00 BTC 0.00 BTC 710 60cf0367187eb8d324a1e692e47e6aabc60c327ca87ebb2b0114e8b30168db3e 4 Zahlungsausgang 12.03.2020 11:07:00 -0.0012 BTC 0.000225 BTC 713 3b04ff0742625ad5123e3a6bc74b407fde68e098c97244bd6a413b9550effe34 3 Zahlungseingang 12.03.2020 11:03:18 0.00 BTC 0.00 BTC 713 aa844f9e5f93716e5207b1479ba9c1209a3660a1a1514f9f0d6b3fa0164e1770 2 Zahlungsausgang 11.03.2020 14:41:17 -0.005 BTC 0.000225 BTC 774 905277665a3eb6cd1cf0af30b00f15db3ec6fc7ae86b3c150aa2fdcdb589d0b1 1 Zahlungseingang 11.03.2020 13:45:06 0.00 BTC 0.00 BTC 778 18866d7e03a0b8958769382afe24ff7671fbc911cbdf3006fd1fbb3a3c49c4cf ********************************************************************************************************************************************** Endezeit des WalletAppKit : 18.03.2020 10:44:07 |
Hier der Quellcode des Programms, den Sourcecode der Klasse RedirectFrame.java findet Ihr in meinem Github-Archiv:
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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
/* * 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): 18.03.2020 * Funktion: 07 Zeigt die Transaktionen eines Wallets in tabellarischer Form an * Function: 07 shows transaction tabbed data from our 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.ECKey; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.core.Transaction; import org.bitcoinj.kits.WalletAppKit; import org.bitcoinj.params.RegTestParams; import org.bitcoinj.params.TestNet3Params; import org.bitcoinj.utils.BriefLogFormatter; import org.bitcoinj.wallet.UnreadableWalletException; import org.bitcoinj.wallet.Wallet; import javax.swing.*; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; public class BitcoinJ07ViewTransactionsTab { public static void main(String[] args) throws IOException, UnreadableWalletException { // reirect the console to two windows RedirectedFrame outputFrameErrors = new RedirectedFrame("Logfileausgaben Fenster", true, false, true, "BitcoinJ07TransactionsTab_Logfile_" + getActualDateReverse() + ".txt", 700, 600, JFrame.DO_NOTHING_ON_CLOSE); RedirectedFrame outputFrameOutput = new RedirectedFrame("Programmausgaben Fenster", false, true, true, "BitcoinJ07TransactionsTab_Output_" + getActualDateReverse() + ".txt", 700, 600, JFrame.DO_NOTHING_ON_CLOSE); System.out.println("BitcoinJ 07 Zeige die Transaktionen eines Wallets tabellarisch"); NetworkParameters netParams = TestNet3Params.get(); // preset String filenameWallet = "bitcoinj02createwallet"; // choose network type (TEST or REG) String networkType = "TEST"; //String networkType = "REG"; switch (networkType) { case "TEST": { netParams = TestNet3Params.get(); break; } case "REG": { netParams = RegTestParams.get(); break; } default: { System.out.println("Es ist kein networkType angegeben, das Programm wird nicht gestartet"); JOptionPane.showMessageDialog(null, "Das Programm wird beendet sobald der OK-Button betaetigt wird", "Programmende", JOptionPane.WARNING_MESSAGE); System.exit(0); } } System.out.println("Das Programm arbeitet im Netzwerk: " + netParams.getId()); // init wallet app kit WalletAppKit kit = null; BriefLogFormatter.init(); kit = new WalletAppKit(netParams, new File("."), filenameWallet) { @Override protected void onSetupCompleted() { if (wallet().getKeyChainGroupSize() < 1) { wallet().importKey(new ECKey()); } } }; System.out.println("Startzeit des WalletAppKit : " + getActualDate()); System.out.println("Bitte warten, das Wallet App Kit geht online und aktualisiert das Wallet"); if (netParams == RegTestParams.get()) { kit.connectToLocalHost(); // neccessary for regtest-mode } kit.startAsync(); kit.awaitRunning(); System.out.println("Ausgabe der Transaktionen des Wallets tabellearisch"); System.out.println("**********************************************************************************************************************************************"); System.out.println("Nr. Richtung Datum + Uhrzeit Tx Betrag in BTC Fee in BTC Dep Transaction ID"); Wallet wallet = kit.wallet(); // transaktionen ArrayList<Transaction> txList = new ArrayList(wallet.getTransactions(true)); txList.sort((tx1, tx2) -> { return tx2.getUpdateTime().compareTo(tx1.getUpdateTime()); }); int txListSize = txList.size(); //System.out.println("Es befinden sich " + txListSize + " Transaktionen im Wallet, die aktuellste steht oben"); String line = ""; for (int txIterator = 0; txIterator < txListSize; txIterator++) { line = ""; Transaction tx = txList.get(txIterator); //System.out.println("---------------------------------------------------------------------------------"); String txDirection = ""; if (tx.getValue(wallet).isNegative()) txDirection = " Zahlungsausgang"; else txDirection = " Zahlungseingang"; //String.format("%1$" + length + "s", inputString) line = line + String.format("%1$" + 3 + "s", (txListSize - (txIterator))) + txDirection + " "; line = line + formatDate(tx.getUpdateTime()) + " "; // values Coin txGetValue = tx.getValue(wallet); Coin txGetFee = Coin.valueOf(0); Coin txNetto = Coin.valueOf(0); //System.out.println("Transaktion Nummer " + (txListSize - (txIterator)) + txDirection); //System.out.println("Transaktions-Id: " + tx.getTxId()); //System.out.println("Transaktionsdatum : " + tx.getUpdateTime()); //System.out.println("Transaktionsbetrag (getValue) : " + tx.getValue(wallet).toFriendlyString()); Coin txEmpfaenger = Coin.valueOf(0); 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 txGetValue = tx.getValue(wallet); // ist negativ bei ausgehender zahlung txGetFee = tx.getFee(); // ist positiv ! txEmpfaenger = txGetValue.add(txGetFee); txNetto = txGetValue.add(txGetFee); //System.out.println("Transaktionsbetrag an Empfaenger : " + txEmpfaenger.toFriendlyString()); } catch (NullPointerException e) { //System.out.println("Transaktionsgebuehr (fee) : " + "wegen Zahlungseingang keine Fee"); } line = line + String.format("%1$" + 18 + "s", txNetto.toFriendlyString()); try { line = line + String.format("%1$" + 15 + "s", txGetFee.toFriendlyString());} catch (NullPointerException e) { line = line + String.format("%1$" + 15 + "s", Coin.ZERO.toFriendlyString()); } //line = line + " " + tx.getTxId(); //line = line + " " + String.format("%1$" + 14 + "s", txDepth) + " " + tx.getTxId(); //System.out.println("#" + line); int txDepth = 0; //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 { txDepth = tx.getConfidence().getDepthInBlocks(); //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"); } line = line + String.format("%1$" + 4 + "s", txDepth) + " " + tx.getTxId(); System.out.println(line); } System.out.println("**********************************************************************************************************************************************"); kit.stopAsync(); // wait for completion System.out.println("\nEndezeit des WalletAppKit : " + getActualDate()); JOptionPane.showMessageDialog(null, "Das Programm wird beendet sobald der OK-Button betaetigt wird", "Programmende", JOptionPane.WARNING_MESSAGE); outputFrameErrors.dispose(); outputFrameOutput.dispose(); } private static String getActualDateReverse() { // provides the actual date and time in this format yyyy-MM-dd_HH-mm-ss e.g. 2020-03-16_10-27-15 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"); LocalDateTime today = LocalDateTime.now(); return formatter.format(today); } private static String getActualDate() { // provides the actual date and time in this format dd-MM-yyyy_HH-mm-ss e.g. 16.03.2020 10:27:15 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); LocalDateTime today = LocalDateTime.now(); return formatter.format(today); } private static String formatDate(Date date) { // provides the date and time in this format dd-MM-yyyy_HH-mm-ss e.g. 16-03-2020_10-27-15 String pattern = "dd.MM.yyyy HH:mm:ss"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); return simpleDateFormat.format(date); } } |
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: 18.03.2020