The Aarc SDK is a TypeScript library that makes it easy for developers to transfer assets from Externally Owned Accounts (EOA) to any destination address. It simplifies the asset transfer process by supporting various token standards, such as ERC20 and ERC721, and offering custom flows like batched transactions, gasless transactions, and paying gas fees with the same asset being moved. Additionally, it enables custom contract interaction within the same transaction using permit2(), allowing for direct swaps and bridge functionality.
- Batch transactions on EoA with Uniswap’s Permit2 contract.
- ERC20Permit support for streamlined token approvals.
- Gasless transactions using Relayers (EIP2771).
- Node.js (v12.x or later)
- Basic understanding of Ethereum and smart contracts.
Install ethers.js and Aarc SDK using npm:
npm install ethers@5.7.2 aarc-sdk
To use Aarc SDK, an API key is required. Fill out this form to get the API Key on your email instantly!
Import and initialise the Aarc SDK in your project.
import { ethers } from "ethers";
import { AarcSDK } from "aarc-sdk";
let aarcSDK = new AarcSDK.default({
rpcUrl: rpcUrl,
signer: signer, // the user's ethers.signer object
apiKey: "YOUR_API_KEY",
});
await aarcSDK.init();
Retrieve balances of all tokens in an EOA wallet:
let balances = await aarcSDK.fetchBalances(
tokenAddress: string[] // Optional: Array of specific token addresses
);
Transfer tokens from EOA to any receiver wallet address:
await aarcSDK.executeMigration({
receiverAddress:'RECEIVER_WALLET_ADDRESS',
tokenAndAmount: // Optional. If not passed, the SDK will migrate all the tokens of the wallet
[
{
tokenAddress:TOKEN1_ADDRESS,
amount:TOKEN1_AMOUNT // ethers.BigNumber
},
...
]
})
// Returns the response given below
Output:
[
{
tokenAddress,
amount,
message,
txHash,
tokenId
},
...
]
Transfer tokens from EOA to any receiver wallet address without gas fees. Please note that we use Gelato Relayer to provide the gasless functionality. Please get the Gelato API Key to use the gasless functionality.
await aarcSDK.executeMigration({
receiverAddress:RECEIVER_WALLET_ADDRESS,
tokenAndAmount: // Optional. If not passed, the SDK will migrate all the tokens of the wallet
[
{
tokenAddress:TOKEN1_ADDRESS,
amount:TOKEN1_AMOUNT // ethers.BigNumber
},
...
],
GELATO_RELAYER_API_KEY // Use the link above to get the gelato relayer key
})
// Returns the response given below
Output:
[
{
tokenAddress,
amount,
message,
txHash,
tokenId
},
...
]
The Aarc SDK seamlessly integrates with different smart wallets. It currently supports Safe and Biconomy smart wallets and will add more options in the future.
Fetching Existing Safes:
Retrieve a list of all Safe smart wallets associated with the user's EOA:
const safes = await aarcSDK.getAllSafes();
// This returns an array of Safe wallet addresses
Creating a New Safe Wallet:
Generate a new Safe smart wallet. The address returned is a counterfactual address, and the wallet needs to be deployed later. Asset migration can be directed to this address even before deployment.
const newSafeAddress = await aarcSDK.generateSafeSCW();
// Returns a counterfactual address for the new Safe wallet
Creating a New Biconomy Wallet:
Similar to the Safe wallet, you can create a Biconomy smart wallet. The address provided is also a counterfactual address, requiring later deployment. The migration process can target this address immediately.
const newBiconomySCWAddress = await aarcSDK.generateBiconomySCW();
// Returns a counterfactual address for the new Biconomy wallet
This project is licensed under the MIT License - see the LICENSE for details.
For support or to share feedback, please schedule a 15 min catchup here. You can also share your ideas and feedback on the community forum.