Problem: newPendingTransactions filter don't return ethereum tx hash (#900)
This commit is contained in:
parent
cad7545f8a
commit
aeb6aeb715
@ -72,6 +72,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
* (rpc) [tharsis#865](https://github.com/tharsis/ethermint/pull/865) Fix RPC Filter parameters being ignored
|
* (rpc) [tharsis#865](https://github.com/tharsis/ethermint/pull/865) Fix RPC Filter parameters being ignored
|
||||||
* (evm) [tharsis#871](https://github.com/tharsis/ethermint/pull/871) Set correct nonce in `EthCall` and `EstimateGas` grpc query.
|
* (evm) [tharsis#871](https://github.com/tharsis/ethermint/pull/871) Set correct nonce in `EthCall` and `EstimateGas` grpc query.
|
||||||
* (rpc) [tharsis#878](https://github.com/tharsis/ethermint/pull/878) Workaround to make GetBlock RPC api report correct block gas used.
|
* (rpc) [tharsis#878](https://github.com/tharsis/ethermint/pull/878) Workaround to make GetBlock RPC api report correct block gas used.
|
||||||
|
* (rpc) [tharsis#900](https://github.com/tharsis/ethermint/pull/900) newPendingTransactions filter return ethereum tx hash.
|
||||||
|
|
||||||
## [v0.9.0] - 2021-12-01
|
## [v0.9.0] - 2021-12-01
|
||||||
|
|
||||||
|
@ -31,9 +31,13 @@ func RawTxToEthTx(clientCtx client.Context, txBz tmtypes.Tx) (*evmtypes.MsgEther
|
|||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
|
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
ethTx, ok := tx.(*evmtypes.MsgEthereumTx)
|
if len(tx.GetMsgs()) != 1 {
|
||||||
|
return nil, errors.New("not ethereum tx")
|
||||||
|
}
|
||||||
|
|
||||||
|
ethTx, ok := tx.GetMsgs()[0].(*evmtypes.MsgEthereumTx)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("invalid transaction type %T, expected %T", tx, evmtypes.MsgEthereumTx{})
|
return nil, fmt.Errorf("invalid msg type %T, expected %T", tx, evmtypes.MsgEthereumTx{})
|
||||||
}
|
}
|
||||||
return ethTx, nil
|
return ethTx, nil
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -73,7 +74,7 @@ type websocketsServer struct {
|
|||||||
logger log.Logger
|
logger log.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWebsocketsServer(logger log.Logger, tmWSClient *rpcclient.WSClient, cfg config.Config) WebsocketsServer {
|
func NewWebsocketsServer(clientCtx client.Context, logger log.Logger, tmWSClient *rpcclient.WSClient, cfg config.Config) WebsocketsServer {
|
||||||
logger = logger.With("api", "websocket-server")
|
logger = logger.With("api", "websocket-server")
|
||||||
_, port, _ := net.SplitHostPort(cfg.JSONRPC.Address)
|
_, port, _ := net.SplitHostPort(cfg.JSONRPC.Address)
|
||||||
|
|
||||||
@ -82,7 +83,7 @@ func NewWebsocketsServer(logger log.Logger, tmWSClient *rpcclient.WSClient, cfg
|
|||||||
wsAddr: cfg.JSONRPC.WsAddress,
|
wsAddr: cfg.JSONRPC.WsAddress,
|
||||||
certFile: cfg.TLS.CertificatePath,
|
certFile: cfg.TLS.CertificatePath,
|
||||||
keyFile: cfg.TLS.KeyPath,
|
keyFile: cfg.TLS.KeyPath,
|
||||||
api: newPubSubAPI(logger, tmWSClient),
|
api: newPubSubAPI(clientCtx, logger, tmWSClient),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,16 +294,18 @@ type pubSubAPI struct {
|
|||||||
filtersMu *sync.RWMutex
|
filtersMu *sync.RWMutex
|
||||||
filters map[rpc.ID]*wsSubscription
|
filters map[rpc.ID]*wsSubscription
|
||||||
logger log.Logger
|
logger log.Logger
|
||||||
|
clientCtx client.Context
|
||||||
}
|
}
|
||||||
|
|
||||||
// newPubSubAPI creates an instance of the ethereum PubSub API.
|
// newPubSubAPI creates an instance of the ethereum PubSub API.
|
||||||
func newPubSubAPI(logger log.Logger, tmWSClient *rpcclient.WSClient) *pubSubAPI {
|
func newPubSubAPI(clientCtx client.Context, logger log.Logger, tmWSClient *rpcclient.WSClient) *pubSubAPI {
|
||||||
logger = logger.With("module", "websocket-client")
|
logger = logger.With("module", "websocket-client")
|
||||||
return &pubSubAPI{
|
return &pubSubAPI{
|
||||||
events: rpcfilters.NewEventSystem(logger, tmWSClient),
|
events: rpcfilters.NewEventSystem(logger, tmWSClient),
|
||||||
filtersMu: new(sync.RWMutex),
|
filtersMu: new(sync.RWMutex),
|
||||||
filters: make(map[rpc.ID]*wsSubscription),
|
filters: make(map[rpc.ID]*wsSubscription),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
|
clientCtx: clientCtx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -680,7 +683,11 @@ func (api *pubSubAPI) subscribePendingTransactions(wsConn *wsConn) (rpc.ID, erro
|
|||||||
select {
|
select {
|
||||||
case ev := <-txsCh:
|
case ev := <-txsCh:
|
||||||
data, _ := ev.Data.(tmtypes.EventDataTx)
|
data, _ := ev.Data.(tmtypes.EventDataTx)
|
||||||
txHash := common.BytesToHash(tmtypes.Tx(data.Tx).Hash())
|
ethTx, err := types.RawTxToEthTx(api.clientCtx, data.Tx)
|
||||||
|
if err != nil {
|
||||||
|
// not ethereum tx
|
||||||
|
panic("debug")
|
||||||
|
}
|
||||||
|
|
||||||
api.filtersMu.RLock()
|
api.filtersMu.RLock()
|
||||||
for subID, wsSub := range api.filters {
|
for subID, wsSub := range api.filters {
|
||||||
@ -695,7 +702,7 @@ func (api *pubSubAPI) subscribePendingTransactions(wsConn *wsConn) (rpc.ID, erro
|
|||||||
Method: "eth_subscription",
|
Method: "eth_subscription",
|
||||||
Params: &SubscriptionResult{
|
Params: &SubscriptionResult{
|
||||||
Subscription: subID,
|
Subscription: subID,
|
||||||
Result: txHash,
|
Result: ethTx.Hash,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ func StartJSONRPC(ctx *server.Context, clientCtx client.Context, tmRPCAddr, tmEn
|
|||||||
|
|
||||||
// allocate separate WS connection to Tendermint
|
// allocate separate WS connection to Tendermint
|
||||||
tmWsClient = ConnectTmWS(tmRPCAddr, tmEndpoint, ctx.Logger)
|
tmWsClient = ConnectTmWS(tmRPCAddr, tmEndpoint, ctx.Logger)
|
||||||
wsSrv := rpc.NewWebsocketsServer(ctx.Logger, tmWsClient, config)
|
wsSrv := rpc.NewWebsocketsServer(clientCtx, ctx.Logger, tmWsClient, config)
|
||||||
wsSrv.Start()
|
wsSrv.Start()
|
||||||
return httpSrv, httpSrvDone, nil
|
return httpSrv, httpSrvDone, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user