@secondlayer/subgraphs 3.22.0 → 3.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.d.ts +118 -9
- package/dist/src/index.js +159 -14
- package/dist/src/index.js.map +7 -6
- package/dist/src/runtime/block-processor.d.ts +43 -2
- package/dist/src/runtime/block-processor.js +155 -12
- package/dist/src/runtime/block-processor.js.map +7 -6
- package/dist/src/runtime/catchup.d.ts +43 -2
- package/dist/src/runtime/catchup.js +155 -12
- package/dist/src/runtime/catchup.js.map +7 -6
- package/dist/src/runtime/context.d.ts +77 -3
- package/dist/src/runtime/context.js +142 -1
- package/dist/src/runtime/context.js.map +6 -5
- package/dist/src/runtime/processor.js +159 -16
- package/dist/src/runtime/processor.js.map +7 -6
- package/dist/src/runtime/reindex.d.ts +43 -2
- package/dist/src/runtime/reindex.js +155 -12
- package/dist/src/runtime/reindex.js.map +7 -6
- package/dist/src/runtime/reorg.d.ts +43 -2
- package/dist/src/runtime/reorg.js +155 -12
- package/dist/src/runtime/reorg.js.map +7 -6
- package/dist/src/runtime/replay.d.ts +3 -3
- package/dist/src/runtime/replay.js +2 -1
- package/dist/src/runtime/replay.js.map +3 -3
- package/dist/src/runtime/runner.d.ts +102 -5
- package/dist/src/runtime/source-matcher.d.ts +2 -2
- package/dist/src/runtime/stats.d.ts +3 -3
- package/dist/src/schema/index.d.ts +46 -5
- package/dist/src/service.js +159 -16
- package/dist/src/service.js.map +7 -6
- package/dist/src/testing/index.d.ts +52 -5
- package/dist/src/testing/index.js +172 -6
- package/dist/src/testing/index.js.map +6 -5
- package/dist/src/triggers/index.d.ts +2 -2
- package/dist/src/types.d.ts +43 -2
- package/dist/src/validate.d.ts +43 -2
- package/package.json +5 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Database as
|
|
1
|
+
import { Database as Database3 } from "@secondlayer/shared/db";
|
|
2
2
|
import { Subscription } from "@secondlayer/shared/db";
|
|
3
|
-
import { Kysely as
|
|
3
|
+
import { Kysely as Kysely3 } from "kysely";
|
|
4
4
|
import { Block, Event, Transaction } from "@secondlayer/shared/db";
|
|
5
5
|
interface BlockData {
|
|
6
6
|
block: Block;
|
|
@@ -48,7 +48,7 @@ declare function replaySubscription(input: ReplayInput): Promise<ReplayResult>;
|
|
|
48
48
|
* critically — this never advances `trigger_evaluator_state`: replay is
|
|
49
49
|
* historical and must not move the live forward cursor.
|
|
50
50
|
*/
|
|
51
|
-
declare function replayChainSubscription(db:
|
|
51
|
+
declare function replayChainSubscription(db: Kysely3<Database3>, sub: Subscription, input: ReplayInput, opts?: {
|
|
52
52
|
source?: BlockSource
|
|
53
53
|
}): Promise<ReplayResult>;
|
|
54
54
|
export { replaySubscription, replayChainSubscription, ReplayResult, ReplayInput };
|
|
@@ -335,6 +335,7 @@ function reconstructBlock(b) {
|
|
|
335
335
|
parent_hash: b.parent_hash,
|
|
336
336
|
burn_block_height: b.burn_block_height,
|
|
337
337
|
burn_block_hash: b.burn_block_hash,
|
|
338
|
+
index_block_hash: b.index_block_hash ?? null,
|
|
338
339
|
timestamp: isoToUnixSeconds(b.block_time),
|
|
339
340
|
canonical: true,
|
|
340
341
|
created_at: new Date(0)
|
|
@@ -1063,5 +1064,5 @@ export {
|
|
|
1063
1064
|
replayChainSubscription
|
|
1064
1065
|
};
|
|
1065
1066
|
|
|
1066
|
-
//# debugId=
|
|
1067
|
+
//# debugId=EA5D371359A4EA4864756E2164756E21
|
|
1067
1068
|
//# sourceMappingURL=replay.js.map
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
"// Re-export canonical pgSchemaName from shared\nexport { pgSchemaName } from \"@secondlayer/shared/db/queries/subgraphs\";\n",
|
|
8
8
|
"import { getSourceDb } from \"@secondlayer/shared/db\";\nimport type { Transaction } from \"@secondlayer/shared/db\";\nimport {\n\ttype IndexEventRow,\n\tIndexHttpClient,\n\ttype IndexTransactionRow,\n} from \"@secondlayer/shared/index-http\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport type { SubgraphDefinition, SubgraphFilter } from \"../types.ts\";\nimport { type BlockData, loadBlockRange } from \"./batch-loader.ts\";\nimport {\n\treconstructBlock,\n\treconstructEvent,\n\treconstructTransaction,\n\treconstructTxFromEventRow,\n} from \"./reconstruct.ts\";\n\n/**\n * Where the subgraph runtime reads canonical chain data. Today it taps the\n * indexer Postgres directly (`PostgresBlockSource`); the re-point adds a\n * `PublicApiBlockSource` that consumes the Streams clock + Index data over\n * HTTP. `matchSources` / handlers / flush / outbox are unchanged — only the\n * loader + tip swap behind this seam.\n */\nexport interface BlockSource {\n\t/** Highest canonical block height available to process. */\n\tgetTip(): Promise<number>;\n\t/** Canonical block data for [fromHeight, toHeight], keyed by height. */\n\tloadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>>;\n\t/** Sparse-scan probe: lowest height in (afterHeight, untilHeight] holding\n\t * an event this source's subgraph could match, or null when the rest of\n\t * the range is empty. Optional — only event-scoped sources support it. */\n\tnextDataHeight?(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null>;\n}\n\n/** A (decoded event type, optional contract scope) pair the sparse probe\n * checks. Contract scoping is what makes token-subgraph reindexes leap over\n * everything that isn't their token. */\nexport type SparseProbeTarget = { eventType: string; contractId?: string };\n\n/** Sparse scanning is sound only when EVERY source is an event-type filter —\n * a contract_call/contract_deploy source matches transactions, which the\n * event probe can't see. */\nexport function canSparseScan(subgraph: SubgraphDefinition): boolean {\n\tif (Array.isArray(subgraph.sources)) return false;\n\tconst filters = sourceFilters(subgraph);\n\tif (filters.length === 0) return false;\n\treturn filters.every((f) => Boolean(EVENT_FILTER_TO_INDEX_TYPE[f.type]));\n}\n\n/** Probe targets for a subgraph's filters: decoded type + contract scope when\n * the filter pins one (assetIdentifier \"SP….contract::asset\" or contractId). */\nexport function sparseProbeTargets(\n\tsubgraph: SubgraphDefinition,\n): SparseProbeTarget[] {\n\tconst targets = new Map<string, SparseProbeTarget>();\n\tfor (const f of sourceFilters(subgraph)) {\n\t\tconst eventType = EVENT_FILTER_TO_INDEX_TYPE[f.type];\n\t\tif (!eventType) continue;\n\t\tconst scoped = f as { assetIdentifier?: string; contractId?: string };\n\t\tconst contractId =\n\t\t\tscoped.contractId ?? scoped.assetIdentifier?.split(\"::\")[0];\n\t\tconst key = `${eventType}|${contractId ?? \"\"}`;\n\t\ttargets.set(key, { eventType, ...(contractId ? { contractId } : {}) });\n\t}\n\treturn [...targets.values()];\n}\n\n/** Reads directly from the shared indexer Postgres (the original behavior). */\nexport class PostgresBlockSource implements BlockSource {\n\tasync getTip(): Promise<number> {\n\t\tconst progress = await getSourceDb()\n\t\t\t.selectFrom(\"index_progress\")\n\t\t\t.selectAll()\n\t\t\t.where(\"network\", \"=\", process.env.NETWORK ?? \"mainnet\")\n\t\t\t.executeTakeFirst();\n\t\treturn progress ? Number(progress.highest_seen_block) : 0;\n\t}\n\n\tloadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\treturn loadBlockRange(getSourceDb(), fromHeight, toHeight);\n\t}\n}\n\n// Subgraph source filter types that map to a decoded Index event_type. The\n// `_event` suffix is the runtime's raw form; print is keyed `print_event`.\nconst EVENT_FILTER_TO_INDEX_TYPE: Record<string, string> = {\n\tstx_transfer: \"stx_transfer\",\n\tstx_mint: \"stx_mint\",\n\tstx_burn: \"stx_burn\",\n\tstx_lock: \"stx_lock\",\n\tft_transfer: \"ft_transfer\",\n\tft_mint: \"ft_mint\",\n\tft_burn: \"ft_burn\",\n\tnft_transfer: \"nft_transfer\",\n\tnft_mint: \"nft_mint\",\n\tnft_burn: \"nft_burn\",\n\tprint_event: \"print\",\n};\n\n// Tx-level source types — matched against /v1/index/transactions, not events.\nconst TX_SOURCE_TYPES = new Set([\"contract_call\", \"contract_deploy\"]);\nconst ALL_INDEX_EVENT_TYPES = [\n\t...new Set(Object.values(EVENT_FILTER_TO_INDEX_TYPE)),\n];\n\nfunction sourceFilters(subgraph: SubgraphDefinition): SubgraphFilter[] {\n\tconst sources = subgraph.sources;\n\treturn Array.isArray(sources)\n\t\t? (sources as SubgraphFilter[])\n\t\t: Object.values(sources as Record<string, SubgraphFilter>);\n}\n\n/**\n * True when any source matches transactions (contract_call / contract_deploy):\n * the handler receives the full tx, so the loader must fetch real transactions.\n * Event-only subgraphs skip walkTransactions and synthesize the tx from joined\n * event context instead (the ~37x reindex over-fetch; see indexing-speed plan).\n */\nexport function needsTransactionData(subgraph: SubgraphDefinition): boolean {\n\treturn sourceFilters(subgraph).some((f) => TX_SOURCE_TYPES.has(f.type));\n}\n\n/** Build the (few) event-bearing txs from joined event context, one per tx_id —\n * the event-only replacement for draining every transaction in the range. */\nfunction synthesizeTxsFromEvents(events: IndexEventRow[]): Transaction[] {\n\tconst byId = new Map<string, Transaction>();\n\tfor (const e of events) {\n\t\tif (!byId.has(e.tx_id)) byId.set(e.tx_id, reconstructTxFromEventRow(e));\n\t}\n\treturn [...byId.values()];\n}\n\n/**\n * The Index event_types the loader must fetch for a set of source filter types.\n * A contract_call/contract_deploy source matches a tx and hands its FULL event\n * set to the handler, so when one is present we fetch every event type (the\n * matched tx's events must be complete); otherwise just the referenced types.\n * Shared by the subgraph loader and the chain-trigger evaluator.\n */\nexport function indexEventTypesForFilterTypes(filterTypes: string[]): string[] {\n\tif (filterTypes.some((t) => TX_SOURCE_TYPES.has(t))) {\n\t\treturn ALL_INDEX_EVENT_TYPES;\n\t}\n\tconst types = new Set<string>();\n\tfor (const t of filterTypes) {\n\t\tconst indexType = EVENT_FILTER_TO_INDEX_TYPE[t];\n\t\tif (indexType) types.add(indexType);\n\t}\n\treturn [...types];\n}\n\nfunction referencedIndexEventTypes(subgraph: SubgraphDefinition): string[] {\n\treturn indexEventTypesForFilterTypes(\n\t\tsourceFilters(subgraph).map((f) => f.type),\n\t);\n}\n\n/**\n * streams-index eligibility: every source must be a known event-type or\n * contract_call/contract_deploy filter (no array-style sources, which leak the\n * unreconstructable `_eventId`). Trait scope IS allowed — trait resolution\n * reads the contract registry on the platform DB (`targetDb`), which the\n * processor always holds, so it's source-independent. Everything else stays on\n * the DB tap.\n */\nexport function isStreamsIndexEligible(subgraph: SubgraphDefinition): boolean {\n\tif (Array.isArray(subgraph.sources)) return false;\n\tconst filters = sourceFilters(subgraph);\n\tif (filters.length === 0) return false;\n\tfor (const f of filters) {\n\t\tconst known =\n\t\t\tEVENT_FILTER_TO_INDEX_TYPE[f.type] || TX_SOURCE_TYPES.has(f.type);\n\t\tif (!known) return false;\n\t}\n\treturn true;\n}\n\n/** Streams clock + Index data plane, reconstructed into raw BlockData rows. */\nexport class PublicApiBlockSource implements BlockSource {\n\tconstructor(\n\t\tprivate readonly http: IndexHttpClient,\n\t\tprivate readonly eventTypes: string[],\n\t\t/** When set, enables the sparse-scan probe (event-scoped subgraphs). */\n\t\tprivate readonly probeTargets?: SparseProbeTarget[],\n\t\t/** False for event-only subgraphs → skip walkTransactions, synthesize the\n\t\t * tx from joined event context. Defaults true (safe / unchanged). */\n\t\tprivate readonly needsTransactions = true,\n\t) {}\n\n\t/** Lowest height in (after, until] any probe target hits, or null. */\n\tasync nextDataHeight(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null> {\n\t\tif (!this.probeTargets?.length) return afterHeight + 1;\n\t\tconst hits = await Promise.all(\n\t\t\tthis.probeTargets.map((t) =>\n\t\t\t\tthis.http.firstEventHeight(\n\t\t\t\t\tt.eventType,\n\t\t\t\t\tafterHeight + 1,\n\t\t\t\t\tuntilHeight,\n\t\t\t\t\tt.contractId,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\tconst found = hits.filter((h): h is number => h !== null);\n\t\treturn found.length ? Math.min(...found) : null;\n\t}\n\n\tgetTip(): Promise<number> {\n\t\t// Bound advancement to what the Index data plane can serve — never\n\t\t// process past it even if the Streams clock is ahead.\n\t\treturn this.http.getIndexTip();\n\t}\n\n\tasync loadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\t// Event-only subgraphs join tx context onto events (withTx) and skip the\n\t\t// walkTransactions over-fetch entirely; tx-level sources fetch real txs.\n\t\tconst withTx = !this.needsTransactions;\n\t\tconst [blocks, txRows, eventLists] = await Promise.all([\n\t\t\tthis.http.walkBlocks(fromHeight, toHeight),\n\t\t\tthis.needsTransactions\n\t\t\t\t? this.http.walkTransactions(fromHeight, toHeight)\n\t\t\t\t: Promise.resolve<IndexTransactionRow[]>([]),\n\t\t\tPromise.all(\n\t\t\t\tthis.eventTypes.map((t) =>\n\t\t\t\t\tthis.http.walkEvents(t, fromHeight, toHeight, withTx),\n\t\t\t\t),\n\t\t\t),\n\t\t]);\n\n\t\tconst map = new Map<number, BlockData>();\n\t\t// Seed every canonical height (incl. empty blocks) so catch-up doesn't\n\t\t// file them as gaps.\n\t\tfor (const b of blocks) {\n\t\t\tmap.set(b.block_height, {\n\t\t\t\tblock: reconstructBlock(b),\n\t\t\t\ttxs: [],\n\t\t\t\tevents: [],\n\t\t\t});\n\t\t}\n\t\t// For event-only subgraphs, materialize only the event-bearing txs from\n\t\t// joined event context instead of every transaction in the range.\n\t\tconst txs = this.needsTransactions\n\t\t\t? txRows.map(reconstructTransaction)\n\t\t\t: synthesizeTxsFromEvents(eventLists.flat());\n\t\tfor (const t of txs) {\n\t\t\tmap.get(t.block_height)?.txs.push(t);\n\t\t}\n\t\tfor (const list of eventLists) {\n\t\t\tfor (const e of list) {\n\t\t\t\tmap.get(e.block_height)?.events.push(reconstructEvent(e));\n\t\t\t}\n\t\t}\n\t\t// Canonical ordering — multi-type event walks merge here.\n\t\tfor (const bd of map.values()) {\n\t\t\tbd.txs.sort((a, b) => a.tx_index - b.tx_index);\n\t\t\tbd.events.sort((a, b) => a.event_index - b.event_index);\n\t\t}\n\t\treturn map;\n\t}\n}\n\n/**\n * Wraps a primary source and falls back to a secondary, per call, when the\n * primary throws. Use it to make the HTTP (Streams+Index) plane a SOFT dependency:\n * if api is unavailable, the processor reads the Postgres tap and keeps advancing\n * instead of stalling. Safe to mix mid-stream — both taps read the same canonical\n * chain at the same heights and the cursor is forward-only. Stateless (no breaker)\n * so it's failover-safe across replicas; the primary is retried every call and\n * resumes transparently once healthy.\n */\nexport class FallbackBlockSource implements BlockSource {\n\tconstructor(\n\t\tprivate readonly primary: BlockSource,\n\t\tprivate readonly fallback: BlockSource,\n\t) {}\n\n\tasync getTip(): Promise<number> {\n\t\ttry {\n\t\t\treturn await this.primary.getTip();\n\t\t} catch (err) {\n\t\t\tlogger.warn(\"block source primary getTip failed — using DB tap\", {\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t\treturn this.fallback.getTip();\n\t\t}\n\t}\n\n\tasync loadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\ttry {\n\t\t\treturn await this.primary.loadBlockRange(fromHeight, toHeight);\n\t\t} catch (err) {\n\t\t\tlogger.warn(\"block source primary loadBlockRange failed — using DB tap\", {\n\t\t\t\tfrom: fromHeight,\n\t\t\t\tto: toHeight,\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t\treturn this.fallback.loadBlockRange(fromHeight, toHeight);\n\t\t}\n\t}\n\n\t/** Probe via the primary only; a probe failure just means \"no skip\" —\n\t * the caller falls back to plain batch advancement. */\n\tasync nextDataHeight(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null> {\n\t\tif (!this.primary.nextDataHeight) return afterHeight + 1;\n\t\ttry {\n\t\t\treturn await this.primary.nextDataHeight(afterHeight, untilHeight);\n\t\t} catch {\n\t\t\treturn afterHeight + 1;\n\t\t}\n\t}\n}\n\nconst postgresBlockSource = new PostgresBlockSource();\n\n/**\n * HTTP (Streams+Index) chain source for a set of decoded event types, wrapped so\n * it falls back to the Postgres tap when api is down. Used by the chain-trigger\n * evaluator (which isn't subgraph-scoped, so it can't go through resolveBlockSource).\n */\nexport function buildChainBlockSource(eventTypes: string[]): BlockSource {\n\treturn new FallbackBlockSource(\n\t\tnew PublicApiBlockSource(buildHttpClient(), eventTypes),\n\t\tpostgresBlockSource,\n\t);\n}\n\nexport function buildHttpClient(): IndexHttpClient {\n\tconst baseUrl =\n\t\tprocess.env.SUBGRAPH_INDEX_API_URL ??\n\t\tprocess.env.STREAMS_API_URL ??\n\t\t\"http://api:3800\";\n\treturn new IndexHttpClient({\n\t\tindexBaseUrl: baseUrl,\n\t\tstreamsBaseUrl: baseUrl,\n\t\tstreamsApiKey:\n\t\t\tprocess.env.STREAMS_INTERNAL_API_KEY ?? \"sk-sl_streams_decode_internal\",\n\t});\n}\n\n/**\n * Resolve the block source for a subgraph. `SUBGRAPH_SOURCE=streams-index`\n * opts eligible subgraphs onto the public Streams clock + Index data; everything\n * else (and the default) stays on the Postgres tap.\n */\nexport function resolveBlockSource(subgraph?: SubgraphDefinition): BlockSource {\n\tif (\n\t\tprocess.env.SUBGRAPH_SOURCE === \"streams-index\" &&\n\t\tsubgraph &&\n\t\tisStreamsIndexEligible(subgraph)\n\t) {\n\t\t// Soft-depend on api: fall back to the Postgres tap per-call if the HTTP\n\t\t// plane is down, so the processor keeps advancing instead of stalling.\n\t\treturn new FallbackBlockSource(\n\t\t\tnew PublicApiBlockSource(\n\t\t\t\tbuildHttpClient(),\n\t\t\t\treferencedIndexEventTypes(subgraph),\n\t\t\t\tcanSparseScan(subgraph) ? sparseProbeTargets(subgraph) : undefined,\n\t\t\t\tneedsTransactionData(subgraph),\n\t\t\t),\n\t\t\tpostgresBlockSource,\n\t\t);\n\t}\n\tif (process.env.SUBGRAPH_SOURCE === \"streams-index\" && subgraph) {\n\t\tlogger.debug(\"Subgraph not streams-index eligible, using DB tap\", {\n\t\t\tsubgraph: subgraph.name,\n\t\t});\n\t}\n\treturn postgresBlockSource;\n}\n",
|
|
9
9
|
"import type {\n\tBlock,\n\tDatabase,\n\tEvent,\n\tTransaction,\n} from \"@secondlayer/shared/db\";\nimport type { Kysely } from \"kysely\";\n\nexport interface BlockData {\n\tblock: Block;\n\ttxs: Transaction[];\n\tevents: Event[];\n}\n\n/**\n * Load a range of blocks with their transactions and events in 3 parallel queries.\n * Returns a Map keyed by block height. Non-canonical blocks are excluded.\n */\nexport async function loadBlockRange(\n\tdb: Kysely<Database>,\n\tfromHeight: number,\n\ttoHeight: number,\n): Promise<Map<number, BlockData>> {\n\tconst [blocks, txs, events] = await Promise.all([\n\t\tdb\n\t\t\t.selectFrom(\"blocks\")\n\t\t\t.selectAll()\n\t\t\t.where(\"height\", \">=\", fromHeight)\n\t\t\t.where(\"height\", \"<=\", toHeight)\n\t\t\t.where(\"canonical\", \"=\", true)\n\t\t\t.execute(),\n\t\tdb\n\t\t\t.selectFrom(\"transactions\")\n\t\t\t.selectAll()\n\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t.execute(),\n\t\tdb\n\t\t\t.selectFrom(\"events\")\n\t\t\t.selectAll()\n\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t.execute(),\n\t]);\n\n\t// Index by block height (coerce to number — bigint columns may return as string or number)\n\tconst txsByHeight = new Map<number, Transaction[]>();\n\tfor (const tx of txs) {\n\t\tconst h = Number(tx.block_height);\n\t\tconst list = txsByHeight.get(h) ?? [];\n\t\tlist.push(tx);\n\t\ttxsByHeight.set(h, list);\n\t}\n\n\tconst eventsByHeight = new Map<number, Event[]>();\n\tfor (const evt of events) {\n\t\tconst h = Number(evt.block_height);\n\t\tconst list = eventsByHeight.get(h) ?? [];\n\t\tlist.push(evt);\n\t\teventsByHeight.set(h, list);\n\t}\n\n\tconst result = new Map<number, BlockData>();\n\tfor (const block of blocks) {\n\t\tconst h = Number(block.height);\n\t\tresult.set(h, {\n\t\t\tblock,\n\t\t\ttxs: txsByHeight.get(h) ?? [],\n\t\t\tevents: eventsByHeight.get(h) ?? [],\n\t\t});\n\t}\n\n\treturn result;\n}\n\n/**\n * Compute average events per block from a loaded batch.\n * Used for adaptive batch sizing.\n */\nexport function avgEventsPerBlock(batch: Map<number, BlockData>): number {\n\tif (batch.size === 0) return 0;\n\tlet totalEvents = 0;\n\tfor (const data of batch.values()) {\n\t\ttotalEvents += data.events.length;\n\t}\n\treturn totalEvents / batch.size;\n}\n",
|
|
10
|
-
"import type { Block, Event, Transaction } from \"@secondlayer/shared/db\";\nimport type {\n\tIndexBlockRow,\n\tIndexEventRow,\n\tIndexTransactionRow,\n} from \"@secondlayer/shared/index-http\";\n\nexport type {\n\tIndexBlockRow,\n\tIndexEventRow,\n\tIndexTransactionRow,\n} from \"@secondlayer/shared/index-http\";\n\n/**\n * Reconstruct the raw `blocks`/`events` row shapes the subgraph runtime expects\n * (the shapes `matchSources` + the handler runner read) from the decoded,\n * flattened rows the public Index API serves. This is what lets\n * `PublicApiBlockSource` feed the EXISTING pipeline byte-identically to the\n * Postgres tap.\n *\n * Two shape gaps the Index API can't avoid, handled here:\n * - Index event rows are flat (`event_type: \"ft_transfer\"`, columns\n * `sender`/`amount`/…); the runtime expects the node's nested `data` keyed by\n * a suffixed `type` (`ft_transfer_event`), with print under `contract_event`.\n * - nft/print Clarity values: the runtime decodes from the canonical hex\n * (`raw_value`), so we place the Index hex there. (The node's verbose\n * serde-tagged `value`, e.g. `{UInt:223}`, is not reproducible from hex and\n * is no longer read — see the nft tokenId normalization in runner.ts.)\n */\n\n/** ISO `block_time` (or null) → unix-seconds integer the runtime expects. */\nfunction isoToUnixSeconds(iso: string | null): number {\n\tif (!iso) return 0;\n\treturn Math.floor(new Date(iso).getTime() / 1000);\n}\n\nexport function reconstructBlock(b: IndexBlockRow): Block {\n\treturn {\n\t\theight: b.block_height,\n\t\thash: b.block_hash,\n\t\tparent_hash: b.parent_hash,\n\t\tburn_block_height: b.burn_block_height,\n\t\tburn_block_hash: b.burn_block_hash,\n\t\ttimestamp: isoToUnixSeconds(b.block_time),\n\t\t// Index serves canonical rows only.\n\t\tcanonical: true,\n\t\tcreated_at: new Date(0),\n\t} as Block;\n}\n\nexport function reconstructTransaction(t: IndexTransactionRow): Transaction {\n\treturn {\n\t\ttx_id: t.tx_id,\n\t\tblock_height: t.block_height,\n\t\ttx_index: t.tx_index,\n\t\ttype: t.tx_type,\n\t\tsender: t.sender,\n\t\tstatus: t.status,\n\t\tcontract_id:\n\t\t\tt.contract_call?.contract_id ?? t.smart_contract?.contract_id ?? null,\n\t\tfunction_name: t.contract_call?.function_name ?? null,\n\t\t// Raw hex ClarityValues — the runner decodes them via its own deserializeCV\n\t\t// path, identical to the DB tap.\n\t\tfunction_args: t.contract_call?.function_args_hex ?? [],\n\t\traw_result: t.contract_call?.result_hex ?? null,\n\t\traw_tx: \"\",\n\t\tcreated_at: new Date(0),\n\t} as Transaction;\n}\n\n/**\n * Build a minimal canonical Transaction from an event row's joined tx context\n * (`tx_context=true` on /v1/index/events). For event-only subgraphs this lets\n * the loader materialize only the txs that actually carry a matched event,\n * instead of draining every transaction in the range (the ~37x reindex\n * over-fetch — see docs/sprints/indexing-speed/plan.md). `function_args` /\n * `raw_result` are empty: an event source never reads them (contract_call-only).\n */\nexport function reconstructTxFromEventRow(e: IndexEventRow): Transaction {\n\treturn {\n\t\ttx_id: e.tx_id,\n\t\tblock_height: e.block_height,\n\t\ttx_index: e.tx_index ?? 0,\n\t\ttype: e.tx_type ?? \"\",\n\t\tsender: e.tx_sender ?? \"\",\n\t\tstatus: e.tx_status ?? \"success\",\n\t\tcontract_id: e.tx_contract_id ?? null,\n\t\tfunction_name: e.tx_function_name ?? null,\n\t\tfunction_args: [],\n\t\traw_result: null,\n\t\traw_tx: \"\",\n\t\tcreated_at: new Date(0),\n\t} as Transaction;\n}\n\nexport function reconstructEvent(e: IndexEventRow): Event {\n\tconst base = {\n\t\t// Synthetic, deterministic id. The runtime only reads `id` for error logs\n\t\t// and the `*`-wildcard payload (which is streams-index-ineligible).\n\t\tid: `${e.tx_id}#${e.event_index}`,\n\t\ttx_id: e.tx_id,\n\t\tblock_height: e.block_height,\n\t\tevent_index: e.event_index,\n\t\tcreated_at: new Date(0),\n\t};\n\n\tswitch (e.event_type) {\n\t\tcase \"ft_transfer\":\n\t\tcase \"ft_mint\":\n\t\tcase \"ft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tasset_identifier: e.asset_identifier,\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\tamount: e.amount,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"nft_transfer\":\n\t\tcase \"nft_mint\":\n\t\tcase \"nft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tasset_identifier: e.asset_identifier,\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\t// Canonical hex → runner decodes tokenId from raw_value.\n\t\t\t\t\traw_value: e.value,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"stx_transfer\":\n\t\tcase \"stx_mint\":\n\t\tcase \"stx_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\tamount: e.amount,\n\t\t\t\t\t// Raw stx_transfer always carries memo (\"\" when empty); Index\n\t\t\t\t\t// returns null for empty — default to \"\" to match the DB tap.\n\t\t\t\t\t...(e.event_type === \"stx_transfer\" ? { memo: e.memo ?? \"\" } : {}),\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"stx_lock\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: \"stx_lock_event\",\n\t\t\t\tdata: {\n\t\t\t\t\tlocked_address: e.sender,\n\t\t\t\t\tlocked_amount: e.amount,\n\t\t\t\t\tunlock_height: e.payload.unlock_height,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"print\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: \"contract_event\",\n\t\t\t\tdata: {\n\t\t\t\t\ttopic: e.payload.topic,\n\t\t\t\t\t// Matcher + runner read `contract_identifier` (the raw node field).\n\t\t\t\t\tcontract_identifier: e.contract_id,\n\t\t\t\t\tvalue: e.payload.value,\n\t\t\t\t\traw_value: e.payload.raw_value,\n\t\t\t\t},\n\t\t\t} as Event;\n\t}\n}\n",
|
|
10
|
+
"import type { Block, Event, Transaction } from \"@secondlayer/shared/db\";\nimport type {\n\tIndexBlockRow,\n\tIndexEventRow,\n\tIndexTransactionRow,\n} from \"@secondlayer/shared/index-http\";\n\nexport type {\n\tIndexBlockRow,\n\tIndexEventRow,\n\tIndexTransactionRow,\n} from \"@secondlayer/shared/index-http\";\n\n/**\n * Reconstruct the raw `blocks`/`events` row shapes the subgraph runtime expects\n * (the shapes `matchSources` + the handler runner read) from the decoded,\n * flattened rows the public Index API serves. This is what lets\n * `PublicApiBlockSource` feed the EXISTING pipeline byte-identically to the\n * Postgres tap.\n *\n * Two shape gaps the Index API can't avoid, handled here:\n * - Index event rows are flat (`event_type: \"ft_transfer\"`, columns\n * `sender`/`amount`/…); the runtime expects the node's nested `data` keyed by\n * a suffixed `type` (`ft_transfer_event`), with print under `contract_event`.\n * - nft/print Clarity values: the runtime decodes from the canonical hex\n * (`raw_value`), so we place the Index hex there. (The node's verbose\n * serde-tagged `value`, e.g. `{UInt:223}`, is not reproducible from hex and\n * is no longer read — see the nft tokenId normalization in runner.ts.)\n */\n\n/** ISO `block_time` (or null) → unix-seconds integer the runtime expects. */\nfunction isoToUnixSeconds(iso: string | null): number {\n\tif (!iso) return 0;\n\treturn Math.floor(new Date(iso).getTime() / 1000);\n}\n\nexport function reconstructBlock(b: IndexBlockRow): Block {\n\treturn {\n\t\theight: b.block_height,\n\t\thash: b.block_hash,\n\t\tparent_hash: b.parent_hash,\n\t\tburn_block_height: b.burn_block_height,\n\t\tburn_block_hash: b.burn_block_hash,\n\t\t// Present since the blocks endpoint started serving it; older API\n\t\t// deployments omit it, and a null propagates to a clean refusal in\n\t\t// `ctx.client.readOnly` rather than an unpinned tip read.\n\t\tindex_block_hash: b.index_block_hash ?? null,\n\t\ttimestamp: isoToUnixSeconds(b.block_time),\n\t\t// Index serves canonical rows only.\n\t\tcanonical: true,\n\t\tcreated_at: new Date(0),\n\t} as Block;\n}\n\nexport function reconstructTransaction(t: IndexTransactionRow): Transaction {\n\treturn {\n\t\ttx_id: t.tx_id,\n\t\tblock_height: t.block_height,\n\t\ttx_index: t.tx_index,\n\t\ttype: t.tx_type,\n\t\tsender: t.sender,\n\t\tstatus: t.status,\n\t\tcontract_id:\n\t\t\tt.contract_call?.contract_id ?? t.smart_contract?.contract_id ?? null,\n\t\tfunction_name: t.contract_call?.function_name ?? null,\n\t\t// Raw hex ClarityValues — the runner decodes them via its own deserializeCV\n\t\t// path, identical to the DB tap.\n\t\tfunction_args: t.contract_call?.function_args_hex ?? [],\n\t\traw_result: t.contract_call?.result_hex ?? null,\n\t\traw_tx: \"\",\n\t\tcreated_at: new Date(0),\n\t} as Transaction;\n}\n\n/**\n * Build a minimal canonical Transaction from an event row's joined tx context\n * (`tx_context=true` on /v1/index/events). For event-only subgraphs this lets\n * the loader materialize only the txs that actually carry a matched event,\n * instead of draining every transaction in the range (the ~37x reindex\n * over-fetch — see docs/sprints/indexing-speed/plan.md). `function_args` /\n * `raw_result` are empty: an event source never reads them (contract_call-only).\n */\nexport function reconstructTxFromEventRow(e: IndexEventRow): Transaction {\n\treturn {\n\t\ttx_id: e.tx_id,\n\t\tblock_height: e.block_height,\n\t\ttx_index: e.tx_index ?? 0,\n\t\ttype: e.tx_type ?? \"\",\n\t\tsender: e.tx_sender ?? \"\",\n\t\tstatus: e.tx_status ?? \"success\",\n\t\tcontract_id: e.tx_contract_id ?? null,\n\t\tfunction_name: e.tx_function_name ?? null,\n\t\tfunction_args: [],\n\t\traw_result: null,\n\t\traw_tx: \"\",\n\t\tcreated_at: new Date(0),\n\t} as Transaction;\n}\n\nexport function reconstructEvent(e: IndexEventRow): Event {\n\tconst base = {\n\t\t// Synthetic, deterministic id. The runtime only reads `id` for error logs\n\t\t// and the `*`-wildcard payload (which is streams-index-ineligible).\n\t\tid: `${e.tx_id}#${e.event_index}`,\n\t\ttx_id: e.tx_id,\n\t\tblock_height: e.block_height,\n\t\tevent_index: e.event_index,\n\t\tcreated_at: new Date(0),\n\t};\n\n\tswitch (e.event_type) {\n\t\tcase \"ft_transfer\":\n\t\tcase \"ft_mint\":\n\t\tcase \"ft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tasset_identifier: e.asset_identifier,\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\tamount: e.amount,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"nft_transfer\":\n\t\tcase \"nft_mint\":\n\t\tcase \"nft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tasset_identifier: e.asset_identifier,\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\t// Canonical hex → runner decodes tokenId from raw_value.\n\t\t\t\t\traw_value: e.value,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"stx_transfer\":\n\t\tcase \"stx_mint\":\n\t\tcase \"stx_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\tamount: e.amount,\n\t\t\t\t\t// Raw stx_transfer always carries memo (\"\" when empty); Index\n\t\t\t\t\t// returns null for empty — default to \"\" to match the DB tap.\n\t\t\t\t\t...(e.event_type === \"stx_transfer\" ? { memo: e.memo ?? \"\" } : {}),\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"stx_lock\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: \"stx_lock_event\",\n\t\t\t\tdata: {\n\t\t\t\t\tlocked_address: e.sender,\n\t\t\t\t\tlocked_amount: e.amount,\n\t\t\t\t\tunlock_height: e.payload.unlock_height,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"print\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: \"contract_event\",\n\t\t\t\tdata: {\n\t\t\t\t\ttopic: e.payload.topic,\n\t\t\t\t\t// Matcher + runner read `contract_identifier` (the raw node field).\n\t\t\t\t\tcontract_identifier: e.contract_id,\n\t\t\t\t\tvalue: e.payload.value,\n\t\t\t\t\traw_value: e.payload.raw_value,\n\t\t\t\t},\n\t\t\t} as Event;\n\t}\n}\n",
|
|
11
11
|
"import type {\n\tChainApplyEnvelope,\n\tSbtcDepositEvent,\n\tSbtcWithdrawalEvent,\n\tSbtcWithdrawalSweptConfirmedEvent,\n} from \"@secondlayer/shared\";\nimport type {\n\tDatabase,\n\tInsertSubscriptionOutbox,\n\tSbtcEventTopic,\n\tSbtcEventsTable,\n\tSubscription,\n} from \"@secondlayer/shared/db\";\nimport { getSourceDb } from \"@secondlayer/shared/db\";\nimport { resolveTraitContractIds } from \"@secondlayer/shared/db/queries/contracts\";\nimport type { ChainTrigger } from \"@secondlayer/shared/schemas/subscriptions\";\nimport type { Kysely, Selectable } from \"kysely\";\nimport type { SubgraphFilter } from \"../types.ts\";\nimport type { BlockData } from \"./batch-loader.ts\";\nimport { indexEventTypesForFilterTypes } from \"./block-source.ts\";\nimport {\n\ttype MatchedTx,\n\ttype TraitContracts,\n\tmatchSources,\n} from \"./source-matcher.ts\";\n\n/** Trigger types that match a whole transaction (not an individual event). */\nconst TX_LEVEL_TRIGGER_TYPES = new Set([\"contract_call\", \"contract_deploy\"]);\n\n/** Fired on a Bitcoin confirmation, async to Stacks blocks — handled by the\n * scan-based `emitSbtcSettlementOutbox`, NOT the per-block path. Listed in\n * SBTC_TRIGGER_TYPES so the per-block matcher skips it, but deliberately absent\n * from SBTC_TRIGGER_TO_TOPIC (it has no `sbtc_events` topic). */\nconst SETTLEMENT_TRIGGER_TYPE = \"sbtc_withdrawal_swept_confirmed\";\n\n/**\n * sBTC trigger types — matched via the `sbtc_events` table, NOT via\n * `decoded_events`. Excluded from the chain-event sources map so the\n * `matchSources` engine never sees them; `emitSbtcOutbox` handles them\n * with a dedicated query + match loop.\n */\nconst SBTC_TRIGGER_TYPES = new Set([\n\t\"sbtc_deposit\",\n\t\"sbtc_withdrawal_create\",\n\t\"sbtc_withdrawal_accept\",\n\t\"sbtc_withdrawal_reject\",\n\tSETTLEMENT_TRIGGER_TYPE,\n]);\n\nfunction isSbtcTriggerType(type: string): boolean {\n\treturn SBTC_TRIGGER_TYPES.has(type);\n}\n\nconst SBTC_TRIGGER_TO_TOPIC: Record<string, SbtcEventTopic> = {\n\tsbtc_deposit: \"completed-deposit\",\n\tsbtc_withdrawal_create: \"withdrawal-create\",\n\tsbtc_withdrawal_accept: \"withdrawal-accept\",\n\tsbtc_withdrawal_reject: \"withdrawal-reject\",\n};\n\n/**\n * Pure matching core for direct chain-level subscriptions. A single evaluator\n * loop serves ALL chain subscriptions: it reads canonical blocks off the public\n * Index/Streams clock (via `PublicApiBlockSource`), runs the same\n * `matchSources` engine the subgraph runtime uses, and routes matches back to\n * the originating subscription. Everything here is pure/sync (DB only for trait\n * resolution) so it's trivially testable.\n *\n * Source keys are `\"{subscriptionId}#{triggerIndex}\"` — `matchSources` echoes\n * the key as `MatchedTx.sourceName`, letting the emitter recover which\n * subscription (and which trigger) matched. `keyMeta` carries the readable\n * trigger type for the outbox `event_type` / payload.\n */\n\nexport interface TriggerKeyMeta {\n\tsubscriptionId: string;\n\ttriggerIndex: number;\n\ttriggerType: ChainTrigger[\"type\"];\n}\n\nexport interface ChainSourcesMap {\n\tsources: Record<string, SubgraphFilter>;\n\tkeyMeta: Map<string, TriggerKeyMeta>;\n}\n\nfunction sourceKey(subscriptionId: string, triggerIndex: number): string {\n\treturn `${subscriptionId}#${triggerIndex}`;\n}\n\nfunction toAmount(v: string | number | undefined): bigint | undefined {\n\treturn v === undefined ? undefined : BigInt(v);\n}\n\n/**\n * Convert a stored `ChainTrigger` (JSON; amounts as string/number) to the\n * runtime `SubgraphFilter` the matcher expects (amounts as bigint). Field names\n * are identical across the two shapes, so this is a copy plus amount coercion.\n */\nexport function chainTriggerToFilter(trigger: ChainTrigger): SubgraphFilter {\n\tconst t = trigger as ChainTrigger & {\n\t\tminAmount?: string | number;\n\t\tmaxAmount?: string | number;\n\t};\n\t// Spread copies all set keys; amounts (string|number) are then overwritten\n\t// with bigint where present. An absent optional amount isn't in the spread,\n\t// so there's nothing to strip.\n\tconst filter = { ...trigger } as Record<string, unknown>;\n\tconst minAmount = toAmount(t.minAmount);\n\tconst maxAmount = toAmount(t.maxAmount);\n\tif (minAmount !== undefined) filter.minAmount = minAmount;\n\tif (maxAmount !== undefined) filter.maxAmount = maxAmount;\n\treturn filter as unknown as SubgraphFilter;\n}\n\nfunction triggersOf(sub: Subscription): ChainTrigger[] {\n\treturn (sub.triggers ?? []) as ChainTrigger[];\n}\n\n/** Build the `matchSources` input from every active chain subscription. */\nexport function buildSourcesMap(chainSubs: Subscription[]): ChainSourcesMap {\n\tconst sources: Record<string, SubgraphFilter> = {};\n\tconst keyMeta = new Map<string, TriggerKeyMeta>();\n\tfor (const sub of chainSubs) {\n\t\ttriggersOf(sub).forEach((trigger, triggerIndex) => {\n\t\t\t// sBTC triggers are handled by emitSbtcOutbox — skip them here so\n\t\t\t// matchSources never tries to find sbtc_events in decoded_events.\n\t\t\tif (isSbtcTriggerType(trigger.type)) return;\n\t\t\tconst key = sourceKey(sub.id, triggerIndex);\n\t\t\tsources[key] = chainTriggerToFilter(trigger);\n\t\t\tkeyMeta.set(key, {\n\t\t\t\tsubscriptionId: sub.id,\n\t\t\t\ttriggerIndex,\n\t\t\t\ttriggerType: trigger.type,\n\t\t\t});\n\t\t});\n\t}\n\treturn { sources, keyMeta };\n}\n\n/** The Index event types the loader must fetch to satisfy all chain triggers. */\nexport function referencedEventTypes(chainSubs: Subscription[]): string[] {\n\tconst filterTypes = new Set<string>();\n\tfor (const sub of chainSubs) {\n\t\tfor (const trigger of triggersOf(sub)) {\n\t\t\t// sBTC events live in sbtc_events, not in the Index event stream.\n\t\t\tif (!isSbtcTriggerType(trigger.type)) filterTypes.add(trigger.type);\n\t\t}\n\t}\n\treturn indexEventTypesForFilterTypes([...filterTypes]);\n}\n\n/** Distinct traits referenced across all chain triggers. */\nexport function referencedTraits(chainSubs: Subscription[]): string[] {\n\tconst traits = new Set<string>();\n\tfor (const sub of chainSubs) {\n\t\tfor (const trigger of triggersOf(sub)) {\n\t\t\tconst trait = (trigger as { trait?: string }).trait;\n\t\t\tif (trait) traits.add(trait);\n\t\t}\n\t}\n\treturn [...traits];\n}\n\n/**\n * Resolve each referenced trait to its conforming contract-id set as of\n * `asOfBlock`, from the contract registry (`CONTRACT_REGISTRY_ENABLED` populates\n * it). Empty map when no trigger is trait-scoped → no DB work. Membership only\n * grows, so the evaluator resolves this once per batch, not per block.\n */\nexport async function buildTraitContracts(\n\tchainSubs: Subscription[],\n\tasOfBlock: number,\n\topts?: { sourceDb?: Kysely<Database> },\n): Promise<TraitContracts> {\n\t// `contracts` is a SOURCE-plane table; the evaluator/replay run on the TARGET\n\t// handle (an empty same-named copy exists there post-split). Read the registry\n\t// from the source plane — reading off the target silently resolved zero trait\n\t// members, so trait-scoped subscriptions never matched. Same class of bug as\n\t// the old emitSbtcOutbox sbtc_events read.\n\tconst sourceDb = opts?.sourceDb ?? getSourceDb();\n\tconst resolved: TraitContracts = new Map();\n\tfor (const trait of referencedTraits(chainSubs)) {\n\t\tconst ids = await resolveTraitContractIds(sourceDb, trait, asOfBlock);\n\t\tresolved.set(trait, new Set(ids));\n\t}\n\treturn resolved;\n}\n\n/** Run the matcher for one block. Thin wrapper for symmetry/testability. */\nexport function evaluateBlock(\n\tblock: BlockData,\n\tsources: Record<string, SubgraphFilter>,\n\ttraitContracts: TraitContracts,\n): MatchedTx[] {\n\treturn matchSources(sources, block.txs, block.events, traitContracts);\n}\n\n// ── Outbox emission ─────────────────────────────────────────────────────────\n\n// Apply-envelope shape is single-sourced as `ChainApplyEnvelope` in\n// `@secondlayer/shared` (shared with the SDK consumer); reorg emits a matching\n// `ChainReorgRollbackEnvelope`, see `handleChainReorg`.\n\n/**\n * Stable dedup identity for a chain delivery — (subscription, tx, event,\n * block_hash). A tx-level match (contract_call/deploy) has no event, so\n * `eventIndex = -1`. `block_hash` is included so a tx that survives a reorg\n * (same tx_id, NEW canonical block) re-delivers an `apply` after its rollback,\n * instead of being suppressed forever; re-processing the SAME canonical block is\n * still idempotent (same hash → same key).\n */\nfunction chainDedupKey(\n\tsubscriptionId: string,\n\ttxId: string,\n\teventIndex: number,\n\tblockHash: string,\n\treplayId?: string,\n): string {\n\tconst base = `chain:${subscriptionId}:${txId}:${eventIndex}:${blockHash}`;\n\t// Replay keys are namespaced so a re-delivery doesn't collide with the\n\t// already-emitted live apply row (whose outbox entry may be long gone), while\n\t// re-running the SAME replay range stays idempotent (same replayId → same key).\n\treturn replayId ? `replay:${replayId}:${base}` : base;\n}\n\nfunction applyRow(\n\tmeta: TriggerKeyMeta,\n\tblockHeight: number,\n\tblockHash: string,\n\ttxId: string,\n\teventIndex: number,\n\tevent: Record<string, unknown>,\n\treplayId?: string,\n): InsertSubscriptionOutbox {\n\tconst payload: ChainApplyEnvelope = {\n\t\taction: \"apply\",\n\t\tblock_hash: blockHash,\n\t\tblock_height: blockHeight,\n\t\ttx_id: txId,\n\t\tcanonical: true,\n\t\ttrigger: meta.triggerType,\n\t\tevent,\n\t};\n\treturn {\n\t\tsubscription_id: meta.subscriptionId,\n\t\tkind: \"chain\",\n\t\tsubgraph_name: null,\n\t\ttable_name: null,\n\t\tblock_height: blockHeight,\n\t\ttx_id: txId,\n\t\trow_pk: { tx_id: txId, event_index: eventIndex },\n\t\tevent_type: `chain.${meta.triggerType}.apply`,\n\t\tpayload,\n\t\tdedup_key: chainDedupKey(\n\t\t\tmeta.subscriptionId,\n\t\t\ttxId,\n\t\t\teventIndex,\n\t\t\tblockHash,\n\t\t\treplayId,\n\t\t),\n\t\t...(replayId ? { is_replay: true } : {}),\n\t};\n}\n\n/**\n * Turn one block's matches into `subscription_outbox` rows (apply envelope). For\n * tx-level triggers (contract_call/deploy) we emit ONE row per matched tx\n * (`event_index = -1`); for event-level triggers, one row per matched event.\n * The `(subscription_id, dedup_key)` unique constraint makes re-processing a\n * block idempotent, so the emitter never double-delivers. Returns rows written.\n */\nexport async function emitChainOutbox(\n\tdb: Kysely<Database>,\n\tmatches: MatchedTx[],\n\tkeyMeta: Map<string, TriggerKeyMeta>,\n\tblockHeight: number,\n\tblockHash: string,\n\topts?: { replayId?: string },\n): Promise<number> {\n\tconst replayId = opts?.replayId;\n\tconst rows: InsertSubscriptionOutbox[] = [];\n\tfor (const match of matches) {\n\t\tconst meta = keyMeta.get(match.sourceName);\n\t\tif (!meta) continue;\n\t\tconst txId = match.tx.tx_id;\n\t\tif (TX_LEVEL_TRIGGER_TYPES.has(meta.triggerType)) {\n\t\t\trows.push(\n\t\t\t\tapplyRow(\n\t\t\t\t\tmeta,\n\t\t\t\t\tblockHeight,\n\t\t\t\t\tblockHash,\n\t\t\t\t\ttxId,\n\t\t\t\t\t-1,\n\t\t\t\t\t{\n\t\t\t\t\t\ttx_id: txId,\n\t\t\t\t\t\ttype: match.tx.type,\n\t\t\t\t\t\tsender: match.tx.sender,\n\t\t\t\t\t\tstatus: match.tx.status,\n\t\t\t\t\t\tcontract_id: match.tx.contract_id ?? null,\n\t\t\t\t\t\tfunction_name: match.tx.function_name ?? null,\n\t\t\t\t\t\tfunction_args: match.tx.function_args ?? null,\n\t\t\t\t\t\tresult_hex: match.tx.raw_result ?? null,\n\t\t\t\t\t},\n\t\t\t\t\treplayId,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const event of match.events) {\n\t\t\t\trows.push(\n\t\t\t\t\tapplyRow(\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\tblockHeight,\n\t\t\t\t\t\tblockHash,\n\t\t\t\t\t\ttxId,\n\t\t\t\t\t\tevent.event_index,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttx_id: txId,\n\t\t\t\t\t\t\ttype: event.type,\n\t\t\t\t\t\t\tevent_index: event.event_index,\n\t\t\t\t\t\t\tdata: event.data,\n\t\t\t\t\t\t},\n\t\t\t\t\t\treplayId,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tif (rows.length === 0) return 0;\n\t// Net-inserted (not built) so callers count genuinely new deliveries — a\n\t// re-processed block or a re-run replay returns 0.\n\tconst result = await db\n\t\t.insertInto(\"subscription_outbox\")\n\t\t.values(rows)\n\t\t.onConflict((oc) =>\n\t\t\toc.columns([\"subscription_id\", \"dedup_key\"]).doNothing(),\n\t\t)\n\t\t.executeTakeFirst();\n\treturn Number(result.numInsertedOrUpdatedRows ?? 0);\n}\n\n// ── sBTC event matching ──────────────────────────────────────────────────────\n\ntype SbtcRow = Selectable<SbtcEventsTable>;\n\nasync function loadSbtcEventsForBlock(\n\tdb: Kysely<Database>,\n\tblockHeight: number,\n\ttopics: SbtcEventTopic[],\n): Promise<SbtcRow[]> {\n\tif (topics.length === 0) return [];\n\treturn db\n\t\t.selectFrom(\"sbtc_events\")\n\t\t.selectAll()\n\t\t.where(\"block_height\", \"=\", blockHeight)\n\t\t.where(\"canonical\", \"=\", true)\n\t\t.where(\"topic\", \"in\", topics)\n\t\t.execute();\n}\n\nfunction toAmountBigInt(v: string | number | undefined): bigint | undefined {\n\treturn v === undefined ? undefined : BigInt(v);\n}\n\nfunction matchSbtcTrigger(trigger: ChainTrigger, row: SbtcRow): boolean {\n\tconst expectedTopic = SBTC_TRIGGER_TO_TOPIC[trigger.type];\n\tif (!expectedTopic || row.topic !== expectedTopic) return false;\n\n\tif (trigger.type === \"sbtc_deposit\") {\n\t\tif (trigger.sender && row.sender !== trigger.sender) return false;\n\t\tif (trigger.bitcoinTxid && row.bitcoin_txid !== trigger.bitcoinTxid)\n\t\t\treturn false;\n\t\tif (trigger.requestId !== undefined && row.request_id !== trigger.requestId)\n\t\t\treturn false;\n\t\tconst min = toAmountBigInt(trigger.minAmount);\n\t\tconst max = toAmountBigInt(trigger.maxAmount);\n\t\tif (min !== undefined || max !== undefined) {\n\t\t\tif (row.amount === null) return false;\n\t\t\tconst amt = BigInt(row.amount);\n\t\t\tif (min !== undefined && amt < min) return false;\n\t\t\tif (max !== undefined && amt > max) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (trigger.type === \"sbtc_withdrawal_create\") {\n\t\tif (trigger.sender && row.sender !== trigger.sender) return false;\n\t\tif (trigger.requestId !== undefined && row.request_id !== trigger.requestId)\n\t\t\treturn false;\n\t\tconst min = toAmountBigInt(trigger.minAmount);\n\t\tconst max = toAmountBigInt(trigger.maxAmount);\n\t\tif (min !== undefined || max !== undefined) {\n\t\t\tif (row.amount === null) return false;\n\t\t\tconst amt = BigInt(row.amount);\n\t\t\tif (min !== undefined && amt < min) return false;\n\t\t\tif (max !== undefined && amt > max) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (trigger.type === \"sbtc_withdrawal_accept\") {\n\t\tif (trigger.requestId !== undefined && row.request_id !== trigger.requestId)\n\t\t\treturn false;\n\t\tif (trigger.sweepTxid && row.sweep_txid !== trigger.sweepTxid) return false;\n\t\treturn true;\n\t}\n\n\tif (trigger.type === \"sbtc_withdrawal_reject\") {\n\t\tif (trigger.requestId !== undefined && row.request_id !== trigger.requestId)\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction buildSbtcEventPayload(\n\ttriggerType: ChainTrigger[\"type\"],\n\trow: SbtcRow,\n): SbtcDepositEvent | SbtcWithdrawalEvent {\n\tif (triggerType === \"sbtc_deposit\") {\n\t\treturn {\n\t\t\ttopic: \"completed-deposit\",\n\t\t\trequest_id: row.request_id ?? 0,\n\t\t\tsender: row.sender,\n\t\t\tamount: row.amount ?? \"0\",\n\t\t\tbitcoin_txid: row.bitcoin_txid,\n\t\t\tblock_height: row.block_height,\n\t\t\ttx_id: row.tx_id,\n\t\t} satisfies SbtcDepositEvent;\n\t}\n\treturn {\n\t\ttopic: row.topic as\n\t\t\t| \"withdrawal-create\"\n\t\t\t| \"withdrawal-accept\"\n\t\t\t| \"withdrawal-reject\",\n\t\trequest_id: row.request_id ?? 0,\n\t\tsender: row.sender,\n\t\tamount: row.amount,\n\t\tsweep_txid: row.sweep_txid,\n\t\tsettlement_confirmed: false,\n\t\tblock_height: row.block_height,\n\t\ttx_id: row.tx_id,\n\t} satisfies SbtcWithdrawalEvent;\n}\n\n/**\n * Match active sBTC chain subscriptions against `sbtc_events` for one block\n * and write apply-envelope rows to `subscription_outbox`. Runs alongside\n * `emitChainOutbox` (which handles decoded_events). Same dedup-key scheme —\n * re-processing the same block is idempotent.\n */\nexport async function emitSbtcOutbox(\n\tdb: Kysely<Database>,\n\tchainSubs: Subscription[],\n\tblockHeight: number,\n\tblockHash: string,\n\topts?: { replayId?: string; sourceDb?: Kysely<Database> },\n): Promise<number> {\n\tconst sbtcSubs = chainSubs.filter((sub) =>\n\t\ttriggersOf(sub).some((t) => isSbtcTriggerType(t.type)),\n\t);\n\tif (sbtcSubs.length === 0) return 0;\n\n\tconst neededTopics = new Set<SbtcEventTopic>();\n\tfor (const sub of sbtcSubs) {\n\t\tfor (const trigger of triggersOf(sub)) {\n\t\t\tconst topic = SBTC_TRIGGER_TO_TOPIC[trigger.type];\n\t\t\tif (topic) neededTopics.add(topic);\n\t\t}\n\t}\n\n\t// `sbtc_events` is a SOURCE-plane table; the evaluator runs on the TARGET\n\t// handle (where an empty same-named table exists post-split). Read the decoded\n\t// rows from the source plane explicitly — reading off `db` here silently\n\t// matched zero rows under the live split, so sBTC webhooks never fired.\n\tconst sbtcRows = await loadSbtcEventsForBlock(\n\t\topts?.sourceDb ?? getSourceDb(),\n\t\tblockHeight,\n\t\t[...neededTopics],\n\t);\n\tif (sbtcRows.length === 0) return 0;\n\n\tconst replayId = opts?.replayId;\n\tconst outboxRows: InsertSubscriptionOutbox[] = [];\n\n\tfor (const sub of sbtcSubs) {\n\t\ttriggersOf(sub).forEach((trigger, triggerIndex) => {\n\t\t\tif (!isSbtcTriggerType(trigger.type)) return;\n\t\t\tconst meta: TriggerKeyMeta = {\n\t\t\t\tsubscriptionId: sub.id,\n\t\t\t\ttriggerIndex,\n\t\t\t\ttriggerType: trigger.type,\n\t\t\t};\n\t\t\tfor (const row of sbtcRows) {\n\t\t\t\tif (!matchSbtcTrigger(trigger, row)) continue;\n\t\t\t\tconst event = buildSbtcEventPayload(trigger.type, row);\n\t\t\t\toutboxRows.push(\n\t\t\t\t\tapplyRow(\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\tblockHeight,\n\t\t\t\t\t\tblockHash,\n\t\t\t\t\t\trow.tx_id,\n\t\t\t\t\t\trow.event_index,\n\t\t\t\t\t\tevent as unknown as Record<string, unknown>,\n\t\t\t\t\t\treplayId,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (outboxRows.length === 0) return 0;\n\tconst result = await db\n\t\t.insertInto(\"subscription_outbox\")\n\t\t.values(outboxRows)\n\t\t.onConflict((oc) =>\n\t\t\toc.columns([\"subscription_id\", \"dedup_key\"]).doNothing(),\n\t\t)\n\t\t.executeTakeFirst();\n\treturn Number(result.numInsertedOrUpdatedRows ?? 0);\n}\n\n/**\n * Emit the `sbtc_withdrawal_swept_confirmed` webhook. Unlike the per-block sBTC\n * path, this fires on a BITCOIN confirmation (async to Stacks blocks), so it\n * scans `sbtc_settlements` on its own cadence rather than per Stacks block.\n *\n * - Reads/advances a dedicated `last_settlement_scan_at` watermark on `db` (the\n * target/control plane). Null cursor → fast-forward to `now`, emit nothing\n * (forward-only, no historical backfill — mirrors the block cursor).\n * - Scans confirmed settlements with `confirmed_at > cursor` from the SOURCE\n * plane (`sbtc_settlements` is source), joined to the Stacks accept event +\n * block for the envelope anchor.\n * - Per-sub forward-only (`confirmed_at > sub.created_at`) + optional\n * requestId/sweepTxid filters; dedup on `(subscription_id, sweep_txid)` so a\n * reorg→un-confirm→re-confirm never double-fires.\n */\nexport async function emitSbtcSettlementOutbox(\n\tdb: Kysely<Database>,\n\tchainSubs: Subscription[],\n\topts?: { sourceDb?: Kysely<Database>; now?: Date },\n): Promise<number> {\n\tconst settlementSubs = chainSubs.filter((sub) =>\n\t\ttriggersOf(sub).some((t) => t.type === SETTLEMENT_TRIGGER_TYPE),\n\t);\n\tif (settlementSubs.length === 0) return 0;\n\n\tconst now = opts?.now ?? new Date();\n\tconst state = await db\n\t\t.selectFrom(\"trigger_evaluator_state\")\n\t\t.select(\"last_settlement_scan_at\")\n\t\t.where(\"id\", \"=\", true)\n\t\t.executeTakeFirst();\n\n\t// Uninitialized → fast-forward, emit nothing (forward-only).\n\tconst cursor = state?.last_settlement_scan_at ?? null;\n\tif (cursor === null) {\n\t\tawait db\n\t\t\t.updateTable(\"trigger_evaluator_state\")\n\t\t\t.set({ last_settlement_scan_at: now })\n\t\t\t.where(\"id\", \"=\", true)\n\t\t\t.execute();\n\t\treturn 0;\n\t}\n\n\tconst sourceDb = opts?.sourceDb ?? getSourceDb();\n\tconst rows = await sourceDb\n\t\t.selectFrom(\"sbtc_settlements as s\")\n\t\t.innerJoin(\"sbtc_events as e\", (join) =>\n\t\t\tjoin\n\t\t\t\t.onRef(\"e.sweep_txid\", \"=\", \"s.sweep_txid\")\n\t\t\t\t.on(\"e.topic\", \"=\", \"withdrawal-accept\")\n\t\t\t\t.on(\"e.canonical\", \"=\", true),\n\t\t)\n\t\t.innerJoin(\"blocks as b\", (join) =>\n\t\t\tjoin\n\t\t\t\t.onRef(\"b.height\", \"=\", \"e.block_height\")\n\t\t\t\t.on(\"b.canonical\", \"=\", true),\n\t\t)\n\t\t.where(\"s.settlement_confirmed\", \"=\", true)\n\t\t.where(\"s.confirmed_at\", \">\", cursor)\n\t\t.select([\n\t\t\t\"s.sweep_txid\",\n\t\t\t\"s.request_id\",\n\t\t\t\"s.btc_confirmations\",\n\t\t\t\"s.block_height as btc_block_height\",\n\t\t\t\"s.confirmed_at\",\n\t\t\t\"e.tx_id\",\n\t\t\t\"e.block_height as stacks_block_height\",\n\t\t\t\"e.amount\",\n\t\t\t\"e.sender\",\n\t\t\t\"b.hash as block_hash\",\n\t\t])\n\t\t.execute();\n\n\tif (rows.length === 0) return 0;\n\n\tconst outboxRows: InsertSubscriptionOutbox[] = [];\n\tlet maxConfirmedAt = cursor;\n\tfor (const row of rows) {\n\t\tconst confirmedAt = row.confirmed_at;\n\t\tif (confirmedAt && confirmedAt > maxConfirmedAt)\n\t\t\tmaxConfirmedAt = confirmedAt;\n\t\tif (!confirmedAt) continue;\n\t\tfor (const sub of settlementSubs) {\n\t\t\t// Forward-only: a sub only receives settlements confirmed after it existed.\n\t\t\tif (confirmedAt <= sub.created_at) continue;\n\t\t\tconst trigger = triggersOf(sub).find(\n\t\t\t\t(t) => t.type === SETTLEMENT_TRIGGER_TYPE,\n\t\t\t);\n\t\t\tif (!trigger || trigger.type !== SETTLEMENT_TRIGGER_TYPE) continue;\n\t\t\tif (\n\t\t\t\ttrigger.requestId !== undefined &&\n\t\t\t\ttrigger.requestId !== Number(row.request_id)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\ttrigger.sweepTxid !== undefined &&\n\t\t\t\ttrigger.sweepTxid !== row.sweep_txid\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutboxRows.push(settlementApplyRow(sub.id, row));\n\t\t}\n\t}\n\n\tif (outboxRows.length > 0) {\n\t\tawait db\n\t\t\t.insertInto(\"subscription_outbox\")\n\t\t\t.values(outboxRows)\n\t\t\t.onConflict((oc) =>\n\t\t\t\toc.columns([\"subscription_id\", \"dedup_key\"]).doNothing(),\n\t\t\t)\n\t\t\t.execute();\n\t}\n\n\t// Advance the watermark past every settlement scanned this pass (even ones\n\t// filtered out per-sub — they're in the past for any future subscriber).\n\tawait db\n\t\t.updateTable(\"trigger_evaluator_state\")\n\t\t.set({ last_settlement_scan_at: maxConfirmedAt })\n\t\t.where(\"id\", \"=\", true)\n\t\t.execute();\n\n\treturn outboxRows.length;\n}\n\ntype SettlementScanRow = {\n\tsweep_txid: string;\n\trequest_id: number;\n\tbtc_confirmations: number;\n\tbtc_block_height: number | null;\n\tconfirmed_at: Date | null;\n\ttx_id: string;\n\tstacks_block_height: number;\n\tamount: string | null;\n\tsender: string | null;\n\tblock_hash: string;\n};\n\nfunction settlementApplyRow(\n\tsubscriptionId: string,\n\trow: SettlementScanRow,\n): InsertSubscriptionOutbox {\n\tconst event: SbtcWithdrawalSweptConfirmedEvent = {\n\t\ttopic: \"withdrawal-swept-confirmed\",\n\t\trequest_id: Number(row.request_id),\n\t\tsweep_txid: row.sweep_txid,\n\t\tbtc_confirmations: row.btc_confirmations,\n\t\tbtc_block_height: row.btc_block_height,\n\t\tconfirmed_at: row.confirmed_at ? row.confirmed_at.toISOString() : null,\n\t\tamount: row.amount,\n\t\tsender: row.sender,\n\t};\n\tconst payload: ChainApplyEnvelope = {\n\t\taction: \"apply\",\n\t\tblock_hash: row.block_hash,\n\t\tblock_height: Number(row.stacks_block_height),\n\t\ttx_id: row.tx_id,\n\t\tcanonical: true,\n\t\ttrigger: SETTLEMENT_TRIGGER_TYPE,\n\t\tevent,\n\t};\n\treturn {\n\t\tsubscription_id: subscriptionId,\n\t\tkind: \"chain\",\n\t\tsubgraph_name: null,\n\t\ttable_name: null,\n\t\tblock_height: Number(row.stacks_block_height),\n\t\ttx_id: row.tx_id,\n\t\trow_pk: { sweep_txid: row.sweep_txid },\n\t\tevent_type: `chain.${SETTLEMENT_TRIGGER_TYPE}.apply`,\n\t\tpayload,\n\t\t// Settlement fires on a Bitcoin confirmation, not a Stacks block — dedup on\n\t\t// the sweep so a reorg→un-confirm→re-confirm cycle never re-delivers.\n\t\tdedup_key: `settlement:${subscriptionId}:${row.sweep_txid}`,\n\t};\n}\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "EA5D371359A4EA4864756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
|
@@ -1,4 +1,73 @@
|
|
|
1
|
-
import { AbiContract } from "@secondlayer/stacks/clarity";
|
|
1
|
+
import { AbiContract as AbiContract2 } from "@secondlayer/stacks/clarity";
|
|
2
|
+
import { UnwrapResponse } from "@secondlayer/stacks/actions";
|
|
3
|
+
import { AbiContract, ExtractFunctionArgs, ExtractFunctionOutput, ExtractReadOnlyFunctions, ToCamelCase } from "@secondlayer/stacks/clarity";
|
|
4
|
+
/**
|
|
5
|
+
* How long a read stays valid.
|
|
6
|
+
*
|
|
7
|
+
* - `per-block` (default): pinned to the block being processed, cached under
|
|
8
|
+
* its `index_block_hash`. Sound for any read-only function — reindexing the
|
|
9
|
+
* same block always returns the same value, and a reorg-replaced block has a
|
|
10
|
+
* different id so it can't inherit the orphaned answer.
|
|
11
|
+
* - `contract-constant`: the caller asserts the value cannot change for this
|
|
12
|
+
* contract and these args (SIP-010 `get-decimals`/`get-symbol`), so it is
|
|
13
|
+
* resolved ONCE instead of once per block. This is the mode that makes a
|
|
14
|
+
* backfill affordable — under `per-block` every block is a distinct key and
|
|
15
|
+
* therefore a distinct RPC. Declaring it on a value that does change pins the
|
|
16
|
+
* first answer forever, so it is opt-in and never inferred.
|
|
17
|
+
*/
|
|
18
|
+
type ChainReadCacheMode = "per-block" | "contract-constant";
|
|
19
|
+
type ChainReadOptions = {
|
|
20
|
+
cache?: ChainReadCacheMode
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The chain-read surface, fully typed by an ABI.
|
|
24
|
+
*
|
|
25
|
+
* Shaped like `getContract` from `@secondlayer/stacks` — the same ABI in, the
|
|
26
|
+
* same camelCased read methods out — minus `call`/`buildCall`: a handler
|
|
27
|
+
* indexes the chain, it never writes to it.
|
|
28
|
+
*
|
|
29
|
+
* Reached through {@link readContractAt} rather than off `ctx.client`
|
|
30
|
+
* directly: an ABI-generic method living on the context interface makes every
|
|
31
|
+
* structural comparison of a subgraph definition instantiate it, which exceeds
|
|
32
|
+
* TS's depth budget. At a call site the ABI is already concrete and it costs
|
|
33
|
+
* nothing.
|
|
34
|
+
*/
|
|
35
|
+
interface ChainReadClient {
|
|
36
|
+
/**
|
|
37
|
+
* Read-only methods of a contract, evaluated against the exact block being
|
|
38
|
+
* processed.
|
|
39
|
+
*
|
|
40
|
+
* Every call is pinned to the block's `index_block_hash`, so a handler is a
|
|
41
|
+
* pure function of its block: reindexing a range produces byte-identical
|
|
42
|
+
* rows. Reading at the node's tip instead would make the same reindex
|
|
43
|
+
* return different values — that is the corruption this refuses to allow,
|
|
44
|
+
* so a block whose id was never persisted throws rather than falling back.
|
|
45
|
+
*
|
|
46
|
+
* Results are memoized in Postgres, so a value is fetched once per block
|
|
47
|
+
* rather than once per event (or once per contract with
|
|
48
|
+
* `cache: "contract-constant"`).
|
|
49
|
+
*/
|
|
50
|
+
contract<const C extends AbiContract>(contractId: string, abi: C, options?: ChainReadOptions): {
|
|
51
|
+
read: ChainReadMethods<C>
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The camelCased read methods of an ABI. Spelled out rather than reused from
|
|
56
|
+
* `ContractInstance<C>["read"]`: that type is a conditional over the codegen
|
|
57
|
+
* brand, and evaluating it wherever a subgraph definition is structurally
|
|
58
|
+
* compared pushes TS past its instantiation depth.
|
|
59
|
+
*/
|
|
60
|
+
type ChainReadMethods<C extends AbiContract> = { [N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>] : (args: ExtractFunctionArgs<C, N>) => Promise<UnwrapResponse<ExtractFunctionOutput<C, N>>> };
|
|
61
|
+
/**
|
|
62
|
+
* `ChainReadClient` with the ABI generic erased. Structurally cheap, so the
|
|
63
|
+
* base `SubgraphContext` can carry it; `TypedSubgraphContext` uses the real
|
|
64
|
+
* one and handlers get full inference.
|
|
65
|
+
*/
|
|
66
|
+
interface ErasedChainReadClient {
|
|
67
|
+
contract(contractId: string, abi: unknown, options?: ChainReadOptions): {
|
|
68
|
+
read: Record<string, (args?: Record<string, unknown>) => Promise<unknown>>
|
|
69
|
+
};
|
|
70
|
+
}
|
|
2
71
|
/** Supported column types for subgraph schemas */
|
|
3
72
|
type ColumnType = "text" | "uint" | "int" | "principal" | "boolean" | "timestamp" | "jsonb";
|
|
4
73
|
/** Column definition in a subgraph table */
|
|
@@ -175,7 +244,7 @@ interface ContractCallFilter extends TraitScope, FactoryScope {
|
|
|
175
244
|
* definition and used at runtime to decode args by name. Omit to keep
|
|
176
245
|
* `event.args` as a positional `unknown[]`.
|
|
177
246
|
*/
|
|
178
|
-
abi?:
|
|
247
|
+
abi?: AbiContract2;
|
|
179
248
|
}
|
|
180
249
|
interface ContractDeployFilter {
|
|
181
250
|
type: "contract_deploy";
|
|
@@ -246,8 +315,21 @@ interface SubgraphContext {
|
|
|
246
315
|
hash: string
|
|
247
316
|
timestamp: number
|
|
248
317
|
burnBlockHeight: number
|
|
318
|
+
/** Nakamoto StacksBlockId, when the block row carries one. */
|
|
319
|
+
indexBlockHash?: string | null
|
|
249
320
|
};
|
|
250
321
|
tx: TxMeta;
|
|
322
|
+
/**
|
|
323
|
+
* Read-only contract calls pinned to this block. Cached, so the same
|
|
324
|
+
* (contract, function, args) is fetched once per block rather than once
|
|
325
|
+
* per event.
|
|
326
|
+
*
|
|
327
|
+
* Erased here on purpose: this interface is compared structurally wherever
|
|
328
|
+
* a subgraph definition is passed around, and carrying an ABI-generic
|
|
329
|
+
* method pushes those comparisons past TS's instantiation depth. Handlers
|
|
330
|
+
* receive `TypedSubgraphContext`, which exposes the fully typed version.
|
|
331
|
+
*/
|
|
332
|
+
client: ErasedChainReadClient;
|
|
251
333
|
insert(table: string, row: Record<string, unknown>): void;
|
|
252
334
|
update(table: string, where: Record<string, unknown>, set: Record<string, unknown>): void;
|
|
253
335
|
upsert(table: string, key: Record<string, unknown>, row: Record<string, unknown>): void;
|
|
@@ -300,9 +382,9 @@ interface SubgraphDefinition {
|
|
|
300
382
|
/** Handler functions — keys must match source names (or "*" for catch-all) */
|
|
301
383
|
handlers: Record<string, SubgraphHandler>;
|
|
302
384
|
}
|
|
303
|
-
import { Database } from "@secondlayer/shared/db";
|
|
304
|
-
import { Kysely, Transaction } from "kysely";
|
|
305
|
-
type AnyDb =
|
|
385
|
+
import { Database as Database2 } from "@secondlayer/shared/db";
|
|
386
|
+
import { Kysely as Kysely2, Transaction } from "kysely";
|
|
387
|
+
type AnyDb = Kysely2<Database2> | Transaction<Database2>;
|
|
306
388
|
interface WriteOp {
|
|
307
389
|
kind: "insert" | "update" | "delete" | "increment";
|
|
308
390
|
table: string;
|
|
@@ -331,6 +413,13 @@ interface BlockMeta {
|
|
|
331
413
|
hash: string;
|
|
332
414
|
timestamp: number;
|
|
333
415
|
burnBlockHeight: number;
|
|
416
|
+
/**
|
|
417
|
+
* Nakamoto StacksBlockId — the identifier `?tip=` accepts, and the only way
|
|
418
|
+
* to pin a read-only call to THIS block. Null on rows ingested before it
|
|
419
|
+
* was persisted; `ctx.client.readOnly` refuses to run rather than silently
|
|
420
|
+
* reading at the node's tip.
|
|
421
|
+
*/
|
|
422
|
+
indexBlockHash?: string | null;
|
|
334
423
|
}
|
|
335
424
|
interface TxMeta2 {
|
|
336
425
|
txId: string;
|
|
@@ -375,7 +464,15 @@ declare class SubgraphContext2 {
|
|
|
375
464
|
* journal would just be churn the pruner deletes.
|
|
376
465
|
*/
|
|
377
466
|
private readonly journal;
|
|
467
|
+
/** Memoized per block; see the `client` getter. */
|
|
468
|
+
protected _client?: ChainReadClient;
|
|
378
469
|
constructor(db: AnyDb, pgSchemaName: string, subgraphSchema: SubgraphSchema, block: BlockMeta, tx: TxMeta2, byo?: boolean, journal?: boolean);
|
|
470
|
+
/**
|
|
471
|
+
* Chain reads pinned to THIS block. Lazily built so a handler that never
|
|
472
|
+
* reads never touches the node config, and so the in-memory test context
|
|
473
|
+
* can override it without a node.
|
|
474
|
+
*/
|
|
475
|
+
get client(): ChainReadClient;
|
|
379
476
|
get tx(): TxMeta2;
|
|
380
477
|
/** Update the current transaction context (used by runner between events) */
|
|
381
478
|
setTx(tx: TxMeta2): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AbiContract } from "@secondlayer/stacks/clarity";
|
|
1
|
+
import { AbiContract as AbiContract2 } from "@secondlayer/stacks/clarity";
|
|
2
2
|
/** Supported column types for subgraph schemas */
|
|
3
3
|
type ColumnType = "text" | "uint" | "int" | "principal" | "boolean" | "timestamp" | "jsonb";
|
|
4
4
|
/** STX event filters */
|
|
@@ -130,7 +130,7 @@ interface ContractCallFilter extends TraitScope, FactoryScope {
|
|
|
130
130
|
* definition and used at runtime to decode args by name. Omit to keep
|
|
131
131
|
* `event.args` as a positional `unknown[]`.
|
|
132
132
|
*/
|
|
133
|
-
abi?:
|
|
133
|
+
abi?: AbiContract2;
|
|
134
134
|
}
|
|
135
135
|
interface ContractDeployFilter {
|
|
136
136
|
type: "contract_deploy";
|
|
@@ -3,8 +3,8 @@ interface ProcessBlockTiming {
|
|
|
3
3
|
handlerMs: number;
|
|
4
4
|
flushMs: number;
|
|
5
5
|
}
|
|
6
|
-
import { Database } from "@secondlayer/shared/db";
|
|
7
|
-
import { Kysely } from "kysely";
|
|
6
|
+
import { Database as Database2 } from "@secondlayer/shared/db";
|
|
7
|
+
import { Kysely as Kysely2 } from "kysely";
|
|
8
8
|
/**
|
|
9
9
|
* Accumulates per-block timing stats and flushes to DB periodically.
|
|
10
10
|
* One instance per subgraph during catchup/reindex/live processing.
|
|
@@ -17,7 +17,7 @@ declare class StatsAccumulator {
|
|
|
17
17
|
constructor(subgraphName: string, isCatchup: boolean);
|
|
18
18
|
record(timing: ProcessBlockTiming, opsCount: number): void;
|
|
19
19
|
shouldFlush(): boolean;
|
|
20
|
-
flush(db:
|
|
20
|
+
flush(db: Kysely2<Database2>): Promise<void>;
|
|
21
21
|
private newEntry;
|
|
22
22
|
}
|
|
23
23
|
export { StatsAccumulator };
|
|
@@ -1,4 +1,32 @@
|
|
|
1
|
-
import { AbiContract } from "@secondlayer/stacks/clarity";
|
|
1
|
+
import { AbiContract as AbiContract2 } from "@secondlayer/stacks/clarity";
|
|
2
|
+
/**
|
|
3
|
+
* How long a read stays valid.
|
|
4
|
+
*
|
|
5
|
+
* - `per-block` (default): pinned to the block being processed, cached under
|
|
6
|
+
* its `index_block_hash`. Sound for any read-only function — reindexing the
|
|
7
|
+
* same block always returns the same value, and a reorg-replaced block has a
|
|
8
|
+
* different id so it can't inherit the orphaned answer.
|
|
9
|
+
* - `contract-constant`: the caller asserts the value cannot change for this
|
|
10
|
+
* contract and these args (SIP-010 `get-decimals`/`get-symbol`), so it is
|
|
11
|
+
* resolved ONCE instead of once per block. This is the mode that makes a
|
|
12
|
+
* backfill affordable — under `per-block` every block is a distinct key and
|
|
13
|
+
* therefore a distinct RPC. Declaring it on a value that does change pins the
|
|
14
|
+
* first answer forever, so it is opt-in and never inferred.
|
|
15
|
+
*/
|
|
16
|
+
type ChainReadCacheMode = "per-block" | "contract-constant";
|
|
17
|
+
type ChainReadOptions = {
|
|
18
|
+
cache?: ChainReadCacheMode
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* `ChainReadClient` with the ABI generic erased. Structurally cheap, so the
|
|
22
|
+
* base `SubgraphContext` can carry it; `TypedSubgraphContext` uses the real
|
|
23
|
+
* one and handlers get full inference.
|
|
24
|
+
*/
|
|
25
|
+
interface ErasedChainReadClient {
|
|
26
|
+
contract(contractId: string, abi: unknown, options?: ChainReadOptions): {
|
|
27
|
+
read: Record<string, (args?: Record<string, unknown>) => Promise<unknown>>
|
|
28
|
+
};
|
|
29
|
+
}
|
|
2
30
|
/** Supported column types for subgraph schemas */
|
|
3
31
|
type ColumnType = "text" | "uint" | "int" | "principal" | "boolean" | "timestamp" | "jsonb";
|
|
4
32
|
/** Column definition in a subgraph table */
|
|
@@ -175,7 +203,7 @@ interface ContractCallFilter extends TraitScope, FactoryScope {
|
|
|
175
203
|
* definition and used at runtime to decode args by name. Omit to keep
|
|
176
204
|
* `event.args` as a positional `unknown[]`.
|
|
177
205
|
*/
|
|
178
|
-
abi?:
|
|
206
|
+
abi?: AbiContract2;
|
|
179
207
|
}
|
|
180
208
|
interface ContractDeployFilter {
|
|
181
209
|
type: "contract_deploy";
|
|
@@ -246,8 +274,21 @@ interface SubgraphContext {
|
|
|
246
274
|
hash: string
|
|
247
275
|
timestamp: number
|
|
248
276
|
burnBlockHeight: number
|
|
277
|
+
/** Nakamoto StacksBlockId, when the block row carries one. */
|
|
278
|
+
indexBlockHash?: string | null
|
|
249
279
|
};
|
|
250
280
|
tx: TxMeta;
|
|
281
|
+
/**
|
|
282
|
+
* Read-only contract calls pinned to this block. Cached, so the same
|
|
283
|
+
* (contract, function, args) is fetched once per block rather than once
|
|
284
|
+
* per event.
|
|
285
|
+
*
|
|
286
|
+
* Erased here on purpose: this interface is compared structurally wherever
|
|
287
|
+
* a subgraph definition is passed around, and carrying an ABI-generic
|
|
288
|
+
* method pushes those comparisons past TS's instantiation depth. Handlers
|
|
289
|
+
* receive `TypedSubgraphContext`, which exposes the fully typed version.
|
|
290
|
+
*/
|
|
291
|
+
client: ErasedChainReadClient;
|
|
251
292
|
insert(table: string, row: Record<string, unknown>): void;
|
|
252
293
|
update(table: string, where: Record<string, unknown>, set: Record<string, unknown>): void;
|
|
253
294
|
upsert(table: string, key: Record<string, unknown>, row: Record<string, unknown>): void;
|
|
@@ -311,9 +352,9 @@ interface GeneratedSQL {
|
|
|
311
352
|
* each with auto-columns and indexes.
|
|
312
353
|
*/
|
|
313
354
|
declare function generateSubgraphSQL(def: SubgraphDefinition, schemaNameOverride?: string): GeneratedSQL;
|
|
314
|
-
import { Database } from "@secondlayer/shared/db";
|
|
315
|
-
import { Kysely } from "kysely";
|
|
316
|
-
type AnyDb =
|
|
355
|
+
import { Database as Database2 } from "@secondlayer/shared/db";
|
|
356
|
+
import { Kysely as Kysely2 } from "kysely";
|
|
357
|
+
type AnyDb = Kysely2<Database2>;
|
|
317
358
|
interface TableDiff {
|
|
318
359
|
/** Tables added to the schema */
|
|
319
360
|
addedTables: string[];
|