Live on Taiko Alethia

Pay gas in USDC.
Zero native tokens.

The agent-native ERC-4337 paymaster and bundler for Taiko. Your agents pay gas in USDC — no ETH, no bridging, no setup.

5%
Gas surcharge
0
Signup required
0 ETH
Required

Three steps. That's it.

No ETH bridging. No token wrapping. No gas management headaches.

01

Get a USDC quote

Call our paymaster endpoint with your UserOperation. We return the exact USDC cost including gas estimate — no surprises.

02

Sign a USDC permit

Approve the USDC spend with an EIP-2612 off-chain signature. No on-chain approval transaction needed — zero ETH required at any point.

03

Submit & done

Send the UserOperation through our bundler. We handle gas payment, bundling, and on-chain execution. Your agent moves on.

One endpoint.
Give it to your agent.

Tell your AI agent to use this URL as its paymaster when transacting on Taiko. It only needs standard viem + ERC-7677 JSON-RPC. Fresh accounts fund the counterfactual address with USDC, then deploy and transact in one sponsored UserOp. ERC-7677, no SDK needed.

Paymaster RPC endpoint
https://servo.taiko.xyz/rpc

All paymaster and bundler methods in one place. Your agent only needs USDC — no ETH at any point.

Works with any ERC-4337 smart account
Pure viem — no SDK or wrapper
Fund the undeployed address first
Agent only needs USDC
No API keys or signup

If you want the details

Under the hood it's standard ERC-7677 JSON-RPC. The cold-start path is: stub quote, prepend `permit()` if allowance is missing, quote the final UserOp, submit. Here's the viem flow.

Standard
ERC-7677 (pm_getPaymasterData)
Chain
Taiko Alethia (167000)
EntryPoint
0x0000000071727De22E5E9d8BAf0edAc6f37da032
agent.ts
import { createClient, encodeFunctionData, http, maxUint256, parseAbi } from "viem";
import { taikoAlethia } from "viem/chains";

const client = createClient({
  chain: taikoAlethia,
  transport: http("https://servo.taiko.xyz/rpc"),
});

const accountAbi = parseAbi([
  "function execute(address,uint256,bytes)",
  "function executeBatch(address[] targets, uint256[] values, bytes[] calldatas)",
]);
const usdcAbi = parseAbi([
  "function allowance(address owner, address spender) view returns (uint256)",
  "function nonces(address owner) view returns (uint256)",
  "function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)",
]);

const action = encodeFunctionData({
  abi: targetAbi,
  functionName: "doThing",
  args: [123n],
});

let userOp = {
  sender,
  nonce: "0x0",
  initCode,
  callData: encodeFunctionData({
    abi: accountAbi,
    functionName: "execute",
    args: [target, 0n, action],
  }),
  callGasLimit: "0x0",
  verificationGasLimit: "0x0",
  preVerificationGas: "0x0",
  maxFeePerGas,
  maxPriorityFeePerGas,
  signature: DUMMY_SIG,
};

// 1. Stub quote for the real action. This reveals the paymaster + token + maxTokenCost.
const stub = await client.request({
  method: "pm_getPaymasterStubData",
  params: [userOp, entryPoint, "taikoMainnet"],
});

// 2. If the undeployed account has no allowance yet, prepend permit() in the same UserOp.
const allowance = await publicClient.readContract({
  address: stub.tokenAddress,
  abi: usdcAbi,
  functionName: "allowance",
  args: [sender, stub.paymaster],
});

if (allowance < BigInt(stub.maxTokenCostMicros)) {
  const permit = await signPermitWithViem({
    owner,
    token: stub.tokenAddress,
    spender: stub.paymaster,
    value: maxUint256,
    nonce: await publicClient.readContract({
      address: stub.tokenAddress,
      abi: usdcAbi,
      functionName: "nonces",
      args: [sender],
    }),
  });

  userOp = {
    ...userOp,
    callData: encodeFunctionData({
      abi: accountAbi,
      functionName: "executeBatch",
      args: [
        [stub.tokenAddress, target],
        [0n, 0n],
        [permit.calldata, action],
      ],
    }),
  };
}

// 3. Final quote for the exact UserOp you will submit.
const quote = await client.request({
  method: "pm_getPaymasterData",
  params: [userOp, entryPoint, "taikoMainnet"],
});

// 4. Sign the final UserOp hash and send it.
await bundlerClient.sendUserOperation({
  ...userOp,
  ...quote,
});

Simple, transparent pricing

Pay per operation. No subscriptions. No signup required.

Pay-per-use
5%gas surcharge

Every UserOp is priced in USDC and settled on-chain. No invoices, no billing cycles, no API keys.

  • Unlimited UserOps
  • Bundler + paymaster included
  • Settled on-chain in USDC
  • No signup or API keys
  • No invoices or billing
Use with your agent

The only option on Taiko

No other paymaster or bundler supports Taiko Alethia. And we're cheaper than the competition on other chains.

ServoPimlicoCircleAlchemy
Taiko support
USDC gas payment
Bundler
Paymaster
Permit flow (no ETH)
Effective rate
5%
~15.5%
10%
8% + per-op

Ready to build on Taiko?

Point your agent at the endpoint and let it transact with USDC. No signup, no API keys — just go.