Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(withdrawal): print txhash of withdrawal #2845

Merged
merged 19 commits into from
Jul 9, 2024
Merged

Conversation

golangisfun123
Copy link
Collaborator

@golangisfun123 golangisfun123 commented Jul 4, 2024

Description
A clear and concise description of the features you're adding in this pull request.

Additional context
Add any other context about the problem you're solving.

Metadata

  • Fixes #[Link to Issue]

Summary by CodeRabbit

  • New Features

    • Introduced a new method to retrieve transaction hashes by nonce.
    • Added spinner for transaction status in the RFQ relayer.
  • Bug Fixes

    • Updated dependencies and imports across multiple modules to improve stability.
  • Tests

    • Added test functions for Ethereum and ERC20 token withdrawals.
    • Updated test imports for assertion libraries.
  • Chores

    • Standardized and reorganized imports for better code maintainability.
    • Commented out the editor.formatOnSave setting in the VSCode configuration.

Copy link
Contributor

coderabbitai bot commented Jul 4, 2024

Walkthrough

The updates streamline dependencies across modules, primarily focusing on switching assertion and color libraries. There's a notable enhancement in the relapi package, introducing methods for transaction hash retrieval by nonce, involving new route definitions and handlers. Import statements in multiple files are reorganized to improve maintainability. The .vscode/settings.json adjusts formatting settings, and additional indirect dependencies are added to services/rfq to support new features.

Changes

File / Path Change Summary
agents/go.mod Removed dependencies on github.com/alecthomas/colour and github.com/alecthomas/repr.
core/go.mod Added dependencies: github.com/alecthomas/assert, github.com/alecthomas/colour, repr.
core/metrics/base.go Reorganized import statements and removed redundant net/http import.
core/metrics/metrics.go Consolidated imports: Added net/http, os, strings.
core/metrics/metrics_test.go Switched from github.com/stretchr/testify/assert to github.com/alecthomas/assert.
services/explorer/go.mod Removed dependencies on github.com/alecthomas/colour and github.com/alecthomas/repr.
services/rfq/go.mod Added new indirect dependencies to support features (e.g., charmbracelet, coninput).
.../rfq/relayer/cmd/commands.go Changed chainID handling, added spinner for transaction status, changed to big.Int.
.../rfq/relayer/relapi/client.go Introduced GetTxHashByNonce method for RelayerClient interface and its implementation.
.../rfq/relayer/relapi/handler.go Added GetTxHashByNonce function to Handler for retrieving transaction hash by nonce.
.../rfq/relayer/relapi/server.go Added route getTxHashByNonceRoute and handler registration for GetTxHashByNonce.
.../rfq/relayer/relapi/client_test.go Added test functions (TestEthWithdraw, TestERC20Withdraw, etc.) for withdrawals and getting TX hashes.
services/scribe/go.mod Removed github.com/alecthomas/assert dependency.
.vscode/settings.json Commented out editor.formatOnSave setting.
.../cctp-relayer/go.mod Removed dependencies on github.com/alecthomas/assert, colour, repr.
.../cctp-relayer/relayer/util_test.go Switched assert library import to github.com/stretchr/testify/assert.
.../rfq/relayer/relconfig/config_test.go Changed assert import to github.com/stretchr/testify/assert.

Poem

In lines of code where features bloom,
We changed dependencies for room,
Imports shuffled, colors bright,
Functions gleam in summer's light.
Spinners spin, TX hashes gleam,
Optimize for the rabbit's dream.
✨🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added go Pull requests that update Go code size/m labels Jul 4, 2024
Copy link

codecov bot commented Jul 4, 2024

Codecov Report

Attention: Patch coverage is 18.82845% with 194 lines in your changes missing coverage. Please review.

Project coverage is 25.35979%. Comparing base (e401a73) to head (4c475e9).
Report is 4 commits behind head on master.

Files Patch % Lines
ethergo/listener/otel.go 22.95082% 43 Missing and 4 partials ⚠️
services/rfq/relayer/service/otel.go 0.00000% 33 Missing ⚠️
services/rfq/relayer/service/relayer.go 0.00000% 31 Missing ⚠️
services/rfq/relayer/cmd/commands.go 0.00000% 26 Missing ⚠️
services/rfq/relayer/reldb/base/quote.go 0.00000% 22 Missing ⚠️
services/rfq/relayer/service/chainindexer.go 0.00000% 13 Missing ⚠️
services/rfq/relayer/relapi/handler.go 50.00000% 9 Missing and 3 partials ⚠️
ethergo/listener/listener.go 33.33333% 3 Missing and 1 partial ⚠️
services/cctp-relayer/relayer/relayer.go 50.00000% 2 Missing and 1 partial ⚠️
services/rfq/relayer/relapi/client.go 81.25000% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@                 Coverage Diff                 @@
##              master       #2845         +/-   ##
===================================================
- Coverage   25.65579%   25.35979%   -0.29600%     
===================================================
  Files            768         785         +17     
  Lines          55239       56491       +1252     
  Branches          80          80                 
===================================================
+ Hits           14172       14326        +154     
- Misses         39594       40687       +1093     
- Partials        1473        1478          +5     
Flag Coverage Δ
cctp-relayer 31.97848% <50.00000%> (+0.04068%) ⬆️
core 59.20382% <ø> (ø)
ethergo 48.05942% <23.88060%> (+0.05834%) ⬆️
explorer 4.97877% <ø> (ø)
git-changes-action 23.69615% <ø> (ø)
omnirpc 33.23904% <ø> (ø)
opbot 0.18564% <ø> (ø)
promexporter 8.50242% <ø> (?)
rfq 24.80315% <15.66265%> (-0.14043%) ⬇️
screener-api 29.29293% <ø> (-0.50506%) ⬇️
scribe 18.11159% <ø> (-0.06438%) ⬇️
tools 30.55118% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link

cloudflare-workers-and-pages bot commented Jul 4, 2024

Deploying sanguine-fe with  Cloudflare Pages  Cloudflare Pages

Latest commit: 4c475e9
Status: ✅  Deploy successful!
Preview URL: https://77a91e9f.sanguine-fe.pages.dev
Branch Preview URL: https://withdrawal-print.sanguine-fe.pages.dev

View logs

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

  • Added spinner and print functionality for transaction hash in services/rfq/relayer/cmd/commands.go
  • Introduced GetTxHashByNonce method in services/rfq/relayer/relapi/client.go
  • Added new endpoint GetTxHashByNonce in services/rfq/relayer/relapi/handler.go
  • Updated tests for ETH and ERC20 withdrawals in services/rfq/relayer/relapi/client_test.go
  • Removed unnecessary dependencies in multiple go.mod files

14 file(s) reviewed, 3 comment(s)
Edit PR Review Bot Settings

core/metrics/metrics_test.go Outdated Show resolved Hide resolved
services/rfq/relayer/relapi/handler.go Outdated Show resolved Hide resolved
services/rfq/relayer/relapi/handler.go Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 9916a14 and 3e7a861.

Files ignored due to path filters (6)
  • contrib/promexporter/go.sum is excluded by !**/*.sum
  • contrib/screener-api/go.sum is excluded by !**/*.sum
  • core/go.sum is excluded by !**/*.sum
  • ethergo/go.sum is excluded by !**/*.sum
  • services/omnirpc/go.sum is excluded by !**/*.sum
  • services/rfq/go.sum is excluded by !**/*.sum
Files selected for processing (14)
  • agents/go.mod (1 hunks)
  • core/go.mod (2 hunks)
  • core/metrics/base.go (2 hunks)
  • core/metrics/metrics.go (2 hunks)
  • core/metrics/metrics_test.go (1 hunks)
  • services/explorer/go.mod (1 hunks)
  • services/rfq/go.mod (7 hunks)
  • services/rfq/relayer/cmd/commands.go (3 hunks)
  • services/rfq/relayer/relapi/client.go (3 hunks)
  • services/rfq/relayer/relapi/client_test.go (2 hunks)
  • services/rfq/relayer/relapi/handler.go (1 hunks)
  • services/rfq/relayer/relapi/server.go (2 hunks)
  • services/rfq/relayer/relapi/server_test.go (3 hunks)
  • services/scribe/go.mod (1 hunks)
Files skipped from review due to trivial changes (5)
  • agents/go.mod
  • core/metrics/base.go
  • core/metrics/metrics.go
  • services/explorer/go.mod
  • services/scribe/go.mod
Additional context used
Learnings (1)
services/rfq/relayer/relapi/client_test.go (2)
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relapi/handler.go:154-156
Timestamp: 2024-06-29T05:11:50.952Z
Learning: When adding new validation logic in the `Withdraw` function, ensure to cover it with unit tests to handle various scenarios.
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relapi/handler.go:153-156
Timestamp: 2024-06-29T05:12:50.268Z
Learning: When adding new validation logic in the `Withdraw` function, ensure to cover it with unit tests to handle various scenarios.
GitHub Check: Lint (services/rfq)
services/rfq/relayer/cmd/commands.go

[failure] 124-124:
the variable name clientErr should conform to the errXxx format (errname)

services/rfq/relayer/relapi/client.go

[failure] 128-128:
exported type TxHashByNonceResponse should have comment or be unexported (golint)

services/rfq/relayer/relapi/handler.go

[failure] 215-215:
exported type GetTxByNonceRequest should have comment or be unexported (golint)


[failure] 220-220:
exported method Handler.GetTxHashByNonce should have comment or be unexported (golint)

Additional comments not posted (20)
core/metrics/metrics_test.go (1)

7-7: Verify compatibility of the new assertion library.

Ensure that github.com/alecthomas/assert provides equivalent functionality as github.com/stretchr/testify/assert.

services/rfq/relayer/cmd/commands.go (2)

146-146: Ensure correct printing of the transaction hash.

The addition of printing the transaction hash enhances the functionality. Verify that the hash is printed correctly.


92-93: Ensure correct handling of chainID as big.Int.

The conversion from uint to big.Int should handle larger chain IDs correctly. Verify that this change does not introduce any issues.

Verification successful

Ensure correct handling of chainID as big.Int.

The verification process confirms that chainID is properly initialized, compared, and converted using appropriate methods for handling large values with big.Int. The codebase shows consistent usage of big.NewInt, Cmp, and Uint64 conversions, ensuring that larger chain IDs are correctly managed.

  • Initialization: chainID is initialized using big.NewInt, which correctly handles large integer values.
  • Comparisons: chainID is compared using Cmp, ensuring accurate comparisons of big.Int values.
  • Conversions: chainID is converted to uint64 where necessary, which is appropriate for handling large chain IDs within the limits of uint64.

No issues were found with the handling of chainID as big.Int.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify correct handling of `chainID` as `big.Int`.

# Test: Run the test suite to ensure all tests pass with the new `chainID` handling.
go test ./...

Length of output: 85


Script:

#!/bin/bash
# Search for the usage of `chainID` in the codebase to verify correct handling.

# Find all instances where `chainID` is used.
ast-grep --lang go --pattern 'chainID' 

Length of output: 294490


Script:

#!/bin/bash
# Verify correct initialization, comparisons, and conversions of `chainID`.

# Search for initialization of `chainID` using `big.NewInt`
ast-grep --lang go --pattern 'big.NewInt($_)'

# Search for comparisons involving `chainID`
ast-grep --lang go --pattern '$_.Cmp($_)'

# Search for conversions of `chainID` to other types
ast-grep --lang go --pattern '$_ = $_.Uint64()'

Length of output: 1176

services/rfq/relayer/relapi/server.go (1)

104-104: Ensure correct registration of the new route.

The new route getTxHashByNonceRoute should be correctly registered and handled. Verify that the route is accessible and functions as expected.

Verification successful

The new route /tx_hash/by_nonce is correctly registered and handled.

  • The route is registered with the handler GetTxHashByNonce in services/rfq/relayer/relapi/server.go.
  • The handler function GetTxHashByNonce is implemented in services/rfq/relayer/relapi/handler.go.
  • There is test coverage for the GetTxHashByNonce functionality in services/rfq/relayer/relapi/client_test.go.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify correct registration of the new route.

# Test: Use curl to test the new route and ensure it returns the expected response.
# Note: Replace `localhost:your_port` with the actual server address and port.
curl -X GET "http://localhost:your_port/tx_hash/by_nonce"

Length of output: 111


Script:

#!/bin/bash
# Search for the registration of the route `getTxHashByNonceRoute` in the codebase.
rg "getTxHashByNonceRoute"

# Search for the handler function associated with the route `getTxHashByNonceRoute`.
rg "/tx_hash/by_nonce"

# Check the implementation of the handler function.
# Assuming we find the handler function name, we will search for its implementation.
# For now, let's assume the handler function is named `GetTxHashByNonceHandler`.
# If the actual name is different, we will adjust accordingly.
rg "func GetTxHashByNonceHandler"

# Search for any tests that cover the route `getTxHashByNonceRoute`.
rg "tx_hash/by_nonce" --glob "*test*"

Length of output: 462


Script:

#!/bin/bash
# Search for the implementation of the handler function `GetTxHashByNonce`.
rg "func GetTxHashByNonce"

# Search for any tests that might cover `GetTxHashByNonce`.
rg "GetTxHashByNonce" --glob "*test*"

Length of output: 155


Script:

#!/bin/bash
# Search for the method `GetTxHashByNonce` within struct definitions.
rg "GetTxHashByNonce" --type go

# Review the test in `services/rfq/relayer/relapi/client_test.go` to ensure it tests the `/tx_hash/by_nonce` route directly.
rg "GetTxHashByNonce" services/rfq/relayer/relapi/client_test.go -A 10 -B 10

Length of output: 1342

services/rfq/relayer/relapi/client.go (1)

132-149: Verify correctness of the new method GetTxHashByNonce.

Ensure that the new method GetTxHashByNonce is correctly implemented and returns the expected response.

services/rfq/relayer/relapi/client_test.go (3)

133-167: LGTM!

The test for retrieving the transaction hash by nonce is well-structured and ensures proper functionality.


Line range hint 16-20:
LGTM!

The health check test is straightforward and ensures the API is up and running.


Line range hint 24-37:
LGTM!

The test for retrieving quote request status by transaction hash is well-structured and ensures proper functionality.

core/go.mod (3)

13-13: LGTM!

The addition of github.com/alecthomas/assert v1.0.0 is appropriate and aligns with the changes in core/metrics/metrics_test.go.


73-73: LGTM!

The addition of github.com/alecthomas/colour v0.1.0 is appropriate and aligns with the changes in the project.


74-74: LGTM!

The addition of github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142 is appropriate and aligns with the changes in the project.

services/rfq/relayer/relapi/server_test.go (4)

Line range hint 17-26:
LGTM!

The test for initializing the Quoter API server is well-structured and ensures proper functionality.


Line range hint 28-55:
LGTM!

The test for retrieving quote request by transaction hash is well-structured and ensures proper functionality.


Line range hint 57-83:
LGTM!

The test for retrieving quote request by transaction ID is well-structured and ensures proper functionality.


Line range hint 85-114:
LGTM!

The test for retrying a transaction based on transaction hash is well-structured and ensures proper functionality.

services/rfq/relayer/relapi/handler.go (2)

Line range hint 30-44:
LGTM!

The method for retrieving quote request status by transaction hash is well-structured and ensures proper functionality.

Tools
GitHub Check: Lint (services/rfq)

[failure] 215-215:
exported type GetTxByNonceRequest should have comment or be unexported (golint)


[failure] 220-220:
exported method Handler.GetTxHashByNonce should have comment or be unexported (golint)


Line range hint 46-60:
LGTM!

The method for retrieving quote request status by transaction ID is well-structured and ensures proper functionality.

Tools
GitHub Check: Lint (services/rfq)

[failure] 215-215:
exported type GetTxByNonceRequest should have comment or be unexported (golint)


[failure] 220-220:
exported method Handler.GetTxHashByNonce should have comment or be unexported (golint)

services/rfq/go.mod (3)

11-11: Verify the necessity and suitability of the new spinner dependency.

The dependency github.com/charmbracelet/huh/spinner is added. Ensure it is necessary for the new functionality and is a suitable choice for the project.


Line range hint 83-104:
Verify the necessity and appropriateness of new indirect dependencies.

The following indirect dependencies are added:

  • github.com/charmbracelet/bubbles
  • github.com/charmbracelet/bubbletea
  • github.com/charmbracelet/lipgloss
  • github.com/charmbracelet/x/ansi
  • github.com/charmbracelet/x/input
  • github.com/charmbracelet/x/term
  • github.com/charmbracelet/x/windows

Ensure these dependencies are necessary for the new functionality and are appropriate for the project.


214-218: Verify the necessity and appropriateness of additional indirect dependencies.

The following indirect dependencies are added:

  • github.com/lucasb-eyer/go-colorful
  • github.com/mattn/go-colorable
  • github.com/mattn/go-isatty
  • github.com/mattn/go-localereader
  • github.com/muesli/ansi
  • github.com/muesli/cancelreader
  • github.com/muesli/termenv

Ensure these dependencies are necessary for the new functionality and are appropriate for the project.

Also applies to: 231-233

Comment on lines +63 to +95
func (c *RelayerClientSuite) TestEthWithdraw() {
backend := c.underlying.testBackends[uint64(c.underlying.originChainID)]

startBalance, err := backend.BalanceAt(c.GetTestContext(), testWithdrawalAddress, nil)
c.Require().NoError(err)

withdrawalAmount := big.NewInt(50)

_, err = c.Client.Withdraw(c.GetTestContext(), &relapi.WithdrawRequest{
ChainID: uint32(backend.GetChainID()),
To: testWithdrawalAddress,
Amount: withdrawalAmount.String(),
TokenAddress: chain.EthAddress,
})
c.Require().NoError(err)

// Wait for the transaction to be mined
err = retry.WithBackoff(c.GetTestContext(), func(ctx context.Context) error {
balance, err := backend.BalanceAt(ctx, testWithdrawalAddress, nil)
if err != nil {
return fmt.Errorf("could not fetch balance %w", err)
}

expectedBalance := new(big.Int).Add(startBalance, withdrawalAmount)

if balance.Cmp(expectedBalance) != 0 {
return fmt.Errorf("balance not updated")
}

return nil
})
c.Require().NoError(err)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

Ensure proper test coverage for new validation logic.

The current test suite does not seem to cover scenarios for invalid token addresses and non-whitelisted addresses. Please add test cases to cover these scenarios to ensure robust validation.

  • Add a test case for invalid token addresses.
  • Add a test case for non-whitelisted addresses.
Analysis chain

Ensure proper test coverage for new validation logic.

The withdrawal functionality has new validation logic. Ensure that the test cases cover various scenarios, including invalid token addresses and non-whitelisted addresses.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify test coverage for new validation logic in the Withdraw function.

# Test: Search for test cases covering invalid token addresses and non-whitelisted addresses.
rg --type go 'invalid token address|withdrawal address is not whitelisted'

Length of output: 254

services/rfq/relayer/cmd/commands.go Outdated Show resolved Hide resolved
Comment on lines +201 to +237
func (c *RelayerClientSuite) TestERC20WithdrawCLI() {
backend := c.underlying.testBackends[uint64(c.underlying.originChainID)]

_, erc20 := c.underlying.deployManager.GetMockERC20(c.GetTestContext(), backend)

startBalance, err := erc20.BalanceOf(&bind.CallOpts{Context: c.GetTestContext()}, testWithdrawalAddress)
c.Require().NoError(err)

withdrawalAmount := big.NewInt(1000000000000000000)

res, err := c.Client.Withdraw(c.GetTestContext(), &relapi.WithdrawRequest{
ChainID: c.underlying.originChainID,
To: common.HexToAddress(testWithdrawalAddress.String()),
Amount: withdrawalAmount.String(),
TokenAddress: erc20.Address(),
})
c.Require().NoError(err)

// Wait for the transaction to be mined
err = retry.WithBackoff(c.GetTestContext(), func(ctx context.Context) error {
balance, err := erc20.BalanceOf(&bind.CallOpts{Context: ctx}, testWithdrawalAddress)
if err != nil {
return fmt.Errorf("could not fetch balance %w", err)
}

expectedBalance := new(big.Int).Add(startBalance, withdrawalAmount)

if balance.Cmp(expectedBalance) != 0 {
return fmt.Errorf("balance not updated")
}

return nil
})

c.Require().NoError(err)
c.Require().NotNil(res)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

Ensure proper test coverage for new validation logic.

The withdrawal functionality has new validation logic. Ensure that the test cases cover various scenarios, including invalid token addresses and non-whitelisted addresses.

  • Add test cases in services/rfq/relayer/relapi/client_test.go or appropriate test files to cover invalid token addresses.
  • Add test cases to cover scenarios where the withdrawal address is not whitelisted.
Analysis chain

Ensure proper test coverage for new validation logic.

The withdrawal functionality has new validation logic. Ensure that the test cases cover various scenarios, including invalid token addresses and non-whitelisted addresses.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify test coverage for new validation logic in the Withdraw function.

# Test: Search for test cases covering invalid token addresses and non-whitelisted addresses.
rg --type go 'invalid token address|withdrawal address is not whitelisted'

Length of output: 254


Script:

#!/bin/bash
# Description: Verify comprehensive test coverage for new validation logic in the Withdraw function.

# Test: Search for all test cases related to the Withdraw function.
rg --type go 'Withdraw' | grep '_test.go'

Length of output: 5682

Comment on lines +169 to +199
func (c *RelayerClientSuite) TestEthWithdrawCLI() {
res, err := c.Client.Withdraw(c.GetTestContext(), &relapi.WithdrawRequest{
ChainID: c.underlying.originChainID,
To: common.HexToAddress(testWithdrawalAddress.String()),
Amount: "1000000000000000000",
TokenAddress: chain.EthAddress,
})
c.Require().NoError(err)

// Wait for the transaction to be mined
err = retry.WithBackoff(c.GetTestContext(), func(ctx context.Context) error {
status, err := c.underlying.database.SubmitterDB().
GetNonceStatus(
ctx,
c.underlying.wallet.Address(),
big.NewInt(int64(c.underlying.originChainID)),
res.Nonce,
)
if err != nil {
return fmt.Errorf("could not get status %w", err)
}

if status != submitterdb.Stored {
return fmt.Errorf("transaction not mined")
}

return nil
})
c.Require().NoError(err)
c.Require().NotNil(res)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

Ensure proper test coverage for new validation logic.

The withdrawal functionality has new validation logic. Ensure that the test cases cover various scenarios, including invalid token addresses and non-whitelisted addresses. Currently, there are no test cases covering these scenarios.

  • Add test cases for invalid token addresses.
  • Add test cases for non-whitelisted addresses.
Analysis chain

Ensure proper test coverage for new validation logic.

The withdrawal functionality has new validation logic. Ensure that the test cases cover various scenarios, including invalid token addresses and non-whitelisted addresses.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify test coverage for new validation logic in the Withdraw function.

# Test: Search for test cases covering invalid token addresses and non-whitelisted addresses.
rg --type go 'invalid token address|withdrawal address is not whitelisted'

Length of output: 254


Script:

#!/bin/bash
# Description: Search for test cases covering invalid token addresses and non-whitelisted addresses.

# Find all test files in the repository.
test_files=$(fd --type f --extension go --search-path services/rfq/relayer/relapi)

# Search for test cases covering invalid token addresses and non-whitelisted addresses.
for file in $test_files; do
    echo "Checking $file for invalid token address and non-whitelisted address test cases..."
    rg 'invalid token address|withdrawal address is not whitelisted' "$file"
done

Length of output: 3997

Comment on lines +97 to +131
func (c *RelayerClientSuite) TestERC20Withdraw() {
backend := c.underlying.testBackends[uint64(c.underlying.originChainID)]

_, erc20 := c.underlying.deployManager.GetMockERC20(c.GetTestContext(), backend)

startBalance, err := erc20.BalanceOf(&bind.CallOpts{Context: c.GetTestContext()}, testWithdrawalAddress)
c.Require().NoError(err)

withdrawalAmount := big.NewInt(50)

_, err = c.Client.Withdraw(c.GetTestContext(), &relapi.WithdrawRequest{
ChainID: uint32(backend.GetChainID()),
To: testWithdrawalAddress,
Amount: withdrawalAmount.String(),
TokenAddress: erc20.Address(),
})
c.Require().NoError(err)

// Wait for the transaction to be mined
err = retry.WithBackoff(c.GetTestContext(), func(ctx context.Context) error {
balance, err := erc20.BalanceOf(&bind.CallOpts{Context: ctx}, testWithdrawalAddress)
if err != nil {
return fmt.Errorf("could not get balance %w", err)
}

expectedBalance := new(big.Int).Add(startBalance, withdrawalAmount)

if balance.Cmp(expectedBalance) != 0 {
return fmt.Errorf("balance not updated")
}

return nil
})
c.Require().NoError(err)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

Ensure proper test coverage for new validation logic.

The withdrawal functionality has new validation logic. Ensure that the test cases cover various scenarios, including invalid token addresses and non-whitelisted addresses.

  • Add test cases for invalid token addresses.
  • Add test cases for non-whitelisted addresses.
Analysis chain

Ensure proper test coverage for new validation logic.

The withdrawal functionality has new validation logic. Ensure that the test cases cover various scenarios, including invalid token addresses and non-whitelisted addresses.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify test coverage for new validation logic in the Withdraw function.

# Test: Search for test cases covering invalid token addresses and non-whitelisted addresses.
rg --type go 'invalid token address|withdrawal address is not whitelisted'

Length of output: 254


Script:

#!/bin/bash
# Description: Verify test coverage for new validation logic in the Withdraw function.

# Test: Search for test cases covering invalid token addresses and non-whitelisted addresses in the test files.
rg --type go 'invalid token address|withdrawal address is not whitelisted' --tests

Length of output: 516


Script:

#!/bin/bash
# Description: Verify test coverage for new validation logic in the Withdraw function.

# Test: Search for test cases covering invalid token addresses and non-whitelisted addresses in the test files.
rg --type go 'invalid token address|withdrawal address is not whitelisted' --glob '*_test.go'

Length of output: 95

services/rfq/relayer/relapi/handler.go Show resolved Hide resolved
services/rfq/relayer/relapi/handler.go Outdated Show resolved Hide resolved
services/rfq/relayer/relapi/client.go Show resolved Hide resolved
Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Improved error handling in services/rfq/relayer/cmd/commands.go for the withdraw command, including printing the transaction hash.
  • Added GetTxHashByNonce method in services/rfq/relayer/relapi/client.go for retrieving transaction hash by nonce.
  • Introduced GetTxHashByNonce endpoint in services/rfq/relayer/relapi/handler.go with a new request struct GetTxByNonceRequest.
  • Minor cleanup in services/rfq/relayer/relapi/suite_test.go by removing redundant variable declaration.

4 file(s) reviewed, 2 comment(s)
Edit PR Review Bot Settings

services/rfq/relayer/relapi/handler.go Outdated Show resolved Hide resolved
services/rfq/relayer/relapi/handler.go Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 3e7a861 and fbc9e7c.

Files selected for processing (4)
  • services/rfq/relayer/cmd/commands.go (3 hunks)
  • services/rfq/relayer/relapi/client.go (4 hunks)
  • services/rfq/relayer/relapi/handler.go (1 hunks)
  • services/rfq/relayer/relapi/suite_test.go (1 hunks)
Files skipped from review due to trivial changes (1)
  • services/rfq/relayer/relapi/suite_test.go
Files skipped from review as they are similar to previous changes (3)
  • services/rfq/relayer/cmd/commands.go
  • services/rfq/relayer/relapi/client.go
  • services/rfq/relayer/relapi/handler.go

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Modified error message for invalid chainID in services/rfq/relayer/relapi/handler.go to exclude string representation of the invalid chainID.

1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Added new API endpoint to retrieve transaction hash by nonce in /services/rfq/relayer/relapi/suite_test.go
  • Configured dependencies for the new endpoint in /services/rfq/relayer/relapi/suite_test.go
  • Ensured test suite coverage for the new functionality in /services/rfq/relayer/relapi/suite_test.go
  • Reorganized import statements for better readability in /services/rfq/relayer/relapi/suite_test.go

1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings

"github.com/stretchr/testify/assert"
"testing"

"github.com/alecthomas/assert"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's the point of this?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if i edit the file, undo the changes, then save, gopls still reorders the imports

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

btw I meant using "github.com/alecthomas/assert" instead of "github.com/stretchr/testify/assert"

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong import inference I think, wasn't intentional. Removed now

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Reorganized import statements for better readability in /core/metrics/metrics_test.go

No major changes found since last review.

1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between fbc9e7c and 3aae007.

Files selected for processing (3)
  • .vscode/settings.json (1 hunks)
  • services/rfq/relayer/relapi/handler.go (1 hunks)
  • services/rfq/relayer/relapi/suite_test.go (1 hunks)
Files skipped from review due to trivial changes (1)
  • .vscode/settings.json
Files skipped from review as they are similar to previous changes (1)
  • services/rfq/relayer/relapi/suite_test.go
Additional context used
GitHub Check: codecov/patch
services/rfq/relayer/relapi/handler.go

[warning] 228-230: services/rfq/relayer/relapi/handler.go#L228-L230
Added lines #L228 - L230 were not covered by tests


[warning] 234-236: services/rfq/relayer/relapi/handler.go#L234-L236
Added lines #L234 - L236 were not covered by tests


[warning] 240-242: services/rfq/relayer/relapi/handler.go#L240-L242
Added lines #L240 - L242 were not covered by tests

Additional comments not posted (2)
services/rfq/relayer/relapi/handler.go (2)

215-215: Add a comment for the exported struct.

The struct GetTxByNonceRequest is exported but lacks a comment.


221-221: Add a comment for the exported method.

The method GetTxHashByNonce is exported but lacks a comment.

Comment on lines +228 to +230
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid chainID"})
return
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add test coverage for invalid chainID.

The error handling for invalid chainID is not covered by tests.

Do you want me to generate the unit testing code or open a GitHub issue to track this task?

Tools
GitHub Check: codecov/patch

[warning] 228-230: services/rfq/relayer/relapi/handler.go#L228-L230
Added lines #L228 - L230 were not covered by tests

Comment on lines +234 to +236
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid nonce"})
return
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add test coverage for invalid nonce.

The error handling for invalid nonce is not covered by tests.

Do you want me to generate the unit testing code or open a GitHub issue to track this task?

Tools
GitHub Check: codecov/patch

[warning] 234-236: services/rfq/relayer/relapi/handler.go#L234-L236
Added lines #L234 - L236 were not covered by tests

Comment on lines +240 to +242
c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("could not get tx hash: %s", err.Error())})
return
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add test coverage for internal server error.

The error handling for internal server errors in GetTxHashByNonce is not covered by tests.

Do you want me to generate the unit testing code or open a GitHub issue to track this task?

Tools
GitHub Check: codecov/patch

[warning] 240-242: services/rfq/relayer/relapi/handler.go#L240-L242
Added lines #L240 - L242 were not covered by tests

trajan0x added a commit that referenced this pull request Jul 5, 2024
Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Removed dependencies: github.com/alecthomas/assert, github.com/alecthomas/colour, github.com/alecthomas/repr in /core/go.mod
  • Reorganized import statements in /core/metrics/metrics_test.go

1 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 3aae007 and cba4be0.

Files ignored due to path filters (3)
  • contrib/opbot/go.sum is excluded by !**/*.sum
  • services/cctp-relayer/go.sum is excluded by !**/*.sum
  • services/rfq/go.sum is excluded by !**/*.sum
Files selected for processing (9)
  • core/metrics/base.go (2 hunks)
  • services/cctp-relayer/go.mod (2 hunks)
  • services/cctp-relayer/relayer/util_test.go (1 hunks)
  • services/rfq/go.mod (8 hunks)
  • services/rfq/relayer/relapi/client.go (4 hunks)
  • services/rfq/relayer/relapi/client_test.go (2 hunks)
  • services/rfq/relayer/relapi/handler.go (1 hunks)
  • services/rfq/relayer/relapi/server.go (2 hunks)
  • services/rfq/relayer/relconfig/config_test.go (1 hunks)
Files skipped from review due to trivial changes (1)
  • services/cctp-relayer/go.mod
Files skipped from review as they are similar to previous changes (5)
  • core/metrics/base.go
  • services/rfq/go.mod
  • services/rfq/relayer/relapi/client.go
  • services/rfq/relayer/relapi/handler.go
  • services/rfq/relayer/relapi/server.go
Additional context used
Learnings (1)
services/rfq/relayer/relapi/client_test.go (6)
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relapi/handler.go:162-165
Timestamp: 2024-07-02T14:43:19.311Z
Learning: When adding new validation logic in the `Withdraw` function, ensure to cover it with unit tests to handle various scenarios, including valid and invalid addresses.
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relapi/handler.go:154-156
Timestamp: 2024-06-29T05:11:50.952Z
Learning: When adding new validation logic in the `Withdraw` function, ensure to cover it with unit tests to handle various scenarios.
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relapi/handler.go:153-156
Timestamp: 2024-06-29T05:12:50.268Z
Learning: When adding new validation logic in the `Withdraw` function, ensure to cover it with unit tests to handle various scenarios.
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relapi/handler.go:162-165
Timestamp: 2024-07-02T14:49:46.636Z
Learning: When adding new validation logic in the `Withdraw` function, ensure to export helper functions like `toAddressIsWhitelisted` for direct unit testing.
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relapi/handler.go:280-282
Timestamp: 2024-07-02T14:43:41.835Z
Learning: When the `UnmarshalJSON` method is added or modified in the `WithdrawRequest` struct, ensure to cover it with unit tests to handle various scenarios, including valid and invalid JSON inputs.
Learnt from: trajan0x
PR: synapsecns/sanguine#2815
File: services/rfq/relayer/relconfig/config.go:163-181
Timestamp: 2024-07-02T14:44:18.051Z
Learning: When adding the `DecodeTokenID` function in `services/rfq/relayer/relconfig/config.go`, ensure to cover it with unit tests to handle various scenarios.
Additional comments not posted (7)
services/cctp-relayer/relayer/util_test.go (1)

4-4: Import Library Change: Ensure Consistency

The assertion library has been switched from github.com/alecthomas/assert to github.com/stretchr/testify/assert. Ensure this change is consistent across the codebase.

Verification successful

Import Library Change: Consistency Verified

The assertion library has been switched to github.com/stretchr/testify/assert consistently across the codebase. No instances of github.com/alecthomas/assert were found.

  • Verified consistent use of github.com/stretchr/testify/assert
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify consistent use of the assertion library across the codebase.

# Test: Search for imports of `github.com/alecthomas/assert` and `github.com/stretchr/testify/assert`.
rg 'import "github.com/alecthomas/assert"' --type go
rg 'import "github.com/stretchr/testify/assert"' --type go

Length of output: 115


Script:

#!/bin/bash
# Description: Verify consistent use of the assertion library across the codebase.

# Test: Search for imports of `github.com/alecthomas/assert` and `github.com/stretchr/testify/assert`.
rg 'github.com/alecthomas/assert' --type go
rg 'github.com/stretchr/testify/assert' --type go

Length of output: 14871

services/rfq/relayer/relapi/client_test.go (5)

64-96: Ensure Proper Test Coverage for TestEthWithdraw

The test function TestEthWithdraw is well-implemented, covering the withdrawal process and balance verification. Ensure similar coverage for other test cases.


98-132: Ensure Proper Test Coverage for TestERC20Withdraw

The test function TestERC20Withdraw is well-implemented, covering the ERC20 withdrawal process and balance verification. Ensure similar coverage for other test cases.


134-168: Ensure Proper Test Coverage for TestGetTxHash

The test function TestGetTxHash is well-implemented, covering the retrieval of transaction hashes by nonce. Ensure similar coverage for other test cases.


170-200: Ensure Proper Test Coverage for TestEthWithdrawCLI

The test function TestEthWithdrawCLI is well-implemented, covering the CLI-based Ethereum withdrawal process and transaction status verification. Ensure similar coverage for other test cases.


202-238: Ensure Proper Test Coverage for TestERC20WithdrawCLI

The test function TestERC20WithdrawCLI is well-implemented, covering the CLI-based ERC20 withdrawal process and balance verification. Ensure similar coverage for other test cases.

services/rfq/relayer/relconfig/config_test.go (1)

4-4: Import Library Change: Ensure Consistency

The assertion library has been switched from github.com/alecthomas/assert to github.com/stretchr/testify/assert. Ensure this change is consistent across the codebase.

Verification successful

Import Library Change: Verified Consistency

The assertion library github.com/stretchr/testify/assert is used consistently across the codebase, with no instances of github.com/alecthomas/assert found.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify consistent use of the assertion library across the codebase.

# Test: Search for imports of `github.com/alecthomas/assert` and `github.com/stretchr/testify/assert`.
rg 'import "github.com/alecthomas/assert"' --type go
rg 'import "github.com/stretchr/testify/assert"' --type go

Length of output: 115


Script:

#!/bin/bash
# Description: Verify consistent use of the assertion library across the codebase.

# Test: Search for any mentions of `github.com/alecthomas/assert` and `github.com/stretchr/testify/assert` in Go files.
rg 'github.com/alecthomas/assert' --type go
rg 'github.com/stretchr/testify/assert' --type go

Length of output: 14871

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Added carryforward: true to 'cctp-relayer' and 'rfq' paths in .codecov.yml
  • Introduced rfqRefund command in contrib/opbot/botmd/commands.go
  • Updated dependencies in agents/go.mod and contrib/git-changes-action/go.mod
  • Added new methods and routes for transaction handling in services/rfq/relayer/relapi/client.go and handler.go
  • Introduced new configuration fields and methods in services/rfq/guard/guardconfig/config.go and guarddb/base/store.go

119 file(s) reviewed, 2 comment(s)
Edit PR Review Bot Settings


chainID, ok := new(big.Int).SetString(chainIDStr, 10)
if !ok {
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid chainID"})
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🪶 style: Potentially misleading error message: chainID is invalid but the error message includes its string representation.

Comment on lines +264 to +266
nonce, ok := new(big.Int).SetString(nonceStr, 10)
if !ok {
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid nonce"})
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🪶 style: Consider adding more specific error handling for invalid nonce values.

@github-actions github-actions bot added the M-deps label Jul 9, 2024
@golangisfun123 golangisfun123 requested a review from trajan0x July 9, 2024 16:31
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between cba4be0 and 4c475e9.

Files ignored due to path filters (1)
  • go.work.sum is excluded by !**/*.sum
Files selected for processing (2)
  • services/rfq/go.mod (8 hunks)
  • services/rfq/relayer/relapi/client_test.go (2 hunks)
Files skipped from review as they are similar to previous changes (2)
  • services/rfq/go.mod
  • services/rfq/relayer/relapi/client_test.go

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Added status_count metric to docs/bridge/docs/rfq/Relayer/Relayer.md
  • Introduced OpenTelemetry recorder in ethergo/listener/listener.go and otel.go
  • Enhanced error handling in services/cctp-relayer/relayer/relayer.go
  • Removed github.com/cornelk/hashmap dependency in services/rfq/go.mod
  • Added GetStatusCounts method in services/rfq/relayer/reldb/db.go and quote.go

14 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Updated services/rfq/go.mod to include github.com/cornelk/hashmap dependency.
  • Enhanced services/rfq/relayer/relapi/client_test.go with new test cases for Ethereum and ERC20 token withdrawals.
  • Improved test coverage for transaction hash retrieval by nonce.
  • Added spinner for visual feedback during transaction status checks.

2 file(s) reviewed, no comment(s)
Edit PR Review Bot Settings

@trajan0x trajan0x merged commit a554e13 into master Jul 9, 2024
57 of 58 checks passed
@trajan0x trajan0x deleted the withdrawal/print branch July 9, 2024 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
go Pull requests that update Go code M-deps M-vscode-settings size/m
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants