chore(codegen): wire wagmi ABI codegen against smart-contracts submodule
- wagmi.config.ts: read ABIs from p2pix-smart-contracts/artifacts/contracts (P2Pix, Reputation, MockToken) and emit src/generated.ts with the @wagmi/cli actions plugin - package.json: add scripts * contracts:compile — installs submodule deps + runs `hardhat compile` * wagmi:gen — runs @wagmi/cli to (re)generate src/generated.ts * prewagmi:gen — chains contracts:compile before wagmi:gen * prestart — runs wagmi:gen, so `bun start` always has fresh ABIs - .gitignore: ignore src/generated.ts (regenerated on every prestart) Note: GraphQL/subgraph codegen is intentionally out of scope here — it will land in its own branch.
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -29,4 +29,7 @@ vendor/
|
|||||||
*.sw?
|
*.sw?
|
||||||
.vercel
|
.vercel
|
||||||
|
|
||||||
.env
|
.env
|
||||||
|
|
||||||
|
# Codegen output (regenerated by `bun run wagmi:gen`, runs on prestart)
|
||||||
|
src/generated.ts
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"prestart": "bun run wagmi:gen",
|
||||||
"start": "vite --host=0.0.0.0 --port 3000",
|
"start": "vite --host=0.0.0.0 --port 3000",
|
||||||
"build": "bun run type-check && bun run build-only",
|
"build": "bun run type-check && bun run build-only",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
@@ -11,7 +12,10 @@
|
|||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"lint:fix": "eslint . --fix",
|
"lint:fix": "eslint . --fix",
|
||||||
"format": "prettier --write \"src/**/*.{ts,vue,json}\"",
|
"format": "prettier --write \"src/**/*.{ts,vue,json}\"",
|
||||||
"format:check": "prettier --check \"src/**/*.{ts,vue,json}\""
|
"format:check": "prettier --check \"src/**/*.{ts,vue,json}\"",
|
||||||
|
"contracts:compile": "cd p2pix-smart-contracts && bun install && bunx hardhat compile",
|
||||||
|
"prewagmi:gen": "bun run contracts:compile",
|
||||||
|
"wagmi:gen": "bun ./node_modules/@wagmi/cli/dist/esm/cli.js generate"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@floating-ui/vue": "^1.1.11",
|
"@floating-ui/vue": "^1.1.11",
|
||||||
|
|||||||
@@ -1,12 +1,32 @@
|
|||||||
import { defineConfig } from '@wagmi/cli';
|
import { defineConfig } from '@wagmi/cli';
|
||||||
import { hardhat } from '@wagmi/cli/plugins';
|
import { actions } from '@wagmi/cli/plugins';
|
||||||
|
import { readFileSync } from 'node:fs';
|
||||||
|
import { resolve } from 'node:path';
|
||||||
|
|
||||||
|
const artifactsRoot = resolve(
|
||||||
|
__dirname,
|
||||||
|
'p2pix-smart-contracts/artifacts/contracts',
|
||||||
|
);
|
||||||
|
|
||||||
|
const loadAbi = (relPath: string) => {
|
||||||
|
const json = JSON.parse(
|
||||||
|
readFileSync(resolve(artifactsRoot, relPath), 'utf8'),
|
||||||
|
);
|
||||||
|
return json.abi as readonly unknown[];
|
||||||
|
};
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
out: 'src/blockchain/abi.ts',
|
out: 'src/generated.ts',
|
||||||
contracts: [],
|
contracts: [
|
||||||
plugins: [
|
{ name: 'P2Pix', abi: loadAbi('p2pix.sol/P2PIX.json') as never },
|
||||||
hardhat({
|
{
|
||||||
project: 'p2pix-smart-contracts',
|
name: 'Reputation',
|
||||||
}),
|
abi: loadAbi('Reputation.sol/Reputation.json') as never,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'MockToken',
|
||||||
|
abi: loadAbi('lib/mock/mockToken.sol/MockToken.json') as never,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
|
plugins: [actions()],
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user