#!/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?