101 lines
3.8 KiB
TypeScript
101 lines
3.8 KiB
TypeScript
|
|
import { ethers } from 'hardhat';
|
||
|
|
import * as fs from 'fs';
|
||
|
|
import * as path from 'path';
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
console.log('Starting deployment to Besu network...\n');
|
||
|
|
|
||
|
|
const [deployer] = await ethers.getSigners();
|
||
|
|
console.log('Deploying contracts with account:', deployer.address);
|
||
|
|
|
||
|
|
const balance = await ethers.provider.getBalance(deployer.address);
|
||
|
|
console.log('Account balance:', ethers.formatEther(balance), 'ETH\n');
|
||
|
|
|
||
|
|
// Deploy LicenseNFT
|
||
|
|
console.log('Deploying LicenseNFT...');
|
||
|
|
const LicenseNFT = await ethers.getContractFactory('LicenseNFT');
|
||
|
|
const licenseNFT = await LicenseNFT.deploy();
|
||
|
|
await licenseNFT.waitForDeployment();
|
||
|
|
const licenseNFTAddress = await licenseNFT.getAddress();
|
||
|
|
console.log('LicenseNFT deployed to:', licenseNFTAddress);
|
||
|
|
|
||
|
|
// Deploy ApprovalManager
|
||
|
|
console.log('\nDeploying ApprovalManager...');
|
||
|
|
const ApprovalManager = await ethers.getContractFactory('ApprovalManager');
|
||
|
|
const approvalManager = await ApprovalManager.deploy();
|
||
|
|
await approvalManager.waitForDeployment();
|
||
|
|
const approvalManagerAddress = await approvalManager.getAddress();
|
||
|
|
console.log('ApprovalManager deployed to:', approvalManagerAddress);
|
||
|
|
|
||
|
|
// Deploy DocumentChain
|
||
|
|
console.log('\nDeploying DocumentChain...');
|
||
|
|
const DocumentChain = await ethers.getContractFactory('DocumentChain');
|
||
|
|
const documentChain = await DocumentChain.deploy();
|
||
|
|
await documentChain.waitForDeployment();
|
||
|
|
const documentChainAddress = await documentChain.getAddress();
|
||
|
|
console.log('DocumentChain deployed to:', documentChainAddress);
|
||
|
|
|
||
|
|
// Deploy WorkflowRegistry
|
||
|
|
console.log('\nDeploying WorkflowRegistry...');
|
||
|
|
const WorkflowRegistry = await ethers.getContractFactory('WorkflowRegistry');
|
||
|
|
const workflowRegistry = await WorkflowRegistry.deploy();
|
||
|
|
await workflowRegistry.waitForDeployment();
|
||
|
|
const workflowRegistryAddress = await workflowRegistry.getAddress();
|
||
|
|
console.log('WorkflowRegistry deployed to:', workflowRegistryAddress);
|
||
|
|
|
||
|
|
// Summary
|
||
|
|
console.log('\n========================================');
|
||
|
|
console.log('Deployment Complete!');
|
||
|
|
console.log('========================================');
|
||
|
|
console.log('Contract Addresses:');
|
||
|
|
console.log(' LicenseNFT:', licenseNFTAddress);
|
||
|
|
console.log(' ApprovalManager:', approvalManagerAddress);
|
||
|
|
console.log(' DocumentChain:', documentChainAddress);
|
||
|
|
console.log(' WorkflowRegistry:', workflowRegistryAddress);
|
||
|
|
console.log('========================================\n');
|
||
|
|
|
||
|
|
// Save deployment info
|
||
|
|
const deploymentInfo = {
|
||
|
|
network: 'besu',
|
||
|
|
chainId: 1337,
|
||
|
|
deployer: deployer.address,
|
||
|
|
timestamp: new Date().toISOString(),
|
||
|
|
contracts: {
|
||
|
|
LicenseNFT: licenseNFTAddress,
|
||
|
|
ApprovalManager: approvalManagerAddress,
|
||
|
|
DocumentChain: documentChainAddress,
|
||
|
|
WorkflowRegistry: workflowRegistryAddress,
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
const deploymentPath = path.join(__dirname, '../deployments');
|
||
|
|
if (!fs.existsSync(deploymentPath)) {
|
||
|
|
fs.mkdirSync(deploymentPath, { recursive: true });
|
||
|
|
}
|
||
|
|
|
||
|
|
fs.writeFileSync(
|
||
|
|
path.join(deploymentPath, 'deployment.json'),
|
||
|
|
JSON.stringify(deploymentInfo, null, 2)
|
||
|
|
);
|
||
|
|
console.log('Deployment info saved to deployments/deployment.json');
|
||
|
|
|
||
|
|
// Generate .env updates
|
||
|
|
console.log('\n========================================');
|
||
|
|
console.log('Add these to your backend/.env file:');
|
||
|
|
console.log('========================================');
|
||
|
|
console.log(`CONTRACT_ADDRESS_LICENSE_NFT=${licenseNFTAddress}`);
|
||
|
|
console.log(`CONTRACT_ADDRESS_APPROVAL_MANAGER=${approvalManagerAddress}`);
|
||
|
|
console.log(`CONTRACT_ADDRESS_DOCUMENT_CHAIN=${documentChainAddress}`);
|
||
|
|
console.log(`CONTRACT_ADDRESS_WORKFLOW_REGISTRY=${workflowRegistryAddress}`);
|
||
|
|
console.log('========================================\n');
|
||
|
|
|
||
|
|
return deploymentInfo;
|
||
|
|
}
|
||
|
|
|
||
|
|
main()
|
||
|
|
.then(() => process.exit(0))
|
||
|
|
.catch((error) => {
|
||
|
|
console.error(error);
|
||
|
|
process.exit(1);
|
||
|
|
});
|