annotate main.h @ 3:42e17b2b47a4 draft

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