diff --git a/.gitignore b/.gitignore
index 2f79516..cf976f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ node_modules
.DS_Store
.env*
+!packages/deploy/.env.example
diff --git a/README.md b/README.md
index 3f47a5a..cec1c6f 100644
--- a/README.md
+++ b/README.md
@@ -29,6 +29,18 @@ The `FileStore` contract acts as a minimum viable registry, a global namespace o
+
+ | Abstract |
+
+
+ | Abstract Mainnet |
+ 0xFe1411d6864592549AdE050215482e4385dFa0FB |
+
+
+ | Abstract Sepolia |
+ 0xFe1411d6864592549AdE050215482e4385dFa0FB |
+
| Ethereum |
diff --git a/packages/deploy/.env.example b/packages/deploy/.env.example
new file mode 100644
index 0000000..7545aa2
--- /dev/null
+++ b/packages/deploy/.env.example
@@ -0,0 +1,5 @@
+RPC_HTTP_URL=
+DEPLOYER_PRIVATE_KEY=
+VERIFIER=
+VERIFIER_URL=
+VERIFIER_API_KEY=
diff --git a/packages/deploy/deploys.json b/packages/deploy/deploys.json
index 6980048..eb1a75a 100644
--- a/packages/deploy/deploys.json
+++ b/packages/deploy/deploys.json
@@ -59,6 +59,16 @@
}
}
},
+ "2741": {
+ "chainId": 2741,
+ "deployer": "0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7",
+ "contracts": {
+ "FileStore": {
+ "address": "0xFe1411d6864592549AdE050215482e4385dFa0FB",
+ "blockNumber": "10966338"
+ }
+ }
+ },
"8453": {
"chainId": 8453,
"deployer": "0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7",
@@ -79,6 +89,16 @@
}
}
},
+ "11124": {
+ "chainId": 11124,
+ "deployer": "0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7",
+ "contracts": {
+ "FileStore": {
+ "address": "0xFe1411d6864592549AdE050215482e4385dFa0FB",
+ "blockNumber": "10200227"
+ }
+ }
+ },
"17000": {
"chainId": 17000,
"deployer": "0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7",
diff --git a/packages/deploy/src/deploy.ts b/packages/deploy/src/deploy.ts
index c1a26c5..36c6230 100644
--- a/packages/deploy/src/deploy.ts
+++ b/packages/deploy/src/deploy.ts
@@ -34,7 +34,7 @@ export type DeployResult = {
};
export type VerifierConfig =
- | { type: "etherscan"; apiKey: string }
+ | { type: "etherscan"; apiKey: string; url?: string }
| { type: "blockscout"; url: string };
export async function deploy(
@@ -98,6 +98,9 @@ export async function deploy(
if (verifier.type === "etherscan") {
verifierFlags.push(["--verifier", verifier.type]);
verifierFlags.push(["--etherscan-api-key", verifier.apiKey]);
+ if (verifier.url) {
+ verifierFlags.push(["--verifier-url", verifier.url]);
+ }
} else if (verifier.type === "blockscout") {
verifierFlags.push(["--verifier", verifier.type]);
verifierFlags.push(["--verifier-url", verifier.url]);
@@ -109,7 +112,6 @@ export async function deploy(
["verify-contract", fileStore, "src/FileStore.sol:FileStore"],
["--chain-id", `${chainId}`],
["--compiler-version", fileStoreBuild.metadata.compiler.version],
- ["--evm-version", fileStoreBuild.metadata.settings.evmVersion],
[
"--num-of-optimizations",
`${fileStoreBuild.metadata.settings.optimizer.runs}`,
diff --git a/packages/deploy/src/verifier.ts b/packages/deploy/src/verifier.ts
index 7ced930..339b837 100644
--- a/packages/deploy/src/verifier.ts
+++ b/packages/deploy/src/verifier.ts
@@ -3,7 +3,7 @@ import { z } from "zod";
export const verifierEnvSchema = z.union([
z.object({
VERIFIER: z.literal("etherscan"),
- VERIFIER_URL: z.undefined().optional(),
+ VERIFIER_URL: z.string().optional(),
VERIFIER_API_KEY: z.string(),
}),
z.object({
diff --git a/packages/ponder/ponder.config.ts b/packages/ponder/ponder.config.ts
index 141503e..b538662 100644
--- a/packages/ponder/ponder.config.ts
+++ b/packages/ponder/ponder.config.ts
@@ -5,6 +5,16 @@ import { FileStoreAbi } from "./abis/FileStoreAbi";
export default createConfig({
networks: {
+ abstract: {
+ chainId: 2741,
+ transport: http(process.env.RPC_HTTP_URL_2741),
+ pollingInterval: 12_000,
+ },
+ abstractSepolia: {
+ chainId: 11124,
+ transport: http(process.env.RPC_HTTP_URL_11124),
+ pollingInterval: 12_000,
+ },
mainnet: {
chainId: 1,
transport: http(process.env.RPC_HTTP_URL_1),
@@ -66,6 +76,8 @@ export default createConfig({
address: "0xFe1411d6864592549AdE050215482e4385dFa0FB",
abi: FileStoreAbi,
network: {
+ abstract: { startBlock: 10966338 },
+ abstractSepolia: { startBlock: 10200227 },
mainnet: { startBlock: 18898263 },
sepolia: { startBlock: 4986686 },
holesky: { startBlock: 634049 },
diff --git a/packages/web/src/supportedChains.ts b/packages/web/src/supportedChains.ts
index 5fcbc2c..7146893 100644
--- a/packages/web/src/supportedChains.ts
+++ b/packages/web/src/supportedChains.ts
@@ -1,4 +1,6 @@
import {
+ abstract,
+ abstractTestnet,
base,
baseSepolia,
Chain,
@@ -23,6 +25,19 @@ type SupportedChain = {
};
export const supportedChains = [
+ /* Abstract */
+ {
+ chain: abstract,
+ slug: "abstract",
+ group: "Abstract",
+ rpcUrl: process.env.NEXT_PUBLIC_RPC_HTTP_URL_2741!,
+ },
+ {
+ chain: abstractTestnet,
+ slug: "abstract-sepolia",
+ group: "Abstract",
+ rpcUrl: process.env.NEXT_PUBLIC_RPC_HTTP_URL_11124!,
+ },
/* Ethereum */
{
chain: mainnet,