Ejemplo n.º 1
0
        public void GetSpans()
        {
            var pool       = new SpanPool <RequestId>(20);
            var firstPart  = pool.GetSpan(3);
            var secondPart = pool.GetSpan(17);

            firstPart[0] = new RequestId();
            firstPart[2] = new RequestId();

            Assert.Equal(default, secondPart[0]);
Ejemplo n.º 2
0
        public GetCoinResponse(
            RequestId requestId,
            ClientId clientId,
            GetCoinStatus status,
            ref Outpoint outpoint,
            OutpointFlags flags,
            BlockAlias context,
            BlockAlias production,
            BlockAlias consumption,
            ulong satoshis,
            uint nLockTime,
            Span <byte> script,
            BlockHandleMask mask,
            SpanPool <byte> pool)
        {
            var messageSizeInBytes = Header.SizeInBytes + script.Length;

            _buffer = pool.GetSpan(messageSizeInBytes);

            AsHeader.ResponseHeader.MessageSizeInBytes = messageSizeInBytes;
            AsHeader.ResponseHeader.RequestId          = requestId;
            AsHeader.ResponseHeader.ClientId           = clientId;
            AsHeader.ResponseHeader.MessageKind        = MessageKind.GetCoinResponse;

            AsHeader.Status      = status;
            AsHeader.Outpoint    = outpoint;
            AsHeader.Flags       = flags;
            AsHeader.Context     = context.ConvertToBlockHandle(mask);
            AsHeader.Production  = production.ConvertToBlockHandle(mask);
            AsHeader.Consumption = consumption.ConvertToBlockHandle(mask);
            AsHeader.Satoshis    = satoshis;
            AsHeader.NLockTime   = nLockTime;

            script.CopyTo(_buffer.Slice(Header.SizeInBytes));
        }
Ejemplo n.º 3
0
        public OpenBlockResponse(ref MessageHeader requestHeader, OpenBlockStatus status, SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);

            AsHeader.ResponseHeader = requestHeader;

            AsHeader.ResponseHeader.MessageKind        = MessageKind.OpenBlockResponse;
            AsHeader.ResponseHeader.MessageSizeInBytes = Header.SizeInBytes;

            AsHeader.Status             = status;
            AsHeader.Handle             = default;
            AsHeader.UncommittedBlockId = default;
        }
Ejemplo n.º 4
0
        public GetBlockHandleResponse(
            ref MessageHeader requestHeader, GetBlockHandleStatus status, SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);

            AsHeader.ResponseHeader = requestHeader;

            AsHeader.ResponseHeader.MessageKind        = MessageKind.BlockHandleResponse;
            AsHeader.ResponseHeader.MessageSizeInBytes = Header.SizeInBytes;

            AsHeader.Status = status;
            AsHeader.Handle = default;
        }
Ejemplo n.º 5
0
        public GetBlockHandleResponse(
            ref MessageHeader requestHeader, BlockHandleMask mask, BlockAlias alias, SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);

            AsHeader.ResponseHeader = requestHeader;

            AsHeader.ResponseHeader.MessageKind        = MessageKind.BlockHandleResponse;
            AsHeader.ResponseHeader.MessageSizeInBytes = Header.SizeInBytes;

            AsHeader.Status = GetBlockHandleStatus.Success;
            AsHeader.Handle = alias.ConvertToBlockHandle(mask);
        }
Ejemplo n.º 6
0
        public OpenBlockResponse(
            ref MessageHeader requestHeader, BlockHandleMask mask, BlockAlias alias, UncommittedBlockId uncommittedBlockId, SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);

            AsHeader.ResponseHeader = requestHeader;

            AsHeader.ResponseHeader.MessageKind        = MessageKind.OpenBlockResponse;
            AsHeader.ResponseHeader.MessageSizeInBytes = Header.SizeInBytes;

            AsHeader.Status             = OpenBlockStatus.Success;
            AsHeader.Handle             = alias.ConvertToBlockHandle(mask);
            AsHeader.UncommittedBlockId = uncommittedBlockId;
        }
Ejemplo n.º 7
0
 public bool TryGet(T key, out Span <byte> value)
 {
     _pool.Reset();
     if (_map.TryGetValue(key, out var vs))
     {
         value = _pool.GetSpan(vs.Length);
         vs.CopyTo(value);
         return(true);
     }
     else
     {
         value = Span <byte> .Empty;
         return(false);
     }
 }
Ejemplo n.º 8
0
        public ConsumeCoinResponse(
            RequestId requestId,
            ClientId clientId,
            ChangeCoinStatus status,
            SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);

            AsHeader.ResponseHeader.MessageSizeInBytes = Header.SizeInBytes;
            AsHeader.ResponseHeader.RequestId          = requestId;
            AsHeader.ResponseHeader.ClientId           = clientId;
            AsHeader.ResponseHeader.MessageKind        = MessageKind.ConsumeCoinResponse;

            AsHeader.Status = status;
        }
Ejemplo n.º 9
0
        public ProtocolErrorResponse(
            RequestId requestId,
            ClientId clientId,
            ProtocolErrorStatus status,
            SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);

            AsHeader.ResponseHeader.MessageSizeInBytes = Header.SizeInBytes;
            AsHeader.ResponseHeader.RequestId          = requestId;
            AsHeader.ResponseHeader.ClientId           = clientId;
            AsHeader.ResponseHeader.MessageKind        = MessageKind.ProtocolErrorResponse;

            AsHeader.Status = status;
        }
Ejemplo n.º 10
0
        /// <summary> Client-side perspective. </summary>
        public GetCoinRequest(
            RequestId requestId,
            ref Outpoint outpoint,
            BlockHandle context,
            SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);
            _mask   = default;

            AsHeader.RequestHeader.MessageSizeInBytes = Header.SizeInBytes;
            AsHeader.RequestHeader.RequestId          = requestId;
            AsHeader.RequestHeader.MessageKind        = MessageKind.GetCoin;

            Outpoint      = outpoint;
            HandleContext = context;
        }
Ejemplo n.º 11
0
        public GetBlockInfoResponse(
            ref MessageHeader requestHeader,
            UncommittedBlockId uncommittedBlockId,
            BlockAlias alias,
            BlockAlias parent,
            int blockHeight,
            BlockHandleMask mask,
            SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes);

            AsHeader.ResponseHeader                    = requestHeader;
            AsHeader.ResponseHeader.MessageKind        = MessageKind.BlockInfoResponse;
            AsHeader.ResponseHeader.MessageSizeInBytes = Header.SizeInBytes;

            AsHeader.UncommittedBlockId = uncommittedBlockId;
            AsHeader.Handle             = alias.ConvertToBlockHandle(mask);
            AsHeader.Parent             = parent.ConvertToBlockHandle(mask);
            AsHeader.BlockHeight        = blockHeight;
            AsHeader.IsCommitted        = false;
        }
Ejemplo n.º 12
0
        /// <summary> Coin production. Client-side perspective. </summary>
        public ProduceCoinRequest(
            RequestId requestId,
            ref Outpoint outpoint,
            OutpointFlags flags,
            BlockHandle context,
            ulong satoshis,
            uint nLockTime,
            int scriptSizeInBytes,
            SpanPool <byte> pool)
        {
            _buffer = pool.GetSpan(Header.SizeInBytes + scriptSizeInBytes);
            _mask   = default;

            AsHeader.RequestHeader.MessageSizeInBytes = Header.SizeInBytes + scriptSizeInBytes;
            AsHeader.RequestHeader.RequestId          = requestId;
            AsHeader.RequestHeader.MessageKind        = MessageKind.ProduceCoin;

            Outpoint      = outpoint;
            HandleContext = context;
            Flags         = flags;
            Satoshis      = satoshis;
            NLockTime     = nLockTime;
        }