Esempio n. 1
0
        static void Main(string[] args)
        {
            string[] tx = { "fd636107ceb6de2486331ad662955d09abf0414079f2ea59f12da2cfa15c4561",
                            "088b7d88355a96633fb9586806d75d9c7e6e08b8ddaea8155f4be5ef180df3a7",
                            "dee47a1af1fbdc1ea8415ad046677234b008aac1a1f46365c5b59a33eca48065",
                            "126dbb8968504661d68adfdee5d969993e9d5262900b40ba10a92b7403e33164",
                            "9014543cdfe4f59d03f3e58d0e3cd34b1205e3173080d6252ba2c4d19977b672",
                            "ab41defef0fd2929868848dd853087e39544772b3469812d3530dc7a93604fd4",
                            "4ab90706d1162c6ef46bf7f4ab6a39cfae2f47a939a33bb9aed31e3bbe3bd86e",
                            "c6475296a18ad0423dacc3a94a231a60609f34ff068b7374880a42cbc5316307",
                            "4059bab2ec2255c0fe0c74afc774cefbbfddb1073745f6f9469c5545938f4891",
                            "e1622b99c933d518389f1793cac5fe482e5a6e8835d4803bb5deb60634fbc7bd",
                            "965fc983603545eab3571170940bb77fc301bdd02d4703504f580fdcf57abbfd",
                            "49f0f8198def669faefe2a9b30310edbd96ee685ea46e91c7a694863dcfa6c40",
                            "3751b0c8ea70985bcefbe0fd57e5977af32484a80a3bc6c96002ef94782e502b",
                            "33bb6d11961394dfa6262ca0a9e7d8ef8a090d02486be0067a0eea2462fc53b0",
                            "44195b102d6adf310530be98c9f216450bb66849030dc37a1bb832a3b1f0aa49",
                            "890756e5b2010f0a2514155450c9c1a40a5cfcd0f8f863b8820edbd93cb804ef",
                            "032a93ec78dfa141671e39bc482068d833f8ecf0c1c3daf580fcf97815a37e25",
                            "fd21f47e89e9bd3dca07e6d8274a49e7838ac8851e96228102f31fd1a7dd755f",
                            "69d184c03a2ca64a8ddfc84839f7dd71c66ec5a8ecde726e8834bfd71c3ae496",
                            "57aad7b35748c1d494240b3f4eaad3edd28edcfd645de4cb04aa430b2b870ca5",
                            "80f5f39bf798a2a13338cbe4f71aaca2c155e5fc9f97b50ca83e770e98deba90" };



            Console.WriteLine(MerkleRoot.merkle(tx));

            Console.ReadLine();
        }
Esempio n. 2
0
        public StackItem ToStackItem()
        {
            return(new VM.Types.Array
                   (
                       new StackItem[]
            {
                // Computed properties
                new ByteArray(Hash.ToArray()),

                // BlockBase properties
                new Integer(Version),
                new ByteArray(PrevHash.ToArray()),
                new ByteArray(MerkleRoot.ToArray()),
                new Integer(Timestamp),
                new Integer(Index),
                new ByteArray(NextConsensus.ToArray()),
                // Witness

                // Block properties
                // Count
                // ConsensusData
                new Integer(Transactions.Length)
            }
                   ));
        }
Esempio n. 3
0
        public byte[] ToArray()
        {
            var ret = new byte[Size];

            var v = BitConverter.GetBytes(Version);

            Buffer.BlockCopy(v, 0, ret, 0, v.Length);

            var pb = PrevBlock.ToArray();

            Buffer.BlockCopy(pb, 0, ret, 4, pb.Length);

            var mr = MerkleRoot.ToArray();

            Buffer.BlockCopy(mr, 0, ret, 36, mr.Length);

            var t = BitConverter.GetBytes(Time);

            Buffer.BlockCopy(t, 0, ret, 68, t.Length);

            var nb = BitConverter.GetBytes(Target);

            Buffer.BlockCopy(nb, 0, ret, 72, nb.Length);

            var nn = BitConverter.GetBytes(Nonce);

            Buffer.BlockCopy(nn, 0, ret, 76, nn.Length);

            return(ret);
        }
Esempio n. 4
0
 public override void WriteToBitcoinBuffer(byte[] buffer, int offset)
 {
     Version.WriteBytes(buffer, offset);
     PreviousBlock.WriteToBitcoinBuffer(buffer, PreviousBlock_Offset(ref offset));
     MerkleRoot.WriteToBitcoinBuffer(buffer, MerkleRoot_Offset(ref offset));
     Timestamp.WriteBytes(buffer, Timestamp_Offset(ref offset));
     Bits.WriteBytes(buffer, Bits_Offset(ref offset));
     Nonce.WriteBytes(buffer, Nonce_Offset(ref offset));
     Transactions.WriteToBitcoinBuffer(buffer, Transactions_Offset(ref offset));
 }
Esempio n. 5
0
        public void SerializeHeader(Stream stream)
        {
            ContractsCommon.NotNull(stream, "stream");

            Write(stream, Version);
            PreviousBlockHash.Serialize(stream);
            MerkleRoot.Serialize(stream);
            Write(stream, Timestamp);
            Write(stream, DifficultyBits);
            Write(stream, Nonce);
        }
Esempio n. 6
0
        /// <summary>
        /// Returns a copy of the block, but without any transactions.
        /// </summary>
        public Block CloneAsHeader()
        {
            var block = new Block(Params);

            block._nonce            = _nonce;
            block._prevBlockHash    = _prevBlockHash.Duplicate();
            block._merkleRoot       = MerkleRoot.Duplicate();
            block._version          = _version;
            block._time             = _time;
            block._difficultyTarget = _difficultyTarget;
            block.Transactions      = null;
            block._hash             = Hash.Duplicate();
            return(block);
        }
Esempio n. 7
0
        public byte[] ToArray()
        {
            var woffset = 0;
            var ret     = new byte[Size];

            ret.CopyAndIncr(BitConverter.GetBytes(Version), ref woffset);
            ret.CopyAndIncr(PrevBlock.ToArray(), ref woffset);
            ret.CopyAndIncr(MerkleRoot.ToArray(), ref woffset);
            ret.CopyAndIncr(BitConverter.GetBytes(Time), ref woffset);
            ret.CopyAndIncr(BitConverter.GetBytes(Target), ref woffset);
            ret.CopyAndIncr(BitConverter.GetBytes(Nonce), ref woffset);

            return(ret);
        }
Esempio n. 8
0
        /// <summary>
        /// Returns a copy of the block, but without any transactions.
        /// </summary>
        public Block CloneAsHeader()
        {
            var block = new Block(Params)
            {
                _nonce            = _nonce,
                _prevBlockHash    = _prevBlockHash.Duplicate(),
                _merkleRoot       = MerkleRoot.Duplicate(),
                _version          = _version,
                _time             = _time,
                _difficultyTarget = _difficultyTarget,
                Transactions      = null,
                _hash             = Hash.Duplicate()
            };

            return(block);
        }
Esempio n. 9
0
        /// <summary>
        /// Returns a copy of the block, but without any transactions.
        /// </summary>
        /// <returns></returns>
        public Block cloneAsHeader()
        {
            EnsureParsedHeader();

            return(new Block(Parameters)
            {
                nonce = nonce,
                PreviousBlockHash = PreviousBlockHash.Duplicate(),
                MerkleRoot = MerkleRoot.Duplicate(),
                Version = Version,
                TimeSeconds = TimeSeconds,
                DifficultyTarget = DifficultyTarget,
                Transactions = null,
                hash = Hash.Duplicate()
            });
        }
Esempio n. 10
0
        StackItem IInteroperable.ToStackItem(ReferenceCounter referenceCounter)
        {
            return(new VM.Types.Array(referenceCounter, new StackItem[]
            {
                // Computed properties
                Hash.ToArray(),

                // BlockBase properties
                Version,
                PrevHash.ToArray(),
                MerkleRoot.ToArray(),
                Timestamp,
                Index,
                NextConsensus.ToArray(),

                // Block properties
                Hashes.Length - 1
            }));
        }
Esempio n. 11
0
        public StackItem ToStackItem(ReferenceCounter referenceCounter)
        {
            return(new Array(referenceCounter, new StackItem[]
            {
                // Computed properties
                Hash.ToArray(),

                // BlockBase properties
                Version,
                PrevHash.ToArray(),
                MerkleRoot.ToArray(),
                Timestamp,
                Index,
                NextConsensus.ToArray(),

                // Block properties
                Transactions.Length
            }));
        }
Esempio n. 12
0
        public override byte[] GetBytes()
        {
            byte[] headerSerialized =
                new byte[COUNT_HEADER_BYTES];

            BitConverter.GetBytes(Version)
            .CopyTo(headerSerialized, 0);

            HashPrevious.CopyTo(headerSerialized, 4);

            MerkleRoot.CopyTo(headerSerialized, 36);

            BitConverter.GetBytes(UnixTimeSeconds)
            .CopyTo(headerSerialized, 68);

            BitConverter.GetBytes(NBits)
            .CopyTo(headerSerialized, 72);

            BitConverter.GetBytes(Nonce)
            .CopyTo(headerSerialized, 76);

            return(headerSerialized);
        }
Esempio n. 13
0
 public override int GetHashCode()
 {
     return(Version.GetHashCode() + PrevBlockHash.GetHashCode()
            + MerkleRoot.GetHashCode() + Time.GetHashCode());
 }