@mikeatlast/ponder 0.16.1-fork.1
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/CHANGELOG.md +3415 -0
- package/README.md +186 -0
- package/dist/esm/bin/commands/codegen.js +46 -0
- package/dist/esm/bin/commands/codegen.js.map +1 -0
- package/dist/esm/bin/commands/createViews.js +196 -0
- package/dist/esm/bin/commands/createViews.js.map +1 -0
- package/dist/esm/bin/commands/dev.js +430 -0
- package/dist/esm/bin/commands/dev.js.map +1 -0
- package/dist/esm/bin/commands/list.js +148 -0
- package/dist/esm/bin/commands/list.js.map +1 -0
- package/dist/esm/bin/commands/prune.js +223 -0
- package/dist/esm/bin/commands/prune.js.map +1 -0
- package/dist/esm/bin/commands/serve.js +198 -0
- package/dist/esm/bin/commands/serve.js.map +1 -0
- package/dist/esm/bin/commands/start.js +253 -0
- package/dist/esm/bin/commands/start.js.map +1 -0
- package/dist/esm/bin/isolatedController.js +200 -0
- package/dist/esm/bin/isolatedController.js.map +1 -0
- package/dist/esm/bin/isolatedWorker.js +146 -0
- package/dist/esm/bin/isolatedWorker.js.map +1 -0
- package/dist/esm/bin/ponder.js +137 -0
- package/dist/esm/bin/ponder.js.map +1 -0
- package/dist/esm/bin/utils/codegen.js +25 -0
- package/dist/esm/bin/utils/codegen.js.map +1 -0
- package/dist/esm/bin/utils/exit.js +100 -0
- package/dist/esm/bin/utils/exit.js.map +1 -0
- package/dist/esm/build/config.js +745 -0
- package/dist/esm/build/config.js.map +1 -0
- package/dist/esm/build/factory.js +82 -0
- package/dist/esm/build/factory.js.map +1 -0
- package/dist/esm/build/index.js +567 -0
- package/dist/esm/build/index.js.map +1 -0
- package/dist/esm/build/plugin.js +53 -0
- package/dist/esm/build/plugin.js.map +1 -0
- package/dist/esm/build/pre.js +83 -0
- package/dist/esm/build/pre.js.map +1 -0
- package/dist/esm/build/schema.js +202 -0
- package/dist/esm/build/schema.js.map +1 -0
- package/dist/esm/build/stacktrace.js +137 -0
- package/dist/esm/build/stacktrace.js.map +1 -0
- package/dist/esm/client/index.js +441 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/config/address.js +2 -0
- package/dist/esm/config/address.js.map +1 -0
- package/dist/esm/config/eventFilter.js +2 -0
- package/dist/esm/config/eventFilter.js.map +1 -0
- package/dist/esm/config/index.js +2 -0
- package/dist/esm/config/index.js.map +1 -0
- package/dist/esm/config/utilityTypes.js +2 -0
- package/dist/esm/config/utilityTypes.js.map +1 -0
- package/dist/esm/database/actions.js +445 -0
- package/dist/esm/database/actions.js.map +1 -0
- package/dist/esm/database/index.js +604 -0
- package/dist/esm/database/index.js.map +1 -0
- package/dist/esm/database/queryBuilder.js +314 -0
- package/dist/esm/database/queryBuilder.js.map +1 -0
- package/dist/esm/drizzle/bigint.js +38 -0
- package/dist/esm/drizzle/bigint.js.map +1 -0
- package/dist/esm/drizzle/bytes.js +47 -0
- package/dist/esm/drizzle/bytes.js.map +1 -0
- package/dist/esm/drizzle/hex.js +40 -0
- package/dist/esm/drizzle/hex.js.map +1 -0
- package/dist/esm/drizzle/index.js +28 -0
- package/dist/esm/drizzle/index.js.map +1 -0
- package/dist/esm/drizzle/json.js +123 -0
- package/dist/esm/drizzle/json.js.map +1 -0
- package/dist/esm/drizzle/kit/index.js +927 -0
- package/dist/esm/drizzle/kit/index.js.map +1 -0
- package/dist/esm/drizzle/onchain.js +184 -0
- package/dist/esm/drizzle/onchain.js.map +1 -0
- package/dist/esm/drizzle/text.js +61 -0
- package/dist/esm/drizzle/text.js.map +1 -0
- package/dist/esm/graphql/graphiql.html.js +59 -0
- package/dist/esm/graphql/graphiql.html.js.map +1 -0
- package/dist/esm/graphql/index.js +934 -0
- package/dist/esm/graphql/index.js.map +1 -0
- package/dist/esm/graphql/json.js +42 -0
- package/dist/esm/graphql/json.js.map +1 -0
- package/dist/esm/graphql/middleware.js +83 -0
- package/dist/esm/graphql/middleware.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/indexing/addStackTrace.js +54 -0
- package/dist/esm/indexing/addStackTrace.js.map +1 -0
- package/dist/esm/indexing/client.js +675 -0
- package/dist/esm/indexing/client.js.map +1 -0
- package/dist/esm/indexing/index.js +663 -0
- package/dist/esm/indexing/index.js.map +1 -0
- package/dist/esm/indexing/profile.js +584 -0
- package/dist/esm/indexing/profile.js.map +1 -0
- package/dist/esm/indexing-store/cache.js +666 -0
- package/dist/esm/indexing-store/cache.js.map +1 -0
- package/dist/esm/indexing-store/index.js +461 -0
- package/dist/esm/indexing-store/index.js.map +1 -0
- package/dist/esm/indexing-store/profile.js +428 -0
- package/dist/esm/indexing-store/profile.js.map +1 -0
- package/dist/esm/indexing-store/utils.js +111 -0
- package/dist/esm/indexing-store/utils.js.map +1 -0
- package/dist/esm/internal/common.js +2 -0
- package/dist/esm/internal/common.js.map +1 -0
- package/dist/esm/internal/errors.js +300 -0
- package/dist/esm/internal/errors.js.map +1 -0
- package/dist/esm/internal/logger.js +178 -0
- package/dist/esm/internal/logger.js.map +1 -0
- package/dist/esm/internal/metrics.js +1049 -0
- package/dist/esm/internal/metrics.js.map +1 -0
- package/dist/esm/internal/options.js +73 -0
- package/dist/esm/internal/options.js.map +1 -0
- package/dist/esm/internal/shutdown.js +24 -0
- package/dist/esm/internal/shutdown.js.map +1 -0
- package/dist/esm/internal/telemetry.js +200 -0
- package/dist/esm/internal/telemetry.js.map +1 -0
- package/dist/esm/internal/types.js +2 -0
- package/dist/esm/internal/types.js.map +1 -0
- package/dist/esm/rpc/actions.js +988 -0
- package/dist/esm/rpc/actions.js.map +1 -0
- package/dist/esm/rpc/http.js +130 -0
- package/dist/esm/rpc/http.js.map +1 -0
- package/dist/esm/rpc/index.js +749 -0
- package/dist/esm/rpc/index.js.map +1 -0
- package/dist/esm/runtime/events.js +664 -0
- package/dist/esm/runtime/events.js.map +1 -0
- package/dist/esm/runtime/filter.js +476 -0
- package/dist/esm/runtime/filter.js.map +1 -0
- package/dist/esm/runtime/fragments.js +478 -0
- package/dist/esm/runtime/fragments.js.map +1 -0
- package/dist/esm/runtime/historical.js +954 -0
- package/dist/esm/runtime/historical.js.map +1 -0
- package/dist/esm/runtime/index.js +316 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/init.js +12 -0
- package/dist/esm/runtime/init.js.map +1 -0
- package/dist/esm/runtime/isolated.js +464 -0
- package/dist/esm/runtime/isolated.js.map +1 -0
- package/dist/esm/runtime/multichain.js +511 -0
- package/dist/esm/runtime/multichain.js.map +1 -0
- package/dist/esm/runtime/omnichain.js +546 -0
- package/dist/esm/runtime/omnichain.js.map +1 -0
- package/dist/esm/runtime/realtime.js +722 -0
- package/dist/esm/runtime/realtime.js.map +1 -0
- package/dist/esm/server/error.js +56 -0
- package/dist/esm/server/error.js.map +1 -0
- package/dist/esm/server/index.js +121 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/sync-historical/index.js +703 -0
- package/dist/esm/sync-historical/index.js.map +1 -0
- package/dist/esm/sync-realtime/bloom.js +76 -0
- package/dist/esm/sync-realtime/bloom.js.map +1 -0
- package/dist/esm/sync-realtime/index.js +918 -0
- package/dist/esm/sync-realtime/index.js.map +1 -0
- package/dist/esm/sync-store/encode.js +105 -0
- package/dist/esm/sync-store/encode.js.map +1 -0
- package/dist/esm/sync-store/index.js +885 -0
- package/dist/esm/sync-store/index.js.map +1 -0
- package/dist/esm/sync-store/migrations.js +1595 -0
- package/dist/esm/sync-store/migrations.js.map +1 -0
- package/dist/esm/sync-store/schema.js +181 -0
- package/dist/esm/sync-store/schema.js.map +1 -0
- package/dist/esm/types/db.js +2 -0
- package/dist/esm/types/db.js.map +1 -0
- package/dist/esm/types/eth.js +2 -0
- package/dist/esm/types/eth.js.map +1 -0
- package/dist/esm/types/utils.js +2 -0
- package/dist/esm/types/utils.js.map +1 -0
- package/dist/esm/types/virtual.js +2 -0
- package/dist/esm/types/virtual.js.map +1 -0
- package/dist/esm/ui/app.js +157 -0
- package/dist/esm/ui/app.js.map +1 -0
- package/dist/esm/ui/index.js +29 -0
- package/dist/esm/ui/index.js.map +1 -0
- package/dist/esm/ui/patch.js +140 -0
- package/dist/esm/ui/patch.js.map +1 -0
- package/dist/esm/utils/abi.js +55 -0
- package/dist/esm/utils/abi.js.map +1 -0
- package/dist/esm/utils/bigint.js +37 -0
- package/dist/esm/utils/bigint.js.map +1 -0
- package/dist/esm/utils/chains.js +21 -0
- package/dist/esm/utils/chains.js.map +1 -0
- package/dist/esm/utils/checkpoint.js +139 -0
- package/dist/esm/utils/checkpoint.js.map +1 -0
- package/dist/esm/utils/chunk.js +8 -0
- package/dist/esm/utils/chunk.js.map +1 -0
- package/dist/esm/utils/copy.js +129 -0
- package/dist/esm/utils/copy.js.map +1 -0
- package/dist/esm/utils/date.js +27 -0
- package/dist/esm/utils/date.js.map +1 -0
- package/dist/esm/utils/debug.js +2 -0
- package/dist/esm/utils/debug.js.map +1 -0
- package/dist/esm/utils/decodeAbiParameters.js +290 -0
- package/dist/esm/utils/decodeAbiParameters.js.map +1 -0
- package/dist/esm/utils/decodeEventLog.js +75 -0
- package/dist/esm/utils/decodeEventLog.js.map +1 -0
- package/dist/esm/utils/dedupe.js +29 -0
- package/dist/esm/utils/dedupe.js.map +1 -0
- package/dist/esm/utils/duplicates.js +19 -0
- package/dist/esm/utils/duplicates.js.map +1 -0
- package/dist/esm/utils/estimate.js +6 -0
- package/dist/esm/utils/estimate.js.map +1 -0
- package/dist/esm/utils/finality.js +38 -0
- package/dist/esm/utils/finality.js.map +1 -0
- package/dist/esm/utils/format.js +20 -0
- package/dist/esm/utils/format.js.map +1 -0
- package/dist/esm/utils/generators.js +121 -0
- package/dist/esm/utils/generators.js.map +1 -0
- package/dist/esm/utils/hash.js +11 -0
- package/dist/esm/utils/hash.js.map +1 -0
- package/dist/esm/utils/interval.js +171 -0
- package/dist/esm/utils/interval.js.map +1 -0
- package/dist/esm/utils/lowercase.js +7 -0
- package/dist/esm/utils/lowercase.js.map +1 -0
- package/dist/esm/utils/mutex.js +26 -0
- package/dist/esm/utils/mutex.js.map +1 -0
- package/dist/esm/utils/never.js +4 -0
- package/dist/esm/utils/never.js.map +1 -0
- package/dist/esm/utils/offset.js +101 -0
- package/dist/esm/utils/offset.js.map +1 -0
- package/dist/esm/utils/order.js +18 -0
- package/dist/esm/utils/order.js.map +1 -0
- package/dist/esm/utils/partition.js +46 -0
- package/dist/esm/utils/partition.js.map +1 -0
- package/dist/esm/utils/pg.js +175 -0
- package/dist/esm/utils/pg.js.map +1 -0
- package/dist/esm/utils/pglite.js +80 -0
- package/dist/esm/utils/pglite.js.map +1 -0
- package/dist/esm/utils/port.js +30 -0
- package/dist/esm/utils/port.js.map +1 -0
- package/dist/esm/utils/print.js +23 -0
- package/dist/esm/utils/print.js.map +1 -0
- package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
- package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
- package/dist/esm/utils/promiseWithResolvers.js +13 -0
- package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
- package/dist/esm/utils/queue.js +150 -0
- package/dist/esm/utils/queue.js.map +1 -0
- package/dist/esm/utils/range.js +8 -0
- package/dist/esm/utils/range.js.map +1 -0
- package/dist/esm/utils/result.js +10 -0
- package/dist/esm/utils/result.js.map +1 -0
- package/dist/esm/utils/sql-parse.js +1326 -0
- package/dist/esm/utils/sql-parse.js.map +1 -0
- package/dist/esm/utils/timer.js +9 -0
- package/dist/esm/utils/timer.js.map +1 -0
- package/dist/esm/utils/truncate.js +15 -0
- package/dist/esm/utils/truncate.js.map +1 -0
- package/dist/esm/utils/wait.js +10 -0
- package/dist/esm/utils/wait.js.map +1 -0
- package/dist/esm/utils/zipper.js +67 -0
- package/dist/esm/utils/zipper.js.map +1 -0
- package/dist/types/bin/commands/codegen.d.ts +5 -0
- package/dist/types/bin/commands/codegen.d.ts.map +1 -0
- package/dist/types/bin/commands/createViews.d.ts +8 -0
- package/dist/types/bin/commands/createViews.d.ts.map +1 -0
- package/dist/types/bin/commands/dev.d.ts +5 -0
- package/dist/types/bin/commands/dev.d.ts.map +1 -0
- package/dist/types/bin/commands/list.d.ts +5 -0
- package/dist/types/bin/commands/list.d.ts.map +1 -0
- package/dist/types/bin/commands/prune.d.ts +5 -0
- package/dist/types/bin/commands/prune.d.ts.map +1 -0
- package/dist/types/bin/commands/serve.d.ts +5 -0
- package/dist/types/bin/commands/serve.d.ts.map +1 -0
- package/dist/types/bin/commands/start.d.ts +19 -0
- package/dist/types/bin/commands/start.d.ts.map +1 -0
- package/dist/types/bin/isolatedController.d.ts +13 -0
- package/dist/types/bin/isolatedController.d.ts.map +1 -0
- package/dist/types/bin/isolatedWorker.d.ts +9 -0
- package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
- package/dist/types/bin/ponder.d.ts +37 -0
- package/dist/types/bin/ponder.d.ts.map +1 -0
- package/dist/types/bin/utils/codegen.d.ts +6 -0
- package/dist/types/bin/utils/codegen.d.ts.map +1 -0
- package/dist/types/bin/utils/exit.d.ts +10 -0
- package/dist/types/bin/utils/exit.d.ts.map +1 -0
- package/dist/types/build/config.d.ts +97 -0
- package/dist/types/build/config.d.ts.map +1 -0
- package/dist/types/build/factory.d.ts +15 -0
- package/dist/types/build/factory.d.ts.map +1 -0
- package/dist/types/build/index.d.ts +84 -0
- package/dist/types/build/index.d.ts.map +1 -0
- package/dist/types/build/plugin.d.ts +4 -0
- package/dist/types/build/plugin.d.ts.map +1 -0
- package/dist/types/build/pre.d.ts +29 -0
- package/dist/types/build/pre.d.ts.map +1 -0
- package/dist/types/build/schema.d.ts +20 -0
- package/dist/types/build/schema.d.ts.map +1 -0
- package/dist/types/build/stacktrace.d.ts +13 -0
- package/dist/types/build/stacktrace.d.ts.map +1 -0
- package/dist/types/client/index.d.ts +27 -0
- package/dist/types/client/index.d.ts.map +1 -0
- package/dist/types/config/address.d.ts +34 -0
- package/dist/types/config/address.d.ts.map +1 -0
- package/dist/types/config/eventFilter.d.ts +18 -0
- package/dist/types/config/eventFilter.d.ts.map +1 -0
- package/dist/types/config/index.d.ts +144 -0
- package/dist/types/config/index.d.ts.map +1 -0
- package/dist/types/config/utilityTypes.d.ts +43 -0
- package/dist/types/config/utilityTypes.d.ts.map +1 -0
- package/dist/types/database/actions.d.ts +99 -0
- package/dist/types/database/actions.d.ts.map +1 -0
- package/dist/types/database/index.d.ts +493 -0
- package/dist/types/database/index.d.ts.map +1 -0
- package/dist/types/database/queryBuilder.d.ts +65 -0
- package/dist/types/database/queryBuilder.d.ts.map +1 -0
- package/dist/types/drizzle/bigint.d.ts +25 -0
- package/dist/types/drizzle/bigint.d.ts.map +1 -0
- package/dist/types/drizzle/bytes.d.ts +31 -0
- package/dist/types/drizzle/bytes.d.ts.map +1 -0
- package/dist/types/drizzle/hex.d.ts +25 -0
- package/dist/types/drizzle/hex.d.ts.map +1 -0
- package/dist/types/drizzle/index.d.ts +6 -0
- package/dist/types/drizzle/index.d.ts.map +1 -0
- package/dist/types/drizzle/json.d.ts +51 -0
- package/dist/types/drizzle/json.d.ts.map +1 -0
- package/dist/types/drizzle/kit/index.d.ts +187 -0
- package/dist/types/drizzle/kit/index.d.ts.map +1 -0
- package/dist/types/drizzle/onchain.d.ts +298 -0
- package/dist/types/drizzle/onchain.d.ts.map +1 -0
- package/dist/types/drizzle/text.d.ts +29 -0
- package/dist/types/drizzle/text.d.ts.map +1 -0
- package/dist/types/graphql/graphiql.html.d.ts +2 -0
- package/dist/types/graphql/graphiql.html.d.ts.map +1 -0
- package/dist/types/graphql/index.d.ts +12 -0
- package/dist/types/graphql/index.d.ts.map +1 -0
- package/dist/types/graphql/json.d.ts +3 -0
- package/dist/types/graphql/json.d.ts.map +1 -0
- package/dist/types/graphql/middleware.d.ts +29 -0
- package/dist/types/graphql/middleware.d.ts.map +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/indexing/addStackTrace.d.ts +3 -0
- package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
- package/dist/types/indexing/client.d.ts +154 -0
- package/dist/types/indexing/client.d.ts.map +1 -0
- package/dist/types/indexing/index.d.ts +72 -0
- package/dist/types/indexing/index.d.ts.map +1 -0
- package/dist/types/indexing/profile.d.ts +16 -0
- package/dist/types/indexing/profile.d.ts.map +1 -0
- package/dist/types/indexing-store/cache.d.ts +115 -0
- package/dist/types/indexing-store/cache.d.ts.map +1 -0
- package/dist/types/indexing-store/index.d.ts +24 -0
- package/dist/types/indexing-store/index.d.ts.map +1 -0
- package/dist/types/indexing-store/profile.d.ts +7 -0
- package/dist/types/indexing-store/profile.d.ts.map +1 -0
- package/dist/types/indexing-store/utils.d.ts +19 -0
- package/dist/types/indexing-store/utils.d.ts.map +1 -0
- package/dist/types/internal/common.d.ts +15 -0
- package/dist/types/internal/common.d.ts.map +1 -0
- package/dist/types/internal/errors.d.ts +101 -0
- package/dist/types/internal/errors.d.ts.map +1 -0
- package/dist/types/internal/logger.d.ts +37 -0
- package/dist/types/internal/logger.d.ts.map +1 -0
- package/dist/types/internal/metrics.d.ts +120 -0
- package/dist/types/internal/metrics.d.ts.map +1 -0
- package/dist/types/internal/options.d.ts +62 -0
- package/dist/types/internal/options.d.ts.map +1 -0
- package/dist/types/internal/shutdown.d.ts +8 -0
- package/dist/types/internal/shutdown.d.ts.map +1 -0
- package/dist/types/internal/telemetry.d.ts +43 -0
- package/dist/types/internal/telemetry.d.ts.map +1 -0
- package/dist/types/internal/types.d.ts +443 -0
- package/dist/types/internal/types.d.ts.map +1 -0
- package/dist/types/rpc/actions.d.ts +360 -0
- package/dist/types/rpc/actions.d.ts.map +1 -0
- package/dist/types/rpc/http.d.ts +17 -0
- package/dist/types/rpc/http.d.ts.map +1 -0
- package/dist/types/rpc/index.d.ts +43 -0
- package/dist/types/rpc/index.d.ts.map +1 -0
- package/dist/types/runtime/events.d.ts +40 -0
- package/dist/types/runtime/events.d.ts.map +1 -0
- package/dist/types/runtime/filter.d.ts +96 -0
- package/dist/types/runtime/filter.d.ts.map +1 -0
- package/dist/types/runtime/fragments.d.ts +30 -0
- package/dist/types/runtime/fragments.d.ts.map +1 -0
- package/dist/types/runtime/historical.d.ts +123 -0
- package/dist/types/runtime/historical.d.ts.map +1 -0
- package/dist/types/runtime/index.d.ts +89 -0
- package/dist/types/runtime/index.d.ts.map +1 -0
- package/dist/types/runtime/init.d.ts +28 -0
- package/dist/types/runtime/init.d.ts.map +1 -0
- package/dist/types/runtime/isolated.d.ts +14 -0
- package/dist/types/runtime/isolated.d.ts.map +1 -0
- package/dist/types/runtime/multichain.d.ts +13 -0
- package/dist/types/runtime/multichain.d.ts.map +1 -0
- package/dist/types/runtime/omnichain.d.ts +23 -0
- package/dist/types/runtime/omnichain.d.ts.map +1 -0
- package/dist/types/runtime/realtime.d.ts +93 -0
- package/dist/types/runtime/realtime.d.ts.map +1 -0
- package/dist/types/server/error.d.ts +5 -0
- package/dist/types/server/error.d.ts.map +1 -0
- package/dist/types/server/index.d.ts +13 -0
- package/dist/types/server/index.d.ts.map +1 -0
- package/dist/types/sync-historical/index.d.ts +36 -0
- package/dist/types/sync-historical/index.d.ts.map +1 -0
- package/dist/types/sync-realtime/bloom.d.ts +18 -0
- package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
- package/dist/types/sync-realtime/index.d.ts +48 -0
- package/dist/types/sync-realtime/index.d.ts.map +1 -0
- package/dist/types/sync-store/encode.d.ts +25 -0
- package/dist/types/sync-store/encode.d.ts.map +1 -0
- package/dist/types/sync-store/index.d.ts +135 -0
- package/dist/types/sync-store/index.d.ts.map +1 -0
- package/dist/types/sync-store/migrations.d.ts +8 -0
- package/dist/types/sync-store/migrations.d.ts.map +1 -0
- package/dist/types/sync-store/schema.d.ts +1828 -0
- package/dist/types/sync-store/schema.d.ts.map +1 -0
- package/dist/types/types/db.d.ts +213 -0
- package/dist/types/types/db.d.ts.map +1 -0
- package/dist/types/types/eth.d.ts +196 -0
- package/dist/types/types/eth.d.ts.map +1 -0
- package/dist/types/types/utils.d.ts +38 -0
- package/dist/types/types/utils.d.ts.map +1 -0
- package/dist/types/types/virtual.d.ts +99 -0
- package/dist/types/types/virtual.d.ts.map +1 -0
- package/dist/types/ui/app.d.ts +22 -0
- package/dist/types/ui/app.d.ts.map +1 -0
- package/dist/types/ui/index.d.ts +5 -0
- package/dist/types/ui/index.d.ts.map +1 -0
- package/dist/types/ui/patch.d.ts +7 -0
- package/dist/types/ui/patch.d.ts.map +1 -0
- package/dist/types/utils/abi.d.ts +23 -0
- package/dist/types/utils/abi.d.ts.map +1 -0
- package/dist/types/utils/bigint.d.ts +15 -0
- package/dist/types/utils/bigint.d.ts.map +1 -0
- package/dist/types/utils/chains.d.ts +42 -0
- package/dist/types/utils/chains.d.ts.map +1 -0
- package/dist/types/utils/checkpoint.d.ts +52 -0
- package/dist/types/utils/checkpoint.d.ts.map +1 -0
- package/dist/types/utils/chunk.d.ts +2 -0
- package/dist/types/utils/chunk.d.ts.map +1 -0
- package/dist/types/utils/copy.d.ts +16 -0
- package/dist/types/utils/copy.d.ts.map +1 -0
- package/dist/types/utils/date.d.ts +7 -0
- package/dist/types/utils/date.d.ts.map +1 -0
- package/dist/types/utils/debug.d.ts +105 -0
- package/dist/types/utils/debug.d.ts.map +1 -0
- package/dist/types/utils/decodeAbiParameters.d.ts +28 -0
- package/dist/types/utils/decodeAbiParameters.d.ts.map +1 -0
- package/dist/types/utils/decodeEventLog.d.ts +12 -0
- package/dist/types/utils/decodeEventLog.d.ts.map +1 -0
- package/dist/types/utils/dedupe.d.ts +20 -0
- package/dist/types/utils/dedupe.d.ts.map +1 -0
- package/dist/types/utils/duplicates.d.ts +7 -0
- package/dist/types/utils/duplicates.d.ts.map +1 -0
- package/dist/types/utils/estimate.d.ts +11 -0
- package/dist/types/utils/estimate.d.ts.map +1 -0
- package/dist/types/utils/finality.d.ts +12 -0
- package/dist/types/utils/finality.d.ts.map +1 -0
- package/dist/types/utils/format.d.ts +3 -0
- package/dist/types/utils/format.d.ts.map +1 -0
- package/dist/types/utils/generators.d.ts +42 -0
- package/dist/types/utils/generators.d.ts.map +1 -0
- package/dist/types/utils/hash.d.ts +11 -0
- package/dist/types/utils/hash.d.ts.map +1 -0
- package/dist/types/utils/interval.d.ts +53 -0
- package/dist/types/utils/interval.d.ts.map +1 -0
- package/dist/types/utils/lowercase.d.ts +5 -0
- package/dist/types/utils/lowercase.d.ts.map +1 -0
- package/dist/types/utils/mutex.d.ts +5 -0
- package/dist/types/utils/mutex.d.ts.map +1 -0
- package/dist/types/utils/never.d.ts +2 -0
- package/dist/types/utils/never.d.ts.map +1 -0
- package/dist/types/utils/offset.d.ts +8 -0
- package/dist/types/utils/offset.d.ts.map +1 -0
- package/dist/types/utils/order.d.ts +2 -0
- package/dist/types/utils/order.d.ts.map +1 -0
- package/dist/types/utils/partition.d.ts +22 -0
- package/dist/types/utils/partition.d.ts.map +1 -0
- package/dist/types/utils/pg.d.ts +8 -0
- package/dist/types/utils/pg.d.ts.map +1 -0
- package/dist/types/utils/pglite.d.ts +25 -0
- package/dist/types/utils/pglite.d.ts.map +1 -0
- package/dist/types/utils/port.d.ts +5 -0
- package/dist/types/utils/port.d.ts.map +1 -0
- package/dist/types/utils/print.d.ts +2 -0
- package/dist/types/utils/print.d.ts.map +1 -0
- package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
- package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
- package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
- package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
- package/dist/types/utils/queue.d.ts +33 -0
- package/dist/types/utils/queue.d.ts.map +1 -0
- package/dist/types/utils/range.d.ts +8 -0
- package/dist/types/utils/range.d.ts.map +1 -0
- package/dist/types/utils/result.d.ts +17 -0
- package/dist/types/utils/result.d.ts.map +1 -0
- package/dist/types/utils/sql-parse.d.ts +21 -0
- package/dist/types/utils/sql-parse.d.ts.map +1 -0
- package/dist/types/utils/timer.d.ts +6 -0
- package/dist/types/utils/timer.d.ts.map +1 -0
- package/dist/types/utils/truncate.d.ts +9 -0
- package/dist/types/utils/truncate.d.ts.map +1 -0
- package/dist/types/utils/wait.d.ts +6 -0
- package/dist/types/utils/wait.d.ts.map +1 -0
- package/dist/types/utils/zipper.d.ts +36 -0
- package/dist/types/utils/zipper.d.ts.map +1 -0
- package/package.json +114 -0
- package/src/bin/commands/codegen.ts +56 -0
- package/src/bin/commands/createViews.ts +318 -0
- package/src/bin/commands/dev.ts +490 -0
- package/src/bin/commands/list.ts +208 -0
- package/src/bin/commands/prune.ts +322 -0
- package/src/bin/commands/serve.ts +236 -0
- package/src/bin/commands/start.ts +319 -0
- package/src/bin/isolatedController.ts +300 -0
- package/src/bin/isolatedWorker.ts +192 -0
- package/src/bin/ponder.ts +208 -0
- package/src/bin/utils/codegen.ts +32 -0
- package/src/bin/utils/exit.ts +112 -0
- package/src/build/config.ts +1141 -0
- package/src/build/factory.ts +147 -0
- package/src/build/index.ts +790 -0
- package/src/build/plugin.ts +58 -0
- package/src/build/pre.ts +114 -0
- package/src/build/schema.ts +358 -0
- package/src/build/stacktrace.ts +137 -0
- package/src/client/index.ts +551 -0
- package/src/config/address.ts +45 -0
- package/src/config/eventFilter.ts +33 -0
- package/src/config/index.ts +240 -0
- package/src/config/utilityTypes.ts +152 -0
- package/src/database/actions.ts +873 -0
- package/src/database/index.ts +1029 -0
- package/src/database/queryBuilder.ts +537 -0
- package/src/drizzle/bigint.ts +57 -0
- package/src/drizzle/bytes.ts +68 -0
- package/src/drizzle/hex.ts +58 -0
- package/src/drizzle/index.ts +40 -0
- package/src/drizzle/json.ts +159 -0
- package/src/drizzle/kit/index.ts +1348 -0
- package/src/drizzle/onchain.ts +476 -0
- package/src/drizzle/text.ts +77 -0
- package/src/graphql/graphiql.html.ts +59 -0
- package/src/graphql/index.ts +1351 -0
- package/src/graphql/json.ts +62 -0
- package/src/graphql/middleware.ts +115 -0
- package/src/index.ts +139 -0
- package/src/indexing/addStackTrace.ts +69 -0
- package/src/indexing/client.ts +1184 -0
- package/src/indexing/index.ts +976 -0
- package/src/indexing/profile.ts +771 -0
- package/src/indexing-store/cache.ts +1057 -0
- package/src/indexing-store/index.ts +628 -0
- package/src/indexing-store/profile.ts +557 -0
- package/src/indexing-store/utils.ts +162 -0
- package/src/internal/common.ts +15 -0
- package/src/internal/errors.ts +228 -0
- package/src/internal/logger.ts +252 -0
- package/src/internal/metrics.ts +1030 -0
- package/src/internal/options.ts +130 -0
- package/src/internal/shutdown.ts +32 -0
- package/src/internal/telemetry.ts +303 -0
- package/src/internal/types.ts +611 -0
- package/src/rpc/actions.ts +1344 -0
- package/src/rpc/http.ts +164 -0
- package/src/rpc/index.ts +959 -0
- package/src/runtime/events.ts +875 -0
- package/src/runtime/filter.ts +705 -0
- package/src/runtime/fragments.ts +674 -0
- package/src/runtime/historical.ts +1522 -0
- package/src/runtime/index.ts +569 -0
- package/src/runtime/init.ts +49 -0
- package/src/runtime/isolated.ts +775 -0
- package/src/runtime/multichain.ts +860 -0
- package/src/runtime/omnichain.ts +920 -0
- package/src/runtime/realtime.ts +1164 -0
- package/src/server/error.ts +68 -0
- package/src/server/index.ts +173 -0
- package/src/sync-historical/index.ts +1065 -0
- package/src/sync-realtime/bloom.ts +102 -0
- package/src/sync-realtime/index.ts +1304 -0
- package/src/sync-store/encode.ts +153 -0
- package/src/sync-store/index.ts +1633 -0
- package/src/sync-store/migrations.ts +1801 -0
- package/src/sync-store/schema.ts +248 -0
- package/src/types/db.ts +292 -0
- package/src/types/eth.ts +216 -0
- package/src/types/utils.ts +47 -0
- package/src/types/virtual.ts +244 -0
- package/src/types.d.ts +38 -0
- package/src/ui/app.ts +207 -0
- package/src/ui/index.ts +37 -0
- package/src/ui/patch.ts +204 -0
- package/src/utils/abi.ts +103 -0
- package/src/utils/bigint.ts +41 -0
- package/src/utils/chains.ts +22 -0
- package/src/utils/checkpoint.ts +203 -0
- package/src/utils/chunk.ts +7 -0
- package/src/utils/copy.ts +151 -0
- package/src/utils/date.ts +26 -0
- package/src/utils/debug.ts +110 -0
- package/src/utils/decodeAbiParameters.ts +428 -0
- package/src/utils/decodeEventLog.ts +100 -0
- package/src/utils/dedupe.ts +32 -0
- package/src/utils/duplicates.ts +19 -0
- package/src/utils/estimate.ts +27 -0
- package/src/utils/finality.ts +40 -0
- package/src/utils/format.ts +22 -0
- package/src/utils/generators.ts +157 -0
- package/src/utils/hash.ts +22 -0
- package/src/utils/interval.ts +212 -0
- package/src/utils/lowercase.ts +6 -0
- package/src/utils/mutex.ts +33 -0
- package/src/utils/never.ts +3 -0
- package/src/utils/offset.ts +133 -0
- package/src/utils/order.ts +16 -0
- package/src/utils/partition.ts +53 -0
- package/src/utils/pg.ts +230 -0
- package/src/utils/pglite.ts +97 -0
- package/src/utils/port.ts +34 -0
- package/src/utils/print.ts +31 -0
- package/src/utils/promiseAllSettledWithThrow.ts +27 -0
- package/src/utils/promiseWithResolvers.ts +20 -0
- package/src/utils/queue.ts +258 -0
- package/src/utils/range.ts +8 -0
- package/src/utils/result.ts +26 -0
- package/src/utils/sql-parse.ts +1477 -0
- package/src/utils/timer.ts +8 -0
- package/src/utils/truncate.ts +15 -0
- package/src/utils/wait.ts +8 -0
- package/src/utils/zipper.ts +80 -0
|
@@ -0,0 +1,745 @@
|
|
|
1
|
+
import { BuildError } from '../internal/errors.js';
|
|
2
|
+
import { eth_getBlockByNumber } from '../rpc/actions.js';
|
|
3
|
+
import { createRpc } from '../rpc/index.js';
|
|
4
|
+
import { defaultBlockFilterInclude, defaultLogFilterInclude, defaultTraceFilterInclude, defaultTransactionFilterInclude, defaultTransactionReceiptInclude, defaultTransferFilterInclude, } from '../runtime/filter.js';
|
|
5
|
+
import { buildTopics, toSafeName } from '../utils/abi.js';
|
|
6
|
+
import { hyperliquidEvm, chains as viemChains } from '../utils/chains.js';
|
|
7
|
+
import { dedupe } from '../utils/dedupe.js';
|
|
8
|
+
import { getFinalityBlockCount } from '../utils/finality.js';
|
|
9
|
+
import { toLowerCase } from '../utils/lowercase.js';
|
|
10
|
+
import { BlockNotFoundError, hexToNumber, numberToHex, toEventSelector, toFunctionSelector, } from "viem";
|
|
11
|
+
import { buildLogFactory } from "./factory.js";
|
|
12
|
+
const flattenSources = (config) => {
|
|
13
|
+
return Object.entries(config).flatMap(([name, source]) => {
|
|
14
|
+
if (typeof source.chain === "object") {
|
|
15
|
+
return Object.entries(source.chain).map(([chain, sourceOverride]) => {
|
|
16
|
+
const { chain: _chain, ...base } = source;
|
|
17
|
+
return {
|
|
18
|
+
name,
|
|
19
|
+
chain,
|
|
20
|
+
...base,
|
|
21
|
+
...sourceOverride,
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Handles string, null, or undefined
|
|
27
|
+
return {
|
|
28
|
+
name,
|
|
29
|
+
...source,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
export async function buildIndexingFunctions({ common, config, indexingFunctions, configBuild: { chains, rpcs }, }) {
|
|
35
|
+
const context = { logger: common.logger.child({ action: "build" }) };
|
|
36
|
+
const logs = [];
|
|
37
|
+
const perChainLatestBlockNumber = new Map();
|
|
38
|
+
const resolveBlockNumber = async (blockNumberOrTag, chain) => {
|
|
39
|
+
if (blockNumberOrTag === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (Number.isNaN(blockNumberOrTag)) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
if (blockNumberOrTag === "latest") {
|
|
46
|
+
if (perChainLatestBlockNumber.has(chain.name)) {
|
|
47
|
+
return perChainLatestBlockNumber.get(chain.name);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const rpc = rpcs[chains.findIndex((c) => c.name === chain.name)];
|
|
51
|
+
const blockPromise = rpc
|
|
52
|
+
.request({
|
|
53
|
+
method: "eth_getBlockByNumber",
|
|
54
|
+
params: ["latest", false],
|
|
55
|
+
}, context)
|
|
56
|
+
.then((block) => {
|
|
57
|
+
if (!block)
|
|
58
|
+
throw new BlockNotFoundError({ blockNumber: "latest" });
|
|
59
|
+
return hexToNumber(block.number);
|
|
60
|
+
})
|
|
61
|
+
.catch((e) => {
|
|
62
|
+
throw new Error(`Unable to fetch "latest" block for chain '${chain.name}':\n${e.message}`);
|
|
63
|
+
});
|
|
64
|
+
perChainLatestBlockNumber.set(chain.name, blockPromise);
|
|
65
|
+
return blockPromise;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return blockNumberOrTag;
|
|
69
|
+
};
|
|
70
|
+
const finalizedBlocks = await Promise.all(chains.map((chain) => {
|
|
71
|
+
const rpc = rpcs[chains.findIndex((c) => c.name === chain.name)];
|
|
72
|
+
const blockPromise = eth_getBlockByNumber(rpc, ["latest", false], {
|
|
73
|
+
...context,
|
|
74
|
+
retryNullBlockRequest: true,
|
|
75
|
+
})
|
|
76
|
+
.then((block) => hexToNumber(block.number))
|
|
77
|
+
.catch((e) => {
|
|
78
|
+
throw new Error(`Unable to fetch "latest" block for chain '${chain.name}':\n${e.message}`);
|
|
79
|
+
});
|
|
80
|
+
perChainLatestBlockNumber.set(chain.name, blockPromise);
|
|
81
|
+
return blockPromise.then((latest) => eth_getBlockByNumber(rpc, [numberToHex(Math.max(latest - chain.finalityBlockCount, 0)), false], { ...context, retryNullBlockRequest: true }).then((block) => ({
|
|
82
|
+
hash: block.hash,
|
|
83
|
+
parentHash: block.parentHash,
|
|
84
|
+
number: block.number,
|
|
85
|
+
timestamp: block.timestamp,
|
|
86
|
+
})));
|
|
87
|
+
}));
|
|
88
|
+
const sourceNames = new Set();
|
|
89
|
+
for (const source of [
|
|
90
|
+
...Object.keys(config.contracts ?? {}),
|
|
91
|
+
...Object.keys(config.accounts ?? {}),
|
|
92
|
+
...Object.keys(config.blocks ?? {}),
|
|
93
|
+
]) {
|
|
94
|
+
if (sourceNames.has(source)) {
|
|
95
|
+
throw new Error(`Validation failed: Duplicate name '${source}' not allowed. The name must be unique across blocks, contracts, and accounts.`);
|
|
96
|
+
}
|
|
97
|
+
sourceNames.add(source);
|
|
98
|
+
}
|
|
99
|
+
// Validate and build indexing functions
|
|
100
|
+
if (indexingFunctions.length === 0) {
|
|
101
|
+
throw new Error("Validation failed: Found 0 registered indexing functions.");
|
|
102
|
+
}
|
|
103
|
+
const eventNames = new Set();
|
|
104
|
+
for (const { name: eventName } of indexingFunctions) {
|
|
105
|
+
const eventNameComponents = eventName.includes(".")
|
|
106
|
+
? eventName.split(".")
|
|
107
|
+
: eventName.split(":");
|
|
108
|
+
const [sourceName] = eventNameComponents;
|
|
109
|
+
if (!sourceName) {
|
|
110
|
+
throw new Error(`Validation failed: Invalid event '${eventName}', expected format '{sourceName}:{eventName}' or '{sourceName}.{functionName}'.`);
|
|
111
|
+
}
|
|
112
|
+
if (eventNameComponents.length === 3) {
|
|
113
|
+
const [, sourceType, fromOrTo] = eventNameComponents;
|
|
114
|
+
if ((sourceType !== "transaction" && sourceType !== "transfer") ||
|
|
115
|
+
(fromOrTo !== "from" && fromOrTo !== "to")) {
|
|
116
|
+
throw new Error(`Validation failed: Invalid event '${eventName}', expected format '{sourceName}:transaction:from', '{sourceName}:transaction:to', '{sourceName}:transfer:from', or '{sourceName}:transfer:to'.`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (eventNameComponents.length === 2) {
|
|
120
|
+
const [, sourceEventName] = eventNameComponents;
|
|
121
|
+
if (!sourceEventName) {
|
|
122
|
+
throw new Error(`Validation failed: Invalid event '${eventName}', expected format '{sourceName}:{eventName}' or '{sourceName}.{functionName}'.`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
throw new Error(`Validation failed: Invalid event '${eventName}', expected format '{sourceName}:{eventName}' or '{sourceName}.{functionName}'.`);
|
|
127
|
+
}
|
|
128
|
+
if (eventNames.has(eventName)) {
|
|
129
|
+
throw new Error(`Validation failed: Multiple indexing functions registered for event '${eventName}'.`);
|
|
130
|
+
}
|
|
131
|
+
eventNames.add(eventName);
|
|
132
|
+
// Validate that the indexing function uses a sourceName that is present in the config.
|
|
133
|
+
const matchedSourceName = Object.keys({
|
|
134
|
+
...(config.contracts ?? {}),
|
|
135
|
+
...(config.accounts ?? {}),
|
|
136
|
+
...(config.blocks ?? {}),
|
|
137
|
+
}).find((_sourceName) => _sourceName === sourceName);
|
|
138
|
+
if (!matchedSourceName) {
|
|
139
|
+
throw new Error(`Validation failed: Invalid event '${eventName}' uses an unrecognized contract, account, or block interval name. Expected one of [${Array.from(sourceNames)
|
|
140
|
+
.map((n) => `'${n}'`)
|
|
141
|
+
.join(", ")}].`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// common validation for all sources
|
|
145
|
+
for (const source of [
|
|
146
|
+
...flattenSources(config.contracts ?? {}),
|
|
147
|
+
...flattenSources(config.accounts ?? {}),
|
|
148
|
+
...flattenSources(config.blocks ?? {}),
|
|
149
|
+
]) {
|
|
150
|
+
if (source.chain === null || source.chain === undefined) {
|
|
151
|
+
throw new Error(`Validation failed: Chain for '${source.name}' is null or undefined. Expected one of [${chains
|
|
152
|
+
.map((n) => `'${n.name}'`)
|
|
153
|
+
.join(", ")}]. Did you forget to change 'network' to 'chain' when migrating to 0.11?`);
|
|
154
|
+
}
|
|
155
|
+
const chain = chains.find((n) => n.name === source.chain);
|
|
156
|
+
if (!chain) {
|
|
157
|
+
throw new Error(`Validation failed: Invalid chain for '${source.name}'. Got '${source.chain}', expected one of [${chains
|
|
158
|
+
.map((n) => `'${n.name}'`)
|
|
159
|
+
.join(", ")}].`);
|
|
160
|
+
}
|
|
161
|
+
const startBlock = await resolveBlockNumber(source.startBlock, chain);
|
|
162
|
+
const endBlock = await resolveBlockNumber(source.endBlock, chain);
|
|
163
|
+
if (startBlock !== undefined &&
|
|
164
|
+
endBlock !== undefined &&
|
|
165
|
+
endBlock < startBlock) {
|
|
166
|
+
throw new Error(`Validation failed: Start block for '${source.name}' is after end block (${startBlock} > ${endBlock}).`);
|
|
167
|
+
}
|
|
168
|
+
if (startBlock !== undefined && Number.isInteger(startBlock) === false) {
|
|
169
|
+
throw new Error(`Validation failed: Invalid start block for '${source.name}'. Got ${startBlock} typeof ${typeof startBlock}, expected an integer.`);
|
|
170
|
+
}
|
|
171
|
+
if (endBlock !== undefined && Number.isInteger(endBlock) === false) {
|
|
172
|
+
throw new Error(`Validation failed: Invalid end block for '${source.name}'. Got ${endBlock} typeof ${typeof endBlock}, expected an integer.`);
|
|
173
|
+
}
|
|
174
|
+
if ("address" in source &&
|
|
175
|
+
typeof source.address === "object" &&
|
|
176
|
+
!Array.isArray(source.address)) {
|
|
177
|
+
const factoryStartBlock = (await resolveBlockNumber(source.address.startBlock, chain)) ??
|
|
178
|
+
startBlock;
|
|
179
|
+
const factoryEndBlock = (await resolveBlockNumber(source.address.endBlock, chain)) ?? endBlock;
|
|
180
|
+
if (factoryStartBlock !== undefined &&
|
|
181
|
+
(startBlock === undefined || factoryStartBlock > startBlock)) {
|
|
182
|
+
throw new Error(`Validation failed: Start block for '${source.name}' is before start block of factory address (${factoryStartBlock} > ${startBlock}).`);
|
|
183
|
+
}
|
|
184
|
+
if (endBlock !== undefined &&
|
|
185
|
+
(factoryEndBlock === undefined || factoryEndBlock > endBlock)) {
|
|
186
|
+
throw new Error(`Validation failed: End block for ${source.name} is before end block of factory address (${factoryEndBlock} > ${endBlock}).`);
|
|
187
|
+
}
|
|
188
|
+
if (factoryStartBlock !== undefined &&
|
|
189
|
+
factoryEndBlock !== undefined &&
|
|
190
|
+
factoryEndBlock < factoryStartBlock) {
|
|
191
|
+
throw new Error(`Validation failed: Start block for '${source.name}' factory address is after end block (${factoryStartBlock} > ${factoryEndBlock}).`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const perChainEventCallbacks = new Map();
|
|
196
|
+
const perChainSetupCallbacks = new Map();
|
|
197
|
+
const perChainContracts = new Map();
|
|
198
|
+
for (const chain of chains) {
|
|
199
|
+
perChainEventCallbacks.set(chain.id, []);
|
|
200
|
+
perChainSetupCallbacks.set(chain.id, []);
|
|
201
|
+
perChainContracts.set(chain.id, {});
|
|
202
|
+
}
|
|
203
|
+
for (const source of flattenSources(config.contracts ?? {})) {
|
|
204
|
+
const chain = chains.find((n) => n.name === source.chain);
|
|
205
|
+
const fromBlock = await resolveBlockNumber(source.startBlock, chain);
|
|
206
|
+
const toBlock = await resolveBlockNumber(source.endBlock, chain);
|
|
207
|
+
if (indexingFunctions.some((f) => f.name === `${source.name}:setup`)) {
|
|
208
|
+
perChainSetupCallbacks.get(chain.id).push({
|
|
209
|
+
name: `${source.name}:setup`,
|
|
210
|
+
fn: indexingFunctions.find((f) => f.name === `${source.name}:setup`)
|
|
211
|
+
.fn,
|
|
212
|
+
chain,
|
|
213
|
+
block: fromBlock,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
let address;
|
|
217
|
+
const resolvedAddress = source?.address;
|
|
218
|
+
if (typeof resolvedAddress === "object" &&
|
|
219
|
+
Array.isArray(resolvedAddress) === false) {
|
|
220
|
+
const factoryAddress = resolvedAddress;
|
|
221
|
+
const factoryFromBlock = (await resolveBlockNumber(factoryAddress.startBlock, chain)) ??
|
|
222
|
+
fromBlock;
|
|
223
|
+
const factoryToBlock = (await resolveBlockNumber(factoryAddress.endBlock, chain)) ?? toBlock;
|
|
224
|
+
// Note that this can throw.
|
|
225
|
+
const logFactory = buildLogFactory({
|
|
226
|
+
chainId: chain.id,
|
|
227
|
+
sourceId: source.name,
|
|
228
|
+
...factoryAddress,
|
|
229
|
+
fromBlock: factoryFromBlock,
|
|
230
|
+
toBlock: factoryToBlock,
|
|
231
|
+
});
|
|
232
|
+
perChainContracts.get(chain.id)[source.name] = {
|
|
233
|
+
abi: source.abi,
|
|
234
|
+
address: undefined,
|
|
235
|
+
startBlock: fromBlock,
|
|
236
|
+
endBlock: toBlock,
|
|
237
|
+
};
|
|
238
|
+
address = logFactory;
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
if (resolvedAddress !== undefined) {
|
|
242
|
+
for (const address of Array.isArray(resolvedAddress)
|
|
243
|
+
? resolvedAddress
|
|
244
|
+
: [resolvedAddress]) {
|
|
245
|
+
if (!address.startsWith("0x"))
|
|
246
|
+
throw new Error(`Validation failed: Invalid prefix for address '${address}'. Got '${address.slice(0, 2)}', expected '0x'.`);
|
|
247
|
+
if (address.length !== 42)
|
|
248
|
+
throw new Error(`Validation failed: Invalid length for address '${address}'. Got ${address.length}, expected 42 characters.`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const validatedAddress = Array.isArray(resolvedAddress)
|
|
252
|
+
? dedupe(resolvedAddress).map((r) => toLowerCase(r))
|
|
253
|
+
: resolvedAddress !== undefined
|
|
254
|
+
? toLowerCase(resolvedAddress)
|
|
255
|
+
: undefined;
|
|
256
|
+
perChainContracts.get(chain.id)[source.name] = {
|
|
257
|
+
abi: source.abi,
|
|
258
|
+
address: validatedAddress,
|
|
259
|
+
startBlock: fromBlock,
|
|
260
|
+
endBlock: toBlock,
|
|
261
|
+
};
|
|
262
|
+
address = validatedAddress;
|
|
263
|
+
}
|
|
264
|
+
const filteredEventSelectors = new Map();
|
|
265
|
+
if (source.filter) {
|
|
266
|
+
const eventFilters = Array.isArray(source.filter)
|
|
267
|
+
? source.filter
|
|
268
|
+
: [source.filter];
|
|
269
|
+
for (const filter of eventFilters) {
|
|
270
|
+
const abiEvent = source.abi.find((item) => item.type === "event" &&
|
|
271
|
+
toSafeName({ abi: source.abi, item }) === filter.event);
|
|
272
|
+
if (!abiEvent) {
|
|
273
|
+
throw new Error(`Validation failed: Invalid filter for contract '${source.name}'. Got event name '${filter.event}', expected one of [${source.abi
|
|
274
|
+
.filter((item) => item.type === "event")
|
|
275
|
+
.map((item) => `'${toSafeName({ abi: source.abi, item })}'`)
|
|
276
|
+
.join(", ")}].`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
const topics = buildTopics(source.abi, eventFilters);
|
|
280
|
+
for (const { topic0, topic1, topic2, topic3 } of topics) {
|
|
281
|
+
const abiItem = source.abi.find((item) => item.type === "event" && toEventSelector(item) === topic0);
|
|
282
|
+
const indexingFunction = indexingFunctions.find((f) => f.name === `${source.name}:${abiItem.name}`);
|
|
283
|
+
if (indexingFunction === undefined) {
|
|
284
|
+
throw new Error(`Validation failed: Event selector '${toSafeName({ abi: source.abi, item: abiItem })}' is used in a filter but does not have a corresponding indexing function.`);
|
|
285
|
+
}
|
|
286
|
+
filteredEventSelectors.set(topic0, { topic0, topic1, topic2, topic3 });
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const registeredLogEvents = [];
|
|
290
|
+
const registeredCallTraceEvents = [];
|
|
291
|
+
for (const { name: eventName } of indexingFunctions) {
|
|
292
|
+
// log event
|
|
293
|
+
if (eventName.includes(":")) {
|
|
294
|
+
const [logContractName, logEventName] = eventName.split(":");
|
|
295
|
+
if (logContractName === source.name && logEventName !== "setup") {
|
|
296
|
+
registeredLogEvents.push(logEventName);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// trace event
|
|
300
|
+
if (eventName.includes(".")) {
|
|
301
|
+
const [functionContractName, functionName] = eventName.split(".");
|
|
302
|
+
if (source.includeCallTraces !== true) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (functionContractName === source.name) {
|
|
306
|
+
registeredCallTraceEvents.push(functionName);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
for (const logEventName of registeredLogEvents) {
|
|
311
|
+
const abiEvent = source.abi.find((item) => item.type === "event" &&
|
|
312
|
+
toSafeName({ abi: source.abi, item }) === logEventName);
|
|
313
|
+
if (abiEvent === undefined) {
|
|
314
|
+
throw new Error(`Validation failed: Event name for event '${logEventName}' not found in the contract ABI. Got '${logEventName}', expected one of [${source.abi
|
|
315
|
+
.filter((item) => item.type === "event")
|
|
316
|
+
.map((item) => `'${toSafeName({ abi: source.abi, item })}'`)
|
|
317
|
+
.join(", ")}].`);
|
|
318
|
+
}
|
|
319
|
+
const eventName = `${source.name}:${logEventName}`;
|
|
320
|
+
const indexingFunction = indexingFunctions.find((f) => f.name === eventName);
|
|
321
|
+
let topic1;
|
|
322
|
+
let topic2;
|
|
323
|
+
let topic3;
|
|
324
|
+
const eventSelector = toEventSelector(abiEvent);
|
|
325
|
+
if (filteredEventSelectors.has(eventSelector)) {
|
|
326
|
+
topic1 = filteredEventSelectors.get(eventSelector).topic1;
|
|
327
|
+
topic2 = filteredEventSelectors.get(eventSelector).topic2;
|
|
328
|
+
topic3 = filteredEventSelectors.get(eventSelector).topic3;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
topic1 = null;
|
|
332
|
+
topic2 = null;
|
|
333
|
+
topic3 = null;
|
|
334
|
+
}
|
|
335
|
+
const filter = {
|
|
336
|
+
type: "log",
|
|
337
|
+
chainId: chain.id,
|
|
338
|
+
sourceId: source.name,
|
|
339
|
+
address,
|
|
340
|
+
topic0: eventSelector,
|
|
341
|
+
topic1,
|
|
342
|
+
topic2,
|
|
343
|
+
topic3,
|
|
344
|
+
fromBlock,
|
|
345
|
+
toBlock,
|
|
346
|
+
hasTransactionReceipt: source.includeTransactionReceipts ?? false,
|
|
347
|
+
include: defaultLogFilterInclude.concat(source.includeTransactionReceipts
|
|
348
|
+
? defaultTransactionReceiptInclude.map((value) => `transactionReceipt.${value}`)
|
|
349
|
+
: []),
|
|
350
|
+
};
|
|
351
|
+
const eventCallback = {
|
|
352
|
+
filter,
|
|
353
|
+
name: eventName,
|
|
354
|
+
fn: indexingFunction.fn,
|
|
355
|
+
chain,
|
|
356
|
+
type: "contract",
|
|
357
|
+
abiItem: abiEvent,
|
|
358
|
+
metadata: {
|
|
359
|
+
safeName: logEventName,
|
|
360
|
+
abi: source.abi,
|
|
361
|
+
},
|
|
362
|
+
};
|
|
363
|
+
perChainEventCallbacks.get(chain.id).push(eventCallback);
|
|
364
|
+
}
|
|
365
|
+
for (const functionEventName of registeredCallTraceEvents) {
|
|
366
|
+
const abiFunction = source.abi.find((item) => item.type === "function" &&
|
|
367
|
+
toSafeName({ abi: source.abi, item }) === functionEventName);
|
|
368
|
+
if (abiFunction === undefined) {
|
|
369
|
+
throw new Error(`Validation failed: Function name for function '${functionEventName}' not found in the contract ABI. Got '${functionEventName}', expected one of [${source.abi
|
|
370
|
+
.filter((item) => item.type === "function")
|
|
371
|
+
.map((item) => `'${toSafeName({ abi: source.abi, item })}'`)
|
|
372
|
+
.join(", ")}].`);
|
|
373
|
+
}
|
|
374
|
+
const eventName = `${source.name}.${functionEventName}`;
|
|
375
|
+
const indexingFunction = indexingFunctions.find((f) => f.name === eventName);
|
|
376
|
+
const filter = {
|
|
377
|
+
type: "trace",
|
|
378
|
+
chainId: chain.id,
|
|
379
|
+
sourceId: source.name,
|
|
380
|
+
fromAddress: undefined,
|
|
381
|
+
toAddress: address,
|
|
382
|
+
callType: "CALL",
|
|
383
|
+
functionSelector: toFunctionSelector(abiFunction),
|
|
384
|
+
includeReverted: false,
|
|
385
|
+
fromBlock,
|
|
386
|
+
toBlock,
|
|
387
|
+
hasTransactionReceipt: source.includeTransactionReceipts ?? false,
|
|
388
|
+
include: defaultTraceFilterInclude.concat(source.includeTransactionReceipts
|
|
389
|
+
? defaultTransactionReceiptInclude.map((value) => `transactionReceipt.${value}`)
|
|
390
|
+
: []),
|
|
391
|
+
};
|
|
392
|
+
const eventCallback = {
|
|
393
|
+
filter,
|
|
394
|
+
name: eventName,
|
|
395
|
+
fn: indexingFunction.fn,
|
|
396
|
+
chain,
|
|
397
|
+
type: "contract",
|
|
398
|
+
abiItem: abiFunction,
|
|
399
|
+
metadata: {
|
|
400
|
+
safeName: functionEventName,
|
|
401
|
+
abi: source.abi,
|
|
402
|
+
},
|
|
403
|
+
};
|
|
404
|
+
perChainEventCallbacks.get(chain.id).push(eventCallback);
|
|
405
|
+
}
|
|
406
|
+
if (registeredLogEvents.length === 0 &&
|
|
407
|
+
registeredCallTraceEvents.length === 0) {
|
|
408
|
+
logs.push({
|
|
409
|
+
level: "warn",
|
|
410
|
+
msg: "No registered indexing functions",
|
|
411
|
+
name: source.name,
|
|
412
|
+
type: "contract",
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
for (const source of flattenSources(config.accounts ?? {})) {
|
|
417
|
+
const chain = chains.find((n) => n.name === source.chain);
|
|
418
|
+
const fromBlock = await resolveBlockNumber(source.startBlock, chain);
|
|
419
|
+
const toBlock = await resolveBlockNumber(source.endBlock, chain);
|
|
420
|
+
const resolvedAddress = source?.address;
|
|
421
|
+
if (resolvedAddress === undefined) {
|
|
422
|
+
throw new Error(`Validation failed: Account '${source.name}' must specify an 'address'.`);
|
|
423
|
+
}
|
|
424
|
+
let address;
|
|
425
|
+
if (typeof resolvedAddress === "object" &&
|
|
426
|
+
!Array.isArray(resolvedAddress)) {
|
|
427
|
+
const factoryFromBlock = (await resolveBlockNumber(resolvedAddress.startBlock, chain)) ??
|
|
428
|
+
fromBlock;
|
|
429
|
+
const factoryToBlock = (await resolveBlockNumber(resolvedAddress.endBlock, chain)) ?? toBlock;
|
|
430
|
+
// Note that this can throw.
|
|
431
|
+
const logFactory = buildLogFactory({
|
|
432
|
+
chainId: chain.id,
|
|
433
|
+
sourceId: source.name,
|
|
434
|
+
...resolvedAddress,
|
|
435
|
+
fromBlock: factoryFromBlock,
|
|
436
|
+
toBlock: factoryToBlock,
|
|
437
|
+
});
|
|
438
|
+
address = logFactory;
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
for (const address of Array.isArray(resolvedAddress)
|
|
442
|
+
? resolvedAddress
|
|
443
|
+
: [resolvedAddress]) {
|
|
444
|
+
if (!address.startsWith("0x"))
|
|
445
|
+
throw new Error(`Validation failed: Invalid prefix for address '${address}'. Got '${address.slice(0, 2)}', expected '0x'.`);
|
|
446
|
+
if (address.length !== 42)
|
|
447
|
+
throw new Error(`Validation failed: Invalid length for address '${address}'. Got ${address.length}, expected 42 characters.`);
|
|
448
|
+
}
|
|
449
|
+
const validatedAddress = Array.isArray(resolvedAddress)
|
|
450
|
+
? dedupe(resolvedAddress).map((r) => toLowerCase(r))
|
|
451
|
+
: resolvedAddress !== undefined
|
|
452
|
+
? toLowerCase(resolvedAddress)
|
|
453
|
+
: undefined;
|
|
454
|
+
address = validatedAddress;
|
|
455
|
+
}
|
|
456
|
+
const filters = [
|
|
457
|
+
{
|
|
458
|
+
type: "transaction",
|
|
459
|
+
chainId: chain.id,
|
|
460
|
+
sourceId: source.name,
|
|
461
|
+
fromAddress: undefined,
|
|
462
|
+
toAddress: address,
|
|
463
|
+
includeReverted: false,
|
|
464
|
+
fromBlock,
|
|
465
|
+
toBlock,
|
|
466
|
+
hasTransactionReceipt: true,
|
|
467
|
+
include: defaultTransactionFilterInclude,
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
type: "transaction",
|
|
471
|
+
chainId: chain.id,
|
|
472
|
+
sourceId: source.name,
|
|
473
|
+
fromAddress: address,
|
|
474
|
+
toAddress: undefined,
|
|
475
|
+
includeReverted: false,
|
|
476
|
+
fromBlock,
|
|
477
|
+
toBlock,
|
|
478
|
+
hasTransactionReceipt: true,
|
|
479
|
+
include: defaultTransactionFilterInclude,
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
type: "transfer",
|
|
483
|
+
chainId: chain.id,
|
|
484
|
+
sourceId: source.name,
|
|
485
|
+
fromAddress: undefined,
|
|
486
|
+
toAddress: address,
|
|
487
|
+
includeReverted: false,
|
|
488
|
+
fromBlock,
|
|
489
|
+
toBlock,
|
|
490
|
+
hasTransactionReceipt: source.includeTransactionReceipts ?? false,
|
|
491
|
+
include: defaultTransferFilterInclude.concat(source.includeTransactionReceipts
|
|
492
|
+
? defaultTransactionReceiptInclude.map((value) => `transactionReceipt.${value}`)
|
|
493
|
+
: []),
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
type: "transfer",
|
|
497
|
+
chainId: chain.id,
|
|
498
|
+
sourceId: source.name,
|
|
499
|
+
fromAddress: address,
|
|
500
|
+
toAddress: undefined,
|
|
501
|
+
includeReverted: false,
|
|
502
|
+
fromBlock,
|
|
503
|
+
toBlock,
|
|
504
|
+
hasTransactionReceipt: source.includeTransactionReceipts ?? false,
|
|
505
|
+
include: defaultTransferFilterInclude.concat(source.includeTransactionReceipts
|
|
506
|
+
? defaultTransactionReceiptInclude.map((value) => `transactionReceipt.${value}`)
|
|
507
|
+
: []),
|
|
508
|
+
},
|
|
509
|
+
];
|
|
510
|
+
let hasRegisteredIndexingFunction = false;
|
|
511
|
+
for (const filter of filters) {
|
|
512
|
+
const eventName = filter.type === "transaction"
|
|
513
|
+
? filter.fromAddress === undefined
|
|
514
|
+
? `${source.name}:transaction:to`
|
|
515
|
+
: `${source.name}:transaction:from`
|
|
516
|
+
: filter.fromAddress === undefined
|
|
517
|
+
? `${source.name}:transfer:to`
|
|
518
|
+
: `${source.name}:transfer:from`;
|
|
519
|
+
const indexingFunction = indexingFunctions.find((f) => f.name === eventName);
|
|
520
|
+
if (indexingFunction) {
|
|
521
|
+
hasRegisteredIndexingFunction = true;
|
|
522
|
+
const eventCallback = {
|
|
523
|
+
filter,
|
|
524
|
+
name: eventName,
|
|
525
|
+
fn: indexingFunction.fn,
|
|
526
|
+
chain,
|
|
527
|
+
type: "account",
|
|
528
|
+
direction: filter.fromAddress === undefined ? "to" : "from",
|
|
529
|
+
};
|
|
530
|
+
perChainEventCallbacks.get(chain.id).push(eventCallback);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
if (hasRegisteredIndexingFunction === false) {
|
|
534
|
+
logs.push({
|
|
535
|
+
level: "warn",
|
|
536
|
+
msg: "No registered indexing functions",
|
|
537
|
+
name: source.name,
|
|
538
|
+
type: "account",
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
for (const source of flattenSources(config.blocks ?? {})) {
|
|
543
|
+
const chain = chains.find((n) => n.name === source.chain);
|
|
544
|
+
const intervalMaybeNan = source.interval ?? 1;
|
|
545
|
+
const interval = Number.isNaN(intervalMaybeNan) ? 0 : intervalMaybeNan;
|
|
546
|
+
if (!Number.isInteger(interval) || interval === 0) {
|
|
547
|
+
throw new Error(`Validation failed: Invalid interval for block interval '${source.name}'. Got ${interval}, expected a non-zero integer.`);
|
|
548
|
+
}
|
|
549
|
+
const fromBlock = await resolveBlockNumber(source.startBlock, chain);
|
|
550
|
+
const toBlock = await resolveBlockNumber(source.endBlock, chain);
|
|
551
|
+
const eventName = `${source.name}:block`;
|
|
552
|
+
const indexingFunction = indexingFunctions.find((f) => f.name === eventName);
|
|
553
|
+
if (indexingFunction) {
|
|
554
|
+
const filter = {
|
|
555
|
+
type: "block",
|
|
556
|
+
chainId: chain.id,
|
|
557
|
+
sourceId: source.name,
|
|
558
|
+
interval: interval,
|
|
559
|
+
offset: (fromBlock ?? 0) % interval,
|
|
560
|
+
fromBlock,
|
|
561
|
+
toBlock,
|
|
562
|
+
hasTransactionReceipt: false,
|
|
563
|
+
include: defaultBlockFilterInclude,
|
|
564
|
+
};
|
|
565
|
+
const eventCallback = {
|
|
566
|
+
filter,
|
|
567
|
+
name: eventName,
|
|
568
|
+
fn: indexingFunction.fn,
|
|
569
|
+
chain,
|
|
570
|
+
type: "block",
|
|
571
|
+
};
|
|
572
|
+
perChainEventCallbacks.get(chain.id).push(eventCallback);
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
logs.push({
|
|
576
|
+
level: "warn",
|
|
577
|
+
msg: "No registered indexing functions",
|
|
578
|
+
name: source.name,
|
|
579
|
+
type: "block",
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
// Filter out any chains that don't have any sources registered.
|
|
584
|
+
const chainsWithSources = [];
|
|
585
|
+
const rpcsWithSources = [];
|
|
586
|
+
const finalizedBlocksWithSources = [];
|
|
587
|
+
const eventCallbacksWithSources = [];
|
|
588
|
+
const setupCallbacksWithSources = [];
|
|
589
|
+
const contractsWithSources = [];
|
|
590
|
+
for (let i = 0; i < chains.length; i++) {
|
|
591
|
+
const chain = chains[i];
|
|
592
|
+
const rpc = rpcs[i];
|
|
593
|
+
const hasIndexingFunctions = perChainEventCallbacks.get(chain.id).length > 0 ||
|
|
594
|
+
perChainSetupCallbacks.get(chain.id).length > 0;
|
|
595
|
+
if (hasIndexingFunctions) {
|
|
596
|
+
chainsWithSources.push(chain);
|
|
597
|
+
rpcsWithSources.push(rpc);
|
|
598
|
+
finalizedBlocksWithSources.push(finalizedBlocks[i]);
|
|
599
|
+
eventCallbacksWithSources.push(perChainEventCallbacks.get(chain.id));
|
|
600
|
+
setupCallbacksWithSources.push(perChainSetupCallbacks.get(chain.id));
|
|
601
|
+
contractsWithSources.push(perChainContracts.get(chain.id));
|
|
602
|
+
}
|
|
603
|
+
else {
|
|
604
|
+
logs.push({
|
|
605
|
+
level: "warn",
|
|
606
|
+
msg: "No registered indexing functions",
|
|
607
|
+
chain: chain.name,
|
|
608
|
+
chain_id: chain.id,
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
if (chainsWithSources.length === 0) {
|
|
613
|
+
throw new Error("Validation failed: Found 0 chains with registered indexing functions.");
|
|
614
|
+
}
|
|
615
|
+
return {
|
|
616
|
+
chains: chainsWithSources,
|
|
617
|
+
rpcs: rpcsWithSources,
|
|
618
|
+
finalizedBlocks: finalizedBlocksWithSources,
|
|
619
|
+
eventCallbacks: eventCallbacksWithSources,
|
|
620
|
+
setupCallbacks: setupCallbacksWithSources,
|
|
621
|
+
contracts: contractsWithSources,
|
|
622
|
+
logs,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
export function buildConfig({ common, config, }) {
|
|
626
|
+
const logs = [];
|
|
627
|
+
const chains = Object.entries(config.chains).map(([chainName, chain]) => {
|
|
628
|
+
if (chain.id > Number.MAX_SAFE_INTEGER) {
|
|
629
|
+
throw new Error(`Chain "${chainName}" with id ${chain.id} has a chain_id that is too large.`);
|
|
630
|
+
}
|
|
631
|
+
let matchedChain = Object.values(viemChains).find((c) => "id" in c ? c.id === chain.id : false);
|
|
632
|
+
if (chain.id === 999) {
|
|
633
|
+
matchedChain = hyperliquidEvm;
|
|
634
|
+
}
|
|
635
|
+
if (chain.rpc === undefined || chain.rpc === "") {
|
|
636
|
+
if (matchedChain === undefined) {
|
|
637
|
+
throw new Error(`Chain "${chainName}" with id ${chain.id} has no RPC defined and no default RPC URL was found in 'viem/chains'.`);
|
|
638
|
+
}
|
|
639
|
+
chain.rpc = matchedChain.rpcUrls.default.http;
|
|
640
|
+
}
|
|
641
|
+
if (typeof chain.rpc === "string" || Array.isArray(chain.rpc)) {
|
|
642
|
+
const rpcs = Array.isArray(chain.rpc) ? chain.rpc : [chain.rpc];
|
|
643
|
+
if (rpcs.length === 0) {
|
|
644
|
+
throw new Error(`Chain "${chainName}" with id ${chain.id} has no RPC URLs.`);
|
|
645
|
+
}
|
|
646
|
+
if (matchedChain) {
|
|
647
|
+
for (const rpc of rpcs) {
|
|
648
|
+
for (const http of matchedChain.rpcUrls.default.http) {
|
|
649
|
+
if (http === rpc) {
|
|
650
|
+
logs.push({
|
|
651
|
+
level: "warn",
|
|
652
|
+
msg: "Detected public RPC URL. Most apps require an RPC URL with a higher rate limit.",
|
|
653
|
+
chain: chainName,
|
|
654
|
+
chain_id: chain.id,
|
|
655
|
+
url: http,
|
|
656
|
+
});
|
|
657
|
+
break;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
for (const ws of matchedChain.rpcUrls.default.webSocket ?? []) {
|
|
661
|
+
if (ws === rpc) {
|
|
662
|
+
logs.push({
|
|
663
|
+
level: "warn",
|
|
664
|
+
msg: "Detected public RPC URL. Most apps require an RPC URL with a higher rate limit.",
|
|
665
|
+
chain: chainName,
|
|
666
|
+
chain_id: chain.id,
|
|
667
|
+
url: ws,
|
|
668
|
+
});
|
|
669
|
+
break;
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
if (chain.pollingInterval !== undefined && chain.pollingInterval < 100) {
|
|
676
|
+
throw new Error(`Invalid 'pollingInterval' for chain '${chainName}. Expected 100 milliseconds or greater, got ${chain.pollingInterval} milliseconds.`);
|
|
677
|
+
}
|
|
678
|
+
return {
|
|
679
|
+
id: chain.id,
|
|
680
|
+
name: chainName,
|
|
681
|
+
rpc: chain.rpc,
|
|
682
|
+
ws: chain.ws,
|
|
683
|
+
pollingInterval: chain.pollingInterval ?? 1000,
|
|
684
|
+
finalityBlockCount: getFinalityBlockCount({ chain: matchedChain }),
|
|
685
|
+
disableCache: chain.disableCache ?? false,
|
|
686
|
+
ethGetLogsBlockRange: chain.ethGetLogsBlockRange,
|
|
687
|
+
viemChain: matchedChain,
|
|
688
|
+
};
|
|
689
|
+
});
|
|
690
|
+
const chainIds = new Set();
|
|
691
|
+
for (const chain of chains) {
|
|
692
|
+
if (chainIds.has(chain.id)) {
|
|
693
|
+
throw new Error(`Invalid id for chain "${chain.name}". ${chain.id} is already in use.`);
|
|
694
|
+
}
|
|
695
|
+
chainIds.add(chain.id);
|
|
696
|
+
}
|
|
697
|
+
const rpcs = chains.map((chain) => createRpc({
|
|
698
|
+
common,
|
|
699
|
+
chain,
|
|
700
|
+
concurrency: Math.floor(common.options.rpcMaxConcurrency / chains.length),
|
|
701
|
+
}));
|
|
702
|
+
return { chains, rpcs, logs };
|
|
703
|
+
}
|
|
704
|
+
export async function safeBuildIndexingFunctions({ common, config, indexingFunctions, configBuild, }) {
|
|
705
|
+
try {
|
|
706
|
+
const result = await buildIndexingFunctions({
|
|
707
|
+
common,
|
|
708
|
+
config,
|
|
709
|
+
indexingFunctions,
|
|
710
|
+
configBuild,
|
|
711
|
+
});
|
|
712
|
+
return {
|
|
713
|
+
status: "success",
|
|
714
|
+
chains: result.chains,
|
|
715
|
+
rpcs: result.rpcs,
|
|
716
|
+
finalizedBlocks: result.finalizedBlocks,
|
|
717
|
+
eventCallbacks: result.eventCallbacks,
|
|
718
|
+
setupCallbacks: result.setupCallbacks,
|
|
719
|
+
contracts: result.contracts,
|
|
720
|
+
logs: result.logs,
|
|
721
|
+
};
|
|
722
|
+
}
|
|
723
|
+
catch (_error) {
|
|
724
|
+
const buildError = new BuildError(_error.message);
|
|
725
|
+
buildError.stack = undefined;
|
|
726
|
+
return { status: "error", error: buildError };
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
export function safeBuildConfig({ common, config, }) {
|
|
730
|
+
try {
|
|
731
|
+
const result = buildConfig({ common, config });
|
|
732
|
+
return {
|
|
733
|
+
status: "success",
|
|
734
|
+
chains: result.chains,
|
|
735
|
+
rpcs: result.rpcs,
|
|
736
|
+
logs: result.logs,
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
catch (_error) {
|
|
740
|
+
const buildError = new BuildError(_error.message);
|
|
741
|
+
buildError.stack = undefined;
|
|
742
|
+
return { status: "error", error: buildError };
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
//# sourceMappingURL=config.js.map
|