Breaking Changes
SDK from Version 0.3.0 to 0.4.0
Summary of Changes:
- New Methods:
poolAssetOnDestination,poolAssetOnDestinationWithHook,transfer, andtransferWithHookreplace the oldgetSolutionandgetCallSolutionmethods.
- Simplified API: Each method now has a focused purpose, making it easier to understand and use.
- Parameter Renaming:
whitelistedSourceChainshas been renamed tosourceChainsfor clarity.
1. Method Refactoring
Old API:
Previously, there were two primary methods:
getSolution: Used for both balance aggregation and contract calls.getCallSolution: Focused on bridging with contract calls.
These methods were generalized, accepting complex and multifaceted parameters, which often led to confusion about the exact functionality.
New API:
The methods have been separated and simplified to offer more clarity and specialization. Now, there are four distinct methods:
-
poolAssetOnDestination:- Used to aggregate token balances from multiple chains without contract interaction.
-
poolAssetOnDestinationWithHook:- Used to aggregate balances and perform a contract call on the destination chain.
-
transfer:- Focuses on a single-hop token transfer from one chain to another, without any contract call.
-
transferWithHook:- Transfers tokens with an additional contract call on the destination chain.
Impact:
- Simpler API: Users no longer need to handle complex or overloaded methods like
getSolutionorgetCallSolution. Now, they can choose the right method for their needs.
Example Change:
-
Old usage (
getSolution):sprinter.getSolution({
account: "0xYourAddressHere",
destinationChain: 11155111,
token: "USDC",
amount: 1000000,
contractCall: {
callData: "0xabcdef",
contractAddress: "0xContractAddress",
gasLimit: 21000,
},
}); -
New usage (
poolAssetOnDestinationWithHook):sprinter.poolAssetOnDestinationWithHook({
account: "0xYourAddressHere",
destinationChain: 11155111,
token: "USDC",
amount: 1000000,
contractCall: {
callData: "0xabcdef",
contractAddress: "0xContractAddress",
gasLimit: 21000,
},
});
2. Parameter Name Changes
Old API:
whitelistedSourceChains: A parameter that allowed users to specify which source chains were eligible for the solution.
New API:
sourceChains: The same functionality has been retained but with a simpler, cleaner name.
Impact:
- No change in functionality: The purpose of this parameter remains the same.
- Migration Tip: Users should simply update the parameter name in their code.
Example Change:
-
Old usage (
whitelistedSourceChains):sprinter.getSolution({
account: "0xYourAddressHere",
destinationChain: 11155111,
token: "USDC",
amount: 1000000,
whitelistedSourceChains: [84532, 137],
}); -
New usage (
sourceChains):sprinter.poolAssetOnDestination({
account: "0xYourAddressHere",
destinationChain: 11155111,
token: "USDC",
amount: 1000000,
sourceChains: [84532, 137],
});
React SDK Refactor: From Version 0.2.1 to 0.3.0
Summary of Changes:
- New Methods:
getTransfer,getTransferWithHook,getPoolAssetOnDestination, andgetPoolAssetOnDestinationWithHookreplace the oldgetSolutionandgetCallSolutionmethods.
- Parameter Structure: Methods now accept a single object as a parameter, instead of individual arguments.
- Parameter Renaming:
whitelistedSourceChainshas been renamed tosourceChains. - SDK as Peer Dependency: The
@chainsafe/sprinter-sdkis now a peer dependency, simplifying updates.
1. Method Refactoring
Old API:
Previously, there were two primary methods in the React SDK:
getSolution: Used for both balance aggregation and contract calls.getCallSolution: Focused on bridging with contract calls.
These methods were generalized, requiring multiple parameters, leading to confusion about their exact purpose.
New API:
The methods have been split into specialized methods to clarify their purpose:
-
getPoolAssetOnDestination:- Handles balance aggregation from multiple chains without contract interaction.
-
getPoolAssetOnDestinationWithHook:- Handles balance aggregation from multiple chains with a contract call on the destination chain.
-
getTransfer:- Used for single-hop transfers between chains without any contract call.
-
getTransferWithHook:- Used for single-hop transfers with a contract call on the destination chain.
Impact:
- Simplified API: Users no longer need to manage overloaded methods. Instead, each method has a clear, focused purpose, reducing complexity.
Example Change:
-
Old usage (
getSolution):getSolution(account, destinationChain, token, amount, threshold, whitelistedSourceChains); -
New usage (
getTransferWithHook):getTransferWithHook({
account,
destinationChain,
token,
amount,
threshold,
sourceChains,
});
2. Parameter Structure Changes
Old API:
In previous versions, parameters were passed individually for each method:
getSolution(
account: Address,
destinationChain: ChainID,
token: TokenSymbol,
amount: number,
threshold?: number,
whitelistedSourceChains?: ChainID[]
)
New API:
Now, methods accept a single object as an argument (e.g., settings). This aligns with the SDK design, making it easier to manage and extend.
getTransfer({
account,
destinationChain,
token,
amount,
threshold,
sourceChains,
});
Impact:
- Migration Tip: Instead of passing individual parameters, pass a single object that encapsulates all the necessary values.
Example Change:
-
Old Usage:
getSolution(account, destinationChain, token, amount, threshold, whitelistedSourceChains); -
New Usage:
getTransfer({
account,
destinationChain,
token,
amount,
threshold,
sourceChains,
});
3. Parameter Renaming
Old API:
whitelistedSourceChains: This parameter allowed users to specify the source chains for bridging.
New API:
sourceChains: The functionality remains the same, but the name has been simplified for clarity.
Impact:
- No change in functionality: Users just need to update their code to use the new parameter name.
Example Change:
-
Old usage:
getSolution({
account: "0xYourAddressHere",
destinationChain: 11155111,
token: "USDC",
amount: 1000000,
whitelistedSourceChains: [84532, 137],
}); -
New usage:
getTransfer({
account: "0xYourAddressHere",
destinationChain: 11155111,
token: "USDC",
amount: 1000000,
sourceChains: [84532, 137],
});
4. SDK as Peer Dependency
Old Setup:
Previously, the React SDK bundled the @chainsafe/sprinter-sdk as a regular dependency. This meant that updating the SDK required updating the React SDK at the same time.
New Setup:
@chainsafe/sprinter-sdk is now a peer dependency, which allows independent updates to the SDK without needing to update the React SDK.
Impact:
- Migration Tip: Ensure that
@chainsafe/sprinter-sdkis installed as a dependency in your project.
Example (package.json):
{
"peerDependencies": {
"@chainsafe/sprinter-sdk": "^0.4.0"
}
}