This commit is contained in:
Stephan D
2026-03-10 12:31:09 +01:00
parent d87e709f43
commit e77d1ab793
287 changed files with 2089 additions and 1550 deletions

View File

@@ -0,0 +1,47 @@
version: "2"
linters:
default: none
enable:
- bodyclose
- canonicalheader
- copyloopvar
- durationcheck
- errcheck
- errchkjson
- errname
- errorlint
- gosec
- govet
- ineffassign
- nilerr
- nilnesserr
- nilnil
- noctx
- rowserrcheck
- sqlclosecheck
- staticcheck
- unconvert
- wastedassign
disable:
- depguard
- exhaustruct
- gochecknoglobals
- gochecknoinits
- gomoddirectives
- wrapcheck
- cyclop
- dupl
- funlen
- gocognit
- gocyclo
- ireturn
- lll
- mnd
- nestif
- nlreturn
- noinlineerr
- paralleltest
- tagliatelle
- testpackage
- varnamelen
- wsl_v5

View File

@@ -4,6 +4,7 @@ import (
"context"
"crypto/tls"
"fmt"
"math"
"strings"
"time"
@@ -134,7 +135,11 @@ func (c *oracleClient) LatestRate(ctx context.Context, req LatestRateParams) (*R
return nil, merrors.InvalidArgument("oracle: pair is required")
}
callCtx, cancel := c.callContext(ctx)
callCtx := ctx
cancel := func() {}
if _, hasDeadline := ctx.Deadline(); !hasDeadline {
callCtx, cancel = context.WithTimeout(ctx, c.cfg.CallTimeout)
}
defer cancel()
resp, err := c.client.LatestRate(callCtx, &oraclev1.LatestRateRequest{
@@ -165,7 +170,11 @@ func (c *oracleClient) GetQuote(ctx context.Context, req GetQuoteParams) (*Quote
return nil, merrors.InvalidArgument("oracle: exactly one of base_amount or quote_amount must be set")
}
callCtx, cancel := c.callContext(ctx)
callCtx := ctx
cancel := func() {}
if _, hasDeadline := ctx.Deadline(); !hasDeadline {
callCtx, cancel = context.WithTimeout(ctx, c.cfg.CallTimeout)
}
defer cancel()
protoReq := &oraclev1.GetQuoteRequest{
@@ -179,7 +188,11 @@ func (c *oracleClient) GetQuote(ctx context.Context, req GetQuoteParams) (*Quote
protoReq.TtlMs = req.TTL.Milliseconds()
}
if req.MaxAge > 0 {
protoReq.MaxAgeMs = int32(req.MaxAge.Milliseconds())
maxAgeMs := req.MaxAge.Milliseconds()
if maxAgeMs > math.MaxInt32 {
maxAgeMs = math.MaxInt32
}
protoReq.MaxAgeMs = int32(maxAgeMs)
}
if baseSupplied {
protoReq.AmountInput = &oraclev1.GetQuoteRequest_BaseAmount{BaseAmount: req.BaseAmount}
@@ -197,13 +210,6 @@ func (c *oracleClient) GetQuote(ctx context.Context, req GetQuoteParams) (*Quote
return fromProtoQuote(resp.GetQuote()), nil
}
func (c *oracleClient) callContext(ctx context.Context) (context.Context, context.CancelFunc) {
if _, ok := ctx.Deadline(); ok {
return context.WithCancel(ctx)
}
return context.WithTimeout(ctx, c.cfg.CallTimeout)
}
func toProtoMeta(meta RequestMeta) *oraclev1.RequestMeta {
if meta.TenantRef == "" && meta.OrganizationRef == "" && meta.Trace == nil {
return nil

View File

@@ -2,6 +2,7 @@ package oracle
import (
"context"
"errors"
"fmt"
"math/big"
"strings"
@@ -99,17 +100,28 @@ func buildPriceSet(rate *model.RateSnapshot) (priceSet, error) {
return priceSet{}, merrors.InvalidArgument("oracle: cross rate requires underlying snapshot")
}
ask, err := parsePrice(rate.Ask)
if err != nil {
if err != nil && !errors.Is(err, merrors.ErrNoData) {
return priceSet{}, err
}
if errors.Is(err, merrors.ErrNoData) {
ask = nil
}
bid, err := parsePrice(rate.Bid)
if err != nil {
if err != nil && !errors.Is(err, merrors.ErrNoData) {
return priceSet{}, err
}
if errors.Is(err, merrors.ErrNoData) {
bid = nil
}
mid, err := parsePrice(rate.Mid)
if err != nil {
if err != nil && !errors.Is(err, merrors.ErrNoData) {
return priceSet{}, err
}
if errors.Is(err, merrors.ErrNoData) {
mid = nil
}
if ask == nil && bid == nil {
if mid == nil {
@@ -141,7 +153,7 @@ func buildPriceSet(rate *model.RateSnapshot) (priceSet, error) {
func parsePrice(value string) (*big.Rat, error) {
if strings.TrimSpace(value) == "" {
return nil, nil
return nil, merrors.ErrNoData
}
return ratFromString(value)
}

View File

@@ -110,7 +110,7 @@ func (s *Service) startDiscoveryAnnouncer() {
InvokeURI: s.invokeURI,
Version: appversion.Create().Short(),
}
s.announcer = discovery.NewAnnouncer(s.logger, s.producer, string(mservice.FXOracle), announce)
s.announcer = discovery.NewAnnouncer(s.logger, s.producer, mservice.FXOracle, announce)
s.announcer.Start()
}

View File

@@ -72,7 +72,7 @@ func (q *quotesStoreStub) Consume(ctx context.Context, ref, ledger string, when
if q.consumeFn != nil {
return q.consumeFn(ctx, ref, ledger, when)
}
return nil, nil
return nil, merrors.ErrNoData
}
func (q *quotesStoreStub) ExpireIssuedBefore(ctx context.Context, cutoff time.Time) (int, error) {