tendermint/rpc/accounts.go

92 lines
2.5 KiB
Go
Raw Normal View History

package rpc
import (
"net/http"
"github.com/tendermint/tendermint/account"
"github.com/tendermint/tendermint/binary"
"github.com/tendermint/tendermint/block"
. "github.com/tendermint/tendermint/common"
)
func GenPrivAccountHandler(w http.ResponseWriter, r *http.Request) {
privAccount := account.GenPrivAccount()
2015-01-11 18:21:17 -08:00
WriteAPIResponse(w, API_OK, struct {
PrivAccount *account.PrivAccount
}{privAccount})
}
//-----------------------------------------------------------------------------
2015-01-11 23:12:33 -08:00
func GetAccountHandler(w http.ResponseWriter, r *http.Request) {
addressStr := GetParam(r, "address")
2015-01-11 23:12:33 -08:00
var address []byte
var err error
2015-01-11 23:12:33 -08:00
binary.ReadJSON(&address, []byte(addressStr), &err)
if err != nil {
2015-01-11 23:12:33 -08:00
WriteAPIResponse(w, API_INVALID_PARAM, Fmt("Invalid address: %v", err))
return
}
2015-01-11 23:12:33 -08:00
state := consensusState.GetState()
account_ := state.GetAccount(address)
2015-01-11 18:21:17 -08:00
WriteAPIResponse(w, API_OK, struct {
2015-01-11 23:12:33 -08:00
Account *account.Account
}{account_})
}
2015-01-11 14:27:46 -08:00
//-----------------------------------------------------------------------------
func ListAccountsHandler(w http.ResponseWriter, r *http.Request) {
2015-01-11 18:21:17 -08:00
var blockHeight uint
var accounts []*account.Account
2015-01-11 14:27:46 -08:00
state := consensusState.GetState()
2015-01-11 18:21:17 -08:00
blockHeight = state.LastBlockHeight
2015-01-11 14:27:46 -08:00
state.GetAccounts().Iterate(func(key interface{}, value interface{}) bool {
2015-01-11 18:21:17 -08:00
accounts = append(accounts, value.(*account.Account))
2015-01-11 14:27:46 -08:00
return false
})
2015-01-11 18:21:17 -08:00
WriteAPIResponse(w, API_OK, struct {
BlockHeight uint
Accounts []*account.Account
}{blockHeight, accounts})
2015-01-11 14:27:46 -08:00
}
2015-01-11 23:12:33 -08:00
//-----------------------------------------------------------------------------
func SignSendTxHandler(w http.ResponseWriter, r *http.Request) {
sendTxStr := GetParam(r, "sendTx")
privAccountsStr := GetParam(r, "privAccounts")
var err error
sendTx := binary.ReadJSON(&block.SendTx{}, []byte(sendTxStr), &err).(*block.SendTx)
if err != nil {
WriteAPIResponse(w, API_INVALID_PARAM, Fmt("Invalid sendTx: %v", err))
return
}
privAccounts := binary.ReadJSON([]*account.PrivAccount{}, []byte(privAccountsStr), &err).([]*account.PrivAccount)
if err != nil {
WriteAPIResponse(w, API_INVALID_PARAM, Fmt("Invalid privAccounts: %v", err))
return
}
for i, privAccount := range privAccounts {
if privAccount == nil || privAccount.PrivKey == nil {
WriteAPIResponse(w, API_INVALID_PARAM, Fmt("Invalid (empty) privAccount @%v", i))
return
}
}
for i, input := range sendTx.Inputs {
input.PubKey = privAccounts[i].PubKey
input.Signature = privAccounts[i].Sign(sendTx)
}
WriteAPIResponse(w, API_OK, struct {
SendTx *block.SendTx
}{sendTx})
}