Exemplo n.º 1
0
 private int GetRequestLength(HelperTrieRequest request)
 {
     return
         (Rlp.LengthOf((int)request.SubType) +
          Rlp.LengthOf(request.SectionIndex) +
          Rlp.LengthOf(request.Key) +
          Rlp.LengthOf(request.FromLevel) +
          Rlp.LengthOf(request.AuxiliaryData));
 }
Exemplo n.º 2
0
        public static GetHelperTrieProofsMessage Deserialize(RlpStream rlpStream)
        {
            GetHelperTrieProofsMessage message = new GetHelperTrieProofsMessage();

            rlpStream.ReadSequenceLength();
            message.RequestId = rlpStream.DecodeLong();
            message.Requests  = rlpStream.DecodeArray(stream => {
                HelperTrieRequest request = new HelperTrieRequest();
                stream.ReadSequenceLength();
                request.SubType       = (HelperTrieType)stream.DecodeInt();
                request.SectionIndex  = stream.DecodeLong();
                request.Key           = stream.DecodeByteArray();
                request.FromLevel     = stream.DecodeLong();
                request.AuxiliaryData = stream.DecodeInt();
                return(request);
            });
            return(message);
        }
Exemplo n.º 3
0
        public void GetCHTData(HelperTrieRequest request, List <byte[]> proofNodes, List <byte[]> auxData)
        {
            var cht = SyncServer.GetCHT();

            // todo - enum?
            if (request.AuxiliaryData == 1)
            {
                auxData.Add(cht.RootHash.Bytes);
                return;
            }
            else if (request.AuxiliaryData == 2)
            {
                (Keccak hash, _) = cht.Get(request.Key);
                var headerResult = SyncServer.FindHeaders(hash, 1, 0, false);
                if (headerResult.Length != 1)
                {
                    throw new SubprotocolException($"Unable to find header for block {request.Key.WithoutLeadingZeros().ToArray().ToLongFromBigEndianByteArrayWithoutLeadingZeros()} for GetHelperProofs response.");
                }
                auxData.Add(Rlp.Encode(headerResult[0]).Bytes);
            }
            proofNodes.AddRange(cht.BuildProof(request.Key, request.SectionIndex, request.FromLevel));
        }