Managed Account Factory
import "@thirdweb-dev/contracts/smart-wallet/managed/ManagedAccountFactory.sol";
This contract inherits from the BaseAccountFactory
contract.
This factory smart contract is intended to be used to distribute 'ManagedAccounts` programmatically.
If you modify the ManagedAccount
contract, it is recommended that you write your own
factory contract by inheriting from the BaseAccountFactory
extension.
Usage
Use the CLI create
command to create a ManagedAccountFactory
smart contract:
npx thirdweb create contract
Deploy your contract using the deploy cli command:
npx thirdweb create
Or import the contract into your existing project and inherit from it.
import "@thirdweb-dev/contracts/smart-wallet/managed/ManagedAccountFactory.sol";
contract MyManagedAccountFactory is ManagedAccountFactory {
constructor(
IEntryPoint _entrypoint
)
ManagedAccountFactory(
_entrypoint
)
{}
}
Functions to Override
The following functions have been implemented on this contract & are available to be overridden to add custom logic:
_initializeAccount
Called in createAccount
. Initializes the account contract created in createAccount
.
function _initializeAccount(
address _account,
address _admin,
bytes calldata _data
) internal override {
ManagedAccount(payable(_account)).initialize(_admin, _data);
}
_account
The address of the smart account smart contract to initialize.
_admin
The address to be set as default admin role for the contract. Must be of type address
.
_data
If extra storage variables are required in your account contract, abi encode the variables,
pass them to this function as the bytes
argument.
For example:
function initializeAccount(
address _admin,
bytes calldata _data
) public override initializer {
ManagedAccount.initialize(_admin, _data);
}
_canSetExtension
Returns whether an extension can be set in the given execution context.
function _canSetExtension() internal view virtual override returns (bool) {
return hasRole(DEFAULT_ADMIN_ROLE, msg.sender);
}