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
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.
Multisig ops have a mechanism for collecting and paying their transaction fees. This is described in more detail in Fees / Rent.
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.
Set wallet configuration policy.
add or remove a signer
add or remove addresses and optionally add/remove from transfer whitelists
add or remove dApp entries
create new balance since everything is a balance account, staking is just an attribute at creation
change the name of a balance account
set entire transfer policy for an account. Note that there are separate thresholds for regular transfers vs. dApp transfers.
set the transfer whitelist for a balance account.
account name, transfer whitelisting dapps enabled dapp whitelisting staking validator
transfer out of a balance account
wrap or unwrap SOL inside a balance account
delegate the undelegated amount in a staking account
deactivate total balance in a staking account
Execute a dApp transaction.
Allows a user to pay the rent for their wallet and refunds the rent paid by Strike when the account was opened
Allows for multisig approval of arbitrary data