Smart Wallets
ERC-4337 account abstraction wallets
Next-generation smart contract wallets with account abstraction. Social recovery, session keys, batch transactions, and gasless experiences out of the box.
Smart Contract Wallets
Upgradeable wallets with programmable logic and security.
Social Recovery
Recover accounts using trusted guardians, not seed phrases.
Session Keys
Temporary permissions for apps without repeated signing.
Multi-sig Support
Require multiple approvals for high-value transactions.
Get Your API Key
Start building in under 5 minutes
No credit card required. Free tier includes 300M compute units/month.
Trusted by developers building:
Key Capabilities
Everything you need, nothing you don't.
Smart Contract Wallets
Upgradeable wallets with programmable logic and security.
Social Recovery
Recover accounts using trusted guardians, not seed phrases.
Session Keys
Temporary permissions for apps without repeated signing.
Multi-sig Support
Require multiple approvals for high-value transactions.
Batch Transactions
Execute multiple operations in a single transaction.
Multi-chain
Same wallet address across all EVM chains.
Custom Modules
Extend functionality with modular security plugins.
Time-locked Actions
Schedule transactions and set spending limits.
Transaction History
Complete audit trail of all wallet activity.
Simple to Integrate
Get started with just a few lines of code. SDKs for every language.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@account-abstraction/contracts/core/BaseAccount.sol";
import "@hanzo/wallet/ISessionKeyManager.sol";
import "@hanzo/wallet/ISocialRecovery.sol";
contract HanzoSmartAccount is BaseAccount, ISocialRecovery {
address public owner;
ISessionKeyManager public sessionManager;
mapping(address => bool) public guardians;
uint256 public guardianCount;
uint256 public recoveryThreshold;
constructor(
IEntryPoint _entryPoint,
address _owner,
address[] memory _guardians,
uint256 _threshold
) BaseAccount(_entryPoint) {
owner = _owner;
recoveryThreshold = _threshold;
for (uint i = 0; i < _guardians.length; i++) {
guardians[_guardians[i]] = true;
guardianCount++;
}
}
// Validate UserOperation signature
function _validateSignature(
UserOperation calldata userOp,
bytes32 userOpHash
) internal override returns (uint256 validationData) {
// Check if signed by owner or valid session key
bytes32 hash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", userOpHash));
address signer = ECDSA.recover(hash, userOp.signature);
if (signer == owner) return 0;
if (sessionManager.isValidSession(signer, userOp.callData)) return 0;
return SIG_VALIDATION_FAILED;
}
// Execute batch of calls
function executeBatch(
address[] calldata targets,
uint256[] calldata values,
bytes[] calldata datas
) external onlyEntryPoint {
for (uint i = 0; i < targets.length; i++) {
(bool success,) = targets[i].call{value: values[i]}(datas[i]);
require(success, "Batch call failed");
}
}
// Social recovery - guardians can recover to new owner
function executeRecovery(address newOwner, bytes[] calldata signatures) external {
require(signatures.length >= recoveryThreshold, "Not enough signatures");
// Verify guardian signatures
owner = newOwner;
}
}Built For
Consumer Wallets
User-friendly wallets without seed phrase management.
Gaming
Session keys for seamless in-game transactions.
Enterprise Treasury
Multi-sig controls for corporate crypto management.
DeFi Power Users
Batch operations and automated strategies.
Supported Chains
Start Building with Smart Wallets
Get your free API key and ship your first request in under 5 minutes. No credit card required.