Package Logo
x402-base-pulse
x402-base-pulse@v2.1.0
Total Downloads
4
Published
9 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. This Substreams detects when facilitators call transferWithAuthorization on USDC to settle HTTP 402 payments, extracting payer, recipient, amount, and facilitator data from each settlement.


How It Works

The x402 protocol enables internet-native payments using the HTTP 402 status code. When a client wants to access a paid resource:

  1. Server responds with HTTP 402 + payment requirements
  2. Client signs an EIP-3009 authorization
  3. Facilitator calls transferWithAuthorization on USDC to settle payment on-chain
  4. USDC emits AuthorizationUsed + Transfer events
  5. This Substreams captures those events and extracts settlement data

Sample Data (1,000 blocks from block 29M)

Metric Value
Settlements found 129
Total volume $7,268 USDC
Unique payers 101
Unique recipients 88
Active facilitators 4
Batch transactions 27
Field completeness 100%
Payment range $0.0001 -- $2,655 USDC

Modules

Module Kind Description
map_x402_settlements Map Pairs AuthorizationUsed + Transfer events on USDC to extract settlement details
store_payer_volume Store Accumulates total USDC spent per payer
store_payer_count Store Counts payments per payer
store_recipient_volume Store Accumulates total USDC received per resource server
store_recipient_count Store Counts payments per recipient
store_facilitator_volume Store Accumulates total USDC volume per facilitator
store_facilitator_count Store Counts settlements per facilitator
store_facilitator_gas Store Tracks gas costs per facilitator
store_first_seen Store Records first-seen timestamp per payer, recipient, and facilitator
map_payer_stats Map Computes payer leaderboards and averages
map_recipient_stats Map Computes resource server revenue stats
map_facilitator_stats Map Computes facilitator economics (volume vs gas cost)
db_out Map Outputs DatabaseChanges for PostgreSQL sink

Contract Indexed

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

Quick Start

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

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

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

SQL Output

Tables

Table Key Description
settlements tx_hash-log_index Every settlement with payer, recipient, amount, facilitator, gas
payers payer_address Aggregated spend and payment count per payer
recipients recipient_address Revenue and payment count per resource server
facilitators facilitator_address Volume settled, settlement count, total gas spent

Views

View Description
daily_stats Daily protocol-wide volume, unique participants, gas
top_payers Ranked by total USDC spent
top_recipients Ranked by total USDC received
facilitator_economics Volume settled vs gas cost per facilitator
whale_payments Payments > $100 USDC
recent_settlements Latest 100 settlements

Build

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

References

Network

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

Documentation

Modules

Maps icon
Maps

map
map_x402_settlements

38ec2848f8d63944fe7fd13917519994a1608c8c
map map_x402_settlements (
blocksf.ethereum.type.v2.Block
)  -> x402.v1.Settlements

Extracts x402 payment settlements on Base by detecting EIP-3009 AuthorizationUsed events on the USDC contract. Per the x402 protocol (https://docs.cdp.coinbase.com/x402), facilitators settle payments by calling transferWithAuthorization on USDC. Each AuthorizationUsed event is paired with its Transfer event to capture payer, recipient, and amount. Also detects Permit2 proxy settlements (Settled / SettledWithPermit) for the newer settlement path.

substreams gui x402-base-pulse@v2.1.0 map_x402_settlements

map
map_payer_stats

3daf0636a47a0748242bb272c7b09502611f6c20
map map_payer_stats (
store_payer_volumeDELTAS<add,bigint>
store_payer_countGET<add,int64>
store_first_seenGET<set_if_not_exists,int64>
)  -> x402.v1.PayerStats

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

substreams gui x402-base-pulse@v2.1.0 map_payer_stats

map
map_recipient_stats

fd51c503caf9386bb2db8163cabc443da96b3ed5
map map_recipient_stats (
store_recipient_volumeDELTAS<add,bigint>
store_recipient_countGET<add,int64>
store_first_seenGET<set_if_not_exists,int64>
)  -> x402.v1.RecipientStats

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

substreams gui x402-base-pulse@v2.1.0 map_recipient_stats

map
map_facilitator_stats

9c8aacf38f0a07d6ddfec5bc0fe7a62f25114d41
map map_facilitator_stats (
store_facilitator_volumeDELTAS<add,bigint>
store_facilitator_gasGET<add,bigint>
store_first_seenGET<set_if_not_exists,int64>
)  -> x402.v1.FacilitatorStats

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

substreams gui x402-base-pulse@v2.1.0 map_facilitator_stats

map
db_out

693005eda400757ff6a1ee75a2de772dcd6da781
Default param : min_amount=0

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

substreams gui x402-base-pulse@v2.1.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@v2.1.0 ethcommon:all_events
Stores icon
Stores

store
store_payer_volume

7faca7bb2ec46abbba607eb2f3610775b0927c6e
store <add,bigint> store_payer_volume (
)

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

substreams gui x402-base-pulse@v2.1.0 store_payer_volume

store
store_payer_count

e5d74fa9d7c0e63a6569de6f9183002edc90e594
store <add,int64> store_payer_count (
)

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

substreams gui x402-base-pulse@v2.1.0 store_payer_count

store
store_recipient_volume

934c6c0a8d8f3d52d348b2d3474794b04a9ceaf0
store <add,bigint> store_recipient_volume (
)

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

substreams gui x402-base-pulse@v2.1.0 store_recipient_volume

store
store_recipient_count

6e93833e12e64aed93837b724b89617fa9867f2e
store <add,int64> store_recipient_count (
)

Counts total payments per recipient. Key: {recipient_address}

substreams gui x402-base-pulse@v2.1.0 store_recipient_count

store
store_facilitator_volume

10be95329410112d995d18c77e76cad1e5487fbe
store <add,bigint> store_facilitator_volume (
)

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

substreams gui x402-base-pulse@v2.1.0 store_facilitator_volume

store
store_facilitator_count

ef69fd81129946ae1a347d8ca64ae049584c345b
store <add,int64> store_facilitator_count (
)

Counts total settlements per facilitator. Key: {facilitator_address}

substreams gui x402-base-pulse@v2.1.0 store_facilitator_count

store
store_facilitator_gas

dfe83da0be50b87029b62caab87b9ecc8132ebe3
store <add,bigint> store_facilitator_gas (
)

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

substreams gui x402-base-pulse@v2.1.0 store_facilitator_gas

store
store_first_seen

f8f65303c8b39c93304859f3cdca9b80ab07f655
store <set_if_not_exists,int64> store_first_seen (
)

Records first-seen block timestamp per entity. Key: payer:{addr}, recipient:{addr}, facilitator:{addr}

substreams gui x402-base-pulse@v2.1.0 store_first_seen
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@v2.1.0 ethcommon:index_events
Protobuf

Protobuf Docs Explorer

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