Files
aitbc/contracts/scripts/deploy-automation.js
aitbc 87e524e42c feat: enhance smart contract testing and deployment
- Add comprehensive test files for core contracts (ContractRegistry, TreasuryManager, AgentMarketplaceV2, EscrowService, DynamicPricing)
- Add Foundry fuzz tests for ContractRegistry, TreasuryManager, and AgentMarketplaceV2
- Add deployment automation scripts (deploy-automation.js, verify-deployment.js, monitor-contracts.js)
- Fix Hardhat/toolbox version compatibility in package.json
- Update smart-contract-tests.yml workflow to include deployment job
2026-04-29 10:44:40 +02:00

158 lines
7.1 KiB
JavaScript

/**
* Automated deployment script for AITBC smart contracts
* Supports deployment to local, testnet, and mainnet environments
*/
const { ethers } = require("hardhat");
async function main() {
console.log("=== AITBC Smart Contract Deployment ===");
const [deployer] = await ethers.getSigners();
console.log("Deploying with account:", deployer.address);
console.log("Account balance:", (await ethers.provider.getBalance(deployer.address)).toString());
const network = await ethers.provider.getNetwork();
console.log("Network:", network.name);
console.log("Chain ID:", network.chainId.toString());
// Deploy contracts in dependency order
const deployments = {};
try {
// 1. Deploy AIToken (if not already deployed)
console.log("\n--- Deploying AIToken ---");
const AIToken = await ethers.getContractFactory("AIToken");
const aiToken = await AIToken.deploy(ethers.parseUnits("1000000", 18));
await aiToken.waitForDeployment();
deployments.AIToken = await aiToken.getAddress();
console.log("AIToken deployed to:", deployments.AIToken);
// 2. Deploy ContractRegistry
console.log("\n--- Deploying ContractRegistry ---");
const ContractRegistry = await ethers.getContractFactory("ContractRegistry");
const contractRegistry = await ContractRegistry.deploy();
await contractRegistry.waitForDeployment();
deployments.ContractRegistry = await contractRegistry.getAddress();
console.log("ContractRegistry deployed to:", deployments.ContractRegistry);
// 3. Deploy TreasuryManager
console.log("\n--- Deploying TreasuryManager ---");
const TreasuryManager = await ethers.getContractFactory("TreasuryManager");
const treasuryManager = await TreasuryManager.deploy(deployments.AIToken);
await treasuryManager.waitForDeployment();
deployments.TreasuryManager = await treasuryManager.getAddress();
console.log("TreasuryManager deployed to:", deployments.TreasuryManager);
// Initialize TreasuryManager
await treasuryManager.initialize(deployments.ContractRegistry);
console.log("TreasuryManager initialized");
// 4. Deploy RewardDistributor
console.log("\n--- Deploying RewardDistributor ---");
const RewardDistributor = await ethers.getContractFactory("RewardDistributor");
const rewardDistributor = await RewardDistributor.deploy();
await rewardDistributor.waitForDeployment();
deployments.RewardDistributor = await rewardDistributor.getAddress();
console.log("RewardDistributor deployed to:", deployments.RewardDistributor);
// Initialize RewardDistributor
await rewardDistributor.initialize(deployments.ContractRegistry);
console.log("RewardDistributor initialized");
// 5. Deploy PerformanceAggregator
console.log("\n--- Deploying PerformanceAggregator ---");
const PerformanceAggregator = await ethers.getContractFactory("PerformanceAggregator");
const performanceAggregator = await PerformanceAggregator.deploy();
await performanceAggregator.waitForDeployment();
deployments.PerformanceAggregator = await performanceAggregator.getAddress();
console.log("PerformanceAggregator deployed to:", deployments.PerformanceAggregator);
// Initialize PerformanceAggregator
await performanceAggregator.initialize(deployments.ContractRegistry);
console.log("PerformanceAggregator initialized");
// 6. Deploy StakingPoolFactory
console.log("\n--- Deploying StakingPoolFactory ---");
const StakingPoolFactory = await ethers.getContractFactory("StakingPoolFactory");
const stakingPoolFactory = await StakingPoolFactory.deploy(deployments.AIToken);
await stakingPoolFactory.waitForDeployment();
deployments.StakingPoolFactory = await stakingPoolFactory.getAddress();
console.log("StakingPoolFactory deployed to:", deployments.StakingPoolFactory);
// Initialize StakingPoolFactory
await stakingPoolFactory.initialize(deployments.ContractRegistry);
console.log("StakingPoolFactory initialized");
// 7. Deploy DAOGovernanceEnhanced
console.log("\n--- Deploying DAOGovernanceEnhanced ---");
const DAOGovernanceEnhanced = await ethers.getContractFactory("DAOGovernanceEnhanced");
const daoGovernanceEnhanced = await DAOGovernanceEnhanced.deploy(
deployments.AIToken,
ethers.parseEther("100") // MIN_STAKE
);
await daoGovernanceEnhanced.waitForDeployment();
deployments.DAOGovernanceEnhanced = await daoGovernanceEnhanced.getAddress();
console.log("DAOGovernanceEnhanced deployed to:", deployments.DAOGovernanceEnhanced);
// Initialize DAOGovernanceEnhanced
await daoGovernanceEnhanced.initialize(deployments.ContractRegistry);
console.log("DAOGovernanceEnhanced initialized");
// 8. Deploy AgentMarketplaceV2
console.log("\n--- Deploying AgentMarketplaceV2 ---");
const AgentMarketplaceV2 = await ethers.getContractFactory("AgentMarketplaceV2");
const agentMarketplace = await AgentMarketplaceV2.deploy(deployments.AIToken);
await agentMarketplace.waitForDeployment();
deployments.AgentMarketplaceV2 = await agentMarketplace.getAddress();
console.log("AgentMarketplaceV2 deployed to:", deployments.AgentMarketplaceV2);
// 9. Register all contracts in registry
console.log("\n--- Registering Contracts ---");
await registerContract(contractRegistry, "TreasuryManager", deployments.TreasuryManager);
await registerContract(contractRegistry, "RewardDistributor", deployments.RewardDistributor);
await registerContract(contractRegistry, "PerformanceAggregator", deployments.PerformanceAggregator);
await registerContract(contractRegistry, "StakingPoolFactory", deployments.StakingPoolFactory);
await registerContract(contractRegistry, "DAOGovernanceEnhanced", deployments.DAOGovernanceEnhanced);
await registerContract(contractRegistry, "AgentMarketplaceV2", deployments.AgentMarketplaceV2);
console.log("All contracts registered");
// 10. Transfer tokens to TreasuryManager
console.log("\n--- Funding Treasury ---");
const treasuryFunding = ethers.parseEther("100000");
await aiToken.transfer(deployments.TreasuryManager, treasuryFunding);
console.log("Transferred", ethers.formatEther(treasuryFunding), "AIT to TreasuryManager");
// Save deployment addresses
console.log("\n=== Deployment Summary ===");
console.log(JSON.stringify(deployments, null, 2));
// Write to file
const fs = require("fs");
const deploymentFile = `deployments-${network.name}-${Date.now()}.json`;
fs.writeFileSync(deploymentFile, JSON.stringify(deployments, null, 2));
console.log(`Deployment addresses saved to: ${deploymentFile}`);
console.log("\n✅ Deployment completed successfully!");
return deployments;
} catch (error) {
console.error("\n❌ Deployment failed:", error);
throw error;
}
}
async function registerContract(registry, name, address) {
const contractId = ethers.keccak256(ethers.toUtf8Bytes(name));
await registry.registerContract(contractId, address);
console.log(`Registered ${name}: ${address}`);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});