const { Connection, PublicKey, Keypair } = require('@solana/web3.js'); const { Program, AnchorProvider, web3, utils } = require('@coral-xyz/anchor'); const fs = require('fs'); // Load configuration const config = JSON.parse(fs.readFileSync('./devnet-config.json', 'utf8')); const idl = JSON.parse(fs.readFileSync('./target/idl/lottery_simple.json', 'utf8')); async function initializeProgram() { console.log('🚀 Initializing PoWH Program...'); console.log('==============================='); // Set up connection and provider const connection = new Connection(config.rpcUrl, 'confirmed'); // Load wallet const walletKeypair = Keypair.fromSecretKey( Uint8Array.from(JSON.parse(fs.readFileSync(process.env.HOME + '/.config/solana/id.json', 'utf8'))) ); const wallet = { publicKey: walletKeypair.publicKey, signTransaction: async (tx) => { tx.sign(walletKeypair); return tx; }, signAllTransactions: async (txs) => { return txs.map(tx => { tx.sign(walletKeypair); return tx; }); } }; const provider = new AnchorProvider(connection, wallet, { commitment: 'confirmed' }); const program = new Program(idl, new PublicKey(config.programId), provider); console.log('📋 Program ID:', config.programId); console.log('💰 Authority:', walletKeypair.publicKey.toString()); console.log('🪙 Mint:', config.mintAddress); console.log('🌐 Cluster:', config.cluster); try { // Derive PDAs const [statePda] = PublicKey.findProgramAddressSync( [Buffer.from("state")], program.programId ); const [vaultPda] = PublicKey.findProgramAddressSync( [Buffer.from("vault")], program.programId ); console.log('🏛️ State PDA:', statePda.toString()); console.log('🏦 Vault PDA:', vaultPda.toString()); // Initialize the program console.log('⏳ Sending initialize transaction...'); const tx = await program.methods .initialize() .accounts({ state: statePda, vault: vaultPda, mint: new PublicKey(config.mintAddress), authority: walletKeypair.publicKey, systemProgram: web3.SystemProgram.programId, tokenProgram: utils.token.TOKEN_PROGRAM_ID, }) .rpc(); console.log('✅ Program initialized successfully!'); console.log('📝 Transaction:', tx); // Update config with PDAs const updatedConfig = { ...config, statePda: statePda.toString(), vaultPda: vaultPda.toString(), initialized: true, initTx: tx }; fs.writeFileSync('./devnet-config.json', JSON.stringify(updatedConfig, null, 2)); console.log('💾 Configuration updated with PDA addresses'); } catch (error) { console.error('❌ Initialization failed:', error); process.exit(1); } } // Run the initialization initializeProgram().catch(console.error);