refactor(contracts): remove deprecated AIPowerRental contract in favor of bounty system
- Delete AIPowerRental.sol (566 lines) - replaced by AgentBounty.sol - Remove rental agreement system with provider/consumer model - Remove performance metrics and SLA tracking - Remove dispute resolution mechanism - Remove ZK-proof verification for performance - Remove provider/consumer authorization system - Bounty system provides superior developer incentive structure
This commit is contained in:
216
contracts/scripts/verify-memory-contracts.js
Normal file
216
contracts/scripts/verify-memory-contracts.js
Normal file
@@ -0,0 +1,216 @@
|
||||
const { ethers } = require("hardhat");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
async function main() {
|
||||
console.log("🔍 Verifying Decentralized Memory & Storage Contracts");
|
||||
console.log("==============================================");
|
||||
|
||||
const networkName = hre.network.name;
|
||||
const deploymentFile = `deployed-contracts-${networkName}.json`;
|
||||
|
||||
// Check if deployment file exists
|
||||
if (!fs.existsSync(deploymentFile)) {
|
||||
console.error(`❌ Deployment file not found: ${deploymentFile}`);
|
||||
console.log("Please run the deployment script first.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Load deployment information
|
||||
const deployedContracts = JSON.parse(fs.readFileSync(deploymentFile, 'utf8'));
|
||||
|
||||
console.log(`Network: ${networkName}`);
|
||||
console.log(`Deployer: ${deployedContracts.deployer}`);
|
||||
console.log(`Timestamp: ${deployedContracts.timestamp}`);
|
||||
console.log("");
|
||||
|
||||
// Check if Etherscan API key is configured
|
||||
const etherscanApiKey = process.env.ETHERSCAN_API_KEY;
|
||||
if (!etherscanApiKey) {
|
||||
console.warn("⚠️ ETHERSCAN_API_KEY not configured");
|
||||
console.log("Set ETHERSCAN_API_KEY in your .env file for automatic verification");
|
||||
console.log("Skipping verification...");
|
||||
return;
|
||||
}
|
||||
|
||||
const contracts = [
|
||||
{
|
||||
name: "AgentMemory",
|
||||
address: deployedContracts.contracts.AgentMemory?.address,
|
||||
constructorArgs: []
|
||||
},
|
||||
{
|
||||
name: "MemoryVerifier",
|
||||
address: deployedContracts.contracts.MemoryVerifier?.address,
|
||||
constructorArgs: [
|
||||
deployedContracts.contracts.ZKReceiptVerifier?.address
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "KnowledgeGraphMarket",
|
||||
address: deployedContracts.contracts.KnowledgeGraphMarket?.address,
|
||||
constructorArgs: [
|
||||
deployedContracts.contracts.AITBCPaymentProcessor?.address,
|
||||
deployedContracts.contracts.AITBCToken?.address
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "AITBCToken",
|
||||
address: deployedContracts.contracts.AITBCToken?.address,
|
||||
constructorArgs: [
|
||||
"AITBC Token",
|
||||
"AITBC",
|
||||
"1000000000000000000000000"
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "AITBCPaymentProcessor",
|
||||
address: deployedContracts.contracts.AITBCPaymentProcessor?.address,
|
||||
constructorArgs: [
|
||||
deployedContracts.contracts.AITBCToken?.address
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
console.log(`Found ${contracts.length} contracts to verify`);
|
||||
console.log("");
|
||||
|
||||
let verificationResults = {
|
||||
verified: [],
|
||||
failed: [],
|
||||
skipped: []
|
||||
};
|
||||
|
||||
for (const contract of contracts) {
|
||||
if (!contract.address) {
|
||||
console.log(`⏭️ Skipping ${contract.name} - no address found`);
|
||||
verificationResults.skipped.push({
|
||||
name: contract.name,
|
||||
reason: "No address found"
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`🔍 Verifying ${contract.name} at ${contract.address}...`);
|
||||
|
||||
try {
|
||||
// Wait for a few seconds to ensure the contract is properly deployed
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
|
||||
// Verify the contract
|
||||
await hre.run("verify:verify", {
|
||||
address: contract.address,
|
||||
constructorArgs: contract.constructorArgs
|
||||
});
|
||||
|
||||
console.log(`✅ ${contract.name} verified successfully`);
|
||||
verificationResults.verified.push({
|
||||
name: contract.name,
|
||||
address: contract.address,
|
||||
etherscanUrl: `https://${networkName === "mainnet" ? "" : networkName + "."}etherscan.io/address/${contract.address}`
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error(`❌ Failed to verify ${contract.name}:`, error.message);
|
||||
|
||||
// Check if it's already verified
|
||||
if (error.message.includes("Already Verified") || error.message.includes("already verified")) {
|
||||
console.log(`✅ ${contract.name} is already verified`);
|
||||
verificationResults.verified.push({
|
||||
name: contract.name,
|
||||
address: contract.address,
|
||||
etherscanUrl: `https://${networkName === "mainnet" ? "" : networkName + "."}etherscan.io/address/${contract.address}`,
|
||||
alreadyVerified: true
|
||||
});
|
||||
} else {
|
||||
verificationResults.failed.push({
|
||||
name: contract.name,
|
||||
address: contract.address,
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Add delay between verifications to avoid rate limiting
|
||||
await new Promise(resolve => setTimeout(resolve, 3000));
|
||||
}
|
||||
|
||||
console.log("");
|
||||
console.log("🎉 VERIFICATION SUMMARY");
|
||||
console.log("======================");
|
||||
console.log(`✅ Verified: ${verificationResults.verified.length}`);
|
||||
console.log(`❌ Failed: ${verificationResults.failed.length}`);
|
||||
console.log(`⏭️ Skipped: ${verificationResults.skipped.length}`);
|
||||
console.log("");
|
||||
|
||||
// Show verification results
|
||||
if (verificationResults.verified.length > 0) {
|
||||
console.log("✅ Successfully Verified Contracts:");
|
||||
verificationResults.verified.forEach(contract => {
|
||||
const status = contract.alreadyVerified ? "(Already Verified)" : "";
|
||||
console.log(` ${contract.name}: ${contract.etherscanUrl} ${status}`);
|
||||
});
|
||||
}
|
||||
|
||||
if (verificationResults.failed.length > 0) {
|
||||
console.log("");
|
||||
console.log("❌ Failed Verifications:");
|
||||
verificationResults.failed.forEach(contract => {
|
||||
console.log(` ${contract.name}: ${contract.error}`);
|
||||
});
|
||||
console.log("");
|
||||
console.log("💡 Tips for failed verifications:");
|
||||
console.log(" 1. Wait a few minutes and try again");
|
||||
console.log(" 2. Check if the contract address is correct");
|
||||
console.log(" 3. Verify constructor arguments match exactly");
|
||||
console.log(" 4. Check Etherscan API rate limits");
|
||||
}
|
||||
|
||||
if (verificationResults.skipped.length > 0) {
|
||||
console.log("");
|
||||
console.log("⏭️ Skipped Contracts:");
|
||||
verificationResults.skipped.forEach(contract => {
|
||||
console.log(` ${contract.name}: ${contract.reason}`);
|
||||
});
|
||||
}
|
||||
|
||||
// Save verification results
|
||||
const verificationReport = {
|
||||
timestamp: new Date().toISOString(),
|
||||
network: networkName,
|
||||
results: verificationResults,
|
||||
summary: {
|
||||
total: contracts.length,
|
||||
verified: verificationResults.verified.length,
|
||||
failed: verificationResults.failed.length,
|
||||
skipped: verificationResults.skipped.length
|
||||
}
|
||||
};
|
||||
|
||||
const reportFile = `memory-contract-verification-${networkName}-${Date.now()}.json`;
|
||||
fs.writeFileSync(
|
||||
path.join(__dirname, "..", reportFile),
|
||||
JSON.stringify(verificationReport, null, 2)
|
||||
);
|
||||
|
||||
console.log(`📄 Verification report saved to: ${reportFile}`);
|
||||
|
||||
// Return appropriate exit code
|
||||
if (verificationResults.failed.length > 0) {
|
||||
console.log("");
|
||||
console.log("⚠️ Some contracts failed verification");
|
||||
console.log("Please check the errors above and try manual verification if needed");
|
||||
process.exit(1);
|
||||
} else {
|
||||
console.log("");
|
||||
console.log("🎉 All contracts verified successfully!");
|
||||
process.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.then(() => process.exit(0))
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user