Multisig Management
SKALE Chain administration may be controlled by a Multisig contract, where a predefined number of signatures are required to confirm and execute transactions.
The SKALE chain owner manages many settings of the SKALE chain and IMA bridge. Smart contracts control these settings, and some of these settings are configured on Ethereum and others on the SKALE chain itself.
During SKALE chain creation, the owner specifies its address, which is used by smart contracts to authorize it.
If the SKALE chain owner uses a multisig wallet on Ethereum (for example, Gnosis SAFE) to control a SKALE chain, it can’t make direct calls to smart contracts on the SKALE chain. |
In this case, there is a Marionette
smart contract to allow the SKALE chain owner to call smart contracts on a SKALE chain. It’s a representative of the multisig wallet on the SKALE chain, and it’s predeployed and set up from the beginning of the SKALE chain.
SKALE chains deployed before V2 release don’t have Marionette functionality. |
Marionette
listens to messages from IMA, and if the message sender is equal to the SKALE chain owner address, it decodes function call and performs it.
Arbitrary contract calls can be encoded into an IMA message using https://github.com/skalenetwork/multisigwallet-cli. |
Example using Gnosis SAFE
Assume a Gnosis SAFE multisig wallet owns a SKALE chain named example-chain
.
Running this command:
npx msig encodeData example-chain ConfigController addToWhitelist <ethereum-address>
will print a hex string representing transaction data that needs to be sent to IMA
to trigger the addToWhitelist
function of the ConfigController
smart contract.
Further creation, signing, and execution of a regular Safe transaction with the data will eventually perform needed changes on the SKALE chain.
Fallback option & Example using Predeployed Multisig
There is a fallback option to control Marionette
directly without using IMA. For this purpose, Gnosis MultiSigWallet is predeployed on the SKALE chain. Initially, it has only one owner specified by the SKALE chain owner during SKALE chain creation as the originator
address.
It’s the SKALE chain owner’s responsibility to add additional owners to predeployed MultiSigWallet after chain creation to support sufficient security level.
|
Predeployed MultiSigWallet
has the same authorization level in Marionette
as the original SKALE chain owner multisig connected via IMA. The MultiSigWallet
can send requests to Marionette
to execute arbitrary smart contracts calls. This process can be simplified by using multisigwallet-cli.
Example
The first step is to set the SKALE chain endpoint and MultiSigWallet owner private key. (See multisigwallet-cli readme)
The second step is to execute:
npx msig submitTransaction ConfigController addToWhitelist <ethereum-address>
This transaction will be encoded and added to the MultiSigWallet
. Further signing and execution can be done either via multisigwallet-cli
or Gnosis MultiSigWallet UI