-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathdeploy_mainnet.sh
More file actions
executable file
·130 lines (108 loc) · 3.3 KB
/
Copy pathdeploy_mainnet.sh
File metadata and controls
executable file
·130 lines (108 loc) · 3.3 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
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
CONTRACT_DIR="${ROOT_DIR}/Stellar-contracts-v1"
CLI="${STELLAR_CLI:-stellar}"
NETWORK="${STELLAR_NETWORK:-mainnet}"
NETWORK_PASSPHRASE="${STELLAR_NETWORK_PASSPHRASE:-Public Global Stellar Network ; September 2015}"
SOURCE_ACCOUNT="${STELLAR_ACCOUNT:-${ADMIN_IDENTITY:-}}"
ADMIN_ADDRESS="${ADMIN_ADDRESS:-}"
RPC_URL="${STELLAR_RPC_URL:-}"
DEPLOY_AMM="${DEPLOY_AMM:-false}"
WPI_WASM="${WPI_WASM:-${CONTRACT_DIR}/target/wasm32-unknown-unknown/release/wpi_token.wasm}"
NETWORK_ARGS=(--network "$NETWORK" --rpc-url "$RPC_URL" --network-passphrase "$NETWORK_PASSPHRASE")
run() {
echo "+ $*"
"$@"
}
ensure_cli() {
if ! command -v "$CLI" >/dev/null 2>&1; then
echo "ERROR: Stellar CLI not found. Set STELLAR_CLI or install stellar-cli." >&2
exit 1
fi
}
require_mainnet_inputs() {
if [[ "$DEPLOY_AMM" == "true" ]]; then
echo "ERROR: mock-amm is test-only and must never be deployed to mainnet. Unset DEPLOY_AMM." >&2
exit 1
fi
if [[ -z "$SOURCE_ACCOUNT" ]]; then
echo "ERROR: set STELLAR_ACCOUNT or ADMIN_IDENTITY to the mainnet signing identity." >&2
exit 1
fi
if [[ -z "$RPC_URL" ]]; then
echo "ERROR: set STELLAR_RPC_URL to a mainnet Soroban RPC endpoint." >&2
exit 1
fi
if [[ -z "$ADMIN_ADDRESS" ]]; then
if "$CLI" keys address "$SOURCE_ACCOUNT" >/dev/null 2>&1; then
ADMIN_ADDRESS="$("$CLI" keys address "$SOURCE_ACCOUNT")"
else
echo "ERROR: set ADMIN_ADDRESS when STELLAR_ACCOUNT is not a local Stellar CLI identity." >&2
exit 1
fi
fi
}
build_contracts() {
(
cd "$CONTRACT_DIR"
run rustup target add wasm32-unknown-unknown
run cargo build --locked --target wasm32-unknown-unknown --release
run bash scripts/verify_dependency_provenance.sh
)
}
require_artifact() {
local artifact="$1"
if [[ ! -f "$artifact" ]]; then
echo "ERROR: missing WASM artifact: ${artifact}" >&2
exit 1
fi
}
upload_wasm() {
local label="$1"
local wasm="$2"
local hash
echo "== Upload ${label} WASM ==" >&2
require_artifact "$wasm"
hash="$("$CLI" contract upload \
--wasm "$wasm" \
--source-account "$SOURCE_ACCOUNT" \
"${NETWORK_ARGS[@]}" | tail -n 1)"
echo "${label}_WASM_HASH=${hash}" >&2
printf '%s' "$hash"
}
deploy_uploaded_wasm() {
local label="$1"
local wasm_hash="$2"
local contract_id
echo "== Deploy ${label} contract ==" >&2
contract_id="$("$CLI" contract deploy \
--wasm-hash "$wasm_hash" \
--source-account "$SOURCE_ACCOUNT" \
"${NETWORK_ARGS[@]}" | tail -n 1)"
echo "${label}_CONTRACT_ID=${contract_id}" >&2
printf '%s' "$contract_id"
}
invoke_contract() {
local contract_id="$1"
shift
echo "== Invoke contract ${contract_id} ==" >&2
"$CLI" contract invoke \
--id "$contract_id" \
--source-account "$SOURCE_ACCOUNT" \
"${NETWORK_ARGS[@]}" \
-- "$@"
}
ensure_cli
require_mainnet_inputs
build_contracts
echo "Mainnet signing identity configured."
echo "Admin address: ${ADMIN_ADDRESS}"
WPI_HASH="$(upload_wasm WPI "$WPI_WASM")"
WPI_CONTRACT_ID="$(deploy_uploaded_wasm WPI "$WPI_HASH")"
echo "== Initialize wPI contract =="
invoke_contract "$WPI_CONTRACT_ID" initialize --admin "$ADMIN_ADDRESS"
cat <<EOF
Mainnet deployment complete.
export WPI_CONTRACT_ID=${WPI_CONTRACT_ID}
EOF