Arc, already in your warehouse.
Every Arc stream delivered continuously into the systems you already query. Reconciled USDC transfers, finality, logs, blocklist changes and CCTP legs, backfilled from genesis and kept current as blocks commit.
- USDC transfers
- Blocks + certificates
- Logs
- Blocklist
- CCTP legs
Kafka
topic per stream
Postgres
upserts on dedup key
ClickHouse
ReplacingMergeTree
S3
hourly Parquet
Every range delivered comes with a signed gap report: a statement that no block in it was skipped.
Eight sinks. Four included on Scale.
The same schema in every destination, so a query written against one works against another.
Kafka
ScaleOne topic per stream, keyed on the dedup key so compaction keeps the latest record.
PostgreSQL
ScaleTyped tables with upserts on the dedup key. Point your ORM at it.
ClickHouse
ScaleReplacingMergeTree tables ordered by block number and log index.
Amazon S3
ScaleHourly Parquet partitions by block range, with a manifest per partition.
Snowflake
On requestStaged loads into your account, schema managed on our side.
BigQuery
On requestStreaming inserts into a dataset you own.
Redpanda
On requestKafka-compatible delivery for teams already on Redpanda.
Kinesis
On requestOne stream per Arc stream in the AWS region you choose.
Net USDC flow per address, one query.
-- net USDC flow per address, per day (ClickHouse sink)SELECT toDate(block_time) AS day, address, sum(delta_usdc) AS net_usdcFROM ( SELECT block_time, "to" AS address, amount_usdc AS delta_usdc FROM usdc_transfers UNION ALL SELECT block_time, "from" AS address, -amount_usdc AS delta_usdc FROM usdc_transfers)GROUP BY day, addressORDER BY day DESC, net_usdc DESC;Match payments to invoices by Memo.
-- match incoming USDC to open invoices by Memo (Postgres sink)SELECT i.invoice_id, i.amount_due, t.amount_usdc, t.block_numberFROM invoices iJOIN usdc_transfers t ON t.memo = i.invoice_id AND t."to" = i.receiving_addressWHERE i.status = 'open';See USDC entering and leaving Arc.
-- net USDC crossing into and out of Arc, by remote chain (S3 via Athena)SELECT remote_domain, sum(CASE WHEN direction = 'INBOUND' THEN amount_usdc ELSE 0 END) AS inbound, sum(CASE WHEN direction = 'OUTBOUND' THEN amount_usdc ELSE 0 END) AS outboundFROM cctp_legsWHERE block_time >= current_date - interval '30' dayGROUP BY remote_domain;What every sink delivery carries.
Signed gap report
Every delivered range ships with a signed statement that no block in it was skipped. A hole is provable, not suspected.
Idempotent writes
Every record carries a dedup key, so a retried delivery upserts instead of duplicating.
Nothing to roll back
Arc finalises on commit. Sinks never receive a compensating write for a reorg, because there are none.
From credentials to a synced warehouse.
- Day 0
Pick streams and a destination
Choose the streams, filters and sink. We send the schema and the permissions the sink needs.
- Day 1
Backfill from genesis
History loads into your destination in block order, with a gap report for each range.
- Ongoing
Live, as blocks commit
The backfill hands over to live delivery on the same cursor, so there is no seam to reconcile.
Stop exporting. Start querying.
Kafka, Postgres, ClickHouse and S3 are included on Scale. Other destinations on request.