pay.sh docs
SDKRust

Signers

Load the operator key that sponsors network fees and signs upto/batch settlement — local keypairs or remote backends — via Solana Keychain.

A signer is only needed when the server sponsors the network fee or settles upto / batch-settlement vouchers. Set it as fee_payer_signer on PayKitConfig. Key handling is built on Solana Keychain, re-exported as solana_pay_kit::mpp::solana_keychain.

Local key material

Local keys ride on MemorySigner:

use solana_pay_kit::mpp::solana_keychain::memory::MemorySigner;

// From a 64-byte keypair…
let signer = MemorySigner::from_bytes(&secret_key_bytes)?;
// …or from a JSON byte-array string (e.g. a Solana CLI keypair, or an env var).
let signer = MemorySigner::from_private_key_string(&std::env::var("MPP_OPERATOR_KEY")?)?;

Sponsoring the network fee

Set fee_payer_signer to have the server pay the customer's network fee. One key drives MPP fee-sponsored mode and supplies x402's fee-payer address. It is required for the upto and batch-settlement schemes, whose settlement vouchers are operator-signed:

use std::sync::Arc;

let pay = PayKit::new(PayKitConfig {
    recipient: "CXhrFZJLKqjzmP3sjYLcF4dTeXWKCy9e2SXXZ2Yo6MPY".to_string(),
    network: "mainnet".to_string(),
    fee_payer_signer: Some(Arc::new(signer)),
    ..Default::default()
})?;

Remote backends

Remote backends (AWS KMS, GCP KMS, Vault, …) implement the SolanaSigner trait and drop into fee_payer_signer the same way. The gcp_kms Cargo feature wires the GCP KMS backend.

On this page