dial_l2_client.go 1.15 KB
Newer Older
1
package batchsubmitter
2 3 4 5 6 7 8

import (
	"context"
	"crypto/tls"
	"net/http"
	"strings"

9
	"github.com/ethereum-optimism/optimism/bss-core/dial"
10 11 12 13 14
	"github.com/ethereum-optimism/optimism/l2geth/ethclient"
	"github.com/ethereum-optimism/optimism/l2geth/log"
	"github.com/ethereum-optimism/optimism/l2geth/rpc"
)

15 16
// DialL2EthClientWithTimeout attempts to dial the L2 provider using the
// provided URL. If the dial doesn't complete within dial.DefaultTimeout seconds,
17
// this method will return an error.
18
func DialL2EthClientWithTimeout(ctx context.Context, url string, disableHTTP2 bool) (
19 20
	*ethclient.Client, error) {

21
	ctxt, cancel := context.WithTimeout(ctx, dial.DefaultTimeout)
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
	defer cancel()

	if strings.HasPrefix(url, "http") {
		httpClient := new(http.Client)
		if disableHTTP2 {
			log.Info("Disabled HTTP/2 support in L2 eth client")
			httpClient.Transport = &http.Transport{
				TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
			}
		}

		rpcClient, err := rpc.DialHTTPWithClient(url, httpClient)
		if err != nil {
			return nil, err
		}

		return ethclient.NewClient(rpcClient), nil
	}

	return ethclient.DialContext(ctxt, url)
}