From 3a12c6cbef2e3a2fa963715361222d2a0bdf277c Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Fri, 19 Jul 2024 15:14:57 -0500 Subject: [PATCH 1/8] Feat: extra bridge status and proof relayer checking --- services/rfq/relayer/service/handlers.go | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/services/rfq/relayer/service/handlers.go b/services/rfq/relayer/service/handlers.go index d606bce5b9..b8aff8243c 100644 --- a/services/rfq/relayer/service/handlers.go +++ b/services/rfq/relayer/service/handlers.go @@ -391,7 +391,7 @@ func (r *Relayer) handleProofProvided(ctx context.Context, req *fastbridge.FastB // Step 8: ClaimPending // // we'll wait until optimistic period is over to check if we can claim. -func (q *QuoteRequestHandler) handleProofPosted(ctx context.Context, _ trace.Span, request reldb.QuoteRequest) (err error) { +func (q *QuoteRequestHandler) handleProofPosted(ctx context.Context, span trace.Span, request reldb.QuoteRequest) (err error) { // we shouldnt' check the claim yet if !q.shouldCheckClaim(request) { return nil @@ -411,15 +411,33 @@ func (q *QuoteRequestHandler) handleProofPosted(ctx context.Context, _ trace.Spa if err != nil { return fmt.Errorf("could not make contract call: %w", err) } - - if bs == fastbridge.RelayerClaimed.Int() { + switch bs { + case fastbridge.RelayerProved.Int(): + case fastbridge.RelayerClaimed.Int(): err = q.db.UpdateQuoteRequestStatus(ctx, request.TransactionID, reldb.ClaimCompleted, &request.Status) if err != nil { return fmt.Errorf("could not update request status: %w", err) } + default: + if span != nil { + span.SetAttributes(attribute.Int("claim_bridge_status", int(bs))) + span.AddEvent("unexpected bridge status for claim") + } return nil } + proofs, err := q.Origin.Bridge.BridgeProofs(&bind.CallOpts{Context: ctx}, request.TransactionID) + if err != nil { + return fmt.Errorf("could not get bridge proofs: %w", err) + } + if proofs.Relayer != q.RelayerAddress { + if span != nil { + span.SetAttributes(attribute.String("proof_relayer", proofs.Relayer.String())) + span.AddEvent("unexpected relayer in proof") + } + return fmt.Errorf("onchain proof does not match our relayer") + } + var canClaim bool claimCall := func(ctx context.Context) error { canClaim, err = q.Origin.Bridge.CanClaim(&bind.CallOpts{Context: ctx}, request.TransactionID, q.RelayerAddress) From ef42f9c94c6d71599f9fb23277f468e80e30a6b5 Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Fri, 19 Jul 2024 15:17:32 -0500 Subject: [PATCH 2/8] Feat: add tracing for dest tx hash setting --- services/rfq/relayer/service/handlers.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/services/rfq/relayer/service/handlers.go b/services/rfq/relayer/service/handlers.go index b8aff8243c..711e821600 100644 --- a/services/rfq/relayer/service/handlers.go +++ b/services/rfq/relayer/service/handlers.go @@ -318,7 +318,12 @@ func (q *QuoteRequestHandler) handleCommitConfirmed(ctx context.Context, span tr // // This is the fifth step in the bridge process. Here we check if the relay has been completed on the destination chain. // Notably, this is polled from the chain listener rather than the database since we wait for the log to show up. -func (r *Relayer) handleRelayLog(ctx context.Context, req *fastbridge.FastBridgeBridgeRelayed) (err error) { +func (r *Relayer) handleRelayLog(parentCtx context.Context, req *fastbridge.FastBridgeBridgeRelayed) (err error) { + ctx, span := r.metrics.Tracer().Start(parentCtx, "handleRelayLog") + defer func() { + metrics.EndSpanWithErr(span, err) + }() + reqID, err := r.db.GetQuoteRequestByID(ctx, req.TransactionId) if err != nil { return fmt.Errorf("could not get quote request: %w", err) @@ -336,6 +341,7 @@ func (r *Relayer) handleRelayLog(ctx context.Context, req *fastbridge.FastBridge if err != nil { return fmt.Errorf("could not update dest tx hash: %w", err) } + span.SetAttributes(attribute.String("dest_tx_hash", hexutil.Encode(req.Raw.TxHash[:]))) err = r.db.UpdateQuoteRequestStatus(ctx, req.TransactionId, reldb.RelayCompleted, nil) if err != nil { From 54f08b1aa9efc9428f1c385837ce2332c49b8673 Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Fri, 19 Jul 2024 15:17:33 -0500 Subject: [PATCH 3/8] [goreleaser] From 9fd26fddd9508dd527fa3f73140b596a806fe96b Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Tue, 23 Jul 2024 12:20:43 -0500 Subject: [PATCH 4/8] Feat: txid tag --- services/rfq/relayer/service/handlers.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/rfq/relayer/service/handlers.go b/services/rfq/relayer/service/handlers.go index 711e821600..c8e45aa32c 100644 --- a/services/rfq/relayer/service/handlers.go +++ b/services/rfq/relayer/service/handlers.go @@ -319,7 +319,9 @@ func (q *QuoteRequestHandler) handleCommitConfirmed(ctx context.Context, span tr // This is the fifth step in the bridge process. Here we check if the relay has been completed on the destination chain. // Notably, this is polled from the chain listener rather than the database since we wait for the log to show up. func (r *Relayer) handleRelayLog(parentCtx context.Context, req *fastbridge.FastBridgeBridgeRelayed) (err error) { - ctx, span := r.metrics.Tracer().Start(parentCtx, "handleRelayLog") + ctx, span := r.metrics.Tracer().Start(parentCtx, "handleRelayLog", + trace.WithAttributes(attribute.String("transaction_id", hexutil.Encode(req.TransactionId[:]))), + ) defer func() { metrics.EndSpanWithErr(span, err) }() From a0ac3702a407365f079348b8783bc88777cea450 Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Tue, 23 Jul 2024 12:21:31 -0500 Subject: [PATCH 5/8] Cleanup: lint --- services/rfq/relayer/service/handlers.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/rfq/relayer/service/handlers.go b/services/rfq/relayer/service/handlers.go index c8e45aa32c..46b00e9ecc 100644 --- a/services/rfq/relayer/service/handlers.go +++ b/services/rfq/relayer/service/handlers.go @@ -399,6 +399,8 @@ func (r *Relayer) handleProofProvided(ctx context.Context, req *fastbridge.FastB // Step 8: ClaimPending // // we'll wait until optimistic period is over to check if we can claim. +// +//nolint:cyclop func (q *QuoteRequestHandler) handleProofPosted(ctx context.Context, span trace.Span, request reldb.QuoteRequest) (err error) { // we shouldnt' check the claim yet if !q.shouldCheckClaim(request) { @@ -421,6 +423,7 @@ func (q *QuoteRequestHandler) handleProofPosted(ctx context.Context, span trace. } switch bs { case fastbridge.RelayerProved.Int(): + // no op case fastbridge.RelayerClaimed.Int(): err = q.db.UpdateQuoteRequestStatus(ctx, request.TransactionID, reldb.ClaimCompleted, &request.Status) if err != nil { From 46e0234f8014fe90de927e7202798573eb3a5777 Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Tue, 23 Jul 2024 12:21:32 -0500 Subject: [PATCH 6/8] [goreleaser] From 76e9ae8041e5fca202b2989660d9fa1f0f518d85 Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Tue, 23 Jul 2024 15:07:52 -0500 Subject: [PATCH 7/8] [goreleaser] From 80d4c7fa9ab5ce2baeb85ade00510e32917ca2c8 Mon Sep 17 00:00:00 2001 From: Daniel Wasserman Date: Thu, 8 Aug 2024 09:47:31 -0400 Subject: [PATCH 8/8] [goreleaser]