Skip to content

review cryptography (Run ID: openSVM_tornado-svm_issue_3_43e335ac) #5

review cryptography (Run ID: openSVM_tornado-svm_issue_3_43e335ac)

review cryptography (Run ID: openSVM_tornado-svm_issue_3_43e335ac) #5

name: Tornado SVM Testnet Transaction Test
on:
workflow_dispatch:
inputs:
denomination:
description: 'Transaction denomination in SOL'
required: true
default: '1'
merkle_tree_height:
description: 'Merkle tree height'
required: true
default: '20'
rpc_url:
description: 'Solana RPC URL (defaults to testnet)'
required: false
default: 'https://api.testnet.solana.com'
schedule:
- cron: '0 0 * * 0' # Run weekly on Sundays at midnight UTC
pull_request:
branches: [ master ]
paths:
- 'src/**'
- 'scripts/**'
- 'client/**'
jobs:
run-tornado-transaction:
name: Execute Tornado Transaction on Testnet
runs-on: ubuntu-latest
env:
# Disable Telegram notifications
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies
run: |
bun install
bun install -g chartjs-node-canvas chart.js
sudo apt-get update
sudo apt-get install -y libudev-dev libusb-1.0-0-dev pkg-config
- name: Install Solana CLI
run: |
# Install Solana CLI tools
sh -c "$(curl -sSfL https://release.solana.com/v1.16.0/install)"
# Add Solana to PATH for this job
echo "$HOME/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH
# Also add to PATH for current shell session
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
# Verify installation
solana --version
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Setup metrics directory
run: |
mkdir -p reports/metrics
mkdir -p reports/graphs
chmod +x scripts/generate_metrics.js
chmod +x scripts/format_report.js
- name: Generate keypair for testing
run: |
# Ensure Solana binaries are in PATH
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
solana-keygen new --no-bip39-passphrase -o ~/.config/solana/id.json
solana config set --url ${{ github.event.inputs.rpc_url || 'https://api.testnet.solana.com' }}
echo "# Tornado SVM Testnet Transaction Report" > reports/transaction_report.md
echo "Generated on: $(date)" >> reports/transaction_report.md
echo "" >> reports/transaction_report.md
echo "## Configuration" >> reports/transaction_report.md
echo "- Denomination: ${{ github.event.inputs.denomination || '1' }} SOL" >> reports/transaction_report.md
echo "- Merkle Tree Height: ${{ github.event.inputs.merkle_tree_height || '20' }}" >> reports/transaction_report.md
echo "- Solana RPC URL: ${{ github.event.inputs.rpc_url || 'https://api.testnet.solana.com' }}" >> reports/transaction_report.md
echo "- Solana Version: $(solana --version)" >> reports/transaction_report.md
echo "- Bun Version: $(bun --version)" >> reports/transaction_report.md
echo "- Rust Version: $(rustc --version)" >> reports/transaction_report.md
echo "- Wallet Address: $(solana address)" >> reports/transaction_report.md
echo "" >> reports/transaction_report.md
- name: Request airdrop
run: |
# Ensure Solana binaries are in PATH
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
echo "## Solana Testnet Airdrop" >> reports/transaction_report.md
echo "Requesting airdrop..." | tee -a reports/transaction_report.md
solana airdrop 1 $(solana address) || true
sleep 2
BALANCE=$(solana balance)
echo "Wallet balance: $BALANCE" | tee -a reports/transaction_report.md
- name: Setup transaction script with metrics capture
run: |
# Modify the script to capture transaction signatures and execution times
cp scripts/run_tornado_transaction.sh scripts/run_tornado_transaction_metrics.sh
# Add start timestamp
sed -i '3i\# Start time for metrics\nSTART_TIME=$(date +%s.%N)\necho "Transaction start time: $(date -u)" > ../reports/metrics/execution_times.txt\n' scripts/run_tornado_transaction_metrics.sh
# Add timing for program deploy
sed -i '/echo "Program deployed with ID: $PROGRAM_ID"/a\DEPLOY_END_TIME=$(date +%s.%N)\nDEPLOY_TIME=$(echo "$DEPLOY_END_TIME - $START_TIME" | bc)\necho "Program deployment time: ${DEPLOY_TIME}s" >> ../reports/metrics/execution_times.txt' scripts/run_tornado_transaction_metrics.sh
# Add timing for initialize
sed -i '/echo "Tornado instance created: $TORNADO_INSTANCE"/a\INIT_END_TIME=$(date +%s.%N)\nINIT_TIME=$(echo "$INIT_END_TIME - $DEPLOY_END_TIME" | bc)\necho "Initialization time: ${INIT_TIME}s" >> ../reports/metrics/execution_times.txt\necho $TORNADO_INSTANCE > ../reports/metrics/instance_id.txt' scripts/run_tornado_transaction_metrics.sh
# Save deposit signature
sed -i '/echo "Deposit transaction signature: $DEPOSIT_SIGNATURE"/a\echo $DEPOSIT_SIGNATURE > ../reports/metrics/deposit_signature.txt\nDEPOSIT_END_TIME=$(date +%s.%N)\nDEPOSIT_TIME=$(echo "$DEPOSIT_END_TIME - $INIT_END_TIME" | bc)\necho "Deposit time: ${DEPOSIT_TIME}s" >> ../reports/metrics/execution_times.txt' scripts/run_tornado_transaction_metrics.sh
# Save withdraw signature
sed -i '/echo "Withdraw transaction signature: $WITHDRAW_SIGNATURE"/a\echo $WITHDRAW_SIGNATURE > ../reports/metrics/withdraw_signature.txt\nWITHDRAW_END_TIME=$(date +%s.%N)\nWITHDRAW_TIME=$(echo "$WITHDRAW_END_TIME - $DEPOSIT_END_TIME" | bc)\necho "Withdrawal time: ${WITHDRAW_TIME}s" >> ../reports/metrics/execution_times.txt' scripts/run_tornado_transaction_metrics.sh
# Add total time
sed -i '/echo -e "${GREEN}Script completed!${NC}"/i\END_TIME=$(date +%s.%N)\nTOTAL_TIME=$(echo "$END_TIME - $START_TIME" | bc)\necho "Total execution time: ${TOTAL_TIME}s" >> ../reports/metrics/execution_times.txt' scripts/run_tornado_transaction_metrics.sh
# Make the script executable
chmod +x scripts/run_tornado_transaction_metrics.sh
- name: Run Tornado transaction script with metrics
run: |
# Ensure Solana binaries are in PATH
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
echo "## Transaction Log" >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
cd scripts
# Explicitly disabling telegram-related environment variables before running script
export TELEGRAM_BOT_TOKEN=disabled TELEGRAM_CHAT_ID=disabled SKIP_TELEGRAM_NOTIFICATIONS=true
# Pass the Solana PATH to the script
SOLANA_PATH="$HOME/.local/share/solana/install/active_release/bin" ./run_tornado_transaction_metrics.sh 2>&1 | tee -a ../reports/transaction_log.txt
cat ../reports/transaction_log.txt >> ../reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
env:
DENOMINATION: ${{ github.event.inputs.denomination || '1' }}
MERKLE_TREE_HEIGHT: ${{ github.event.inputs.merkle_tree_height || '20' }}
RPC_URL: ${{ github.event.inputs.rpc_url || 'https://api.testnet.solana.com' }}
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
- name: Generate transaction metrics
env:
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
run: |
echo "## Transaction Metrics" >> reports/transaction_report.md
echo "### Execution Times" >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
cat reports/metrics/execution_times.txt >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
echo "### Transaction IDs" >> reports/transaction_report.md
echo "- **Tornado Instance:** $(cat reports/metrics/instance_id.txt 2>/dev/null || echo 'Not available')" >> reports/transaction_report.md
echo "- **Deposit Transaction:** $(cat reports/metrics/deposit_signature.txt 2>/dev/null || echo 'Not available')" >> reports/transaction_report.md
echo "- **Withdraw Transaction:** $(cat reports/metrics/withdraw_signature.txt 2>/dev/null || echo 'Not available')" >> reports/transaction_report.md
# Generate detailed transaction metrics using our custom script
if [ -f reports/metrics/deposit_signature.txt ]; then
DEPOSIT_SIG=$(cat reports/metrics/deposit_signature.txt)
bun scripts/generate_metrics.js "$DEPOSIT_SIG" "${{ github.event.inputs.rpc_url || 'https://api.testnet.solana.com' }}" > reports/metrics/deposit_metrics.json
fi
if [ -f reports/metrics/withdraw_signature.txt ]; then
WITHDRAW_SIG=$(cat reports/metrics/withdraw_signature.txt)
bun scripts/generate_metrics.js "$WITHDRAW_SIG" "${{ github.event.inputs.rpc_url || 'https://api.testnet.solana.com' }}" > reports/metrics/withdraw_metrics.json
fi
- name: Generate detailed performance report
env:
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
run: |
echo "### Deposit Transaction Details" >> reports/transaction_report.md
if [ -f reports/metrics/deposit_metrics.json ]; then
echo "\`\`\`json" >> reports/transaction_report.md
cat reports/metrics/deposit_metrics.json >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
# Run complexity analysis on deposit transaction
DEPOSIT_SIG=$(cat reports/metrics/deposit_signature.txt)
chmod +x scripts/analyze_transaction_complexity.js
echo "### Deposit Transaction Complexity Analysis" >> reports/transaction_report.md
bun scripts/analyze_transaction_complexity.js "$DEPOSIT_SIG" "${{ github.event.inputs.rpc_url || 'https://api.testnet.solana.com' }}" > reports/metrics/deposit_complexity.json
echo "\`\`\`json" >> reports/transaction_report.md
cat reports/metrics/deposit_complexity.json >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
# Create computation breakdown chart for deposit
echo "### Deposit Operation Breakdown" >> reports/transaction_report.md
echo "\`\`\`mermaid" >> reports/transaction_report.md
echo "pie title Deposit Compute Units Distribution" >> reports/transaction_report.md
grep -o '"type": "[^"]*", "program": "[^"]*", "subOperations": \[[^]]*\], "computeEstimate": [0-9]*, "percentage": [0-9]*' reports/metrics/deposit_complexity.json | while read -r line; do
OP_TYPE=$(echo $line | grep -o '"type": "[^"]*"' | cut -d'"' -f4)
PERCENTAGE=$(echo $line | grep -o '"percentage": [0-9]*' | cut -d':' -f2 | tr -d ' ')
if [ -n "$OP_TYPE" ] && [ -n "$PERCENTAGE" ]; then
echo " \"$OP_TYPE\" : $PERCENTAGE" >> reports/transaction_report.md
fi
done
echo "\`\`\`" >> reports/transaction_report.md
else
echo "No deposit transaction metrics available" >> reports/transaction_report.md
fi
echo "### Withdraw Transaction Details" >> reports/transaction_report.md
if [ -f reports/metrics/withdraw_metrics.json ]; then
echo "\`\`\`json" >> reports/transaction_report.md
cat reports/metrics/withdraw_metrics.json >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
# Run complexity analysis on withdraw transaction
WITHDRAW_SIG=$(cat reports/metrics/withdraw_signature.txt)
echo "### Withdraw Transaction Complexity Analysis" >> reports/transaction_report.md
bun scripts/analyze_transaction_complexity.js "$WITHDRAW_SIG" "${{ github.event.inputs.rpc_url || 'https://api.testnet.solana.com' }}" > reports/metrics/withdraw_complexity.json
echo "\`\`\`json" >> reports/transaction_report.md
cat reports/metrics/withdraw_complexity.json >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
# Create computation breakdown chart for withdraw
echo "### Withdraw Operation Breakdown" >> reports/transaction_report.md
echo "\`\`\`mermaid" >> reports/transaction_report.md
echo "pie title Withdraw Compute Units Distribution" >> reports/transaction_report.md
grep -o '"type": "[^"]*", "program": "[^"]*", "subOperations": \[[^]]*\], "computeEstimate": [0-9]*, "percentage": [0-9]*' reports/metrics/withdraw_complexity.json | while read -r line; do
OP_TYPE=$(echo $line | grep -o '"type": "[^"]*"' | cut -d'"' -f4)
PERCENTAGE=$(echo $line | grep -o '"percentage": [0-9]*' | cut -d':' -f2 | tr -d ' ')
if [ -n "$OP_TYPE" ] && [ -n "$PERCENTAGE" ]; then
echo " \"$OP_TYPE\" : $PERCENTAGE" >> reports/transaction_report.md
fi
done
echo "\`\`\`" >> reports/transaction_report.md
else
echo "No withdraw transaction metrics available" >> reports/transaction_report.md
fi
- name: Solana network metrics
env:
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
run: |
# Ensure Solana binaries are in PATH
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
echo "## Solana Network Metrics" >> reports/transaction_report.md
echo "### Transaction Count" >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
solana transaction-count >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
echo "### Current Epoch Info" >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
solana epoch-info >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
echo "### Inflation Rate" >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
solana inflation >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
- name: Transaction explorer links
env:
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
run: |
echo "## Transaction Explorer Links" >> reports/transaction_report.md
if [ -f reports/metrics/deposit_signature.txt ]; then
DEPOSIT_SIG=$(cat reports/metrics/deposit_signature.txt)
echo "[Deposit Transaction on Explorer](https://explorer.solana.com/tx/$DEPOSIT_SIG?cluster=testnet)" >> reports/transaction_report.md
fi
if [ -f reports/metrics/withdraw_signature.txt ]; then
WITHDRAW_SIG=$(cat reports/metrics/withdraw_signature.txt)
echo "[Withdraw Transaction on Explorer](https://explorer.solana.com/tx/$WITHDRAW_SIG?cluster=testnet)" >> reports/transaction_report.md
fi
if [ -f reports/metrics/instance_id.txt ]; then
INSTANCE_ID=$(cat reports/metrics/instance_id.txt)
echo "[Tornado Instance on Explorer](https://explorer.solana.com/address/$INSTANCE_ID?cluster=testnet)" >> reports/transaction_report.md
fi
- name: Create transaction flow visualization
env:
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
run: |
echo "## Visualization" >> reports/transaction_report.md
echo "### Transaction Flow" >> reports/transaction_report.md
echo "\`\`\`mermaid" >> reports/transaction_report.md
echo "graph TD" >> reports/transaction_report.md
echo " A[Deploy Program] -->|$(grep 'Program deployment time' reports/metrics/execution_times.txt 2>/dev/null | cut -d' ' -f4 || echo '?')| B[Initialize Tornado]" >> reports/transaction_report.md
echo " B -->|$(grep 'Initialization time' reports/metrics/execution_times.txt 2>/dev/null | cut -d' ' -f3 || echo '?')| C[Generate Commitment]" >> reports/transaction_report.md
echo " C --> D[Deposit Funds]" >> reports/transaction_report.md
echo " D -->|$(grep 'Deposit time' reports/metrics/execution_times.txt 2>/dev/null | cut -d' ' -f3 || echo '?')| E[Get Merkle Root]" >> reports/transaction_report.md
echo " E --> F[Generate Proof]" >> reports/transaction_report.md
echo " F --> G[Withdraw Funds]" >> reports/transaction_report.md
echo " G -->|$(grep 'Withdrawal time' reports/metrics/execution_times.txt 2>/dev/null | cut -d' ' -f3 || echo '?')| H[Complete]" >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
# Add zkSNARK workflow visualization
echo "### zkSNARK Workflow" >> reports/transaction_report.md
echo "\`\`\`mermaid" >> reports/transaction_report.md
echo "sequenceDiagram" >> reports/transaction_report.md
echo " participant User" >> reports/transaction_report.md
echo " participant TornadoInstance" >> reports/transaction_report.md
echo " participant MerkleTree" >> reports/transaction_report.md
echo " participant zkSNARK" >> reports/transaction_report.md
echo " User->>TornadoInstance: Initialize" >> reports/transaction_report.md
echo " TornadoInstance->>MerkleTree: Create Empty Tree" >> reports/transaction_report.md
echo " User->>User: Generate Commitment" >> reports/transaction_report.md
echo " User->>TornadoInstance: Deposit Funds" >> reports/transaction_report.md
echo " TornadoInstance->>MerkleTree: Insert Commitment" >> reports/transaction_report.md
echo " User->>MerkleTree: Get Current Root" >> reports/transaction_report.md
echo " User->>zkSNARK: Generate Proof" >> reports/transaction_report.md
echo " User->>TornadoInstance: Withdraw with Proof" >> reports/transaction_report.md
echo " TornadoInstance->>zkSNARK: Verify Proof" >> reports/transaction_report.md
echo " TornadoInstance->>User: Transfer Funds" >> reports/transaction_report.md
echo "\`\`\`" >> reports/transaction_report.md
- name: Create summary report
env:
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
run: |
echo "## Executive Summary" > reports/summary.md
echo "Tornado-SVM privacy solution transaction test completed on $(date)." >> reports/summary.md
# Include status
if [ -f reports/metrics/withdraw_signature.txt ]; then
echo "✅ **Status: SUCCESS**" >> reports/summary.md
else
echo "❌ **Status: FAILED**" >> reports/summary.md
fi
# Include key metrics
echo "" >> reports/summary.md
echo "### Key Metrics" >> reports/summary.md
echo "- **Network:** ${RPC_URL:-Testnet}" >> reports/summary.md
echo "- **Total Execution Time:** $(grep 'Total execution time' reports/metrics/execution_times.txt 2>/dev/null | cut -d' ' -f4 || echo 'N/A')" >> reports/summary.md
if [ -f reports/metrics/deposit_metrics.json ]; then
DEPOSIT_COMPUTE=$(grep 'computeUnitsConsumed' reports/metrics/deposit_metrics.json | head -1 | awk '{print $2}' | tr -d ',:')
echo "- **Deposit Compute Units:** ${DEPOSIT_COMPUTE:-N/A}" >> reports/summary.md
fi
if [ -f reports/metrics/withdraw_metrics.json ]; then
WITHDRAW_COMPUTE=$(grep 'computeUnitsConsumed' reports/metrics/withdraw_metrics.json | head -1 | awk '{print $2}' | tr -d ',:')
echo "- **Withdraw Compute Units:** ${WITHDRAW_COMPUTE:-N/A}" >> reports/summary.md
fi
# Add the summary to the main report
cat reports/summary.md reports/transaction_report.md > reports/full_report.md
mv reports/full_report.md reports/transaction_report.md
- name: Upload transaction report artifact
uses: actions/upload-artifact@v3
with:
name: tornado-svm-transaction-report
path: |
reports/transaction_report.md
reports/metrics/*.json
reports/metrics/execution_times.txt
retention-days: 90
- name: Create GitHub job summary
env:
# Remove telegram token dependency
TELEGRAM_BOT_TOKEN: 'disabled'
TELEGRAM_CHAT_ID: 'disabled'
SKIP_TELEGRAM_NOTIFICATIONS: 'true'
run: |
cat reports/summary.md >> $GITHUB_STEP_SUMMARY
# Explicitly disable Telegram notifications that might be inherited from elsewhere
- name: Disable Telegram Notifications
run: |
echo "TELEGRAM_BOT_TOKEN=disabled" >> $GITHUB_ENV
echo "TELEGRAM_CHAT_ID=disabled" >> $GITHUB_ENV
echo "SKIP_TELEGRAM_NOTIFICATIONS=true" >> $GITHUB_ENV