Ejemplo n.º 1
0
        public async Task <ResultWrapper <BlockRequestResult?> > HandleAsync(AssembleBlockRequest request)
        {
            BlockHeader?parentHeader = _blockTree.FindHeader(request.ParentHash);

            if (parentHeader is null)
            {
                if (_logger.IsWarn)
                {
                    _logger.Warn($"Parent block {request.ParentHash} cannot be found. New block will not be produced.");
                }
                return(ResultWrapper <BlockRequestResult?> .Success(null));
            }

            _timestamper.Set(DateTimeOffset.FromUnixTimeSeconds((long)request.Timestamp).UtcDateTime);
            using CancellationTokenSource cts = new(_timeout);
            Block?block = await _blockProductionTrigger.BuildBlock(parentHeader, cts.Token);

            if (block == null)
            {
                if (_logger.IsWarn)
                {
                    _logger.Warn($"Block production on parent {request.ParentHash} with timestamp {request.Timestamp} failed.");
                }
                return(ResultWrapper <BlockRequestResult?> .Success(null));
            }
            else
            {
                return(ResultWrapper <BlockRequestResult?> .Success(new BlockRequestResult(block)));
            }
        }
 public BlockImprovementContext(
     Block currentBestBlock,
     IManualBlockProductionTrigger blockProductionTrigger,
     TimeSpan timeout,
     BlockHeader parentHeader,
     PayloadAttributes payloadAttributes)
 {
     _cancellationTokenSource = new CancellationTokenSource(timeout);
     CurrentBestBlock         = currentBestBlock;
     ImprovementTask          = blockProductionTrigger
                                .BuildBlock(parentHeader, _cancellationTokenSource.Token, NullBlockTracer.Instance, payloadAttributes)
                                .ContinueWith(SetCurrentBestBlock, _cancellationTokenSource.Token);
 }
        private async Task <Block?> BuildBlock(
            IManualBlockProductionTrigger blockProductionTrigger,
            BlockHeader parentHeader,
            PayloadAttributes payloadAttributes,
            int delay,
            CancellationToken cancellationToken)
        {
            Block?block = await blockProductionTrigger.BuildBlock(parentHeader, cancellationToken, NullBlockTracer.Instance, payloadAttributes);

            await Task.Delay(delay, cancellationToken);

            if (block is not null)
            {
                CurrentBestBlock = block;
            }

            return(CurrentBestBlock);
        }
    private async Task <Block?> StartImprovingBlock(
        IManualBlockProductionTrigger blockProductionTrigger,
        BlockHeader parentHeader,
        PayloadAttributes payloadAttributes,
        CancellationToken cancellationToken)
    {
        payloadAttributes = await _boostRelay.GetPayloadAttributes(payloadAttributes, cancellationToken);

        UInt256 balanceBefore = _stateReader.GetAccount(parentHeader.StateRoot !, payloadAttributes.SuggestedFeeRecipient)?.Balance ?? UInt256.Zero;
        Block?  block         = await blockProductionTrigger.BuildBlock(parentHeader, cancellationToken, NullBlockTracer.Instance, payloadAttributes);

        if (block is not null)
        {
            CurrentBestBlock = block;
            UInt256 balanceAfter = _stateReader.GetAccount(block.StateRoot !, payloadAttributes.SuggestedFeeRecipient)?.Balance ?? UInt256.Zero;
            await _boostRelay.SendPayload(new BoostExecutionPayloadV1 { Block = new ExecutionPayloadV1(block), Profit = balanceAfter - balanceBefore }, cancellationToken);
        }

        return(CurrentBestBlock);
    }
Ejemplo n.º 5
0
 public ResultWrapper <bool> evm_mine()
 {
     _trigger.BuildBlock();
     return(ResultWrapper <bool> .Success(true));
 }