checkWallet.sh 6.4 KB

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