/// <summary> /// Spend some time trying to find some base interface like ICountableEnumerable, none of such in .NET Core /// </summary> private static void EncodeListItem( RlpStream stream, Address address, IEnumerable <UInt256> indexes, int indexesCount) { // {} brackets applied to show the content structure // Address // Index1 // Index2 // ... // IndexN AccessItemLengths lengths = new(indexesCount); stream.StartSequence(lengths.ContentLength); { stream.Encode(address); stream.StartSequence(lengths.IndexesContentLength); { foreach (UInt256 index in indexes) { // storage indices are encoded as 32 bytes data arrays stream.Encode(index, 32); } } } }
protected override void EncodeValue(RlpStream rlpStream) { // I am just guessing this one int contentLength = 5 + Rlp.LengthOf(Value.NextBlock); rlpStream.StartSequence(contentLength + 1); rlpStream.StartSequence(contentLength); rlpStream.Encode(Value.ForkHash); rlpStream.Encode(Value.NextBlock); }
public byte[] Serialize(NewBlockMessage message) { int contentLength = _blockDecoder.GetLength(message.Block, RlpBehaviors.None) + Rlp.LengthOf((UInt256)message.TotalDifficulty); int totalLength = Rlp.LengthOfSequence(contentLength); RlpStream rlpStream = new RlpStream(totalLength); rlpStream.StartSequence(contentLength); rlpStream.Encode(message.Block); rlpStream.Encode(message.TotalDifficulty); return(rlpStream.Data); }
public Rlp Encode(NetworkNode item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int contentLength = GetContentLength(item, rlpBehaviors); RlpStream stream = new RlpStream(Rlp.GetSequenceRlpLength(contentLength)); stream.StartSequence(contentLength); stream.Encode(item.NodeId.Bytes); stream.Encode(item.Host); stream.Encode(item.Port); stream.Encode(string.Empty); stream.Encode(item.Reputation); return(new Rlp(stream.Data)); }
public void Encode(RlpStream rlpStream, PendingValidators item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { (int contentLength, int addressesLength) = GetContentLength(item, rlpBehaviors); rlpStream.StartSequence(contentLength); rlpStream.Encode(item.BlockNumber); rlpStream.Encode(item.BlockHash); rlpStream.StartSequence(addressesLength); for (int i = 0; i < item.Addresses.Length; i++) { rlpStream.Encode(item.Addresses[i]); } rlpStream.Encode(item.AreFinalized); }
protected override void EncodeValue(RlpStream rlpStream) { Span <byte> bytes = stackalloc byte[4]; Value.MapToIPv4().TryWriteBytes(bytes, out int _); rlpStream.Encode(bytes); }
public void Encode(RlpStream stream, ValidatorInfo?item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item == null) { stream.EncodeNullObject(); return; } var(contentLength, validatorLength) = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.FinalizingBlockNumber); stream.Encode(item.PreviousFinalizingBlockNumber); stream.StartSequence(validatorLength); for (int i = 0; i < item.Validators.Length; i++) { stream.Encode(item.Validators[i]); } }
public byte[] Serialize(BlockHeadersMessage message) { int contentLength = 0; for (int i = 0; i < message.BlockHeaders.Length; i++) { contentLength += _headerDecoder.GetLength(message.BlockHeaders[i], RlpBehaviors.None); } int length = Rlp.LengthOfSequence(contentLength); RlpStream rlpStream = new RlpStream(length); rlpStream.StartSequence(contentLength); for (int i = 0; i < message.BlockHeaders.Length; i++) { rlpStream.Encode(message.BlockHeaders[i]); } return(rlpStream.Data); }
private byte[] SerializeMetadata() { int contentLength = 0; for (int i = 0; i < _metadata.TrackedTrees.Length; i++) { contentLength += Rlp.LengthOf(_metadata.TrackedTrees[i]); } int totalLength = Rlp.LengthOfSequence(contentLength); RlpStream rlpStream = new RlpStream(totalLength); rlpStream.StartSequence(contentLength); for (int i = 0; i < _metadata.TrackedTrees.Length; i++) { rlpStream.Encode(_metadata.TrackedTrees[i]); } return(rlpStream.Data); }
public void Encode(RlpStream stream, UserOperationWithEntryPoint?opWithEntryPoint, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (opWithEntryPoint is null) { stream.EncodeNullObject(); return; } int contentLength = GetContentLength(opWithEntryPoint); UserOperation op = opWithEntryPoint.UserOperation; Address entryPoint = opWithEntryPoint.EntryPoint; stream.StartSequence(contentLength); stream.Encode(op.Sender); stream.Encode(op.Nonce); stream.Encode(op.InitCode); stream.Encode(op.CallData); stream.Encode(op.CallGas); stream.Encode(op.VerificationGas); stream.Encode(op.PreVerificationGas); stream.Encode(op.MaxFeePerGas); stream.Encode(op.MaxPriorityFeePerGas); stream.Encode(op.Paymaster); stream.Encode(op.PaymasterData); stream.Encode(op.Signature); stream.Encode(entryPoint); }
protected override void EncodeValue(RlpStream rlpStream) { rlpStream.Encode(Value); }
/// <summary> /// Encodes the entry into an RLP stream. /// </summary> public void Encode(RlpStream rlpStream) { rlpStream.Encode(Key); EncodeValue(rlpStream); }