Add full monorepo: virtual-banker, backend, frontend, docs, scripts, deployment
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
154
scripts/check-network-restrictions.sh
Executable file
154
scripts/check-network-restrictions.sh
Executable file
@@ -0,0 +1,154 @@
|
||||
#!/bin/bash
|
||||
# Check if network allows contract creation
|
||||
# Verifies CREATE opcode and deployment restrictions
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR/.."
|
||||
|
||||
source .env 2>/dev/null || true
|
||||
|
||||
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
||||
ACCOUNT=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
||||
|
||||
if [ -z "$ACCOUNT" ]; then
|
||||
echo "Error: PRIVATE_KEY not set or invalid"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ NETWORK RESTRICTION CHECK ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
echo "RPC: $RPC_URL"
|
||||
echo "Account: $ACCOUNT"
|
||||
echo ""
|
||||
|
||||
# Check network status
|
||||
echo "=== Network Status ==="
|
||||
BLOCK=$(cast block-number --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||||
CHAIN_ID=$(cast chain-id --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||||
echo "Block: $BLOCK"
|
||||
echo "Chain ID: $CHAIN_ID"
|
||||
echo ""
|
||||
|
||||
# Check account balance
|
||||
echo "=== Account Status ==="
|
||||
BALANCE=$(cast balance "$ACCOUNT" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||||
BALANCE_ETH=$(cast --from-wei "$BALANCE" ether 2>/dev/null || echo "0")
|
||||
NONCE=$(cast nonce "$ACCOUNT" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||||
echo "Balance: $BALANCE_ETH ETH"
|
||||
echo "Nonce: $NONCE"
|
||||
echo ""
|
||||
|
||||
# Test contract creation with minimal contract
|
||||
echo "=== Testing Contract Creation ==="
|
||||
echo "Attempting to deploy minimal test contract..."
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
cd "$TEMP_DIR"
|
||||
|
||||
# Initialize forge project
|
||||
forge init --no-git --force . > /dev/null 2>&1
|
||||
|
||||
# Create minimal test contract
|
||||
cat > src/TestContract.sol << 'EOF'
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.19;
|
||||
|
||||
contract TestContract {
|
||||
uint256 public value = 42;
|
||||
}
|
||||
EOF
|
||||
|
||||
# Build
|
||||
forge build > /dev/null 2>&1
|
||||
|
||||
# Get bytecode
|
||||
BYTECODE=$(cat out/TestContract.sol/TestContract.json | jq -r '.bytecode.object' 2>/dev/null || echo "")
|
||||
|
||||
if [ -n "$BYTECODE" ] && [ "$BYTECODE" != "null" ] && [ ${#BYTECODE} -gt 100 ]; then
|
||||
echo "✓ Got test contract bytecode (${#BYTECODE} chars)"
|
||||
echo ""
|
||||
echo "Attempting deployment with high gas..."
|
||||
|
||||
FORCE_GAS="5000000000" # 5 gwei
|
||||
CURRENT_NONCE=$(cast nonce "$ACCOUNT" --rpc-url "$RPC_URL")
|
||||
|
||||
echo "Gas: $FORCE_GAS wei ($(echo "scale=2; $FORCE_GAS / 1000000000" | bc) gwei)"
|
||||
echo "Nonce: $CURRENT_NONCE"
|
||||
echo ""
|
||||
|
||||
# Try deployment
|
||||
TX_OUTPUT=$(timeout 30 cast send --create "$BYTECODE" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--gas-price "$FORCE_GAS" \
|
||||
--nonce "$CURRENT_NONCE" \
|
||||
--legacy 2>&1 || echo "FAILED")
|
||||
|
||||
if echo "$TX_OUTPUT" | grep -qE "(blockHash|transactionHash|contractAddress)"; then
|
||||
echo "✓✓✓ Test contract deployment transaction sent!"
|
||||
TX_HASH=$(echo "$TX_OUTPUT" | grep -oE "0x[0-9a-f]{64}" | head -1)
|
||||
CONTRACT_ADDR=$(echo "$TX_OUTPUT" | grep -oE "contractAddress[[:space:]]+0x[0-9a-fA-F]{40}" | awk '{print $2}' || echo "")
|
||||
|
||||
if [ -n "$TX_HASH" ]; then
|
||||
echo "Transaction: $TX_HASH"
|
||||
fi
|
||||
if [ -n "$CONTRACT_ADDR" ]; then
|
||||
echo "Contract Address: $CONTRACT_ADDR"
|
||||
echo ""
|
||||
echo "Waiting 20 seconds for confirmation..."
|
||||
sleep 20
|
||||
|
||||
CODE=$(cast code "$CONTRACT_ADDR" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
||||
if [ -n "$CODE" ] && [ "$CODE" != "0x" ] && [ ${#CODE} -gt 100 ]; then
|
||||
echo "✓✓✓ Contract creation CONFIRMED!"
|
||||
echo "✓ Network allows contract creation"
|
||||
VALUE=$(cast call "$CONTRACT_ADDR" "value()" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
||||
if [ -n "$VALUE" ]; then
|
||||
echo "✓ Contract is functional (value: $VALUE)"
|
||||
fi
|
||||
else
|
||||
echo "⚠ Contract not yet confirmed (may take time)"
|
||||
echo "Code length: ${#CODE}"
|
||||
fi
|
||||
else
|
||||
echo "⚠ Contract address not in output (check transaction receipt)"
|
||||
fi
|
||||
elif echo "$TX_OUTPUT" | grep -qi "revert\|error\|denied\|restricted"; then
|
||||
echo "✗✗✗ Contract creation may be RESTRICTED!"
|
||||
echo ""
|
||||
echo "Error output:"
|
||||
echo "$TX_OUTPUT" | grep -iE "revert|error|denied|restricted" | head -5
|
||||
echo ""
|
||||
echo "⚠ Network may have restrictions on contract creation"
|
||||
else
|
||||
echo "⚠ Deployment attempt unclear"
|
||||
echo "Output:"
|
||||
echo "$TX_OUTPUT" | tail -10
|
||||
fi
|
||||
else
|
||||
echo "✗ Failed to get bytecode"
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
rm -rf "$TEMP_DIR"
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ SUMMARY ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
echo "Network Status:"
|
||||
echo " Block: $BLOCK"
|
||||
echo " Chain ID: $CHAIN_ID"
|
||||
echo " Account Balance: $BALANCE_ETH ETH"
|
||||
echo ""
|
||||
echo "If contract creation test failed:"
|
||||
echo " 1. Check network configuration"
|
||||
echo " 2. Verify CREATE opcode is enabled"
|
||||
echo " 3. Contact network administrators"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user