Links

Multisig Ops

Description

Multisig Ops are the basis for any change to the state of the Strike wallet. They are the core pattern for the operation of the wallet.
Here is a state diagram of a single multisig op:
Multisig Op State Diagram

Operation

Each Multisig op has a required init instruction and a required finalize instruction. Some ops additionally have supply instructions.
These instructions are used as follows:
Any wallet signer may initiate any of the ops listed below by sending a signed request to the wallet program.
If the op supports a supply instruction, then those must be sent to supply the program with additional data that is needed for that op. Currently the only op to use supply is DAppTransaction.
After initiation (and supply if needed), and before the expiration of the op, the approvers from the policy governing the op may send either a signed approval or denial.
When either a threshold of approvals or denials is achieved or a request times out, anyone may make the unsigned request to finalize the operation. Note that the finalize may fail if the underlying op fails (for example a transfer with insufficient balance). If a finalize fails it may be successively retried which will ultimately result in either a successful invocation of the op or expiration of the op.

Transaction Fees

Multisig ops have a mechanism for collecting and paying their transaction fees. This is described in more detail in Fees / Rent.

Supported Multisig Ops

The table below contains the multisig ops supported by (or planned for) the Strike wallet. For details on the instructions see https://github.com/StrikeProtocols/strike-solana-wallet/blob/master/src/instruction.rs in the program code.
Name
Description
WalletConfigPolicyUpdate
Set wallet configuration policy.
UpdateSigner
add or remove a signer
AddressBookUpdate
add or remove addresses and optionally add/remove from transfer whitelists
DAppBookUpdate
add or remove dApp entries
BalanceAccountCreation
create new balance since everything is a balance account, staking is just an attribute at creation
BalanceAccountNameUpdate
change the name of a balance account
BalanceAccountPolicyUpdate
set entire transfer policy for an account. Note that there are separate thresholds for regular transfers vs. dApp transfers.
BalanceAccountAddressWhitelistUpdate
set the transfer whitelist for a balance account.
AccountSettingsUpdate
account name, transfer whitelisting dapps enabled dapp whitelisting staking validator
Transfer
transfer out of a balance account
WrapUnwrap
wrap or unwrap SOL inside a balance account
DelegateStake
delegate the undelegated amount in a staking account
DeactivateStake
deactivate total balance in a staking account
DAppTransaction
Execute a dApp transaction.
SetCloseAuthority
Allows a user to pay the rent for their wallet and refunds the rent paid by Strike when the account was opened
SignData
Allows for multisig approval of arbitrary data