Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Security] Formal Invariant Property Testing & Fuzzing Harness for Economic Solvency

Đang mở
#1,455 7 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 7 ngày

@aabolari đang làm issue này rồi.

Từ ngày 29/9/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

drips-wave fuzzing security smart-contracts Stellar Wave testing

Overview & Background

Smart contracts escrowing user assets must satisfy strict mathematical invariants regardless of sequence ordering, arbitrary timestamps, rate modifications, or extreme token amounts. While standard unit tests cover nominal paths, edge-case rounding errors or balance accounting bugs can lead to protocol insolvency (where the contract's actual token balance is less than the cumulative claimable debt owed to stream recipients).


Detailed Problem Statement

  1. Complex Interleaved State Machine:
    • Complex lifecycle permutations (e.g. create -> pause -> top_up -> cliff_pass -> partial_withdraw -> resume -> cancel) may introduce rounding drift or state inconsistencies.
  2. Integer Truncation & Stroop Precision:
    • Integer division in rate_per_second accrual calculations can accumulate 1-stroop discrepancies over millions of seconds.

Technical Specification & Architecture

1. Invariants to Mathematically Prove

Implement in contracts/stream_contract/src/property_tests.rs:

  • Contract Solvency Invariant:
    $$\text{Contract Balance} \ge \sum_{i \in \text{ActiveStreams}} (\text{Deposited}_i - \text{Withdrawn}_i)$$
  • Zero-Sum Completion Invariant:
    When a stream completes, $\text{Deposited} == \text{Withdrawn}$, with zero stranded dust remaining.
  • Monotonic Claimability Invariant:
    For any stream without top-up, $\text{Claimable}(t_2) \ge \text{Claimable}(t_1)$ for all $t_2 \ge t_1$.
  • Cliff Protection Invariant:
    For all ledger timestamps $t < \text{cliff_time}$, $\text{Claimable}(t) \equiv 0$.
2. Stateful Fuzzing Runner (proptest)
  • Executes 20,000 generated sequences with randomized action selections, amounts up to $10^{18}$, rates, and ledger timestamp increments.
  • Asserts all four invariants after every single state mutation.

Target Files

  • contracts/stream_contract/src/property_tests.rs
  • contracts/stream_contract/Cargo.toml

Acceptance Criteria

  • Property test suite executes 20,000 iterations without panicking or violating invariants.
  • Catches potential integer overflow or negative claimable amounts under adversarial inputs.
  • Added to continuous integration pipeline (cargo test).
Ngôn ngữ chính
TypeScript
Star
18
Fork
250
Merge trung bình
5 ngày 6 giờ
Pull request đã merge (30 ngày)
82

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của LabsCrypt/flowfi

Tất cả issue của LabsCrypt/flowfi

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.