Skip to content
Open
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
4 changes: 4 additions & 0 deletions eth/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@ ignition/deployments/chain-31337

# Local hardhat test-run deployment records — ephemeral addresses, no on-chain value
scripts/deployments/*-hardhat-*.json
deployments/*-default*.json
deployments/*-undefined*.json
scripts/deployments/*-default*.json
scripts/deployments/*-undefined*.json
7 changes: 5 additions & 2 deletions eth/contracts/ERC1967Proxy.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import {ERC1967Proxy as OZErc1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";

// Diese Datei exportiert einfach den OpenZeppelin ERC1967Proxy für die Verwendung in unserem Projekt
// Expose ERC1967Proxy as a named project artifact for tests that deploy proxies manually.
contract ERC1967Proxy is OZErc1967Proxy {
constructor(address implementation, bytes memory _data) OZErc1967Proxy(implementation, _data) {}
}
8 changes: 8 additions & 0 deletions eth/deployments/support-v2-default.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"network": "default",
"proxyAddress": "0xc0F115A19107322cFBf1cDBC7ea011C19EbDB4F8",
"implementationAddress": "0x4631BCAbD6dF18D94796344963cB60d44a4136b6",
"owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"deployedAt": "2026-05-30T08:19:03.459Z",
"version": "1.0.0-test"
}
61 changes: 29 additions & 32 deletions eth/hardhat.config.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
import "@nomicfoundation/hardhat-toolbox-viem";
import "@nomicfoundation/hardhat-verify";
import "hardhat-abi-exporter";
import "@openzeppelin/hardhat-upgrades";
import { vars } from "hardhat/config";
import { defineConfig, configVariable } from "hardhat/config";
import hardhatToolboxViem from "@nomicfoundation/hardhat-toolbox-viem";
import hardhatUpgrades from "@openzeppelin/hardhat-upgrades";
import hardhatAbiExporter from "@solidstate/hardhat-abi-exporter";
import hardhatEthersChaiMatchers from "@nomicfoundation/hardhat-ethers-chai-matchers";

// Use default values for CI/testing if environment variables are not set
const ALCHEMY_API_KEY: string = vars.get("ALCHEMY_API_KEY", "dummy-key-for-testing");
const SEPOLIA_PRIVATE_KEY: string = vars.get(
"SEPOLIA_PRIVATE_KEY",
"0x1234567890123456789012345678901234567890123456789012345678901234",
);
// V2 API uses single Etherscan key for all chains (including Optimism, Base, Polygon, etc.)
const ETHERSCAN_API_KEY: string = vars.get("ETHERSCAN_API_KEY", "dummy-etherscan-key");

const config = {
export default defineConfig({
defaultNetwork: "hardhat",
plugins: [hardhatToolboxViem, hardhatUpgrades, hardhatAbiExporter, hardhatEthersChaiMatchers],
solidity: {
compilers: [
{
Expand All @@ -24,33 +17,39 @@ const config = {
},
],
},
gasReporter: {
enabled: false,
},
networks: {
hardhat: {
type: "edr-simulated",
},
sepolia: {
url: `https://eth-sepolia.g.alchemy.com/v2/${ALCHEMY_API_KEY}`,
accounts: [SEPOLIA_PRIVATE_KEY],
type: "http",
url: configVariable("ALCHEMY_API_KEY", "https://eth-sepolia.g.alchemy.com/v2/{variable}"),
accounts: [configVariable("SEPOLIA_PRIVATE_KEY")],
},
optsepolia: {
url: `https://opt-sepolia.g.alchemy.com/v2/${ALCHEMY_API_KEY}`,
accounts: [SEPOLIA_PRIVATE_KEY],
type: "http",
url: configVariable("ALCHEMY_API_KEY", "https://opt-sepolia.g.alchemy.com/v2/{variable}"),
accounts: [configVariable("SEPOLIA_PRIVATE_KEY")],
},
optimisticEthereum: {
url: `https://opt-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}`,
accounts: [SEPOLIA_PRIVATE_KEY],
type: "http",
url: configVariable("ALCHEMY_API_KEY", "https://opt-mainnet.g.alchemy.com/v2/{variable}"),
accounts: [configVariable("SEPOLIA_PRIVATE_KEY")],
},
baseSepolia: {
url: `https://base-sepolia.g.alchemy.com/v2/${ALCHEMY_API_KEY}`,
accounts: [SEPOLIA_PRIVATE_KEY],
type: "http",
url: configVariable("ALCHEMY_API_KEY", "https://base-sepolia.g.alchemy.com/v2/{variable}"),
accounts: [configVariable("SEPOLIA_PRIVATE_KEY")],
},
base: {
url: `https://base-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}`,
accounts: [SEPOLIA_PRIVATE_KEY],
type: "http",
url: configVariable("ALCHEMY_API_KEY", "https://base-mainnet.g.alchemy.com/v2/{variable}"),
accounts: [configVariable("SEPOLIA_PRIVATE_KEY")],
},
},
etherscan: {
apiKey: ETHERSCAN_API_KEY, // V2 API uses single Etherscan key for all chains
// V2 API uses single Etherscan key for all chains (including Optimism, Base, Polygon, etc.)
apiKey: configVariable("ETHERSCAN_API_KEY"),
customChains: [
{
network: "optsepolia",
Expand Down Expand Up @@ -86,6 +85,4 @@ const config = {
},
],
},
};

export default config;
});
Loading
Loading