Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
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
12 changes: 4 additions & 8 deletions .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ OPTIMISM_SEPOLIA_RPC="https://rpc.ankr.com/optimism_sepolia"
BASE_SEPOLIA_RPC="https://rpc.ankr.com/base_sepolia"

# EVMx key addresses
# Find the most up to date addresses in deployments/dev_addresses.json
ADDRESS_RESOLVER="0xc4AC8186Dac133Cf132bb9FC7e2675e482670047"
AUCTION_MANAGER="0x6e156147B6fe75310D001d0eb0598173FBFB98E4"
FEES_MANAGER="0x9C92cC886Fe92f7700d045580d85A4D2BF3Ebf01"
# Find the most up to date addresses at:
# https://github.com/SocketDotTech/socket-protocol/blob/master/deployments/stage_addresses.json
ADDRESS_RESOLVER="0xf3046B22F98C25305E8040286fB1b33378BA10a1"
FEES_MANAGER="0x603723100172D30171B7Fd9870ba80F8baf6FaD4"
ARBITRUM_FEES_PLUG="0x89324F93d852cB4fcDC4Ee202456be466ce096bb"

# Add your deployer private key here
Expand All @@ -18,7 +18,3 @@ PRIVATE_KEY="0x"

# Set app related values after deployment on EVMx
APP_GATEWAY="0x"

# FOR INFRASTRUCTURE DEPLOYMENT ONLY
# Removes hardhat issues related to linting and syntax checking
SOCKET_SIGNER_KEY="0000dead0000dead0000dead0000dead0000dead0000dead0000dead0000dead"
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
url = https://github.com/foundry-rs/forge-std
[submodule "lib/socket-protocol"]
path = lib/socket-protocol
url = https://github.com/SocketDotTech/socket-protocol
url = https://github.com/SocketDotTech/socket-protocol.git
branch = staging
87 changes: 85 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,85 @@
This repository is to get you started with development on SOCKET protocol.
Follow the accompanying [guide](https://docs.socket.tech/getting-started).
# Deployment Steps for EVMx Read Tests

Follow these steps to deploy and run the EVMx Read tests.

### 1. **Deploy the EVMx Read Tests Script**
Run the following command to deploy the EVMx Read tests script:
```bash
forge script script/read/DeployEVMxReadTests.sol --broadcast --legacy --with-gas-price 0
```

### 1a. **Verify the EVMx Contract**
Verify the `ReadAppGateway` contract on Blockscout:
```bash
forge verify-contract --rpc-url https://rpc-evmx-devnet.socket.tech/ --verifier blockscout --verifier-url https://evmx.cloud.blockscout.com/api <APP_GATEWAY_ADDRESS> src/read/ReadAppGateway.sol:ReadAppGateway
```

### 2. **Update the `APP_GATEWAY` in `.env`**
Make sure to update the `APP_GATEWAY` address in your `.env` file.

### 3. **Pay Fees in Arbitrum ETH**
Run the script to pay fees in Arbitrum ETH:
```bash
forge script lib/socket-protocol/script/helpers/PayFeesInArbitrumETH.s.sol --broadcast --skip-simulation
```

### 4. **Deploy Onchain Contracts**
Deploy the onchain contracts using the following script:
```bash
forge script script/read/RunEVMxRead.s.sol --broadcast --skip-simulation --with-gas-price 0 --legacy --sig "deployOnchainContracts()"
```

### 4a. **Verify the Onchain Contract**
Verify the `ReadMultichain` contract on Arbitrum Sepolia Blockscout:
```bash
forge verify-contract --rpc-url https://rpc.ankr.com/arbitrum_sepolia --verifier-url https://arbitrum-sepolia.blockscout.com/api --verifier blockscout <ONCHAIN_ADDRESS> src/read/ReadMultichain.sol:ReadMultichain
```

### 5. **Run EVMx Read Script**
Finally, run the EVMx Read script:
```bash
forge script script/read/RunEVMxRead.s.sol --broadcast --skip-simulation --with-gas-price 0 --legacy
```

# Deployment Steps for EVMx Write Tests

Follow these steps to deploy and run the EVMx Write tests.

### 1. **Deploy the EVMx Write Tests Script**
Run the following command to deploy the EVMx Write tests script:
```bash
forge script script/write/DeployEVMxWriteTests.sol --broadcast --legacy --with-gas-price 0
```

### 1a. **Verify the Contract**
Verify the `WriteAppGateway` contract on Blockscout:
```bash
forge verify-contract --rpc-url https://rpc-evmx-devnet.socket.tech/ --verifier blockscout --verifier-url https://evmx.cloud.blockscout.com/api <APP_GATEWAY_ADDRESS> src/write/WriteAppGateway.sol:WriteAppGateway
```

### 2. **Update the `APP_GATEWAY` in `.env`**
Make sure to update the `APP_GATEWAY` address in your `.env` file.

### 3. **Pay Fees in Arbitrum ETH**
Run the script to pay fees in Arbitrum ETH:
```bash
forge script lib/socket-protocol/script/helpers/PayFeesInArbitrumETH.s.sol --broadcast --skip-simulation
```

### 4. **Deploy Onchain Contracts**
Deploy the onchain contracts using the following script:
```bash
forge script script/write/RunEVMxWrite.s.sol --broadcast --skip-simulation --with-gas-price 0 --legacy --sig "deployOnchainContracts()"
```

### 4a. **Verify the Contract**
Verify the `WriteMultichain` contract on Arbitrum Sepolia Blockscout:
```bash
forge verify-contract --rpc-url https://rpc.ankr.com/arbitrum_sepolia --verifier-url https://arbitrum-sepolia.blockscout.com/api --verifier blockscout <ONCHAIN_ADDRESS> src/write/WriteMultichain.sol:WriteMultichain
```

### 5. **Run EVMx Write Script**
Finally, run the EVMx Write script:
```bash
forge script script/write/RunEVMxWrite.s.sol --broadcast --skip-simulation --with-gas-price 0 --legacy
```
2 changes: 1 addition & 1 deletion lib/socket-protocol
Submodule socket-protocol updated 129 files
4 changes: 1 addition & 3 deletions remappings.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
ds-test/=lib/socket-protocol/lib/forge-std/lib/ds-test/src/
forge-std/=lib/forge-std/src/
forge-std/=lib/socket-protocol/lib/forge-std/src/
socket-protocol/=lib/socket-protocol/
solady/=lib/socket-protocol/lib/solady/src/
solmate/=lib/socket-protocol/lib/solmate/src/
19 changes: 7 additions & 12 deletions script/SetupScript.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,31 @@ pragma solidity ^0.8.0;

import {Script} from "forge-std/Script.sol";
import {console} from "forge-std/console.sol";
import {DepositFees} from "socket-protocol/script/PayFeesInArbitrumETH.s.sol";
import {DepositFees} from "socket-protocol/script/helpers/PayFeesInArbitrumETH.s.sol";
import {Fees} from "socket-protocol/contracts/protocol/utils/common/Structs.sol";
import {FeesPlug} from "socket-protocol/contracts/protocol/payload-delivery/FeesPlug.sol";
import {ETH_ADDRESS, FAST} from "socket-protocol/contracts/protocol/utils/common/Constants.sol";
import {FeesManager} from "socket-protocol/contracts/protocol/payload-delivery/app-gateway/FeesManager.sol";
import {FeesManager} from "socket-protocol/contracts/protocol/payload-delivery/FeesManager.sol";

interface IAppGateway {
function withdrawFeeTokens(uint32 chainId, address token, uint256 amount, address recipient) external;
}

interface IDeployer {
function deployContracts(uint32 chainId) external;
function withdrawFeeTokens(uint32 chainId, address token, uint256 amount, address recipient) external;
}

abstract contract SetupScript is Script {
// ----- ENVIRONMENT VARIABLES -----
string rpcEVMx = vm.envString("EVMX_RPC");
string rpcArbSepolia = vm.envString("ARBITRUM_SEPOLIA_RPC");
address addressResolver = vm.envAddress("ADDRESS_RESOLVER");
address auctionManager = vm.envAddress("AUCTION_MANAGER");
address feesPlugArbSepolia = vm.envAddress("ARBITRUM_FEES_PLUG");
address feesManagerAddress = vm.envAddress("FEES_MANAGER");
uint256 privateKey = vm.envUint("PRIVATE_KEY");
address deployerAddress = vm.envAddress("DEPLOYER");
address appGatewayAddress = vm.envAddress("APP_GATEWAY");

// ----- SCRIPT VARIABLES -----
uint32 arbSepChainId = 411614;
uint32 arbSepChainId = 421614;
uint32 opSepChainId = 11155420;
uint32[2] chainIds = [opSepChainId, arbSepChainId];

Fees fees = Fees({feePoolChain: arbSepChainId, feePoolToken: ETH_ADDRESS, amount: 0.001 ether});
FeesManager feesManager = FeesManager(payable(feesManagerAddress));
Expand Down Expand Up @@ -91,12 +87,12 @@ abstract contract SetupScript is Script {
}
}

function deployOnchainContracts(uint32[] memory chainIds) internal {
function _deployOnchainContracts() internal {
vm.createSelectFork(rpcEVMx);
vm.startBroadcast(privateKey);

for (uint256 i = 0; i < chainIds.length; i++) {
IDeployer(deployer()).deployContracts(chainIds[i]);
IAppGateway(appGateway()).deployContracts(chainIds[i]);
}

vm.stopBroadcast();
Expand All @@ -105,7 +101,6 @@ abstract contract SetupScript is Script {

// Abstract functions to be implemented by child contracts
function appGateway() internal view virtual returns (address);
function deployer() internal view virtual returns (address);

// Standard flow
// Each implementation script will call these functions
Expand Down
30 changes: 5 additions & 25 deletions script/deployment-mistakes/DeployEVMxDeploymentMistakesApp.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,25 @@ pragma solidity ^0.8.0;
import {Script} from "forge-std/Script.sol";
import {console} from "forge-std/console.sol";
import {Fees} from "socket-protocol/contracts/protocol/utils/common/Structs.sol";
import {ETH_ADDRESS, FAST} from "socket-protocol/contracts/protocol/utils/common/Constants.sol";
import {ETH_ADDRESS} from "socket-protocol/contracts/protocol/utils/common/Constants.sol";

import {DeploymentMistakesAppGateway} from "../../src/deployment-mistakes/DeploymentMistakesAppGateway.sol";
import {DeploymentMistakesDeployer} from "../../src/deployment-mistakes/DeploymentMistakesDeployer.sol";

contract DeployEVMxContracts is Script {
function run() external {
address addressResolver = vm.envAddress("ADDRESS_RESOLVER");
address auctionManager = vm.envAddress("AUCTION_MANAGER");
string memory rpc = vm.envString("EVMX_RPC");
vm.createSelectFork(rpc);

uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);

Fees memory fees = Fees({feePoolChain: 421614, feePoolToken: ETH_ADDRESS, amount: 0.001 ether});
Fees memory fees = Fees({feePoolChain: 421614, feePoolToken: ETH_ADDRESS, amount: 0.0005 ether});

DeploymentMistakesDeployer deployer =
new DeploymentMistakesDeployer(addressResolver, auctionManager, FAST, fees);

DeploymentMistakesAppGateway gateway =
new DeploymentMistakesAppGateway(addressResolver, address(deployer), auctionManager, fees);
DeploymentMistakesAppGateway appGateway = new DeploymentMistakesAppGateway(addressResolver, fees);

console.log("Contracts deployed:");
console.log("DeploymentMistakesDeployer:", address(deployer));
console.log("DeploymentMistakesAppGateway:", address(gateway));

console.log("DeploymentMistakesDeployer contract ids:");
console.log("noPlugNoInititialize");
console.logBytes32(deployer.noPlugNoInititialize());
console.log("noPlugInitialize");
console.logBytes32(deployer.noPlugInitialize());
console.log("plugNoInitialize");
console.logBytes32(deployer.plugNoInitialize());
console.log("plugInitialize");
console.logBytes32(deployer.plugInitialize());
console.log("plugInitializeTwice");
console.logBytes32(deployer.plugInitializeTwice());
console.log("plugNoInitInitialize");
console.logBytes32(deployer.plugNoInitInitialize());
console.log("DeploymentMistakesAppGateway:", address(appGateway));
console.log("See AppGateway on EVMx: https://evmx.cloud.blockscout.com/address/%s", address(appGateway));
}
}
37 changes: 17 additions & 20 deletions script/deployment-mistakes/RunEVMxDeploymentMistakes.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ pragma solidity ^0.8.0;
import {console} from "forge-std/console.sol";
import {SetupScript} from "../SetupScript.sol";
import {DeploymentMistakesAppGateway} from "../../src/deployment-mistakes/DeploymentMistakesAppGateway.sol";
import {DeploymentMistakesDeployer} from "../../src/deployment-mistakes/DeploymentMistakesDeployer.sol";
import {
NoPlugNoInititialize,
NoPlugInitialize,
Expand All @@ -15,7 +14,6 @@ import {
} from "../../src/deployment-mistakes/DeployOnchainMistakes.sol";

contract RunEVMxDeploymentMistakes is SetupScript {
DeploymentMistakesDeployer mistakesDeployer;
DeploymentMistakesAppGateway mistakesAppGateway;
address noPlugNoInititializeForwarder;
address noPlugInitializeForwarder;
Expand All @@ -28,34 +26,31 @@ contract RunEVMxDeploymentMistakes is SetupScript {
return address(mistakesAppGateway);
}

function deployer() internal view override returns (address) {
return address(mistakesDeployer);
}

function getForwarderAddresses() internal {
vm.createSelectFork(rpcEVMx);

noPlugNoInititializeForwarder =
mistakesDeployer.forwarderAddresses(mistakesDeployer.noPlugNoInititialize(), arbSepChainId);
mistakesAppGateway.forwarderAddresses(mistakesAppGateway.noPlugNoInititialize(), arbSepChainId);
console.log("No Plug No Init Forwarder:", noPlugNoInititializeForwarder);

noPlugInitializeForwarder =
mistakesDeployer.forwarderAddresses(mistakesDeployer.noPlugInitialize(), arbSepChainId);
mistakesAppGateway.forwarderAddresses(mistakesAppGateway.noPlugInitialize(), arbSepChainId);
console.log("No Plug Init Forwarder:", noPlugInitializeForwarder);

plugNoInitializeForwarder =
mistakesDeployer.forwarderAddresses(mistakesDeployer.plugNoInitialize(), arbSepChainId);
mistakesAppGateway.forwarderAddresses(mistakesAppGateway.plugNoInitialize(), arbSepChainId);
console.log("Plug No Init Forwarder:", plugNoInitializeForwarder);

plugInitializeForwarder = mistakesDeployer.forwarderAddresses(mistakesDeployer.plugInitialize(), arbSepChainId);
plugInitializeForwarder =
mistakesAppGateway.forwarderAddresses(mistakesAppGateway.plugInitialize(), arbSepChainId);
console.log("Plug Init Forwarder:", plugInitializeForwarder);

plugInitializeTwiceForwarder =
mistakesDeployer.forwarderAddresses(mistakesDeployer.plugInitializeTwice(), arbSepChainId);
mistakesAppGateway.forwarderAddresses(mistakesAppGateway.plugInitializeTwice(), arbSepChainId);
console.log("Plug Init Init Forwarder:", plugInitializeTwiceForwarder);

plugNoInitInitializeForwarder =
mistakesDeployer.forwarderAddresses(mistakesDeployer.plugNoInitInitialize(), arbSepChainId);
mistakesAppGateway.forwarderAddresses(mistakesAppGateway.plugNoInitInitialize(), arbSepChainId);
console.log("Plug No Init Init Forwarder:", plugNoInitInitializeForwarder);
}

Expand Down Expand Up @@ -105,21 +100,23 @@ contract RunEVMxDeploymentMistakes is SetupScript {
vm.stopBroadcast();
}

function executeScriptSpecificLogic() internal override {
// Initialize contract references
mistakesDeployer = DeploymentMistakesDeployer(deployerAddress);
// Initialize contract references
function init() internal {
mistakesAppGateway = DeploymentMistakesAppGateway(appGatewayAddress);
}

// Deploy only to Arbitrum Sepolia
uint32[] memory chainIds = new uint32[](1);
chainIds[0] = arbSepChainId;
deployOnchainContracts(chainIds);

function executeScriptSpecificLogic() internal override {
init();
getForwarderAddresses();
validateMistakes();
}

function run() external {
_run(arbSepChainId);
}

function deployOnchainContracts() external {
init();
_deployOnchainContracts();
}
}
14 changes: 5 additions & 9 deletions script/inbox/DeployEVMxInbox.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,25 @@ pragma solidity ^0.8.0;
import {Script} from "forge-std/Script.sol";
import {console} from "forge-std/console.sol";
import {Fees} from "socket-protocol/contracts/protocol/utils/common/Structs.sol";
import {ETH_ADDRESS, FAST} from "socket-protocol/contracts/protocol/utils/common/Constants.sol";
import {ETH_ADDRESS} from "socket-protocol/contracts/protocol/utils/common/Constants.sol";

import {InboxAppGateway} from "../../src/inbox/InboxAppGateway.sol";
import {InboxDeployer} from "../../src/inbox/InboxDeployer.sol";

contract DeployEVMxContracts is Script {
function run() external {
address addressResolver = vm.envAddress("ADDRESS_RESOLVER");
address auctionManager = vm.envAddress("AUCTION_MANAGER");
string memory rpc = vm.envString("EVMX_RPC");
vm.createSelectFork(rpc);

uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);

Fees memory fees = Fees({feePoolChain: 421614, feePoolToken: ETH_ADDRESS, amount: 0.001 ether});
Fees memory fees = Fees({feePoolChain: 421614, feePoolToken: ETH_ADDRESS, amount: 0.0005 ether});

InboxDeployer deployer = new InboxDeployer(addressResolver, auctionManager, FAST, fees);

InboxAppGateway gateway = new InboxAppGateway(addressResolver, address(deployer), auctionManager, fees);
InboxAppGateway appGateway = new InboxAppGateway(addressResolver, fees);

console.log("Contracts deployed:");
console.log("Deployer:", address(deployer));
console.log("AppGateway:", address(gateway));
console.log("AppGateway:", address(appGateway));
console.log("See AppGateway on EVMx: https://evmx.cloud.blockscout.com/address/%s", address(appGateway));
}
}
Loading
Loading