The Asset Signer PDA derived from the MPL Core asset is the agent treasury. It has no private key:
  • Receiving any SPL stable (USDC, USDT, USDG) requires no signature — standard SPL transfers land in the PDA’s per-mint ATA. Use provisionTreasuryAtas from @leash/registry-utils once after mint to ensure faucets and wallets find an ATA for every supported stable.
  • Spending requires the asset owner (or a delegated executive) to sign an Execute instruction routed through MPL Core. For x402 calls the executive holds a per-mint capped SPL delegation on the treasury ATA; approving USDC does not approve USDG. See Fund an agent for the full delegation flow.
  • Withdrawing stables back to the owner (or any rescue wallet) is an Execute(SPL.TransferChecked); withdrawing native SOL (e.g. Genesis creator fees) is the same pattern with Execute(SystemProgram.Transfer) instead. Only the owner can authorise either, and the same PDA-via-CPI wrap works across classic SPL Token, Token-2022, and the System program. See Withdraw treasury funds.
  • Creator fees from the agent’s Genesis token (if you launched one via Launch an agent token) accrue directly to this PDA as native SOL. Drain them with withdrawTreasurySol / withdrawTreasurySolAll from @leash/registry-utils (or one click in the playground’s withdraw card — pick SOL (native) from the currency dropdown).
@leash/core exposes deriveAgentTreasuryAddress, deriveAgentTreasuryAta({ asset, mint }), listSplBalances, and getTreasuryBalance; v0.1 demos use these to render the treasury readout without a wallet.