@biconomy-devx/account-contracts-v2
v2.0.3
Published
Smart Contract Wallet (SCW) contracts for Biconomy SDK. Enables Account Abstraction, Smart Account, ERC4337, and ERC6900 functionalities.
Downloads
3,528
Readme
Biconomy Smart Account: Leading Implementation of Account Abstraction 🌐
Biconomy Smart Account is a smart contract wallet focused on implementing Account Abstraction. It builds on the core concepts of Gnosis and Argent safes and is compliant with ERC-4337 and ERC-6900.
📜 Smart Contracts
- BaseSmartAccount.sol: An abstract contract implementing the EIP4337 IWallet interface.
- Proxy.sol: A lightweight proxy upgradeable through the UUPS pattern.
- SmartAccountFactory.sol: This factory contract manages the deployment of Smart Account (Account Abstraction).
- SmartAccount.sol: The primary implementation contract for a Smart Account (Account Abstraction).
- EntryPoint.sol: Implements the EIP4337 Entry Point contract.
- StakeManager.sol: A stake manager for wallet and paymaster deposits/stakes.
- Executor.sol: A helper contract facilitating calls and delegate calls to dapp contracts.
- FallbackManager.sol: Manages a fallback handler for delegate calls.
- ModuleManager.sol: Adopts the Gnosis Safe module manager pattern.
- DefaultCallbackHandler.sol: Handles hooks to respond to token receipts.
- MultiSend.sol & MultiSendCallOnly.sol: Facilitates batching multiple transactions into one.
🛠️ Prerequisites
- Node.js
- Yarn or npm
- Hardhat
🚀 How to Run the Project
Before diving in, place a mnemonic in a .secret
file at the root.
Remember: Never commit this file or share it publicly.
Setup
Setup: Clone the repository and install dependencies.
git clone https://github.com/bcnmy/scw-contracts.git
cd scw-contracts
npm install
Configuration: Create a .secret
file at the root to store your mnemonic.
Note: Never commit this file.
shell
echo "your mnemonic here" > .secret
🛠️ Development Commands
Below are the commands you can use for various tasks:
🧪 Testing
Note if there are issues with submodules
to init or update submodules
git submodule update --remote
git submodule update --init
you can alternatively also run forge install.
Run regular tests:
npx hardhat test
For Bundler Integration Tests, first install realpath
:
brew install coreutils
Then, run the Bundler Integration Tests:
yarn bundler-test
📦 Compilation & Deployment
Compile contracts:
npx hardhat compile
Clean the environment:
npx hardhat clean
Start a local Ethereum node:
npx hardhat node
Deploy contracts:
npx hardhat run scripts/deploy.ts
TS_NODE_FILES=true npx ts-node scripts/deploy.ts
📈 Analysis & Reporting
Display available accounts:
npx hardhat accounts
Get help on Hardhat commands:
npx hardhat help
Test with gas report:
REPORT_GAS=true npx hardhat test
Generate code coverage report:
npx hardhat coverage
🧹 Code Quality & Formatting
Lint JavaScript and TypeScript files:
npx eslint '**/*.{js,ts}'
Automatically fix linting issues:
npx eslint '**/*.{js,ts}' --fix
Check formatting for JSON, Solidity, and Markdown files:
npx prettier '**/*.{json,sol,md}' --check
Automatically format files:
npx prettier '**/*.{json,sol,md}' --write
Lint Solidity contracts:
npx solhint 'contracts/**/*.sol'
Automatically fix issues in Solidity contracts:
npx solhint 'contracts/**/*.sol' --fix
This format separates the description from the command, making it clearer and more readable.
🔍 Etherscan Verification
To verify on Etherscan, deploy a contract to an Ethereum network supported by Etherscan, like Ropsten. Set up your .env
file, deploy your contract, and then verify:
hardhat run --network goerli scripts/deploy.ts
npx hardhat verify --network goerli DEPLOYED_CONTRACT_ADDRESS "Hello, Hardhat!"
⚡ Performance Optimizations
Boost your tests and scripts' speed by setting the TS_NODE_TRANSPILE_ONLY
environment variable to 1
in Hardhat's environment. More details are available in the documentation.
📋 Audit Reports
We have had our contracts audited by reputable firms to ensure their security. You can find the reports in the audits folder.
🤝 Contributing
Biconomy Smart Account is an open-source project. Contributions are welcome. If you're interested in contributing, please check our contribution guidelines and feel free to submit pull requests or raise issues.
📜 License
This project is licensed under the MIT License. See the LICENSE.md file for details.