2023-07-14 02:09:56 +03:00
|
|
|
package clients
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"math/big"
|
|
|
|
"time"
|
|
|
|
|
2023-07-15 01:17:02 +03:00
|
|
|
"github.com/ethereum-optimism/optimism/op-ufm/pkg/metrics"
|
2023-12-13 03:23:39 +03:00
|
|
|
"github.com/ethereum/go-ethereum/common"
|
2023-07-15 01:17:02 +03:00
|
|
|
|
2023-09-27 07:11:06 +03:00
|
|
|
signer "github.com/ethereum-optimism/optimism/op-service/signer"
|
2023-12-13 03:23:39 +03:00
|
|
|
optls "github.com/ethereum-optimism/optimism/op-service/tls"
|
2023-07-14 02:09:56 +03:00
|
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
|
|
"github.com/ethereum/go-ethereum/log"
|
|
|
|
)
|
|
|
|
|
|
|
|
type InstrumentedSignerClient struct {
|
|
|
|
c *signer.SignerClient
|
|
|
|
providerName string
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewSignerClient(providerName string, logger log.Logger, endpoint string, tlsConfig optls.CLIConfig) (*InstrumentedSignerClient, error) {
|
|
|
|
start := time.Now()
|
|
|
|
c, err := signer.NewSignerClient(logger, endpoint, tlsConfig)
|
|
|
|
if err != nil {
|
2023-09-07 01:09:03 +03:00
|
|
|
metrics.RecordErrorDetails(providerName, "signer.NewSignerClient", err)
|
2023-07-14 02:09:56 +03:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
metrics.RecordRPCLatency(providerName, "signer", "NewSignerClient", time.Since(start))
|
|
|
|
return &InstrumentedSignerClient{c: c, providerName: providerName}, nil
|
|
|
|
}
|
|
|
|
|
2023-12-13 03:23:39 +03:00
|
|
|
func (i *InstrumentedSignerClient) SignTransaction(ctx context.Context, chainId *big.Int, from *common.Address, tx *types.Transaction) (*types.Transaction, error) {
|
2023-07-14 02:09:56 +03:00
|
|
|
start := time.Now()
|
2023-12-13 03:23:39 +03:00
|
|
|
tx, err := i.c.SignTransaction(ctx, chainId, *from, tx)
|
2023-07-14 02:09:56 +03:00
|
|
|
if err != nil {
|
2023-09-07 01:09:03 +03:00
|
|
|
metrics.RecordErrorDetails(i.providerName, "signer.SignTransaction", err)
|
2023-07-14 02:09:56 +03:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
metrics.RecordRPCLatency(i.providerName, "signer", "SignTransaction", time.Since(start))
|
|
|
|
return tx, err
|
|
|
|
}
|