rs-merkle-tree: Rust로 구현된 Merkle Tree 라이브러리
요약
Rust 언어로 구현된 Merkle Tree 라이브러리 `rs-merkle-tree`를 소개합니다. 이 라이브러리는 고정 깊이, 추가 전용(Append-only) 구조를 가지며, 메모리에서 Merkle proof 검색을 최적화하여 빠른 성능을 제공합니다. 사용자는 다양한 스토리지 백엔드와 해시 함수를 선택해 트리를 커스터마이징할 수 있습니다.
핵심 포인트
- Rust 기반의 Merkle Tree 라이브러리로 높은 안정성을 보장합니다.
- 고정 깊이 및 추가 전용 구조로 데이터 무결성 관리에 용이합니다.
- 메모리 최적화된 proof 검색으로 빠른 성능을 제공합니다.
- 다양한 스토리지(sled, rocksdb 등)와 해시 함수를 지원하여 유연성이 높습니다.
rs-merkle-tree
다음과 같은 기능을 갖춘 Rust의 Merkle tree 구현체입니다:
- 고정 깊이(Fixed depth): 모든 증명(proof)은
Depth와 동일한 상수 크기를 가집니다. - 추가 전용(Append-only): 리프는 인덱스
0부터 순차적으로 추가됩니다. 한 번 추가된 리프는 수정할 수 없습니다. - Merkle proof 검색 최적화: 중간 리프를 저장하여 Merkle proof를 지연 계산할 필요 없이 메모리에서 가져올 수 있으며, 이는 매우 빠른 검색 시간을 보장합니다.
- 루트까지의 바닥 및 중간 리프 저장을 위한 구성 가능한 스토리지 백엔드(Configurable storage backends).
- 노드를 해시하기 위한 구성 가능한 해시 함수(Configurable hash functions).
- 간단하고 사용하기 쉬운 인터페이스:
add_leaves,root,num_leaves,proof.
rs-merkle-tree를 Rust의 Cargo.toml에 의존성으로 추가하세요.
[dependencies]
rs-merkle-tree = "0.1.0"
다음과 같이 Merkle tree를 생성하고, 리프를 추가하며, 리프 수를 얻고, 주어진 인덱스의 Merkle proof를 얻을 수 있습니다. 이는 keccak256 해싱 알고리즘, 메모리 스토리지, 깊이 32를 사용하여 간단한 merkle tree를 만듭니다.
use rs_merkle_tree::to_node;
use rs_merkle_tree::tree::MerkleTree32;
...
다음과 같이 다른 스토어, 해시 함수 및 깊이를 선택하여 트리를 사용자 정의할 수 있습니다. 이때 feature를 수정해야 합니다. 이렇게 하면 필요하지 않은 부분을 가져오는 것을 방지할 수 있습니다. 다음 예시들을 참고하세요.
깊이: 32 | 해싱: Keccak | 스토어: sled
[dependencies]
rs-merkle-tree = { version = "0.1.0", features = ["sled_store"] }
use rs_merkle_tree::hasher::Keccak256Hasher;
use rs_merkle_tree::stores::SledStore;
use rs-merkle-tree::tree::MerkleTree;
...
깊이: 32 | 해싱: Poseidon | 스토어: rocksdb
rs-merkle-tree = { version = "0.1.0", features = ["rocksdb_store"] }
use rs-merkle-tree::hasher::PoseidonHasher;
use rs-merkle-tree::stores::RocksDbStore;
use rs-merkle-tree::tree::MerkleTree;
...
깊이: 32 | 해싱: Poseidon | 스토어: sqlite
rs-merkle-tree = { version = "0.1.0", features = ["sqlite_store"] }
use rs_merkle_tree::hasher::PoseidonHasher;
use rs_merkle_tree::stores::SqliteStore;
use rs_merkle_tree::tree::MerkleTree;
...
깊이 (Depth): 32 | 해싱 (Hashing): Keccak | 저장소 (Store): file
rs-merkle-tree = { version = "0.1.0", features = ["file_store"] }
use rs_merkle_tree::hasher::Keccak256Hasher;
use rs_merkle_tree::stores::FileStore;
use rs_merkle_tree::tree::MerkleTree;
...
테스트 (Tests)
모든 테스트 실행하기
cargo test --all-features
저장소 (Stores)
다음 저장소가 지원됩니다:
해시 함수 (Hash functions)
다음 해시 함수가 지원됩니다:
벤치마크 (Benchmarks)
다음 항목들은 MacBook Pro M4 24GB에서 측정되었습니다:
- 사용된 디스크 크기
- 초당 천 단위의 리프 삽입 처리량(throughput).
- Merkle 증명 생성 시간.
다음 명령어로 실행할 수 있습니다:
cargo bench --features=all
그리고 다음 테이블을 생성할 수 있습니다.
python benchmarks.py
add_leaves 처리량 (throughput)
| 깊이 (Depth) | 해시 (Hash) | 리프 (Leaves) | 배치 (Batch) | 저장소 (Store) | 처리량 (Throughput) | p50 배치 (p50 batch) | p99 배치 (p99 batch) | 디스크 (Disk) |
|---|---|---|---|---|---|---|---|---|
| 32 | keccak256 | 5000000 | 100000 | memory | 39.313 Melem/s | 2.427 ms | 4.635 ms | - |
| ... |
proof 시간 (time)
| 깊이 (Depth) | 해시 (Hash) | 저장소 (Store) | 시간 (Time) |
|---|---|---|---|
| 32 | keccak256 | memory | 195.890 ns |
| ... |
라이선스 (License)
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub GameDev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기