From 6c99c924ed8263e4a8a70bf30912033317e6048a Mon Sep 17 00:00:00 2001 From: ali Date: Mon, 12 May 2025 11:50:01 +0000 Subject: [PATCH 1/2] Expose currently active rpc provider --- etherclient/client.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/etherclient/client.go b/etherclient/client.go index c4a9066..a3821df 100644 --- a/etherclient/client.go +++ b/etherclient/client.go @@ -83,6 +83,7 @@ type Extras interface { type etherClient struct { provider provider.Provider[*ethclient.Client] retryInterval time.Duration + urls []string } var _ EtherClient = ðerClient{} @@ -102,6 +103,7 @@ func DialContext(ctx context.Context, rawurls ...string) (*etherClient, error) { return ðerClient{ provider: provider.NewRingProvider(clients...), retryInterval: defaultRetryInterval, + urls: rawurls, }, nil } @@ -509,3 +511,15 @@ func (ec *etherClient) SendTransaction(ctx context.Context, tx *types.Transactio return ethClient.SendTransaction(ctx, tx) }) } + +// CurrentRPCURL returns the RPC URL of the current provider. +func (ec *etherClient) CurrentRPCURL() string { + // Get the current client's index in the ring + currentClient := ec.provider.Provide() + for i, client := range ec.provider.(*provider.RingProvider[*ethclient.Client]).Elements() { + if client == currentClient { + return ec.urls[i] + } + } + return "" +} From 0dd19fd979e1ba8618d16bd9ccd90bfaa800c68d Mon Sep 17 00:00:00 2001 From: ali Date: Mon, 12 May 2025 12:27:30 +0000 Subject: [PATCH 2/2] add err handling --- etherclient/client.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/etherclient/client.go b/etherclient/client.go index a3821df..59e68fb 100644 --- a/etherclient/client.go +++ b/etherclient/client.go @@ -3,6 +3,7 @@ package etherclient import ( "context" "errors" + "fmt" "math/big" "time" @@ -513,13 +514,18 @@ func (ec *etherClient) SendTransaction(ctx context.Context, tx *types.Transactio } // CurrentRPCURL returns the RPC URL of the current provider. -func (ec *etherClient) CurrentRPCURL() string { +func (ec *etherClient) CurrentRPCURL() (string, error) { // Get the current client's index in the ring currentClient := ec.provider.Provide() - for i, client := range ec.provider.(*provider.RingProvider[*ethclient.Client]).Elements() { + p, ok := ec.provider.(*provider.RingProvider[*ethclient.Client]) + if !ok { + return "", fmt.Errorf("bad provider type") + } + + for i, client := range p.Elements() { if client == currentClient { - return ec.urls[i] + return ec.urls[i], nil } } - return "" + return "", fmt.Errorf("no active clients") }