checkWallet.sh 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. CONFIG_FILE="/app/data/.nockchain_wallet_config"
  2. # Socket path - find first available socket
  3. SOCKET=/app/data/nockchain.sock
  4. # Colors
  5. GREEN='\033[0;32m'
  6. RED='\033[0;31m'
  7. YELLOW='\033[1;33m'
  8. BLUE='\033[0;34m'
  9. PURPLE='\033[0;35m'
  10. CYAN='\033[0;36m'
  11. NC='\033[0m'
  12. # Check if socket exists
  13. if [ -z "$SOCKET" ]; then
  14. echo -e "${RED}Error: No nockchain socket found!${NC}"
  15. echo "Make sure miners are running."
  16. exit 1
  17. fi
  18. # Check if config exists, if not prompt for wallet
  19. if [ ! -f "$CONFIG_FILE" ]; then
  20. clear
  21. echo -e "${CYAN}╔══════════════════════════════════════════════════════════════════╗${NC}"
  22. echo -e "${CYAN}║ FIRST TIME SETUP ║${NC}"
  23. echo -e "${CYAN}╚══════════════════════════════════════════════════════════════════╝${NC}"
  24. echo ""
  25. echo -e "${YELLOW}Please enter your public key to monitor:${NC}"
  26. echo ""
  27. read -p "Public Key: " USER_WALLET
  28. # Validate input
  29. if [ -z "$USER_WALLET" ]; then
  30. echo -e "${RED}Error: No wallet address provided!${NC}"
  31. exit 1
  32. fi
  33. # Save to config
  34. echo "$USER_WALLET" > "$CONFIG_FILE"
  35. echo ""
  36. echo -e "${GREEN}✓ Wallet saved! Starting monitor...${NC}"
  37. sleep 2
  38. else
  39. # Read wallet from config
  40. USER_WALLET=$(cat "$CONFIG_FILE")
  41. fi
  42. # Header
  43. clear
  44. echo -e "${CYAN}╔══════════════════════════════════════════════════════════════════╗${NC}"
  45. echo -e "${CYAN}║ NOCKCHAIN WALLET MONITOR ║${NC}"
  46. echo -e "${CYAN}╚══════════════════════════════════════════════════════════════════╝${NC}"
  47. echo ""
  48. echo -e "${YELLOW}Checking blockchain...${NC}"
  49. echo -e "${BLUE}Your wallet:${NC} ${CYAN}${USER_WALLET:0:20}...${USER_WALLET: -20}${NC}"
  50. echo ""
  51. # Get wallet output and extract signers (FIXED: Added tr -d '\0' to remove null bytes)
  52. WALLET_OUTPUT=$(/app/wallet/nockchain-wallet --nockchain-socket /app/data/nockchain.sock list-notes 2>/dev/null | tr -d '\0')
  53. # Extract all wallet addresses from signers field
  54. WALLETS=$(echo "$WALLET_OUTPUT" | grep -oP '(?<=pks=<\|)[^|]+(?=\|>)' | sort | uniq)
  55. # If no wallets found
  56. if [ -z "$WALLETS" ]; then
  57. echo -e "${RED}No mined blocks found in wallet data.${NC}"
  58. echo ""
  59. echo -e "${BLUE}Your blocks:${NC} ${RED}0${NC}"
  60. echo ""
  61. echo -e "${YELLOW}Keep mining! 💪${NC}"
  62. exit 0
  63. fi
  64. # Count total unique wallets
  65. UNIQUE_COUNT=$(echo "$WALLETS" | wc -l)
  66. echo -e "${GREEN}═══════════════════════════════════════════════════════════════════${NC}"
  67. echo -e "${GREEN} BLOCKCHAIN MINING SUMMARY ${NC}"
  68. echo -e "${GREEN}═══════════════════════════════════════════════════════════════════${NC}"
  69. echo ""
  70. echo -e "${BLUE}Total unique miners:${NC} ${YELLOW}$UNIQUE_COUNT${NC}"
  71. echo ""
  72. echo -e "${PURPLE}MINER RANKINGS:${NC}"
  73. echo -e "${PURPLE}───────────────${NC}"
  74. # Process each wallet
  75. USER_BLOCKS=0
  76. RANK=1
  77. while IFS= read -r wallet; do
  78. # Count occurrences (will be doubled)
  79. COUNT=$(echo "$WALLET_OUTPUT" | grep -c "$wallet")
  80. # Divide by 2
  81. BLOCKS=$((COUNT / 2))
  82. # Check if it's user's wallet
  83. WALLET_TAG=""
  84. if [ "$wallet" = "$USER_WALLET" ]; then
  85. USER_BLOCKS=$BLOCKS
  86. WALLET_TAG=" ${GREEN}← YOU!${NC}"
  87. fi
  88. # Display wallet (truncated for readability)
  89. WALLET_SHORT="${wallet:0:20}...${wallet: -20}"
  90. echo -e "${YELLOW}#$RANK${NC} ${CYAN}$WALLET_SHORT${NC}"
  91. echo -e " ${GREEN}Blocks mined: $BLOCKS${NC}$WALLET_TAG"
  92. echo ""
  93. RANK=$((RANK + 1))
  94. done <<< "$WALLETS"
  95. # Summary for user
  96. echo -e "${GREEN}═══════════════════════════════════════════════════════════════════${NC}"
  97. echo -e "${GREEN} YOUR STANDINGS ${NC}"
  98. echo -e "${GREEN}═══════════════════════════════════════════════════════════════════${NC}"
  99. echo ""
  100. # Your results
  101. if [ $USER_BLOCKS -gt 0 ]; then
  102. echo -e "${BLUE}Your blocks:${NC} ${GREEN}$USER_BLOCKS 🎉${NC}"
  103. YOUR_RANK=$(echo "$WALLETS" | grep -n "^$USER_WALLET$" | cut -d: -f1)
  104. echo -e "${BLUE}Your rank:${NC} ${YELLOW}#$YOUR_RANK${NC} out of ${YELLOW}$UNIQUE_COUNT${NC} miners"
  105. else
  106. echo -e "${BLUE}Your blocks:${NC} ${RED}0${NC} ${YELLOW}(Keep mining!)${NC}"
  107. fi
  108. echo ""
  109. echo -e "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
  110. echo -e "Last checked: $(date '+%Y-%m-%d %H:%M:%S')"
  111. echo ""
  112. # Fun stats
  113. TOTAL_BLOCKS=$(echo "$WALLETS" | while read w; do echo "$WALLET_OUTPUT" | grep -c "$w"; done | awk '{sum+=$1} END {print sum/2}')
  114. echo -e "${PURPLE}Network Stats:${NC}"
  115. echo -e " Total blocks mined: ${YELLOW}$TOTAL_BLOCKS${NC}"
  116. echo -e " Average per miner: ${YELLOW}$(($TOTAL_BLOCKS / $UNIQUE_COUNT))${NC}"
  117. # If user has blocks, celebrate!
  118. if [ $USER_BLOCKS -gt 0 ]; then
  119. echo ""
  120. echo -e "${GREEN}🎊 🎊 🎊 CONGRATULATIONS! YOU'RE EARNING NOCK! 🎊 🎊 🎊${NC}"
  121. fi
  122. echo ""
  123. # Add option to change wallet
  124. echo -e "${CYAN}───────────────────────────────────────────────────────────────────${NC}"
  125. echo -e "${BLUE}To monitor a different wallet, delete the config file:${NC}"
  126. echo -e "${YELLOW}rm $CONFIG_FILE${NC}"
  127. echo ""