X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=Novacoin%2FCBlockStore.cs;h=cf6c515c7faba2fec3e96f82c9c7b36e6ae0f474;hb=fc063813ad58cf02f32eb73b86fb79b956054e86;hp=11190a9f3f0595c994c88715ce594489645a409d;hpb=b9ed15dff6232d8f95c1f6becb3ebe8867044305;p=NovacoinLibrary.git diff --git a/Novacoin/CBlockStore.cs b/Novacoin/CBlockStore.cs index 11190a9..cf6c515 100644 --- a/Novacoin/CBlockStore.cs +++ b/Novacoin/CBlockStore.cs @@ -273,7 +273,7 @@ namespace Novacoin /// Result public bool ReadFromFile(ref Stream reader, out CTransaction tx) { - var buffer = new byte[250000]; // Max transaction size is 250kB + var buffer = new byte[CTransaction.nMaxTxSize]; tx = null; try @@ -340,30 +340,6 @@ namespace Novacoin /// private ConcurrentDictionary txMap = new ConcurrentDictionary(); - private CBlock genesisBlock = new CBlock( - Interop.HexToArray( - "01000000" + // nVersion=1 - "0000000000000000000000000000000000000000000000000000000000000000" + // prevhash is zero - "7b0502ad2f9f675528183f83d6385794fbcaa914e6d385c6cb1d866a3b3bb34c" + // merkle root - "398e1151" + // nTime=1360105017 - "ffff0f1e" + // nBits=0x1e0fffff - "d3091800" + // nNonce=1575379 - "01" + // nTxCount=1 - "01000000" + // nVersion=1 - "398e1151" + // nTime=1360105017 - "01" + // nInputs=1 - "0000000000000000000000000000000000000000000000000000000000000000" + // input txid is zero - "ffffffff" + // n=uint.maxValue - "4d" + // scriptSigLen=77 - "04ffff001d020f274468747470733a2f2f626974636f696e74616c6b2e6f72672f696e6465782e7068703f746f7069633d3133343137392e6d736731353032313936236d736731353032313936" + // scriptSig - "ffffffff" + // nSequence=uint.maxValue - "01" + // nOutputs=1 - "0000000000000000" + // nValue=0 - "00" + // scriptPubkeyLen=0 - "00000000" + // nLockTime=0 - "00" // sigLen=0 - )); - public static CBlockStore Instance; /// @@ -394,6 +370,30 @@ namespace Novacoin dbConn.CreateTable(CreateFlags.AutoIncPK); dbConn.CreateTable(CreateFlags.ImplicitPK); + var genesisBlock = new CBlock( + Interop.HexToArray( + "01000000" + // nVersion=1 + "0000000000000000000000000000000000000000000000000000000000000000" + // prevhash is zero + "7b0502ad2f9f675528183f83d6385794fbcaa914e6d385c6cb1d866a3b3bb34c" + // merkle root + "398e1151" + // nTime=1360105017 + "ffff0f1e" + // nBits=0x1e0fffff + "d3091800" + // nNonce=1575379 + "01" + // nTxCount=1 + "01000000" + // nVersion=1 + "398e1151" + // nTime=1360105017 + "01" + // nInputs=1 + "0000000000000000000000000000000000000000000000000000000000000000" + // input txid is zero + "ffffffff" + // n=uint.maxValue + "4d" + // scriptSigLen=77 + "04ffff001d020f274468747470733a2f2f626974636f696e74616c6b2e6f72672f696e6465782e7068703f746f7069633d3133343137392e6d736731353032313936236d736731353032313936" + // scriptSig + "ffffffff" + // nSequence=uint.maxValue + "01" + // nOutputs=1 + "0000000000000000" + // nValue=0 + "00" + // scriptPubkeyLen=0 + "00000000" + // nLockTime=0 + "00" // sigLen=0 + )); + // Write block to file. var itemTemplate = new CBlockStoreItem() { @@ -589,14 +589,20 @@ namespace Novacoin // TODO: Limited duplicity on stake and reserialization of block signature - // Preliminary checks if (!block.CheckBlock(true, true, true)) { - return true; + // Preliminary checks failure. + return false; } if (block.IsProofOfStake) { + if (!block.SignatureOK || !block.vtx[1].VerifyScripts()) + { + // Proof-of-Stake signature validation failure. + return false; + } + // TODO: proof-of-stake validation } @@ -661,7 +667,7 @@ namespace Novacoin var nOffset = 0L; - var buffer = new byte[1000000]; // Max block size is 1Mb + var buffer = new byte[CBlock.nMaxBlockSize]; // Max block size is 1Mb var intBuffer = new byte[4]; var fStream2 = File.OpenRead(BlockFile);