Skip to main content
Every production market should be owned by a multisig. The recommended setup is Squads v4 with a hardware-wallet signer set and a timelock. Transfer is a deliberate two-step on-chain process designed to prevent typos from locking you out.
All Kamino-deployed markets use Squads v4 with a 12-hour timelock on SOL/BTC Market and shorter timelocks on satellite markets. Curator markets should match this posture before opening to external users.

How the transfer works

The LendingMarket account has two owner-related fields: The transfer runs in two steps. First, the current owner sets lending_market_owner_cached to the multisig pubkey. The active owner doesn’t change yet; only the staging slot moves. Second, a signer at the new owner address (the multisig itself) calls update-lending-market-owner, which copies the cached value into the live lending_market_owner and finalizes the transfer. The split exists so a typo in the cached pubkey is recoverable: the current owner can re-set the cached field as many times as needed before promotion. Only the second step is irreversible from your side.

Transfer ownership via SDK

The SDK exposes updatePendingLendingMarketAdminIx for step 1 and updateLendingMarketOwnerIxs for step 2.
1

Initialize KaminoManager and fetch the market

2

Step 1 — cache the new owner

3

Step 2 — promote the cached owner

This step must be signed by the new owner (the multisig). For a multisig, build the transaction with noopSigner(newOwnerAddress) and submit it as a Squads proposal.
The full working example lives at klend-sdk/examples/klend-examples/example_change_market_admin.ts.

Setting up the Squads multisig

A short walkthrough; full documentation lives at Squads docs.
1

Create the Squad

On squads.so, create a new Squad. Choose your signer set (hardware wallets recommended for production) and a signature threshold (e.g., 3-of-5).
2

Configure a timelock

In Squad settings, enable a transaction timelock. Kamino’s reference is 12h for SOL/BTC Market, 4h for satellite markets. Pick the value that fits your operational tempo and incident-response posture.
3

Fund the Squad

Send a small amount of SOL to the Squad’s vault address to cover transaction fees on proposals.
4

Note the Squad pubkey

Use the Squad’s vault address as the multisig pubkey passed to the SDK / CLI.

Verifying transactions before signing

A common pattern among security-conscious curators is to recompute the transaction locally and compare its hash to the proposal in Squads. Before signing a proposal:
  1. Re-run the same SDK code (or CLI command with --mode multisig)
  2. Compare the printed base58 transaction to what’s surfaced in the Squads UI
  3. Sign only if the bytes match exactly
This guards against compromised proposals.

Rotating the multisig later

To move ownership to a new multisig after the first transfer is complete, repeat the two-step flow:
  1. The current multisig submits a proposal that updates lending_market_owner_cached to the new multisig.
  2. The new multisig submits a proposal that calls update-lending-market-owner.
The same protections apply: you can re-set the cached field as many times as you want before the second step finalizes.

Reference