<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Axon Finance</title>
    <description>The latest articles on DEV Community by Axon Finance (@axonfi).</description>
    <link>https://dev.to/axonfi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3830996%2Fd7d7c178-7306-4ca6-8a49-b28c6d7689ec.png</url>
      <title>DEV Community: Axon Finance</title>
      <link>https://dev.to/axonfi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/axonfi"/>
    <language>en</language>
    <item>
      <title>Gasless Payments for AI Agents with EIP-712 Intents</title>
      <dc:creator>Axon Finance</dc:creator>
      <pubDate>Wed, 18 Mar 2026 08:50:23 +0000</pubDate>
      <link>https://dev.to/axonfi/gasless-payments-for-ai-agents-with-eip-712-intents-3o61</link>
      <guid>https://dev.to/axonfi/gasless-payments-for-ai-agents-with-eip-712-intents-3o61</guid>
      <description>&lt;p&gt;AI agents can't hold ETH for gas. They shouldn't have to. Here's how to build a payment system where agents sign typed data and never touch gas or funds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Your AI agent needs to pay for an API, buy data, or settle a trade. Traditional approach: give it a wallet with ETH + USDC. But then you're managing gas balances, handling failed transactions, and praying the agent doesn't get drained.&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution: EIP-712 payment intents
&lt;/h2&gt;

&lt;p&gt;Instead of executing transactions, agents sign &lt;em&gt;intents&lt;/em&gt; - structured messages that say "I want to pay X to Y." A relayer picks up the intent, validates it against spending policies, and submits the on-chain transaction.&lt;/p&gt;

&lt;p&gt;The agent never needs ETH. Never submits a transaction. Never holds funds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Define the intent structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;struct PaymentIntent {
    address bot;      // The agent's address
    address to;       // Payment recipient
    address token;    // ERC-20 token (e.g. USDC)
    uint256 amount;   // Amount in token decimals
    uint256 deadline; // Expiry timestamp
    bytes32 ref;      // Reference hash (memo, invoice ID, etc.)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Agent signs the intent
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AxonClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@axonfi/sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AxonClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;relayerUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://relay.axonfi.xyz&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;botPrivateKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BOT_PRIVATE_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;vaultAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0xYourVault&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8453&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Signs EIP-712 typed data + sends to relayer&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;txHash&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;recipientAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10.00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 10 USDC&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Monthly API subscription&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EIP-712 domain separator (chain-aware, vault-specific)&lt;/li&gt;
&lt;li&gt;Deadline calculation (15 min default)&lt;/li&gt;
&lt;li&gt;Reference hashing (SHA-256 of memo)&lt;/li&gt;
&lt;li&gt;Signature generation&lt;/li&gt;
&lt;li&gt;HTTP submission to the relayer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Relayer validates and executes
&lt;/h3&gt;

&lt;p&gt;The relayer checks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is the bot registered on this vault?&lt;/li&gt;
&lt;li&gt;Is the signature valid for this intent?&lt;/li&gt;
&lt;li&gt;Is the amount within the bot's per-tx cap?&lt;/li&gt;
&lt;li&gt;Has the bot exceeded daily/weekly limits?&lt;/li&gt;
&lt;li&gt;Is the destination whitelisted (if whitelist is set)?&lt;/li&gt;
&lt;li&gt;Is the destination blacklisted?&lt;/li&gt;
&lt;li&gt;If amount &amp;gt; AI threshold, run 3-agent verification&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only after all checks pass does it call the vault contract.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Vault enforces on-chain
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function executePayment(
    PaymentIntent calldata intent,
    bytes calldata signature
) external onlyRelayer {
    require(bots[intent.bot].isActive, "Bot not active");
    require(block.timestamp &amp;lt;= intent.deadline, "Expired");
    require(intent.amount &amp;lt;= bots[intent.bot].maxPerTxAmount, "Over limit");

    // Verify EIP-712 signature
    bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(...)));
    require(ECDSA.recover(digest, signature) == intent.bot, "Bad sig");

    // Transfer
    IERC20(intent.token).transfer(intent.to, intent.amount);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The on-chain &lt;code&gt;maxPerTxAmount&lt;/code&gt; is the hard ceiling. Even if the relayer is compromised, the contract enforces per-bot limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python version
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;axonfi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AxonClient&lt;/span&gt;

&lt;span class="n"&gt;axon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AxonClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;relayer_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://relay.axonfi.xyz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;bot_private_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0x...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;vault_address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0x...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;chain_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8453&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;axon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0xrecipient&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5.00&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;memo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Data purchase&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;txHash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  LangChain integration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_axon&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AxonToolkit&lt;/span&gt;

&lt;span class="n"&gt;toolkit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AxonToolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;relayer_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://relay.axonfi.xyz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;bot_private_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0x...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;vault_address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0x...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;chain_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8453&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;toolkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_tools&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# Gives your agent: pay, swap, execute_protocol, get_balance, get_vault_value
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this matters for agent builders
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No gas management&lt;/strong&gt; - your agent loop doesn't need to check ETH balances or handle gas estimation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No fund management&lt;/strong&gt; - one vault per fleet, not one wallet per agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant revocation&lt;/strong&gt; - pause a bot in one click, funds stay safe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit trail&lt;/strong&gt; - every payment is a signed intent with a memo, queryable on-chain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works on any EVM chain&lt;/strong&gt; - same code on Base, Arbitrum, or any L2&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @axonfi/sdk
&lt;span class="c"&gt;# or&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;axonfi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source: &lt;a href="https://github.com/axonfi" rel="noopener noreferrer"&gt;github.com/axonfi&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The contracts are deployed on Base and Arbitrum. Testnet faucets and addresses are in &lt;a href="https://github.com/axonfi/core/blob/main/TESTNET.md" rel="noopener noreferrer"&gt;TESTNET.md&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ethereum</category>
      <category>solidity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Your AI Agent Doesn't Need a Wallet - It Needs a Treasury</title>
      <dc:creator>Axon Finance</dc:creator>
      <pubDate>Wed, 18 Mar 2026 08:50:14 +0000</pubDate>
      <link>https://dev.to/axonfi/your-ai-agent-doesnt-need-a-wallet-it-needs-a-treasury-1dg3</link>
      <guid>https://dev.to/axonfi/your-ai-agent-doesnt-need-a-wallet-it-needs-a-treasury-1dg3</guid>
      <description>&lt;p&gt;Most AI agent frameworks tell you to "give your agent a wallet." So you generate a key pair, fund it with ETH for gas and USDC for payments, and hope nothing goes wrong.&lt;/p&gt;

&lt;p&gt;Now imagine you have 50 agents. That's 50 wallets, 50 private keys, 50 gas balances to monitor. One compromised key and an agent drains everything it holds.&lt;/p&gt;

&lt;p&gt;This is the wrong model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents should sign, not hold
&lt;/h2&gt;

&lt;p&gt;The mental shift: agents don't need wallets. They need &lt;em&gt;permission to request payments&lt;/em&gt; from a vault they don't control.&lt;/p&gt;

&lt;p&gt;Here's the pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Owner&lt;/strong&gt; deploys a vault (a smart contract they control)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner&lt;/strong&gt; registers agent public keys with spending limits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent&lt;/strong&gt; signs a payment intent (EIP-712 typed data) when it needs to pay for something&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relayer&lt;/strong&gt; validates the signature, checks policies, submits on-chain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vault&lt;/strong&gt; verifies the agent is authorized and the amount is within limits&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent never holds funds. Never pays gas. Never has withdrawal access.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a payment intent looks like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Agent-side code&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AxonClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@axonfi/sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AxonClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;relayerUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://relay.axonfi.xyz&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;botPrivateKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BOT_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;vaultAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8453&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Base&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0xvendor...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// USDC on Base&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5.00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 5 USDC&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API subscription renewal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txHash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under the hood, the SDK signs an EIP-712 &lt;code&gt;PaymentIntent&lt;/code&gt; struct and POSTs it to the relayer. The agent's private key never touches funds - it only proves "I am authorized to request this payment."&lt;/p&gt;

&lt;h2&gt;
  
  
  Spending policies
&lt;/h2&gt;

&lt;p&gt;The vault owner sets per-agent limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-transaction cap&lt;/strong&gt; - enforced on-chain, can't be bypassed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily/weekly/monthly limits&lt;/strong&gt; - enforced by the relayer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Destination whitelist&lt;/strong&gt; - agent can only pay approved addresses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Destination blacklist&lt;/strong&gt; - blocked addresses (always wins over whitelist)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI verification threshold&lt;/strong&gt; - payments above X trigger a 3-agent AI review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All configurable from a dashboard. No code changes, no redeployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if an agent key is compromised?
&lt;/h2&gt;

&lt;p&gt;Worst case: the attacker can sign payment intents. But:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They're capped by &lt;code&gt;maxPerTxAmount&lt;/code&gt; (on-chain, immutable per bot)&lt;/li&gt;
&lt;li&gt;Daily limits stop runaway spending&lt;/li&gt;
&lt;li&gt;Whitelist restricts where funds can go&lt;/li&gt;
&lt;li&gt;Owner can pause the bot instantly&lt;/li&gt;
&lt;li&gt;The attacker can't withdraw, can't change limits, can't add new bots&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare this to a compromised wallet: attacker drains everything, no limits, no recourse.&lt;/p&gt;

&lt;h2&gt;
  
  
  The infrastructure gap
&lt;/h2&gt;

&lt;p&gt;Every agent framework (LangChain, CrewAI, AutoGen, ElizaOS) gives you tool calling, memory, and planning. None of them solve the money problem properly.&lt;/p&gt;

&lt;p&gt;"Just use an MPC wallet" still means your agent holds funds. "Use a multisig" means your agent can't transact autonomously. "Use a custodial API" means trusting a third party with your money.&lt;/p&gt;

&lt;p&gt;Non-custodial vaults with scoped permissions is the missing piece.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @axonfi/sdk
&lt;span class="c"&gt;# or&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;axonfi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open source: &lt;a href="https://github.com/axonfi" rel="noopener noreferrer"&gt;github.com/axonfi&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building with AI agents and need payment infrastructure? The &lt;a href="https://github.com/axonfi/sdk" rel="noopener noreferrer"&gt;TypeScript SDK&lt;/a&gt; and &lt;a href="https://github.com/axonfi/sdk-python" rel="noopener noreferrer"&gt;Python SDK&lt;/a&gt; are on npm/PyPI. &lt;a href="https://github.com/axonfi/langchain-python" rel="noopener noreferrer"&gt;LangChain integration&lt;/a&gt; available.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>web3</category>
      <category>typescript</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
