Skip to content

Latest commit

 

History

History
241 lines (191 loc) · 6 KB

File metadata and controls

241 lines (191 loc) · 6 KB

Testnet Deployment Script (sanitized)

This script deploys the PYPay system to testnet (Arbitrum Sepolia and Ethereum Sepolia) for testing purposes.

Notes

  • This file contains commands to deploy and configure the complete system on testnet.
  • All hardcoded secrets and addresses have been replaced with dummy placeholders or environment variables.
  • Run these commands in a bash shell. Export the real values into .env and your environment.
  • This is for testnet deployment before testing - use real testnet RPC URLs and testnet private keys.

Before running any commands, export the required variables with your actual testnet values:

cd packages/contracts

[ -f .env ] || ln -s ../../.env .env

export ARBITRUM_SEPOLIA_RPC=<YOUR_ARBITRUM_SEPOLIA_RPC_URL>
export SEPOLIA_RPC=<YOUR_ETHEREUM_SEPOLIA_RPC_URL>
export DEPLOYER_PRIVATE_KEY=<YOUR_TESTNET_DEPLOYER_PRIVATE_KEY>
export PAYMASTER_OWNER_PRIVATE_KEY=<YOUR_TESTNET_PAYMASTER_OWNER_PRIVATE_KEY>
export ENTRYPOINT=<ENTRYPOINT_ADDRESS>

Deploy Core Contracts

Deploy all core contracts to Arbitrum Sepolia

forge script script/Deploy.s.sol:DeployScript \
  --rpc-url $ARBITRUM_SEPOLIA_RPC \
  --broadcast \
  --verify \
  -vvvv

Deploy all core contracts to Ethereum Sepolia

forge script script/Deploy.s.sol:DeployScript \
  --rpc-url $SEPOLIA_RPC \
  --broadcast \
  -vvvv

Stake Paymaster

Stake paymaster on Arbitrum Sepolia (1 ETH for reputation)

forge script script/StakePaymaster.s.sol --rpc-url $ARBITRUM_SEPOLIA_RPC --broadcast

Stake paymaster on Ethereum Sepolia (1 ETH for reputation)

forge script script/StakePaymaster.s.sol --rpc-url $SEPOLIA_RPC --broadcast

Save deployed paymaster addresses

export PAYMASTER_ARBSEPOLIA=<DEPLOYED_PAYMASTER_ARBSEPOLIA_ADDRESS>
export PAYMASTER_SEPOLIA=<DEPLOYED_PAYMASTER_SEPOLIA_ADDRESS>

Deposit ETH to Paymaster

Deposit 0.02 ETH to paymaster on Arbitrum Sepolia (operational funds for gas)

cast send $ENTRYPOINT \
  "depositTo(address)" \
  $PAYMASTER_ARBSEPOLIA \
  --value 0.02ether \
  --rpc-url $ARBITRUM_SEPOLIA_RPC \
  --private-key $DEPLOYER_PRIVATE_KEY

Deposit 0.02 ETH to paymaster on Ethereum Sepolia (operational funds for gas)

cast send $ENTRYPOINT \
  "depositTo(address)" \
  $PAYMASTER_SEPOLIA \
  --value 0.02ether \
  --rpc-url $SEPOLIA_RPC \
  --private-key $DEPLOYER_PRIVATE_KEY

Create Smart Accounts

Create smart account on Arbitrum Sepolia

forge script script/CreateStandaloneAccount.s.sol:CreateStandaloneAccount \
  --rpc-url $ARBITRUM_SEPOLIA_RPC \
  --broadcast \
  -vvvv

Create smart account on Ethereum Sepolia

forge script script/CreateStandaloneAccount.s.sol:CreateStandaloneAccount \
  --rpc-url $SEPOLIA_RPC \
  --broadcast \
  -vvvv

Save created smart account addresses

export SMART_ACCOUNT_ARBSEPOLIA=<CREATED_SMART_ACCOUNT_ARBSEPOLIA_ADDRESS>
export SMART_ACCOUNT_SEPOLIA=<CREATED_SMART_ACCOUNT_SEPOLIA_ADDRESS>
export OWNER=<SMART_ACCOUNT_OWNER_ADDRESS>
export GUARDIAN=<SMART_ACCOUNT_GUARDIAN_ADDRESS>

Fund Smart Accounts

Fund smart account with 0.1 ETH on Arbitrum Sepolia

cast send $SMART_ACCOUNT_ARBSEPOLIA \
  --value 0.1ether \
  --rpc-url $ARBITRUM_SEPOLIA_RPC \
  --private-key $DEPLOYER_PRIVATE_KEY

Fund smart account with 0.1 ETH on Ethereum Sepolia

cast send $SMART_ACCOUNT_SEPOLIA \
  --value 0.1ether \
  --rpc-url $SEPOLIA_RPC \
  --private-key $DEPLOYER_PRIVATE_KEY

Save PYUSD Token Addresses

export PYUSD_SEPOLIA=<DEPLOYED_PYUSD_SEPOLIA_ADDRESS>
export PYUSD_ARBSEPOLIA=<DEPLOYED_PYUSD_ARBSEPOLIA_ADDRESS>

Transfer PYUSD to Smart Account

Transfer 10,000,000 PYUSD to smart account on Arbitrum Sepolia

cast send $PYUSD_ARBSEPOLIA \
  "transfer(address,uint256)" \
  $SMART_ACCOUNT_ARBSEPOLIA \
  10000000 \
  --rpc-url $ARBITRUM_SEPOLIA_RPC \
  --private-key $DEPLOYER_PRIVATE_KEY

Approve Contracts

Approve Checkout to spend PYUSD from smart account on Arbitrum Sepolia

forge script script/ApproveCheckout.s.sol:ApproveCheckout \
  --rpc-url $ARBITRUM_SEPOLIA_RPC \
  --broadcast \
  -vvvv

Approve Checkout to spend PYUSD from smart account on Ethereum Sepolia

forge script script/ApproveCheckout.s.sol:ApproveCheckout \
  --rpc-url $SEPOLIA_RPC \
  --broadcast \
  -vvvv

Approve BridgeEscrow to spend PYUSD from smart account on Arbitrum Sepolia

forge script script/ApproveBridge.s.sol:ApproveBridge \
  --rpc-url $ARBITRUM_SEPOLIA_RPC \
  --broadcast \
  -vvvv

Approve BridgeEscrow to spend PYUSD from smart account on Ethereum Sepolia

forge script script/ApproveBridge.s.sol:ApproveBridge \
  --rpc-url $SEPOLIA_RPC \
  --broadcast \
  -vvvv

Register Test Merchants

Register test merchant on Arbitrum Sepolia

forge script script/SeedMerchant.s.sol --rpc-url $ARBITRUM_SEPOLIA_RPC --broadcast

Register test merchant on Ethereum Sepolia

forge script script/SeedMerchant.s.sol --rpc-url $SEPOLIA_RPC --broadcast

Save relayer address

export RELAYER_ADDRESS=<RELAYER_ADDRESS>

Fund Bridge Inventory (Skip this if you're testing the bridging flow)

Fund BridgeEscrow on Arbitrum Sepolia with inventory

forge script script/FundBridgeInventory.s.sol --rpc-url $ARBITRUM_SEPOLIA_RPC --broadcast

Fund BridgeEscrow on Ethereum Sepolia with inventory

forge script script/FundBridgeInventory.s.sol --rpc-url $SEPOLIA_RPC --broadcast

Start Services

Start Indexer service (watches blockchain events)

cd apps/indexer
ARBITRUM_SEPOLIA_RPC=$ARBITRUM_SEPOLIA_RPC ETHEREUM_SEPOLIA_RPC=$SEPOLIA_RPC INDEXER_PORT=3001 INDEXER_SKIP_CATCHUP=true pnpm dev

Start Relayer service (handles UserOps and session keys)

cd apps/relayer
pnpm dev
# Health: http://localhost:3002/health

Start Cost Engine service (tracks gas prices)

cd apps/cost-engine
pnpm dev

Start Web frontend

cd apps/web
pnpm dev