BCNet.Bitcoin.HandleHeadersPacket C# (CSharp) Method

HandleHeadersPacket() public method

public HandleHeadersPacket ( NodeConnection from, byte payload ) : void
from NodeConnection
payload byte
return void
        public void HandleHeadersPacket(NodeConnection from, byte[] payload)
        {
            MemoryStream stream = new MemoryStream(payload);
            BinaryReader br = new BinaryReader(stream);

            List<BlockHeader> headers = new List<BlockHeader>();

            ulong count = Utils.ReadVarInt(br);
            Console.WriteLine("Got Headers: " + count);
            for (ulong i = 0; i < count; i++)
            {
                uint version = br.ReadUInt32();
                byte[] prevBlock = br.ReadBytes(32);
                byte[] merkle = br.ReadBytes(32);
                uint time = br.ReadUInt32();
                uint bits = br.ReadUInt32();
                uint nonce = br.ReadUInt32();
                ulong txn = Utils.ReadVarInt(br);

                if (!mIgnoreSigLen)
                {
                    ulong siglen = Utils.ReadVarInt(br);
                    br.ReadBytes((int)siglen);
                }

                BlockHeader header = new BlockHeader(version, prevBlock, merkle, time, bits, nonce);
                if (headers.Count > 0)
                    headers[headers.Count - 1].mHash = prevBlock;
                headers.Add(header);
            }
            br.Close();

            if (!mPickedHashType)
            {
                mUseScryptHash = headers[0].ValidateHash();
                mPickedHashType = true;
            }

            headers[headers.Count - 1].ComputeHash(mUseScryptHash);

            mPendingHeaders = headers;
            mLastNode = from;
        }

Usage Example

Ejemplo n.º 1
0
 void PH_Headers(byte[] payload)
 {
     if (mFetchingHeaders)
     {
         mOwner.HandleHeadersPacket(this, payload);
         mFetchingHeaders = false;
     }
 }