Files
aitbc/contracts/scripts/deploy-automation.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

113 lines
4.4 KiB
JavaScript

/**
* Automated deployment script for AITBC smart contracts
* Supports deployment to local, testnet, and mainnet environments
*/
import hardhat from "hardhat";
const { ethers } = hardhat;
import fs from "fs";
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);
// 4. 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);
// 5. Register contracts in registry
console.log("\n--- Registering Contracts ---");
await registerContract(contractRegistry, "TreasuryManager", deployments.TreasuryManager);
await registerContract(contractRegistry, "AgentMarketplaceV2", deployments.AgentMarketplaceV2);
console.log("Contracts registered");
// 6. Initialize TreasuryManager
console.log("\n--- Initializing TreasuryManager ---");
await treasuryManager.initialize(deployments.ContractRegistry);
console.log("TreasuryManager initialized");
// 7. 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 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));
try {
await registry.registerContract(contractId, address);
console.log(`Registered ${name}: ${address}`);
} catch (error) {
if (error.message.includes("ContractAlreadyRegistered")) {
console.log(`${name} already registered, skipping`);
} else {
throw error;
}
}
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});