Example #1
0
        public async Task <IActionResult> GetAsync([FromBody] Attestation signedAttestation,
                                                   CancellationToken cancellationToken)
        {
            if (_logger.IsDebug())
            {
                string?aggregationBits = null;
                if (signedAttestation.AggregationBits != null)
                {
                    aggregationBits = string.Create(signedAttestation.AggregationBits.Length,
                                                    signedAttestation.AggregationBits,
                                                    ((span, bitArray) =>
                    {
                        for (int index = 0; index < bitArray.Length; index++)
                        {
                            span[index] = bitArray[index] ? '1' : '0';
                        }
                    }));
                }

                LogDebug.AttestationPublished(_logger, signedAttestation.Data?.Slot,
                                              signedAttestation.Data?.Index,
                                              aggregationBits,
                                              signedAttestation.Signature,
                                              null);
            }

            ApiResponse apiResponse =
                await _beaconNode.PublishAttestationAsync(signedAttestation, cancellationToken).ConfigureAwait(false);

            return(apiResponse.StatusCode switch
            {
                // "The attestation was validated successfully and has been broadcast. It has also been integrated into the beacon node's database."
                Core2.Api.StatusCode.Success => Ok(),
                // "The attestation failed validation, but was successfully broadcast anyway. It was not integrated into the beacon node's database."
                Core2.Api.StatusCode.BroadcastButFailedValidation => Accepted(),
                Core2.Api.StatusCode.InvalidRequest => Problem("Invalid request syntax.",
                                                               statusCode: (int)apiResponse.StatusCode),
                Core2.Api.StatusCode.CurrentlySyncing => Problem("Beacon node is currently syncing, try again later.",
                                                                 statusCode: (int)apiResponse.StatusCode),
                _ => Problem("Beacon node internal error.", statusCode: (int)apiResponse.StatusCode)
            });