96cf321832fe3a7a5b24d3d8c5ba1127cb302fa4
[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         /// Fri, 20 Sep 2013 00:00:00 GMT
40         /// </summary>
41         public const uint nChainChecksSwitchTime = 1379635200;
42
43         /// <summary>
44         /// Sat, 20 Jul 2013 00:00:00 GMT
45         /// </summary>
46         public const uint nTargetsSwitchTime = 1374278400;
47
48         /// <summary>
49         /// Wed, 20 Aug 2014 00:00:00 GMT
50         /// </summary>
51         public const uint nStakeValidationSwitchTime = 1408492800;
52
53         /// <summary>
54         /// Thu, 20 Jun 2013 00:00:00 GMT
55         /// </summary>
56         public const uint nDynamicStakeRewardTime = 1371686400;
57
58         /// <summary>
59         /// Sun, 20 Oct 2013 00:00:00 GMT
60         /// </summary>
61         public const uint nStakeCurveSwitchTime = 1382227200;
62
63         /// <summary>
64         /// Hash of block #0
65         /// </summary>
66         public static uint256 nHashGenesisBlock = new uint256("00000a060336cbb72fe969666d337b87198b1add2abaa59cca226820b32933a4");
67
68         public const uint nLockTimeThreshold = 500000000;
69
70         /// <summary>
71         /// Allowed clock drift.
72         /// </summary>
73         private const uint nDrift = 7200;
74
75         /// <summary>
76         /// Maximum possible proof-of-work reward.
77         /// </summary>
78         public const long nMaxMintProofOfWork = CTransaction.nCoin * 100;
79
80         /// <summary>
81         /// Maximum possible proof-of-stake reward per coin*year.
82         /// </summary>
83         public const long nMaxMintProofOfStake = CTransaction.nCoin * 100;
84
85         public static uint GetAdjustedTime()
86         {
87             return Interop.GetTime();
88         }
89
90         public static uint FutureDrift(uint nTime)
91         {
92             return nTime + nDrift; // up to 2 hours from the future
93         }
94
95         public static uint PastDrift(uint nTime)
96         {
97             return nTime - nDrift; // up to 2 hours from the past
98         }
99
100         internal static uint256 GetProofOfStakeLimit(uint nHeight, uint nTime)
101         {
102             if (nTime > nTargetsSwitchTime) // 27 bits since 20 July 2013
103                 return nProofOfStakeLimit;
104             if (nHeight + 1 > 15000) // 24 bits since block 15000
105                 return nProofOfStakeLegacyLimit;
106             if (nHeight + 1 > 14060) // 31 bits since block 14060 until 15000
107                 return nProofOfStakeHardLimit;
108
109             return nProofOfWorkLimit; // return bnProofOfWorkLimit of none matched
110         }
111     }
112 }