annotate main.h @ 256:e4e826afefae draft

erase the bad chain after disconnecting it git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@138 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
date Mon, 16 Aug 2010 17:51:10 +0000
parents 835b9dd8e8cd
children 97f8c31be574
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
2 // Distributed under the MIT/X11 software license, see the accompanying
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
3 // file license.txt or http://www.opensource.org/licenses/mit-license.php.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
4
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
5 class COutPoint;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
6 class CInPoint;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
7 class CDiskTxPos;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
8 class CCoinBase;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
9 class CTxIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
10 class CTxOut;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
11 class CTransaction;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
12 class CBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
13 class CBlockIndex;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
14 class CWalletTx;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
15 class CKeyItem;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
16
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
17 static const unsigned int MAX_SIZE = 0x02000000;
198
e5950b5ebb02 fix openssl linkage problems,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
18 static const unsigned int MAX_BLOCK_SIZE = 1000000;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
19 static const int64 COIN = 100000000;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
20 static const int64 CENT = 1000000;
227
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
21 static const int64 MAX_MONEY = 21000000 * COIN;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
22 static const int COINBASE_MATURITY = 100;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
23
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
24 static const CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
25
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
26
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
27
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
28
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
29
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
30
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
31 extern CCriticalSection cs_main;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
32 extern map<uint256, CBlockIndex*> mapBlockIndex;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
33 extern const uint256 hashGenesisBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
34 extern CBlockIndex* pindexGenesisBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
35 extern int nBestHeight;
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
36 extern CBigNum bnBestChainWork;
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
37 extern CBigNum bnBestInvalidWork;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
38 extern uint256 hashBestChain;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
39 extern CBlockIndex* pindexBest;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
40 extern unsigned int nTransactionsUpdated;
26
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
41 extern map<uint256, int> mapRequestCount;
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
42 extern CCriticalSection cs_mapRequestCount;
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 42
diff changeset
43 extern map<string, string> mapAddressBook;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 42
diff changeset
44 extern CCriticalSection cs_mapAddressBook;
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
45 extern vector<unsigned char> vchDefaultKey;
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
46 extern double dHashesPerSec;
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
47 extern int64 nHPSTimerStart;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
48
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
49 // Settings
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
50 extern int fGenerateBitcoins;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
51 extern int64 nTransactionFee;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
52 extern CAddress addrIncoming;
8
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
53 extern int fLimitProcessors;
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
54 extern int nLimitProcessors;
58
e1232b450156 GUI-less build target bitcoind that links to wxBase and shouldn't need GTK,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 57
diff changeset
55 extern int fMinimizeToTray;
e1232b450156 GUI-less build target bitcoind that links to wxBase and shouldn't need GTK,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 57
diff changeset
56 extern int fMinimizeOnClose;
8
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
57
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
58
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
59
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
60
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
61
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
62
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
63
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
64 bool CheckDiskSpace(int64 nAdditionalBytes=0);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
65 FILE* OpenBlockFile(unsigned int nFile, unsigned int nBlockPos, const char* pszMode="rb");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
66 FILE* AppendBlockFile(unsigned int& nFileRet);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
67 bool AddKey(const CKey& key);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
68 vector<unsigned char> GenerateNewKey();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
69 bool AddToWallet(const CWalletTx& wtxIn);
42
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
70 void WalletUpdateSpent(const COutPoint& prevout);
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
71 void ReacceptWalletTransactions();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
72 bool LoadBlockIndex(bool fAllowNew=true);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
73 void PrintBlockTree();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
74 bool ProcessMessages(CNode* pfrom);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
75 bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv);
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
76 bool SendMessages(CNode* pto, bool fSendTrickle);
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
77 int64 GetBalance();
8
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
78 bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CKey& keyRet, int64& nFeeRequiredRet);
55
a71b4cffb922 Address Book with tabs instead of separate Your Address book,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 47
diff changeset
79 bool CommitTransaction(CWalletTx& wtxNew, const CKey& key);
a71b4cffb922 Address Book with tabs instead of separate Your Address book,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 47
diff changeset
80 bool BroadcastTransaction(CWalletTx& wtxNew);
a71b4cffb922 Address Book with tabs instead of separate Your Address book,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 47
diff changeset
81 string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false);
a71b4cffb922 Address Book with tabs instead of separate Your Address book,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 47
diff changeset
82 string SendMoneyToBitcoinAddress(string strAddress, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false);
8
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
83 void GenerateBitcoins(bool fGenerate);
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
84 void ThreadBitcoinMiner(void* parg);
21
cb33310566a5 got rid of CheckForShutdown, replaced some thread-unsafe wxWidgets calls, Linux fixes, socket send MSG_NOSIGNAL, bind INADDR_ANY, works reliably on Linux now except if wxMessageBox is used in a thread other than the GUI thread
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 20
diff changeset
85 void BitcoinMiner();
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
86 bool IsInitialBlockDownload();
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
87 bool IsLockdown();
8
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
88
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
89
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
90
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
91
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
92
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
93
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
94
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
95
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
96
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
97
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
98
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
99
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
100 class CDiskTxPos
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
101 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
102 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
103 unsigned int nFile;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
104 unsigned int nBlockPos;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
105 unsigned int nTxPos;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
106
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
107 CDiskTxPos()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
108 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
109 SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
110 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
111
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
112 CDiskTxPos(unsigned int nFileIn, unsigned int nBlockPosIn, unsigned int nTxPosIn)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
113 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
114 nFile = nFileIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
115 nBlockPos = nBlockPosIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
116 nTxPos = nTxPosIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
117 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
118
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
119 IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
120 void SetNull() { nFile = -1; nBlockPos = 0; nTxPos = 0; }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
121 bool IsNull() const { return (nFile == -1); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
122
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
123 friend bool operator==(const CDiskTxPos& a, const CDiskTxPos& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
124 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
125 return (a.nFile == b.nFile &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
126 a.nBlockPos == b.nBlockPos &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
127 a.nTxPos == b.nTxPos);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
128 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
129
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
130 friend bool operator!=(const CDiskTxPos& a, const CDiskTxPos& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
131 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
132 return !(a == b);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
133 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
134
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
135 string ToString() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
136 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
137 if (IsNull())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
138 return strprintf("null");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
139 else
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
140 return strprintf("(nFile=%d, nBlockPos=%d, nTxPos=%d)", nFile, nBlockPos, nTxPos);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
141 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
142
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
143 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
144 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
145 printf("%s", ToString().c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
146 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
147 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
148
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
149
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
150
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
151
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
152 class CInPoint
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
153 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
154 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
155 CTransaction* ptx;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
156 unsigned int n;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
157
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
158 CInPoint() { SetNull(); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
159 CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
160 void SetNull() { ptx = NULL; n = -1; }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
161 bool IsNull() const { return (ptx == NULL && n == -1); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
162 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
163
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
164
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
165
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
166
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
167 class COutPoint
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
168 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
169 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
170 uint256 hash;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
171 unsigned int n;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
172
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
173 COutPoint() { SetNull(); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
174 COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
175 IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
176 void SetNull() { hash = 0; n = -1; }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
177 bool IsNull() const { return (hash == 0 && n == -1); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
178
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
179 friend bool operator<(const COutPoint& a, const COutPoint& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
180 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
181 return (a.hash < b.hash || (a.hash == b.hash && a.n < b.n));
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
182 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
183
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
184 friend bool operator==(const COutPoint& a, const COutPoint& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
185 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
186 return (a.hash == b.hash && a.n == b.n);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
187 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
188
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
189 friend bool operator!=(const COutPoint& a, const COutPoint& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
190 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
191 return !(a == b);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
192 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
193
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
194 string ToString() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
195 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
196 return strprintf("COutPoint(%s, %d)", hash.ToString().substr(0,6).c_str(), n);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
197 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
198
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
199 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
200 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
201 printf("%s\n", ToString().c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
202 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
203 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
204
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
205
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
206
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
207
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
208 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
209 // An input of a transaction. It contains the location of the previous
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
210 // transaction's output that it claims and a signature that matches the
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
211 // output's public key.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
212 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
213 class CTxIn
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
214 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
215 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
216 COutPoint prevout;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
217 CScript scriptSig;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
218 unsigned int nSequence;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
219
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
220 CTxIn()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
221 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
222 nSequence = UINT_MAX;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
223 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
224
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
225 explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=UINT_MAX)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
226 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
227 prevout = prevoutIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
228 scriptSig = scriptSigIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
229 nSequence = nSequenceIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
230 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
231
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
232 CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=UINT_MAX)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
233 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
234 prevout = COutPoint(hashPrevTx, nOut);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
235 scriptSig = scriptSigIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
236 nSequence = nSequenceIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
237 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
238
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
239 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
240 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
241 READWRITE(prevout);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
242 READWRITE(scriptSig);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
243 READWRITE(nSequence);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
244 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
245
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
246 bool IsFinal() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
247 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
248 return (nSequence == UINT_MAX);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
249 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
250
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
251 friend bool operator==(const CTxIn& a, const CTxIn& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
252 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
253 return (a.prevout == b.prevout &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
254 a.scriptSig == b.scriptSig &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
255 a.nSequence == b.nSequence);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
256 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
257
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
258 friend bool operator!=(const CTxIn& a, const CTxIn& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
259 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
260 return !(a == b);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
261 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
262
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
263 string ToString() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
264 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
265 string str;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
266 str += strprintf("CTxIn(");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
267 str += prevout.ToString();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
268 if (prevout.IsNull())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
269 str += strprintf(", coinbase %s", HexStr(scriptSig.begin(), scriptSig.end(), false).c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
270 else
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
271 str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24).c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
272 if (nSequence != UINT_MAX)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
273 str += strprintf(", nSequence=%u", nSequence);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
274 str += ")";
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
275 return str;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
276 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
277
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
278 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
279 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
280 printf("%s\n", ToString().c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
281 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
282
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
283 bool IsMine() const;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
284 int64 GetDebit() const;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
285 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
286
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
287
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
288
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
289
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
290 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
291 // An output of a transaction. It contains the public key that the next input
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
292 // must be able to sign with to claim it.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
293 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
294 class CTxOut
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
295 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
296 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
297 int64 nValue;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
298 CScript scriptPubKey;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
299
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
300 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
301 CTxOut()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
302 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
303 SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
304 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
305
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
306 CTxOut(int64 nValueIn, CScript scriptPubKeyIn)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
307 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
308 nValue = nValueIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
309 scriptPubKey = scriptPubKeyIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
310 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
311
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
312 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
313 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
314 READWRITE(nValue);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
315 READWRITE(scriptPubKey);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
316 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
317
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
318 void SetNull()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
319 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
320 nValue = -1;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
321 scriptPubKey.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
322 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
323
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
324 bool IsNull()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
325 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
326 return (nValue == -1);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
327 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
328
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
329 uint256 GetHash() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
330 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
331 return SerializeHash(*this);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
332 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
333
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
334 bool IsMine() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
335 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
336 return ::IsMine(scriptPubKey);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
337 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
338
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
339 int64 GetCredit() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
340 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
341 if (IsMine())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
342 return nValue;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
343 return 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
344 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
345
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
346 friend bool operator==(const CTxOut& a, const CTxOut& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
347 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
348 return (a.nValue == b.nValue &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
349 a.scriptPubKey == b.scriptPubKey);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
350 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
351
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
352 friend bool operator!=(const CTxOut& a, const CTxOut& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
353 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
354 return !(a == b);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
355 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
356
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
357 string ToString() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
358 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
359 if (scriptPubKey.size() < 6)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
360 return "CTxOut(error)";
13
a17d69eac18f better wallet.dat flush, consolidated QueryPerformanceCounter, PRI64d printf portability
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
361 return strprintf("CTxOut(nValue=%"PRI64d".%08"PRI64d", scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,24).c_str());
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
362 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
363
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
364 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
365 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
366 printf("%s\n", ToString().c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
367 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
368 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
369
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
370
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
371
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
372
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
373 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
374 // The basic transaction that is broadcasted on the network and contained in
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
375 // blocks. A transaction can contain multiple inputs and outputs.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
376 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
377 class CTransaction
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
378 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
379 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
380 int nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
381 vector<CTxIn> vin;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
382 vector<CTxOut> vout;
11
aabb318698b9 addr relaying fixes, proxy option and privacy patches, detect connect to self, non-final tx locktime changes, fix hide unconfirmed generated
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 8
diff changeset
383 unsigned int nLockTime;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
384
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
385
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
386 CTransaction()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
387 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
388 SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
389 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
390
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
391 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
392 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
393 READWRITE(this->nVersion);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
394 nVersion = this->nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
395 READWRITE(vin);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
396 READWRITE(vout);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
397 READWRITE(nLockTime);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
398 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
399
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
400 void SetNull()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
401 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
402 nVersion = 1;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
403 vin.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
404 vout.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
405 nLockTime = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
406 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
407
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
408 bool IsNull() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
409 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
410 return (vin.empty() && vout.empty());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
411 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
412
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
413 uint256 GetHash() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
414 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
415 return SerializeHash(*this);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
416 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
417
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
418 bool IsFinal(int nBlockHeight=0, int64 nBlockTime=0) const
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
419 {
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
420 // Time based nLockTime implemented in 0.1.6
18
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
421 if (nLockTime == 0)
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
422 return true;
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
423 if (nBlockHeight == 0)
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
424 nBlockHeight = nBestHeight;
11
aabb318698b9 addr relaying fixes, proxy option and privacy patches, detect connect to self, non-final tx locktime changes, fix hide unconfirmed generated
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 8
diff changeset
425 if (nBlockTime == 0)
aabb318698b9 addr relaying fixes, proxy option and privacy patches, detect connect to self, non-final tx locktime changes, fix hide unconfirmed generated
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 8
diff changeset
426 nBlockTime = GetAdjustedTime();
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
427 if (nLockTime < (nLockTime < 500000000 ? nBlockHeight : nBlockTime))
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
428 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
429 foreach(const CTxIn& txin, vin)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
430 if (!txin.IsFinal())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
431 return false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
432 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
433 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
434
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
435 bool IsNewerThan(const CTransaction& old) const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
436 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
437 if (vin.size() != old.vin.size())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
438 return false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
439 for (int i = 0; i < vin.size(); i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
440 if (vin[i].prevout != old.vin[i].prevout)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
441 return false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
442
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
443 bool fNewer = false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
444 unsigned int nLowest = UINT_MAX;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
445 for (int i = 0; i < vin.size(); i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
446 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
447 if (vin[i].nSequence != old.vin[i].nSequence)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
448 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
449 if (vin[i].nSequence <= nLowest)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
450 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
451 fNewer = false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
452 nLowest = vin[i].nSequence;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
453 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
454 if (old.vin[i].nSequence < nLowest)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
455 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
456 fNewer = true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
457 nLowest = old.vin[i].nSequence;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
458 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
459 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
460 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
461 return fNewer;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
462 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
463
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
464 bool IsCoinBase() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
465 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
466 return (vin.size() == 1 && vin[0].prevout.IsNull());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
467 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
468
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
469 bool CheckTransaction() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
470 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
471 // Basic checks that don't depend on any context
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
472 if (vin.empty() || vout.empty())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
473 return error("CTransaction::CheckTransaction() : vin or vout empty");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
474
227
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
475 // Check for negative or overflow output values
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
476 int64 nValueOut = 0;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
477 foreach(const CTxOut& txout, vout)
227
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
478 {
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
479 if (txout.nValue < 0)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
480 return error("CTransaction::CheckTransaction() : txout.nValue negative");
227
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
481 if (txout.nValue > MAX_MONEY)
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
482 return error("CTransaction::CheckTransaction() : txout.nValue too high");
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
483 nValueOut += txout.nValue;
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
484 if (nValueOut > MAX_MONEY)
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
485 return error("CTransaction::CheckTransaction() : txout total too high");
514383c38156 fix for block 74638 overflow output transaction
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
486 }
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
487
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
488 if (IsCoinBase())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
489 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
490 if (vin[0].scriptSig.size() < 2 || vin[0].scriptSig.size() > 100)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
491 return error("CTransaction::CheckTransaction() : coinbase script size");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
492 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
493 else
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
494 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
495 foreach(const CTxIn& txin, vin)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
496 if (txin.prevout.IsNull())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
497 return error("CTransaction::CheckTransaction() : prevout is null");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
498 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
499
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
500 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
501 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
502
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
503 bool IsMine() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
504 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
505 foreach(const CTxOut& txout, vout)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
506 if (txout.IsMine())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
507 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
508 return false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
509 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
510
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
511 int64 GetDebit() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
512 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
513 int64 nDebit = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
514 foreach(const CTxIn& txin, vin)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
515 nDebit += txin.GetDebit();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
516 return nDebit;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
517 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
518
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
519 int64 GetCredit() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
520 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
521 int64 nCredit = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
522 foreach(const CTxOut& txout, vout)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
523 nCredit += txout.GetCredit();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
524 return nCredit;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
525 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
526
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
527 int64 GetValueOut() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
528 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
529 int64 nValueOut = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
530 foreach(const CTxOut& txout, vout)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
531 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
532 if (txout.nValue < 0)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
533 throw runtime_error("CTransaction::GetValueOut() : negative value");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
534 nValueOut += txout.nValue;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
535 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
536 return nValueOut;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
537 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
538
30
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
539 int64 GetMinFee(unsigned int nBlockSize=1) const
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
540 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
541 // Base fee is 1 cent per kilobyte
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
542 unsigned int nBytes = ::GetSerializeSize(*this, SER_NETWORK);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
543 int64 nMinFee = (1 + (int64)nBytes / 1000) * CENT;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
544
30
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
545 // Transactions under 60K are free as long as block size is under 80K
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
546 // (about 27,000bc if made of 50bc inputs)
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
547 if (nBytes < 60000 && nBlockSize < 80000)
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
548 nMinFee = 0;
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
549
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
550 // Transactions under 3K are free as long as block size is under 200K
95cf64d958cb fix transaction fee bug in CreateTransaction, higher size cutoff for free transactions in GetMinFee
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 29
diff changeset
551 if (nBytes < 3000 && nBlockSize < 200000)
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
552 nMinFee = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
553
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
554 // To limit dust spam, require a 0.01 fee if any output is less than 0.01
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
555 if (nMinFee < CENT)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
556 foreach(const CTxOut& txout, vout)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
557 if (txout.nValue < CENT)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
558 nMinFee = CENT;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
559
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
560 return nMinFee;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
561 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
562
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
563
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
564
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
565 bool ReadFromDisk(CDiskTxPos pos, FILE** pfileRet=NULL)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
566 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
567 CAutoFile filein = OpenBlockFile(pos.nFile, 0, pfileRet ? "rb+" : "rb");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
568 if (!filein)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
569 return error("CTransaction::ReadFromDisk() : OpenBlockFile failed");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
570
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
571 // Read transaction
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
572 if (fseek(filein, pos.nTxPos, SEEK_SET) != 0)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
573 return error("CTransaction::ReadFromDisk() : fseek failed");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
574 filein >> *this;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
575
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
576 // Return file pointer
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
577 if (pfileRet)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
578 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
579 if (fseek(filein, pos.nTxPos, SEEK_SET) != 0)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
580 return error("CTransaction::ReadFromDisk() : second fseek failed");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
581 *pfileRet = filein.release();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
582 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
583 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
584 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
585
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
586
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
587 friend bool operator==(const CTransaction& a, const CTransaction& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
588 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
589 return (a.nVersion == b.nVersion &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
590 a.vin == b.vin &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
591 a.vout == b.vout &&
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
592 a.nLockTime == b.nLockTime);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
593 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
594
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
595 friend bool operator!=(const CTransaction& a, const CTransaction& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
596 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
597 return !(a == b);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
598 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
599
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
600
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
601 string ToString() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
602 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
603 string str;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
604 str += strprintf("CTransaction(hash=%s, ver=%d, vin.size=%d, vout.size=%d, nLockTime=%d)\n",
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
605 GetHash().ToString().substr(0,6).c_str(),
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
606 nVersion,
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
607 vin.size(),
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
608 vout.size(),
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
609 nLockTime);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
610 for (int i = 0; i < vin.size(); i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
611 str += " " + vin[i].ToString() + "\n";
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
612 for (int i = 0; i < vout.size(); i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
613 str += " " + vout[i].ToString() + "\n";
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
614 return str;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
615 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
616
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
617 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
618 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
619 printf("%s", ToString().c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
620 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
621
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
622
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
623
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
624 bool DisconnectInputs(CTxDB& txdb);
226
7aa42b703b52 misc changes
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 222
diff changeset
625 bool ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPool, CDiskTxPos posThisTx,
7aa42b703b52 misc changes
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 222
diff changeset
626 CBlockIndex* pindexBlock, int64& nFees, bool fBlock, bool fMiner, int64 nMinFee=0);
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
627 bool ClientConnectInputs();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
628
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
629 bool AcceptTransaction(CTxDB& txdb, bool fCheckInputs=true, bool* pfMissingInputs=NULL);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
630
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
631 bool AcceptTransaction(bool fCheckInputs=true, bool* pfMissingInputs=NULL)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
632 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
633 CTxDB txdb("r");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
634 return AcceptTransaction(txdb, fCheckInputs, pfMissingInputs);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
635 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
636
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
637 protected:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
638 bool AddToMemoryPool();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
639 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
640 bool RemoveFromMemoryPool();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
641 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
642
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
643
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
644
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
645
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
646
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
647 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
648 // A transaction with a merkle branch linking it to the block chain
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
649 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
650 class CMerkleTx : public CTransaction
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
651 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
652 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
653 uint256 hashBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
654 vector<uint256> vMerkleBranch;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
655 int nIndex;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
656
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
657 // memory only
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
658 mutable bool fMerkleVerified;
18
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
659 mutable bool fGetCreditCached;
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
660 mutable int64 nGetCreditCached;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
661
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
662
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
663 CMerkleTx()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
664 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
665 Init();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
666 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
667
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
668 CMerkleTx(const CTransaction& txIn) : CTransaction(txIn)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
669 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
670 Init();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
671 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
672
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
673 void Init()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
674 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
675 hashBlock = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
676 nIndex = -1;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
677 fMerkleVerified = false;
18
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
678 fGetCreditCached = false;
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
679 nGetCreditCached = 0;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
680 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
681
26
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
682 IMPLEMENT_SERIALIZE
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
683 (
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
684 nSerSize += SerReadWrite(s, *(CTransaction*)this, nType, nVersion, ser_action);
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
685 nVersion = this->nVersion;
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
686 READWRITE(hashBlock);
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
687 READWRITE(vMerkleBranch);
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
688 READWRITE(nIndex);
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
689 )
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
690
18
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
691 int64 GetCredit(bool fUseCache=false) const
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
692 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
693 // Must wait until coinbase is safely deep enough in the chain before valuing it
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
694 if (IsCoinBase() && GetBlocksToMaturity() > 0)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
695 return 0;
18
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
696
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
697 // GetBalance can assume transactions in mapWallet won't change
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
698 if (fUseCache && fGetCreditCached)
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
699 return nGetCreditCached;
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
700 nGetCreditCached = CTransaction::GetCredit();
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
701 fGetCreditCached = true;
5a1f9b654eb0 move debug.log and db.log to data dir, portable GetDataDir, optimize GetBalance, fix repaint bogdown, -addnode and -? switches
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 13
diff changeset
702 return nGetCreditCached;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
703 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
704
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
705
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
706 int SetMerkleBranch(const CBlock* pblock=NULL);
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 42
diff changeset
707 int GetDepthInMainChain(int& nHeightRet) const;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 42
diff changeset
708 int GetDepthInMainChain() const { int nHeight; return GetDepthInMainChain(nHeight); }
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
709 bool IsInMainChain() const { return GetDepthInMainChain() > 0; }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
710 int GetBlocksToMaturity() const;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
711 bool AcceptTransaction(CTxDB& txdb, bool fCheckInputs=true);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
712 bool AcceptTransaction() { CTxDB txdb("r"); return AcceptTransaction(txdb); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
713 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
714
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
715
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
716
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
717
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
718 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
719 // A transaction with a bunch of additional info that only the owner cares
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
720 // about. It includes any unrecorded transactions needed to link it back
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
721 // to the block chain.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
722 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
723 class CWalletTx : public CMerkleTx
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
724 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
725 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
726 vector<CMerkleTx> vtxPrev;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
727 map<string, string> mapValue;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
728 vector<pair<string, string> > vOrderForm;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
729 unsigned int fTimeReceivedIsTxTime;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
730 unsigned int nTimeReceived; // time received by this node
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
731 char fFromMe;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
732 char fSpent;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
733 //// probably need to sign the order info so know it came from payer
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
734
11
aabb318698b9 addr relaying fixes, proxy option and privacy patches, detect connect to self, non-final tx locktime changes, fix hide unconfirmed generated
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 8
diff changeset
735 // memory only UI hints
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
736 mutable unsigned int nTimeDisplayed;
11
aabb318698b9 addr relaying fixes, proxy option and privacy patches, detect connect to self, non-final tx locktime changes, fix hide unconfirmed generated
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 8
diff changeset
737 mutable int nLinesDisplayed;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
738
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
739
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
740 CWalletTx()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
741 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
742 Init();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
743 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
744
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
745 CWalletTx(const CMerkleTx& txIn) : CMerkleTx(txIn)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
746 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
747 Init();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
748 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
749
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
750 CWalletTx(const CTransaction& txIn) : CMerkleTx(txIn)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
751 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
752 Init();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
753 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
754
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
755 void Init()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
756 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
757 fTimeReceivedIsTxTime = false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
758 nTimeReceived = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
759 fFromMe = false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
760 fSpent = false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
761 nTimeDisplayed = 0;
11
aabb318698b9 addr relaying fixes, proxy option and privacy patches, detect connect to self, non-final tx locktime changes, fix hide unconfirmed generated
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 8
diff changeset
762 nLinesDisplayed = 0;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
763 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
764
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
765 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
766 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
767 nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion, ser_action);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
768 nVersion = this->nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
769 READWRITE(vtxPrev);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
770 READWRITE(mapValue);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
771 READWRITE(vOrderForm);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
772 READWRITE(fTimeReceivedIsTxTime);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
773 READWRITE(nTimeReceived);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
774 READWRITE(fFromMe);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
775 READWRITE(fSpent);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
776 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
777
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
778 bool WriteToDisk()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
779 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
780 return CWalletDB().WriteTx(GetHash(), *this);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
781 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
782
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
783
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
784 int64 GetTxTime() const;
26
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
785 int GetRequestCount() const;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
786
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
787 void AddSupportingTransactions(CTxDB& txdb);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
788
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
789 bool AcceptWalletTransaction(CTxDB& txdb, bool fCheckInputs=true);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
790 bool AcceptWalletTransaction() { CTxDB txdb("r"); return AcceptWalletTransaction(txdb); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
791
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
792 void RelayWalletTransaction(CTxDB& txdb);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
793 void RelayWalletTransaction() { CTxDB txdb("r"); RelayWalletTransaction(txdb); }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
794 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
795
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
796
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
797
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
798
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
799 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
800 // A txdb record that contains the disk location of a transaction and the
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
801 // locations of transactions that spend its outputs. vSpent is really only
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
802 // used as a flag, but having the location is very helpful for debugging.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
803 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
804 class CTxIndex
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
805 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
806 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
807 CDiskTxPos pos;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
808 vector<CDiskTxPos> vSpent;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
809
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
810 CTxIndex()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
811 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
812 SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
813 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
814
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
815 CTxIndex(const CDiskTxPos& posIn, unsigned int nOutputs)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
816 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
817 pos = posIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
818 vSpent.resize(nOutputs);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
819 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
820
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
821 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
822 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
823 if (!(nType & SER_GETHASH))
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
824 READWRITE(nVersion);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
825 READWRITE(pos);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
826 READWRITE(vSpent);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
827 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
828
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
829 void SetNull()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
830 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
831 pos.SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
832 vSpent.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
833 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
834
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
835 bool IsNull()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
836 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
837 return pos.IsNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
838 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
839
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
840 friend bool operator==(const CTxIndex& a, const CTxIndex& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
841 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
842 if (a.pos != b.pos || a.vSpent.size() != b.vSpent.size())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
843 return false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
844 for (int i = 0; i < a.vSpent.size(); i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
845 if (a.vSpent[i] != b.vSpent[i])
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
846 return false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
847 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
848 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
849
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
850 friend bool operator!=(const CTxIndex& a, const CTxIndex& b)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
851 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
852 return !(a == b);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
853 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
854 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
855
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
856
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
857
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
858
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
859
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
860 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
861 // Nodes collect new transactions into a block, hash them into a hash tree,
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
862 // and scan through nonce values to make the block's hash satisfy proof-of-work
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
863 // requirements. When they solve the proof-of-work, they broadcast the block
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
864 // to everyone and the block is added to the block chain. The first transaction
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
865 // in the block is a special one that creates a new coin owned by the creator
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
866 // of the block.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
867 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
868 // Blocks are appended to blk0001.dat files on disk. Their location on disk
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
869 // is indexed by CBlockIndex objects in memory.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
870 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
871 class CBlock
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
872 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
873 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
874 // header
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
875 int nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
876 uint256 hashPrevBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
877 uint256 hashMerkleRoot;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
878 unsigned int nTime;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
879 unsigned int nBits;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
880 unsigned int nNonce;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
881
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
882 // network and disk
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
883 vector<CTransaction> vtx;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
884
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
885 // memory only
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
886 mutable vector<uint256> vMerkleTree;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
887
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
888
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
889 CBlock()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
890 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
891 SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
892 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
893
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
894 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
895 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
896 READWRITE(this->nVersion);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
897 nVersion = this->nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
898 READWRITE(hashPrevBlock);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
899 READWRITE(hashMerkleRoot);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
900 READWRITE(nTime);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
901 READWRITE(nBits);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
902 READWRITE(nNonce);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
903
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
904 // ConnectBlock depends on vtx being last so it can calculate offset
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
905 if (!(nType & (SER_GETHASH|SER_BLOCKHEADERONLY)))
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
906 READWRITE(vtx);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
907 else if (fRead)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
908 const_cast<CBlock*>(this)->vtx.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
909 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
910
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
911 void SetNull()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
912 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
913 nVersion = 1;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
914 hashPrevBlock = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
915 hashMerkleRoot = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
916 nTime = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
917 nBits = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
918 nNonce = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
919 vtx.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
920 vMerkleTree.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
921 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
922
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
923 bool IsNull() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
924 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
925 return (nBits == 0);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
926 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
927
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
928 uint256 GetHash() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
929 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
930 return Hash(BEGIN(nVersion), END(nNonce));
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
931 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
932
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
933
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
934 uint256 BuildMerkleTree() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
935 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
936 vMerkleTree.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
937 foreach(const CTransaction& tx, vtx)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
938 vMerkleTree.push_back(tx.GetHash());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
939 int j = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
940 for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
941 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
942 for (int i = 0; i < nSize; i += 2)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
943 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
944 int i2 = min(i+1, nSize-1);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
945 vMerkleTree.push_back(Hash(BEGIN(vMerkleTree[j+i]), END(vMerkleTree[j+i]),
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
946 BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2])));
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
947 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
948 j += nSize;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
949 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
950 return (vMerkleTree.empty() ? 0 : vMerkleTree.back());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
951 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
952
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
953 vector<uint256> GetMerkleBranch(int nIndex) const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
954 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
955 if (vMerkleTree.empty())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
956 BuildMerkleTree();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
957 vector<uint256> vMerkleBranch;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
958 int j = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
959 for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
960 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
961 int i = min(nIndex^1, nSize-1);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
962 vMerkleBranch.push_back(vMerkleTree[j+i]);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
963 nIndex >>= 1;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
964 j += nSize;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
965 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
966 return vMerkleBranch;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
967 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
968
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
969 static uint256 CheckMerkleBranch(uint256 hash, const vector<uint256>& vMerkleBranch, int nIndex)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
970 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
971 if (nIndex == -1)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
972 return 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
973 foreach(const uint256& otherside, vMerkleBranch)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
974 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
975 if (nIndex & 1)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
976 hash = Hash(BEGIN(otherside), END(otherside), BEGIN(hash), END(hash));
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
977 else
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
978 hash = Hash(BEGIN(hash), END(hash), BEGIN(otherside), END(otherside));
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
979 nIndex >>= 1;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
980 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
981 return hash;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
982 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
983
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
984
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
985 bool WriteToDisk(bool fWriteTransactions, unsigned int& nFileRet, unsigned int& nBlockPosRet)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
986 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
987 // Open history file to append
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
988 CAutoFile fileout = AppendBlockFile(nFileRet);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
989 if (!fileout)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
990 return error("CBlock::WriteToDisk() : AppendBlockFile failed");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
991 if (!fWriteTransactions)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
992 fileout.nType |= SER_BLOCKHEADERONLY;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
993
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
994 // Write index header
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
995 unsigned int nSize = fileout.GetSerializeSize(*this);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
996 fileout << FLATDATA(pchMessageStart) << nSize;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
997
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
998 // Write block
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
999 nBlockPosRet = ftell(fileout);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1000 if (nBlockPosRet == -1)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1001 return error("CBlock::WriteToDisk() : ftell failed");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1002 fileout << *this;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1003
20
e7d23a6baa44 unix build merged in, bitmap resources from xpm instead of rc, better addr relay, better selection of addrs by time last seen for faster connect
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 18
diff changeset
1004 // Flush stdio buffers and commit to disk before returning
e7d23a6baa44 unix build merged in, bitmap resources from xpm instead of rc, better addr relay, better selection of addrs by time last seen for faster connect
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 18
diff changeset
1005 fflush(fileout);
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1006 if (!IsInitialBlockDownload() || (nBestHeight+1) % 500 == 0)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1007 {
20
e7d23a6baa44 unix build merged in, bitmap resources from xpm instead of rc, better addr relay, better selection of addrs by time last seen for faster connect
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 18
diff changeset
1008 #ifdef __WXMSW__
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1009 _commit(_fileno(fileout));
20
e7d23a6baa44 unix build merged in, bitmap resources from xpm instead of rc, better addr relay, better selection of addrs by time last seen for faster connect
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 18
diff changeset
1010 #else
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1011 fsync(fileno(fileout));
20
e7d23a6baa44 unix build merged in, bitmap resources from xpm instead of rc, better addr relay, better selection of addrs by time last seen for faster connect
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 18
diff changeset
1012 #endif
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1013 }
20
e7d23a6baa44 unix build merged in, bitmap resources from xpm instead of rc, better addr relay, better selection of addrs by time last seen for faster connect
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 18
diff changeset
1014
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1015 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1016 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1017
26
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
1018 bool ReadFromDisk(unsigned int nFile, unsigned int nBlockPos, bool fReadTransactions=true)
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1019 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1020 SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1021
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1022 // Open history file to read
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1023 CAutoFile filein = OpenBlockFile(nFile, nBlockPos, "rb");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1024 if (!filein)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1025 return error("CBlock::ReadFromDisk() : OpenBlockFile failed");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1026 if (!fReadTransactions)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1027 filein.nType |= SER_BLOCKHEADERONLY;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1028
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1029 // Read block
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1030 filein >> *this;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1031
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1032 // Check the header
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1033 if (CBigNum().SetCompact(nBits) > bnProofOfWorkLimit)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1034 return error("CBlock::ReadFromDisk() : nBits errors in block header");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1035 if (GetHash() > CBigNum().SetCompact(nBits).getuint256())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1036 return error("CBlock::ReadFromDisk() : GetHash() errors in block header");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1037
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1038 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1039 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1040
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1041
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1042
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1043 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1044 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1045 printf("CBlock(hash=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%d)\n",
28
c54147fb3fc6 bugfix Db::open/close and zombie sockets bugs fix double-close of socket handle,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 26
diff changeset
1046 GetHash().ToString().substr(0,16).c_str(),
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1047 nVersion,
28
c54147fb3fc6 bugfix Db::open/close and zombie sockets bugs fix double-close of socket handle,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 26
diff changeset
1048 hashPrevBlock.ToString().substr(0,16).c_str(),
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1049 hashMerkleRoot.ToString().substr(0,6).c_str(),
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1050 nTime, nBits, nNonce,
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1051 vtx.size());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1052 for (int i = 0; i < vtx.size(); i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1053 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1054 printf(" ");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1055 vtx[i].print();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1056 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1057 printf(" vMerkleTree: ");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1058 for (int i = 0; i < vMerkleTree.size(); i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1059 printf("%s ", vMerkleTree[i].ToString().substr(0,6).c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1060 printf("\n");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1061 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1062
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1063
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 204
diff changeset
1064 int64 GetBlockValue(int nHeight, int64 nFees) const;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1065 bool DisconnectBlock(CTxDB& txdb, CBlockIndex* pindex);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1066 bool ConnectBlock(CTxDB& txdb, CBlockIndex* pindex);
26
c94801659fe4 monitor ThreadSocketHandler and terminate and restart if hung, convert _beginthread to CreateThread wrapper, disconnect inactive connections, ping, break up long messages to speed up initial download, better priorities for initiating connections, track how many nodes have requested our blocks and transactions, status #/offline and warning message on unsent blocks, minimize on close as separate option -- linux-test5
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 23
diff changeset
1067 bool ReadFromDisk(const CBlockIndex* blockindex, bool fReadTransactions=true);
255
835b9dd8e8cd blocks-1,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 227
diff changeset
1068 bool SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew);
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1069 bool AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1070 bool CheckBlock() const;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1071 bool AcceptBlock();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1072 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1073
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1074
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1075
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1076
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1077
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1078
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1079 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1080 // The block chain is a tree shaped structure starting with the
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1081 // genesis block at the root, with each block potentially having multiple
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1082 // candidates to be the next block. pprev and pnext link a path through the
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1083 // main/longest chain. A blockindex may have multiple pprev pointing back
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1084 // to it, but pnext will only point forward to the longest branch, or will
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1085 // be null if the block is not part of the longest chain.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1086 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1087 class CBlockIndex
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1088 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1089 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1090 const uint256* phashBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1091 CBlockIndex* pprev;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1092 CBlockIndex* pnext;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1093 unsigned int nFile;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1094 unsigned int nBlockPos;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1095 int nHeight;
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1096 CBigNum bnChainWork;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1097
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1098 // block header
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1099 int nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1100 uint256 hashMerkleRoot;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1101 unsigned int nTime;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1102 unsigned int nBits;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1103 unsigned int nNonce;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1104
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1105
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1106 CBlockIndex()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1107 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1108 phashBlock = NULL;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1109 pprev = NULL;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1110 pnext = NULL;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1111 nFile = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1112 nBlockPos = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1113 nHeight = 0;
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1114 bnChainWork = 0;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1115
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1116 nVersion = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1117 hashMerkleRoot = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1118 nTime = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1119 nBits = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1120 nNonce = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1121 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1122
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1123 CBlockIndex(unsigned int nFileIn, unsigned int nBlockPosIn, CBlock& block)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1124 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1125 phashBlock = NULL;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1126 pprev = NULL;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1127 pnext = NULL;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1128 nFile = nFileIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1129 nBlockPos = nBlockPosIn;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1130 nHeight = 0;
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1131 bnChainWork = 0;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1132
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1133 nVersion = block.nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1134 hashMerkleRoot = block.hashMerkleRoot;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1135 nTime = block.nTime;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1136 nBits = block.nBits;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1137 nNonce = block.nNonce;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1138 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1139
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1140 uint256 GetBlockHash() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1141 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1142 return *phashBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1143 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1144
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1145 CBigNum GetBlockWork() const
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1146 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1147 return (CBigNum(1)<<256) / (CBigNum().SetCompact(nBits)+1);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1148 }
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 198
diff changeset
1149
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1150 bool IsInMainChain() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1151 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1152 return (pnext || this == pindexBest);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1153 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1154
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1155 bool EraseBlockFromDisk()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1156 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1157 // Open history file
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1158 CAutoFile fileout = OpenBlockFile(nFile, nBlockPos, "rb+");
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1159 if (!fileout)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1160 return false;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1161
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1162 // Overwrite with empty null block
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1163 CBlock block;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1164 block.SetNull();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1165 fileout << block;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1166
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1167 return true;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1168 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1169
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1170 enum { nMedianTimeSpan=11 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1171
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1172 int64 GetMedianTimePast() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1173 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1174 unsigned int pmedian[nMedianTimeSpan];
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1175 unsigned int* pbegin = &pmedian[nMedianTimeSpan];
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1176 unsigned int* pend = &pmedian[nMedianTimeSpan];
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1177
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1178 const CBlockIndex* pindex = this;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1179 for (int i = 0; i < nMedianTimeSpan && pindex; i++, pindex = pindex->pprev)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1180 *(--pbegin) = pindex->nTime;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1181
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1182 sort(pbegin, pend);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1183 return pbegin[(pend - pbegin)/2];
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1184 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1185
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1186 int64 GetMedianTime() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1187 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1188 const CBlockIndex* pindex = this;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1189 for (int i = 0; i < nMedianTimeSpan/2; i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1190 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1191 if (!pindex->pnext)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1192 return nTime;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1193 pindex = pindex->pnext;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1194 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1195 return pindex->GetMedianTimePast();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1196 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1197
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1198
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1199
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1200 string ToString() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1201 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1202 return strprintf("CBlockIndex(nprev=%08x, pnext=%08x, nFile=%d, nBlockPos=%-6d nHeight=%d, merkle=%s, hashBlock=%s)",
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1203 pprev, pnext, nFile, nBlockPos, nHeight,
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1204 hashMerkleRoot.ToString().substr(0,6).c_str(),
28
c54147fb3fc6 bugfix Db::open/close and zombie sockets bugs fix double-close of socket handle,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 26
diff changeset
1205 GetBlockHash().ToString().substr(0,16).c_str());
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1206 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1207
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1208 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1209 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1210 printf("%s\n", ToString().c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1211 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1212 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1213
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1214
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1215
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1216 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1217 // Used to marshal pointers into hashes for db storage.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1218 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1219 class CDiskBlockIndex : public CBlockIndex
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1220 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1221 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1222 uint256 hashPrev;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1223 uint256 hashNext;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1224
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1225 CDiskBlockIndex()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1226 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1227 hashPrev = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1228 hashNext = 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1229 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1230
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1231 explicit CDiskBlockIndex(CBlockIndex* pindex) : CBlockIndex(*pindex)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1232 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1233 hashPrev = (pprev ? pprev->GetBlockHash() : 0);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1234 hashNext = (pnext ? pnext->GetBlockHash() : 0);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1235 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1236
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1237 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1238 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1239 if (!(nType & SER_GETHASH))
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1240 READWRITE(nVersion);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1241
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1242 READWRITE(hashNext);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1243 READWRITE(nFile);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1244 READWRITE(nBlockPos);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1245 READWRITE(nHeight);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1246
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1247 // block header
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1248 READWRITE(this->nVersion);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1249 READWRITE(hashPrev);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1250 READWRITE(hashMerkleRoot);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1251 READWRITE(nTime);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1252 READWRITE(nBits);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1253 READWRITE(nNonce);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1254 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1255
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1256 uint256 GetBlockHash() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1257 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1258 CBlock block;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1259 block.nVersion = nVersion;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1260 block.hashPrevBlock = hashPrev;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1261 block.hashMerkleRoot = hashMerkleRoot;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1262 block.nTime = nTime;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1263 block.nBits = nBits;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1264 block.nNonce = nNonce;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1265 return block.GetHash();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1266 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1267
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1268
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1269 string ToString() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1270 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1271 string str = "CDiskBlockIndex(";
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1272 str += CBlockIndex::ToString();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1273 str += strprintf("\n hashBlock=%s, hashPrev=%s, hashNext=%s)",
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1274 GetBlockHash().ToString().c_str(),
28
c54147fb3fc6 bugfix Db::open/close and zombie sockets bugs fix double-close of socket handle,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 26
diff changeset
1275 hashPrev.ToString().substr(0,16).c_str(),
c54147fb3fc6 bugfix Db::open/close and zombie sockets bugs fix double-close of socket handle,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 26
diff changeset
1276 hashNext.ToString().substr(0,16).c_str());
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1277 return str;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1278 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1279
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1280 void print() const
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1281 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1282 printf("%s\n", ToString().c_str());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1283 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1284 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1285
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1286
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1287
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1288
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1289
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1290
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1291
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1292
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1293 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1294 // Describes a place in the block chain to another node such that if the
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1295 // other node doesn't have the same branch, it can find a recent common trunk.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1296 // The further back it is, the further before the fork it may be.
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1297 //
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1298 class CBlockLocator
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1299 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1300 protected:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1301 vector<uint256> vHave;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1302 public:
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1303
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1304 CBlockLocator()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1305 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1306 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1307
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1308 explicit CBlockLocator(const CBlockIndex* pindex)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1309 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1310 Set(pindex);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1311 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1312
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1313 explicit CBlockLocator(uint256 hashBlock)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1314 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1315 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1316 if (mi != mapBlockIndex.end())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1317 Set((*mi).second);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1318 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1319
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1320 IMPLEMENT_SERIALIZE
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1321 (
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1322 if (!(nType & SER_GETHASH))
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1323 READWRITE(nVersion);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1324 READWRITE(vHave);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1325 )
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1326
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1327 void Set(const CBlockIndex* pindex)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1328 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1329 vHave.clear();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1330 int nStep = 1;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1331 while (pindex)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1332 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1333 vHave.push_back(pindex->GetBlockHash());
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1334
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1335 // Exponentially larger steps back
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1336 for (int i = 0; pindex && i < nStep; i++)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1337 pindex = pindex->pprev;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1338 if (vHave.size() > 10)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1339 nStep *= 2;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1340 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1341 vHave.push_back(hashGenesisBlock);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1342 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1343
29
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1344 int GetDistanceBack()
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1345 {
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1346 // Retrace how far back it was in the sender's branch
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1347 int nDistance = 0;
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1348 int nStep = 1;
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1349 foreach(const uint256& hash, vHave)
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1350 {
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1351 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1352 if (mi != mapBlockIndex.end())
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1353 {
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1354 CBlockIndex* pindex = (*mi).second;
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1355 if (pindex->IsInMainChain())
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1356 return nDistance;
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1357 }
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1358 nDistance += nStep;
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1359 if (nDistance > 10)
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1360 nStep *= 2;
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1361 }
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1362 return nDistance;
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1363 }
1488d70ef072 minor fix to batched initial download in case requester has more than 500 block non-main branch
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 28
diff changeset
1364
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1365 CBlockIndex* GetBlockIndex()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1366 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1367 // Find the first block the caller has in the main chain
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1368 foreach(const uint256& hash, vHave)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1369 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1370 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1371 if (mi != mapBlockIndex.end())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1372 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1373 CBlockIndex* pindex = (*mi).second;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1374 if (pindex->IsInMainChain())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1375 return pindex;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1376 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1377 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1378 return pindexGenesisBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1379 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1380
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1381 uint256 GetBlockHash()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1382 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1383 // Find the first block the caller has in the main chain
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1384 foreach(const uint256& hash, vHave)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1385 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1386 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1387 if (mi != mapBlockIndex.end())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1388 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1389 CBlockIndex* pindex = (*mi).second;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1390 if (pindex->IsInMainChain())
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1391 return hash;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1392 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1393 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1394 return hashGenesisBlock;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1395 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1396
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1397 int GetHeight()
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1398 {
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1399 CBlockIndex* pindex = GetBlockIndex();
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1400 if (!pindex)
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1401 return 0;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1402 return pindex->nHeight;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1403 }
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1404 };
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1405
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1406
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1407
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1408
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1409
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1410
42
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1411 //
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1412 // Private key that includes an expiration date in case it never gets used.
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1413 //
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1414 class CWalletKey
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1415 {
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1416 public:
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1417 CPrivKey vchPrivKey;
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1418 int64 nTimeCreated;
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1419 int64 nTimeExpires;
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 55
diff changeset
1420 string strComment;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 55
diff changeset
1421 //// todo: add something to note what created it (user, getnewaddress, change)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 55
diff changeset
1422 //// maybe should have a map<string, string> property map
42
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1423
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1424 CWalletKey(int64 nTimeExpiresIn=0)
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1425 {
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1426 nTimeCreated = (nTimeExpiresIn ? GetTime() : 0);
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1427 nTimeExpires = nTimeExpiresIn;
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1428 }
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1429
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1430 IMPLEMENT_SERIALIZE
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1431 (
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1432 if (!(nType & SER_GETHASH))
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1433 READWRITE(nVersion);
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1434 READWRITE(vchPrivKey);
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1435 READWRITE(nTimeCreated);
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1436 READWRITE(nTimeExpires);
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 55
diff changeset
1437 READWRITE(strComment);
42
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1438 )
3834ed238a28 update fSpent flag on wallet transactions if they're seen spent in case copy of wallet.dat was used elsewhere or restored from backup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 30
diff changeset
1439 };
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1440
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1441
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1442
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1443
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1444
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1445
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1446 extern map<uint256, CTransaction> mapTransactions;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1447 extern map<uint256, CWalletTx> mapWallet;
8
f718bedded34 flush wallet.dat, multi-proc, reorg options, revert to startup folder shortcut
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 3
diff changeset
1448 extern vector<uint256> vWalletUpdated;
0
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1449 extern CCriticalSection cs_mapWallet;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1450 extern map<vector<unsigned char>, CPrivKey> mapKeys;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1451 extern map<uint160, vector<unsigned char> > mapPubKeys;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1452 extern CCriticalSection cs_mapKeys;
f5bbb2375e0b First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1453 extern CKey keyUser;