Skip to content

The Async Transaction Lifecycle

Spending from a vault — or reconfiguring an autonomous account — goes through a propose → vote → execute flow backed by two on-chain accounts: a Transaction (the stored instructions) and a Proposal (the vote record). Both are derived from the same transaction_index, so they are 1:1.

The steps

  1. Create a transaction — store the inner instructions. Requires Initiate. Stored at settings.transaction_index + 1.
  2. Create a proposal — open voting. Requires Initiate. Starts Active (or Draft if draft: true, which then needs activation).
  3. Voteapprove, reject, or (once approved) cancel. Requires Vote. The tally against the threshold and cutoff decides the outcome.
  4. Execute — run the instructions once the proposal is Approved and the time lock has elapsed. Requires Execute. The program signs the inner instructions as the vault PDA via CPI.
  5. Close — reclaim the accounts' rent once the proposal reaches a terminal state.

Settings transactions follow the same flow; only the payload differs (a batch of SettingsActions applied to the account itself).

Proposal states

StateMeaning
DraftCreated with draft: true; must be activated before voting.
ActiveOpen for voting.
ApprovedReached the threshold; awaiting execution (and the time lock).
RejectedReached the rejection cutoff; terminal.
CancelledAn Approved proposal was cancelled; terminal.
ExecutedThe transaction ran; terminal.

Time lock

If the account has a non-zero time_lock, an Approved proposal cannot execute until that many seconds have passed since approval — a cooling-off window. Set it at creation or via set_time_lock_as_authority / the SetTimeLock settings action.

Staleness

Changing the signer set, threshold, or time lock bumps the account's stale_transaction_index, invalidating in-flight proposals created before the change — they can no longer be approved. One asymmetry to know: a vault proposal that was already Approved before going stale can still execute (the decision stands), whereas a stale settings proposal cannot.

Built on Solace