Skip to content

Commit 76c194a

Browse files
committed
feat: railgun subgraph for shield and unshield events
- [x] Added subgraph boilerplate - [x] Implemented event handlers for Shield and Unshield events - [x] Added tests
1 parent f7571a8 commit 76c194a

17 files changed

Lines changed: 6667 additions & 73 deletions

.github/workflows/subgraph.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: subgraph
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
workflow_dispatch:
8+
9+
jobs:
10+
subgraph:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v6
15+
16+
- name: Setup Node
17+
uses: actions/setup-node@v6
18+
with:
19+
node-version: 24
20+
21+
- name: Setup pnpm
22+
uses: pnpm/action-setup@v5
23+
with:
24+
version: latest
25+
26+
- name: Install dependencies
27+
run: pnpm install --frozen-lockfile
28+
29+
- name: Codegen and build
30+
run: |-
31+
pnpm run codegen
32+
pnpm run build
33+
working-directory: subgraph
34+
35+
- name: Test
36+
run: pnpm run test
37+
working-directory: subgraph

eslint.config.js

Lines changed: 87 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ import unusedImports from "eslint-plugin-unused-imports";
1313
import globals from "globals";
1414

1515
import { readFileSync } from "fs";
16-
import { dirname } from "node:path";
17-
import { fileURLToPath } from "node:url";
18-
import { resolve } from "path";
16+
import { dirname, resolve } from "path";
17+
import { fileURLToPath } from "url";
1918

2019
const { configs } = pkg;
2120

@@ -206,18 +205,89 @@ const evalConfig = {
206205
"error",
207206
{
208207
builtinGlobals: true,
209-
allow: [
210-
"location",
211-
"event",
212-
"history",
213-
"name",
214-
"status",
215-
"Option",
216-
"test",
217-
"expect",
218-
"jest",
219-
"PropertyDefinition",
220-
],
208+
allow: ["name", "PropertyDefinition"],
209+
},
210+
],
211+
},
212+
};
213+
214+
const subgraphExtends = fixupConfigRules(
215+
compat.extends(
216+
"airbnb",
217+
"prettier",
218+
"plugin:import/recommended",
219+
"plugin:@typescript-eslint/eslint-recommended",
220+
"plugin:@typescript-eslint/recommended",
221+
"plugin:@typescript-eslint/strict",
222+
"plugin:@typescript-eslint/stylistic",
223+
"plugin:import/typescript",
224+
"plugin:@typescript-eslint/stylistic-type-checked",
225+
),
226+
);
227+
228+
const subgraphConfig = {
229+
files: ["subgraph/src/**/*.ts", "subgraph/tests/**/*.ts"],
230+
extends: subgraphExtends,
231+
plugins: sharedPlugins,
232+
languageOptions: {
233+
parser: tsParser,
234+
sourceType: "module",
235+
ecmaVersion: 2022,
236+
globals: globals.node,
237+
parserOptions: {
238+
...sharedParserOptions,
239+
project: resolve(__dirname, "./subgraph/tsconfig.json"),
240+
},
241+
},
242+
settings: {
243+
react: { version: "999.999.999" },
244+
"import/resolver": {
245+
typescript: {},
246+
node: { extensions: [".ts", ".js"], moduleDirectory: ["node_modules", "src", "tests", "generated"] },
247+
},
248+
},
249+
linterOptions: { reportUnusedDisableDirectives: isProduction },
250+
rules: {
251+
...sharedRules,
252+
"import/no-unresolved": ["error", { ignore: ["generated"] }],
253+
"import/no-extraneous-dependencies": [
254+
"error",
255+
{
256+
devDependencies: ["**/*.test.ts", "**/tests/**"],
257+
},
258+
],
259+
"no-debugger": isProduction ? "error" : "off",
260+
"no-underscore-dangle": "error",
261+
"no-redeclare": ["error", { builtinGlobals: true }],
262+
"import/order": [
263+
"error",
264+
{
265+
groups: ["external", "builtin", "internal", "type", "parent", "sibling", "index", "object"],
266+
alphabetize: { order: "asc", caseInsensitive: true },
267+
warnOnUnassignedImports: true,
268+
"newlines-between": "always",
269+
},
270+
],
271+
"import/prefer-default-export": "off",
272+
"import/extensions": ["error", { json: "always" }],
273+
"class-methods-use-this": "off",
274+
"prefer-promise-reject-errors": "off",
275+
"max-classes-per-file": "off",
276+
"no-use-before-define": ["off"],
277+
"no-shadow": "off",
278+
curly: ["error", "all"],
279+
"no-return-await": "off",
280+
"prefer-destructuring": "off",
281+
"@typescript-eslint/prefer-for-of": "off",
282+
"@typescript-eslint/consistent-type-imports": "off",
283+
"@typescript-eslint/explicit-member-accessibility": ["error", { accessibility: "no-public" }],
284+
"@typescript-eslint/explicit-module-boundary-types": "error",
285+
"@typescript-eslint/no-use-before-define": ["error", { functions: false, classes: false }],
286+
"@typescript-eslint/no-shadow": [
287+
"error",
288+
{
289+
builtinGlobals: true,
290+
allow: ["BigInt", "Request", "describe", "afterEach", "beforeEach", "beforeAll"],
221291
},
222292
],
223293
},
@@ -228,5 +298,6 @@ const evalConfig = {
228298
export default defineConfig([
229299
gasConfig,
230300
evalConfig,
231-
globalIgnores(["**/node_modules", "**/dist", "**/coverage", "**/build", "eslint.config.js"]),
301+
subgraphConfig,
302+
globalIgnores(["**/node_modules", "**/dist", "**/coverage", "**/build", "eslint.config.js", "subgraph/generated"]),
232303
]);

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
"private": true,
66
"type": "module",
77
"scripts": {
8-
"lint": "eslint gas-benchmarks/src project-evaluations/src",
9-
"lint:fix": "eslint --fix gas-benchmarks/src project-evaluations/src",
8+
"lint": "eslint gas-benchmarks/src project-evaluations/src subgraph/src subgraph/tests",
9+
"lint:fix": "pnpm run lint --fix",
1010
"format": "prettier --check .",
1111
"format:fix": "prettier --write .",
1212
"prepare": "husky"

0 commit comments

Comments
 (0)