Skip to main content

Dynamic Account Factory

import "@thirdweb-dev/contracts/smart-wallet/dynamic/DynamicAccountFactory.sol";

This contract inherits from the BaseAccountFactory contract.

This factory smart contract is intended to be used to distribute 'DynamicAccounts` programmatically.


info

If you modify the DynamicAccount contract, it is recommended that you write your own factory contract by inheriting from the BaseAccountFactory extension.

Detected Extensions​

Once deployed, you can use the features made available by these extensions on the SDK and dashboard:

Click on each feature to learn more about what functions are available.

Usage​

Use the CLI create command to create a DynamicAccountFactory 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/prebuilts/account/dynamic/DynamicAccountFactory.sol";

contract MyDynamicAccountFactory is DynamicAccountFactory {
constructor(
IEntryPoint _entrypoint
)
DynamicAccountFactory(
_entrypoint
)
{}
}

Full Reference​

_initializeAccount

Called in createAccount. Initializes the account contract created in createAccount.

    function _initializeAccount(
address _account,
address _admin,
bytes calldata _data
) internal override {
DynamicAccount(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, override this function, 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 {
DynamicAccount(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 {
DynamicAccount.initialize(_admin, _data);
}