//! DNA生成适配器 //! //! 调用nac-udm模块生成资产DNA和GNACS编码 use crate::error::{OnboardingError, Result}; use crate::types::{AssetSubmission, DNAResult}; use nac_udm::asset_dna::DNAGenerator; use nac_udm::l1_protocol::gnacs::GNACSCode; use chrono::Utc; use tracing::{info, error}; /// DNA生成适配器 pub struct DNAAdapter { generator: DNAGenerator, } impl DNAAdapter { /// 创建新的适配器 pub fn new() -> Result { let generator = DNAGenerator::new(); Ok(Self { generator }) } /// 生成资产DNA pub async fn generate_dna(&self, submission: &AssetSubmission) -> Result { info!("开始生成资产DNA: {}", submission.asset_name); // 生成GNACS编码 let gnacs_code = self.generate_gnacs(submission)?; // 生成DNA let dna = self.generator.generate( &submission.asset_name, &submission.asset_type, &submission.jurisdiction, &gnacs_code.to_string(), ) .map_err(|e| OnboardingError::DNAGenerationError(format!("DNA生成失败: {}", e)))?; // 获取DNA哈希(48字节SHA3-384) let dna_hash = hex::encode(dna.hash()); // 获取资产实例ID let asset_instance_id = dna.instance_id().to_string(); info!("DNA生成完成: hash={}, gnacs={}", dna_hash, gnacs_code.to_string()); Ok(DNAResult { dna_hash, gnacs_code: gnacs_code.to_string(), asset_instance_id, timestamp: Utc::now(), }) } /// 生成GNACS编码 fn generate_gnacs(&self, submission: &AssetSubmission) -> Result { // 调用GNACS编码器 let code = GNACSCode::generate( &submission.asset_type, &submission.jurisdiction, &submission.asset_name, ) .map_err(|e| OnboardingError::DNAGenerationError(format!("GNACS编码失败: {}", e)))?; Ok(code) } } impl Default for DNAAdapter { fn default() -> Self { Self::new().unwrap() } } #[cfg(test)] mod tests { use super::*; #[test] fn test_adapter_creation() { let adapter = DNAAdapter::new(); assert!(adapter.is_ok()); } }