-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathdeploy_testnet.sh
More file actions
executable file
·133 lines (109 loc) · 3.44 KB
/
Copy pathdeploy_testnet.sh
File metadata and controls
executable file
·133 lines (109 loc) · 3.44 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
#!/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:-testnet}"
RPC_URL="${STELLAR_RPC_URL:-https://soroban-testnet.stellar.org/}"
NETWORK_PASSPHRASE="${STELLAR_NETWORK_PASSPHRASE:-Test SDF Network ; September 2015}"
SOURCE_ACCOUNT="${STELLAR_ACCOUNT:-${ADMIN_IDENTITY:-wpi-testnet-admin}}"
RATE_BPS="${RATE_BPS:-1000000}"
WPI_WASM="${WPI_WASM:-${CONTRACT_DIR}/target/wasm32-unknown-unknown/release/wpi_token.wasm}"
AMM_WASM="${AMM_WASM:-${CONTRACT_DIR}/target/wasm32-unknown-unknown/release/mock_amm.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
}
ensure_network() {
if "$CLI" network ls 2>/dev/null | awk '{print $1}' | grep -qx "$NETWORK"; then
return
fi
run "$CLI" network add "$NETWORK" \
--rpc-url "$RPC_URL" \
--network-passphrase "$NETWORK_PASSPHRASE"
}
ensure_testnet_identity() {
if "$CLI" keys address "$SOURCE_ACCOUNT" >/dev/null 2>&1; then
ADMIN_ADDRESS="$("$CLI" keys address "$SOURCE_ACCOUNT")"
return
fi
run "$CLI" keys generate "$SOURCE_ACCOUNT" "${NETWORK_ARGS[@]}" --fund
ADMIN_ADDRESS="$("$CLI" keys address "$SOURCE_ACCOUNT")"
}
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
run "$CLI" contract invoke \
--id "$contract_id" \
--source-account "$SOURCE_ACCOUNT" \
"${NETWORK_ARGS[@]}" \
-- "$@"
}
ensure_cli
ensure_network
ensure_testnet_identity
build_contracts
echo "Admin identity: ${SOURCE_ACCOUNT}"
echo "Admin address: ${ADMIN_ADDRESS}"
WPI_HASH="$(upload_wasm WPI "$WPI_WASM")"
WPI_CONTRACT_ID="$(deploy_uploaded_wasm WPI "$WPI_HASH")"
AMM_HASH="$(upload_wasm MOCK_AMM "$AMM_WASM")"
MOCK_AMM_CONTRACT_ID="$(deploy_uploaded_wasm MOCK_AMM "$AMM_HASH")"
echo "== Initialize contracts =="
invoke_contract "$WPI_CONTRACT_ID" initialize --admin "$ADMIN_ADDRESS"
invoke_contract "$MOCK_AMM_CONTRACT_ID" initialize \
--admin "$ADMIN_ADDRESS" \
--token_in "$WPI_CONTRACT_ID" \
--rate_bps "$RATE_BPS"
cat <<EOF
Testnet deployment complete.
export WPI_CONTRACT_ID=${WPI_CONTRACT_ID}
export MOCK_AMM_CONTRACT_ID=${MOCK_AMM_CONTRACT_ID}
EOF