- Added basic project structure with workspace and crates: `kvstore`, `vault`, `evm_client`, `cli_app`, `web_app`. - Created initial `Cargo.toml` files for each crate. - Added placeholder implementations for key components. - Included initial documentation files (`README.md`, architecture docs, repo structure). - Included initial implementaion for kvstore crate(async API, backend abstraction, separation of concerns, WASM/native support, testability) - Included native and browser tests for the kvstore crate
kvstore: Async Key-Value Store for Native and WASM
kvstore provides a runtime-agnostic, async trait for key-value storage, with robust implementations for both native (using sled) and browser/WASM (using IndexedDB via the idb crate) environments.
Features
- Unified async trait: Same API for all platforms. Methods: get,set,remove,contains_key,keys,clear.
- Native backend: Uses sledfor fast, embedded storage. Blocking I/O is offloaded withtokio::task::spawn_blocking.
- WASM backend: Uses IndexedDB via the idbcrate for browser storage. Fully async and Promise-based.
- Error handling: Consistent error types across platforms.
- Conditional compilation: Uses Cargo features and cfgto select the backend.
Usage
Add to your Cargo.toml:
[dependencies]
kvstore = { path = "../kvstore" }
Example
use kvstore::{KVStore, NativeStore};
#[tokio::main]
async fn main() {
    let store = NativeStore::open("/tmp/mydb").unwrap();
    store.set("foo", b"bar").await.unwrap();
    let val = store.get("foo").await.unwrap();
    println!("Got: {:?}", val);
}
For WASM/browser, use WasmStore and run in a browser environment.
Testing
Native
cargo test -p kvstore --features native
WASM (browser)
cd kvstore
wasm-pack test --headless --firefox --features web
Architecture
- See ../docs/Architecture.mdfor full design details.
License
MIT OR Apache-2.0