Skip to content

Commit 77a34e6

Browse files
authored
Merge pull request #10 from SocketDotTech/update-new-testnet
Update for the new devnet
2 parents ac58b0a + 7ea04b6 commit 77a34e6

12 files changed

Lines changed: 164 additions & 172 deletions

.env.sample

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
# RPCs
22
EVMX_RPC="https://rpc-evmx-devnet.socket.tech/"
3+
34
SEPOLIA_RPC="https://ethereum-sepolia-rpc.publicnode.com"
45
ARBITRUM_SEPOLIA_RPC="https://sepolia-rollup.arbitrum.io/rpc"
56
OPTIMISM_SEPOLIA_RPC="https://sepolia.optimism.io"
67
BASE_SEPOLIA_RPC="https://sepolia.base.org"
78

9+
ARBITRUM_RPC="https://arbitrum.drpc.org"
10+
OPTIMISM_RPC="https://optimism.drpc.org"
11+
BASE_RPC="https://base.drpc.org"
12+
813
# EVMx key addresses
914
# Find the most up to date addresses at:
1015
# https://github.com/SocketDotTech/socket-protocol/blob/master/deployments/stage_addresses.json
11-
ADDRESS_RESOLVER="0x21a9AFDfbEb0399D4a12f3AA1324042Be2B57F8e"
12-
FEES_MANAGER="0x30e07016eB24570629Bc8765CA307394Af90B27C"
13-
ARBITRUM_FEES_PLUG="0xDfE94B9b14de382Ed13C8A7F387884808D0f7E0b"
14-
ARBITRUM_TEST_USDC="0xa03Cbf13f331aF7c0fD7F2E28E6Cbc13F879E3F3"
16+
ADDRESS_RESOLVER="0x935b06902cA5C8bb4C76e18738561c294D377A93"
17+
FEES_MANAGER="0xA07208F9e7aE243F922317ab6604DC9F86822406"
18+
ARBITRUM_FEES_PLUG="0x501bdF8C7163ddD32172575C2836c5A7F556cbE7"
19+
ARBITRUM_USDC="0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
1520

1621
# Add your deployer private key here
1722
# or remove it from this file if it is already an env var

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "lib/socket-protocol"]
22
path = lib/socket-protocol
33
url = https://github.com/SocketDotTech/socket-protocol.git
4-
branch = master
4+
branch = dev

lib/socket-protocol

script/counter/DeployEVMxCounterApp.s.sol

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ pragma solidity ^0.8.0;
44
import {Script} from "forge-std/Script.sol";
55
import {console} from "forge-std/console.sol";
66

7+
import "socket-protocol/contracts/evmx/interfaces/IFeesManager.sol";
78
import {CounterAppGateway} from "../../src/counter/CounterAppGateway.sol";
89

910
/**
@@ -23,18 +24,24 @@ import {CounterAppGateway} from "../../src/counter/CounterAppGateway.sol";
2324
contract CounterDeploy is Script {
2425
function run() external {
2526
address addressResolver = vm.envAddress("ADDRESS_RESOLVER");
27+
IFeesManager feesManager = IFeesManager(payable(vm.envAddress("FEES_MANAGER")));
2628
string memory rpc = vm.envString("EVMX_RPC");
2729
vm.createSelectFork(rpc);
2830

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

32-
// Setting fee payment on Arbitrum Sepolia
33-
uint256 fees = 10 ether;
34+
uint256 fees = 0.1 ether;
3435

3536
CounterAppGateway appGateway = new CounterAppGateway(addressResolver, fees);
3637

3738
console.log("CounterAppGateway contract:", address(appGateway));
3839
console.log("See AppGateway on EVMx: https://evmx.cloud.blockscout.com/address/%s", address(appGateway));
40+
console.log("Do not forget to add the contract address to the .env file!");
41+
42+
console.log("Approving AppGateway to spend from funds in EOA");
43+
AppGatewayApprovals[] memory approvals = new AppGatewayApprovals[](1);
44+
approvals[0] = AppGatewayApprovals({appGateway: address(appGateway), approval: true});
45+
feesManager.approveAppGateways(approvals);
3946
}
4047
}

script/counter/WithdrawFeesArbitrumFeesPlug.s.sol

Lines changed: 0 additions & 74 deletions
This file was deleted.

script/helpers/AppGatewayFeeBalance.s.sol

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {Script} from "forge-std/Script.sol";
5+
import {console} from "forge-std/console.sol";
6+
import {FeesManager} from "socket-protocol/contracts/evmx/fees/FeesManager.sol";
7+
8+
contract CheckAvailableCredits is Script {
9+
function run() external {
10+
FeesManager feesManager = FeesManager(payable(vm.envAddress("FEES_MANAGER")));
11+
12+
uint256 privateKey = vm.envUint("PRIVATE_KEY");
13+
address sender = vm.addr(privateKey);
14+
console.log("Sender address:", sender);
15+
16+
vm.createSelectFork(vm.envString("EVMX_RPC"));
17+
18+
(uint256 deposited, uint256 blocked) = feesManager.userCredits(sender);
19+
console.log("Total balance of available credits for this address: %s", deposited);
20+
console.log("Credits being locked due to existing transactions: %s", blocked);
21+
22+
uint256 availableFees = feesManager.getAvailableCredits(sender);
23+
console.log("Credits available to be spent on transactions: %s", availableFees);
24+
}
25+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// SPDX-License-Identifier: GPL-3.0-only
2+
pragma solidity ^0.8.21;
3+
4+
import {Script} from "forge-std/Script.sol";
5+
import {console} from "forge-std/console.sol";
6+
import {FeesPlug} from "socket-protocol/contracts/evmx/plugs/FeesPlug.sol";
7+
// source .env && forge script script/helpers/DepositCreditAndNative.s.sol --broadcast --skip-simulation
8+
9+
interface IERC20 {
10+
function approve(address spender, uint256 value) external returns (bool);
11+
function balanceOf(address account) external view returns (uint256);
12+
}
13+
14+
contract DepositCredit is Script {
15+
function run() external {
16+
uint256 privateKey = vm.envUint("PRIVATE_KEY");
17+
address sender = vm.addr(privateKey);
18+
console.log("Sender address:", sender);
19+
20+
FeesPlug feesPlug = FeesPlug(payable(vm.envAddress("ARBITRUM_FEES_PLUG")));
21+
address arbitrumUSDC = vm.envAddress("ARBITRUM_USDC");
22+
IERC20 USDCContract = IERC20(arbitrumUSDC);
23+
24+
vm.createSelectFork(vm.envString("ARBITRUM_RPC"));
25+
vm.startBroadcast(privateKey);
26+
uint256 balance = USDCContract.balanceOf(sender);
27+
28+
uint256 feesAmount = 1000000; // 1 USDC
29+
if (balance < feesAmount) {
30+
console.log("Sender USDC balance:", balance);
31+
revert("Sender does not have enough USDC. Requires 1 USDC.");
32+
}
33+
34+
console.log("Depositing", feesAmount, " - 1 USDC to Arbitrum FeesPlug:", address(feesPlug));
35+
console.log("Approving Spending...");
36+
USDCContract.approve(address(feesPlug), feesAmount);
37+
38+
feesPlug.depositCreditAndNative(arbitrumUSDC, sender, feesAmount);
39+
console.log("Corresponding EVMx credits will show up on your account");
40+
}
41+
}

script/helpers/PayFeesInArbitrumTestUSDC.s.sol

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {Script} from "forge-std/Script.sol";
5+
import {console} from "forge-std/console.sol";
6+
import "socket-protocol/contracts/evmx/interfaces/IFeesManager.sol";
7+
8+
import {CounterAppGateway} from "../../src/counter/CounterAppGateway.sol";
9+
10+
/**
11+
* @title WithdrawCredits Script
12+
* @notice Withdraws accumulated fees from EVMX to Arbitrum Sepolia
13+
* @dev This script:
14+
* 1. Checks available fees on EVMX
15+
* 2. Performs the withdrawal if the amount is positive
16+
*
17+
* This demonstrates how developers can retrieve fees that their application has earned
18+
* through SOCKET Protocol's fee system.
19+
*/
20+
contract WithdrawCredits is Script {
21+
function run() external {
22+
// EVMX Check available fees
23+
vm.createSelectFork(vm.envString("EVMX_RPC"));
24+
IFeesManager feesManager = IFeesManager(payable(vm.envAddress("FEES_MANAGER")));
25+
address token = vm.envAddress("ARBITRUM_USDC");
26+
uint256 privateKey = vm.envUint("PRIVATE_KEY");
27+
address sender = vm.addr(privateKey);
28+
29+
uint256 availableCredits = feesManager.getAvailableCredits(sender);
30+
console.log("Available credits:", availableCredits);
31+
//consfeesManager.tokenOntokenOnChainBalances[42161][token];
32+
33+
if (availableCredits > 0) {
34+
uint256 maxFees = 10000000000000000; // Static 1 cent USDC credit (18 decimals)
35+
// TODO: Also wrap native amount to be able to max withdraw
36+
uint256 amountToWithdraw = availableCredits - maxFees;
37+
38+
if (amountToWithdraw > 0) {
39+
vm.startBroadcast(privateKey);
40+
AppGatewayApprovals[] memory approvals = new AppGatewayApprovals[](1);
41+
approvals[0] = AppGatewayApprovals({appGateway: address(feesManager), approval: true});
42+
feesManager.approveAppGateways(approvals);
43+
console.log("Withdrawing amount:", amountToWithdraw);
44+
feesManager.withdrawCredits(42161, token, amountToWithdraw, maxFees, sender);
45+
vm.stopBroadcast();
46+
} else {
47+
console.log("Available fees less than estimated gas cost");
48+
}
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)