nBlockTrust cleanup.
[NovacoinLibrary.git] / Novacoin / NetInfo.cs
1 \feffnamespace Novacoin
2 {
3     /// <summary>
4     /// Basic network params.
5     /// </summary>
6     internal class NetInfo
7     {
8         /// <summary>
9         /// Minimal depth for spending coinbase and coinstake transactions.
10         /// </summary>
11         public const int nGeneratedMaturity = 500;
12
13         /// <summary>
14         /// "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty
15         /// </summary>
16         public static uint256 nProofOfWorkLimit = ~(new uint256(0)) >> 20;
17
18         /// <summary>
19         /// Proof of stake target limit from block #15000 and until 20 June 2013, results with 0,00390625 proof of stake difficulty
20         /// </summary>
21         public static uint256 nProofOfStakeLegacyLimit = ~(new uint256(0)) >> 24;
22
23         /// <summary>
24         /// Proof of stake target limit since 20 June 2013, equal to 0.03125  proof of stake difficulty
25         /// </summary>
26         public static uint256 nProofOfStakeLimit = ~(new uint256(0)) >> 27;
27
28         /// <summary>
29         /// Disabled temporarily, will be used in the future to fix minimal proof of stake difficulty at 0.25
30         /// </summary>
31         public static uint256 nProofOfStakeHardLimit = ~(new uint256(0)) >> 30;
32
33         /// <summary>
34         /// Difficulty-1 target
35         /// </summary>
36         public static uint256 nPoWBase = new uint256("00000000ffff0000000000000000000000000000000000000000000000000000");
37
38         /// <summary>
39         /// Sat, 20 Jul 2013 00:00:00 GMT
40         /// </summary>
41         public const uint nTargetsSwitchTime = 1374278400;
42
43         /// <summary>
44         /// Wed, 20 Aug 2014 00:00:00 GMT
45         /// </summary>
46         public const uint nStakeValidationSwitchTime = 1408492800;
47
48         /// <summary>
49         /// Hash of block #0
50         /// </summary>
51         public static uint256 nHashGenesisBlock = new uint256("00000a060336cbb72fe969666d337b87198b1add2abaa59cca226820b32933a4");
52
53         public const uint nLockTimeThreshold = 500000000;
54
55         /// <summary>
56         /// Allowed clock drift.
57         /// </summary>
58         private const uint nDrift = 7200;
59
60         /// <summary>
61         /// Maximum possible proof-of-work reward.
62         /// </summary>
63         public const long nMaxMintProofOfWork = CTransaction.nCoin * 100;
64
65         /// <summary>
66         /// Maximum possible proof-of-stake reward per coin*year.
67         /// </summary>
68         public const long nMaxMintProofOfStake = CTransaction.nCoin * 100;
69
70         public static uint GetAdjustedTime()
71         {
72             return Interop.GetTime();
73         }
74
75         public static uint FutureDrift(uint nTime)
76         {
77             return nTime + nDrift; // up to 2 hours from the future
78         }
79
80         public static uint PastDrift(uint nTime)
81         {
82             return nTime - nDrift; // up to 2 hours from the past
83         }
84
85         internal static uint256 GetProofOfStakeLimit(uint nHeight, uint nTime)
86         {
87             if (nTime > nTargetsSwitchTime) // 27 bits since 20 July 2013
88                 return nProofOfStakeLimit;
89             if (nHeight + 1 > 15000) // 24 bits since block 15000
90                 return nProofOfStakeLegacyLimit;
91             if (nHeight + 1 > 14060) // 31 bits since block 14060 until 15000
92                 return nProofOfStakeHardLimit;
93
94             return nProofOfWorkLimit; // return bnProofOfWorkLimit of none matched
95         }
96     }
97 }