Deterministic key management, Starknet account tooling, and protocol cryptography in Rust.
Disclaimer: This repository is experimental and is provided strictly for testing and experimentation purposes. It should not be used in production environments or relied upon for any security-critical application. There are no guarantees of stability, correctness, or continued maintenance. Use at your own risk.
Krusty provides BIP-39/44 key derivation for Starknet and Nostr domains, deterministic Stark and Nostr signing, OpenZeppelin account descriptor/address calculation, Tongo confidential proof generation, and a focused Starknet client/gateway surface.
krusty-kms-common Shared value types, errors, and exact serialization helpers
krusty-kms-wallet-api Shared wallet execution contract: transaction tracking, wait options,
and the minimal WalletExecutor boundary shared by wallet crates
krusty-kms-domain Pure typed integration contracts for gateway/client orchestration
krusty-kms-gateway Long-lived runtime for derive/check/deploy/sign/query flows with
explicit secret, cache, and RPC boundaries
krusty-kms-crypto Cryptographic primitives and zero-knowledge proofs
krusty-kms Deterministic derivation, account descriptors, and Stark/Nostr signing
krusty-kms-sdk Tongo protocol operations: fund, transfer, withdraw, rollover,
ragequit for confidential balances
krusty-kms-client Focused Starknet wallet, deployment, Tongo account, and call-builder client
These remain in the repository for internal, experimental, or integration-specific use:
krusty-kms-oracle Versioned stdio transport on top of the gateway
krusty-kms-wasm WebAssembly bindings for browser environments
krusty-kms-controller Cartridge Controller integration
krusty-kms-cabi C ABI shared library (libkms)
mental-poker* Experimental gaming protocol crates
qb-game Experimental game crate
| Package | Language | Method |
|---|---|---|
packages/kms-swift |
Swift | SwiftPM via C FFI |
packages/kms-jvm |
Java/Kotlin | JNI |
packages/kms-dart |
Dart | dart:ffi |
packages/kms-c |
C | Header distribution |
@starknetfoundation/krusty-kms-wasm |
JavaScript/TypeScript | npm / wasm-pack |
cargo test # Run default-member tests
cargo test --workspace # Run all workspace tests
cargo clippy --workspace --all-targets -- -D warnings
cargo fmt --all
wasm-pack test --node crates/wasm # Run the JS/WASM boundary testsExamples live in:
crates/kms/examples/key_derivation.rs
crates/kms/examples/stark_sign.rs
crates/kms/examples/nostr_sign.rs
crates/kms/examples/oz_address.rs
crates/kms/examples/oz_multisig_address.rs
crates/client/examples/oz_multisig_coordination.rs
crates/sdk/examples/tongo_proof_generation.rs
OpenZeppelin multisig wallet integration, devnet tests, and the CLI-style
transaction lifecycle are documented in
docs/oz-multisig-wallet-guide.md.
cd crates/wasm && wasm-pack build --target webInstall the published browser-oriented ESM package:
npm install @starknetfoundation/krusty-kms-wasmInitialize it before calling its exports:
import init, {
getVersion,
poseidonHash,
} from "@starknetfoundation/krusty-kms-wasm";
await init();
console.log(getVersion());
console.log(poseidonHash("0x1", "0x2"));See the npm package for the generated API documentation.
computeInvokeTransactionHashV3 accepts an optional final proofFacts
argument for proof-carrying invoke-v3 transactions:
const txHash = computeInvokeTransactionHashV3(
senderAddress,
compiledCalldata,
chainId,
nonce,
tip,
resourceBounds,
paymasterData,
nonceDataAvailabilityMode,
feeDataAvailabilityMode,
accountDeploymentData,
proofFacts
);Omit proofFacts or pass [] for the standard invoke-v3 hash.
MIT OR Apache-2.0
