#!/bin/bash # FISCO BCOS ParallelTransfer合约账户初始化脚本 - 最终修复版 CONTRACT_ADDRESS="0x06ac2fe406f1ae06494946ee281d58f1c79c39e4" ACCOUNT_COUNT=100 INITIAL_BALANCE=1000000000 echo "==========================================" echo " ParallelTransfer 账户初始化工具" echo "==========================================" echo "" echo "合约地址: $CONTRACT_ADDRESS" echo "账户数量: $ACCOUNT_COUNT" echo "初始余额: $INITIAL_BALANCE" echo "" read -p "确认开始初始化?(y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "已取消" exit 0 fi echo "" echo "开始初始化..." START_TIME=$(date +%s) SUCCESS=0 FAILED=0 for i in $(seq 0 $(($ACCOUNT_COUNT - 1))); do account=$(printf "user_%06d" $i) # 显示当前正在处理的账户 echo -n "[$i/$ACCOUNT_COUNT] $account ... " # 调用合约(需要在console目录下执行) SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$SCRIPT_DIR" result=$(bash console.sh call ParallelTransfer $CONTRACT_ADDRESS set "$account" $INITIAL_BALANCE 2>&1) # 检查结果并实时显示 if echo "$result" | grep -q "transaction status: 0x0"; then ((SUCCESS++)) echo "✓ [成功:$SUCCESS 失败:$FAILED]" else ((FAILED++)) echo "✗ [成功:$SUCCESS 失败:$FAILED]" # 只显示前3个失败的详细信息 if [ $FAILED -le 3 ]; then echo " 错误详情:" echo "$result" | head -5 fi fi # 每50个显示一次统计 if [ $(($i % 50)) -eq 0 ] && [ $i -gt 0 ]; then ELAPSED=$(($(date +%s) - START_TIME)) AVG_SPEED=$(awk "BEGIN {printf \"%.2f\", $SUCCESS/$ELAPSED}") REMAIN=$(awk "BEGIN {printf \"%.0f\", ($ACCOUNT_COUNT - $i) / $AVG_SPEED}") echo " ═══ [$(date +%H:%M:%S)] 已完成 $i 个 | 平均速度: ${AVG_SPEED} 笔/秒 | 预计剩余: ${REMAIN} 秒 ═══" fi done TOTAL_TIME=$(($(date +%s) - START_TIME)) echo "" echo "==========================================" echo "初始化完成!" echo "==========================================" echo " 总账户数: $ACCOUNT_COUNT" echo " 成功: $SUCCESS" echo " 失败: $FAILED" if [ $ACCOUNT_COUNT -gt 0 ]; then echo " 成功率: $(awk "BEGIN {printf \"%.2f\", $SUCCESS*100/$ACCOUNT_COUNT}")%" fi echo " 总耗时: ${TOTAL_TIME}秒" if [ $SUCCESS -gt 0 ] && [ $TOTAL_TIME -gt 0 ]; then echo " 平均速度: $(awk "BEGIN {printf \"%.2f\", $SUCCESS/$TOTAL_TIME}") 笔/秒" fi echo "" # 验证账户 if [ $SUCCESS -gt 0 ]; then echo "验证账户余额..." cd "$SCRIPT_DIR" bash console.sh call ParallelTransfer $CONTRACT_ADDRESS balanceOf "user_000000" | grep -A5 "Return" echo "" fi echo "✅ 完成!"