forked from SmartDropLabs/smartdrop-contracts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·131 lines (108 loc) · 3.58 KB
/
Copy pathdeploy.sh
File metadata and controls
executable file
·131 lines (108 loc) · 3.58 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
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
STELLAR_TOML="${STELLAR_TOML:-$ROOT_DIR/stellar.toml}"
CONTRACT_IDS_FILE="${CONTRACT_IDS_FILE:-$ROOT_DIR/.contract-ids.json}"
NETWORK="${NETWORK:-testnet}"
SOURCE="${SOURCE:-default}"
ADMIN="${ADMIN:-}"
POOL_WASM="${ROOT_DIR}/soroban/target/wasm32v1-none/release/farming_pool.wasm"
FACTORY_WASM="${ROOT_DIR}/soroban/target/wasm32v1-none/release/factory.wasm"
die() {
echo "error: $*" >&2
exit 1
}
run_stellar() {
local attempt combined last_line
for attempt in 1 2 3; do
if combined="$("$@" 2>&1)"; then
last_line="$(printf '%s\n' "$combined" | awk 'NF { line = $0 } END { print line }')"
printf '%s' "$last_line"
return 0
fi
if [[ "$combined" == *TxBadSeq* ]] && [[ "$attempt" -lt 3 ]]; then
echo "warning: transaction sequence mismatch, retrying ($attempt/3)..." >&2
sleep 3
continue
fi
echo "$combined" >&2
return 1
done
}
require_cmd() {
command -v "$1" >/dev/null 2>&1 || die "$1 is not installed or not on PATH"
}
toml_value() {
local section="$1"
local key="$2"
awk -v section="[$section]" -v key="$key" '
$0 == section { in_section = 1; next }
/^\[/ { in_section = 0 }
in_section && $1 == key {
line = $0
sub(/^[^=]*=[[:space:]]*/, "", line)
gsub(/"/, "", line)
print line
exit
}
' "$STELLAR_TOML"
}
require_cmd stellar
case "$NETWORK" in
testnet | mainnet) ;;
*)
die "NETWORK must be 'testnet' or 'mainnet' (got: $NETWORK)"
;;
esac
[[ -f "$STELLAR_TOML" ]] || die "missing $STELLAR_TOML"
RPC_URL="$(toml_value "$NETWORK" "rpc-url")"
NETWORK_PASSPHRASE="$(toml_value "$NETWORK" "network-passphrase")"
[[ -n "$RPC_URL" ]] || die "rpc-url not found for [$NETWORK] in $STELLAR_TOML"
[[ -n "$NETWORK_PASSPHRASE" ]] || die "network-passphrase not found for [$NETWORK] in $STELLAR_TOML"
stellar keys address "$SOURCE" >/dev/null 2>&1 \
|| die "Stellar identity '$SOURCE' not found. Generate one with: stellar keys generate $SOURCE"
if [[ -z "$ADMIN" ]]; then
ADMIN="$(stellar keys address "$SOURCE")" \
|| die "ADMIN is not set and could not resolve address for SOURCE=$SOURCE"
fi
[[ -f "$POOL_WASM" ]] || die "missing $POOL_WASM — run 'make build' first"
[[ -f "$FACTORY_WASM" ]] || die "missing $FACTORY_WASM — run 'make build' first"
stellar network add "$NETWORK" \
--rpc-url "$RPC_URL" \
--network-passphrase "$NETWORK_PASSPHRASE" \
>/dev/null 2>&1 || true
echo "Installing farming-pool WASM..."
POOL_HASH="$(
run_stellar stellar contract install \
--wasm "$POOL_WASM" \
--network "$NETWORK" \
--source "$SOURCE" \
--quiet
)"
sleep 2
[[ -n "$POOL_HASH" ]] || die "failed to install farming-pool WASM (empty hash returned)"
echo "Deploying factory..."
FACTORY_ID="$(
run_stellar stellar contract deploy \
--wasm "$FACTORY_WASM" \
--network "$NETWORK" \
--source "$SOURCE" \
--quiet
)"
sleep 2
[[ -n "$FACTORY_ID" ]] || die "failed to deploy factory (empty contract id returned)"
echo "Initializing factory..."
if ! run_stellar stellar contract invoke \
--id "$FACTORY_ID" \
--network "$NETWORK" \
--source "$SOURCE" \
--quiet \
-- initialize --admin "$ADMIN" --pool_wasm_hash "$POOL_HASH" >/dev/null; then
die "failed to initialize factory $FACTORY_ID"
fi
printf '{"factory": "%s", "pool_wasm_hash": "%s", "network": "%s"}\n' \
"$FACTORY_ID" "$POOL_HASH" "$NETWORK" >"$CONTRACT_IDS_FILE"
echo "Deployment complete."
echo " factory: $FACTORY_ID"
echo " pool_wasm_hash: $POOL_HASH"
echo " saved to: $CONTRACT_IDS_FILE"