SKALE Chain Access Control

SKALE Chains have several ways to manage access control, meaning who is capable of sending a transaction to the SKALE Chain or who is capable of deploying new contracts. There are several methods manage access: distribution of sFUEL to SKALE Chain users and the ConfigController contract, which authorizes specific contracts to deploy new contracts (CREATE2), enables Multi Transaction Mode and enables Free Contract Deployment. The next paragraph will describe listed methods.

If you encounter a Contract Creation Error: Out of gas error when deploying a contract, this likely means that the address does not have deployer access. See whitelisting an address.

Config Controller

New SKALE Chains are set only to allow the SKALE Chain owner and CREATE/CREATE2 opcodes the ability to deploy new contracts. Other addresses can be permitted on the fly to deploy contracts by whitelisting addresses.

The predeployed ConfigController contract’s address is 0xD2002000000000000000000000000000000000D2 and contains several settings covered below:

Free Contract Deployment

  • allows any account to deploy contracts on the SKALE Chain. Also you must be assigned as DEPLOYER_ADMIN_ROLE - only in this way you can run these methods. You can configure your own SKALE Chain enable/disable this mode.

enableFreeContractDeployment() - enables Free Contract Deployment

disableFreeContractDeployment() - disables Free Contract Deployment


  • is a list of accounts, that are allowed to deploy contracts. Whitelist is enables automatically when Free Contract Deployment disables. Also you must be assigned as DEPLOYER_ADMIN_ROLE or SKALE Chain owner to add account to Whitelist which means that account will be assigned as a DEPLOYER_ROLE.

addToWhitelist(address addr) - add accounts that are allowed to deploy contracts

removeFromWhitelist(address addr) - remove accounts that are allowed to deploy contracts

Multi Transaction Mode (MTM)

  • allows multiple transactions from the same account been included in the one block. It’s implemented in the same way as it works on popular blockchain networks (Ethereum, Bitcoin). Also you must be assigned as MTM_ADMIN_ROLE - only in this way you can run these methods. You can configure your own SKALE Chain enable/disable this mode.

enableMTM() - enables MTM on SKALE Chain

disableMTM() - disables MTM on SKALE Chain

MTM functionality works but it cannot be enabled/disabled yet from the config-controller (so when it’s set, it’s always enabled).

The ABI for the ConfigController is available at the release packages.


The SKALE Chain owner (coinbase address) is the only account allocated sFUEL when the SKALE Chain is created (if using the SDK, you can add additional allocations during setup). The owner account is therefore responsible for distributing sFUEL to users.

The total amount of sFUEL allocation is set in the genesis block of each SKALE Chain and therefore can’t be changed once a chain is deployed.

sFUEL, unlike ETH, has no value, but like ETH is used to meter transaction usage on SKALE Chains.

SKALE Chain owners can apply a variety of methods to distribute sFUEL to users: * direct transaction from the owner to an address * sending an allocation of sFUEL to a SKALE Chain contract, which applies some logic to distribute sFUEL to address.

When addresses use sFUEL to perform transactions, the sFUEL fee used to conduct the transaction is recirculated back to the coinbase address.

SKALE Chain owners should select how and how much sFUEL to distribute to addresses. How much might depend on various factors such as the number of addresses to distribute to, and the sFUEL transaction fees performed by these addresses.
To view Real ETH on SKALE Chains as transferred by the IMA bridge, you can use the informational RPC ports for your endpoint. The port information is presented when the SKALE Chain deployment is complete.

IMA Access Control

For details on IMA Bridge access control features, see IMA Access Control.