This script deploys the PYPay system to testnet (Arbitrum Sepolia and Ethereum Sepolia) for testing purposes.
- 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
.envand 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>forge script script/Deploy.s.sol:DeployScript \
--rpc-url $ARBITRUM_SEPOLIA_RPC \
--broadcast \
--verify \
-vvvvforge script script/Deploy.s.sol:DeployScript \
--rpc-url $SEPOLIA_RPC \
--broadcast \
-vvvvforge script script/StakePaymaster.s.sol --rpc-url $ARBITRUM_SEPOLIA_RPC --broadcastforge script script/StakePaymaster.s.sol --rpc-url $SEPOLIA_RPC --broadcastexport PAYMASTER_ARBSEPOLIA=<DEPLOYED_PAYMASTER_ARBSEPOLIA_ADDRESS>
export PAYMASTER_SEPOLIA=<DEPLOYED_PAYMASTER_SEPOLIA_ADDRESS>cast send $ENTRYPOINT \
"depositTo(address)" \
$PAYMASTER_ARBSEPOLIA \
--value 0.02ether \
--rpc-url $ARBITRUM_SEPOLIA_RPC \
--private-key $DEPLOYER_PRIVATE_KEYcast send $ENTRYPOINT \
"depositTo(address)" \
$PAYMASTER_SEPOLIA \
--value 0.02ether \
--rpc-url $SEPOLIA_RPC \
--private-key $DEPLOYER_PRIVATE_KEYforge script script/CreateStandaloneAccount.s.sol:CreateStandaloneAccount \
--rpc-url $ARBITRUM_SEPOLIA_RPC \
--broadcast \
-vvvvforge script script/CreateStandaloneAccount.s.sol:CreateStandaloneAccount \
--rpc-url $SEPOLIA_RPC \
--broadcast \
-vvvvexport 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>cast send $SMART_ACCOUNT_ARBSEPOLIA \
--value 0.1ether \
--rpc-url $ARBITRUM_SEPOLIA_RPC \
--private-key $DEPLOYER_PRIVATE_KEYcast send $SMART_ACCOUNT_SEPOLIA \
--value 0.1ether \
--rpc-url $SEPOLIA_RPC \
--private-key $DEPLOYER_PRIVATE_KEYexport PYUSD_SEPOLIA=<DEPLOYED_PYUSD_SEPOLIA_ADDRESS>
export PYUSD_ARBSEPOLIA=<DEPLOYED_PYUSD_ARBSEPOLIA_ADDRESS>cast send $PYUSD_ARBSEPOLIA \
"transfer(address,uint256)" \
$SMART_ACCOUNT_ARBSEPOLIA \
10000000 \
--rpc-url $ARBITRUM_SEPOLIA_RPC \
--private-key $DEPLOYER_PRIVATE_KEYforge script script/ApproveCheckout.s.sol:ApproveCheckout \
--rpc-url $ARBITRUM_SEPOLIA_RPC \
--broadcast \
-vvvvforge script script/ApproveCheckout.s.sol:ApproveCheckout \
--rpc-url $SEPOLIA_RPC \
--broadcast \
-vvvvforge script script/ApproveBridge.s.sol:ApproveBridge \
--rpc-url $ARBITRUM_SEPOLIA_RPC \
--broadcast \
-vvvvforge script script/ApproveBridge.s.sol:ApproveBridge \
--rpc-url $SEPOLIA_RPC \
--broadcast \
-vvvvforge script script/SeedMerchant.s.sol --rpc-url $ARBITRUM_SEPOLIA_RPC --broadcastforge script script/SeedMerchant.s.sol --rpc-url $SEPOLIA_RPC --broadcastexport RELAYER_ADDRESS=<RELAYER_ADDRESS>forge script script/FundBridgeInventory.s.sol --rpc-url $ARBITRUM_SEPOLIA_RPC --broadcastforge script script/FundBridgeInventory.s.sol --rpc-url $SEPOLIA_RPC --broadcastcd apps/indexer
ARBITRUM_SEPOLIA_RPC=$ARBITRUM_SEPOLIA_RPC ETHEREUM_SEPOLIA_RPC=$SEPOLIA_RPC INDEXER_PORT=3001 INDEXER_SKIP_CATCHUP=true pnpm devcd apps/relayer
pnpm dev
# Health: http://localhost:3002/healthcd apps/cost-engine
pnpm devcd apps/web
pnpm dev