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;
}