daddygokings-art/Decentralized-Audit-Transparency-Ledger
GitHub: daddygokings-art/Decentralized-Audit-Transparency-Ledger
Stellar 网络上的 Soroban 智能合约,提供不可变、公开可验证的链上审计日志记录,支持可配置的全局与按事件类型的日志上限。
Stars: 0 | Forks: 2
# 去中心化审计与透明账本
一个用于在 Stellar 网络上不可变地记录金融交易的 Soroban 智能合约,提供公开可验证的审计追踪。基于 [Soroban SDK](https://soroban.stellar.org/) 构建。
## 概述
`AuditLedger` 作为一个仅可追加的日志,用于记录金融和运营事件。每个条目都由时间戳、事件类型(`Symbol`)和提交者地址(`Address`)封装,产生一份防篡改的历史记录,任何一方都可以独立验证。可配置的全局和按事件类型的日志记录限制可防止状态膨胀,同时维护完整且有序的历史记录。
## 核心功能
- **不可变的事件日志记录** — 每个事件都使用标准化的 `Event` 结构体记录在链上,创建永久的审计追踪。
- **可配置的日志限制** — 独立的全局和按事件类型的上限(`u32`)可防止合约状态垃圾信息。上限可以设置为任意值(包括 `0` 以冻结日志记录),或者通过 `remove_event_cap` 完全移除。
- **公开可验证性** — 任何人都可以枚举和验证完整的日志历史记录,或按事件类型进行筛选——无需受信任的第三方中介。
- **元数据标准化** — 事件携带不透明的 `Bytes` 元数据,鼓励链下消费者采用一致的 schema。
- **边界安全验证** — 合约逻辑已针对边缘情况进行了强化:零最大值配置、相等的最小/最大值范围、空元数据以及上限移除。
## 智能合约架构
| 组件 | 描述 |
|-----------|-------------|
| **全局日志注册表** | 所有事件的顺序数组,受 `global_max_logs` 限制。 |
| **按事件子账本** | 命名空间化的事件类型(`Symbol`),每个都具有可选的独立最大日志限制。 |
| **上限门控** | `event_cap_set` 布尔值门控按事件执行——上限是可选的,可以通过 `remove_event_cap` 移除。 |
### 事件结构
```
pub struct Event {
pub index: u32,
pub timestamp: u64,
pub event_type: Symbol,
pub submitter: Address,
pub metadata: Bytes,
}
```
## API 参考
### 写入
```
fn initialize(env: Env, owner: Address, global_max_logs: u32);
fn log_event(env: Env, submitter: Address, event_type: Symbol, metadata: Bytes) -> u32;
```
### 读取
```
fn total_events(env: Env) -> u32;
fn get_event(env: Env, index: u32) -> Event;
fn event_count(env: Env, event_type: Symbol) -> u32;
fn get_event_by_type(env: Env, event_type: Symbol, type_index: u32) -> Event;
```
### 治理(仅限所有者)
```
fn set_global_max_logs(env: Env, caller: Address, new_max: u32);
fn set_event_max_logs(env: Env, caller: Address, event_type: Symbol, new_max: u32);
fn remove_event_cap(env: Env, caller: Address, event_type: Symbol);
fn transfer_ownership(env: Env, caller: Address, new_owner: Address);
```
## 快速开始
```
# Build
cargo build
# 运行所有 tests
cargo test
# Format
cargo fmt
# Lint
cargo clippy
```
## 开发
### 前置条件
- Rust 工具链(通过 [rustup](https://rustup.rs/) 安装)
- Soroban SDK(作为 Cargo 依赖项包含)
### 编译为 WASM
```
cargo build --target wasm32-unknown-unknown --release
```
### 使用 Soroban CLI 部署
```
soroban contract deploy \
--wasm target/wasm32-unknown-unknown/release/audit_ledger.wasm \
--source \
--network testnet
```
### 初始化
```
soroban contract invoke \
--id \
--source \
--network testnet \
-- \
initialize \
--owner \
--global_max_logs 100000
```
## 测试覆盖率(22 个测试)
| 测试文件 | 数量 | 描述 |
|-----------|-------|-------------|
| `src/test.rs` | 22 | 日志记录、查询、治理、所有权转移、上限管理、事件触发、空元数据、访问控制、边界条件 |
边界测试包括:零全局/事件最大日志数、设置最大值等于当前计数、在零锁定后移除上限、混合多类型限制,以及在不存在时触发 panic 的访问。
## CI/CD
每次推送和 pull request 都会触发 GitHub Actions 工作流,执行以下操作:
1. 通过 `dtolnay/rust-toolchain` 安装 Rust 工具链
2. 使用 `cargo fmt --check` 检查格式
3. 使用 `cargo clippy` 进行 Lint
4. 使用 `cargo build` 进行构建
5. 使用 `cargo test` 运行完整的测试套件
## 许可证
[MIT](LICENSE)
标签:Soroban, Stellar网络, 区块链, 可视化界面, 审计日志, 智能合约, 通知系统