Mercurial > hg > bitcoin
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 |
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; |