# IExtensionManager

> Register and configure Flare Compute Extensions.

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

Source: https://dev.flare.network/fcc/reference/IExtensionManager

Public interface for `ExtensionManagerFacet` on the [`FlareTeeManager`](/fcc/reference/IFlareTeeManager) diamond.

A Flare Compute Extension is an isolated set of TEE functionality: supported code hashes (Docker image hashes) and platforms, plus the contracts that send instructions and verify machine state.

The caller of public `register` must be on the global extension-owner allowlist ([`IOwnerAllowlist`](/fcc/reference/IOwnerAllowlist)). The owner then sets the instructions sender and an optional `ITeeExtensionStateVerifier`.

Inherits shared [`ITeeCommonErrors`](/fcc/reference/ITeeCommonErrors).

## Functions[​](#functions "Direct link to Functions")

### `register`[​](#register "Direct link to register")

Register a new public TEE extension. The caller must be on the global extension-owner allowlist (governed via IOwnerAllowlist.addAllowedExtensionOwners / allowAllExtensionOwners). The assigned id starts from `type(uint16).max + 1` (= 65536); lower ids are reserved for governance-minted extensions (see registerReserved). Emits TeeExtensionRegistered and TeeExtensionContractsSet events.

```
function register(        ITeeExtensionStateVerifier _teeExtensionStateVerifier,        address _teeExtensionInstructionsSender    )        external        returns (uint256 _extensionId)
```

**Parameters**

-   `_teeExtensionStateVerifier`: The TEE extension state verifier contract.
-   `_teeExtensionInstructionsSender`: The address that can send instructions to the TEE machines.

**Returns**

-   `_extensionId`: The id of the registered extension.

### `registerReserved`[​](#registerreserved "Direct link to registerreserved")

Mint a reserved TEE extension with id in `[1, type(uint16).max]`. Governance picks both the id and the initial owner. The extension's verifier and instructions-sender are NOT set here — the owner must call setExtensionContracts before the extension is operational. Subsequent ownership transfer follows the same allowlist gating as public extensions (proposeNewOwner / confirmOwnership require the target to be on the global extension-owner allowlist). Emits TeeExtensionRegistered event.

```
function registerReserved(        uint256 _extensionId,        address _owner    )        external
```

**Parameters**

-   `_extensionId`: The reserved id to mint (must satisfy 0 < id < 65536).
-   `_owner`: The initial owner address (must be non-zero). Can only be called by the governance.

### `setExtensionContracts`[​](#setextensioncontracts "Direct link to setextensioncontracts")

Set the extension contracts for a given extension id. Emits TeeExtensionContractsSet event.

```
function setExtensionContracts(        uint256 _extensionId,        ITeeExtensionStateVerifier _teeExtensionStateVerifier,        address _teeExtensionInstructionsSender    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_teeExtensionStateVerifier`: The TEE extension state verifier contract.
-   `_teeExtensionInstructionsSender`: The address that can send instructions to the TEE machines. Can only be called by the extension owner.

### `addTeeVersion`[​](#addteeversion "Direct link to addteeversion")

Add a new TEE version. Emits TeeVersionAdded event.

```
function addTeeVersion(        uint256 _extensionId,        bytes32 _version,        bytes32 _codeHash,        bytes32[] calldata _platforms    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_version`: The version (UTF-8 encoded name, for off-chain use only).
-   `_codeHash`: The code hash.
-   `_platforms`: The supported platforms. Can only be called by the extension owner.

### `disableCodeHashPlatforms`[​](#disablecodehashplatforms "Direct link to disablecodehashplatforms")

Disable one or more platforms of a TEE code hash. Every active (PRODUCTION) machine of the extension running one of the disabled (codeHash, platform) pairs is paused in the same transaction (moved to PAUSED and removed from the active sets). Emits CodeHashPlatformsDisabled and a TeeMachineStatusChanged event per paused machine.

```
function disableCodeHashPlatforms(        uint256 _extensionId,        bytes32 _codeHash,        bytes32[] calldata _platforms    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_codeHash`: The code hash.
-   `_platforms`: The non-empty list of platforms to disable. Each platform must belong to the code hash version and must not already be disabled. To disable every platform of a code hash, pass them all explicitly. Can only be called by the extension owner.

### `addSupportedKeyTypes`[​](#addsupportedkeytypes "Direct link to addsupportedkeytypes")

Add supported key types. Emits SupportedKeyTypesAdded event.

```
function addSupportedKeyTypes(        uint256 _extensionId,        bytes32[] calldata _keyTypes    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_keyTypes`: The key types to add. Can only be called by the extension owner.

### `removeSupportedKeyTypes`[​](#removesupportedkeytypes "Direct link to removesupportedkeytypes")

Remove supported key types. Emits SupportedKeyTypesRemoved event.

```
function removeSupportedKeyTypes(        uint256 _extensionId,        bytes32[] calldata _keyTypes    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_keyTypes`: The key types to remove. Can only be called by the extension owner.

### `proposeNewOwner`[​](#proposenewowner "Direct link to proposenewowner")

It is a two-step process, the new owner has to confirm the ownership. Emits NewOwnerProposed event.

```
function proposeNewOwner(        uint256 _extensionId,        address _newOwner    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_newOwner`: The new owner address. Can only be called by the current TEE extension owner.

### `confirmOwnership`[​](#confirmownership "Direct link to confirmownership")

Confirm the ownership of a TEE extension. Operator remains unchanged. Emits NewOwnerConfirmed event.

```
function confirmOwnership(        uint256 _extensionId    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension. Can only be called by the proposed new owner.

### `setExtensionOperator`[​](#setextensionoperator "Direct link to setextensionoperator")

Set (or clear, by passing `address(0)`) the optional extension operator. The operator may call the *prep* steps for flows whose real security gate is a downstream governance threshold signature: machine-path-list lifecycle (createNewMachinePathList / addMachinePaths / finalizeMachinePathList) and pausing-addresses record creation (setTeePausingAddresses). Emits ExtensionOperatorSet event.

```
function setExtensionOperator(        uint256 _extensionId,        address _operator    )        external
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_operator`: The new operator address, or `address(0)` to clear. Can only be called by the extension owner.

### `nextPublicExtensionId`[​](#nextpublicextensionid "Direct link to nextpublicextensionid")

Get the id that the next public `register()` call will assign. Initialised to `type(uint16).max + 1` (= 65536) and incremented on each successful public registration. Reserved ids (1..65535) do not flow through this counter — they are picked explicitly by governance via registerReserved.

```
function nextPublicExtensionId()        external view        returns (uint256)
```

**Returns**

-   `uint256`: The next public extension id.

### `getSystemSupportedPlatforms`[​](#getsystemsupportedplatforms "Direct link to getsystemsupportedplatforms")

Get system supported platforms.

```
function getSystemSupportedPlatforms()        external view        returns (bytes32[] memory)
```

**Returns**

-   `bytes32[]`: The list of system supported platforms.

### `getSystemSupportedKeyTypes`[​](#getsystemsupportedkeytypes "Direct link to getsystemsupportedkeytypes")

Get system supported key types.

```
function getSystemSupportedKeyTypes()        external view        returns (bytes32[] memory)
```

**Returns**

-   `bytes32[]`: The list of system supported key types.

### `getSystemSupportedSigningAlgos`[​](#getsystemsupportedsigningalgos "Direct link to getsystemsupportedsigningalgos")

Get system supported signing algorithms for the given key type.

```
function getSystemSupportedSigningAlgos(        bytes32 _keyType    )        external view        returns (bytes32[] memory)
```

**Parameters**

-   `_keyType`: The key type.

**Returns**

-   `bytes32[]`: The list of supported signing algorithms.

### `getExtensionOwner`[​](#getextensionowner "Direct link to getextensionowner")

Get the owner of a TEE extension.

```
function getExtensionOwner(        uint256 _extensionId    )        external view        returns (address)
```

**Parameters**

-   `_extensionId`: The id of the extension.

**Returns**

-   `address`: The owner address.

### `getExtensionOperator`[​](#getextensionoperator "Direct link to getextensionoperator")

Get the operator of a TEE extension.

```
function getExtensionOperator(        uint256 _extensionId    )        external view        returns (address)
```

**Parameters**

-   `_extensionId`: The id of the extension.

**Returns**

-   `address`: The operator address, or `address(0)` if no operator is set.

### `getTeeExtensionStateVerifier`[​](#getteeextensionstateverifier "Direct link to getteeextensionstateverifier")

Get the TEE extension state verifier contract.

```
function getTeeExtensionStateVerifier(        uint256 _extensionId    )        external view        returns (ITeeExtensionStateVerifier)
```

**Parameters**

-   `_extensionId`: The id of the extension.

**Returns**

-   `ITeeExtensionStateVerifier`: The TEE extension state verifier contract address.

### `getTeeExtensionInstructionsSender`[​](#getteeextensioninstructionssender "Direct link to getteeextensioninstructionssender")

Get the TEE extension instructions sender address.

```
function getTeeExtensionInstructionsSender(        uint256 _extensionId    )        external view        returns (address)
```

**Parameters**

-   `_extensionId`: The id of the extension.

**Returns**

-   `address`: The TEE extension instructions sender address.

### `isSigningAlgoSupported`[​](#issigningalgosupported "Direct link to issigningalgosupported")

Checks if the signing algorithm is supported for the given key type.

```
function isSigningAlgoSupported(        bytes32 _keyType,        bytes32 _signingAlgo    )        external view        returns (bool)
```

**Parameters**

-   `_keyType`: The key type.
-   `_signingAlgo`: The signing algorithm.

**Returns**

-   `bool`: True if the signing algorithm is supported.

### `getSupportedKeyTypes`[​](#getsupportedkeytypes "Direct link to getsupportedkeytypes")

Returns supported wallet/project key types for the given extension.

```
function getSupportedKeyTypes(        uint256 _extensionId    )        external view        returns (bytes32[] memory _supportedKeyTypes)
```

**Parameters**

-   `_extensionId`: The id of the extension.

**Returns**

-   `_supportedKeyTypes`: The supported key types.

### `isKeyTypeSupported`[​](#iskeytypesupported "Direct link to iskeytypesupported")

Checks if the key type is supported for the given extension.

```
function isKeyTypeSupported(        uint256 _extensionId,        bytes32 _keyType    )        external view        returns (bool)
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_keyType`: The key type.

**Returns**

-   `bool`: True if the key type is supported.

### `getSupportedCodeHashes`[​](#getsupportedcodehashes "Direct link to getsupportedcodehashes")

Returns supported code hashes for the given extension.

```
function getSupportedCodeHashes(        uint256 _extensionId    )        external view        returns (bytes32[] memory _supportedCodeHashes)
```

**Parameters**

-   `_extensionId`: The id of the extension.

**Returns**

-   `_supportedCodeHashes`: The supported code hashes.

### `isCodeHashPlatformSupported`[​](#iscodehashplatformsupported "Direct link to iscodehashplatformsupported")

Checks if the code hash and platform are supported for the given extension.

```
function isCodeHashPlatformSupported(        uint256 _extensionId,        bytes32 _codeHash,        bytes32 _platform    )        external view        returns (bool)
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_codeHash`: The code hash.
-   `_platform`: The platform.

**Returns**

-   `bool`: True if the code hash and platform are supported, false otherwise.

### `isCodeHashPlatformDisabled`[​](#iscodehashplatformdisabled "Direct link to iscodehashplatformdisabled")

Get the info if the code hash and platform pair is disabled for the given extension.

```
function isCodeHashPlatformDisabled(        uint256 _extensionId,        bytes32 _codeHash,        bytes32 _platform    )        external view        returns (bool)
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_codeHash`: The code hash.
-   `_platform`: The platform.

**Returns**

-   `bool` (`bool`)

### `getCodeHashInfo`[​](#getcodehashinfo "Direct link to getcodehashinfo")

Returns the code hash info (version and platforms).

```
function getCodeHashInfo(        uint256 _extensionId,        bytes32 _codeHash    )        external view        returns (            bytes32 _version,            bytes32[] memory _platforms        )
```

**Parameters**

-   `_extensionId`: The id of the extension.
-   `_codeHash`: The code hash.

**Returns**

-   `_version`: The version (UTF-8 encoded name, for off-chain use only).
-   `_platforms`: The supported platforms.

## Events[​](#events "Direct link to Events")

### `TeeExtensionRegistered`[​](#teeextensionregistered "Direct link to teeextensionregistered")

```
event TeeExtensionRegistered(        uint256 indexed extensionId,        address indexed owner    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `owner` (`address indexed owner`)

### `TeeExtensionContractsSet`[​](#teeextensioncontractsset "Direct link to teeextensioncontractsset")

```
event TeeExtensionContractsSet(        uint256 indexed extensionId,        ITeeExtensionStateVerifier indexed teeExtensionStateVerifier,        address indexed teeExtensionInstructionsSender    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `teeExtensionStateVerifier` (`ITeeExtensionStateVerifier indexed teeExtensionStateVerifier`)
-   `teeExtensionInstructionsSender` (`address indexed teeExtensionInstructionsSender`)

### `SystemSupportedPlatformsAdded`[​](#systemsupportedplatformsadded "Direct link to systemsupportedplatformsadded")

```
event SystemSupportedPlatformsAdded(        bytes32[] platforms    )
```

**Parameters**

-   `platforms` (`bytes32[] platforms`)

### `SystemSupportedPlatformsRemoved`[​](#systemsupportedplatformsremoved "Direct link to systemsupportedplatformsremoved")

```
event SystemSupportedPlatformsRemoved(        bytes32[] platforms    )
```

**Parameters**

-   `platforms` (`bytes32[] platforms`)

### `SystemSupportedKeyTypesAndSigningAlgosAdded`[​](#systemsupportedkeytypesandsigningalgosadded "Direct link to systemsupportedkeytypesandsigningalgosadded")

```
event SystemSupportedKeyTypesAndSigningAlgosAdded(        bytes32[] keyTypes,        bytes32[][] signingAlgosByKeyType    )
```

**Parameters**

-   `keyTypes` (`bytes32[] keyTypes`)
-   `signingAlgosByKeyType` (`bytes32[][] signingAlgosByKeyType`)

### `SystemSupportedKeyTypesAndSigningAlgosRemoved`[​](#systemsupportedkeytypesandsigningalgosremoved "Direct link to systemsupportedkeytypesandsigningalgosremoved")

```
event SystemSupportedKeyTypesAndSigningAlgosRemoved(        bytes32[] keyTypes,        bytes32[][] signingAlgosByKeyType    )
```

**Parameters**

-   `keyTypes` (`bytes32[] keyTypes`)
-   `signingAlgosByKeyType` (`bytes32[][] signingAlgosByKeyType`)

### `TeeVersionAdded`[​](#teeversionadded "Direct link to teeversionadded")

```
event TeeVersionAdded(        uint256 indexed extensionId,        bytes32 version,        bytes32 indexed codeHash,        bytes32[] platforms    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `version` (`bytes32 version`)
-   `codeHash` (`bytes32 indexed codeHash`)
-   `platforms` (`bytes32[] platforms`)

### `CodeHashPlatformsDisabled`[​](#codehashplatformsdisabled "Direct link to codehashplatformsdisabled")

```
event CodeHashPlatformsDisabled(        uint256 indexed extensionId,        bytes32 indexed codeHash,        bytes32[] platforms    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `codeHash` (`bytes32 indexed codeHash`)
-   `platforms` (`bytes32[] platforms`)

### `SupportedKeyTypesAdded`[​](#supportedkeytypesadded "Direct link to supportedkeytypesadded")

```
event SupportedKeyTypesAdded(        uint256 indexed extensionId,        bytes32[] keyTypes    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `keyTypes` (`bytes32[] keyTypes`)

### `SupportedKeyTypesRemoved`[​](#supportedkeytypesremoved "Direct link to supportedkeytypesremoved")

```
event SupportedKeyTypesRemoved(        uint256 indexed extensionId,        bytes32[] keyTypes    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `keyTypes` (`bytes32[] keyTypes`)

### `NewOwnerProposed`[​](#newownerproposed "Direct link to newownerproposed")

```
event NewOwnerProposed(        uint256 indexed extensionId,        address indexed oldOwner,        address indexed newOwner    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `oldOwner` (`address indexed oldOwner`)
-   `newOwner` (`address indexed newOwner`)

### `NewOwnerConfirmed`[​](#newownerconfirmed "Direct link to newownerconfirmed")

```
event NewOwnerConfirmed(        uint256 indexed extensionId,        address indexed newOwner    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `newOwner` (`address indexed newOwner`)

### `ExtensionOperatorSet`[​](#extensionoperatorset "Direct link to extensionoperatorset")

```
event ExtensionOperatorSet(        uint256 indexed extensionId,        address indexed oldOperator,        address indexed newOperator    )
```

**Parameters**

-   `extensionId` (`uint256 indexed extensionId`)
-   `oldOperator` (`address indexed oldOperator`)
-   `newOperator` (`address indexed newOperator`)

## Errors[​](#errors "Direct link to Errors")

Facet-specific errors are listed here. The interface also inherits shared [`ITeeCommonErrors`](/fcc/reference/ITeeCommonErrors). This facet uses those for `OnlyExtensionOwner`, `OnlyProposedOwner`, `KeyTypeNotSupported`, and `LengthsMismatch`.

### `InvalidInstructionsSender`[​](#invalidinstructionssender "Direct link to invalidinstructionssender")

The instructions sender is `address(0)`. Thrown by public `register` and `setExtensionContracts`. The sender is the only address that may call `IInstructions.sendInstructions` for that extension.

```
error InvalidInstructionsSender()
```

### `VersionEmpty`[​](#versionempty "Direct link to versionempty")

`addTeeVersion` was called with `_version == bytes32(0)`. The version label is required (UTF-8 name for off-chain use).

```
error VersionEmpty()
```

### `CodeHashZero`[​](#codehashzero "Direct link to codehashzero")

`addTeeVersion` was called with `_codeHash == bytes32(0)`.

```
error CodeHashZero()
```

### `NoPlatforms`[​](#noplatforms "Direct link to noplatforms")

The platforms array is empty. Thrown by `addTeeVersion`, `disableCodeHashPlatforms`, and governance updates to the system-supported platform list.

```
error NoPlatforms()
```

### `UnsupportedPlatform`[​](#unsupportedplatform "Direct link to unsupportedplatform")

The platform is not on the system-supported list. Thrown by `addTeeVersion` for each platform in `_platforms`.

```
error UnsupportedPlatform(bytes32 platform)
```

**Parameters**

-   `platform`: The unsupported platform.

### `VersionAlreadyExists`[​](#versionalreadyexists "Direct link to versionalreadyexists")

`addTeeVersion` used a `_codeHash` that is already registered for this extension. Versions are identified by code hash.

```
error VersionAlreadyExists()
```

### `PlatformAlreadyExists`[​](#platformalreadyexists "Direct link to platformalreadyexists")

The platform is already in the set being updated. Thrown by `addTeeVersion` if a platform is duplicated for that code hash, and by governance when adding a system-supported platform that is already listed.

```
error PlatformAlreadyExists(bytes32 platform)
```

**Parameters**

-   `platform`: The duplicate platform.

### `InvalidCodeHash`[​](#invalidcodehash "Direct link to invalidcodehash")

`disableCodeHashPlatforms` targeted a `_codeHash` that has no platforms on this extension.

```
error InvalidCodeHash()
```

### `CodeHashPlatformAlreadyDisabled`[​](#codehashplatformalreadydisabled "Direct link to codehashplatformalreadydisabled")

`disableCodeHashPlatforms` targeted a `(codeHash, platform)` pair that is already disabled.

```
error CodeHashPlatformAlreadyDisabled()
```

### `InvalidPlatform`[​](#invalidplatform "Direct link to invalidplatform")

`disableCodeHashPlatforms` targeted a platform that does not belong to that code hash version.

```
error InvalidPlatform()
```

### `SystemOwnedExtensionId`[​](#systemownedextensionid "Direct link to systemownedextensionid")

The call targeted extension id `0` (the system extension). Thrown by `setExtensionContracts` and `proposeNewOwner`. Governance owns that extension; it cannot be transferred or reconfigured through these methods.

```
error SystemOwnedExtensionId()
```

### `PlatformEmpty`[​](#platformempty "Direct link to platformempty")

Governance tried to add `bytes32(0)` to the system-supported platform list.

```
error PlatformEmpty()
```

### `KeyTypeEmpty`[​](#keytypeempty "Direct link to keytypeempty")

A key type is `bytes32(0)`. Thrown by `addSupportedKeyTypes` and by governance when adding system-supported key types.

```
error KeyTypeEmpty()
```

### `KeyTypeAlreadyExists`[​](#keytypealreadyexists "Direct link to keytypealreadyexists")

`addSupportedKeyTypes` added a key type that is already on the extension's list.

```
error KeyTypeAlreadyExists(bytes32 keyType)
```

**Parameters**

-   `keyType`: The duplicate key type.

### `NoKeyTypes`[​](#nokeytypes "Direct link to nokeytypes")

Governance passed an empty key-type array when adding or removing system-supported key types.

```
error NoKeyTypes()
```

### `NoSigningAlgos`[​](#nosigningalgos "Direct link to nosigningalgos")

Governance added or removed a key type without any signing algorithms for that type.

```
error NoSigningAlgos(bytes32 keyType)
```

**Parameters**

-   `keyType`: The key type that had an empty algorithm list.

### `SigningAlgoEmpty`[​](#signingalgoempty "Direct link to signingalgoempty")

Governance passed `bytes32(0)` as a signing algorithm.

```
error SigningAlgoEmpty()
```

### `SigningAlgoAlreadyExists`[​](#signingalgoalreadyexists "Direct link to signingalgoalreadyexists")

Governance tried to add a `(keyType, signingAlgo)` pair that is already on the system-supported list.

```
error SigningAlgoAlreadyExists(bytes32 keyType, bytes32 signingAlgo)
```

**Parameters**

-   `keyType`: The key type.
-   `signingAlgo`: The algorithm that is already listed.

### `SigningAlgoNotFound`[​](#signingalgonotfound "Direct link to signingalgonotfound")

Governance tried to remove a `(keyType, signingAlgo)` pair that is not on the system-supported list.

```
error SigningAlgoNotFound(bytes32 keyType, bytes32 signingAlgo)
```

**Parameters**

-   `keyType`: The key type.
-   `signingAlgo`: The algorithm that was not found.

### `PlatformNotFound`[​](#platformnotfound "Direct link to platformnotfound")

Governance tried to remove a platform that is not on the system-supported list.

```
error PlatformNotFound(bytes32 platform)
```

**Parameters**

-   `platform`: The platform that was not found.

### `InvalidReservedExtensionId`[​](#invalidreservedextensionid "Direct link to invalidreservedextensionid")

`registerReserved` used an id that is not in `[1, 65535]`. Id `0` is the system extension; ids from `65536` are assigned by public `register`.

```
error InvalidReservedExtensionId()
```

### `ReservedExtensionIdAlreadyAssigned`[​](#reservedextensionidalreadyassigned "Direct link to reservedextensionidalreadyassigned")

`registerReserved` used an id that already has an owner.

```
error ReservedExtensionIdAlreadyAssigned()
```

### `InvalidExtensionOwner`[​](#invalidextensionowner "Direct link to invalidextensionowner")

`registerReserved` was called with `_owner == address(0)`.

```
error InvalidExtensionOwner()
```

### `NotAllowedExtensionOwner`[​](#notallowedextensionowner "Direct link to notallowedextensionowner")

The address is not on the global extension-owner allowlist ([`IOwnerAllowlist`](/fcc/reference/IOwnerAllowlist)). Thrown by public `register`, `proposeNewOwner` (if the new owner is non-zero and not allowlisted), and `confirmOwnership`.

```
error NotAllowedExtensionOwner()
```
