Mercurial > hg > bitcoin
annotate main.h @ 11:aabb318698b9 draft
addr relaying fixes, proxy option and privacy patches, detect connect to self, non-final tx locktime changes, fix hide unconfirmed generated
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@18 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> |
---|---|
date | Thu, 29 Oct 2009 02:52:48 +0000 |
parents | f718bedded34 |
children | a17d69eac18f |
rev | line source |
---|---|
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1 // Copyright (c) 2009 Satoshi Nakamoto |
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; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
18 static const int64 COIN = 100000000; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
19 static const int64 CENT = 1000000; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
20 static const int COINBASE_MATURITY = 100; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
21 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
22 static const CBigNum bnProofOfWorkLimit(~uint256(0) >> 32); |
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 |
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 extern CCriticalSection cs_main; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
30 extern map<uint256, CBlockIndex*> mapBlockIndex; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
31 extern const uint256 hashGenesisBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
32 extern CBlockIndex* pindexGenesisBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
33 extern int nBestHeight; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
34 extern uint256 hashBestChain; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
35 extern CBlockIndex* pindexBest; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
36 extern unsigned int nTransactionsUpdated; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
37 extern string strSetDataDir; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
38 extern int nDropMessagesTest; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
39 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
40 // Settings |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
41 extern int fGenerateBitcoins; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
42 extern int64 nTransactionFee; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
43 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
|
44 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
|
45 extern int nLimitProcessors; |
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
|
46 |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
47 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
50 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
51 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
52 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
53 string GetAppDir(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
54 bool CheckDiskSpace(int64 nAdditionalBytes=0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
55 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
|
56 FILE* AppendBlockFile(unsigned int& nFileRet); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
57 bool AddKey(const CKey& key); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
58 vector<unsigned char> GenerateNewKey(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
59 bool AddToWallet(const CWalletTx& wtxIn); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
60 void ReacceptWalletTransactions(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
61 void RelayWalletTransactions(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
62 bool LoadBlockIndex(bool fAllowNew=true); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
63 void PrintBlockTree(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
64 bool ProcessMessages(CNode* pfrom); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
65 bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
66 bool SendMessages(CNode* pto); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
67 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
|
68 bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CKey& keyRet, int64& nFeeRequiredRet); |
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
|
69 bool CommitTransactionSpent(const CWalletTx& wtxNew, const CKey& key); |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
70 bool SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew); |
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
|
71 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
|
72 void ThreadBitcoinMiner(void* parg); |
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
|
73 bool BitcoinMiner(); |
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
|
74 |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
75 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
76 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
77 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
78 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
79 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
80 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
81 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
82 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
83 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
84 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
85 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
86 class CDiskTxPos |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
87 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
88 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
89 unsigned int nFile; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
90 unsigned int nBlockPos; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
91 unsigned int nTxPos; |
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 CDiskTxPos() |
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 SetNull(); |
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 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
|
99 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
100 nFile = nFileIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
101 nBlockPos = nBlockPosIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
102 nTxPos = nTxPosIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
103 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
104 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
105 IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
106 void SetNull() { nFile = -1; nBlockPos = 0; nTxPos = 0; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
107 bool IsNull() const { return (nFile == -1); } |
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 friend bool operator==(const CDiskTxPos& a, const CDiskTxPos& b) |
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 return (a.nFile == b.nFile && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
112 a.nBlockPos == b.nBlockPos && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
113 a.nTxPos == b.nTxPos); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
114 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
115 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
116 friend bool operator!=(const CDiskTxPos& a, const CDiskTxPos& b) |
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 return !(a == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
119 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
120 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
121 string ToString() const |
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 if (IsNull()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
124 return strprintf("null"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
125 else |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
126 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
|
127 } |
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 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
130 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
131 printf("%s", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
132 } |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
138 class CInPoint |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
139 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
140 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
141 CTransaction* ptx; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
142 unsigned int n; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
143 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
144 CInPoint() { SetNull(); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
145 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
|
146 void SetNull() { ptx = NULL; n = -1; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
147 bool IsNull() const { return (ptx == NULL && n == -1); } |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
153 class COutPoint |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
154 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
155 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
156 uint256 hash; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
157 unsigned int n; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
158 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
159 COutPoint() { SetNull(); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
160 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
|
161 IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
162 void SetNull() { hash = 0; n = -1; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
163 bool IsNull() const { return (hash == 0 && n == -1); } |
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 friend bool operator<(const COutPoint& a, const COutPoint& b) |
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 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
|
168 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
169 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
170 friend bool operator==(const COutPoint& a, const COutPoint& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
171 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
172 return (a.hash == b.hash && a.n == b.n); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
173 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
174 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
175 friend bool operator!=(const COutPoint& a, const COutPoint& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
176 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
177 return !(a == b); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
180 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
181 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
182 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
|
183 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
184 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
185 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
186 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
187 printf("%s\n", ToString().c_str()); |
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 }; |
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 |
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 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
195 // 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
|
196 // 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
|
197 // output's public key. |
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 class CTxIn |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
202 COutPoint prevout; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
203 CScript scriptSig; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
204 unsigned int nSequence; |
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 CTxIn() |
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 nSequence = UINT_MAX; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
209 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
210 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
211 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
|
212 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
213 prevout = prevoutIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
214 scriptSig = scriptSigIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
215 nSequence = nSequenceIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
216 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
217 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
218 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
|
219 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
220 prevout = COutPoint(hashPrevTx, nOut); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
221 scriptSig = scriptSigIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
222 nSequence = nSequenceIn; |
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 IMPLEMENT_SERIALIZE |
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 READWRITE(prevout); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
228 READWRITE(scriptSig); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
229 READWRITE(nSequence); |
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 bool IsFinal() const |
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 return (nSequence == UINT_MAX); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
235 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
236 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
237 friend bool operator==(const CTxIn& a, const CTxIn& b) |
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 return (a.prevout == b.prevout && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
240 a.scriptSig == b.scriptSig && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
241 a.nSequence == b.nSequence); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
242 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
243 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
244 friend bool operator!=(const CTxIn& a, const CTxIn& b) |
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 return !(a == b); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
249 string ToString() const |
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 string str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
252 str += strprintf("CTxIn("); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
253 str += prevout.ToString(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
254 if (prevout.IsNull()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
255 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
|
256 else |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
257 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
|
258 if (nSequence != UINT_MAX) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
259 str += strprintf(", nSequence=%u", nSequence); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
260 str += ")"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
261 return str; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
264 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
265 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
266 printf("%s\n", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
267 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
268 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
269 bool IsMine() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
270 int64 GetDebit() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
271 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
272 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
273 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
274 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
275 |
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 // 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
|
278 // must be able to sign with to claim it. |
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 class CTxOut |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
283 int64 nValue; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
284 CScript scriptPubKey; |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
287 CTxOut() |
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 SetNull(); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
292 CTxOut(int64 nValueIn, CScript scriptPubKeyIn) |
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 nValue = nValueIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
295 scriptPubKey = scriptPubKeyIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
296 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
297 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
298 IMPLEMENT_SERIALIZE |
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 READWRITE(nValue); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
301 READWRITE(scriptPubKey); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
304 void SetNull() |
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 nValue = -1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
307 scriptPubKey.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
308 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
309 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
310 bool IsNull() |
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 return (nValue == -1); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
315 uint256 GetHash() const |
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 return SerializeHash(*this); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
318 } |
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 bool IsMine() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
321 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
322 return ::IsMine(scriptPubKey); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
325 int64 GetCredit() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
326 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
327 if (IsMine()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
328 return nValue; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
329 return 0; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
332 friend bool operator==(const CTxOut& a, const CTxOut& b) |
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 return (a.nValue == b.nValue && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
335 a.scriptPubKey == b.scriptPubKey); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
336 } |
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 friend bool operator!=(const CTxOut& a, const CTxOut& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
339 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
340 return !(a == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
341 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
342 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
343 string ToString() const |
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 if (scriptPubKey.size() < 6) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
346 return "CTxOut(error)"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
347 return strprintf("CTxOut(nValue=%I64d.%08I64d, scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,24).c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
348 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
349 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
350 void print() const |
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 printf("%s\n", ToString().c_str()); |
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 }; |
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 |
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 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
360 // 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
|
361 // blocks. A transaction can contain multiple inputs and outputs. |
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 class CTransaction |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
364 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
365 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
366 int nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
367 vector<CTxIn> vin; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
368 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
|
369 unsigned int nLockTime; |
0
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 CTransaction() |
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 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
375 } |
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 IMPLEMENT_SERIALIZE |
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 READWRITE(this->nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
380 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
381 READWRITE(vin); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
382 READWRITE(vout); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
383 READWRITE(nLockTime); |
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 void SetNull() |
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 nVersion = 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
389 vin.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
390 vout.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
391 nLockTime = 0; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
394 bool IsNull() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
395 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
396 return (vin.empty() && vout.empty()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
397 } |
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 uint256 GetHash() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
400 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
401 return SerializeHash(*this); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
402 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
403 |
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
|
404 bool IsFinal(int64 nBlockTime=0) const |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
405 { |
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
|
406 // Time based nLockTime implemented in 0.1.6, |
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
|
407 // do not use time based until most 0.1.5 nodes have upgraded. |
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
|
408 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
|
409 nBlockTime = GetAdjustedTime(); |
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
|
410 if (nLockTime == 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
|
411 return true; |
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
|
412 if (nLockTime < (nLockTime < 500000000 ? nBestHeight : nBlockTime)) |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
413 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
414 foreach(const CTxIn& txin, vin) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
415 if (!txin.IsFinal()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
416 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
417 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
418 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
419 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
420 bool IsNewerThan(const CTransaction& old) const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
421 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
422 if (vin.size() != old.vin.size()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
423 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
424 for (int i = 0; i < vin.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
425 if (vin[i].prevout != old.vin[i].prevout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
426 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
427 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
428 bool fNewer = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
429 unsigned int nLowest = UINT_MAX; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
430 for (int i = 0; i < vin.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
431 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
432 if (vin[i].nSequence != old.vin[i].nSequence) |
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 if (vin[i].nSequence <= nLowest) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
435 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
436 fNewer = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
437 nLowest = vin[i].nSequence; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
438 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
439 if (old.vin[i].nSequence < nLowest) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
440 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
441 fNewer = true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
442 nLowest = old.vin[i].nSequence; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
443 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
444 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
445 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
446 return fNewer; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
447 } |
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 bool IsCoinBase() const |
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 return (vin.size() == 1 && vin[0].prevout.IsNull()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
452 } |
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 bool CheckTransaction() const |
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 // Basic checks that don't depend on any context |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
457 if (vin.empty() || vout.empty()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
458 return error("CTransaction::CheckTransaction() : vin or vout empty"); |
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 // Check for negative values |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
461 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
462 if (txout.nValue < 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
463 return error("CTransaction::CheckTransaction() : txout.nValue negative"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
464 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
465 if (IsCoinBase()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
466 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
467 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
|
468 return error("CTransaction::CheckTransaction() : coinbase script size"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
469 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
470 else |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
471 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
472 foreach(const CTxIn& txin, vin) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
473 if (txin.prevout.IsNull()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
474 return error("CTransaction::CheckTransaction() : prevout is null"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
475 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
476 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
477 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
478 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
479 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
480 bool IsMine() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
481 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
482 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
483 if (txout.IsMine()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
484 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
485 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
486 } |
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 int64 GetDebit() const |
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 int64 nDebit = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
491 foreach(const CTxIn& txin, vin) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
492 nDebit += txin.GetDebit(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
493 return nDebit; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
496 int64 GetCredit() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
497 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
498 int64 nCredit = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
499 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
500 nCredit += txout.GetCredit(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
501 return nCredit; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
504 int64 GetValueOut() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
505 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
506 int64 nValueOut = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
507 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
508 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
509 if (txout.nValue < 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
510 throw runtime_error("CTransaction::GetValueOut() : negative value"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
511 nValueOut += txout.nValue; |
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 return nValueOut; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
514 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
515 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
516 int64 GetMinFee(bool fDiscount=false) const |
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 // Base fee is 1 cent per kilobyte |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
519 unsigned int nBytes = ::GetSerializeSize(*this, SER_NETWORK); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
520 int64 nMinFee = (1 + (int64)nBytes / 1000) * CENT; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
521 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
522 // First 100 transactions in a block are free |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
523 if (fDiscount && nBytes < 10000) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
524 nMinFee = 0; |
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 // 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
|
527 if (nMinFee < CENT) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
528 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
529 if (txout.nValue < CENT) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
530 nMinFee = CENT; |
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 return nMinFee; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
533 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
534 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
537 bool ReadFromDisk(CDiskTxPos pos, FILE** pfileRet=NULL) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
538 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
539 CAutoFile filein = OpenBlockFile(pos.nFile, 0, pfileRet ? "rb+" : "rb"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
540 if (!filein) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
541 return error("CTransaction::ReadFromDisk() : OpenBlockFile failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
542 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
543 // Read transaction |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
544 if (fseek(filein, pos.nTxPos, SEEK_SET) != 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
545 return error("CTransaction::ReadFromDisk() : fseek failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
546 filein >> *this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
547 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
548 // Return file pointer |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
549 if (pfileRet) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
550 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
551 if (fseek(filein, pos.nTxPos, SEEK_SET) != 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
552 return error("CTransaction::ReadFromDisk() : second fseek failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
553 *pfileRet = filein.release(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
554 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
555 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
556 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
557 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
558 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
559 friend bool operator==(const CTransaction& a, const CTransaction& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
560 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
561 return (a.nVersion == b.nVersion && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
562 a.vin == b.vin && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
563 a.vout == b.vout && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
564 a.nLockTime == b.nLockTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
565 } |
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 friend bool operator!=(const CTransaction& a, const CTransaction& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
568 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
569 return !(a == b); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
572 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
573 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
574 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
575 string str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
576 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
|
577 GetHash().ToString().substr(0,6).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
578 nVersion, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
579 vin.size(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
580 vout.size(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
581 nLockTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
582 for (int i = 0; i < vin.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
583 str += " " + vin[i].ToString() + "\n"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
584 for (int i = 0; i < vout.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
585 str += " " + vout[i].ToString() + "\n"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
586 return str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
587 } |
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 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
590 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
591 printf("%s", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
592 } |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
596 bool DisconnectInputs(CTxDB& txdb); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
597 bool ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPool, CDiskTxPos posThisTx, int nHeight, int64& nFees, bool fBlock, bool fMiner, int64 nMinFee=0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
598 bool ClientConnectInputs(); |
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 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
|
601 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
602 bool AcceptTransaction(bool fCheckInputs=true, bool* pfMissingInputs=NULL) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
603 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
604 CTxDB txdb("r"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
605 return AcceptTransaction(txdb, fCheckInputs, pfMissingInputs); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
606 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
607 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
608 protected: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
609 bool AddToMemoryPool(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
610 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
611 bool RemoveFromMemoryPool(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
612 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
613 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
614 |
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 |
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 // 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
|
620 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
621 class CMerkleTx : public CTransaction |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
624 uint256 hashBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
625 vector<uint256> vMerkleBranch; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
626 int nIndex; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
627 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
628 // memory only |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
629 mutable bool fMerkleVerified; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
632 CMerkleTx() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
633 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
634 Init(); |
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 CMerkleTx(const CTransaction& txIn) : CTransaction(txIn) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
638 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
639 Init(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
640 } |
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 void Init() |
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 hashBlock = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
645 nIndex = -1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
646 fMerkleVerified = false; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
649 int64 GetCredit() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
650 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
651 // 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
|
652 if (IsCoinBase() && GetBlocksToMaturity() > 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
653 return 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
654 return CTransaction::GetCredit(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
655 } |
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 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
658 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
659 nSerSize += SerReadWrite(s, *(CTransaction*)this, nType, nVersion, ser_action); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
660 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
661 READWRITE(hashBlock); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
662 READWRITE(vMerkleBranch); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
663 READWRITE(nIndex); |
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 |
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 int SetMerkleBranch(const CBlock* pblock=NULL); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
668 int GetDepthInMainChain() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
669 bool IsInMainChain() const { return GetDepthInMainChain() > 0; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
670 int GetBlocksToMaturity() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
671 bool AcceptTransaction(CTxDB& txdb, bool fCheckInputs=true); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
672 bool AcceptTransaction() { CTxDB txdb("r"); return AcceptTransaction(txdb); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
673 }; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
676 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
677 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
678 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
679 // 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
|
680 // 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
|
681 // to the block chain. |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
682 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
683 class CWalletTx : public CMerkleTx |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
684 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
685 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
686 vector<CMerkleTx> vtxPrev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
687 map<string, string> mapValue; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
688 vector<pair<string, string> > vOrderForm; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
689 unsigned int fTimeReceivedIsTxTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
690 unsigned int nTimeReceived; // time received by this node |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
691 char fFromMe; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
692 char fSpent; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
693 //// 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
|
694 |
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
|
695 // memory only UI hints |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
696 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
|
697 mutable int nLinesDisplayed; |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
698 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
699 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
700 CWalletTx() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
701 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
702 Init(); |
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 CWalletTx(const CMerkleTx& txIn) : CMerkleTx(txIn) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
706 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
707 Init(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
708 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
709 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
710 CWalletTx(const CTransaction& txIn) : CMerkleTx(txIn) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
711 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
712 Init(); |
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 void Init() |
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 fTimeReceivedIsTxTime = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
718 nTimeReceived = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
719 fFromMe = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
720 fSpent = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
721 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
|
722 nLinesDisplayed = 0; |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
723 } |
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 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
726 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
727 nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion, ser_action); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
728 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
729 READWRITE(vtxPrev); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
730 READWRITE(mapValue); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
731 READWRITE(vOrderForm); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
732 READWRITE(fTimeReceivedIsTxTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
733 READWRITE(nTimeReceived); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
734 READWRITE(fFromMe); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
735 READWRITE(fSpent); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
736 ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
737 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
738 bool WriteToDisk() |
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 return CWalletDB().WriteTx(GetHash(), *this); |
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 |
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 int64 GetTxTime() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
745 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
746 void AddSupportingTransactions(CTxDB& txdb); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
747 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
748 bool AcceptWalletTransaction(CTxDB& txdb, bool fCheckInputs=true); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
749 bool AcceptWalletTransaction() { CTxDB txdb("r"); return AcceptWalletTransaction(txdb); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
750 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
751 void RelayWalletTransaction(CTxDB& txdb); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
752 void RelayWalletTransaction() { CTxDB txdb("r"); RelayWalletTransaction(txdb); } |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
758 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
759 // 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
|
760 // 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
|
761 // 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
|
762 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
763 class CTxIndex |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
766 CDiskTxPos pos; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
767 vector<CDiskTxPos> vSpent; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
768 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
769 CTxIndex() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
770 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
771 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
772 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
773 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
774 CTxIndex(const CDiskTxPos& posIn, unsigned int nOutputs) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
775 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
776 pos = posIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
777 vSpent.resize(nOutputs); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
778 } |
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 IMPLEMENT_SERIALIZE |
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 if (!(nType & SER_GETHASH)) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
783 READWRITE(nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
784 READWRITE(pos); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
785 READWRITE(vSpent); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
788 void SetNull() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
789 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
790 pos.SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
791 vSpent.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
792 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
793 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
794 bool IsNull() |
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 return pos.IsNull(); |
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 friend bool operator==(const CTxIndex& a, const CTxIndex& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
800 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
801 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
|
802 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
803 for (int i = 0; i < a.vSpent.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
804 if (a.vSpent[i] != b.vSpent[i]) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
805 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
806 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
807 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
808 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
809 friend bool operator!=(const CTxIndex& a, const CTxIndex& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
810 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
811 return !(a == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
812 } |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
818 |
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 // 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
|
821 // 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
|
822 // 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
|
823 // 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
|
824 // 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
|
825 // of the block. |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
826 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
827 // 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
|
828 // is indexed by CBlockIndex objects in memory. |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
829 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
830 class CBlock |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
831 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
832 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
833 // header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
834 int nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
835 uint256 hashPrevBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
836 uint256 hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
837 unsigned int nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
838 unsigned int nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
839 unsigned int nNonce; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
840 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
841 // network and disk |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
842 vector<CTransaction> vtx; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
843 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
844 // memory only |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
845 mutable vector<uint256> vMerkleTree; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
846 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
847 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
848 CBlock() |
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 SetNull(); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
853 IMPLEMENT_SERIALIZE |
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 READWRITE(this->nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
856 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
857 READWRITE(hashPrevBlock); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
858 READWRITE(hashMerkleRoot); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
859 READWRITE(nTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
860 READWRITE(nBits); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
861 READWRITE(nNonce); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
862 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
863 // 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
|
864 if (!(nType & (SER_GETHASH|SER_BLOCKHEADERONLY))) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
865 READWRITE(vtx); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
866 else if (fRead) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
867 const_cast<CBlock*>(this)->vtx.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
868 ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
869 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
870 void SetNull() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
871 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
872 nVersion = 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
873 hashPrevBlock = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
874 hashMerkleRoot = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
875 nTime = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
876 nBits = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
877 nNonce = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
878 vtx.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
879 vMerkleTree.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
880 } |
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 bool IsNull() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
883 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
884 return (nBits == 0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
885 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
886 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
887 uint256 GetHash() const |
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 return Hash(BEGIN(nVersion), END(nNonce)); |
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 |
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 uint256 BuildMerkleTree() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
894 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
895 vMerkleTree.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
896 foreach(const CTransaction& tx, vtx) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
897 vMerkleTree.push_back(tx.GetHash()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
898 int j = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
899 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
|
900 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
901 for (int i = 0; i < nSize; i += 2) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
902 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
903 int i2 = min(i+1, nSize-1); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
904 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
|
905 BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2]))); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
906 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
907 j += nSize; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
908 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
909 return (vMerkleTree.empty() ? 0 : vMerkleTree.back()); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
912 vector<uint256> GetMerkleBranch(int nIndex) const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
913 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
914 if (vMerkleTree.empty()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
915 BuildMerkleTree(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
916 vector<uint256> vMerkleBranch; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
917 int j = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
918 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
|
919 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
920 int i = min(nIndex^1, nSize-1); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
921 vMerkleBranch.push_back(vMerkleTree[j+i]); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
922 nIndex >>= 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
923 j += nSize; |
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 vMerkleBranch; |
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 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
|
929 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
930 if (nIndex == -1) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
931 return 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
932 foreach(const uint256& otherside, vMerkleBranch) |
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 if (nIndex & 1) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
935 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
|
936 else |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
937 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
|
938 nIndex >>= 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
939 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
940 return hash; |
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 |
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 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
|
945 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
946 // Open history file to append |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
947 CAutoFile fileout = AppendBlockFile(nFileRet); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
948 if (!fileout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
949 return error("CBlock::WriteToDisk() : AppendBlockFile failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
950 if (!fWriteTransactions) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
951 fileout.nType |= SER_BLOCKHEADERONLY; |
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 // Write index header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
954 unsigned int nSize = fileout.GetSerializeSize(*this); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
955 fileout << FLATDATA(pchMessageStart) << nSize; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
956 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
957 // Write block |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
958 nBlockPosRet = ftell(fileout); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
959 if (nBlockPosRet == -1) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
960 return error("CBlock::WriteToDisk() : ftell failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
961 fileout << *this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
962 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
963 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
964 } |
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 bool ReadFromDisk(unsigned int nFile, unsigned int nBlockPos, bool fReadTransactions) |
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 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
969 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
970 // Open history file to read |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
971 CAutoFile filein = OpenBlockFile(nFile, nBlockPos, "rb"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
972 if (!filein) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
973 return error("CBlock::ReadFromDisk() : OpenBlockFile failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
974 if (!fReadTransactions) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
975 filein.nType |= SER_BLOCKHEADERONLY; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
976 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
977 // Read block |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
978 filein >> *this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
979 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
980 // Check the header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
981 if (CBigNum().SetCompact(nBits) > bnProofOfWorkLimit) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
982 return error("CBlock::ReadFromDisk() : nBits errors in block header"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
983 if (GetHash() > CBigNum().SetCompact(nBits).getuint256()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
984 return error("CBlock::ReadFromDisk() : GetHash() errors in block header"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
985 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
986 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
987 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
988 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
989 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
990 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
991 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
992 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
993 printf("CBlock(hash=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%d)\n", |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
994 GetHash().ToString().substr(0,14).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
995 nVersion, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
996 hashPrevBlock.ToString().substr(0,14).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
997 hashMerkleRoot.ToString().substr(0,6).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
998 nTime, nBits, nNonce, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
999 vtx.size()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1000 for (int i = 0; i < vtx.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1001 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1002 printf(" "); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1003 vtx[i].print(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1004 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1005 printf(" vMerkleTree: "); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1006 for (int i = 0; i < vMerkleTree.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1007 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
|
1008 printf("\n"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1009 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1010 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1011 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1012 int64 GetBlockValue(int64 nFees) const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1013 bool DisconnectBlock(CTxDB& txdb, CBlockIndex* pindex); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1014 bool ConnectBlock(CTxDB& txdb, CBlockIndex* pindex); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1015 bool ReadFromDisk(const CBlockIndex* blockindex, bool fReadTransactions); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1016 bool AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1017 bool CheckBlock() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1018 bool AcceptBlock(); |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1023 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1024 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1025 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1026 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1027 // 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
|
1028 // 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
|
1029 // 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
|
1030 // 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
|
1031 // 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
|
1032 // 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
|
1033 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1034 class CBlockIndex |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1035 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1036 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1037 const uint256* phashBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1038 CBlockIndex* pprev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1039 CBlockIndex* pnext; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1040 unsigned int nFile; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1041 unsigned int nBlockPos; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1042 int nHeight; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1043 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1044 // block header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1045 int nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1046 uint256 hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1047 unsigned int nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1048 unsigned int nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1049 unsigned int nNonce; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1050 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1051 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1052 CBlockIndex() |
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 phashBlock = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1055 pprev = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1056 pnext = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1057 nFile = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1058 nBlockPos = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1059 nHeight = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1060 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1061 nVersion = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1062 hashMerkleRoot = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1063 nTime = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1064 nBits = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1065 nNonce = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1066 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1067 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1068 CBlockIndex(unsigned int nFileIn, unsigned int nBlockPosIn, CBlock& block) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1069 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1070 phashBlock = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1071 pprev = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1072 pnext = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1073 nFile = nFileIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1074 nBlockPos = nBlockPosIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1075 nHeight = 0; |
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 nVersion = block.nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1078 hashMerkleRoot = block.hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1079 nTime = block.nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1080 nBits = block.nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1081 nNonce = block.nNonce; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1082 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1083 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1084 uint256 GetBlockHash() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1085 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1086 return *phashBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1087 } |
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 bool IsInMainChain() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1090 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1091 return (pnext || this == pindexBest); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1092 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1093 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1094 bool EraseBlockFromDisk() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1095 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1096 // Open history file |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1097 CAutoFile fileout = OpenBlockFile(nFile, nBlockPos, "rb+"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1098 if (!fileout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1099 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1100 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1101 // Overwrite with empty null block |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1102 CBlock block; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1103 block.SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1104 fileout << block; |
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 return true; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1109 enum { nMedianTimeSpan=11 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1110 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1111 int64 GetMedianTimePast() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1112 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1113 unsigned int pmedian[nMedianTimeSpan]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1114 unsigned int* pbegin = &pmedian[nMedianTimeSpan]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1115 unsigned int* pend = &pmedian[nMedianTimeSpan]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1116 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1117 const CBlockIndex* pindex = this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1118 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
|
1119 *(--pbegin) = pindex->nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1120 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1121 sort(pbegin, pend); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1122 return pbegin[(pend - pbegin)/2]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1123 } |
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 int64 GetMedianTime() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1126 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1127 const CBlockIndex* pindex = this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1128 for (int i = 0; i < nMedianTimeSpan/2; i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1129 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1130 if (!pindex->pnext) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1131 return nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1132 pindex = pindex->pnext; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1133 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1134 return pindex->GetMedianTimePast(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1135 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1136 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1137 |
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 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1140 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1141 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
|
1142 pprev, pnext, nFile, nBlockPos, nHeight, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1143 hashMerkleRoot.ToString().substr(0,6).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1144 GetBlockHash().ToString().substr(0,14).c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1145 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1146 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1147 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1148 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1149 printf("%s\n", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1150 } |
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 |
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 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1156 // Used to marshal pointers into hashes for db storage. |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1157 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1158 class CDiskBlockIndex : public CBlockIndex |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1159 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1160 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1161 uint256 hashPrev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1162 uint256 hashNext; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1163 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1164 CDiskBlockIndex() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1165 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1166 hashPrev = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1167 hashNext = 0; |
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 explicit CDiskBlockIndex(CBlockIndex* pindex) : CBlockIndex(*pindex) |
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 hashPrev = (pprev ? pprev->GetBlockHash() : 0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1173 hashNext = (pnext ? pnext->GetBlockHash() : 0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1174 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1175 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1176 IMPLEMENT_SERIALIZE |
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 if (!(nType & SER_GETHASH)) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1179 READWRITE(nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1180 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1181 READWRITE(hashNext); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1182 READWRITE(nFile); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1183 READWRITE(nBlockPos); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1184 READWRITE(nHeight); |
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 // block header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1187 READWRITE(this->nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1188 READWRITE(hashPrev); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1189 READWRITE(hashMerkleRoot); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1190 READWRITE(nTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1191 READWRITE(nBits); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1192 READWRITE(nNonce); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1193 ) |
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 uint256 GetBlockHash() const |
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 CBlock block; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1198 block.nVersion = nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1199 block.hashPrevBlock = hashPrev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1200 block.hashMerkleRoot = hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1201 block.nTime = nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1202 block.nBits = nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1203 block.nNonce = nNonce; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1204 return block.GetHash(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1205 } |
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 string ToString() 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 string str = "CDiskBlockIndex("; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1211 str += CBlockIndex::ToString(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1212 str += strprintf("\n hashBlock=%s, hashPrev=%s, hashNext=%s)", |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1213 GetBlockHash().ToString().c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1214 hashPrev.ToString().substr(0,14).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1215 hashNext.ToString().substr(0,14).c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1216 return str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1217 } |
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 void print() const |
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 printf("%s\n", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1222 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1223 }; |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1228 |
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 |
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 // 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
|
1234 // 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
|
1235 // 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
|
1236 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1237 class CBlockLocator |
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 protected: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1240 vector<uint256> vHave; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1241 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1242 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1243 CBlockLocator() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1244 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1245 } |
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 explicit CBlockLocator(const CBlockIndex* pindex) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1248 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1249 Set(pindex); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1250 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1251 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1252 explicit CBlockLocator(uint256 hashBlock) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1253 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1254 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1255 if (mi != mapBlockIndex.end()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1256 Set((*mi).second); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1259 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1260 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1261 if (!(nType & SER_GETHASH)) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1262 READWRITE(nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1263 READWRITE(vHave); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1264 ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1265 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1266 void Set(const CBlockIndex* pindex) |
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 vHave.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1269 int nStep = 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1270 while (pindex) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1271 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1272 vHave.push_back(pindex->GetBlockHash()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1273 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1274 // Exponentially larger steps back |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1275 for (int i = 0; pindex && i < nStep; i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1276 pindex = pindex->pprev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1277 if (vHave.size() > 10) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1278 nStep *= 2; |
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 vHave.push_back(hashGenesisBlock); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1283 CBlockIndex* GetBlockIndex() |
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 // 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
|
1286 foreach(const uint256& hash, vHave) |
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 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1289 if (mi != mapBlockIndex.end()) |
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 CBlockIndex* pindex = (*mi).second; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1292 if (pindex->IsInMainChain()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1293 return pindex; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1294 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1295 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1296 return pindexGenesisBlock; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1299 uint256 GetBlockHash() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1300 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1301 // 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
|
1302 foreach(const uint256& hash, vHave) |
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 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1305 if (mi != mapBlockIndex.end()) |
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 CBlockIndex* pindex = (*mi).second; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1308 if (pindex->IsInMainChain()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1309 return hash; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1310 } |
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 return hashGenesisBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1313 } |
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 int GetHeight() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1316 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1317 CBlockIndex* pindex = GetBlockIndex(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1318 if (!pindex) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1319 return 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1320 return pindex->nHeight; |
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 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1323 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1324 |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1330 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1331 |
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 |
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 extern map<uint256, CTransaction> mapTransactions; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1336 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
|
1337 extern vector<uint256> vWalletUpdated; |
0
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1338 extern CCriticalSection cs_mapWallet; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1339 extern map<vector<unsigned char>, CPrivKey> mapKeys; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1340 extern map<uint160, vector<unsigned char> > mapPubKeys; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1341 extern CCriticalSection cs_mapKeys; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1342 extern CKey keyUser; |