X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=Novacoin%2FCBlock.cs;h=fba13877e372eeedd545f282fdda1dec5e5f5ba2;hb=1e2160be4bf5122f8bbea1c493df9a26be91e4cf;hp=2dc8a3b7dbf76f7165affaaa64a51a12c752054e;hpb=12807e425dfe9da0b3d6ac18b3422e2b8135f24a;p=NovacoinLibrary.git diff --git a/Novacoin/CBlock.cs b/Novacoin/CBlock.cs index 2dc8a3b..fba1387 100644 --- a/Novacoin/CBlock.cs +++ b/Novacoin/CBlock.cs @@ -21,7 +21,6 @@ using System.Text; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.IO; -using System.Numerics; // TODO: implement wrapper for BouncyCastle implementation of BigInteger and use it instead. This is necessary due to incompatibility of System.Numerics.BigInteger with OpenSSL. namespace Novacoin { @@ -165,7 +164,7 @@ namespace Novacoin return false; } - // Coinbase output should be empty if proof-of-stake block + // Coinbase output must be empty if proof-of-stake block if (vtx[0].vout.Length != 1 || !vtx[0].vout[0].IsEmpty) { return false; @@ -180,7 +179,7 @@ namespace Novacoin // Check proof-of-stake block signature if (fCheckSig && !SignatureOK) { - return false; + return false; // Proof-of-Stake signature checking failure. } if (!vtx[1].CheckTransaction()) @@ -270,7 +269,7 @@ namespace Novacoin return true; } - private bool CheckProofOfWork(uint256 hash, uint nBits) + private static bool CheckProofOfWork(uint256 hash, uint nBits) { uint256 nTarget = new uint256(); nTarget.Compact = nBits; @@ -490,30 +489,29 @@ namespace Novacoin // // Please note that we're using bisection to find an approximate solutuion - BigInteger bnSubsidyLimit = NetInfo.nMaxMintProofOfWork; uint256 nTarget = 0; nTarget.Compact = nBits; - BigInteger bnTarget = new BigInteger(nTarget); - BigInteger bnTargetLimit = new BigInteger(NetInfo.nProofOfWorkLimit); + BigNum bnTarget = nTarget; + BigNum bnTargetLimit = NetInfo.nProofOfWorkLimit; - BigInteger bnLowerBound = CTransaction.nCent; - BigInteger bnUpperBound = bnSubsidyLimit; + BigNum bnSubsidyLimit = NetInfo.nMaxMintProofOfWork; + BigNum bnLowerBound = CTransaction.nCent; + BigNum bnUpperBound = bnSubsidyLimit; while (bnLowerBound + CTransaction.nCent <= bnUpperBound) { - BigInteger bnMidValue = (bnLowerBound + bnUpperBound) / 2; + BigNum bnMidValue = (bnLowerBound + bnUpperBound) / 2; if (bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnTargetLimit > bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnSubsidyLimit * bnTarget) bnUpperBound = bnMidValue; else bnLowerBound = bnMidValue; } - ulong nSubsidy = (ulong)bnUpperBound; + ulong nSubsidy = bnUpperBound; nSubsidy = (nSubsidy / CTransaction.nCent) * CTransaction.nCent; - return Math.Min(nSubsidy, NetInfo.nMaxMintProofOfWork) + nFees; } @@ -525,23 +523,23 @@ namespace Novacoin { // Stage 2 of emission process is PoS-based. It will be active on mainNet since 20 Jun 2013. - BigInteger bnRewardCoinYearLimit = NetInfo.nMaxMintProofOfStake; // Base stake mint rate, 100% year interest + BigNum bnRewardCoinYearLimit = NetInfo.nMaxMintProofOfStake; // Base stake mint rate, 100% year interest uint256 nTarget = 0; nTarget.Compact = nBits; - BigInteger bnTarget = new BigInteger(nTarget); - BigInteger bnTargetLimit = new BigInteger(NetInfo.GetProofOfStakeLimit(0, nTime)); + BigNum bnTarget = nTarget; + BigNum bnTargetLimit = NetInfo.GetProofOfStakeLimit(0, nTime); // NovaCoin: A reasonably continuous curve is used to avoid shock to market - BigInteger bnLowerBound = CTransaction.nCent, // Lower interest bound is 1% per year + BigNum bnLowerBound = CTransaction.nCent, // Lower interest bound is 1% per year bnUpperBound = bnRewardCoinYearLimit, // Upper interest bound is 100% per year bnMidPart, bnRewardPart; while (bnLowerBound + CTransaction.nCent <= bnUpperBound) { - BigInteger bnMidValue = (bnLowerBound + bnUpperBound) / 2; + BigNum bnMidValue = (bnLowerBound + bnUpperBound) / 2; if (nTime < NetInfo.nStakeCurveSwitchTime) { // @@ -575,7 +573,7 @@ namespace Novacoin bnLowerBound = bnMidValue; } - nRewardCoinYear = (ulong)bnUpperBound; + nRewardCoinYear = bnUpperBound; nRewardCoinYear = Math.Min((nRewardCoinYear / CTransaction.nCent) * CTransaction.nCent, NetInfo.nMaxMintProofOfStake); } else