Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.startale.com/llms.txt

Use this file to discover all available pages before exploring further.

The SCS Portal is where you mint the credentials the AA SDK needs at runtime: a bundler URL, a paymaster URL, and one or more paymasterIds. This page walks through each step end to end.
Startale Cloud Services sign-in page
Account abstraction features require the Growth plan or higher. You can sign up for a free plan first and upgrade later from the Billing tab.

What you will leave with

By the end of this guide you should have:
  • A bundler RPC URL for Soneium Minato or Mainnet.
  • A paymaster RPC URL.
  • A paymasterId for each paymaster you create (managed or self-funded).
  • One or more gas policies attached to that paymaster.
You will plug all four values into createSmartAccountClient and createSCSPaymasterClient.

1. Issue an API key

1

Open the API Keys tab

Sign in to the SCS Portal and open the API Keys section in the left navigation.
2

Create a key per environment

Create separate keys for development and production so you can rotate or revoke them independently.
3

Copy the bundler and paymaster URLs

Each key exposes both a bundlerUrl and a paymasterUrl. They look like this:
https://soneium-minato.bundler.scs.startale.com?apikey=YOUR_API_KEY
https://paymaster.scs.startale.com/v1?apikey=YOUR_API_KEY

2. Create a paymaster

The Portal supports two paymaster modes. Both modes return a paymasterId that you pass through paymasterContext at runtime; the difference is purely how the paymaster is funded.
You top up an ETH balance on the paymaster contract from a sponsor account you control. Gas is debited from that balance until it is empty, at which point the paymaster will reject UserOperations.When to choose this mode
  • You want a hard, predictable cap on how much gas you can spend.
  • You prefer to settle in crypto rather than fiat.
  • You operate the paymaster from a treasury wallet you already manage.
Configuration
  1. Choose a sponsor account address on the target network.
  2. Send ETH to the paymaster contract address shown in the Portal.
  3. The Portal issues a paymasterId for the paymaster you just funded.
Both managed and self-funded paymasters return a paymasterId. The id is what you pass through paymasterContext.paymasterId in the SDK. The paymaster mode only affects funding and billing; the call site looks identical.
paymasterContext: {
  paymasterId: "<YOUR_PAYMASTER_ID>", // works for both managed and self-funded
}

3. Configure gas policies

Gas policies are the rules that the paymaster applies before agreeing to sponsor a UserOperation. A paymaster with no policies will sponsor everything until it runs out of funds; in production you almost always want at least one policy.
Policy scopeWhat it limitsTypical use
GlobalEvery UserOperation that hits the paymaster.A safety net you set once.
UserUserOperations from a specific sender address.Per-user free-tier limits, allowlists.
ContractUserOperations targeting a specific contract. (Coming soon.)Restrict sponsorship to your own dapp.
Each policy has a rate limit type:
Rate limit typeCountsExample
AmountTotal gas (in native units) used in the window.Sponsor up to 0.1 ETH of gas every 7 days.
User operationsNumber of UserOperations executed in the window.Sponsor up to 100 UserOps per user every 7 days.
Policy windows currently reset every 7 days. The reset cadence is fixed at the platform level; you choose the rate limit value, not the window length.

4. Plug the values into the SDK

Put the four values you collected into your environment file:
.env
BUNDLER_URL="https://soneium-minato.bundler.scs.startale.com?apikey=YOUR_API_KEY"
PAYMASTER_URL="https://paymaster.scs.startale.com/v1?apikey=YOUR_API_KEY"
PAYMASTER_ID="pm_..."
Then build the clients:
import { http } from "viem"
import {
  createSCSPaymasterClient,
  createSmartAccountClient,
} from "@startale-scs/aa-sdk"

const paymasterClient = createSCSPaymasterClient({
  transport: http(process.env.PAYMASTER_URL!),
})

const smartAccountClient = createSmartAccountClient({
  account,
  transport: http(process.env.BUNDLER_URL!),
  client: publicClient,
  paymaster: paymasterClient,
  paymasterContext: {
    paymasterId: process.env.PAYMASTER_ID!,
  },
})

Next steps

Installation and setup

Install the SDK and pick a signer for your stack.

Sponsored paymaster

Send sponsored UserOperations end to end.

ERC-20 paymaster

Charge users in tokens instead of native gas.

Quickstart

Verify the credentials with a one-file Node.js script.