bulk_keychain/lib.rs
1//! # bulk-keychain
2//!
3//! A simple high perf signing lib for BULK txns.
4//!
5//! This crate provides the core functionality for signing transactions
6//! on BULK. Designed for low-latency, high-throughput trading systems.
7//!
8//! ## Features
9//!
10//! - **Fast signing**: Ed25519 signatures with SIMD optimizations
11//! - **Batch signing**: Sign multiple transactions in parallel using Rayon
12//! - **Zero-copy serialization**: Minimal allocations in hot paths
13//! - **Type-safe**: Rust's type system prevents malformed transactions
14//!
15//! ## Quick Start
16//!
17//! ```rust
18//! use bulk_keychain::{Keypair, Order, SignatureDomain, Signer, TimeInForce};
19//!
20//! // Generate a new keypair
21//! let keypair = Keypair::generate();
22//!
23//! // Create an order
24//! let order = Order::limit("BTC-USD", true, 100000.0, 0.1, TimeInForce::Gtc);
25//!
26//! // Sign the transaction
27//! let mut signer = Signer::new(keypair, SignatureDomain::Devnet);
28//! let signed_tx = signer.sign(order.into(), None).unwrap();
29//! ```
30//!
31//! ## Batch Signing
32//!
33//! For high-frequency trading, use batch signing to maximize throughput:
34//!
35//! ```rust
36//! use bulk_keychain::{Keypair, Order, SignatureDomain, Signer, TimeInForce};
37//!
38//! let keypair = Keypair::generate();
39//! let mut signer = Signer::new(keypair, SignatureDomain::Devnet);
40//!
41//! // Create many independent orders
42//! let orders: Vec<_> = (0..1000)
43//! .map(|i| Order::limit("BTC-USD", i % 2 == 0, 100000.0 + i as f64, 0.1, TimeInForce::Gtc).into())
44//! .collect();
45//!
46//! // Sign all at once - automatically uses parallel signing for large batches
47//! let signed_txs = signer.sign_all(orders, None).unwrap();
48//! ```
49
50mod error;
51mod keypair;
52pub mod nonce;
53pub mod order_id;
54pub mod prepare;
55mod sdk_compat;
56mod sign;
57pub mod types;
58
59pub use error::{Error, Result};
60pub use keypair::Keypair;
61pub use nonce::{parse_decimal as parse_nonce_decimal, NonceManager, NonceStrategy};
62pub use order_id::{
63 compute_limit_order_id, compute_market_order_id, compute_order_id, compute_order_item_id,
64};
65pub use prepare::{
66 finalize_all, finalize_transaction, finalize_transaction_bytes, prepare_action,
67 prepare_agent_wallet, prepare_all, prepare_approve_builder_code,
68 prepare_approve_commission_fee, prepare_create_multisig, prepare_create_sub_account,
69 prepare_faucet, prepare_group, prepare_message, prepare_multisig_approve,
70 prepare_multisig_cancel, prepare_multisig_execute, prepare_multisig_propose,
71 prepare_multisig_reject, prepare_remove_sub_account, prepare_rename_sub_account,
72 prepare_revoke_builder_code, prepare_revoke_commission_fee, prepare_transfer,
73 prepare_update_liquidator_config, prepare_update_multisig_policy, prepare_user_settings,
74 prepare_withdraw, prepare_withdraw_lock_recover, PreparedMessage,
75};
76pub use sign::Signer;
77pub use types::*;
78
79/// Re-export for convenience
80pub use bs58;
81pub use ed25519_dalek;