void TestScanForWalletTx(string blkfile) { BlockDataManager_MMAP & bdm = BlockDataManager_MMAP::GetInstance(); bdm.readBlkFile_FromScratch(blkfile); ///////////////////////////////////////////////////////////////////////////// BinaryData myAddress; BtcWallet wlt; // Main-network addresses myAddress.createFromHex("604875c897a079f4db88e5d71145be2093cae194"); wlt.addAddress(myAddress); myAddress.createFromHex("8996182392d6f05e732410de4fc3fa273bac7ee6"); wlt.addAddress(myAddress); myAddress.createFromHex("b5e2331304bc6c541ffe81a66ab664159979125b"); wlt.addAddress(myAddress); myAddress.createFromHex("ebbfaaeedd97bc30df0d6887fd62021d768f5cb8"); wlt.addAddress(myAddress); myAddress.createFromHex("11b366edfc0a8b66feebae5c2e25a7b6a5d1cf31"); wlt.addAddress(myAddress); // This address contains a tx with a non-std TxOut, but the other TxOuts are valid myAddress.createFromHex("6c27c8e67b7376f3ab63553fe37a4481c4f951cf"); wlt.addAddress(myAddress); // More testnet addresses, with only a few transactions myAddress.createFromHex("0c6b92101c7025643c346d9c3e23034a8a843e21"); wlt.addAddress(myAddress); myAddress.createFromHex("34c9f8dc91dfe1ae1c59e76cbe1aa39d0b7fc041"); wlt.addAddress(myAddress); myAddress.createFromHex("d77561813ca968270d5f63794ddb6aab3493605e"); wlt.addAddress(myAddress); myAddress.createFromHex("0e0aec36fe2545fb31a41164fb6954adcd96b342"); wlt.addAddress(myAddress); TIMER_WRAP(bdm.scanBlockchainForTx(wlt)); TIMER_WRAP(bdm.scanBlockchainForTx(wlt)); TIMER_WRAP(bdm.scanBlockchainForTx(wlt)); cout << "Checking balance of all addresses: " << wlt.getNumAddr() << " addrs" << endl; for(uint32_t i=0; i<wlt.getNumAddr(); i++) { BinaryData addr20 = wlt.getAddrByIndex(i).getAddrStr20(); cout << " Addr: " << wlt.getAddrByIndex(i).getFullBalance() << "," << wlt.getAddrByHash160(addr20).getFullBalance() << endl; vector<LedgerEntry> const & ledger = wlt.getAddrByIndex(i).getTxLedger(); for(uint32_t j=0; j<ledger.size(); j++) { cout << " Tx: " << ledger[j].getAddrStr20().getSliceCopy(0,4).toHexStr() << " " << ledger[j].getValue()/(float)(CONVERTBTC) << " (" << ledger[j].getBlockNum() << ") TxHash: " << ledger[j].getTxHash().getSliceCopy(0,4).toHexStr() << endl; } } cout << endl << endl; cout << "Printing SORTED allAddr ledger..." << endl; wlt.sortLedger(); vector<LedgerEntry> const & ledgerAll = wlt.getTxLedger(); for(uint32_t j=0; j<ledgerAll.size(); j++) { cout << " Tx: " << ledgerAll[j].getAddrStr20().toHexStr() << " " << ledgerAll[j].getValue()/1e8 << " (" << ledgerAll[j].getBlockNum() << ") TxHash: " << ledgerAll[j].getTxHash().getSliceCopy(0,4).toHexStr() << endl; } ///////////////////////////////////////////////////////////////////////////// cout << "Test txout aggregation, with different prioritization schemes" << endl; BtcWallet myWallet; #ifndef TEST_NETWORK // TODO: I somehow borked my list of test addresses. Make sure I have some // test addresses in here for each network that usually has lots of // unspent TxOuts // Main-network addresses myAddress.createFromHex("0e0aec36fe2545fb31a41164fb6954adcd96b342"); myWallet.addAddress(myAddress); #else // Testnet addresses //myAddress.createFromHex("d184cea7e82c775d08edd288344bcd663c3f99a2"); myWallet.addAddress(myAddress); //myAddress.createFromHex("205fa00890e6898b987de6ff8c0912805416cf90"); myWallet.addAddress(myAddress); //myAddress.createFromHex("fc0ef58380e6d4bcb9599c5369ce82d0bc01a5c4"); myWallet.addAddress(myAddress); #endif cout << "Rescanning the blockchain for new addresses." << endl; bdm.scanBlockchainForTx(myWallet); //vector<UnspentTxOut> sortedUTOs = bdm.getUnspentTxOutsForWallet(myWallet, 1); vector<UnspentTxOut> sortedUTOs = myWallet.getSpendableTxOutList(); int i=1; cout << " Sorting Method: " << i << endl; cout << " Value\t#Conf\tTxHash\tTxIdx" << endl; for(int j=0; j<sortedUTOs.size(); j++) { cout << " " << sortedUTOs[j].getValue()/1e8 << "\t" << sortedUTOs[j].getNumConfirm() << "\t" << sortedUTOs[j].getTxHash().toHexStr() << "\t" << sortedUTOs[j].getTxOutIndex() << endl; } cout << endl; // Test the zero-conf ledger-entry detection //le.pprint(); //vector<LedgerEntry> levect = wlt.getAddrLedgerEntriesForTx(txSelf); //for(int i=0; i<levect.size(); i++) //{ //levect[i].pprint(); //} }
void TestScanForWalletTx(string blkfile) { BlockDataManager_FullRAM & bdm = BlockDataManager_FullRAM::GetInstance(); bdm.readBlkFile_FromScratch(blkfile, false); // don't organize, just index ///////////////////////////////////////////////////////////////////////////// BinaryData myAddress; BtcWallet wlt; #ifndef TEST_NETWORK // Main-network addresses myAddress.createFromHex("604875c897a079f4db88e5d71145be2093cae194"); wlt.addAddress(myAddress); myAddress.createFromHex("8996182392d6f05e732410de4fc3fa273bac7ee6"); wlt.addAddress(myAddress); myAddress.createFromHex("b5e2331304bc6c541ffe81a66ab664159979125b"); wlt.addAddress(myAddress); myAddress.createFromHex("ebbfaaeedd97bc30df0d6887fd62021d768f5cb8"); wlt.addAddress(myAddress); #else // Test-network addresses myAddress.createFromHex("abda0c878dd7b4197daa9622d96704a606d2cd14"); wlt.addAddress(myAddress); myAddress.createFromHex("11b366edfc0a8b66feebae5c2e25a7b6a5d1cf31"); wlt.addAddress(myAddress); myAddress.createFromHex("baa72d8650baec634cdc439c1b84a982b2e596b2"); wlt.addAddress(myAddress); myAddress.createFromHex("fc0ef58380e6d4bcb9599c5369ce82d0bc01a5c4"); wlt.addAddress(myAddress); #endif myAddress.createFromHex("0e0aec36fe2545fb31a41164fb6954adcd96b342"); wlt.addAddress(myAddress); TIMER_WRAP(bdm.scanBlockchainForTx_FromScratch(wlt)); cout << "Checking balance of all addresses: " << wlt.getNumAddr() << " addrs" << endl; for(uint32_t i=0; i<wlt.getNumAddr(); i++) { BinaryData addr20 = wlt.getAddrByIndex(i).getAddrStr20(); cout << " Addr: " << wlt.getAddrByIndex(i).getBalance() << "," << wlt.getAddrByHash160(addr20).getBalance() << endl; vector<LedgerEntry> const & ledger = wlt.getAddrByIndex(i).getTxLedger(); for(uint32_t j=0; j<ledger.size(); j++) { cout << " Tx: " << ledger[j].getAddrStr20().getSliceCopy(0,4).toHexStr() << " " << ledger[j].getValue()/(float)(CONVERTBTC) << " (" << ledger[j].getBlockNum() << ") TxHash: " << ledger[j].getTxHash().getSliceCopy(0,4).toHexStr() << endl; } } cout << endl << endl; cout << "Printing SORTED allAddr ledger..." << endl; wlt.sortLedger(); vector<LedgerEntry> const & ledgerAll = wlt.getTxLedger(); for(uint32_t j=0; j<ledgerAll.size(); j++) { cout << " Tx: " << ledgerAll[j].getAddrStr20().toHexStr() << " " << ledgerAll[j].getValue()/1e8 << " (" << ledgerAll[j].getBlockNum() << ") TxHash: " << ledgerAll[j].getTxHash().getSliceCopy(0,4).toHexStr() << endl; } ///////////////////////////////////////////////////////////////////////////// cout << "Test txout aggregation, with different prioritization schemes" << endl; BtcWallet myWallet; #ifndef TEST_NETWORK // TODO: I somehow borked my list of test addresses. Make sure I have some // test addresses in here for each network that usually has lots of // unspent TxOuts // Main-network addresses myAddress.createFromHex("0e0aec36fe2545fb31a41164fb6954adcd96b342"); myWallet.addAddress(myAddress); #else // Testnet addresses //myAddress.createFromHex("d184cea7e82c775d08edd288344bcd663c3f99a2"); myWallet.addAddress(myAddress); //myAddress.createFromHex("205fa00890e6898b987de6ff8c0912805416cf90"); myWallet.addAddress(myAddress); //myAddress.createFromHex("fc0ef58380e6d4bcb9599c5369ce82d0bc01a5c4"); myWallet.addAddress(myAddress); #endif cout << "Rescanning the blockchain for new addresses." << endl; bdm.scanBlockchainForTx_FromScratch(myWallet); vector<UnspentTxOut> sortedUTOs = bdm.getUnspentTxOutsForWallet(myWallet, 1); int i=1; cout << " Sorting Method: " << i << endl; cout << " Value\t#Conf\tTxHash\tTxIdx" << endl; for(int j=0; j<sortedUTOs.size(); j++) { cout << " " << sortedUTOs[j].getValue()/1e8 << "\t" << sortedUTOs[j].getNumConfirm() << "\t" << sortedUTOs[j].getTxHash().toHexStr() << "\t" << sortedUTOs[j].getTxOutIndex() << endl; } cout << endl; }