use miracle_api::{
dmt::DailyParticipantData,
prelude::*,
utils::{claim, hex},
};
use solana_program::pubkey::Pubkey;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🔍 Miracle API Utils Example: Building Claim Instructions");
println!("========================================================");
println!("\n📊 Scenario 1: Converting Database Hex Strings");
println!("------------------------------------------------");
let db_customer_reward_pool = "0x1234567890abcdef";
let db_merchant_reward_pool = "0xfedcba0987654321";
let db_total_customer_activity = "0x0000000000000064"; let db_total_merchant_activity = "0x00000000000000c8";
println!("Database hex strings:");
println!(" customer_reward_pool: {}", db_customer_reward_pool);
println!(" merchant_reward_pool: {}", db_merchant_reward_pool);
println!(" total_customer_activity: {}", db_total_customer_activity);
println!(" total_merchant_activity: {}", db_total_merchant_activity);
let epoch_data = claim::epoch_claim_data_from_hex(
db_customer_reward_pool,
db_merchant_reward_pool,
db_total_customer_activity,
db_total_merchant_activity,
)?;
println!("\n✅ Converted to EpochClaimData:");
println!(
" customer_reward_pool bytes: {:?}",
epoch_data.customer_reward_pool
);
println!(
" merchant_reward_pool bytes: {:?}",
epoch_data.merchant_reward_pool
);
println!(
" total_customer_activity bytes: {:?}",
epoch_data.total_customer_activity
);
println!(
" total_merchant_activity bytes: {:?}",
epoch_data.total_merchant_activity
);
println!("\n📊 Scenario 2: Converting Native u64 Values");
println!("---------------------------------------------");
let native_customer_reward_pool = 1234567890u64;
let native_merchant_reward_pool = 9876543210u64;
let native_total_customer_activity = 100u64;
let native_total_merchant_activity = 200u64;
println!("Native u64 values:");
println!(" customer_reward_pool: {}", native_customer_reward_pool);
println!(" merchant_reward_pool: {}", native_merchant_reward_pool);
println!(
" total_customer_activity: {}",
native_total_customer_activity
);
println!(
" total_merchant_activity: {}",
native_total_merchant_activity
);
let epoch_data_u64 = claim::epoch_claim_data_from_u64(
native_customer_reward_pool,
native_merchant_reward_pool,
native_total_customer_activity,
native_total_merchant_activity,
);
println!("\n✅ Converted to EpochClaimData:");
println!(
" customer_reward_pool bytes: {:?}",
epoch_data_u64.customer_reward_pool
);
println!(
" merchant_reward_pool bytes: {:?}",
epoch_data_u64.merchant_reward_pool
);
println!(
" total_customer_activity bytes: {:?}",
epoch_data_u64.total_customer_activity
);
println!(
" total_merchant_activity bytes: {:?}",
epoch_data_u64.total_merchant_activity
);
println!("\n📊 Scenario 3: Individual Hex Conversions");
println!("-------------------------------------------");
let reward_pool_bytes = hex::hex_string_to_u64_bytes("0x1234567890abcdef")?;
let hash_bytes = hex::hex_string_to_hash_bytes(
"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
)?;
println!("Individual conversions:");
println!(" reward_pool (8 bytes): {:?}", reward_pool_bytes);
println!(" hash (32 bytes): {:?}", hash_bytes);
let reward_pool_hex = hex::bytes_to_hex_string(&reward_pool_bytes);
println!(" reward_pool back to hex: {}", reward_pool_hex);
println!("\n📊 Scenario 4: Building Claim Instruction");
println!("------------------------------------------");
let participant_data = DailyParticipantData::new(
[1u8; 32], 1723680000, 1723766400, [1u8; 8], [2u8; 8], 5, 0, );
let payment_proof = vec![[3u8; 32]];
let payment_indices = vec![true];
let seal_proof = vec![[4u8; 32]];
let seal_indices = vec![false];
let payment_root = [5u8; 32];
let claim_instruction = claim(
Pubkey::new_from_array([6u8; 32]), Pubkey::new_from_array([7u8; 32]), 0, participant_data,
payment_proof,
payment_indices,
seal_proof,
seal_indices,
payment_root,
epoch_data, 0, None, );
println!("✅ Claim instruction built successfully!");
println!(
" Instruction data length: {} bytes",
claim_instruction.data.len()
);
println!(" Number of accounts: {}", claim_instruction.accounts.len());
println!("\n🎯 Summary");
println!("===========");
println!("✅ Successfully converted database hex strings to EpochClaimData");
println!("✅ Successfully converted native u64 values to EpochClaimData");
println!("✅ Successfully built claim instruction with converted data");
println!("✅ All data type conversions working correctly");
println!("\n🚀 The utils module successfully bridges the gap between:");
println!(" - Database hex string output (from SQL functions)");
println!(" - On-chain byte array requirements (for EpochClaimData)");
println!(" - Claim instruction construction");
Ok(())
}