ddk-trie
Trie-based data structures for efficient storage and retrieval of adaptor signature information in numerical Discreet Log Contracts (DLCs).
This crate enables DLCs to handle continuous outcome ranges (e.g., prices, scores) by decomposing numeric values into digit paths, minimizing the number of adaptor signatures required.
Key Structures
| Structure | Description |
|---|---|
DigitTrie<T> |
Base trie indexed by digit paths (decomposed numeric values) |
MultiTrie<T> |
Trie of tries for multi-oracle t-of-n threshold schemes |
MultiOracleTrie |
Optimized for oracles that must exactly agree |
MultiOracleTrieWithDiff |
Allows differences between oracle outcomes within bounds |
How It Works
-
Digit Decomposition: Numeric outcomes (e.g., price = 1234) are decomposed into digit paths (
[1, 2, 3, 4]in base 10) -
Prefix Compression: Ranges sharing common prefixes are covered by a single trie node. For example, outcomes 1000-1999 can be covered by prefix
[1] -
Efficient Signatures: The
DlcTrietrait provides:generate()- Build trie structure from range payoutssign()- Create adaptor signatures for all pathsverify()- Verify adaptor signatures
Example
use ;
let oracle_info = OracleNumericInfo ;
// Generate trie from payouts
let trie_info = trie.generate?;
// Sign all paths
let signatures = trie.sign?;
// Verify signatures
trie.verify?;
Features
| Feature | Description |
|---|---|
std |
Standard library support (default) |
no-std |
No standard library for embedded/WASM |
parallel |
Parallel signature generation/verification using rayon |
use-serde |
Serde serialization support |
License
This project is licensed under the MIT License.