contrib/promexporter/exporters/submitter.go
package exporters
import (
"context"
"fmt"
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/params"
"github.com/lmittmann/w3/module/eth"
"github.com/synapsecns/sanguine/core/metrics"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
)
// note: this kind of check should be deprecated in favor of submitter metrics once everything has been moved over.
func (e *exporter) submitterStats(address common.Address, chainID int, name string) (err error) {
ctx, span := e.metrics.Tracer().Start(
context.Background(),
"submitter_stats",
trace.WithAttributes(
attribute.Int(metrics.ChainID, chainID),
attribute.String(metrics.EOAAddress, address.String()),
))
defer func() {
metrics.EndSpanWithErr(span, err)
}()
client, err := e.omnirpcClient.GetConfirmationsClient(ctx, chainID, 1)
if err != nil {
return fmt.Errorf("could not get confirmations client: %w", err)
}
var nonce uint64
var balance big.Int
if err = client.BatchWithContext(ctx,
eth.Nonce(address, nil).Returns(&nonce),
eth.Balance(address, nil).Returns(&balance),
); err != nil {
return fmt.Errorf("could not get balance: %w", err)
}
ethBalance := new(big.Float).Quo(new(big.Float).SetInt(&balance), new(big.Float).SetInt64(params.Ether))
truncEthBalance, _ := ethBalance.Float64()
submitterMetadata := submitterMetadata{
address: address,
name: name,
nonce: int64(nonce),
balance: truncEthBalance,
}
e.otelRecorder.RecordSubmitterStats(chainID, submitterMetadata)
return nil
}