- package rpc
-
- import (
- "net/http"
-
- blk "github.com/tendermint/tendermint/block"
- . "github.com/tendermint/tendermint/common"
- )
-
- 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 = uint(MaxInt(1, int(maxHeight)-20))
- }
- log.Debug("BlockchainInfoHandler", "maxHeight", maxHeight, "minHeight", minHeight)
-
- blockMetas := []*blk.BlockMeta{}
- for height := maxHeight; height >= minHeight; height-- {
- blockMeta := blockStore.LoadBlockMeta(height)
- blockMetas = append(blockMetas, blockMeta)
- }
-
- WriteAPIResponse(w, API_OK, struct {
- LastHeight uint
- BlockMetas []*blk.BlockMeta
- }{blockStore.Height(), blockMetas})
- }
-
- //-----------------------------------------------------------------------------
-
- func GetBlockHandler(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
- }
-
- blockMeta := blockStore.LoadBlockMeta(height)
- block := blockStore.LoadBlock(height)
-
- WriteAPIResponse(w, API_OK, struct {
- BlockMeta *blk.BlockMeta
- Block *blk.Block
- }{blockMeta, block})
- }
|