Skip to content

Commit dfc13cf

Browse files
committed
More stuff
1 parent 8566c2c commit dfc13cf

File tree

3 files changed

+271
-86
lines changed

3 files changed

+271
-86
lines changed

script/testVerification.sh

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
#!/bin/bash
2+
3+
# Test verification script for Monad network
4+
# This script creates a random variant of a contract, deploys it, and verifies it
5+
# Usage: bash testVerification.sh
6+
7+
# Hardcoded values
8+
PRIVATE_KEY="0xb8a3bc8bbf5b070e5f69a25fad00bb92b0caf66b3e73c2fbd117ba1992c1b07c"
9+
ETHERSCAN_API_KEY="2JUT3R7ZG7Z3CRZZUK3TP2W4DMN1DG3P3Z"
10+
11+
# Default values
12+
DEFAULT_SOURCE_FILE="src/Counter.sol:Counter"
13+
14+
# Parse arguments with defaults
15+
SOURCE_FILE="${1:-$DEFAULT_SOURCE_FILE}"
16+
17+
# Extract contract name and file path
18+
CONTRACT_NAME=$(echo "$SOURCE_FILE" | cut -d':' -f2)
19+
ORIGINAL_FILE=$(echo "$SOURCE_FILE" | cut -d':' -f1)
20+
21+
# Generate random suffix for test contract (macOS compatible)
22+
RANDOM_SUFFIX=$(date +%s)$(jot -r 1 1000 9999)
23+
TEST_CONTRACT_NAME="${CONTRACT_NAME}Test${RANDOM_SUFFIX}"
24+
TEST_FILE="src/${TEST_CONTRACT_NAME}.sol"
25+
TEST_SOURCE_FILE="${TEST_FILE}:${TEST_CONTRACT_NAME}"
26+
27+
28+
29+
echo "=========================================="
30+
echo "🧪 VERIFICATION TEST WORKFLOW"
31+
echo "=========================================="
32+
echo "Original: $ORIGINAL_FILE"
33+
echo "Test Contract: $TEST_CONTRACT_NAME"
34+
echo "Test File: $TEST_FILE"
35+
echo "Using hardcoded private key"
36+
echo "=========================================="
37+
38+
# Step 1: Create a modified version of the contract
39+
echo ""
40+
echo "🔧 [1/4] CREATING RANDOM CONTRACT VARIANT..."
41+
echo "=========================================="
42+
43+
if [ ! -f "$ORIGINAL_FILE" ]; then
44+
echo "💥 ERROR: Original file $ORIGINAL_FILE not found!"
45+
exit 1
46+
fi
47+
48+
# Generate random function names (macOS compatible)
49+
FUNC1_NAME="randomFunction$(jot -r 1 100 999)"
50+
FUNC2_NAME="testFunction$(jot -r 1 100 999)"
51+
FUNC3_NAME="dummyFunction$(jot -r 1 100 999)"
52+
53+
# Generate random values (macOS compatible)
54+
RANDOM_VALUE1=$(jot -r 1 1 1000)
55+
RANDOM_VALUE2=$(jot -r 1 1001 2000)
56+
RANDOM_VALUE3=$(jot -r 1 2001 3000)
57+
58+
# Read the original contract and replace contract name
59+
ORIGINAL_CONTENT=$(cat "$ORIGINAL_FILE")
60+
61+
# Replace contract name
62+
MODIFIED_CONTENT=$(echo "$ORIGINAL_CONTENT" | sed "s/contract ${CONTRACT_NAME}/contract ${TEST_CONTRACT_NAME}/g")
63+
64+
# Create a temporary file and write the modified content without the last closing brace
65+
echo "$MODIFIED_CONTENT" | sed '$d' > "$TEST_FILE"
66+
67+
# Add the random functions and the closing brace
68+
cat >> "$TEST_FILE" << EOF
69+
70+
// Random test functions to make this contract unique
71+
function ${FUNC1_NAME}() public pure returns (uint256) {
72+
return ${RANDOM_VALUE1};
73+
}
74+
75+
function ${FUNC2_NAME}(uint256 _input) public pure returns (uint256) {
76+
return _input + ${RANDOM_VALUE2};
77+
}
78+
79+
function ${FUNC3_NAME}() public view returns (string memory) {
80+
return "Test function ${RANDOM_VALUE3}";
81+
}
82+
}
83+
EOF
84+
85+
echo "✅ Created test contract: $TEST_CONTRACT_NAME"
86+
echo "📄 Added random functions: $FUNC1_NAME, $FUNC2_NAME, $FUNC3_NAME"
87+
88+
# Show a preview of the generated contract
89+
echo ""
90+
echo "📄 Contract preview (last 15 lines):"
91+
tail -15 "$TEST_FILE"
92+
93+
# Step 2: Compile the test contract (exclude tests to avoid conflicts)
94+
echo ""
95+
echo "🔨 [2/4] COMPILING TEST CONTRACT..."
96+
echo "=========================================="
97+
98+
if ! forge build --skip test; then
99+
echo "💥 COMPILATION FAILED!"
100+
echo "Cleaning up..."
101+
rm -f "$TEST_FILE"
102+
exit 1
103+
fi
104+
105+
echo "✅ Compilation successful!"
106+
107+
# Step 3: Deploy the test contract
108+
echo ""
109+
echo "📦 [3/4] DEPLOYING TEST CONTRACT..."
110+
echo "=========================================="
111+
112+
DEPLOY_CMD="forge create $TEST_SOURCE_FILE --private-key $PRIVATE_KEY --broadcast"
113+
echo "Running: forge create $TEST_SOURCE_FILE --private-key [HIDDEN] --broadcast"
114+
echo ""
115+
116+
# Capture the deploy output
117+
DEPLOY_OUTPUT=$(eval "$DEPLOY_CMD" 2>&1)
118+
DEPLOY_EXIT_CODE=$?
119+
120+
echo "$DEPLOY_OUTPUT"
121+
122+
if [ $DEPLOY_EXIT_CODE -ne 0 ]; then
123+
echo ""
124+
echo "💥 DEPLOYMENT FAILED!"
125+
echo "Exit code: $DEPLOY_EXIT_CODE"
126+
echo "Cleaning up..."
127+
rm -f "$TEST_FILE"
128+
exit 1
129+
fi
130+
131+
# Extract the deployed contract address from the output
132+
CONTRACT_ADDRESS=$(echo "$DEPLOY_OUTPUT" | grep "Deployed to:" | awk '{print $3}')
133+
134+
if [ -z "$CONTRACT_ADDRESS" ]; then
135+
echo ""
136+
echo "💥 FAILED TO EXTRACT CONTRACT ADDRESS!"
137+
echo "Could not find 'Deployed to:' in the output"
138+
echo "Cleaning up..."
139+
rm -f "$TEST_FILE"
140+
exit 1
141+
fi
142+
143+
echo ""
144+
echo "✅ DEPLOYMENT SUCCESSFUL!"
145+
echo "📍 Contract Address: $CONTRACT_ADDRESS"
146+
147+
# Step 4: Verify the test contract
148+
echo ""
149+
echo "🔍 [4/4] VERIFYING TEST CONTRACT..."
150+
echo "=========================================="
151+
152+
# Wait a moment for the transaction to be mined and indexed
153+
echo "⏳ Waiting 3 seconds for transaction to be indexed..."
154+
sleep 3
155+
156+
# Track verification results
157+
ETHERSCAN_SUCCESS=false
158+
SOURCIFY_SUCCESS=false
159+
SOCIALSCAN_SUCCESS=false
160+
161+
# 1. Etherscan Verification (only if API key is available)
162+
if [ -n "$ETHERSCAN_API_KEY" ]; then
163+
echo ""
164+
echo "🔍 [1/3] Verifying on Etherscan..."
165+
if forge verify-contract --watch --chain 10143 "$CONTRACT_ADDRESS" "$TEST_CONTRACT_NAME" --verifier etherscan --etherscan-api-key "$ETHERSCAN_API_KEY"; then
166+
ETHERSCAN_SUCCESS=true
167+
fi
168+
else
169+
echo ""
170+
echo "⏭️ [1/3] Skipping Etherscan (no API key)"
171+
fi
172+
173+
# 2. Monad Explorer (Sourcify) Verification
174+
echo ""
175+
echo "🔍 [2/3] Verifying on Monad Explorer (Sourcify)..."
176+
if forge verify-contract \
177+
"$CONTRACT_ADDRESS" \
178+
"$TEST_CONTRACT_NAME" \
179+
--chain 10143 \
180+
--verifier sourcify \
181+
--verifier-url https://sourcify-api-monad.blockvision.org; then
182+
SOURCIFY_SUCCESS=true
183+
fi
184+
185+
# 3. Socialscan Verification
186+
echo ""
187+
echo "🔍 [3/3] Verifying on Socialscan..."
188+
if forge verify-contract \
189+
"$CONTRACT_ADDRESS" \
190+
"$TEST_CONTRACT_NAME" \
191+
--chain 10143 \
192+
--watch \
193+
--etherscan-api-key test \
194+
--verifier-url https://api.socialscan.io/monad-testnet/v1/explorer/command_api/contract \
195+
--verifier etherscan; then
196+
SOCIALSCAN_SUCCESS=true
197+
fi
198+
199+
# Final Summary
200+
echo ""
201+
echo "=========================================="
202+
echo "📊 VERIFICATION TEST SUMMARY"
203+
echo "=========================================="
204+
echo "🧪 Test Contract: $TEST_CONTRACT_NAME"
205+
echo "📍 Contract Address: $CONTRACT_ADDRESS"
206+
echo "🔧 Random Functions: $FUNC1_NAME, $FUNC2_NAME, $FUNC3_NAME"
207+
echo ""
208+
209+
if [ -n "$ETHERSCAN_API_KEY" ]; then
210+
if [ "$ETHERSCAN_SUCCESS" = true ]; then
211+
echo "✅ Etherscan: SUCCESS"
212+
else
213+
echo "❌ Etherscan: FAILED"
214+
fi
215+
else
216+
echo "⏭️ Etherscan: SKIPPED (no API key)"
217+
fi
218+
219+
if [ "$SOURCIFY_SUCCESS" = true ]; then
220+
echo "✅ Monad Explorer (Sourcify): SUCCESS"
221+
else
222+
echo "❌ Monad Explorer (Sourcify): FAILED"
223+
fi
224+
225+
if [ "$SOCIALSCAN_SUCCESS" = true ]; then
226+
echo "✅ Socialscan: SUCCESS"
227+
else
228+
echo "❌ Socialscan: FAILED"
229+
fi
230+
231+
echo "=========================================="
232+
233+
# Calculate overall success
234+
TOTAL_SUCCESS=0
235+
TOTAL_ATTEMPTED=0
236+
237+
if [ -n "$ETHERSCAN_API_KEY" ]; then
238+
TOTAL_ATTEMPTED=$((TOTAL_ATTEMPTED + 1))
239+
if [ "$ETHERSCAN_SUCCESS" = true ]; then
240+
TOTAL_SUCCESS=$((TOTAL_SUCCESS + 1))
241+
fi
242+
fi
243+
244+
TOTAL_ATTEMPTED=$((TOTAL_ATTEMPTED + 1))
245+
if [ "$SOURCIFY_SUCCESS" = true ]; then
246+
TOTAL_SUCCESS=$((TOTAL_SUCCESS + 1))
247+
fi
248+
249+
TOTAL_ATTEMPTED=$((TOTAL_ATTEMPTED + 1))
250+
if [ "$SOCIALSCAN_SUCCESS" = true ]; then
251+
TOTAL_SUCCESS=$((TOTAL_SUCCESS + 1))
252+
fi
253+
254+
echo "🎯 Test Result: $TOTAL_SUCCESS/$TOTAL_ATTEMPTED verifications successful"
255+
256+
# Cleanup
257+
echo ""
258+
echo "🧹 CLEANING UP..."
259+
echo "Removing test file: $TEST_FILE"
260+
rm -f "$TEST_FILE"
261+
262+
if [ $TOTAL_SUCCESS -eq $TOTAL_ATTEMPTED ]; then
263+
echo "🎉 All verification tests passed!"
264+
exit 0
265+
elif [ $TOTAL_SUCCESS -gt 0 ]; then
266+
echo "⚠️ Partial success - some verifications failed"
267+
exit 0
268+
else
269+
echo "💥 All verification tests failed"
270+
exit 1
271+
fi

script/verifyContract.sh

Lines changed: 0 additions & 62 deletions
This file was deleted.

test/Counter.t.sol

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)