|
|
- package rpc
-
- import (
- "net/http"
-
- . "github.com/tendermint/tendermint/block"
- . "github.com/tendermint/tendermint/common"
- )
-
- type BlockchainInfoResponse struct {
- LastHeight uint
- BlockMetas []*BlockMeta
- }
-
- func BlockchainInfoHandler(w http.ResponseWriter, r *http.Request) {
- minHeight, _ := GetParamUint(r, "min_height")
- maxHeight, _ := GetParamUint(r, "max_height")
- if maxHeight == 0 {
- maxHeight = blockStore.Height()
- } else {
- maxHeight = MinUint(blockStore.Height(), maxHeight)
- }
- if minHeight == 0 {
- minHeight = MaxUint(1, MinUint(maxHeight-20, 1))
- }
-
- blockMetas := []*BlockMeta{}
- for height := minHeight; height <= maxHeight; height++ {
- blockMeta := blockStore.LoadBlockMeta(height)
- blockMetas = append(blockMetas, blockMeta)
- }
-
- res := BlockchainInfoResponse{
- LastHeight: blockStore.Height(),
- BlockMetas: blockMetas,
- }
-
- WriteAPIResponse(w, API_OK, res)
- return
- }
-
- //-----------------------------------------------------------------------------
-
- func BlockHandler(w http.ResponseWriter, r *http.Request) {
- height, _ := GetParamUint(r, "height")
- if height == 0 {
- WriteAPIResponse(w, API_INVALID_PARAM, "height must be greater than 1")
- return
- }
- if height > blockStore.Height() {
- WriteAPIResponse(w, API_INVALID_PARAM, "height must be less than the current blockchain height")
- return
- }
-
- block := blockStore.LoadBlock(height)
- WriteAPIResponse(w, API_OK, block)
- return
- }
|