-
Notifications
You must be signed in to change notification settings - Fork 60
Expand file tree
/
Copy pathdeploy_puzzle_factory.sh
More file actions
executable file
Β·143 lines (126 loc) Β· 5.16 KB
/
deploy_puzzle_factory.sh
File metadata and controls
executable file
Β·143 lines (126 loc) Β· 5.16 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
#!/bin/bash
# Puzzle Factory Contract Deployment Script
# This script handles the deployment of the puzzle factory contract
set -e
echo "π Puzzle Factory Contract Deployment"
echo "====================================="
# Set SSL certificate path to fix certificate issues
export SSL_CERT_FILE=/usr/local/etc/openssl@3/cert.pem
# Contract details
CONTRACT_NAME="puzzle_factory"
WASM_FILE="target/wasm32v1-none/release/puzzle_factory.wasm"
WASM_HASH="4ea640f52d13350400b81d11c9e29977b9de853c19f679fd7f6f036c4f840d3e"
SOURCE_ACCOUNT="puzzle_deployer"
NETWORK="testnet"
echo "π Contract Details:"
echo " - Name: $CONTRACT_NAME"
echo " - WASM: $WASM_FILE"
echo " - Hash: $WASM_HASH"
echo " - Source: $SOURCE_ACCOUNT"
echo " - Network: $NETWORK"
# Check if WASM file exists
if [ ! -f "$WASM_FILE" ]; then
echo "β WASM file not found. Building contract..."
soroban contract build --package puzzle-factory
fi
# Verify WASM file
echo "β
WASM file found: $(ls -lh $WASM_FILE | awk '{print $5}')"
# Check account balance
echo "π° Checking account balance..."
ACCOUNT_ADDRESS=$(stellar keys address $SOURCE_ACCOUNT)
echo " - Address: $ACCOUNT_ADDRESS"
# Fund account if needed (check balance first)
BALANCE=$(stellar account info $ACCOUNT_ADDRESS --network $NETWORK 2>/dev/null | grep "Balance:" | awk '{print $2}' || echo "0")
if [ "$BALANCE" = "0" ] || [ -z "$BALANCE" ]; then
echo "πͺ Funding account on testnet..."
curl "https://friendbot.stellar.org/?addr=$ACCOUNT_ADDRESS" > /dev/null 2>&1
echo "β
Account funded"
else
echo "β
Account already funded: $BALANCE XLM"
fi
# Upload WASM to network
echo "π€ Uploading WASM to network..."
UPLOAD_RESULT=$(stellar contract upload --wasm $WASM_FILE --source $SOURCE_ACCOUNT --network $NETWORK)
echo "β
WASM uploaded: $UPLOAD_RESULT"
# Try different deployment approaches
echo "π Attempting deployment..."
# Method 1: Direct deployment
echo "π Method 1: Direct deployment..."
if stellar contract deploy --wasm $WASM_FILE --source $SOURCE_ACCOUNT --network $NETWORK --ignore-checks 2>/dev/null; then
echo "β
Deployment successful!"
DEPLOYMENT_SUCCESS=true
else
echo "β Direct deployment failed"
DEPLOYMENT_SUCCESS=false
fi
# Method 2: Using WASM hash if direct deployment fails
if [ "$DEPLOYMENT_SUCCESS" = false ]; then
echo "π Method 2: Using WASM hash..."
if stellar contract deploy --wasm-hash $WASM_HASH --source $SOURCE_ACCOUNT --network $NETWORK --ignore-checks 2>/dev/null; then
echo "β
Deployment successful!"
DEPLOYMENT_SUCCESS=true
else
echo "β WASM hash deployment failed"
fi
fi
# Method 3: Manual transaction building if automated deployment fails
if [ "$DEPLOYMENT_SUCCESS" = false ]; then
echo "π Method 3: Manual transaction building..."
echo "β οΈ This requires manual intervention due to CLI version compatibility"
echo ""
echo "π§ Manual Deployment Instructions:"
echo "1. Update Stellar CLI to latest version:"
echo " brew install stellar # or cargo install stellar-cli --force"
echo ""
echo "2. Or use the following manual steps:"
echo " - WASM Hash: $WASM_HASH"
echo " - Source Account: $ACCOUNT_ADDRESS"
echo " - Network: $NETWORK"
echo ""
echo "3. Try deployment with updated CLI:"
echo " stellar contract deploy --wasm $WASM_FILE --source $SOURCE_ACCOUNT --network $NETWORK"
fi
# If deployment was successful, provide next steps
if [ "$DEPLOYMENT_SUCCESS" = true ]; then
echo ""
echo "π Contract Deployment Complete!"
echo "================================"
echo ""
echo "π Next Steps:"
echo "1. Initialize the contract:"
echo " stellar contract invoke --id CONTRACT_ID --source $SOURCE_ACCOUNT --network $NETWORK -- initialize --admin $ACCOUNT_ADDRESS"
echo ""
echo "2. Authorize creators:"
echo " stellar contract invoke --id CONTRACT_ID --source $SOURCE_ACCOUNT --network $NETWORK -- authorize_creator --creator CREATOR_ADDRESS"
echo ""
echo "3. Create your first puzzle:"
echo " stellar contract invoke --id CONTRACT_ID --source CREATOR_ADDRESS --network $NETWORK -- create_puzzle ..."
echo ""
echo "π Contract Functions Available:"
echo " - initialize(admin)"
echo " - authorize_creator(creator)"
echo " - create_puzzle(...)"
echo " - deprecate_puzzle(puzzle_id)"
echo " - get_puzzle(puzzle_id)"
echo " - get_puzzles_by_category(category)"
echo " - get_puzzles_by_creator(creator)"
echo " - get_puzzles_by_difficulty(difficulty)"
echo " - get_active_puzzles()"
echo " - get_creator_stats(creator)"
echo " - update_puzzle(...)"
echo " - activate_puzzle(puzzle_id)"
echo " - deactivate_puzzle(puzzle_id)"
echo " - revoke_creator(creator)"
echo " - is_creator_authorized(creator)"
echo " - get_puzzle_count()"
else
echo ""
echo "β Deployment Failed"
echo "=================="
echo "The deployment failed due to CLI compatibility issues."
echo "Please update your Stellar CLI and try again."
fi
echo ""
echo "π SSL Certificate Fix Applied: $SSL_CERT_FILE"
echo "π Account: $ACCOUNT_ADDRESS"
echo "π Network: $NETWORK"