-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy_sepolia.sh
More file actions
executable file
·147 lines (125 loc) · 6.23 KB
/
deploy_sepolia.sh
File metadata and controls
executable file
·147 lines (125 loc) · 6.23 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
#!/usr/bin/env bash
# ─────────────────────────────────────────────────────────────
# deploy_sepolia.sh — Deploy Dark Waters to Starknet Sepolia
# ─────────────────────────────────────────────────────────────
set -euo pipefail
# ── RPC endpoint ──────────────────────────────────────────────
STARKNET_RPC_URL="https://api.cartridge.gg/x/starknet/sepolia"
export STARKNET_RPC_URL
# ── Prompt for credentials ────────────────────────────────────
echo "═══════════════════════════════════════════════════════"
echo " Dark Waters — Sepolia Deployment"
echo "═══════════════════════════════════════════════════════"
echo ""
read -rp "Enter your Starknet account address: " DOJO_ACCOUNT_ADDRESS
if [ -z "$DOJO_ACCOUNT_ADDRESS" ]; then
echo "Error: Account address cannot be empty."
exit 1
fi
export DOJO_ACCOUNT_ADDRESS
echo ""
read -rsp "Enter your private key (hidden): " DOJO_PRIVATE_KEY
echo ""
if [ -z "$DOJO_PRIVATE_KEY" ]; then
echo "Error: Private key cannot be empty."
exit 1
fi
export DOJO_PRIVATE_KEY
echo ""
DENSHOKAN_DEFAULT_TOKEN="0x0142712722e62a38f9c40fcc904610e1a14c70125876ecaaf25d803556734467"
read -rp "Enter the Denshokan token contract address [${DENSHOKAN_DEFAULT_TOKEN}]: " DENSHOKAN_TOKEN
DENSHOKAN_TOKEN="${DENSHOKAN_TOKEN:-$DENSHOKAN_DEFAULT_TOKEN}"
# ── Cleanup trap ──────────────────────────────────────────────
cleanup_env() {
echo ""
echo "Cleaning up environment variables..."
unset STARKNET_RPC_URL
unset DOJO_ACCOUNT_ADDRESS
unset DOJO_PRIVATE_KEY
echo "Environment variables cleared."
}
trap cleanup_env EXIT
# ── Verify RPC connectivity ───────────────────────────────────
echo ""
echo "Verifying RPC connectivity..."
CHAIN_HEX=$(curl -s --location "$STARKNET_RPC_URL" \
--header 'Content-Type: application/json' \
--data '{"id":0,"jsonrpc":"2.0","method":"starknet_chainId","params":{}}' \
| grep -o '"result":"[^"]*"' | cut -d'"' -f4)
if [ -z "$CHAIN_HEX" ]; then
echo "Error: Could not connect to RPC at $STARKNET_RPC_URL"
exit 1
fi
CHAIN_NAME=$(echo -n "$CHAIN_HEX" | xxd -r -p 2>/dev/null || echo "unknown")
echo "Connected to chain: $CHAIN_NAME ($CHAIN_HEX)"
if [ "$CHAIN_NAME" != "SN_SEPOLIA" ]; then
echo "Warning: Expected SN_SEPOLIA but got $CHAIN_NAME"
read -rp "Continue anyway? (y/N): " CONTINUE
if [ "$CONTINUE" != "y" ] && [ "$CONTINUE" != "Y" ]; then
exit 1
fi
fi
# ── Build ─────────────────────────────────────────────────────
echo ""
echo "Building the project..."
sozo -P sepolia build
echo ""
echo "Patching Actions dojo_init calldata..."
bash ./scripts/patch_egs_init_calldata.sh sepolia
# ── Migrate ───────────────────────────────────────────────────
echo ""
echo "Deploying to Sepolia..."
MIGRATE_OUTPUT=$(sozo -P sepolia migrate 2>&1 | tee /dev/stderr)
echo ""
echo "Configuring Denshokan token..."
sozo -P sepolia execute dark_waters-Actions configure_denshokan "$DENSHOKAN_TOKEN" 1 --wait
echo ""
echo "Initializing Denshokan registration..."
sozo -P sepolia execute dark_waters-Actions initialize_denshokan --wait
# ── Parse World Address ───────────────────────────────────────
WORLD_ADDRESS=$(echo "$MIGRATE_OUTPUT" | grep -oP 'world at address \K0x[0-9a-fA-F]+' || true)
if [ -z "$WORLD_ADDRESS" ]; then
# Fallback: try another pattern sozo might use
WORLD_ADDRESS=$(echo "$MIGRATE_OUTPUT" | grep -oP 'World deployed.*address[:\s]+\K0x[0-9a-fA-F]+' || true)
fi
if [ -z "$WORLD_ADDRESS" ]; then
echo ""
echo "Warning: Could not automatically parse the World Address."
echo "Check the output above and manually note it."
echo ""
read -rp "Paste the World Address here (or press Enter to skip): " WORLD_ADDRESS
fi
# ── Parse deployed block ─────────────────────────────────────
DEPLOYED_BLOCK=$(echo "$MIGRATE_OUTPUT" | grep -oP 'deployed at block \K[0-9]+' || true)
# ── Write sepolia_config.json ─────────────────────────────────
CONFIG_FILE="sepolia_config.json"
cat > "$CONFIG_FILE" <<EOF
{
"world_address": "${WORLD_ADDRESS}",
"rpc_url": "${STARKNET_RPC_URL}",
"chain_id": "SN_SEPOLIA",
"deployed_block": "${DEPLOYED_BLOCK}",
"deployed_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
"account_address": "${DOJO_ACCOUNT_ADDRESS}"
}
EOF
echo ""
echo "═══════════════════════════════════════════════════════"
echo " Deployment Complete!"
echo "═══════════════════════════════════════════════════════"
echo ""
echo " World Address: ${WORLD_ADDRESS:-'(not parsed)'}"
echo " Deployed Block: ${DEPLOYED_BLOCK:-'(not parsed)'}"
echo " RPC URL: ${STARKNET_RPC_URL}"
echo " Config saved: ${CONFIG_FILE}"
echo ""
if [ -n "$WORLD_ADDRESS" ]; then
echo "Next steps:"
echo " 1. Update dojo_sepolia.toml [env] with:"
echo " world_address = \"${WORLD_ADDRESS}\""
if [ -n "$DEPLOYED_BLOCK" ]; then
echo " world_block = ${DEPLOYED_BLOCK}"
fi
echo " 2. Update your frontend to use the Sepolia RPC and world address."
echo ""
fi