Files
aitbc/contracts/scripts/monitor-contracts.js
aitbc d826318aab
Some checks failed
Contract Performance Benchmarks / benchmark-gas-usage (push) Has been cancelled
Contract Performance Benchmarks / benchmark-execution-time (push) Has been cancelled
Contract Performance Benchmarks / benchmark-throughput (push) Has been cancelled
Contract Performance Benchmarks / compare-benchmarks (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-sync (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-transactions (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-bridge (push) Has been cancelled
Cross-Chain Functionality Tests / test-multi-chain-consensus (push) Has been cancelled
Cross-Chain Functionality Tests / aggregate-results (push) Has been cancelled
Deploy to Testnet / deploy-testnet (push) Has been cancelled
Deploy to Testnet / notify-deployment (push) Has been cancelled
refactor: simplify deployment automation and convert to ES modules
- Remove deployment of RewardDistributor, PerformanceAggregator, StakingPoolFactory, and DAOGovernanceEnhanced contracts
- Reorder initialization to register contracts before initializing TreasuryManager
- Add error handling for duplicate contract registration
- Convert require() to ES module imports in deploy-automation.js, monitor-contracts.js, and verify-deployment.js
- Move fs import to top of deploy-automation.js
2026-04-29 10:51:42 +02:00

174 lines
6.3 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Contract monitoring script for AITBC smart contracts
* Monitors contract health, balances, and key metrics
*/
import hardhat from "hardhat";
const { ethers } = hardhat;
import fs from "fs";
async function main() {
console.log("=== AITBC Smart Contract Monitoring ===");
const network = await ethers.provider.getNetwork();
console.log("Network:", network.name);
console.log("Chain ID:", network.chainId.toString());
console.log("Block:", await ethers.provider.getBlockNumber());
// Load deployment addresses
const deploymentFile = process.env.DEPLOYMENT_FILE || `deployments-${network.name}.json`;
if (!fs.existsSync(deploymentFile)) {
console.error(`Deployment file not found: ${deploymentFile}`);
console.log("Usage: DEPLOYMENT_FILE=deployments-localhost.json npx hardhat run scripts/monitor-contracts.js");
process.exit(1);
}
const deployments = JSON.parse(fs.readFileSync(deploymentFile, "utf8"));
console.log("\nLoaded deployments from:", deploymentFile);
const healthReport = {};
try {
// Monitor AIToken
if (deployments.AIToken) {
console.log("\n--- AIToken Monitoring ---");
const AIToken = await ethers.getContractFactory("AIToken");
const aiToken = AIToken.attach(deployments.AIToken);
const totalSupply = await aiToken.totalSupply();
const treasuryBalance = deployments.TreasuryManager
? await aiToken.balanceOf(deployments.TreasuryManager)
: 0;
console.log(`Total Supply: ${ethers.formatEther(totalSupply)}`);
console.log(`Treasury Balance: ${ethers.formatEther(treasuryBalance)}`);
healthReport.AIToken = {
totalSupply: ethers.formatEther(totalSupply),
treasuryBalance: ethers.formatEther(treasuryBalance),
healthy: treasuryBalance > 0
};
}
// Monitor TreasuryManager
if (deployments.TreasuryManager) {
console.log("\n--- TreasuryManager Monitoring ---");
const TreasuryManager = await ethers.getContractFactory("TreasuryManager");
const treasuryManager = TreasuryManager.attach(deployments.TreasuryManager);
const treasuryBalance = deployments.AIToken
? await treasuryManager.getTreasuryBalance()
: 0;
const totalAllocated = await treasuryManager.getTotalAllocated();
const totalSpent = await treasuryManager.getTotalSpent();
console.log(`Treasury Balance: ${ethers.formatEther(treasuryBalance)}`);
console.log(`Total Allocated: ${ethers.formatEther(totalAllocated)}`);
console.log(`Total Spent: ${ethers.formatEther(totalSpent)}`);
healthReport.TreasuryManager = {
balance: ethers.formatEther(treasuryBalance),
totalAllocated: ethers.formatEther(totalAllocated),
totalSpent: ethers.formatEther(totalSpent),
healthy: treasuryBalance > 0
};
}
// Monitor AgentMarketplaceV2
if (deployments.AgentMarketplaceV2) {
console.log("\n--- AgentMarketplaceV2 Monitoring ---");
const AgentMarketplaceV2 = await ethers.getContractFactory("AgentMarketplaceV2");
const marketplace = AgentMarketplaceV2.attach(deployments.AgentMarketplaceV2);
const stats = await marketplace.getMarketplaceStats();
const activeListings = await marketplace.getActiveListings();
console.log(`Total Listings: ${stats.totalListings}`);
console.log(`Active Listings: ${stats.activeListings}`);
console.log(`Completed Transactions: ${stats.completedTransactions}`);
console.log(`Total Volume: ${ethers.formatEther(stats.totalVolume)}`);
healthReport.AgentMarketplaceV2 = {
totalListings: stats.totalListings.toString(),
activeListings: stats.activeListings.toString(),
completedTransactions: stats.completedTransactions.toString(),
totalVolume: ethers.formatEther(stats.totalVolume),
healthy: stats.activeListings >= 0
};
}
// Monitor ContractRegistry
if (deployments.ContractRegistry) {
console.log("\n--- ContractRegistry Monitoring ---");
const ContractRegistry = await ethers.getContractFactory("ContractRegistry");
const registry = ContractRegistry.attach(deployments.ContractRegistry);
const totalContracts = await registry.totalContracts();
const contractIds = await registry.getAllContractIds();
console.log(`Total Registered Contracts: ${totalContracts}`);
console.log(`Registered Contracts: ${contractIds.length}`);
healthReport.ContractRegistry = {
totalContracts: totalContracts.toString(),
registeredCount: contractIds.length,
healthy: totalContracts > 0
};
}
// Monitor DAOGovernanceEnhanced
if (deployments.DAOGovernanceEnhanced) {
console.log("\n--- DAOGovernanceEnhanced Monitoring ---");
const DAOGovernanceEnhanced = await ethers.getContractFactory("DAOGovernanceEnhanced");
const dao = DAOGovernanceEnhanced.attach(deployments.DAOGovernanceEnhanced);
const minStake = await dao.minStake();
const activeProposals = await dao.activeProposals();
console.log(`Minimum Stake: ${ethers.formatEther(minStake)}`);
console.log(`Active Proposals: ${activeProposals}`);
healthReport.DAOGovernanceEnhanced = {
minStake: ethers.formatEther(minStake),
activeProposals: activeProposals.toString(),
healthy: minStake > 0
};
}
// Generate health summary
console.log("\n=== Health Summary ===");
let allHealthy = true;
for (const [name, data] of Object.entries(healthReport)) {
const status = data.healthy ? "✅ Healthy" : "❌ Unhealthy";
console.log(`${status} ${name}`);
if (!data.healthy) allHealthy = false;
}
// Save health report
const healthFile = `health-report-${network.name}-${Date.now()}.json`;
fs.writeFileSync(healthFile, JSON.stringify(healthReport, null, 2));
console.log(`\nHealth report saved to: ${healthFile}`);
if (allHealthy) {
console.log("\n✅ All contracts are healthy!");
process.exit(0);
} else {
console.log("\n⚠ Some contracts need attention!");
process.exit(1);
}
} catch (error) {
console.error("\n❌ Monitoring failed:", error);
process.exit(1);
}
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});