annotate main.h @ 11:aabb318698b9 draft

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