-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy-sepolia.sh
More file actions
executable file
·149 lines (128 loc) · 3.73 KB
/
deploy-sepolia.sh
File metadata and controls
executable file
·149 lines (128 loc) · 3.73 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
144
145
146
147
148
#!/bin/bash
# Bank合约Sepolia部署脚本
# 使用方法: ./deploy-sepolia.sh
set -e
echo "🚀 Bank合约Sepolia部署脚本"
echo "================================"
echo ""
# 检查.env文件
if [ ! -f .env ]; then
echo "❌ 错误: .env文件不存在"
echo "请先创建.env文件并配置必要的环境变量"
echo ""
echo "运行以下命令创建.env文件:"
echo " cp env.example .env"
echo ""
exit 1
fi
# 加载环境变量
source .env
# 检查必要的环境变量
if [ -z "$SEPOLIA_RPC_URL" ] || [ "$SEPOLIA_RPC_URL" == "https://eth-sepolia.g.alchemy.com/v2/YOUR_ALCHEMY_API_KEY" ]; then
echo "❌ 错误: SEPOLIA_RPC_URL未正确配置"
echo "请在.env文件中设置您的Alchemy API密钥"
exit 1
fi
if [ -z "$PRIVATE_KEY" ] || [ "$PRIVATE_KEY" == "your_private_key_here" ]; then
echo "❌ 错误: PRIVATE_KEY未正确配置"
echo "请在.env文件中设置您的私钥"
exit 1
fi
echo "✅ 环境变量检查通过"
echo ""
# 显示部署信息
echo "📋 部署信息:"
echo " 网络: Sepolia Testnet"
echo " RPC: ${SEPOLIA_RPC_URL:0:50}..."
echo " 部署者地址: $(cast wallet address $PRIVATE_KEY)"
echo ""
# 检查余额
echo "💰 检查账户余额..."
BALANCE=$(cast balance $(cast wallet address $PRIVATE_KEY) --rpc-url $SEPOLIA_RPC_URL)
BALANCE_ETH=$(cast to-unit $BALANCE ether)
echo " 余额: $BALANCE_ETH ETH"
if [ $(echo "$BALANCE_ETH < 0.01" | bc) -eq 1 ]; then
echo "⚠️ 警告: 余额较低,可能不足以支付Gas费用"
echo " 建议从faucet获取更多Sepolia ETH: https://sepoliafaucet.com/"
echo ""
fi
# 询问是否继续
read -p "是否继续部署? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "❌ 部署已取消"
exit 0
fi
echo ""
echo "🔨 开始编译合约..."
forge build
if [ $? -ne 0 ]; then
echo "❌ 编译失败"
exit 1
fi
echo "✅ 编译成功"
echo ""
# 运行测试
echo "🧪 运行测试..."
forge test --match-contract BankTest
if [ $? -ne 0 ]; then
echo "⚠️ 警告: 测试失败"
read -p "是否继续部署? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "❌ 部署已取消"
exit 0
fi
else
echo "✅ 测试通过"
fi
echo ""
echo "🚀 开始部署Bank合约到Sepolia..."
echo ""
# 部署合约
if [ -z "$ETHERSCAN_API_KEY" ] || [ "$ETHERSCAN_API_KEY" == "your_etherscan_api_key_here" ]; then
echo "⚠️ 未配置Etherscan API密钥,将跳过合约验证"
echo ""
forge script script/Deploy.s.sol:DeployScript \
--rpc-url $SEPOLIA_RPC_URL \
--broadcast \
-vvvv
else
echo "✅ 将自动验证合约"
echo ""
forge script script/Deploy.s.sol:DeployScript \
--rpc-url $SEPOLIA_RPC_URL \
--broadcast \
--verify \
-vvvv
fi
if [ $? -eq 0 ]; then
echo ""
echo "================================"
echo "🎉 部署成功!"
echo "================================"
echo ""
echo "📝 后续步骤:"
echo "1. 检查 deployment-sepolia.json 文件查看部署地址"
echo "2. 将合约地址添加到 .env 文件的 BANK_CONTRACT_ADDRESS"
echo "3. 在 Sepolia Etherscan 查看合约: https://sepolia.etherscan.io/"
echo "4. 使用交互脚本测试合约功能"
echo ""
echo "📚 查看完整部署指南: DEPLOYMENT_GUIDE.md"
echo ""
else
echo ""
echo "================================"
echo "❌ 部署失败"
echo "================================"
echo ""
echo "请检查错误信息并重试"
echo "常见问题:"
echo " - 余额不足"
echo " - RPC URL无效"
echo " - 私钥格式错误"
echo ""
echo "查看详细故障排除: DEPLOYMENT_GUIDE.md"
echo ""
exit 1
fi