list_validators API

This commit is contained in:
Jae Kwon 2015-01-11 18:21:17 -08:00
parent 6ad3388097
commit 33aff6b26b
3 changed files with 47 additions and 23 deletions

View File

@ -9,25 +9,16 @@ import (
. "github.com/tendermint/tendermint/common" . "github.com/tendermint/tendermint/common"
) )
type GenPrivAccountResponse struct {
PrivAccount *account.PrivAccount
}
func GenPrivAccountHandler(w http.ResponseWriter, r *http.Request) { func GenPrivAccountHandler(w http.ResponseWriter, r *http.Request) {
privAccount := account.GenPrivAccount() privAccount := account.GenPrivAccount()
res := GenPrivAccountResponse{ WriteAPIResponse(w, API_OK, struct {
PrivAccount: privAccount, PrivAccount *account.PrivAccount
} }{privAccount})
WriteAPIResponse(w, API_OK, res)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
type SignSendTxResponse struct {
SendTx *block.SendTx
}
func SignSendTxHandler(w http.ResponseWriter, r *http.Request) { func SignSendTxHandler(w http.ResponseWriter, r *http.Request) {
sendTxStr := GetParam(r, "sendTx") sendTxStr := GetParam(r, "sendTx")
privAccountsStr := GetParam(r, "privAccounts") privAccountsStr := GetParam(r, "privAccounts")
@ -49,23 +40,25 @@ func SignSendTxHandler(w http.ResponseWriter, r *http.Request) {
input.Signature = privAccounts[i].Sign(sendTx) input.Signature = privAccounts[i].Sign(sendTx)
} }
res := SignSendTxResponse{ WriteAPIResponse(w, API_OK, struct {
SendTx: sendTx, SendTx *block.SendTx
} }{sendTx})
WriteAPIResponse(w, API_OK, res)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
type ListAccountsResponse struct {
Accounts []*account.Account
}
func ListAccountsHandler(w http.ResponseWriter, r *http.Request) { func ListAccountsHandler(w http.ResponseWriter, r *http.Request) {
var blockHeight uint
var accounts []*account.Account
state := consensusState.GetState() state := consensusState.GetState()
blockHeight = state.LastBlockHeight
state.GetAccounts().Iterate(func(key interface{}, value interface{}) bool { state.GetAccounts().Iterate(func(key interface{}, value interface{}) bool {
log.Warn(">>", "key", key, "value", value) accounts = append(accounts, value.(*account.Account))
return false return false
}) })
WriteAPIResponse(w, API_OK, state)
WriteAPIResponse(w, API_OK, struct {
BlockHeight uint
Accounts []*account.Account
}{blockHeight, accounts})
} }

View File

@ -10,5 +10,6 @@ func initHandlers() {
http.HandleFunc("/broadcast_tx", BroadcastTxHandler) http.HandleFunc("/broadcast_tx", BroadcastTxHandler)
http.HandleFunc("/gen_priv_account", GenPrivAccountHandler) http.HandleFunc("/gen_priv_account", GenPrivAccountHandler)
http.HandleFunc("/sign_send_tx", SignSendTxHandler) http.HandleFunc("/sign_send_tx", SignSendTxHandler)
http.HandleFunc("/accounts", ListAccountsHandler) http.HandleFunc("/list_accounts", ListAccountsHandler)
http.HandleFunc("/list_validators", ListValidatorsHandler)
} }

30
rpc/validators.go Normal file
View File

@ -0,0 +1,30 @@
package rpc
import (
"net/http"
state_ "github.com/tendermint/tendermint/state"
)
func ListValidatorsHandler(w http.ResponseWriter, r *http.Request) {
var blockHeight uint
var bondedValidators []*state_.Validator
var unbondingValidators []*state_.Validator
state := consensusState.GetState()
blockHeight = state.LastBlockHeight
state.BondedValidators.Iterate(func(index uint, val *state_.Validator) bool {
bondedValidators = append(bondedValidators, val)
return false
})
state.UnbondingValidators.Iterate(func(index uint, val *state_.Validator) bool {
unbondingValidators = append(unbondingValidators, val)
return false
})
WriteAPIResponse(w, API_OK, struct {
BlockHeight uint
BondedValidators []*state_.Validator
UnbondingValidators []*state_.Validator
}{blockHeight, bondedValidators, unbondingValidators})
}