-
Notifications
You must be signed in to change notification settings - Fork 30
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(api): bridge limits [SLT-165] #3179
Conversation
* script for fetching min values * max/min origin values queried and stored in ts file * add script * add retries for fetching bridge quotes
Warning Rate limit exceeded@bigboydiamonds has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 4 minutes and 33 seconds before requesting another review. How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. WalkthroughThis pull request introduces several enhancements to the Changes
Possibly related PRs
Suggested labels
Suggested reviewers
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? TipsChatThere are 3 ways to chat with CodeRabbit:
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 using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 20
Outside diff range and nitpick comments (8)
packages/rest-api/src/utils/tokenAddressToToken.ts (2)
13-13
: Good use of the normalized address.Using the normalized
address
to accesschainData
is consistent with the earlier normalization step. This ensures that token lookups are performed using a standardized address format, reducing the risk of missing token information due to address format inconsistencies.Consider moving the
address
normalization closer to where it's used to improve code readability:export const tokenAddressToToken = (chain: string, tokenAddress: string) => { - const address = getAddress(tokenAddress) - const chainData = BRIDGE_MAP[chain] if (!chainData) { return null } + const address = getAddress(tokenAddress) const tokenInfo = chainData[address]This change would make the flow of the function more intuitive, as the normalization happens just before it's needed.
20-23
: Consistent use of normalized address in the return statement.Returning the normalized
address
instead of the originaltokenAddress
is a good practice. It ensures consistency throughout the function and provides a standardized address format to the caller.Consider adding a type annotation for the return value to improve code clarity:
interface TokenInfo { address: string; symbol: string; decimals: number; } export const tokenAddressToToken = (chain: string, tokenAddress: string): TokenInfo | null => { // ... existing code ... return { address, symbol: tokenInfo.symbol, decimals: tokenInfo.decimals, } }This change would make the function's return type explicit, improving code readability and type safety.
packages/rest-api/src/routes/bridgeLimitsRoute.ts (1)
15-26
: Minor inconsistency in error messages for chain validations.There's a slight inconsistency in the error messages for
fromChain
andtoChain
validations:
- For
fromChain
, the "required" message is first, followed by "unsupported".- For
toChain
, the order is reversed.Consider standardizing these messages for better consistency:
check('fromChain') .exists() .withMessage('fromChain is required') .isNumeric() .custom((value) => CHAINS_ARRAY.some((c) => c.id === Number(value))) .withMessage('Unsupported fromChain'), check('toChain') .exists() .withMessage('toChain is required') .isNumeric() .custom((value) => CHAINS_ARRAY.some((c) => c.id === Number(value))) .withMessage('Unsupported toChain'),packages/rest-api/src/tests/bridgeLimitsRoute.test.ts (2)
10-35
: LGTM: Good coverage for happy path scenarios.The tests for USDC and ETH bridging cover the basic functionality well. They check for the correct status code and the presence of expected properties in the response.
Consider adding assertions to check if the returned
maxOriginAmount
andminOriginAmount
are within expected ranges or have specific relationships (e.g., max > min). This would provide more robust validation of the API's behavior.Example:
expect(Number(response.body.maxOriginAmount)).toBeGreaterThan(Number(response.body.minOriginAmount)) expect(Number(response.body.minOriginAmount)).toBeGreaterThan(0)
62-81
: LGTM: Good coverage for missing token parameters.These test cases effectively validate the API's behavior when required token parameters are missing. The specific error field assertions are good for catching regressions.
Consider enhancing these tests by also asserting the error message, not just the error field. This would provide more comprehensive validation of the API's error responses. For example:
expect(response.body.error).toHaveProperty('message', 'Missing required parameter: fromToken')This addition would ensure that both the error field and the error message are correct, providing more robust test coverage.
packages/rest-api/src/controllers/bridgeLimitsController.ts (1)
20-28
: Consider making the upper limit value configurableCurrently, the upper limit value is hard-coded as
'1000000'
. For greater flexibility and maintainability, consider making this value configurable, possibly through environment variables or a configuration file, allowing adjustments without code changes.packages/synapse-interface/scripts/generateLimits.js (2)
157-179
: Introduce delay between retries to handle transient errorsIn the
retryFetchBridgeQuote
function, retries happen immediately after a failure. Introducing a delay between retries can help avoid issues caused by transient network errors or API rate limiting.Apply this diff to add a delay of 1 second between retries:
} catch (error) { attempt++ console.error( `Attempt ${attempt} failed for ${originChainId} ${originTokenAddress} to ${destinationChainId} ${destinationTokenAddress}:`, error ) + // Introduce a 1-second delay before the next retry + await new Promise((resolve) => setTimeout(resolve, 1000)); if (attempt === maxRetries) { throw new Error( `Failed after ${maxRetries} attempts for ${originChainId} ${originTokenAddress} to ${destinationChainId} ${destinationTokenAddress}` ) } }
15-16
: Clarify the order of upper limit valuesIn
upperLimitValues
, the values are listed in descending order:['20000000', '1000000']
. If the intention is to test larger values first, this is acceptable. However, for clarity, consider sorting the values in ascending order unless there's a specific reason for the current order.Apply this diff to reorder the
upperLimitValues
array:const lowerLimitValues = ['0.01', '0.1', '1', '10'] -const upperLimitValues = ['20000000', '1000000'] +const upperLimitValues = ['1000000', '20000000']
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (10)
- packages/rest-api/package.json (1 hunks)
- packages/rest-api/src/controllers/bridgeLimitsController.ts (1 hunks)
- packages/rest-api/src/routes/bridgeLimitsRoute.ts (1 hunks)
- packages/rest-api/src/routes/index.ts (2 hunks)
- packages/rest-api/src/tests/bridgeLimitsRoute.test.ts (1 hunks)
- packages/rest-api/src/utils/bridgeLimitMapping.ts (1 hunks)
- packages/rest-api/src/utils/tokenAddressToToken.ts (1 hunks)
- packages/synapse-interface/package.json (1 hunks)
- packages/synapse-interface/scripts/generateLimits.js (1 hunks)
- packages/synapse-interface/scripts/utils/fetchBridgeQuote.js (1 hunks)
Additional context used
Gitleaks
packages/rest-api/src/tests/bridgeLimitsRoute.test.ts
41-41: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
56-56: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
Additional comments not posted (18)
packages/rest-api/src/utils/tokenAddressToToken.ts (1)
1-1
: Excellent addition of address normalization!The introduction of
getAddress
from '@ethersproject/address' and its usage to normalize the token address is a great improvement. This change enhances the robustness of the function by ensuring consistent formatting of Ethereum addresses, regardless of the input format (checksum, lowercase, etc.).Also applies to: 6-7
packages/synapse-interface/scripts/utils/fetchBridgeQuote.js (1)
35-35
: Module export looks good.The export of the
fetchBridgeQuote
function is correct and follows common JavaScript module patterns.packages/rest-api/src/routes/index.ts (2)
22-22
: LGTM! Verify the functionality of the '/bridgeLimits' endpointThe route registration for
/bridgeLimits
is correctly implemented and aligns with the PR objectives. It follows the existing code style and uses the importedbridgeLimitsRoute
.To ensure the endpoint is functioning as expected, please consider adding the following tests:
- Verify that the endpoint accepts the required parameters:
fromChain
,toChain
,fromToken
, andtoToken
.- Check if the endpoint returns the expected
minOriginValue
andmaxOriginValue
for valid input parameters.- Test the endpoint's behavior with invalid or missing parameters.
These tests should be implemented in the appropriate test file for this route.
13-13
: Summary: Changes align well with PR objectivesThe additions to this file (import statement and route registration) are correctly implemented and necessary for introducing the new
/bridgeLimits
endpoint. These changes align well with the PR objectives and follow the existing code structure and style.The new endpoint will allow users to query the minimum and maximum origin input values for specific bridge routes, enhancing the API's capabilities as intended.
Also applies to: 22-22
packages/rest-api/package.json (2)
19-19
: LGTM: New script for generating bridge limits map.The addition of the
generate:limits-map
script aligns well with the PR objectives. It will likely be used to generate the necessary data for the new/bridgeLimits
endpoint.
22-22
: LGTM: New dependency for Ethereum address handling.The addition of
@ethersproject/address
is appropriate for handling Ethereum addresses in the new bridge limits functionality. The version specification (^5.7.0) allows for compatible updates and aligns with other @ethersproject dependencies.To ensure this dependency is being used, please run the following script:
Verification successful
Verified:
@ethersproject/address
is properly utilized across the codebase.The dependency
@ethersproject/address
is appropriately used in the following files:
packages/sdk-router/src/utils/validateAndParseAddress.ts
packages/explorer-ui/utils/validateAndParseAddress.ts
packages/sdk-router/src/rfq/ticker.ts
packages/rest-api/src/utils/tokenAddressToToken.ts
This confirms that the addition of the dependency is necessary and correctly implemented.
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the usage of @ethersproject/address in the codebase # Test: Search for import statements or require calls using @ethersproject/address rg --type typescript --type javascript 'from\s+["\']@ethersproject/address["\']|require\(["\']@ethersproject/address["\']'Length of output: 93
Script:
#!/bin/bash # Description: Verify the usage of @ethersproject/address in the codebase # Test: Search for import statements or require calls using @ethersproject/address rg --type typescript --type javascript "from\s+['\"]@ethersproject/address['\"]|require\(['\"]@ethersproject/address['\"]\)"Length of output: 169
Script:
#!/bin/bash # Description: Verify the usage of @ethersproject/address in the codebase # Test: Search for import statements or require calls using @ethersproject/address rg --glob '*.ts' --glob '*.js' "from\s+['\"]@ethersproject/address['\"]|require\(['\"]@ethersproject/address['\"]\)"Length of output: 534
packages/rest-api/src/routes/bridgeLimitsRoute.ts (4)
1-8
: Imports look good and are well-organized.The necessary modules and functions are imported, following a logical order from third-party to local modules. All imports appear to be relevant to the implemented functionality.
10-11
: Router setup is correct and follows best practices.The Express router is created correctly, adhering to Express.js best practices.
12-48
: GET route implementation is robust and well-structured.The route is correctly set up with comprehensive validation checks for all query parameters. The use of custom validations and appropriate middleware ordering (validation, error handling, controller) is commendable.
50-50
: Export statement is correct.The router is properly exported as the default export, which is a common practice for Express routers.
packages/rest-api/src/tests/bridgeLimitsRoute.test.ts (4)
1-8
: LGTM: Imports and setup are well-structured.The imports and setup for the test suite are appropriate and follow good practices. Using constants for token addresses is a commendable approach.
37-49
: LGTM: Proper error handling for unsupported fromChain.This test case effectively validates the API's behavior when an unsupported
fromChain
is provided. The use of a non-existent chain ID and the specific error message assertion are good practices for ensuring robust error handling.Tools
Gitleaks
41-41: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
1-81
: Overall, excellent test coverage for the bridgeLimitsRoute.This test suite provides comprehensive coverage for the
/bridgeLimits
endpoint, including both happy path scenarios and error handling. The tests are well-structured and follow good practices.To further enhance the test suite, consider implementing the following suggestions:
- Add assertions to check if the returned
maxOriginAmount
andminOriginAmount
are within expected ranges or have specific relationships.- Enhance the error handling tests by asserting both the error field and the error message for more comprehensive validation.
These improvements will make the test suite even more robust and effective at catching potential issues.
Tools
Gitleaks
41-41: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
56-56: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
51-60
: LGTM: Proper error handling for unsupported toChain.This test case effectively validates the API's behavior when an unsupported
toChain
is provided. The use of a non-existent chain ID and the specific error message assertion are good practices for ensuring robust error handling.Regarding the static analysis hint about potential API keys in the token addresses:
This script confirms that the flagged address is a valid Ethereum address format, indicating that the static analysis hint is likely a false positive.
Verification successful
LGTM: Proper error handling for unsupported toChain and valid token addresses.
This test case effectively validates the API's behavior when an unsupported
toChain
is provided. The use of a non-existent chain ID and the specific error message assertion are good practices for ensuring robust error handling.Regarding the static analysis hint about potential API keys in the token addresses:
- The address
0x176211869cA2b568f2A7D4EE941E073a821EE1ff
is a valid Ethereum address, indicating that the static analysis hint is a false positive.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Verify if the flagged addresses are valid Ethereum addresses echo "Checking address: 0x176211869cA2b568f2A7D4EE941E073a821EE1ff" if [[ "0x176211869cA2b568f2A7D4EE941E073a821EE1ff" =~ ^0x[a-fA-F0-9]{40}$ ]]; then echo "Valid Ethereum address" else echo "Invalid Ethereum address" fiLength of output: 259
Tools
Gitleaks
56-56: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
packages/synapse-interface/package.json (2)
Line range hint
1-134
: Summary: New script added for generating bridge limits data.The changes in this file are minimal and align well with the PR objectives. A new script command "limits:generate" has been added to facilitate the generation of bridge limits data, which is crucial for the new
/bridgeLimits
API endpoint. This addition doesn't affect any existing configurations or dependencies.To ensure smooth integration, consider the following recommendations:
- Document the purpose and usage of the new script in the project's README or relevant documentation.
- If not already done, add appropriate error handling in the generateLimits.js script to manage potential issues during limit generation.
- Consider adding a test case to verify the successful execution of the new script as part of the CI/CD pipeline.
25-25
: LGTM! Verify the existence of the generateLimits.js script.The addition of the "limits:generate" script aligns with the PR objectives for implementing bridge limits functionality. This script will likely be used to generate necessary data or code for the new
/bridgeLimits
API endpoint.To ensure the script file exists, run the following command:
If the script is found, consider adding a brief comment in the package.json to describe its purpose:
"scripts": { ... - "limits:generate": "node scripts/generateLimits.js", + "limits:generate": "node scripts/generateLimits.js", // Generate bridge limits data for the API ... },Verification successful
Verified! The
limits:generate
script has been successfully added, and thegenerateLimits.js
file exists within the codebase.Consider adding a brief comment in
package.json
to describe its purpose:"scripts": { ... - "limits:generate": "node scripts/generateLimits.js", + "limits:generate": "node scripts/generateLimits.js", // Generates bridge limits data for the API ... },Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Verify the existence of the generateLimits.js script fd --type file --full-path "scripts/generateLimits.js"Length of output: 107
packages/rest-api/src/controllers/bridgeLimitsController.ts (2)
77-85
: Verify correct token information retrievalDouble-check that the correct chain IDs and token addresses are used when fetching token information for
maxAmountOriginQueryTokenOutInfo
andminAmountOriginQueryTokenOutInfo
. Any mismatch may lead to incorrect decimal values during amount formatting.
87-95
: Validate the correctness of amount formattingEnsure that
maxBridgeAmountQuote.maxAmountOut
andminBridgeAmountQuote.feeAmount
are correctly formatted using the corresponding token decimals. Incorrect decimals may result in inaccurate amounts returned to the client.
// URL for Synapse bridge quotes | ||
const BRIDGE_URL = 'https://api.synapseprotocol.com/bridge' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Consider using environment variables for the API URL.
While using a constant for the API URL is good for maintainability, consider using environment variables to allow for different URLs in various environments (development, staging, production).
You could modify the code as follows:
-const BRIDGE_URL = 'https://api.synapseprotocol.com/bridge'
+const BRIDGE_URL = process.env.SYNAPSE_API_URL || 'https://api.synapseprotocol.com/bridge'
This change allows you to override the URL using an environment variable while maintaining a default value.
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// URL for Synapse bridge quotes | |
const BRIDGE_URL = 'https://api.synapseprotocol.com/bridge' | |
// URL for Synapse bridge quotes | |
const BRIDGE_URL = process.env.SYNAPSE_API_URL || 'https://api.synapseprotocol.com/bridge' |
Deploying sanguine-fe with Cloudflare Pages
|
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #3179 +/- ##
===================================================
- Coverage 41.54443% 37.96419% -3.58024%
===================================================
Files 460 418 -42
Lines 25770 24236 -1534
Branches 357 82 -275
===================================================
- Hits 10706 9201 -1505
+ Misses 14326 14297 -29
Partials 738 738
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
* type: string | ||
*/ | ||
router.get( | ||
'/', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See other routes that have normalizeNativeTokenAddress
and checksumAddreses
middleware.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, updated to use those middleware functions in 30fd0c5
import { BRIDGE_MAP } from '../constants/bridgeMap' | ||
|
||
export const tokenAddressToToken = (chain: string, tokenAddress: string) => { | ||
const address = getAddress(tokenAddress) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Do we need to do this here? (note comment above where middleware will normalize & checksum addresses)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nope! Above middleware takes care of this, removed in 30fd0c5
* update bl * remove global solidity extension settings * use monorepo support in global workspace only * - use Solidity extension for formatting *.sol files - use `forge fmt` as formatter in Solidity extension * REST API Improvements [SLT-179] (#3133) * fix swaptxinfo function * Updates test coverage command * migrating to using token addresses instead of symbols * fix linting errors * fixing swaptxinfocontroller * new tests and new functionality --------- Co-authored-by: abtestingalpha <abtestingalpha@gmail.com> * Publish - @synapsecns/rest-api@1.0.75 - @synapsecns/synapse-interface@0.38.4 * fix harmony proxy (#3149) Co-authored-by: Trajan0x <trajan0x@users.noreply.github.com> * merging rfq indexer into monorepo [SLT-164] [SLT-176] (#3136) * merging rfq indexer into monorepo * nuke .env * fix commands * fix package name * test coverage script * rough pass at docs and some linting and fixes yarn * Upgrades wagmi & rainbowkit * indxer * Adds invisible but used packages * +recent-invalid-fills [SLT-188] * Moves wagmi to root * new endpoints and clean up linting --------- Co-authored-by: Trajan0x <trajan0x@users.noreply.github.com> Co-authored-by: abtestingalpha <abtestingalpha@gmail.com> Co-authored-by: parodime <jordan@protochainresearch.com> * Publish - @synapsecns/synapse-interface@0.38.5 - @synapsecns/rfq-indexer-api@1.0.2 - @synapsecns/rfq-indexer@0.0.2 * Adds /destinationTokens route [SLT-204] (#3151) * Adds /destinationTokens route * ZeroAddress & NativeGasAddress * Adds test for native gas tokens * Checksums incoming token address params * Publish - @synapsecns/rest-api@1.0.76 * boba pause (#3150) * boba pause * only boba to txns * Publish - @synapsecns/synapse-interface@0.38.6 * fix(synapse-interface): Reorders validation to check existence first (#3156) * Reorders validation to check existence first * Removes duplicates * Publish - @synapsecns/rest-api@1.0.77 * Fix boba pause (#3158) * Publish - @synapsecns/synapse-interface@0.38.7 * update bl * feat(rest-api): Adds Swagger for api docs [SLT-205] (#3159) * Adds Swagger for api docs * Replace prepended verb Get routes with nouns * Adds dev flag for swagger serverUrl * Publish - @synapsecns/rest-api@1.1.0 - @synapsecns/synapse-interface@0.38.8 - @synapsecns/rfq-indexer-api@1.0.3 - @synapsecns/rfq-indexer@0.0.3 * Pulls version from package json (#3160) * Publish - @synapsecns/rest-api@1.1.1 * Require vs import due to file location (#3161) * Require vs import due to file location * Publish - @synapsecns/rest-api@1.1.2 * Prevent caching of api docs (#3162) * Publish - @synapsecns/rest-api@1.1.3 * feat(contracts-rfq): relay/prove/claim with different address [SLT-130] (#3138) * init. solidity ^. FbV2 relay/prove/claim overloads * +IFastBridgeV2, explicit address0 cast, func scope & inheritdoc fixes * pragma lock, contract relabel * feat: start scoping V2 tests * test: override relayer role scenarios, no longer enforced by V2 * test: finish the parity test * test: the management methods * test: dst chain scenarios * test: bridge * test: prove * test: claim * test: dispute * test: refund * test: bridge reverts * remove redundant extend. rearrange inherit list * revert 0.8.20 in favor of user (non-ws) setting --------- Co-authored-by: ChiTimesChi <88190723+ChiTimesChi@users.noreply.github.com> * Publish - FastBridge@0.4.0 * fix(promexporter): make spans better (#3164) * move the errors * [goreleaser] * fix v to w * changing native token address standard [SLT-210] (#3157) * changing native token address standard * fixing tests * normalizeNativeTokenAddress middleware, additional tests --------- Co-authored-by: abtestingalpha <abtestingalpha@gmail.com> * Publish - @synapsecns/rest-api@1.1.4 * Refactoring rfq-indexer API and adding swagger docs [SLT-228] (#3167) * refactoring and adding swagger * remove testing scripts * fix typos and consistency with 404 errors * Publish - @synapsecns/rfq-indexer-api@1.0.4 * fix read mes (#3168) * Publish - @synapsecns/contracts-core@1.0.32 - FastBridge@0.4.1 - @synapsecns/solidity-devops@0.4.5 * fix(opbot): use submitter get tx status [SLT-158] (#3134) * use experimental logger to debug * fix lint * [goreleaser] * use submitter instead of client * [goreleaser] * [goreleaser] * fix(synapse-interface): Additional checks on screen [SLT-166] (#3152) * Additional checks on screen * Adds checks on chain/token changes * Publish - @synapsecns/synapse-interface@0.38.9 * feat(synapse-interface): confirm new price [SLT-150] (#3084) * add bridge quote history middleware * request user confirm changes when quoted price updates * add conditions for displaying confirm change state * track initial quote initializing confirm change state * specify output delta threshold * callback functions to handle initialize/accept/reset confirm changes flow * quote countdown timer animation to signal refresh * implement automatic refresh intervals * mouse move to refresh automatic intervals * add i8n translations for button text --------- Co-authored-by: abtestingalpha <abtestingalpha@gmail.com> * Publish - @synapsecns/synapse-interface@0.39.0 * fix: formatted bridge fee amount (#3165) * Publish - @synapsecns/rest-api@1.1.5 * fix(contracts-rfq): CI workflows [SLT-245] (#3178) * fix: license, files * fix: package name * build: update solhint to latest * build: remove prettier dependencies * fix: solhint workflows * build: update solhint in other packages as well * chore: solhint rules, exceptions * fix: silence linter warnings in tests * chore: forge fmt * add variable to test linter CI * Revert "add variable to test linter CI" This reverts commit 0629309. * Publish - @synapsecns/contracts-core@1.0.33 - @synapsecns/contracts-rfq@0.5.0 - @synapsecns/solidity-devops@0.4.6 * feat(api): bridge limits [SLT-165] (#3179) * adds `/bridgeLimits` route, controller * fetch best sdk quote for min/max origin amounts * add tests * implement middleware to normalize addresses * adds swagger doc * Publish - @synapsecns/rest-api@1.2.0 * fix(contracts-rfq): limit the amount of solhint warnings [SLT-245] (#3182) * ci: limit the amount of solhint warnings * refactor: move the errors into the separate interface * refactor: errors imports in tests * Publish - @synapsecns/contracts-rfq@0.5.1 * ci: Solidity gas diff [SLT-259] (#3181) * ci: run tests w/o coverage first for better visibility * test: malform the test to check the adjusted workflow * Revert "test: malform the test to check the adjusted workflow" This reverts commit e7db6e1. * ci: add gas-diff workflow * try changing the contract to trigger gas diffs * retrigger the workflow * ci: provide the correct report path * ci: run on pull requests only * ci: save gas reports in monorepo root * Revert "ci: run on pull requests only" This reverts commit 0a01d60. * Revert "try changing the contract to trigger gas diffs" This reverts commit 91bc03e. * refactor: wrap if statement * refactor: exclude `solidity-devops` package in a more generic way * ci: run tests w/o coverage for `solidity-devops`, add comments * add generic comment to trigger `solidity-devops` workflows * Revert "add generic comment to trigger `solidity-devops` workflows" This reverts commit cc35a43. * Publish - @synapsecns/contracts-rfq@0.5.2 * fix(contracts-core): set very high gas limit for intensive tests [SLT-259] (#3186) * fix: set very high gas limit for intensive tests * ci: speed up solidity coverage * Publish - @synapsecns/contracts-core@1.0.34 * feat(rest-api): Adds validateRouteExists validation [SLT-260] (#3180) * Adds validateRouteExists validation * Remove timeouts for 400s * Publish - @synapsecns/rest-api@1.3.0 * add duplicate command warning (#3174) Co-authored-by: Trajan0x <trajan0x@users.noreply.github.com> * reduce solhint warnings on FbV2 (#3189) * reduce solhint warnings on FbV2 * fix whitespace * Publish - @synapsecns/contracts-rfq@0.5.3 * ci: solidity gas diff options [SLT-267] (#3193) * ci: ignore test files in gas diff report * add some changes to the test files * ci: define some options for gas-diff * try changing the contract to trigger gas diffs * Revert "try changing the contract to trigger gas diffs" This reverts commit 4504e3c. * Revert "add some changes to the test files" This reverts commit 7e7d6cb. * prove w/ tx id [SLT-181] (#3169) * prove w/ tx id SLT-181 * +proveOther tests, forge fmt * fmt * fmt * Publish - @synapsecns/contracts-rfq@0.5.4 * fix(sdk-router): disable ARB airdrop tests (#3195) * Publish - @synapsecns/rest-api@1.3.1 - @synapsecns/sdk-router@0.11.2 - @synapsecns/synapse-interface@0.39.1 - @synapsecns/widget@0.7.2 * Fixing issue for wallet integration [SLT-270] (#3194) * slight modification to graphql call * fixing explorer frontend as well * Publish - @synapsecns/explorer-ui@0.3.3 - @synapsecns/rest-api@1.3.2 * store relayer on relay [SLT-182] (#3170) * store relayer on relay [SLT-182] * +tests, zeroAddr check, fmt * Publish - @synapsecns/contracts-rfq@0.5.5 * Adjust text to trigger build (#3199) * Publish - @synapsecns/synapse-interface@0.39.2 * feat(synapse-interface): refund RFQ transaction [SLT-272] (#3197) * Txn transaction refund tracking * Update store to support tracking * Query FastBridge contract for `bridgeStatuses` to find refund status * Track bridge transaction `bridgeQuote.routerAddress` in store * Fetch FastBridge contract address when only provided router address * add translations --------- Co-authored-by: aureliusbtc <82057759+aureliusbtc@users.noreply.github.com> Co-authored-by: ChiTimesChi <88190723+ChiTimesChi@users.noreply.github.com> Co-authored-by: abtestingalpha <abtestingalpha@gmail.com> Co-authored-by: Defi-Moses <Defi-Moses@users.noreply.github.com> Co-authored-by: trajan0x <83933037+trajan0x@users.noreply.github.com> Co-authored-by: Trajan0x <trajan0x@users.noreply.github.com> Co-authored-by: parodime <jordan@protochainresearch.com> Co-authored-by: abtestingalpha <104046418+abtestingalpha@users.noreply.github.com> Co-authored-by: abtestingalpha <abtestingalpha@users.noreply.github.com> Co-authored-by: parodime <parodime@users.noreply.github.com> Co-authored-by: vro <168573323+golangisfun123@users.noreply.github.com> Co-authored-by: ChiTimesChi <ChiTimesChi@users.noreply.github.com> Co-authored-by: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Co-authored-by: bigboydiamonds <bigboydiamonds@users.noreply.github.com>
PR introduces a new
/bridgeLimits
endpoint that provides the minimum and maximum origin input values for specific bridge routes. The endpoint allows users to query these limits by passing the following parameters:Adds new
/bridgeLimits
Endpoint:• The endpoint determines the min/max input values for a given bridge route.
• The input parameters (fromChain, toChain, fromToken, toToken) are used to match and return the appropriate route limits.
• returns { minOriginValue, maxOriginValue }
Additional context
Will be V1 initially deployed, following up with an optimization for resources.
Summary by CodeRabbit
New Features
Bug Fixes
Tests
Documentation
02d77f8: synapse-interface preview link