diff --git a/tps/init_accounts.sh b/tps/init_accounts.sh new file mode 100755 index 0000000..f17ed4d --- /dev/null +++ b/tps/init_accounts.sh @@ -0,0 +1,93 @@ +#!/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 "✅ 完成!" +