tendermint/rpc/mempool.go

51 lines
1.2 KiB
Go
Raw Normal View History

2014-12-31 22:42:37 -08:00
package rpc
import (
"net/http"
"github.com/tendermint/tendermint/binary"
2014-12-31 22:42:37 -08:00
. "github.com/tendermint/tendermint/common"
"github.com/tendermint/tendermint/merkle"
"github.com/tendermint/tendermint/state"
"github.com/tendermint/tendermint/types"
2014-12-31 22:42:37 -08:00
)
2015-01-07 01:15:39 -08:00
func BroadcastTxHandler(w http.ResponseWriter, r *http.Request) {
txJSON := GetParam(r, "tx")
var err error
var tx types.Tx
binary.ReadJSON(&tx, []byte(txJSON), &err)
2014-12-31 22:42:37 -08:00
if err != nil {
2015-01-07 01:15:39 -08:00
WriteAPIResponse(w, API_INVALID_PARAM, Fmt("Invalid tx: %v", err))
2015-01-06 15:51:41 -08:00
return
2014-12-31 22:42:37 -08:00
}
err = mempoolReactor.BroadcastTx(tx)
if err != nil {
2015-01-06 15:51:41 -08:00
WriteAPIResponse(w, API_ERROR, Fmt("Error broadcasting transaction: %v", err))
return
2014-12-31 22:42:37 -08:00
}
txHash := merkle.HashFromBinary(tx)
var createsContract bool
var contractAddr []byte
if callTx, ok := tx.(*types.CallTx); ok {
if callTx.Address == nil {
createsContract = true
contractAddr = state.NewContractAddress(callTx.Input.Address, uint64(callTx.Input.Sequence))
}
}
WriteAPIResponse(w, API_OK, struct {
TxHash []byte
CreatesContract bool
ContractAddr []byte
}{txHash, createsContract, contractAddr})
2015-01-06 15:51:41 -08:00
return
2014-12-31 22:42:37 -08:00
}
/*
2015-01-07 01:15:39 -08:00
curl -H 'content-type: text/plain;' http://127.0.0.1:8888/submit_tx?tx=...
2014-12-31 22:42:37 -08:00
*/