修复类型系统:将所有Hash从32字节SHA3-256改为48字节SHA3-384

- nac-wallet-core: 修复transaction_hash, constitutional_hash, execution_result_hash, receipt_id
- nac-acc-1410: 修复transfer_id, tx_hash
- 确认partition_id和security_id使用32字节是正确的(ID不是Hash)
- 所有模块编译通过
This commit is contained in:
NAC Development Team 2026-02-19 00:38:26 -05:00
parent c3f2f90206
commit 9c224e2b84
4 changed files with 36 additions and 35 deletions

View File

@ -27,8 +27,8 @@ pub struct CrossPartitionTransferRequest {
/// 分区间转账记录
#[derive(Debug, Clone)]
pub struct CrossPartitionTransferRecord {
/// 转账ID
pub transfer_id: [u8; 32],
/// 转账ID (SHA3-384 Hash)
pub transfer_id: [u8; 48],
/// 发送方账户
pub from: String,
/// 接收方账户
@ -91,7 +91,7 @@ pub struct TransferValidationRule {
#[derive(Debug)]
pub struct CrossPartitionTransferManager {
/// 转账记录
records: HashMap<[u8; 32], CrossPartitionTransferRecord>,
records: HashMap<[u8; 48], CrossPartitionTransferRecord>,
/// 验证规则
validation_rules: HashMap<String, TransferValidationRule>,
/// 转账通知监听器
@ -193,7 +193,7 @@ impl CrossPartitionTransferManager {
pub fn create_transfer_record(
&mut self,
request: &CrossPartitionTransferRequest,
) -> [u8; 32] {
) -> [u8; 48] {
self.transfer_counter += 1;
// 生成转账ID
@ -225,7 +225,7 @@ impl CrossPartitionTransferManager {
/// 更新转账状态
pub fn update_transfer_status(
&mut self,
transfer_id: &[u8; 32],
transfer_id: &[u8; 48],
status: CrossPartitionTransferStatus,
failure_reason: Option<String>,
) -> Result<()> {
@ -257,7 +257,7 @@ impl CrossPartitionTransferManager {
}
/// 获取转账记录
pub fn get_transfer_record(&self, transfer_id: &[u8; 32]) -> Result<CrossPartitionTransferRecord> {
pub fn get_transfer_record(&self, transfer_id: &[u8; 48]) -> Result<CrossPartitionTransferRecord> {
self.records
.get(transfer_id)
.cloned()
@ -292,7 +292,7 @@ impl CrossPartitionTransferManager {
}
/// 取消转账
pub fn cancel_transfer(&mut self, transfer_id: &[u8; 32]) -> Result<()> {
pub fn cancel_transfer(&mut self, transfer_id: &[u8; 48]) -> Result<()> {
let record = self.records
.get_mut(transfer_id)
.ok_or_else(|| Acc1410Error::NotFound(format!("Transfer record not found")))?;
@ -308,14 +308,14 @@ impl CrossPartitionTransferManager {
}
/// 生成转账ID
fn generate_transfer_id(&self, counter: u64) -> [u8; 32] {
use sha2::{Sha256, Digest};
let mut hasher = Sha256::new();
fn generate_transfer_id(&self, counter: u64) -> [u8; 48] {
use sha3::{Sha3_384, Digest};
let mut hasher = Sha3_384::new();
hasher.update(b"cross_partition_transfer");
hasher.update(&counter.to_be_bytes());
hasher.update(&Self::current_timestamp().to_be_bytes());
let hash = hasher.finalize();
let mut id = [0u8; 32];
let mut id = [0u8; 48];
id.copy_from_slice(&hash);
id
}

View File

@ -90,12 +90,12 @@ pub struct EventRecord {
pub timestamp: u64,
/// 区块高度(可选)
pub block_height: Option<u64>,
/// 交易哈希(可选)
pub tx_hash: Option<[u8; 32]>,
/// 交易哈希 (SHA3-384 Hash)(可选)
pub tx_hash: Option<[u8; 48]>,
}
/// 事件监听器trait
pub trait EventListener: Send + Sync {
pub trait EventListener: Send + Sync + std::fmt::Debug {
/// 处理事件
fn on_event(&self, event: &EventRecord);
@ -117,6 +117,7 @@ pub struct EventFilter {
}
/// 事件管理器
#[derive(Debug)]
pub struct EventManager {
/// 事件日志
event_log: Vec<EventRecord>,
@ -164,7 +165,7 @@ impl EventManager {
&mut self,
event: Acc1410Event,
block_height: Option<u64>,
tx_hash: Option<[u8; 32]>,
tx_hash: Option<[u8; 48]>,
) {
self.event_counter += 1;

View File

@ -1,34 +1,34 @@
//! 宪法收据模块
use serde::{Deserialize, Serialize};
use sha3::{Digest, Sha3_256};
use sha3::{Digest, Sha3_384};
/// 宪法收据
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConstitutionalReceipt {
/// 交易哈希
pub transaction_hash: [u8; 32],
/// 宪法哈希
pub constitutional_hash: [u8; 32],
/// 交易哈希 (SHA3-384)
pub transaction_hash: [u8; 48],
/// 宾法哈希 (SHA3-384)
pub constitutional_hash: [u8; 48],
/// 条款掩码
pub clause_mask: u64,
/// 执行结果哈希
pub execution_result_hash: [u8; 32],
/// 执行结果哈希 (SHA3-384)
pub execution_result_hash: [u8; 48],
/// 时间戳
pub timestamp: u64,
/// 有效期窗口
pub validity_window: u64,
/// CEE节点签名列表
pub signatures: Vec<Vec<u8>>,
/// 收据ID
pub receipt_id: [u8; 32],
/// 收据ID (SHA3-384)
pub receipt_id: [u8; 48],
}
impl ConstitutionalReceipt {
/// 创建新的宪法收据
pub fn new(
transaction_hash: [u8; 32],
constitutional_hash: [u8; 32],
transaction_hash: [u8; 48],
constitutional_hash: [u8; 48],
clause_mask: u64,
) -> Self {
let receipt_id = Self::generate_receipt_id(&transaction_hash);
@ -37,7 +37,7 @@ impl ConstitutionalReceipt {
transaction_hash,
constitutional_hash,
clause_mask,
execution_result_hash: [0u8; 32],
execution_result_hash: [0u8; 48],
timestamp: 0,
validity_window: 300,
signatures: Vec::new(),
@ -45,13 +45,13 @@ impl ConstitutionalReceipt {
}
}
fn generate_receipt_id(transaction_hash: &[u8; 32]) -> [u8; 32] {
let mut hasher = Sha3_256::new();
fn generate_receipt_id(transaction_hash: &[u8; 48]) -> [u8; 48] {
let mut hasher = Sha3_384::new();
hasher.update(transaction_hash);
hasher.update(b"NAC_CR");
let result = hasher.finalize();
let mut id = [0u8; 32];
let mut id = [0u8; 48];
id.copy_from_slice(&result);
id
}
@ -87,7 +87,7 @@ pub struct CEERequest {
impl CEERequest {
/// 创建新的CEE请求
pub fn new(transaction_hash: [u8; 32]) -> Self {
pub fn new(transaction_hash: [u8; 48]) -> Self {
Self {
transaction_hash: format!("{:?}", transaction_hash),
transaction_payload: None,

View File

@ -145,14 +145,14 @@ impl TransactionPayload {
}
}
/// 计算交易哈希
pub fn hash(&self) -> [u8; 32] {
/// 计算交易哈希 (SHA3-384)
pub fn hash(&self) -> [u8; 48] {
let serialized = bincode::serialize(self).unwrap_or_default();
let mut hasher = Sha3_256::new();
let mut hasher = Sha3_384::new();
hasher.update(&serialized);
let result = hasher.finalize();
let mut hash = [0u8; 32];
let mut hash = [0u8; 48];
hash.copy_from_slice(&result);
hash
}