跳到主要内容

核心类型与密码学

savitri-core 提供了基础类型、密码学原语以及在所有 Savitri Network crate 中使用的工具。

核心类型

交易(Transaction)

pub struct Transaction {
pub from: String, // 发送方地址(64 个十六进制字符)
pub to: String, // 接收方地址(64 个十六进制字符)
pub amount: u64, // 转账金额
}

账户(Account)

pub struct Account {
pub balance: u128, // 余额,以最小单位表示(18 位小数)
pub nonce: u64, // 交易计数器
}

编码方式:固定 24 字节格式(16 字节余额小端序 + 8 字节 nonce 小端序)。向后兼容旧版 16 字节格式(仅含余额)。

安全性credit()debit() 使用经过检查的算术运算,以防止溢出和下溢。

手续费限额(Fee Limits)

pub struct FeeLimits {
pub min_fee: u128, // 默认值:0.0001 SAVT(10^14)
pub max_fee: u128, // 默认值:1.0 SAVT(10^18)
}

密码学原语

签名

算法用途
Ed25519ed25519-dalek交易签名、区块签名、节点身份

密钥规格:

  • 私钥:32 字节
  • 公钥:32 字节
  • 签名:64 字节
  • 地址:十六进制编码的公钥(64 个十六进制字符)

哈希函数

函数用途
SHA-256sha2交易签名消息哈希
SHA-512sha2区块哈希(含域标签 "BLK" + 版本字节)
BLAKE3blake3状态根计算、快速哈希
Keccak256sha3合约存储槽推导

带域标签的哈希

为防止跨域哈希碰撞,所有哈希均包含域标签:

标签描述
区块"BLK" + 版本字节区块哈希
交易根"TXv1" 叶节点标签对 bincode 的滚动累加器
状态根"STATEv1-LE" 种子字典序数据库快照

密钥管理

pub struct KeyManager {
// 加载或生成身份密钥对
pub fn load_or_generate(path: &Path) -> Result<KeyPair>;
// 生成新密钥对
pub fn generate() -> KeyPair;
}

pub struct KeyPair {
pub signing_key: SigningKey,
pub verifying_key: VerifyingKey,
}

密钥以原始 32 字节格式持久化存储到磁盘。MemoryKeyStorage 提供内存存储,用于测试。

加密

对静态敏感数据使用 AES-GCM 加密:

// 使用密码派生密钥进行加密
let encrypted = encrypt_aes_gcm(plaintext, password)?;

// 解密
let plaintext = decrypt_aes_gcm(ciphertext, password)?;

槽调度器(Slot Scheduler)

用于领导者轮换的确定性槽调度:

pub struct SlotScheduler {
slot_duration_ms: u64,
base_ms: u64,
validators: Vec<String>,
local_id: String,
}

pub enum SlotRole {
Leader, // 在本槽中生产区块
Follower, // 验证区块
Observer, // 仅观察(守护节点)
}

pub struct SlotInfo {
pub slot: u64,
pub round: u32,
pub leader: Option<String>,
pub role: SlotRole,
pub start_ms: u64,
pub end_ms: u64,
}

领导者分配方式:leader_index = slot % validators.len()。在相同验证者集合和槽编号下,结果是确定性的。

巨石块(Monolith)

巨石块将多个区块压缩为单一结构,用于高效归档和同步:

pub struct MonolithHeader {
pub exec_height: u64, // 执行高度
pub window_start: u64, // 巨石块中的第一个区块
pub epoch_id: u64, // 纪元标识符
pub block_count: u64, // 包含的区块数量
pub size_bytes: u64, // 总大小
pub monolith_id: String, // 唯一标识符
pub produced_at_ms: u64, // 生产时间戳
pub cosignatures: Vec<..>, // 验证者联合签名
}

指标(Metrics)

指标系统提供与 Prometheus 兼容的指标:

pub struct MetricsProvider {
// 注册计数器、仪表、直方图
pub fn register_counter(name: &str, help: &str) -> Counter;
pub fn register_gauge(name: &str, help: &str) -> Gauge;
}

类别:区块链、内存池、网络、存储、执行、系统、安全、代币经济。

端点:http://127.0.0.1:9090/metrics(每 5 秒更新一次)。

双核结构

存在两个 savitri-core 目录:

路径用途依赖关系
Savitri-core/Savitri-core/独立版本(适用于 crates.io)无内部依赖
Savitri-core/扩展版本savitri-storage、savitri-zkp

独立版本采用 MIT 许可证,适合外部使用。扩展版本增加了 RocksDB 集成、压缩和 libp2p 支持等功能。