Skip to content

v4.121.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 11:32
· 152 commits to main since this release

KMS-backed wallets, and sending from a wallet

A wallet can now live in AWS KMS: the private key never leaves KMS, and no wallet file, process, or transcript holds it.

Wallets backed by a KMS key

  • run402 wallets import <name> --kms <key-arn> [--aws-profile <profile>] (SDK r.wallets.import(name, { kms: { keyId, awsProfile? } })) adopts an existing ECC_SECG_P256K1 / SIGN_VERIFY key by reference. It only reads the public key; the profile holds the ARN and no secret.
  • Everything that signs works the same under --wallet <name>: SIWX sign-in, x402 payments, MPP on Tempo, identity links, CI delegation, org adopt. The client hashes locally, KMS signs the digest, and the result is checked to recover to the wallet's address (SIGNER_ADDRESS_MISMATCH otherwise). Signatures are byte-identical to a key-backed wallet's.
  • Named failures with their remedy: KMS_SIGNER_UNAVAILABLE (e.g. an expired SSO session → aws sso login --profile <p>), KMS_ACCESS_DENIED (names the caller), KMS_KEY_UNSUITABLE, BAD_KMS_KEY_ARN.
  • run402 wallets list / current report signer: "local" | "aws_kms". Removing a KMS wallet deletes only the local profile.

Sending money

  • run402 wallets send <amount> --to <address> [--from <smart-account>] [--network base|base-sepolia|tempo|tempo-moderato] [--confirm] (SDK r.wallets.send) sends USDC on Base or pathUSD on Tempo (the Tempo fee is paid in pathUSD) from a key-backed or KMS-backed wallet. --from sends from a CoinbaseSmartWallet the wallet owns.
  • Without --confirm it checks balances, ownership and gas and prints a preview, signing nothing. With it, it reports the mined tx_hash and explorer URL, or SEND_REVERTED with the hash. A short balance is SEND_INSUFFICIENT_BALANCE naming the asset and shortfall.
  • The MCP run sandbox refuses wallets.send with VALUE_TRANSFER_REQUIRES_CLI and the CLI command.

Changed

  • signCiDelegation and signOrgAdopt (@run402/sdk/node) are now async: await them.
  • @aws-sdk/client-kms is an optional peer of @run402/sdk (loaded only for a KMS wallet) and a dependency of run402 and run402-mcp, which adds about 14 MB to those installs.