public IActionResult GetBlock([FromQuery] SearchByHashRequest query) { if (!this.ModelState.IsValid) { return(ModelStateErrors.BuildErrorResponse(this.ModelState)); } try { uint256 blockId = uint256.Parse(query.Hash); ChainedHeader chainedHeader = this.chainIndexer.GetHeader(blockId); if (chainedHeader == null) { return(this.Ok("Block not found")); } Block block = chainedHeader.Block ?? this.blockStore.GetBlock(blockId); // In rare occasions a block that is found in the // indexer may not have been pushed to the store yet. if (block == null) { return(this.Ok("Block not found")); } if (!query.OutputJson) { return(this.Json(block)); } BlockModel blockModel = query.ShowTransactionDetails ? new BlockTransactionDetailsModel(block, chainedHeader, this.chainIndexer.Tip, this.network) : new BlockModel(block, chainedHeader, this.chainIndexer.Tip, this.network); if (this.network.Consensus.IsProofOfStake) { var posBlock = block as PosBlock; blockModel.PosBlockSignature = posBlock.BlockSignature.ToHex(this.network); blockModel.PosBlockTrust = new Target(chainedHeader.GetBlockProof()).ToUInt256().ToString(); blockModel.PosChainTrust = chainedHeader.ChainWork.ToString(); // this should be similar to ChainWork } return(this.Json(blockModel)); } catch (Exception e) { this.logger.LogError("Exception occurred: {0}", e.ToString()); return(ErrorHelpers.BuildErrorResponse(HttpStatusCode.BadRequest, e.Message, e.ToString())); } }
public object GetBlock(string blockHash, int verbosity = 1) { uint256 blockId = uint256.Parse(blockHash); // Does the block exist. ChainedHeader chainedHeader = this.ChainIndexer.GetHeader(blockId); if (chainedHeader == null) { return(null); } Block block = chainedHeader.Block ?? this.blockStore?.GetBlock(blockId); // In rare occasions a block that is found in the // indexer may not have been pushed to the store yet. if (block == null) { return(null); } if (verbosity == 0) { return(new HexModel(block.ToHex(this.Network))); } var blockModel = new BlockModel(block, chainedHeader, this.ChainIndexer.Tip, this.Network, verbosity); if (this.Network.Consensus.IsProofOfStake) { var posBlock = block as PosBlock; blockModel.PosBlockSignature = posBlock.BlockSignature.ToHex(this.Network); blockModel.PosBlockTrust = new Target(chainedHeader.GetBlockProof()).ToUInt256().ToString(); blockModel.PosChainTrust = chainedHeader.ChainWork.ToString(); // this should be similar to ChainWork if (this.stakeChain != null) { BlockStake blockStake = this.stakeChain.Get(blockId); blockModel.PosModifierv2 = blockStake?.StakeModifierV2.ToString(); blockModel.PosFlags = blockStake?.Flags == BlockFlag.BLOCK_PROOF_OF_STAKE ? "proof-of-stake" : "proof-of-work"; blockModel.PosHashProof = blockStake?.HashProof.ToString(); } } return(blockModel); }