qcrypt-rng / docs /next-phase /TESTNET_DEPLOYMENT.md
rocRevyAreGoals15's picture
fixing ui
86deab0
|
Raw History Blame Contribute Delete
9.43 kB

Testnet Deployment Guide (Phase 2 Task 5)

Document: Testnet deployment of QuantumRandomnessOracle contracts
Last Updated: 2026-03-23
Status: Ready for deployment


Overview

This guide covers the deployment of the QuantumRandomnessOracle smart contract to major testnets and the integration with the QCrypt RNG API for end-to-end validation.


Target Testnets

Chain Testnet Chain ID RPC URL Explorer
Ethereum Sepolia 11155111 https://rpc.sepolia.org sepolia.etherscan.io
Polygon Amoy 80002 https://rpc.amoy.polygon.technology amoy.polygonscan.com
BSC BSC Testnet 97 https://data-seed-prebsc-1-s1.binance.org:8545 testnet.bscscan.com
Avalanche Fuji 43113 https://api.avax-test.network/ext/bc/C/rpc testnet.snowtrace.io
Fantom Fantom Testnet 4002 https://rpc.testnet.fantom.network testnet.ftmscan.com

Prerequisites

1. Node.js and Dependencies

cd quantum-oracle/contracts
npm install

2. Environment Variables

Create a .env file in quantum-oracle/contracts/:

# Deployment private key (DO NOT use production keys on testnets)
PRIVATE_KEY=your_testnet_deployer_private_key

# RPC URLs (optional, defaults are configured)
SEPOLIA_RPC_URL=https://rpc.sepolia.org
POLYGON_AMOY_RPC_URL=https://rpc.amoy.polygon.technology
BSC_TESTNET_RPC_URL=https://data-seed-prebsc-1-s1.binance.org:8545
AVALANCHE_FUJI_RPC_URL=https://api.avax-test.network/ext/bc/C/rpc
FANTOM_TESTNET_RPC_URL=https://rpc.testnet.fantom.network

# Block explorer API keys (for verification)
ETHERSCAN_API_KEY=your_etherscan_api_key
POLYGONSCAN_API_KEY=your_polygonscan_api_key
BSCSCAN_API_KEY=your_bscscan_api_key
SNOWTRACE_API_KEY=your_snowtrace_api_key
FTMSCAN_API_KEY=your_ftmscan_api_key

3. Fund Deployer Account

Obtain testnet tokens for each network:

Recommended funding: 0.1-0.5 native tokens per network for deployment and testing.


Deployment Steps

Option 1: Deploy to All Testnets (Recommended)

cd quantum-oracle/contracts
npx hardhat run scripts/deploy-all-testnets.js --network sepolia

This script:

  1. Deploys to all 5 testnets sequentially
  2. Waits for 5 confirmations per deployment
  3. Verifies contracts on block explorers (if API keys provided)
  4. Saves deployment info to deployments/ folder

Option 2: Deploy to Single Network

# Deploy to Sepolia
npx hardhat run scripts/deploy.js --network sepolia

# Deploy to Polygon Amoy
npx hardhat run scripts/deploy.js --network polygonAmoy

# Deploy to BSC Testnet
npx hardhat run scripts/deploy.js --network bscTestnet

Option 3: Deploy to Specific Networks

# Deploy to selected networks only
npx hardhat run scripts/deploy-all-testnets.js --network sepolia sepolia polygonAmoy bscTestnet

Contract Addresses

After deployment, update this table:

Chain Contract Address Deployment TX Verified
Sepolia QuantumRandomnessOracle TBD TBD ☐
Polygon Amoy QuantumRandomnessOracle TBD TBD ☐
BSC Testnet QuantumRandomnessOracle TBD TBD ☐
Avalanche Fuji QuantumRandomnessOracle TBD TBD ☐
Fantom Testnet QuantumRandomnessOracle TBD TBD ☐

Deployment artifacts are saved to quantum-oracle/contracts/deployments/:

  • deployment-{network}.json - Individual network deployment
  • deployment-summary.json - Combined summary
  • DEPLOYMENT_REPORT.md - Human-readable report

API Configuration

Update Environment Variables

Add deployed contract addresses to your .env file in the main project root:

# Oracle contract addresses (testnets)
ORACLE_CONTRACT_SEPOLIA=0x...
ORACLE_CONTRACT_POLYGON_AMOY=0x...
ORACLE_CONTRACT_BSC_TESTNET=0x...
ORACLE_CONTRACT_AVALANCHE_FUJI=0x...
ORACLE_CONTRACT_FANTOM_TESTNET=0x...

# Testnet RPC URLs (for API backend)
TESTNET_RPC_SEPOLIA=https://rpc.sepolia.org
TESTNET_RPC_POLYGON_AMOY=https://rpc.amoy.polygon.technology
TESTNET_RPC_BSC_TESTNET=https://data-seed-prebsc-1-s1.binance.org:8545
TESTNET_RPC_AVALANCHE_FUJI=https://api.avax-test.network/ext/bc/C/rpc
TESTNET_RPC_FANTOM_TESTNET=https://rpc.testnet.fantom.network

# Chain IDs
TESTNET_CHAIN_ID_SEPOLIA=11155111
TESTNET_CHAIN_ID_POLYGON_AMOY=80002
TESTNET_CHAIN_ID_BSC_TESTNET=97
TESTNET_CHAIN_ID_AVALANCHE_FUJI=43113
TESTNET_CHAIN_ID_FANTOM_TESTNET=4002

Update app/config.py

Add testnet configuration to the settings:

# Testnet Oracle Configuration
testnet_oracle_contracts = {
    "sepolia": os.getenv("ORACLE_CONTRACT_SEPOLIA", ""),
    "polygon_amoy": os.getenv("ORACLE_CONTRACT_POLYGON_AMOY", ""),
    "bsc_testnet": os.getenv("ORACLE_CONTRACT_BSC_TESTNET", ""),
    "avalanche_fuji": os.getenv("ORACLE_CONTRACT_AVALANCHE_FUJI", ""),
    "fantom_testnet": os.getenv("ORACLE_CONTRACT_FANTOM_TESTNET", ""),
}

End-to-End Validation

1. Configure Chain in API

Use the /oracle/fulfillment/configure-chain endpoint:

# Configure Sepolia
curl -X POST "http://localhost:8000/api/v2/oracle/fulfillment/configure-chain" \
  -d "chain=ethereum" \
  -d "rpc_url=https://rpc.sepolia.org" \
  -d "private_key=YOUR_TEST_KEY" \
  -d "explorer_url=https://sepolia.etherscan.io" \
  -d "chain_id=11155111" \
  -d "currency_symbol=SepoliaETH"

2. Create Oracle Request

curl -X POST "http://localhost:8000/api/v2/oracle/fulfillment/request" \
  -d "chain=ethereum" \
  -d "contract_address=0xYOUR_CONTRACT_ADDRESS" \
  -d "num_bytes=32" \
  -d "num_qubits=16" \
  -d "async_fulfillment=true"

3. Check Request Status

curl "http://localhost:8000/api/v2/oracle/fulfillment/status/{request_id}"

4. Verify On-Chain

Check the transaction on the block explorer:

  • Commitment submission transaction
  • Reveal transaction (after 2-block delay)
  • Randomness value matches API response

Validation Checklist

  • Contract deployed and verified on block explorer
  • API can connect to testnet RPC
  • Commitment transaction submitted successfully
  • Reveal transaction submitted after delay
  • Randomness delivered to requester contract
  • On-chain randomness matches API-generated value
  • Gas costs within expected range (< 0.01 ETH per fulfillment)

Gas Requirements

Estimated gas costs for oracle operations:

Operation Gas Limit Sepolia (gwei) Cost (ETH)
Commit ~50,000 20 0.001
Reveal ~100,000 20 0.002
Total ~150,000 20 ~0.003

Note: Actual gas costs vary by network congestion and contract complexity.


Troubleshooting

Deployment Fails

Error: "insufficient funds for gas * price + value"

  • Solution: Fund deployer account with more testnet tokens

Error: "nonce too low"

  • Solution: Wait for pending transactions to confirm or increase gas price

Error: "contract creation code storage out of gas"

  • Solution: Increase gas limit in deployment script

API Cannot Connect

Error: "Could not detect network"

  • Solution: Verify RPC URL is correct and accessible

Error: "invalid sender"

  • Solution: Ensure private key matches the account funding transactions

Fulfillment Fails

Error: "Commitment not yet submitted"

  • Solution: Check that commit transaction was confirmed before reveal

Error: "Commit-reveal delay not elapsed"

  • Solution: Wait 2 blocks between commit and reveal

Error: "Commitment mismatch"

  • Solution: Verify randomness value matches the commitment hash

Security Notes

⚠️ Testnet Only: These deployments are for testing and development. Do not use testnet contracts or keys in production.

⚠️ Private Key Security: Never commit private keys to version control. Use environment variables or secure key management.

⚠️ Gas Limits: Set appropriate gas limits to prevent front-running and MEV attacks in production.


Next Steps

After successful testnet deployment and validation:

  1. Mainnet Deployment: Deploy to production networks (Ethereum, Polygon, BSC, etc.)
  2. Security Audit: Complete security review per docs/next-phase/SECURITY_AUDIT_CHECKLIST.md
  3. Monitoring: Set up alerts for oracle fulfillment failures
  4. Documentation: Update user-facing docs with contract addresses

References


Last updated: 2026-03-23