2021-01-11 13:31:30 +00:00
|
|
|
package rest
|
|
|
|
|
2022-04-11 08:09:39 +00:00
|
|
|
// clientrest "github.com/cosmos/cosmos-sdk/client/rest"
|
|
|
|
// "github.com/cosmos/cosmos-sdk/types/rest"
|
|
|
|
// authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest"
|
|
|
|
|
|
|
|
// // RegisterTxRoutes - Central function to define routes that get registered by the main application
|
|
|
|
// func RegisterTxRoutes(clientCtx client.Context, rtr *mux.Router) {
|
|
|
|
// r := testutil.GetRequestWithHeaders(rtr)
|
|
|
|
// r.HandleFunc("/txs/{hash}", QueryTxRequestHandlerFn(clientCtx)).Methods("GET")
|
|
|
|
// r.HandleFunc("/txs", testutil.QueryTxsRequestHandlerFn(clientCtx)).Methods("GET")
|
|
|
|
// r.HandleFunc("/txs/decode", testutil.DecodeTxRequestHandlerFn(clientCtx)).Methods("POST")
|
|
|
|
// }
|
2021-01-11 13:31:30 +00:00
|
|
|
|
2021-04-17 10:00:07 +00:00
|
|
|
// QueryTxRequestHandlerFn implements a REST handler that queries a transaction
|
|
|
|
// by hash in a committed block.
|
2022-04-11 08:09:39 +00:00
|
|
|
// func QueryTxRequestHandlerFn(clientCtx client.Context) http.HandlerFunc {
|
|
|
|
// return func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
// vars := mux.Vars(r)
|
|
|
|
// hashHexStr := vars["hash"]
|
|
|
|
|
|
|
|
// clientCtx, ok := testutil.ParseQueryHeightOrReturnBadRequest(w, clientCtx, r)
|
|
|
|
// if !ok {
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
|
|
|
|
// ethHashPrefix := "0x"
|
|
|
|
// // if !strings.HasPrefix(hashHexStr, ethHashPrefix) {
|
|
|
|
// // authrest.QueryTxRequestHandlerFn(clientCtx)
|
|
|
|
// // return
|
|
|
|
// // }
|
|
|
|
|
|
|
|
// // eth Tx
|
|
|
|
// ethHashPrefixLength := len(ethHashPrefix)
|
|
|
|
// output, err := getEthTransactionByHash(clientCtx, hashHexStr[ethHashPrefixLength:])
|
|
|
|
// if err != nil {
|
|
|
|
// rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
|
|
|
|
// rest.PostProcessResponseBare(w, clientCtx, output)
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// // GetTransactionByHash returns the transaction identified by hash.
|
|
|
|
// func getEthTransactionByHash(clientCtx client.Context, hashHex string) ([]byte, error) {
|
|
|
|
// hash, err := hex.DecodeString(hashHex)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
// node, err := clientCtx.GetNode()
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
|
|
|
|
// tx, err := node.Tx(context.Background(), hash, false)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
|
|
|
|
// // Can either cache or just leave this out if not necessary
|
|
|
|
// block, err := node.Block(context.Background(), &tx.Height)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
|
|
|
|
// client := feemarkettypes.NewQueryClient(clientCtx)
|
|
|
|
// res, err := client.BaseFee(context.Background(), &feemarkettypes.QueryBaseFeeRequest{})
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
|
|
|
|
// var baseFee *big.Int
|
|
|
|
// if res.BaseFee != nil {
|
|
|
|
// baseFee = res.BaseFee.BigInt()
|
|
|
|
// }
|
|
|
|
|
|
|
|
// blockHash := common.BytesToHash(block.Block.Header.Hash())
|
|
|
|
|
|
|
|
// ethTxs, err := rpctypes.RawTxToEthTx(clientCtx, tx.Tx)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
|
|
|
|
// height := uint64(tx.Height)
|
|
|
|
|
|
|
|
// for _, ethTx := range ethTxs {
|
|
|
|
// if common.HexToHash(ethTx.Hash) == common.BytesToHash(hash) {
|
|
|
|
// rpcTx, err := rpctypes.NewRPCTransaction(ethTx.AsTransaction(), blockHash, height, uint64(tx.Index), baseFee)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, err
|
|
|
|
// }
|
|
|
|
// return json.Marshal(rpcTx)
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return nil, errors.New("eth tx not found")
|
|
|
|
// }
|