A Typescript Library to easily build standard Ethereum Smart Wallets, with first class support for Safe Accounts.
AbstractionKit is agnostic of:
- Ethereum interface libraries: ethers, web3.js, viem/wagmi
- Bundlers: Plug and play a Bundler URL from any provider, or self-host your own
- Paymasters: Candide Paymaster is supported , but you can use any 3rd party paymaster to sponsor gas
- Accounts: The Safe Account is first class supported, but you can use use Bundlers and Paymasters with any account
- Built on ERC-4337 account abstraction
- Passkeys Authentication for secure, passwordless access
- Social Recovery to regain access easily
- Multisig Support
- Allowance Management for controlled spending limits
- Full Gas Sponsorship for a seamless user experience
- Support for ERC-20 Tokens as gas payment options
- Compatibility with standard ERC-4337 Bundler Methods
- A complete toolkit to construct, sign, and send UserOperations, enabling smooth integration
For full detailed documentation visit our docs page.
npm install abstractionkit
AbstractionKit features the Safe Account. It uses the original Safe Singleton and adds ERC-4337 functionality using a fallback handler module. The contracts have been developed by the Safe Team. It has been audited by Ackee Blockchain. To learn more about the contracts and audits, visit safe-global/safe-modules.
import { SafeAccountV0_3_0 as SafeAccount } from "abstractionkit";
const ownerPublicAddress = "0xBdbc5FBC9cA8C3F514D073eC3de840Ac84FC6D31";
const smartAccount = SafeAccount.initializeNewAccount([ownerPublicAddress]);
Then you can consume accout methods:
const safeAddress = smartAccount.accountAddress;
Initialize a Bundler with your desired bundler RPC url. Get a bundler endpoint from the dashboard
import { Bundler } from "abstractionkit";
const bundlerRPC = "https://api.candide.dev/bundler/version/network/YOUR_API_KEY";
const bundler: Bundler = new Bundler(bundlerRPC);
Then you can consume Bundler methods:
const entrypointAddresses = await bundler.supportedEntryPoints();
Initialize a Candide Paymaster with your RPC url. Get one from the dashboard.
import { CandidePaymaster } from "abstractionkit";
const paymasterRpc = "https://api.candide.dev/paymaster/$version/$network/$apikey";
const paymaster: CandidePaymaster = new CandidePaymaster(paymasterRPC);
Then you can consume Paymaster methods:
const supportedERC20TokensAndPaymasterMetadata = await paymaster.fetchSupportedERC20TokensAndPaymasterMetadata();
Title | Description |
---|---|
Send your first user operation | Learn how to create a smart wallet and to send your first user operation |
Send a Gasless Transaction | Learn how to send gasless transactions using a paymaster |
Pay Gas in ERC-20 | Learn how to offer the ability for users to pay gas in ERC-20s using a Paymaster |
MIT