Files
explorer-monorepo/backend/libs/go-bridge-aggregator/aggregator.go
2026-03-02 12:14:13 -08:00

46 lines
988 B
Go

package bridge
import (
"context"
"fmt"
)
type Aggregator struct {
providers []Provider
}
func NewAggregator(cfg *Config) *Aggregator {
if cfg == nil {
cfg = DefaultConfig()
}
return &Aggregator{
providers: []Provider{
NewLiFiProvider(cfg), NewSocketProvider(), NewSquidProvider(cfg),
NewSymbiosisProvider(), NewRelayProvider(), NewStargateProvider(),
NewCCIPProvider(cfg), NewHopProvider(),
},
}
}
func (a *Aggregator) GetBestQuote(ctx context.Context, req *BridgeRequest) (*BridgeQuote, error) {
var bestQuote *BridgeQuote
var bestAmount string
for _, provider := range a.providers {
if !provider.SupportsRoute(req.FromChain, req.ToChain) {
continue
}
quote, err := provider.GetQuote(ctx, req)
if err != nil {
continue
}
if bestQuote == nil || quote.ToAmount > bestAmount {
bestQuote = quote
bestAmount = quote.ToAmount
}
}
if bestQuote == nil {
return nil, fmt.Errorf("no bridge quotes available")
}
return bestQuote, nil
}