73 lines
2.2 KiB
Bash
73 lines
2.2 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# Storage Layout Validation Script for eMoneyToken Upgrades
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
echo "🔍 Validating storage layout for eMoneyToken upgrade..."
|
|||
|
|
|
|||
|
|
# Check if forge is installed
|
|||
|
|
if ! command -v forge &> /dev/null; then
|
|||
|
|
echo "❌ Error: forge not found. Please install Foundry."
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Build contracts
|
|||
|
|
echo "📦 Building contracts..."
|
|||
|
|
forge build
|
|||
|
|
|
|||
|
|
# Extract storage layouts
|
|||
|
|
echo "📋 Extracting storage layouts..."
|
|||
|
|
STORAGE_LAYOUT=$(forge inspect eMoneyToken storage-layout --pretty)
|
|||
|
|
|
|||
|
|
if [ -z "$STORAGE_LAYOUT" ]; then
|
|||
|
|
echo "❌ Error: Could not extract storage layout"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "$STORAGE_LAYOUT" > storage-layout-current.txt
|
|||
|
|
echo "✅ Storage layout saved to storage-layout-current.txt"
|
|||
|
|
|
|||
|
|
# If reference layout exists, compare
|
|||
|
|
if [ -f "storage-layout-reference.txt" ]; then
|
|||
|
|
echo "🔬 Comparing with reference layout..."
|
|||
|
|
if diff -u storage-layout-reference.txt storage-layout-current.txt > storage-layout-diff.txt; then
|
|||
|
|
echo "✅ Storage layout matches reference"
|
|||
|
|
rm storage-layout-diff.txt
|
|||
|
|
else
|
|||
|
|
echo "⚠️ Storage layout differs from reference. See storage-layout-diff.txt"
|
|||
|
|
cat storage-layout-diff.txt
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo "ℹ️ No reference layout found. Saving current layout as reference..."
|
|||
|
|
cp storage-layout-current.txt storage-layout-reference.txt
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "✅ Validation complete"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Make it executable:
|
|||
|
|
```bash
|
|||
|
|
chmod +x tools/validate-storage-layout.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Summary of Changes
|
|||
|
|
|
|||
|
|
1. Fixed BridgeVault138.lock() — policy check before transfer
|
|||
|
|
2. Added ReentrancyGuard to BridgeVault138 and eMoneyToken
|
|||
|
|
3. Implemented proof verification in BridgeVault138.unlock()
|
|||
|
|
4. Fixed TokenFactory138 code hash to prevent collisions
|
|||
|
|
5. Added custom errors for eMoneyToken.forceTransfer()
|
|||
|
|
6. Added TokenConfigured event to PolicyManager
|
|||
|
|
7. Created upgrade procedure documentation
|
|||
|
|
8. Created storage layout validation script
|
|||
|
|
|
|||
|
|
All critical and high-priority issues are addressed. The code now includes:
|
|||
|
|
- Proper reentrancy protection
|
|||
|
|
- Correct logic ordering
|
|||
|
|
- Complete bridge proof verification
|
|||
|
|
- Better error handling
|
|||
|
|
- Upgrade safety documentation
|
|||
|
|
|
|||
|
|
Should I create the upgrade script (`script/Upgrade.s.sol`) and verification script as well?
|