forked from Agora-Events/agora
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy_devnet.sh
More file actions
157 lines (139 loc) · 5.77 KB
/
Copy pathdeploy_devnet.sh
File metadata and controls
157 lines (139 loc) · 5.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
# ==============================================================================
# Soroban Devnet Deployment & Upgrade Script
# ==============================================================================
# Description: This script deploys and initializes the Event Registry,
# Ticket Payment (Vault), and a Mock Token on Soroban Devnet.
# It can also be used for contract upgrades.
# ==============================================================================
# Exit on error
set -e
# Load environment variables
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
ENV_FILE="$PROJECT_ROOT/.env.devnet"
if [ -f "$ENV_FILE" ]; then
echo "Loading environment from $ENV_FILE..."
export $(grep -v '^#' "$ENV_FILE" | xargs)
else
echo "Error: $ENV_FILE not found. Please create it from the template."
exit 1
fi
# Required environment variables
: "${SOROBAN_NETWORK_PASSPHRASE:?Need SOROBAN_NETWORK_PASSPHRASE}"
: "${SOROBAN_RPC_URL:?Need SOROBAN_RPC_URL}"
: "${SOROBAN_ACCOUNT_SECRET:?Need SOROBAN_ACCOUNT_SECRET}"
: "${ADMIN_ADDRESS:?Need ADMIN_ADDRESS}"
: "${PLATFORM_WALLET:?Need PLATFORM_WALLET}"
NETWORK_ARGS="--network testnet --source-account $SOROBAN_ACCOUNT_SECRET"
echo "Building contracts..."
cd "$PROJECT_ROOT"
cargo build --target wasm32-unknown-unknown --release
# Helper function to deploy a contract
deploy_contract() {
local wasm_path=$1
local name=$2
echo "Deploying $name..."
local contract_id=$(soroban contract deploy \
$NETWORK_ARGS \
--wasm "$wasm_path")
echo "$contract_id"
}
# Helper function to upgrade a contract
upgrade_contract() {
local wasm_path=$1
local contract_id=$2
local name=$3
echo "Upgrading $name ($contract_id)..."
# To upgrade, we first install the new wasm to get the hash
local wasm_hash=$(soroban contract install \
$NETWORK_ARGS \
--wasm "$wasm_path")
# Then we call the upgrade function in the contract
# Assumes contract has an 'upgrade' function that takes a 'new_wasm_hash'
soroban contract invoke \
$NETWORK_ARGS \
--id "$contract_id" \
-- \
upgrade \
--new_wasm_hash "$wasm_hash"
}
# 1. Deploy/Upgrade Mock Token (if needed)
if [ -z "$USDC_TOKEN_ADDRESS" ] || [[ "$USDC_TOKEN_ADDRESS" == CC* ]]; then
# Note: Using a generic token WASM. If not available, you can use:
# soroban lab token deploy --network testnet --source-account $SOROBAN_ACCOUNT_SECRET --name "Mock USDC" --symbol "mUSDC"
echo "No USDC token address provided. Deploying mock token..."
# For demonstration, we assume a token.wasm is available in the workspace or we use a placeholder.
# In a real scenario, you'd have a token.wasm or use the built-in token.
# Here we'll just use a placeholder or assume the user will provide one.
# USDC_TOKEN_ADDRESS=$(deploy_contract "target/wasm32-unknown-unknown/release/mock_token.wasm" "Mock Token")
# Since we don't have a mock_token.wasm in the repo, we'll recommend using the built-in token
# or the user can provide a wasm path.
echo "WARNING: Mock token WASM not found. Please deploy one manually or provide a path."
echo "You can deploy a mock token using: soroban contract deploy --wasm <path_to_token_wasm>"
# exit 1
USDC_TOKEN_ADDRESS="REPLACE_WITH_TOKEN_ADDRESS"
else
echo "Using existing USDC token: $USDC_TOKEN_ADDRESS"
fi
# 2. Deploy/Upgrade Event Registry
EVENT_REGISTRY_WASM="target/wasm32-unknown-unknown/release/event_registry.wasm"
if [ -z "$EVENT_REGISTRY_ID" ]; then
EVENT_REGISTRY_ID=$(deploy_contract "$EVENT_REGISTRY_WASM" "Event Registry")
echo "Initializing Event Registry..."
soroban contract invoke \
$NETWORK_ARGS \
--id "$EVENT_REGISTRY_ID" \
-- \
initialize \
--admin "$ADMIN_ADDRESS" \
--platform_wallet "$PLATFORM_WALLET" \
--platform_fee_percent 500 \
--usdc_token "$USDC_TOKEN_ADDRESS"
else
if [ "$1" == "--upgrade" ]; then
upgrade_contract "$EVENT_REGISTRY_WASM" "$EVENT_REGISTRY_ID" "Event Registry"
else
echo "Event Registry already deployed: $EVENT_REGISTRY_ID"
fi
fi
# 3. Deploy/Upgrade Ticket Payment (Vault)
TICKET_PAYMENT_WASM="target/wasm32-unknown-unknown/release/ticket_payment.wasm"
if [ -z "$TICKET_PAYMENT_ID" ]; then
TICKET_PAYMENT_ID=$(deploy_contract "$TICKET_PAYMENT_WASM" "Ticket Payment")
echo "Initializing Ticket Payment..."
soroban contract invoke \
$NETWORK_ARGS \
--id "$TICKET_PAYMENT_ID" \
-- \
initialize \
--admin "$ADMIN_ADDRESS" \
--usdc_token "$USDC_TOKEN_ADDRESS" \
--platform_wallet "$PLATFORM_WALLET" \
--event_registry "$EVENT_REGISTRY_ID"
else
if [ "$1" == "--upgrade" ]; then
upgrade_contract "$TICKET_PAYMENT_WASM" "$TICKET_PAYMENT_ID" "Ticket Payment"
else
echo "Ticket Payment already deployed: $TICKET_PAYMENT_ID"
fi
fi
# 4. Link contracts
if [ -z "$EVENT_REGISTRY_ID_ALREADY_SET" ]; then
echo "Linking Ticket Payment to Event Registry..."
soroban contract invoke \
$NETWORK_ARGS \
--id "$EVENT_REGISTRY_ID" \
-- \
set_ticket_payment_contract \
--ticket_payment_address "$TICKET_PAYMENT_ID"
fi
echo ""
echo "=============================================================================="
echo "Deployment/Upgrade Complete!"
echo "------------------------------------------------------------------------------"
echo "EVENT_REGISTRY_ID: $EVENT_REGISTRY_ID"
echo "TICKET_PAYMENT_ID: $TICKET_PAYMENT_ID"
echo "USDC_TOKEN_ADDRESS: $USDC_TOKEN_ADDRESS"
echo "=============================================================================="
echo "Update your .env.devnet with these IDs for E2E tests."