예제 #1
0
        public void uitnSerializationTests2()
        {
            var v     = new uint256("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20");
            var vr    = new uint256("201f1e1d1c1b1a191817161514131211100f0e0d0c0b0a090807060504030201");
            var bytes = v.ToBytes();

            Assert.Equal(0x20, bytes[0]);
            Assert.Equal(0x01, bytes[31]);

            var v2 = new uint256(bytes);

            Assert.Equal(v, v2);

            Assert.Equal("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20", v2.ToString());

            var bytes2 = new byte[32];

            v2.ToBytes(bytes2);
            var v3 = new uint256(bytes2, 0, 32);

            Assert.Equal(v2, v3);

            Assert.Equal(vr, new uint256(v.ToBytes(false)));
            v.ToBytes(bytes, false);
            Assert.Equal(vr, new uint256(bytes));

            v.ToBytes(bytes);
            Assert.Equal(vr, new uint256(bytes, false));

            Assert.Equal(v, new uint256(Enumerable.Range(0, 32).Select(i => v.GetByte(i)).ToArray()));
            Assert.Equal(0x1d1e1f20U, v.GetLow32());
            Assert.Equal(0x191a1b1c1d1e1f20U, v.GetLow64());
        }
예제 #2
0
            public override void ReadWrite(BitcoinStream stream)
            {
                var isNewFormat = !stream.Serializing || (nSolutionSize != 0);

                stream.ReadWrite(ref nVersion);
                stream.ReadWrite(ref hashPrevBlock);
                stream.ReadWrite(ref hashMerkleRoot);
                if (isNewFormat)
                {
                    stream.ReadWrite(ref nHeight);
                    for (int i = 0; i < vReserved.Length; i++)
                    {
                        uint nReserved = 0;
                        stream.ReadWrite(ref nReserved);
                        vReserved[i] = nReserved;
                    }
                }
                stream.ReadWrite(ref nTime);
                stream.ReadWrite(ref nBits);
                if (isNewFormat)
                {
                    stream.ReadWrite(ref nNewNonce);
                    stream.ReadWriteAsVarInt(ref nSolutionSize);
                    if (nSolutionSize > 0)
                    {
                        if (!stream.Serializing)
                        {
                            nSolution = new byte[nSolutionSize];
                        }
                        stream.ReadWrite(ref nSolution);
                    }
                }
                else
                {
                    nNonce = nNewNonce.GetLow32();
                    stream.ReadWrite(ref nNonce);
                    nNewNonce = new uint256(nNonce);
                }
            }