X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=Novacoin%2FNetInfo.cs;h=97d83e8526d3c6a291600e5c7f28db09045012f7;hb=6b0501a53995f78928332cfcd7ce1cae4b07486f;hp=d8ac0cf925f9239ad061f4257333f63119aa5b86;hpb=e57bde783c3e1278c4a2499826358920cec0ddb5;p=NovacoinLibrary.git diff --git a/Novacoin/NetInfo.cs b/Novacoin/NetInfo.cs index d8ac0cf..97d83e8 100644 --- a/Novacoin/NetInfo.cs +++ b/Novacoin/NetInfo.cs @@ -1,21 +1,76 @@ -using System; - -namespace Novacoin +namespace Novacoin { - internal class NetUtils + /// + /// Basic network params. + /// + internal class NetInfo { - public static uint256 nProofOfWorkLimit = ~(new uint256(0)) >> 20; // "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty - public static uint256 nProofOfStakeLegacyLimit = ~(new uint256(0)) >> 24; // proof of stake target limit from block #15000 and until 20 June 2013, results with 0,00390625 proof of stake difficulty + /// + /// Minimal depth for spending coinbase and coinstake transactions. + /// + public const int nGeneratedMaturity = 500; + + /// + /// "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty + /// + public static uint256 nProofOfWorkLimit = ~(new uint256(0)) >> 20; + + /// + /// Proof of stake target limit from block #15000 and until 20 June 2013, results with 0,00390625 proof of stake difficulty + /// + public static uint256 nProofOfStakeLegacyLimit = ~(new uint256(0)) >> 24; + + /// + /// Proof of stake target limit since 20 June 2013, equal to 0.03125 proof of stake difficulty + /// + public static uint256 nProofOfStakeLimit = ~(new uint256(0)) >> 27; + + /// + /// Disabled temporarily, will be used in the future to fix minimal proof of stake difficulty at 0.25 + /// + public static uint256 nProofOfStakeHardLimit = ~(new uint256(0)) >> 30; + + /// + /// Difficulty-1 target + /// + public static uint256 nPoWBase = new uint256("00000000ffff0000000000000000000000000000000000000000000000000000"); + + /// + /// Fri, 20 Sep 2013 00:00:00 GMT + /// + public const uint nChainChecksSwitchTime = 1379635200; - public static uint256 nProofOfStakeLimit = ~(new uint256(0)) >> 27; // proof of stake target limit since 20 June 2013, equal to 0.03125 proof of stake difficulty - public static uint256 nProofOfStakeHardLimit = ~(new uint256(0)) >> 30; // disabled temporarily, will be used in the future to fix minimal proof of stake difficulty at 0.25 + /// + /// Sat, 20 Jul 2013 00:00:00 GMT + /// + public const uint nTargetsSwitchTime = 1374278400; - public static uint256 nPoWBase = new uint256("00000000ffff0000000000000000000000000000000000000000000000000000"); // difficulty-1 target + /// + /// Wed, 20 Aug 2014 00:00:00 GMT + /// + public const uint nStakeValidationSwitchTime = 1408492800; - public static uint nChainChecksSwitchTime = 1379635200; // Fri, 20 Sep 2013 00:00:00 GMT + /// + /// Hash of block #0 + /// + public static uint256 nHashGenesisBlock = new uint256("00000a060336cbb72fe969666d337b87198b1add2abaa59cca226820b32933a4"); - public static readonly uint nLockTimeThreshold = 500000000; - private static readonly uint nDrift = 7200; + public const uint nLockTimeThreshold = 500000000; + + /// + /// Allowed clock drift. + /// + private const uint nDrift = 7200; + + /// + /// Maximum possible proof-of-work reward. + /// + public const long nMaxMintProofOfWork = CTransaction.nCoin * 100; + + /// + /// Maximum possible proof-of-stake reward per coin*year. + /// + public const long nMaxMintProofOfStake = CTransaction.nCoin * 100; public static uint GetAdjustedTime() { @@ -31,5 +86,17 @@ namespace Novacoin { return nTime - nDrift; // up to 2 hours from the past } + + internal static uint256 GetProofOfStakeLimit(uint nHeight, uint nTime) + { + if (nTime > nTargetsSwitchTime) // 27 bits since 20 July 2013 + return nProofOfStakeLimit; + if (nHeight + 1 > 15000) // 24 bits since block 15000 + return nProofOfStakeLegacyLimit; + if (nHeight + 1 > 14060) // 31 bits since block 14060 until 15000 + return nProofOfStakeHardLimit; + + return nProofOfWorkLimit; // return bnProofOfWorkLimit of none matched + } } } \ No newline at end of file