Skip to content

Wallet Plugins

Wallet plugins manage the adapter’s economic identity - key generation, storage, signing, and balance queries.

The runtime always needs a wallet - it’s the adapter’s economic identity. But which wallet implementation is right depends on the provider’s setup: a local Solana keypair for simplicity, an OWS-compatible wallet for interoperability, or a hardware-backed signer for production security.

Rather than hard-coding one approach, the runtime defines a WalletProvider interface and swaps implementations via config. Changing wallets is a one-line config change - the rest of the runtime (payment adapters, agent tools, job engine) doesn’t care which wallet is behind the interface. When new wallet standards emerge (multi-chain, MPC, smart contract wallets), they plug in the same way: implement the four methods, publish, configure.

Every wallet plugin implements the WalletProvider contract:

from agent_adapter_contracts.wallet import WalletProvider
class MyWalletPlugin(WalletProvider):
async def get_address(self) -> str:
"""Return the adapter's public key."""
...
async def get_balance(self) -> dict:
"""Return SOL and token balances."""
...
async def sign_message(self, message: bytes) -> bytes:
"""Sign arbitrary bytes."""
...
async def sign_transaction(self, transaction) -> bytes:
"""Sign a prepared Solana transaction."""
...

Direct Solana keypair management. Generates or imports a keypair, encrypts at rest, handles all signing locally.

wallet:
type: "solana_raw"
keypairFile: "./wallet.json"

Open Wallet Standard integration. Connects to an OWS-compatible wallet for signing operations.

wallet:
type: "ows"
[project.entry-points."agent_adapter.wallets"]
my_wallet = "my_wallet_plugin:MyWalletPlugin"