Mercurial > hg > bitcoin
annotate main.h @ 3:42e17b2b47a4 draft
tray icon + ask before closing
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@10 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author | sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b> |
---|---|
date | Thu, 24 Sep 2009 04:09:56 +0000 (2009-09-24) |
parents | f5bbb2375e0b |
children | f718bedded34 |
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; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
44 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
45 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
46 |
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 string GetAppDir(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
51 bool CheckDiskSpace(int64 nAdditionalBytes=0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
52 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
|
53 FILE* AppendBlockFile(unsigned int& nFileRet); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
54 bool AddKey(const CKey& key); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
55 vector<unsigned char> GenerateNewKey(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
56 bool AddToWallet(const CWalletTx& wtxIn); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
57 void ReacceptWalletTransactions(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
58 void RelayWalletTransactions(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
59 bool LoadBlockIndex(bool fAllowNew=true); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
60 void PrintBlockTree(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
61 bool BitcoinMiner(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
62 bool ProcessMessages(CNode* pfrom); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
63 bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
64 bool SendMessages(CNode* pto); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
65 int64 GetBalance(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
66 bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& txNew, int64& nFeeRequiredRet); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
67 bool CommitTransactionSpent(const CWalletTx& wtxNew); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
68 bool SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
69 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
70 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
71 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
72 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
73 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
74 |
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 class CDiskTxPos |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
83 unsigned int nFile; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
84 unsigned int nBlockPos; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
85 unsigned int nTxPos; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
86 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
87 CDiskTxPos() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
88 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
89 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
90 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
91 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
92 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
|
93 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
94 nFile = nFileIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
95 nBlockPos = nBlockPosIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
96 nTxPos = nTxPosIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
97 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
98 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
99 IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
100 void SetNull() { nFile = -1; nBlockPos = 0; nTxPos = 0; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
101 bool IsNull() const { return (nFile == -1); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
102 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
103 friend bool operator==(const CDiskTxPos& a, const CDiskTxPos& b) |
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 return (a.nFile == b.nFile && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
106 a.nBlockPos == b.nBlockPos && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
107 a.nTxPos == b.nTxPos); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
110 friend bool operator!=(const CDiskTxPos& a, const CDiskTxPos& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
111 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
112 return !(a == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
113 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
114 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
115 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
116 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
117 if (IsNull()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
118 return strprintf("null"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
119 else |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
120 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
|
121 } |
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 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
124 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
125 printf("%s", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
126 } |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
132 class CInPoint |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
135 CTransaction* ptx; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
136 unsigned int n; |
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 CInPoint() { SetNull(); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
139 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
|
140 void SetNull() { ptx = NULL; n = -1; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
141 bool IsNull() const { return (ptx == NULL && n == -1); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
142 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
143 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
144 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
145 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
146 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
147 class COutPoint |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
150 uint256 hash; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
151 unsigned int n; |
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 COutPoint() { SetNull(); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
154 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
|
155 IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
156 void SetNull() { hash = 0; n = -1; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
157 bool IsNull() const { return (hash == 0 && n == -1); } |
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 friend bool operator<(const COutPoint& a, const COutPoint& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
160 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
161 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
|
162 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
163 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
164 friend bool operator==(const COutPoint& a, const COutPoint& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
165 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
166 return (a.hash == b.hash && a.n == b.n); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
167 } |
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 friend bool operator!=(const COutPoint& a, const COutPoint& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
170 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
171 return !(a == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
172 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
173 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
174 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
175 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
176 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
|
177 } |
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 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
180 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
181 printf("%s\n", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
182 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
183 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
184 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
185 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
186 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
187 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
188 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
189 // 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
|
190 // 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
|
191 // output's public key. |
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 class CTxIn |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
196 COutPoint prevout; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
197 CScript scriptSig; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
198 unsigned int nSequence; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
199 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
200 CTxIn() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
201 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
202 nSequence = UINT_MAX; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
203 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
204 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
205 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
|
206 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
207 prevout = prevoutIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
208 scriptSig = scriptSigIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
209 nSequence = nSequenceIn; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
212 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
|
213 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
214 prevout = COutPoint(hashPrevTx, nOut); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
215 scriptSig = scriptSigIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
216 nSequence = nSequenceIn; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
219 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
220 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
221 READWRITE(prevout); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
222 READWRITE(scriptSig); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
223 READWRITE(nSequence); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
226 bool IsFinal() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
227 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
228 return (nSequence == UINT_MAX); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
229 } |
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 friend bool operator==(const CTxIn& a, const CTxIn& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
232 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
233 return (a.prevout == b.prevout && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
234 a.scriptSig == b.scriptSig && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
235 a.nSequence == b.nSequence); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
238 friend bool operator!=(const CTxIn& a, const CTxIn& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
239 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
240 return !(a == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
241 } |
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 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
244 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
245 string str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
246 str += strprintf("CTxIn("); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
247 str += prevout.ToString(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
248 if (prevout.IsNull()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
249 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
|
250 else |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
251 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
|
252 if (nSequence != UINT_MAX) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
253 str += strprintf(", nSequence=%u", nSequence); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
254 str += ")"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
255 return str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
256 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
257 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
258 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
259 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
260 printf("%s\n", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
261 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
262 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
263 bool IsMine() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
264 int64 GetDebit() 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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
270 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
271 // 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
|
272 // must be able to sign with to claim it. |
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 class CTxOut |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
277 int64 nValue; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
278 CScript scriptPubKey; |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
281 CTxOut() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
282 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
283 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
284 } |
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 CTxOut(int64 nValueIn, CScript scriptPubKeyIn) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
287 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
288 nValue = nValueIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
289 scriptPubKey = scriptPubKeyIn; |
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 IMPLEMENT_SERIALIZE |
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 READWRITE(nValue); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
295 READWRITE(scriptPubKey); |
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 void SetNull() |
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 nValue = -1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
301 scriptPubKey.clear(); |
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 bool IsNull() |
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 return (nValue == -1); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
307 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
308 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
309 uint256 GetHash() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
310 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
311 return SerializeHash(*this); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
312 } |
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 bool IsMine() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
315 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
316 return ::IsMine(scriptPubKey); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
317 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
318 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
319 int64 GetCredit() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
320 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
321 if (IsMine()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
322 return nValue; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
323 return 0; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
326 friend bool operator==(const CTxOut& a, const CTxOut& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
327 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
328 return (a.nValue == b.nValue && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
329 a.scriptPubKey == b.scriptPubKey); |
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 == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
335 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
336 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
337 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
338 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
339 if (scriptPubKey.size() < 6) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
340 return "CTxOut(error)"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
341 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
|
342 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
343 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
344 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
345 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
346 printf("%s\n", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
347 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
348 }; |
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 |
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 |
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 // 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
|
355 // blocks. A transaction can contain multiple inputs and outputs. |
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 class CTransaction |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
360 int nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
361 vector<CTxIn> vin; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
362 vector<CTxOut> vout; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
363 int nLockTime; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
366 CTransaction() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
367 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
368 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
369 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
370 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
371 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
372 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
373 READWRITE(this->nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
374 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
375 READWRITE(vin); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
376 READWRITE(vout); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
377 READWRITE(nLockTime); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
380 void SetNull() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
381 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
382 nVersion = 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
383 vin.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
384 vout.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
385 nLockTime = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
386 } |
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 bool IsNull() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
389 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
390 return (vin.empty() && vout.empty()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
391 } |
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 uint256 GetHash() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
394 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
395 return SerializeHash(*this); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
396 } |
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 bool IsFinal() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
399 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
400 if (nLockTime == 0 || nLockTime < nBestHeight) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
401 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
402 foreach(const CTxIn& txin, vin) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
403 if (!txin.IsFinal()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
404 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
405 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
406 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
407 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
408 bool IsNewerThan(const CTransaction& old) const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
409 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
410 if (vin.size() != old.vin.size()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
411 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
412 for (int i = 0; i < vin.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
413 if (vin[i].prevout != old.vin[i].prevout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
414 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
415 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
416 bool fNewer = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
417 unsigned int nLowest = UINT_MAX; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
418 for (int i = 0; i < vin.size(); i++) |
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 if (vin[i].nSequence != old.vin[i].nSequence) |
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[i].nSequence <= nLowest) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
423 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
424 fNewer = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
425 nLowest = vin[i].nSequence; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
426 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
427 if (old.vin[i].nSequence < nLowest) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
428 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
429 fNewer = true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
430 nLowest = old.vin[i].nSequence; |
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 } |
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 return fNewer; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
437 bool IsCoinBase() const |
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 return (vin.size() == 1 && vin[0].prevout.IsNull()); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
442 bool CheckTransaction() const |
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 // Basic checks that don't depend on any context |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
445 if (vin.empty() || vout.empty()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
446 return error("CTransaction::CheckTransaction() : vin or vout empty"); |
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 // Check for negative values |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
449 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
450 if (txout.nValue < 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
451 return error("CTransaction::CheckTransaction() : txout.nValue negative"); |
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 if (IsCoinBase()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
454 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
455 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
|
456 return error("CTransaction::CheckTransaction() : coinbase script size"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
457 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
458 else |
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 foreach(const CTxIn& txin, vin) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
461 if (txin.prevout.IsNull()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
462 return error("CTransaction::CheckTransaction() : prevout is null"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
463 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
464 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
465 return true; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
468 bool IsMine() const |
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 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
471 if (txout.IsMine()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
472 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
473 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
474 } |
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 int64 GetDebit() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
477 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
478 int64 nDebit = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
479 foreach(const CTxIn& txin, vin) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
480 nDebit += txin.GetDebit(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
481 return nDebit; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
482 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
483 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
484 int64 GetCredit() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
485 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
486 int64 nCredit = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
487 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
488 nCredit += txout.GetCredit(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
489 return nCredit; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
490 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
491 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
492 int64 GetValueOut() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
493 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
494 int64 nValueOut = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
495 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
496 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
497 if (txout.nValue < 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
498 throw runtime_error("CTransaction::GetValueOut() : negative value"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
499 nValueOut += txout.nValue; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
500 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
501 return nValueOut; |
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 GetMinFee(bool fDiscount=false) 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 // Base fee is 1 cent per kilobyte |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
507 unsigned int nBytes = ::GetSerializeSize(*this, SER_NETWORK); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
508 int64 nMinFee = (1 + (int64)nBytes / 1000) * CENT; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
509 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
510 // First 100 transactions in a block are free |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
511 if (fDiscount && nBytes < 10000) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
512 nMinFee = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
513 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
514 // 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
|
515 if (nMinFee < CENT) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
516 foreach(const CTxOut& txout, vout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
517 if (txout.nValue < CENT) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
518 nMinFee = CENT; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
519 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
520 return nMinFee; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
523 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
524 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
525 bool ReadFromDisk(CDiskTxPos pos, FILE** pfileRet=NULL) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
526 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
527 CAutoFile filein = OpenBlockFile(pos.nFile, 0, pfileRet ? "rb+" : "rb"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
528 if (!filein) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
529 return error("CTransaction::ReadFromDisk() : OpenBlockFile failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
530 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
531 // Read transaction |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
532 if (fseek(filein, pos.nTxPos, SEEK_SET) != 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
533 return error("CTransaction::ReadFromDisk() : fseek failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
534 filein >> *this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
535 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
536 // Return file pointer |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
537 if (pfileRet) |
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 if (fseek(filein, pos.nTxPos, SEEK_SET) != 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
540 return error("CTransaction::ReadFromDisk() : second fseek failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
541 *pfileRet = filein.release(); |
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 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
544 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
545 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
546 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
547 friend bool operator==(const CTransaction& a, const CTransaction& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
548 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
549 return (a.nVersion == b.nVersion && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
550 a.vin == b.vin && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
551 a.vout == b.vout && |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
552 a.nLockTime == b.nLockTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
553 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
554 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
555 friend bool operator!=(const CTransaction& a, const CTransaction& b) |
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 return !(a == b); |
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 |
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 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
562 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
563 string str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
564 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
|
565 GetHash().ToString().substr(0,6).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
566 nVersion, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
567 vin.size(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
568 vout.size(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
569 nLockTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
570 for (int i = 0; i < vin.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
571 str += " " + vin[i].ToString() + "\n"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
572 for (int i = 0; i < vout.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
573 str += " " + vout[i].ToString() + "\n"; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
574 return str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
575 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
576 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
577 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
578 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
579 printf("%s", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
580 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
581 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
582 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
583 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
584 bool DisconnectInputs(CTxDB& txdb); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
585 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
|
586 bool ClientConnectInputs(); |
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 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
|
589 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
590 bool AcceptTransaction(bool fCheckInputs=true, bool* pfMissingInputs=NULL) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
591 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
592 CTxDB txdb("r"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
593 return AcceptTransaction(txdb, fCheckInputs, pfMissingInputs); |
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 protected: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
597 bool AddToMemoryPool(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
598 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
599 bool RemoveFromMemoryPool(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
600 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
601 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
602 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
603 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
604 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
605 |
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 // 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
|
608 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
609 class CMerkleTx : public CTransaction |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
610 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
611 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
612 uint256 hashBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
613 vector<uint256> vMerkleBranch; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
614 int nIndex; |
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 // memory only |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
617 mutable bool fMerkleVerified; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
620 CMerkleTx() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
621 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
622 Init(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
623 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
624 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
625 CMerkleTx(const CTransaction& txIn) : CTransaction(txIn) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
626 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
627 Init(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
628 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
629 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
630 void Init() |
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 hashBlock = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
633 nIndex = -1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
634 fMerkleVerified = false; |
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 int64 GetCredit() const |
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 // 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
|
640 if (IsCoinBase() && GetBlocksToMaturity() > 0) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
641 return 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
642 return CTransaction::GetCredit(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
643 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
644 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
645 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
646 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
647 nSerSize += SerReadWrite(s, *(CTransaction*)this, nType, nVersion, ser_action); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
648 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
649 READWRITE(hashBlock); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
650 READWRITE(vMerkleBranch); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
651 READWRITE(nIndex); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
652 ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
653 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
654 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
655 int SetMerkleBranch(const CBlock* pblock=NULL); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
656 int GetDepthInMainChain() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
657 bool IsInMainChain() const { return GetDepthInMainChain() > 0; } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
658 int GetBlocksToMaturity() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
659 bool AcceptTransaction(CTxDB& txdb, bool fCheckInputs=true); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
660 bool AcceptTransaction() { CTxDB txdb("r"); return AcceptTransaction(txdb); } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
661 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
662 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
663 |
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 // 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
|
668 // 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
|
669 // to the block chain. |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
670 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
671 class CWalletTx : public CMerkleTx |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
672 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
673 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
674 vector<CMerkleTx> vtxPrev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
675 map<string, string> mapValue; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
676 vector<pair<string, string> > vOrderForm; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
677 unsigned int fTimeReceivedIsTxTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
678 unsigned int nTimeReceived; // time received by this node |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
679 char fFromMe; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
680 char fSpent; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
681 //// 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
|
682 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
683 // memory only |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
684 mutable unsigned int nTimeDisplayed; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
685 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
686 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
687 CWalletTx() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
688 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
689 Init(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
690 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
691 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
692 CWalletTx(const CMerkleTx& txIn) : CMerkleTx(txIn) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
693 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
694 Init(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
695 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
696 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
697 CWalletTx(const CTransaction& txIn) : CMerkleTx(txIn) |
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 Init(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
700 } |
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 void 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 fTimeReceivedIsTxTime = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
705 nTimeReceived = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
706 fFromMe = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
707 fSpent = false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
708 nTimeDisplayed = 0; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
711 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
712 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
713 nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion, ser_action); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
714 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
715 READWRITE(vtxPrev); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
716 READWRITE(mapValue); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
717 READWRITE(vOrderForm); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
718 READWRITE(fTimeReceivedIsTxTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
719 READWRITE(nTimeReceived); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
720 READWRITE(fFromMe); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
721 READWRITE(fSpent); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
722 ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
723 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
724 bool WriteToDisk() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
725 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
726 return CWalletDB().WriteTx(GetHash(), *this); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
727 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
728 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
729 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
730 int64 GetTxTime() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
731 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
732 void AddSupportingTransactions(CTxDB& txdb); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
733 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
734 bool AcceptWalletTransaction(CTxDB& txdb, bool fCheckInputs=true); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
735 bool AcceptWalletTransaction() { CTxDB txdb("r"); return AcceptWalletTransaction(txdb); } |
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 void RelayWalletTransaction(CTxDB& txdb); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
738 void RelayWalletTransaction() { CTxDB txdb("r"); RelayWalletTransaction(txdb); } |
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 |
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 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
745 // 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
|
746 // 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
|
747 // 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
|
748 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
749 class CTxIndex |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
752 CDiskTxPos pos; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
753 vector<CDiskTxPos> vSpent; |
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 CTxIndex() |
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 SetNull(); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
760 CTxIndex(const CDiskTxPos& posIn, unsigned int nOutputs) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
761 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
762 pos = posIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
763 vSpent.resize(nOutputs); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
766 IMPLEMENT_SERIALIZE |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
767 ( |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
768 if (!(nType & SER_GETHASH)) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
769 READWRITE(nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
770 READWRITE(pos); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
771 READWRITE(vSpent); |
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 void SetNull() |
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.SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
777 vSpent.clear(); |
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 bool IsNull() |
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 return pos.IsNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
783 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
784 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
785 friend bool operator==(const CTxIndex& a, const CTxIndex& b) |
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 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
|
788 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
789 for (int i = 0; i < a.vSpent.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
790 if (a.vSpent[i] != b.vSpent[i]) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
791 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
792 return true; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
795 friend bool operator!=(const CTxIndex& a, const CTxIndex& b) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
796 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
797 return !(a == b); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
798 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
799 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
800 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
801 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
802 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
803 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
804 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
805 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
806 // 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
|
807 // 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
|
808 // 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
|
809 // 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
|
810 // 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
|
811 // of the block. |
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 // 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
|
814 // is indexed by CBlockIndex objects in memory. |
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 class CBlock |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
819 // header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
820 int nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
821 uint256 hashPrevBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
822 uint256 hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
823 unsigned int nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
824 unsigned int nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
825 unsigned int nNonce; |
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 // network and disk |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
828 vector<CTransaction> vtx; |
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 // memory only |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
831 mutable vector<uint256> vMerkleTree; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
832 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
833 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
834 CBlock() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
835 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
836 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
837 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
838 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
839 IMPLEMENT_SERIALIZE |
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 READWRITE(this->nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
842 nVersion = this->nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
843 READWRITE(hashPrevBlock); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
844 READWRITE(hashMerkleRoot); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
845 READWRITE(nTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
846 READWRITE(nBits); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
847 READWRITE(nNonce); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
848 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
849 // 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
|
850 if (!(nType & (SER_GETHASH|SER_BLOCKHEADERONLY))) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
851 READWRITE(vtx); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
852 else if (fRead) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
853 const_cast<CBlock*>(this)->vtx.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
854 ) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
855 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
856 void SetNull() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
857 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
858 nVersion = 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
859 hashPrevBlock = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
860 hashMerkleRoot = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
861 nTime = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
862 nBits = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
863 nNonce = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
864 vtx.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
865 vMerkleTree.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
866 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
867 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
868 bool IsNull() const |
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 return (nBits == 0); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
873 uint256 GetHash() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
874 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
875 return Hash(BEGIN(nVersion), END(nNonce)); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
876 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
877 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
878 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
879 uint256 BuildMerkleTree() const |
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 vMerkleTree.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
882 foreach(const CTransaction& tx, vtx) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
883 vMerkleTree.push_back(tx.GetHash()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
884 int j = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
885 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
|
886 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
887 for (int i = 0; i < nSize; i += 2) |
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 int i2 = min(i+1, nSize-1); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
890 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
|
891 BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2]))); |
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 j += nSize; |
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 return (vMerkleTree.empty() ? 0 : vMerkleTree.back()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
896 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
897 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
898 vector<uint256> GetMerkleBranch(int nIndex) const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
899 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
900 if (vMerkleTree.empty()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
901 BuildMerkleTree(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
902 vector<uint256> vMerkleBranch; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
903 int j = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
904 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
|
905 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
906 int i = min(nIndex^1, nSize-1); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
907 vMerkleBranch.push_back(vMerkleTree[j+i]); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
908 nIndex >>= 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
909 j += nSize; |
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 return vMerkleBranch; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
912 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
913 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
914 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
|
915 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
916 if (nIndex == -1) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
917 return 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
918 foreach(const uint256& otherside, vMerkleBranch) |
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 if (nIndex & 1) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
921 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
|
922 else |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
923 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
|
924 nIndex >>= 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
925 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
926 return hash; |
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 |
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 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
|
931 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
932 // Open history file to append |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
933 CAutoFile fileout = AppendBlockFile(nFileRet); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
934 if (!fileout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
935 return error("CBlock::WriteToDisk() : AppendBlockFile failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
936 if (!fWriteTransactions) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
937 fileout.nType |= SER_BLOCKHEADERONLY; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
938 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
939 // Write index header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
940 unsigned int nSize = fileout.GetSerializeSize(*this); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
941 fileout << FLATDATA(pchMessageStart) << nSize; |
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 // Write block |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
944 nBlockPosRet = ftell(fileout); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
945 if (nBlockPosRet == -1) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
946 return error("CBlock::WriteToDisk() : ftell failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
947 fileout << *this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
948 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
949 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
950 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
951 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
952 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
|
953 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
954 SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
955 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
956 // Open history file to read |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
957 CAutoFile filein = OpenBlockFile(nFile, nBlockPos, "rb"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
958 if (!filein) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
959 return error("CBlock::ReadFromDisk() : OpenBlockFile failed"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
960 if (!fReadTransactions) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
961 filein.nType |= SER_BLOCKHEADERONLY; |
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 // Read block |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
964 filein >> *this; |
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 // Check the header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
967 if (CBigNum().SetCompact(nBits) > bnProofOfWorkLimit) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
968 return error("CBlock::ReadFromDisk() : nBits errors in block header"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
969 if (GetHash() > CBigNum().SetCompact(nBits).getuint256()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
970 return error("CBlock::ReadFromDisk() : GetHash() errors in block header"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
971 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
972 return true; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
973 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
974 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
975 |
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 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
978 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
979 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
|
980 GetHash().ToString().substr(0,14).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
981 nVersion, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
982 hashPrevBlock.ToString().substr(0,14).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
983 hashMerkleRoot.ToString().substr(0,6).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
984 nTime, nBits, nNonce, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
985 vtx.size()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
986 for (int i = 0; i < vtx.size(); i++) |
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 printf(" "); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
989 vtx[i].print(); |
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 printf(" vMerkleTree: "); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
992 for (int i = 0; i < vMerkleTree.size(); i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
993 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
|
994 printf("\n"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
995 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
996 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
997 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
998 int64 GetBlockValue(int64 nFees) const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
999 bool DisconnectBlock(CTxDB& txdb, CBlockIndex* pindex); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1000 bool ConnectBlock(CTxDB& txdb, CBlockIndex* pindex); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1001 bool ReadFromDisk(const CBlockIndex* blockindex, bool fReadTransactions); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1002 bool AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1003 bool CheckBlock() const; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1004 bool AcceptBlock(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1005 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1006 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1007 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1008 |
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 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1013 // 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
|
1014 // 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
|
1015 // 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
|
1016 // 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
|
1017 // 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
|
1018 // 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
|
1019 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1020 class CBlockIndex |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1023 const uint256* phashBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1024 CBlockIndex* pprev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1025 CBlockIndex* pnext; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1026 unsigned int nFile; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1027 unsigned int nBlockPos; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1028 int nHeight; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1029 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1030 // block header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1031 int nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1032 uint256 hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1033 unsigned int nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1034 unsigned int nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1035 unsigned int nNonce; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1036 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1037 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1038 CBlockIndex() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1039 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1040 phashBlock = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1041 pprev = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1042 pnext = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1043 nFile = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1044 nBlockPos = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1045 nHeight = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1046 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1047 nVersion = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1048 hashMerkleRoot = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1049 nTime = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1050 nBits = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1051 nNonce = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1052 } |
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 CBlockIndex(unsigned int nFileIn, unsigned int nBlockPosIn, CBlock& block) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1055 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1056 phashBlock = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1057 pprev = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1058 pnext = NULL; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1059 nFile = nFileIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1060 nBlockPos = nBlockPosIn; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1061 nHeight = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1062 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1063 nVersion = block.nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1064 hashMerkleRoot = block.hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1065 nTime = block.nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1066 nBits = block.nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1067 nNonce = block.nNonce; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1068 } |
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 uint256 GetBlockHash() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1071 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1072 return *phashBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1073 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1074 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1075 bool IsInMainChain() const |
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 return (pnext || this == pindexBest); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1078 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1079 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1080 bool EraseBlockFromDisk() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1081 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1082 // Open history file |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1083 CAutoFile fileout = OpenBlockFile(nFile, nBlockPos, "rb+"); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1084 if (!fileout) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1085 return false; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1086 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1087 // Overwrite with empty null block |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1088 CBlock block; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1089 block.SetNull(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1090 fileout << block; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1091 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1092 return true; |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1095 enum { nMedianTimeSpan=11 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1096 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1097 int64 GetMedianTimePast() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1098 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1099 unsigned int pmedian[nMedianTimeSpan]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1100 unsigned int* pbegin = &pmedian[nMedianTimeSpan]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1101 unsigned int* pend = &pmedian[nMedianTimeSpan]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1102 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1103 const CBlockIndex* pindex = this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1104 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
|
1105 *(--pbegin) = pindex->nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1106 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1107 sort(pbegin, pend); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1108 return pbegin[(pend - pbegin)/2]; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1109 } |
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 GetMedianTime() 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 const CBlockIndex* pindex = this; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1114 for (int i = 0; i < nMedianTimeSpan/2; i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1115 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1116 if (!pindex->pnext) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1117 return nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1118 pindex = pindex->pnext; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1119 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1120 return pindex->GetMedianTimePast(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1121 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1122 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1123 |
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 string ToString() 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 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
|
1128 pprev, pnext, nFile, nBlockPos, nHeight, |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1129 hashMerkleRoot.ToString().substr(0,6).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1130 GetBlockHash().ToString().substr(0,14).c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1131 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1132 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1133 void print() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1134 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1135 printf("%s\n", ToString().c_str()); |
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 |
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 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1142 // Used to marshal pointers into hashes for db storage. |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1143 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1144 class CDiskBlockIndex : public CBlockIndex |
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 public: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1147 uint256 hashPrev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1148 uint256 hashNext; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1149 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1150 CDiskBlockIndex() |
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 hashPrev = 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1153 hashNext = 0; |
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 explicit CDiskBlockIndex(CBlockIndex* pindex) : CBlockIndex(*pindex) |
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 hashPrev = (pprev ? pprev->GetBlockHash() : 0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1159 hashNext = (pnext ? pnext->GetBlockHash() : 0); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1160 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1161 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1162 IMPLEMENT_SERIALIZE |
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 if (!(nType & SER_GETHASH)) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1165 READWRITE(nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1166 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1167 READWRITE(hashNext); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1168 READWRITE(nFile); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1169 READWRITE(nBlockPos); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1170 READWRITE(nHeight); |
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 // block header |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1173 READWRITE(this->nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1174 READWRITE(hashPrev); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1175 READWRITE(hashMerkleRoot); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1176 READWRITE(nTime); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1177 READWRITE(nBits); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1178 READWRITE(nNonce); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1179 ) |
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 uint256 GetBlockHash() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1182 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1183 CBlock block; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1184 block.nVersion = nVersion; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1185 block.hashPrevBlock = hashPrev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1186 block.hashMerkleRoot = hashMerkleRoot; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1187 block.nTime = nTime; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1188 block.nBits = nBits; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1189 block.nNonce = nNonce; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1190 return block.GetHash(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1191 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1192 |
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 string ToString() const |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1195 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1196 string str = "CDiskBlockIndex("; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1197 str += CBlockIndex::ToString(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1198 str += strprintf("\n hashBlock=%s, hashPrev=%s, hashNext=%s)", |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1199 GetBlockHash().ToString().c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1200 hashPrev.ToString().substr(0,14).c_str(), |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1201 hashNext.ToString().substr(0,14).c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1202 return str; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1203 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1204 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1205 void print() const |
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 printf("%s\n", ToString().c_str()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1208 } |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1211 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1212 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1213 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1214 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1215 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1216 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1217 |
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 // 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
|
1220 // 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
|
1221 // 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
|
1222 // |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1223 class CBlockLocator |
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 protected: |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1226 vector<uint256> vHave; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1227 public: |
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 CBlockLocator() |
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 explicit CBlockLocator(const CBlockIndex* pindex) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1234 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1235 Set(pindex); |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1238 explicit CBlockLocator(uint256 hashBlock) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1239 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1240 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1241 if (mi != mapBlockIndex.end()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1242 Set((*mi).second); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1243 } |
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 IMPLEMENT_SERIALIZE |
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 if (!(nType & SER_GETHASH)) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1248 READWRITE(nVersion); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1249 READWRITE(vHave); |
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 void Set(const CBlockIndex* pindex) |
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 vHave.clear(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1255 int nStep = 1; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1256 while (pindex) |
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 vHave.push_back(pindex->GetBlockHash()); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1259 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1260 // Exponentially larger steps back |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1261 for (int i = 0; pindex && i < nStep; i++) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1262 pindex = pindex->pprev; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1263 if (vHave.size() > 10) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1264 nStep *= 2; |
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 vHave.push_back(hashGenesisBlock); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1267 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1268 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1269 CBlockIndex* GetBlockIndex() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1270 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1271 // 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
|
1272 foreach(const uint256& hash, vHave) |
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 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1275 if (mi != mapBlockIndex.end()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1276 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1277 CBlockIndex* pindex = (*mi).second; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1278 if (pindex->IsInMainChain()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1279 return pindex; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1280 } |
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 return pindexGenesisBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1283 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1284 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1285 uint256 GetBlockHash() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1286 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1287 // 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
|
1288 foreach(const uint256& hash, vHave) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1289 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1290 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1291 if (mi != mapBlockIndex.end()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1292 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1293 CBlockIndex* pindex = (*mi).second; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1294 if (pindex->IsInMainChain()) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1295 return hash; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1296 } |
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 return hashGenesisBlock; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1299 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1300 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1301 int GetHeight() |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1302 { |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1303 CBlockIndex* pindex = GetBlockIndex(); |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1304 if (!pindex) |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1305 return 0; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1306 return pindex->nHeight; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1307 } |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1308 }; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1309 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1310 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1311 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1312 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1313 |
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 |
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 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1318 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1319 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1320 |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1321 extern map<uint256, CTransaction> mapTransactions; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1322 extern map<uint256, CWalletTx> mapWallet; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1323 extern vector<pair<uint256, bool> > vWalletUpdated; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1324 extern CCriticalSection cs_mapWallet; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1325 extern map<vector<unsigned char>, CPrivKey> mapKeys; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1326 extern map<uint160, vector<unsigned char> > mapPubKeys; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1327 extern CCriticalSection cs_mapKeys; |
f5bbb2375e0b
First commit
sirius-m <sirius-m@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff
changeset
|
1328 extern CKey keyUser; |