From b4530eb4624146d6a10fdada0984d4312dba807f Mon Sep 17 00:00:00 2001 From: Ed <5167260+edmulraney@users.noreply.github.com> Date: Fri, 16 May 2025 23:46:18 +0100 Subject: [PATCH] feat(deployments): add support for new chains --- .changeset/tall-feet-walk.md | 6 + .github/workflows/ci.yml | 6 +- package.json | 9 +- packages/deployments/README.md | 22 ++-- packages/deployments/get-deployments.cjs | 103 ------------------ packages/deployments/package.json | 1 - .../src/axis-periphery/.bsc-testnet.json | 14 +++ .../deployments/src/axis-periphery/.bsc.json | 14 +++ .../src/axis-periphery/.mainnet.json | 0 .../src/axis-periphery/.monad-testnet.json | 14 +++ .../src/axis-periphery/.sepolia.json | 6 + .../src/axis-periphery/.sonic.json | 14 +++ .../deployments/src/chains/mainnet/bsc.ts | 35 ++++++ .../deployments/src/chains/mainnet/index.ts | 4 +- .../deployments/src/chains/mainnet/sonic.ts | 33 ++++++ .../deployments/src/chains/testnet/index.ts | 2 + .../src/chains/testnet/monad-testnet.ts | 31 ++++++ packages/deployments/src/subgraph-config.ts | 2 +- packages/subgraph-client/codegen.ts | 2 +- 19 files changed, 194 insertions(+), 124 deletions(-) create mode 100644 .changeset/tall-feet-walk.md delete mode 100644 packages/deployments/get-deployments.cjs create mode 100644 packages/deployments/src/axis-periphery/.bsc-testnet.json create mode 100644 packages/deployments/src/axis-periphery/.bsc.json create mode 100644 packages/deployments/src/axis-periphery/.mainnet.json create mode 100644 packages/deployments/src/axis-periphery/.monad-testnet.json create mode 100644 packages/deployments/src/axis-periphery/.sepolia.json create mode 100644 packages/deployments/src/axis-periphery/.sonic.json create mode 100644 packages/deployments/src/chains/mainnet/bsc.ts create mode 100644 packages/deployments/src/chains/mainnet/sonic.ts create mode 100644 packages/deployments/src/chains/testnet/monad-testnet.ts diff --git a/.changeset/tall-feet-walk.md b/.changeset/tall-feet-walk.md new file mode 100644 index 00000000..c45d254b --- /dev/null +++ b/.changeset/tall-feet-walk.md @@ -0,0 +1,6 @@ +--- +"@axis-finance/subgraph-client": patch +"@axis-finance/deployments": patch +--- + +Add support for new chains diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 975966dd..a8709a4f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,12 +25,12 @@ jobs: node-version: "21.6.0" cache: "pnpm" - - name: Setup Playwright - run: pnpx playwright install chromium --with-deps --only-shell - - name: Install dependencies run: pnpm i --frozen-lockfile + - name: Setup Playwright + run: pnpx playwright@1.50.1 install chromium --with-deps --only-shell + - name: Build run: pnpm build diff --git a/package.json b/package.json index 87ab05ce..5c835d93 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "format": "prettier --write \"**/*.{ts,tsx,md,json,css,html}\"", "prepare": "husky", "test": "turbo run test", - "test:unit": "turbo run test:unit" + "test:unit": "turbo run test:unit", + "cs-version": "changeset" }, "devDependencies": { "eslint": "8.57.1", @@ -23,15 +24,15 @@ "prettier": "^3.1.1", "turbo": "^1.12.4" }, + "dependencies": { + "@changesets/cli": "2.27.10" + }, "packageManager": "pnpm@8.15.5+sha256.4b4efa12490e5055d59b9b9fc9438b7d581a6b7af3b5675eb5c5f447cee1a589", "resolutions": { "@tanstack/react-query": "5.18.1", "graphql": "16.8.1", "react": "18.3.1" }, - "dependencies": { - "@changesets/cli": "2.27.10" - }, "pnpm": { "neverBuiltDependencies": [ "bufferutil", diff --git a/packages/deployments/README.md b/packages/deployments/README.md index c7523cc6..c64ef469 100644 --- a/packages/deployments/README.md +++ b/packages/deployments/README.md @@ -4,16 +4,18 @@ This repo contains all the data that describes an Axis Deployment per chain. Thi For chains we extend [viem's chain definition](https://viem.sh/docs/chains/introduction.html) -## Adding deployments +## Adding a new chain deployment -- Create a new file with the network name in the corresponding dir on the project root (`./testnets` or `./mainnets`) -- Add the required information -- Add your file to its directory index.ts -- ??? -- Done +1. Obtain the deployment configuration for the [core](https://github.com/Axis-Fi/axis-core/tree/master/deployments), [periphery](https://github.com/Axis-Fi/axis-periphery/tree/master/deployments), and [utils](https://github.com/Axis-Fi/axis-registry) contracts from the linked repos. -## Syncing contract addresses +2. Copy the deployment configs into `./src/axis-core`, `./src/axis-periphery`, and `./src/axis-utils` -Ensure axis-core and axis-periphery are sibling directories to this monorepo and have the latest verion. -Run `pnpm sync` on this directory. -This script will take the latest version of the deployment jsons and update them here. +3. Create a new file with the network name in the corresponding dir on the project root (`./src/chains/testnet` or `./src/chains/mainnet`) + +4. Add the chain information including RPC and subgraph URLs + +5. Add your file to the `index.ts` barrel file in the same directory + +6. Commit a changeset for this package from the monorepo root with `pnpm build && pnpm cs-version` + +7. Approve the changeset on Github to trigger an npm release diff --git a/packages/deployments/get-deployments.cjs b/packages/deployments/get-deployments.cjs deleted file mode 100644 index bff288be..00000000 --- a/packages/deployments/get-deployments.cjs +++ /dev/null @@ -1,103 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const coreDir = path.resolve(__dirname, "../../../moonraker/deployments"); -const peripheryDir = path.resolve( - __dirname, - "../../../axis-periphery/deployments", -); - -// Get the source directory based on the provided argument -function getSourceDir(type) { - if (type === "core") { - return coreDir; - } else if (type === "periphery") { - return peripheryDir; - } else { - throw new Error("Invalid type specified. Use 'core' or 'periphery'."); - } -} - -// Get the latest version or the specific version files -function getVersionedFiles(files, specifiedVersion = null) { - const versionedFiles = files - .map((file) => { - const match = file.match(/(.+)-v(\d+\.\d+\.\d+)\.json$/); - if (match) { - const [fullName, baseName, version] = match; - return { fullName, baseName, version }; - } - return null; - }) - .filter(Boolean); - - if (specifiedVersion) { - return versionedFiles.filter((file) => file.version === specifiedVersion); - } else { - versionedFiles.sort((a, b) => { - const verA = a.version.split(".").map(Number); - const verB = b.version.split(".").map(Number); - - for (let i = 0; i < 3; i++) { - if (verA[i] > verB[i]) return -1; - if (verA[i] < verB[i]) return 1; - } - return 0; - }); - - const latestVersion = versionedFiles[0].version; - return versionedFiles.filter((file) => file.version === latestVersion); - } -} - -// Main function to copy files -function copyFiles(type, version = null) { - const sourceDir = getSourceDir(type); - - if (!fs.existsSync(sourceDir)) { - console.error(`Source directory does not exist: ${sourceDir}`); - return; - } - - const targetDir = path.resolve(__dirname, `./axis-${type}`); - - if (!fs.existsSync(targetDir)) { - fs.mkdirSync(targetDir, { recursive: true }); - } - - fs.readdir(sourceDir, (err, files) => { - if (err) { - console.error(`Error reading source directory: ${err.message}`); - return; - } - - const filesToCopy = getVersionedFiles(files, version); - - if (filesToCopy.length === 0) { - console.log(`No files found for version: ${version}`); - return; - } - - filesToCopy.forEach(({ fullName, baseName }) => { - const sourceFilePath = path.join(sourceDir, fullName); - const targetFilePath = path.join(targetDir, `${baseName}.json`); - - fs.copyFile(sourceFilePath, targetFilePath, (err) => { - if (err) { - console.error(`Error copying file ${fullName}: ${err.message}`); - } else { - console.log(`Copied ${fullName} to ${baseName}.json`); - } - }); - }); - }); -} - -const [type, versionArgument] = process.argv.slice(2); - -if (!type) { - console.error("Please specify 'core' or 'periphery' as the first argument."); - process.exit(1); -} - -copyFiles(type, versionArgument); diff --git a/packages/deployments/package.json b/packages/deployments/package.json index be9138e5..d0b3eabf 100644 --- a/packages/deployments/package.json +++ b/packages/deployments/package.json @@ -26,7 +26,6 @@ "@axis-finance/tsup-config": "workspace:*" }, "scripts": { - "sync": "node ./get-deployments.cjs", "build": "tsup" } } diff --git a/packages/deployments/src/axis-periphery/.bsc-testnet.json b/packages/deployments/src/axis-periphery/.bsc-testnet.json new file mode 100644 index 00000000..bbf5f7bf --- /dev/null +++ b/packages/deployments/src/axis-periphery/.bsc-testnet.json @@ -0,0 +1,14 @@ +{ + "deployments.callbacks.BatchCappedMerkleAllowlist": [ + "0x98AdAeb0A575d5ef6c7385BE55EB55B25F60c61f" + ], + "deployments.callbacks.BatchMerkleAllowlist": [ + "0x98F2ce54059a296df7e63355b4E2FCD3943A4F3d" + ], + "deployments.callbacks.BatchTokenAllowlist": [ + "0x987BF7a19894aD855F8f51e62611590295DC1255" + ], + "deployments.callbacks.BatchAllocatedMerkleAllowlist": [ + "0x98118d3ddD377ecbf39C702453643eFC68B73093" + ] +} diff --git a/packages/deployments/src/axis-periphery/.bsc.json b/packages/deployments/src/axis-periphery/.bsc.json new file mode 100644 index 00000000..999e2ae3 --- /dev/null +++ b/packages/deployments/src/axis-periphery/.bsc.json @@ -0,0 +1,14 @@ +{ + "deployments.callbacks.BatchCappedMerkleAllowlist": [ + "0x9854F3dA1692E7b95C5bcF62b7f8D0413216a828" + ], + "deployments.callbacks.BatchMerkleAllowlist": [ + "0x989E0dA548D05c45ee0Ef1BEBa20472cDFFdEa22" + ], + "deployments.callbacks.BatchTokenAllowlist": [ + "0x98606a2A147DeEAAB12D60928C85d0c6B59621bD" + ], + "deployments.callbacks.BatchAllocatedMerkleAllowlist": [ + "0x980157254aD105A609C83482c2a473e924F077b2" + ] +} diff --git a/packages/deployments/src/axis-periphery/.mainnet.json b/packages/deployments/src/axis-periphery/.mainnet.json new file mode 100644 index 00000000..e69de29b diff --git a/packages/deployments/src/axis-periphery/.monad-testnet.json b/packages/deployments/src/axis-periphery/.monad-testnet.json new file mode 100644 index 00000000..de5c4119 --- /dev/null +++ b/packages/deployments/src/axis-periphery/.monad-testnet.json @@ -0,0 +1,14 @@ +{ + "deployments.callbacks.BatchCappedMerkleAllowlist": [ + "0x9822C0AA01Abba260764a1519f8724f821c85358" + ], + "deployments.callbacks.BatchMerkleAllowlist": [ + "0x98c27B29BB2aB88f419632EED268D6f38903573b" + ], + "deployments.callbacks.BatchTokenAllowlist": [ + "0x98aa8Ae03dCA54aFb23b5D91fBAb4E57e2b17952" + ], + "deployments.callbacks.BatchAllocatedMerkleAllowlist": [ + "0x9896Fc91bFe40a874b1f1f185a5E2466569E93f5" + ] +} diff --git a/packages/deployments/src/axis-periphery/.sepolia.json b/packages/deployments/src/axis-periphery/.sepolia.json new file mode 100644 index 00000000..c35cd75e --- /dev/null +++ b/packages/deployments/src/axis-periphery/.sepolia.json @@ -0,0 +1,6 @@ +{ + "deployments.callbacks.BatchCappedMerkleAllowlist": "0x98AdAeb0A575d5ef6c7385BE55EB55B25F60c61f", + "deployments.callbacks.BatchMerkleAllowlist": "0x98F2ce54059a296df7e63355b4E2FCD3943A4F3d", + "deployments.callbacks.BatchTokenAllowlist": "0x987BF7a19894aD855F8f51e62611590295DC1255", + "deployments.callbacks.BatchAllocatedMerkleAllowlist": "0x98118d3ddD377ecbf39C702453643eFC68B73093" +} diff --git a/packages/deployments/src/axis-periphery/.sonic.json b/packages/deployments/src/axis-periphery/.sonic.json new file mode 100644 index 00000000..999e2ae3 --- /dev/null +++ b/packages/deployments/src/axis-periphery/.sonic.json @@ -0,0 +1,14 @@ +{ + "deployments.callbacks.BatchCappedMerkleAllowlist": [ + "0x9854F3dA1692E7b95C5bcF62b7f8D0413216a828" + ], + "deployments.callbacks.BatchMerkleAllowlist": [ + "0x989E0dA548D05c45ee0Ef1BEBa20472cDFFdEa22" + ], + "deployments.callbacks.BatchTokenAllowlist": [ + "0x98606a2A147DeEAAB12D60928C85d0c6B59621bD" + ], + "deployments.callbacks.BatchAllocatedMerkleAllowlist": [ + "0x980157254aD105A609C83482c2a473e924F077b2" + ] +} diff --git a/packages/deployments/src/chains/mainnet/bsc.ts b/packages/deployments/src/chains/mainnet/bsc.ts new file mode 100644 index 00000000..9ed6f385 --- /dev/null +++ b/packages/deployments/src/chains/mainnet/bsc.ts @@ -0,0 +1,35 @@ +import { bsc } from "viem/chains"; +import type { AxisDeploymentConfig } from "../../types"; +import { usdc } from "../../tokens/common"; +import core from "../../axis-core/.bsc.json"; +import periphery from "../../axis-periphery/.bsc.json"; +import { extractAddresses, extractCallbacks } from "../helpers"; + +const config: AxisDeploymentConfig = { + name: "bsc", + chain: bsc, + chainIconUrl: "/bsc.webp", + subgraphURL: + "https://subgraph.satsuma-prod.com/44c4cc082f74/spaces-team/axis-origin-bsc/version/v/api", + rpcURL: + "https://bnb-mainnet.g.alchemy.com/v2/h6OEviwRZGmTSXHYPRmMquo5u-YoWLeY", + tokenList: [ + { + ...usdc, + address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + decimals: 6, + }, + { + name: "Wrapped BNB", + symbol: "WBNB", + logoURI: + "https://assets.coingecko.com/coins/images/825/standard/bnb-icon2_2x.png", + decimals: 18, + address: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + }, + ], + ...extractAddresses(core), + ...extractCallbacks(periphery), +}; + +export default config; diff --git a/packages/deployments/src/chains/mainnet/index.ts b/packages/deployments/src/chains/mainnet/index.ts index 26c3fe85..6885fbe4 100644 --- a/packages/deployments/src/chains/mainnet/index.ts +++ b/packages/deployments/src/chains/mainnet/index.ts @@ -4,5 +4,7 @@ import blast from "./blast"; import mantle from "./mantle"; import mode from "./mode"; import mainnet from "./mainnet"; +import bsc from "./bsc"; +import sonic from "./sonic"; -export default [arbitrum, base, blast, mantle, mode, mainnet]; +export default [arbitrum, base, blast, mantle, mode, mainnet, bsc, sonic]; diff --git a/packages/deployments/src/chains/mainnet/sonic.ts b/packages/deployments/src/chains/mainnet/sonic.ts new file mode 100644 index 00000000..a8404f88 --- /dev/null +++ b/packages/deployments/src/chains/mainnet/sonic.ts @@ -0,0 +1,33 @@ +import { sonic } from "viem/chains"; +import type { AxisDeploymentConfig } from "../../types"; +import core from "../../axis-core/.sonic.json"; +import periphery from "../../axis-periphery/.sonic.json"; +import { extractAddresses, extractCallbacks } from "../helpers"; +import { usdc } from "../../tokens/common"; + +const config: AxisDeploymentConfig = { + name: "sonic", + chain: sonic, + chainIconUrl: "/sonic-logo.png", + subgraphURL: + "https://subgraph.satsuma-prod.com/44c4cc082f74/spaces-team/axis-origin-sonic/version/v/api", + rpcURL: + "https://sonic-mainnet.g.alchemy.com/v2/h6OEviwRZGmTSXHYPRmMquo5u-YoWLeY", + tokenList: [ + { + ...usdc, + address: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894", + }, + { + name: "Wrapped Sonic", + symbol: "wS", + logoURI: `https://assets.coingecko.com/coins/images/38108/standard/200x200_Sonic_Logo.png`, + decimals: 18, + address: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38", + }, + ], + ...extractAddresses(core), + ...extractCallbacks(periphery), +}; + +export default config; diff --git a/packages/deployments/src/chains/testnet/index.ts b/packages/deployments/src/chains/testnet/index.ts index 156c3d42..25a4c5e7 100644 --- a/packages/deployments/src/chains/testnet/index.ts +++ b/packages/deployments/src/chains/testnet/index.ts @@ -4,6 +4,7 @@ import modeTestnet from "./mode-testnet"; import baseSepolia from "./base-sepolia"; import mantleSepolia from "./mantle-sepolia"; import sepolia from "./sepolia"; +import monadTestnet from "./monad-testnet"; export default [ blastSepolia, @@ -12,4 +13,5 @@ export default [ baseSepolia, mantleSepolia, sepolia, + monadTestnet, ]; diff --git a/packages/deployments/src/chains/testnet/monad-testnet.ts b/packages/deployments/src/chains/testnet/monad-testnet.ts new file mode 100644 index 00000000..4ce84ab2 --- /dev/null +++ b/packages/deployments/src/chains/testnet/monad-testnet.ts @@ -0,0 +1,31 @@ +import { monadTestnet } from "viem/chains"; +import type { AxisDeploymentConfig } from "../../types"; +import { weth, usdc } from "../../tokens/common"; +import core from "../../axis-core/.monad-testnet.json"; +import periphery from "../../axis-periphery/.monad-testnet.json"; +import { extractAddresses, extractCallbacks } from "../helpers"; + +const config: AxisDeploymentConfig = { + name: "monad-testnet", + chain: monadTestnet, + chainIconUrl: "/monad.svg", + subgraphURL: + "https://subgraph.satsuma-prod.com/44c4cc082f74/spaces-team/axis-origin-monad-testnet/version/v/api", + rpcURL: + "https://monad-testnet.g.alchemy.com/v2/h6OEviwRZGmTSXHYPRmMquo5u-YoWLeY", + tokenList: [ + { + ...usdc, + address: "0xf817257fed379853cDe0fa4F97AB987181B1E5Ea", + decimals: 6, + }, + { + ...weth, + address: "0xB5a30b0FDc5EA94A52fDc42e3E9760Cb8449Fb37", + }, + ], + ...extractAddresses(core), + ...extractCallbacks(periphery), +}; + +export default config; diff --git a/packages/deployments/src/subgraph-config.ts b/packages/deployments/src/subgraph-config.ts index 91106d99..ae6cd11e 100644 --- a/packages/deployments/src/subgraph-config.ts +++ b/packages/deployments/src/subgraph-config.ts @@ -1,6 +1,6 @@ // The deployed subgraph version // NOTE: if the subgraph schema changes, please update packages/subgraph-client/codegen.ts ENDPOINT -const version = "1.0.6"; +const version = "1.0.7"; export default { graph: "/axis-origin", diff --git a/packages/subgraph-client/codegen.ts b/packages/subgraph-client/codegen.ts index ef20e475..93f09e75 100644 --- a/packages/subgraph-client/codegen.ts +++ b/packages/subgraph-client/codegen.ts @@ -1,7 +1,7 @@ import { CodegenConfig } from "@graphql-codegen/cli"; const ENDPOINT = - "https://subgraph.satsuma-prod.com/44c4cc082f74/spaces-team/axis-origin-base/version/v1.0.6/api"; + "https://subgraph.satsuma-prod.com/44c4cc082f74/spaces-team/axis-origin-base/version/v1.0.7/api"; const config: CodegenConfig = { schema: ENDPOINT,