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.
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.