Package Logo
x402-base-pulse
x402-base-pulse@v1.0.0
Total Downloads
3
Published
11 hours ago
Network
base base
Publisher
User Avatar PaulieB14

Readme

x402 Base Pulse

Real-time payment protocol analytics for Coinbase x402 on Base

Track every x402 payment settlement on Base mainnet. Indexes the x402ExactPermit2Proxy contract, correlates USDC transfers, and computes per-actor analytics in real time.


Modules

Layer 1 - Extraction
  map_x402_settlements .......... Proxy settlement events (Settled / SettledWithPermit)
  map_payment_transfers ......... USDC Transfer events in x402 transactions

Layer 2 - State Stores
  store_payer_volume ............ Total spend per payer
  store_payer_count ............. Payment count per payer
  store_recipient_volume ........ Revenue per resource server
  store_recipient_count ......... Payment count per recipient
  store_facilitator_volume ...... Volume per facilitator
  store_facilitator_count ....... Settlement count per facilitator
  store_facilitator_gas ......... Gas cost per facilitator

Layer 3 - Analytics
  map_payer_stats ............... Payer leaderboards & averages
  map_recipient_stats ........... Resource server revenue stats
  map_facilitator_stats ......... Facilitator economics

Layer 4 - SQL Sink
  db_out ........................ PostgreSQL output (5 tables + 5 views)

Contracts Indexed

Contract Address Events
x402ExactPermit2Proxy 0x4020615294c913F045dc10f0a5cdEbd86c280001 Settled, SettledWithPermit
USDC (Base) 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 Transfer

Quick Start

# Stream x402 settlements from Base
substreams run x402-base-pulse map_x402_settlements \
  -e base-mainnet.streamingfast.io:443 \
  -s 25000000 -t +1000

# GUI mode
substreams gui x402-base-pulse map_x402_settlements \
  -e base-mainnet.streamingfast.io:443 \
  -s 25000000

# Sink to PostgreSQL
substreams-sink-sql run "psql://localhost/x402" \
  x402-base-pulse-v1.0.0.spkg \
  -e base-mainnet.streamingfast.io:443

SQL Schema

Tables

Table Primary Key Description
settlements tx_hash + log_index Every x402 payment on Base
payers payer_address Aggregated spend per payer
recipients recipient_address Revenue per resource server
facilitators facilitator_address Gas economics per facilitator
daily_stats date Protocol-wide daily aggregates

Views

View Description
top_payers Leaderboard by total spend
top_recipients Top resource servers by revenue
facilitator_economics Gas cost analysis per facilitator
whale_payments Payments > $100 USDC
recent_settlements Live settlement feed

What is x402?

x402 is Coinbase's open-standard payment protocol using the HTTP 402 status code for internet-native crypto payments. Clients pay for API resources via signed authorizations (EIP-3009 / Permit2), and facilitators handle on-chain settlement and gas sponsorship.

Payment flow:

  1. Client requests a paid resource
  2. Server responds with HTTP 402 + payment requirements
  3. Client signs a payment authorization
  4. Facilitator settles on-chain via the x402 proxy
  5. Server delivers the resource

This Substreams indexes step 4 -- every on-chain settlement -- giving you full visibility into the x402 payment network on Base.

Build from Source

cargo build --target wasm32-unknown-unknown --release
substreams pack substreams.yaml

Network

  • Chain: Base (EVM)
  • Start Block: 25,000,000
  • Endpoint: base-mainnet.streamingfast.io:443

Documentation

Modules

Maps icon
Maps

map
map_x402_settlements

97679970f75945be7c9b946257377a425e396dcf
map map_x402_settlements (
blocksf.ethereum.type.v2.Block
)  -> x402.v1.Settlements

Extracts x402 settlement events from the x402ExactPermit2Proxy contract. Correlates proxy events with USDC transfers in the same transaction to capture payer, recipient, amount, and facilitator for every x402 payment.

substreams gui x402-base-pulse@v1.0.0 map_x402_settlements

map
map_payment_transfers

cacf30fa1a058ddde663c358d256f7a92e828fa8
map map_payment_transfers (
)  -> x402.v1.PaymentTransfers

Extracts USDC Transfer events that occur in transactions involving the x402 proxy. These represent the actual token movements for x402 payments.

substreams gui x402-base-pulse@v1.0.0 map_payment_transfers

map
map_payer_stats

17794dde130bcf1b51e361766a044f3b6fb29bb1

Computes real-time payer statistics by combining settlement data with accumulated store values.

substreams gui x402-base-pulse@v1.0.0 map_payer_stats

map
map_recipient_stats

32bcf736e3087ccd5cd98aeb12e920a480faec66

Computes real-time recipient (resource server) revenue statistics.

substreams gui x402-base-pulse@v1.0.0 map_recipient_stats

map
map_facilitator_stats

4bf7ac7abff5f41afadd43c485055faed1362270

Computes facilitator economics: volume processed, gas spent, settlement count.

substreams gui x402-base-pulse@v1.0.0 map_facilitator_stats

map
db_out

4165afb1b033f807bd98d712e918e4670f500e77
Default param : min_amount=0

Outputs database changes for PostgreSQL sink. Tables: settlements, payers, recipients, facilitators, daily_stats

substreams gui x402-base-pulse@v1.0.0 db_out

map
ethcommon:all_events

963652a247fd23d0823dde62d21ae54c783b6073
map ethcommon:all_events (
)  -> sf.substreams.ethereum.v1.Events

all_events gives you all the events in a block (from successful transactions), with basic block hash/number/timestamp and transaction hash

substreams gui x402-base-pulse@v1.0.0 ethcommon:all_events
Stores icon
Stores

store
store_payer_volume

1606617f51a4922de27e1a8e4fcb5ddda60eb780
store <add,bigint> store_payer_volume (
)

Accumulates total payment volume per payer address. Key: {payer_address}

substreams gui x402-base-pulse@v1.0.0 store_payer_volume

store
store_payer_count

aa220e9bb0de5f75e96c45a1b92fa73358f8b8c6
store <add,int64> store_payer_count (
)

Counts total payments per payer address. Key: {payer_address}

substreams gui x402-base-pulse@v1.0.0 store_payer_count

store
store_recipient_volume

1e01dad88c82ca9bf8cf9feae5f2c2ca278d96d2
store <add,bigint> store_recipient_volume (
)

Accumulates total revenue per recipient (resource server). Key: {recipient_address}

substreams gui x402-base-pulse@v1.0.0 store_recipient_volume

store
store_recipient_count

638e1e63d15483316ed1d6ddd2e63ef2bc8522a2
store <add,int64> store_recipient_count (
)

Counts total payments per recipient. Key: {recipient_address}

substreams gui x402-base-pulse@v1.0.0 store_recipient_count

store
store_facilitator_volume

46e9302c131a2d53dd0258ccaf37e25d4a8291cc
store <add,bigint> store_facilitator_volume (
)

Accumulates total volume settled per facilitator. Key: {facilitator_address}

substreams gui x402-base-pulse@v1.0.0 store_facilitator_volume

store
store_facilitator_count

b107a05140643196a0aac1ef9edce6df32e360b9
store <add,int64> store_facilitator_count (
)

Counts total settlements per facilitator. Key: {facilitator_address}

substreams gui x402-base-pulse@v1.0.0 store_facilitator_count

store
store_facilitator_gas

a6bb007c1b993b058c7aa9b01374a2fb0ca3b4e5
store <add,bigint> store_facilitator_gas (
)

Accumulates total gas spent per facilitator. Key: {facilitator_address}

substreams gui x402-base-pulse@v1.0.0 store_facilitator_gas
Block Indexes icon
Block Indexes

blockIndex
ethcommon:index_events

87255243f80f5d4755cd826ec57bf70696a4d7b6

index_events sets the following keys on the block:

  • Event signatures evt_sig:0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef (signature in hex, prefixed by 0x)
  • Event address evt_addr:0x0123456789abcdef0123456789abcdef01234567 (address in hex, prefixed by 0x)
substreams gui x402-base-pulse@v1.0.0 ethcommon:index_events
Protobuf

Protobuf Docs Explorer

sf.ethereum.type.v2
sf.ethereum.substreams.v1
x402.v1