From 56a05d0b11b6999fa58d738ae3a2e8e9b83d519a Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:34:18 +0000 Subject: [PATCH 1/9] Remove outdated images folder --- images/architecture.png | Bin 48040 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/architecture.png diff --git a/images/architecture.png b/images/architecture.png deleted file mode 100644 index 60f1cf5c0e4cc7a1e027f354a573737398b1a3ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48040 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

aiDmSSjsD=qEP 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 Date: Mon, 17 Feb 2025 14:38:39 +0000 Subject: [PATCH 2/9] Move tasks/accounts.ts to hardhat-scripts/utils --- {tasks => hardhat-scripts/utils}/accounts.ts | 0 hardhat.config.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename {tasks => hardhat-scripts/utils}/accounts.ts (100%) diff --git a/tasks/accounts.ts b/hardhat-scripts/utils/accounts.ts similarity index 100% rename from tasks/accounts.ts rename to hardhat-scripts/utils/accounts.ts diff --git a/hardhat.config.ts b/hardhat.config.ts index 02f369b9..6debe775 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -14,7 +14,7 @@ import type { import { resolve } from "path"; import fs from "fs"; -import "./tasks/accounts"; +import "./hardhat-scripts/utils/accounts"; import { getJsonRpcUrl } from "./hardhat-scripts/constants/networks"; import { ChainId, From 175f0a9fb363e2547d3d2c60369f48dadab468b0 Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:46:49 +0000 Subject: [PATCH 3/9] Rename OffChainVMCoreContracts to EVMxCoreContracts --- hardhat-scripts/deploy/1.deploy.ts | 28 ++++++++++----------- hardhat-scripts/deploy/3.upgradeManagers.ts | 4 +-- hardhat-scripts/deploy/4.connect.ts | 18 ++++++------- src/index.ts | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/hardhat-scripts/deploy/1.deploy.ts b/hardhat-scripts/deploy/1.deploy.ts index 44cfbb34..5516568b 100644 --- a/hardhat-scripts/deploy/1.deploy.ts +++ b/hardhat-scripts/deploy/1.deploy.ts @@ -14,7 +14,7 @@ import { ethers } from "hardhat"; import dev_addresses from "../../deployments/dev_addresses.json"; import { auctionEndDelaySeconds, chains } from "./config"; import { MAX_LIMIT, EVMX_CHAIN_ID, BID_TIMEOUT } from "../constants/constants"; -import { CORE_CONTRACTS, OffChainVMCoreContracts } from "../../src"; +import { CORE_CONTRACTS, EVMxCoreContracts } from "../../src"; let offChainVMOwner: string; const main = async () => { @@ -177,7 +177,7 @@ const deployWatcherVMContracts = async () => { }; const chain = EVMX_CHAIN_ID; try { - console.log("Deploying OffChainVM contracts"); + console.log("Deploying EVMx contracts"); addresses = dev_addresses as unknown as DeploymentAddresses; let chainAddresses: ChainSocketAddresses = addresses[chain] ? (addresses[chain] as ChainSocketAddresses) @@ -211,7 +211,7 @@ const deployWatcherVMContracts = async () => { deployUtils.addresses[contractName] = proxyFactory.address; deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.SignatureVerifier, + EVMxCoreContracts.SignatureVerifier, `contracts/socket/utils/SignatureVerifier.sol`, [offChainVMOwner], proxyFactory, @@ -219,7 +219,7 @@ const deployWatcherVMContracts = async () => { ); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.AddressResolver, + EVMxCoreContracts.AddressResolver, `contracts/AddressResolver.sol`, [offChainVMOwner], proxyFactory, @@ -227,12 +227,12 @@ const deployWatcherVMContracts = async () => { ); const addressResolver = await ethers.getContractAt( - OffChainVMCoreContracts.AddressResolver, - deployUtils.addresses[OffChainVMCoreContracts.AddressResolver] + EVMxCoreContracts.AddressResolver, + deployUtils.addresses[EVMxCoreContracts.AddressResolver] ); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.WatcherPrecompile, + EVMxCoreContracts.WatcherPrecompile, `contracts/watcherPrecompile/WatcherPrecompile.sol`, [offChainVMOwner, addressResolver.address, MAX_LIMIT], proxyFactory, @@ -240,17 +240,17 @@ const deployWatcherVMContracts = async () => { ); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.FeesManager, + EVMxCoreContracts.FeesManager, `contracts/apps/payload-delivery/app-gateway/FeesManager.sol`, [addressResolver.address, offChainVMOwner], proxyFactory, deployUtils ); const feesManagerAddress = - deployUtils.addresses[OffChainVMCoreContracts.FeesManager]; + deployUtils.addresses[EVMxCoreContracts.FeesManager]; deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.DeliveryHelper, + EVMxCoreContracts.DeliveryHelper, `contracts/apps/payload-delivery/app-gateway/DeliveryHelper.sol`, [ addressResolver.address, @@ -263,13 +263,13 @@ const deployWatcherVMContracts = async () => { ); deployUtils = await deployContractWithProxy( - OffChainVMCoreContracts.AuctionManager, + EVMxCoreContracts.AuctionManager, `contracts/apps/payload-delivery/app-gateway/AuctionManager.sol`, [ EVMX_CHAIN_ID, auctionEndDelaySeconds, addressResolver.address, - deployUtils.addresses[OffChainVMCoreContracts.SignatureVerifier], + deployUtils.addresses[EVMxCoreContracts.SignatureVerifier], offChainVMOwner, ], proxyFactory, @@ -280,7 +280,7 @@ const deployWatcherVMContracts = async () => { addressResolver, "deliveryHelper", "setDeliveryHelper", - deployUtils.addresses[OffChainVMCoreContracts.DeliveryHelper], + deployUtils.addresses[EVMxCoreContracts.DeliveryHelper], deployUtils.signer ); @@ -296,7 +296,7 @@ const deployWatcherVMContracts = async () => { addressResolver, "watcherPrecompile__", "setWatcherPrecompile", - deployUtils.addresses[OffChainVMCoreContracts.WatcherPrecompile], + deployUtils.addresses[EVMxCoreContracts.WatcherPrecompile], deployUtils.signer ); diff --git a/hardhat-scripts/deploy/3.upgradeManagers.ts b/hardhat-scripts/deploy/3.upgradeManagers.ts index 23371d40..9e939ee1 100644 --- a/hardhat-scripts/deploy/3.upgradeManagers.ts +++ b/hardhat-scripts/deploy/3.upgradeManagers.ts @@ -15,7 +15,7 @@ import { chains } from "./config"; import { getProviderFromChainSlug } from "../constants"; import { Wallet } from "ethers"; import { getInstance, storeAddresses } from "./utils"; -import { OffChainVMCoreContracts } from "../../src"; +import { EVMxCoreContracts } from "../../src"; import { EVMX_CHAIN_ID } from "../constants/constants"; export const main = async () => { @@ -73,7 +73,7 @@ async function setSwitchboard(sbAddress, chain, addresses) { const watcherPrecompile = ( await getInstance( "contracts/watcherPrecompile/WatcherPrecompile.sol:WatcherPrecompile", - watcherVMaddr[OffChainVMCoreContracts.WatcherPrecompile] + watcherVMaddr[EVMxCoreContracts.WatcherPrecompile] ) ).connect(signer); diff --git a/hardhat-scripts/deploy/4.connect.ts b/hardhat-scripts/deploy/4.connect.ts index e66da43c..dbdd8c59 100644 --- a/hardhat-scripts/deploy/4.connect.ts +++ b/hardhat-scripts/deploy/4.connect.ts @@ -8,7 +8,7 @@ import { getInstance } from "./utils"; import { chains } from "./config"; import dev_addresses from "../../deployments/dev_addresses.json"; import { EVMX_CHAIN_ID } from "../constants/constants"; -import { CORE_CONTRACTS, OffChainVMCoreContracts } from "../../src"; +import { CORE_CONTRACTS, EVMxCoreContracts } from "../../src"; const plugs = [CORE_CONTRACTS.ContractFactoryPlug, CORE_CONTRACTS.FeesPlug]; export type AppGatewayConfig = { @@ -22,11 +22,11 @@ export const getAppGateway = (plug: string, addresses: DeploymentAddresses) => { switch (plug) { case CORE_CONTRACTS.ContractFactoryPlug: return addresses?.[EVMX_CHAIN_ID]?.[ - OffChainVMCoreContracts.DeliveryHelper + EVMxCoreContracts.DeliveryHelper ]; case CORE_CONTRACTS.FeesPlug: return addresses?.[EVMX_CHAIN_ID]?.[ - OffChainVMCoreContracts.FeesManager + EVMxCoreContracts.FeesManager ]; default: throw new Error(`Unknown plug: ${plug}`); @@ -54,9 +54,9 @@ export const isConfigSetOnSocket = async ( const plugConfigRegistered = await socket.getPlugConfig(plug.address); return ( plugConfigRegistered.appGateway.toLowerCase() === - appGateway?.toLowerCase() && + appGateway?.toLowerCase() && plugConfigRegistered.switchboard__.toLowerCase() === - switchboard.toLowerCase() + switchboard.toLowerCase() ); }; @@ -140,7 +140,7 @@ export const isConfigSetOnWatcherVM = async ( // Configure plugs on the Watcher VM export const updateConfigWatcherVM = async () => { try { - console.log("Connecting plugs on OffChainVM"); + console.log("Connecting plugs on EVMx"); const addresses = dev_addresses as unknown as DeploymentAddresses; const appConfigs: AppGatewayConfig[] = []; @@ -155,8 +155,8 @@ export const updateConfigWatcherVM = async () => { const watcherVMaddr = addresses[EVMX_CHAIN_ID]!; const watcher = ( await getInstance( - OffChainVMCoreContracts.WatcherPrecompile, - watcherVMaddr[OffChainVMCoreContracts.WatcherPrecompile] + EVMxCoreContracts.WatcherPrecompile, + watcherVMaddr[EVMxCoreContracts.WatcherPrecompile] ) ).connect(signer); @@ -198,7 +198,7 @@ export const updateConfigWatcherVM = async () => { if (appConfigs.length > 0) { console.log({ appConfigs }); const tx = await watcher.setAppGateways(appConfigs); - console.log(`Updating OffChainVM Config tx hash: ${tx.hash}`); + console.log(`Updating EVMx Config tx hash: ${tx.hash}`); await tx.wait(); } } catch (error) { diff --git a/src/index.ts b/src/index.ts index d96eafbe..dbeff774 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,7 +8,7 @@ export enum CORE_CONTRACTS { ContractFactoryPlug = "ContractFactoryPlug", } -export enum OffChainVMCoreContracts { +export enum EVMxCoreContracts { SignatureVerifier = "SignatureVerifier", WatcherPrecompile = "WatcherPrecompile", AuctionManager = "AuctionManager", From fb34493fa74d1e3b0d89b11ecc3cec4b128574e4 Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:49:18 +0000 Subject: [PATCH 4/9] Delete unused constant --- src/index.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index dbeff774..7b8b5cea 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,8 +18,3 @@ export enum EVMxCoreContracts { AsyncPromise = "AsyncPromise", AddressResolver = "AddressResolver", } - -export enum AppContracts { - SuperTokenApp = "SuperTokenApp", - SuperTokenDeployer = "SuperTokenDeployer", -} From 63d5821eaaee0f8afec204b9a31f3436cad715fd Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:54:42 +0000 Subject: [PATCH 5/9] Move src/index.ts to hardhat-scripts/constants/protocolConstants.ts --- src/index.ts => hardhat-scripts/constants/protocolConstants.ts | 0 hardhat-scripts/deploy/1.deploy.ts | 2 +- hardhat-scripts/deploy/3.upgradeManagers.ts | 2 +- hardhat-scripts/deploy/4.connect.ts | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename src/index.ts => hardhat-scripts/constants/protocolConstants.ts (100%) diff --git a/src/index.ts b/hardhat-scripts/constants/protocolConstants.ts similarity index 100% rename from src/index.ts rename to hardhat-scripts/constants/protocolConstants.ts diff --git a/hardhat-scripts/deploy/1.deploy.ts b/hardhat-scripts/deploy/1.deploy.ts index 5516568b..a6b40d23 100644 --- a/hardhat-scripts/deploy/1.deploy.ts +++ b/hardhat-scripts/deploy/1.deploy.ts @@ -14,7 +14,7 @@ import { ethers } from "hardhat"; import dev_addresses from "../../deployments/dev_addresses.json"; import { auctionEndDelaySeconds, chains } from "./config"; import { MAX_LIMIT, EVMX_CHAIN_ID, BID_TIMEOUT } from "../constants/constants"; -import { CORE_CONTRACTS, EVMxCoreContracts } from "../../src"; +import { CORE_CONTRACTS, EVMxCoreContracts } from "../constants/protocolConstants"; let offChainVMOwner: string; const main = async () => { diff --git a/hardhat-scripts/deploy/3.upgradeManagers.ts b/hardhat-scripts/deploy/3.upgradeManagers.ts index 9e939ee1..5e426613 100644 --- a/hardhat-scripts/deploy/3.upgradeManagers.ts +++ b/hardhat-scripts/deploy/3.upgradeManagers.ts @@ -15,7 +15,7 @@ import { chains } from "./config"; import { getProviderFromChainSlug } from "../constants"; import { Wallet } from "ethers"; import { getInstance, storeAddresses } from "./utils"; -import { EVMxCoreContracts } from "../../src"; +import { EVMxCoreContracts } from "../constants/protocolConstants"; import { EVMX_CHAIN_ID } from "../constants/constants"; export const main = async () => { diff --git a/hardhat-scripts/deploy/4.connect.ts b/hardhat-scripts/deploy/4.connect.ts index dbdd8c59..86b607d3 100644 --- a/hardhat-scripts/deploy/4.connect.ts +++ b/hardhat-scripts/deploy/4.connect.ts @@ -8,7 +8,7 @@ import { getInstance } from "./utils"; import { chains } from "./config"; import dev_addresses from "../../deployments/dev_addresses.json"; import { EVMX_CHAIN_ID } from "../constants/constants"; -import { CORE_CONTRACTS, EVMxCoreContracts } from "../../src"; +import { CORE_CONTRACTS, EVMxCoreContracts } from "../constants/protocolConstants"; const plugs = [CORE_CONTRACTS.ContractFactoryPlug, CORE_CONTRACTS.FeesPlug]; export type AppGatewayConfig = { From 7aee6e31d336de6188ebbf985ac8f190150c45c9 Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:06:35 +0000 Subject: [PATCH 6/9] Remove old custom errors file --- ERROR.md | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 ERROR.md diff --git a/ERROR.md b/ERROR.md deleted file mode 100644 index 8329313b..00000000 --- a/ERROR.md +++ /dev/null @@ -1,28 +0,0 @@ -# List of Errors in Socket Protocol - -| Error Name | Selector | -| --------------------------------------------- | ---------- | -| AppGatewayContractAlreadySetByDifferentSender | 0x6c0f1f28 | -| FeesAlreadyPaid | 0x0a6cc8e7 | -| AllPayloadsExecuted | 0x8c9b6d30 | -| NotFromForwarder | 0x7c307758 | -| CallFailed | 0x3b9a49a0 | -| BurnLimitExceeded | 0x1d1d5c1a | -| MintLimitExceeded | 0x8f05c4b9 | -| NotController | 0x75b238fc | -| NotAuthorized | 0x7a18c059 | -| NotBridge | 0x9d9c2c1c | -| NotSocket | 0x8d0c1f96 | -| ConnectorUnavailable | 0x8c1f1e42 | -| InvalidTokenContract | 0x2ee6fd0b | -| ZeroAddressReceiver | 0x9f9a4f4e | -| ZeroAddress | 0xd92e233d | -| ZeroAmount | 0x1087e3eb | -| InsufficientFunds | 0x356680b7 | -| InvalidSigner | 0x815e1d64 | -| InvalidFunction | 0x8436aa02 | -| InvalidTokenAddress | 0x8149c6aa | -| NoPermit | 0x4e831acb | -| OnlyOwner | 0x5fc483c5 | -| OnlyNominee | 0x4e2d3edf | -| InvalidGateway | 0x0b0e8fed | From 46327d5110990caa6027b9d2a088e00103659df6 Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:11:28 +0000 Subject: [PATCH 7/9] Remove old implementation addresses --- impAddresses.json | 5 ----- remappings.txt | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 impAddresses.json diff --git a/impAddresses.json b/impAddresses.json deleted file mode 100644 index 3ca3b357..00000000 --- a/impAddresses.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "watcher": "0xb62505feacC486e809392c65614Ce4d7b051923b", - "socketContractsDeployer": "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", - "transmitter": "0x138e9840861c983dc0bb9b3e941fb7c0e9ade320" -} diff --git a/remappings.txt b/remappings.txt index ab585aad..bb1d8588 100644 --- a/remappings.txt +++ b/remappings.txt @@ -2,4 +2,4 @@ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ solmate/=lib/solmate/src/ openzeppelin-contracts/=lib/openzeppelin-contracts/ -solady/=lib/solady/src/ \ No newline at end of file +solady/=lib/solady/src/ From fb1098838631b71303b2c8e1554f5a1a95dd65ca Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:21:27 +0000 Subject: [PATCH 8/9] Rename to EVMx on hardhat/config.ts --- hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 6debe775..fd9f5028 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -130,7 +130,7 @@ const config: HardhatUserConfig = { }, }, { - network: "offChainVM", + network: "EVMx", chainId: EVMX_CHAIN_ID, urls: { apiURL: "https://explorer-socket-composer-testnet.t.conduit.xyz/api", From e5f2f70577a740adb3f14bd1e0041c5cadba1818 Mon Sep 17 00:00:00 2001 From: Rookmate <14072042+rookmate@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:38:38 +0000 Subject: [PATCH 9/9] Add staging PR checks --- .github/workflows/forge-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/forge-test.yml b/.github/workflows/forge-test.yml index fb0ba844..bd4002dc 100644 --- a/.github/workflows/forge-test.yml +++ b/.github/workflows/forge-test.yml @@ -2,7 +2,7 @@ name: PR Checks on: pull_request: - branches: [ master ] + branches: [ master, staging ] env: FOUNDRY_PROFILE: ci