Portal’s Flutter SDK provides EVM Account Type management through the portal.evmAccountType API. This enables checking wallet account types and upgrading EOA wallets to EIP-7702 on supported EVM chains.
Overview
The EVM Account Type functionality allows you to:
- Check wallet status to determine the current account type
- Upgrade to EIP-7702 to enable ejecting the Portal wallet’s EOA private key
Prerequisites
Before using EVM Account Type operations, ensure you have:
Checking Wallet Status
Use getStatus to check the current account type of your wallet. The response includes both the account status and metadata about the wallet addresses.
try {
final chainId = 'eip155:10143'; // Monad Testnet
final response = await portal.evmAccountType.getStatus(chainId: chainId);
print('Status: ${response.data.status}');
print('EOA Address: ${response.metadata.eoaAddress}');
if (response.metadata.smartContractAddress != null) {
print('Smart Contract Address: ${response.metadata.smartContractAddress}');
}
if (response.data.status == 'EIP_155_EOA') {
print('Can upgrade to EIP-7702');
} else if (response.data.status == 'EIP_7702_EOA') {
print('Already upgraded');
} else {
print('Cannot upgrade');
}
} catch (e) {
print('Failed to get account status: $e');
}
Response (EvmAccountTypeStatusResponse):
data.status: One of EIP_155_EOA, SMART_CONTRACT, or EIP_7702_EOA
metadata.eoaAddress: The EOA address associated with the wallet
metadata.smartContractAddress: Your smart contract wallet address (optional, may be null for EOA-only accounts)
metadata.chainId: The chain identifier
Upgrading to EIP-7702
Use upgradeTo7702 to upgrade an EOA wallet to EIP-7702. This method automatically handles the entire upgrade process, including gas subsidization, and returns the transaction hash directly.
try {
final chainId = 'eip155:10143'; // Monad Testnet
// Upgrade to EIP-7702
final txHash = await portal.evmAccountType.upgradeTo7702(chainId: chainId);
print('Upgrade done! TX: $txHash');
// Verify final status
final status = await portal.evmAccountType.getStatus(chainId: chainId);
print('Final Status: ${status.data.status}');
if (status.data.status == 'EIP_7702_EOA') {
print('Successfully upgraded to EIP-7702!');
}
} on PortalException catch (e) {
print('Upgrade error: ${e.message}');
} catch (e) {
print('Upgrade failed: $e');
}
What happens during the upgrade:
- Chain validation: Verifies the chain uses the
eip155 namespace
- Status check: Confirms the wallet is currently an
EIP_155_EOA
- Authorization building: Creates the EIP-7702 authorization list
- Signature: Signs the authorization hash with your wallet
- Transaction submission: Submits the subsidized upgrade transaction (gas is paid by Portal)
- Transaction hash: Returns the on-chain transaction hash
Response:
The method returns a String containing the transaction hash of the submitted upgrade transaction.
Error handling:
The method throws a PortalException with the following error codes:
NOT_INITIALIZED: Portal was not initialized before calling the method
EVM_ACCOUNT_TYPE_UPGRADE_ERROR: The upgrade failed (e.g., wallet is not an EIP_155_EOA, unsupported chain, or transaction submission failed)
The upgrade process is irreversible per wallet. Once upgraded to EIP-7702, the wallet cannot be reverted to a standard EOA on that chain.
Supported Networks
EVM Account Type upgrades are currently available on:
- Monad Testnet (
eip155:10143)
For a complete list of supported chains, reach out to the Portal team.
Next Steps