Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# squid
/lib
/preloaders/lib
/builds

/**Versions.json
Expand Down
20 changes: 5 additions & 15 deletions codegen.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import {
sepolia,
} from 'viem/chains';

//TODO: Not available yet on cannon.
const supportedMainnets = [arbitrum.id, base.id, mainnet.id, optimism.id];
const supportedTestnets = [
arbitrumSepolia.id,
Expand All @@ -22,8 +21,8 @@ const supportedTestnets = [
optimismSepolia.id,
sepolia.id,
];
//TODO: evaluate to be a env-var. But it needs to sync with npm-deps.
const packageRef = 'cartesi-rollups:2.0.0-rc.17';

const packageRef = 'cartesi-rollups:2.0.0';
const abiFolder = join(process.cwd(), 'abi');
const outFolder = join(process.cwd(), 'src', 'deployments');
const codegenMetaFileName = '__meta.json';
Expand Down Expand Up @@ -154,11 +153,6 @@ const readABIFor = async (list) => {
return contracts;
};

/**
*
* @param {string} chainId
* @returns {void}
*/
async function codegen(chainId) {
const { ok } = await execCannonInspect({
packageRef,
Expand Down Expand Up @@ -198,7 +192,7 @@ async function generateABIFiles(chainId) {
}

async function run() {
const networks = [...supportedTestnets];
const networks = [...supportedMainnets, ...supportedTestnets];
const codegenPromises = networks.map((chainId) => {
console.log(`Codegen for chain-id: ${chainId.toString()}`);
return codegen(chainId.toString());
Expand All @@ -214,15 +208,11 @@ async function run() {
codegenResult.forEach((data, i) => {
if (data.status === 'fulfilled')
console.info(
`Rollups contracts for chain-id ${supportedTestnets[
i
].toString()} generated at ${outFolder}`,
`Rollups contracts for chain-id ${networks[i].toString()} generated at ${outFolder}`,
);
else
console.error(
`Rollups contracts for chain-id ${supportedTestnets[
i
].toString()} failed to be created. Reason: ${data.reason}`,
`Rollups contracts for chain-id ${networks[i].toString()} failed to be created. Reason: ${data.reason}`,
);
});
}
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"build": "run-s clean sqd:typegen sqd:codegen tsc",
"clean": "rm -rf lib",
"test": "vitest",
"ci:test": "vitest run --coverage",
"ci:test": "vitest run --coverage",
"sqd": "sqd",
"sqd:build": "sqd build",
"sqd:codegen": "sqd codegen",
Expand All @@ -29,11 +29,11 @@
"process:prod": "node deploy/run --npmScriptName=sqd:process:prod",
"serve:prod": "node deploy/run --npmScriptName=sqd:graphql:prod",
"tsc": "tsc",
"cannon": "cannon"
"cannon": "cannon"
},
"dependencies": {
"@cartesi/rollups": "1.4.0",
"@cartesi/rollups-v2": "npm:@cartesi/rollups@2.0.0-rc.17",
"@cartesi/rollups-v2": "npm:@cartesi/rollups@2.0.0",
"@subsquid/evm-abi": "^0.3.1",
"@subsquid/evm-codec": "^0.3.0",
"@subsquid/evm-processor": "^1.4.0",
Expand Down Expand Up @@ -65,4 +65,4 @@
"typescript": "^5",
"vitest": "^2"
}
}
}
89 changes: 52 additions & 37 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,12 @@ import { contracts as OptSepoliaContracts } from './deployments/11155420/contrac
import { contracts as CannonContracts } from './deployments/13370/contracts.json';
import { contracts as ArbSepoliaContracts } from './deployments/421614/contracts.json';
import { contracts as BaseSepoliaContracts } from './deployments/84532/contracts.json';
import { contracts as MainnetContracts } from './deployments/1/contracts.json';
import { contracts as OptimismContracts } from './deployments/10/contracts.json';
import { contracts as BaseContracts } from './deployments/8453/contracts.json';
import { contracts as ArbitrumContracts } from './deployments/42161/contracts.json';
import { archiveNodes } from './gateways';
import { parseIntOr } from './utils';
import { parseIntOr, smallerOf } from './utils';

// addresses from deployment/13370. (Probably) the addresses will be the same on all chains
type RollupContractName = keyof typeof CannonContracts;
Expand Down Expand Up @@ -120,6 +124,13 @@ export const getConfig = (chainId: number): ProcessorConfig => {
defaultVal: FINALITY_CONFIRMATION,
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: smallerOf([
MainnetContracts.ApplicationFactory
.deployTxnBlockNumber,
MainnetContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case sepolia.id:
return {
Expand All @@ -141,15 +152,11 @@ export const getConfig = (chainId: number): ProcessorConfig => {
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: Math.min(
parseInt(
SepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
),
parseInt(
SepoliaContracts.InputBox.deployTxnBlockNumber,
),
),
from: smallerOf([
SepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
SepoliaContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case optimism.id:
Expand All @@ -171,6 +178,13 @@ export const getConfig = (chainId: number): ProcessorConfig => {
defaultVal: FINALITY_CONFIRMATION,
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: smallerOf([
OptimismContracts.ApplicationFactory
.deployTxnBlockNumber,
OptimismContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case optimismSepolia.id: //Optimism-Sepolia
return {
Expand All @@ -192,15 +206,11 @@ export const getConfig = (chainId: number): ProcessorConfig => {
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: Math.min(
parseInt(
OptSepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
),
parseInt(
OptSepoliaContracts.InputBox.deployTxnBlockNumber,
),
),
from: smallerOf([
OptSepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
OptSepoliaContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case base.id:
Expand All @@ -222,6 +232,12 @@ export const getConfig = (chainId: number): ProcessorConfig => {
defaultVal: FINALITY_CONFIRMATION,
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: smallerOf([
BaseContracts.ApplicationFactory.deployTxnBlockNumber,
BaseContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case baseSepolia.id:
return {
Expand All @@ -243,15 +259,11 @@ export const getConfig = (chainId: number): ProcessorConfig => {
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: Math.min(
parseInt(
BaseSepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
),
parseInt(
BaseSepoliaContracts.InputBox.deployTxnBlockNumber,
),
),
from: smallerOf([
BaseSepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
BaseSepoliaContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case arbitrum.id:
Expand All @@ -273,6 +285,13 @@ export const getConfig = (chainId: number): ProcessorConfig => {
defaultVal: FINALITY_CONFIRMATION,
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: smallerOf([
ArbitrumContracts.ApplicationFactory
.deployTxnBlockNumber,
ArbitrumContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case arbitrumSepolia.id:
return {
Expand All @@ -294,15 +313,11 @@ export const getConfig = (chainId: number): ProcessorConfig => {
value: process.env[BLOCK_CONFIRMATIONS],
}),
v2: {
from: Math.min(
parseInt(
ArbSepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
),
parseInt(
ArbSepoliaContracts.InputBox.deployTxnBlockNumber,
),
),
from: smallerOf([
ArbSepoliaContracts.ApplicationFactory
.deployTxnBlockNumber,
ArbSepoliaContracts.InputBox.deployTxnBlockNumber,
]),
},
};
case cannon.id:
Expand Down
21 changes: 21 additions & 0 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,27 @@ export function parseIntOr({ value, defaultVal }: ParseIntOr) {
return Number.isNaN(number) ? defaultVal : number;
}

/**
* @description Receive a list of parseable strings and return the smallest one as a number.
*
* If list is null/undefined/empty 0 is returned.
* @param {string[]} list
* @returns {number}
*/
export function smallerOf(list: string[]): number {
if (!list || list.length === 0) return 0;
const copied = [...list];

const initialValue = parseIntOr({
value: copied.shift(),
defaultVal: Number.MAX_SAFE_INTEGER,
});

return copied.reduce((curr, next) => {
return Math.min(curr, parseIntOr({ value: next, defaultVal: curr }));
}, initialValue);
}

/**
* Utility to generate standard format IDs based on array of values.
* That makes the id creation between entities less error prone.
Expand Down
Loading