-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathdeploy_contracts.sh
More file actions
executable file
·127 lines (111 loc) · 5.93 KB
/
Copy pathdeploy_contracts.sh
File metadata and controls
executable file
·127 lines (111 loc) · 5.93 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
#!/usr/bin/env bash
# deploy_contracts.sh — full deploy + init sequence for all three Soroban contracts.
# Run from the repo root after setting the required environment variables.
#
# Required env vars:
# ADMIN_SECRET — deployer secret key (S...)
# ADMIN_PUBLIC — matching public key (G...)
# TOKEN_ADDRESS — SAC del activo del staking_pool: el USDC del vault DeFindex.
# Debe ser el MISMO activo del vault.
# VAULT_ADDRESS — dirección del vault DeFindex (USDC) que respalda el staking_pool
# TREASURY_ADDRESS — wallet (G...) dueña de las ganancias por interés del lending.
# Única que podrá llamar `withdraw_interest`.
#
# Optional:
# LENDING_TOKEN_ADDRESS — SAC del activo que PRESTA vinculo_lending. Default: SAC nativo
# de XLM en testnet. Es DISTINTO del USDC del staking_pool.
# NETWORK — defaults to "testnet"
#
# Usage:
# export ADMIN_SECRET="S..."
# export ADMIN_PUBLIC="G..."
# export TOKEN_ADDRESS="CAQCFVLOBK5GIULPNZRGATJJMIZL5BSP7X5YJVMGCPTUEPFM4AVSRCJU" # SAC del USDC (GATALTGT)
# export VAULT_ADDRESS="CBPO3E7IFJRVP6MVNS4YJOVHEOEMNMUHV7AVAQ47IL53ERVCEJ6UIS76" # vault DeFindex propio (fixed_apr)
# export TREASURY_ADDRESS="G..."
# bash scripts/deploy_contracts.sh
#
# El vault DeFindex propio se crea aparte vía el factory con la estrategia fixed_apr.
# Ver scripts/create_vault.sh y scripts/harvest_keeper.sh.
set -euo pipefail
NETWORK="${NETWORK:-testnet}"
CONTRACTS_DIR="backend/contracts"
# SAC nativo de XLM en testnet (activo que presta vinculo_lending; distinto del USDC).
LENDING_TOKEN_ADDRESS="${LENDING_TOKEN_ADDRESS:-CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC}"
# ── Validate required vars ────────────────────────────────────────────────────
: "${ADMIN_SECRET:?Set ADMIN_SECRET before running this script}"
: "${ADMIN_PUBLIC:?Set ADMIN_PUBLIC before running this script}"
: "${TOKEN_ADDRESS:?Set TOKEN_ADDRESS before running this script}"
: "${VAULT_ADDRESS:?Set VAULT_ADDRESS (DeFindex vault) before running this script}"
: "${TREASURY_ADDRESS:?Set TREASURY_ADDRESS (treasury wallet for loan interest) before running this script}"
echo "==> Network: $NETWORK"
echo "==> Admin: $ADMIN_PUBLIC"
# ── Helper: build + deploy + return contract ID ───────────────────────────────
deploy_contract() {
local name="$1"
local dir="$CONTRACTS_DIR/$name"
echo ""
echo "── Building $name ──"
(cd "$dir" && cargo build --release --target wasm32-unknown-unknown --quiet)
local wasm="$dir/target/wasm32-unknown-unknown/release/${name}.wasm"
echo "── Deploying $name ──"
stellar contract deploy \
--wasm "$wasm" \
--source "$ADMIN_SECRET" \
--network "$NETWORK"
}
# ── Helper: upload wasm and return hash ───────────────────────────────────────
upload_wasm() {
local name="$1"
local dir="$CONTRACTS_DIR/$name"
local wasm="$dir/target/wasm32-unknown-unknown/release/${name}.wasm"
stellar contract upload \
--wasm "$wasm" \
--source "$ADMIN_SECRET" \
--network "$NETWORK"
}
# ── 1. vinculo_sbt ────────────────────────────────────────────────────────────
SBT_CONTRACT_ID=$(deploy_contract "vinculo_sbt")
echo "SBT_CONTRACT_ID=$SBT_CONTRACT_ID"
stellar contract invoke \
--id "$SBT_CONTRACT_ID" \
--source "$ADMIN_SECRET" \
--network "$NETWORK" \
-- init \
--admin "$ADMIN_PUBLIC"
echo "==> vinculo_sbt initialized"
# ── 2. staking_pool ───────────────────────────────────────────────────────────
STAKING_CONTRACT_ID=$(deploy_contract "staking_pool")
echo "STAKING_CONTRACT_ID=$STAKING_CONTRACT_ID"
stellar contract invoke \
--id "$STAKING_CONTRACT_ID" \
--source "$ADMIN_SECRET" \
--network "$NETWORK" \
-- init \
--admin "$ADMIN_PUBLIC" \
--token "$TOKEN_ADDRESS" \
--vault "$VAULT_ADDRESS"
echo "==> staking_pool initialized (admin + token + DeFindex vault)"
echo " (el admin puede migrar el vault luego con: invoke -- set_vault --new_vault <C...>)"
# ── 3. vinculo_lending ────────────────────────────────────────────────────────
LENDING_CONTRACT_ID=$(deploy_contract "vinculo_lending")
echo "LENDING_CONTRACT_ID=$LENDING_CONTRACT_ID"
stellar contract invoke \
--id "$LENDING_CONTRACT_ID" \
--source "$ADMIN_SECRET" \
--network "$NETWORK" \
-- init_lending \
--token "$LENDING_TOKEN_ADDRESS" \
--sbt "$SBT_CONTRACT_ID" \
--treasury "$TREASURY_ADDRESS"
echo "==> vinculo_lending initialized (XLM token + SBT + treasury)"
# ── Summary ───────────────────────────────────────────────────────────────────
echo ""
echo "════════════════════════════════════════"
echo " Deployment complete. Add to .env.local:"
echo "════════════════════════════════════════"
echo "NFT_CONTRACT_ID=$SBT_CONTRACT_ID"
echo "VITE_LENDING_CONTRACT_ID=$LENDING_CONTRACT_ID"
echo "VITE_STAKING_CONTRACT_ID=$STAKING_CONTRACT_ID"
echo "STAKING_CONTRACT_ID=$STAKING_CONTRACT_ID"
echo "VITE_TREASURY_ADDRESS=$TREASURY_ADDRESS"
echo "════════════════════════════════════════"