- Replaced all instances of p256k1signer with the new p8k.Signer across various modules, including event creation, policy handling, and database interactions. - Updated related test cases and benchmarks to ensure compatibility with the new signer interface. - Bumped version to v0.25.0 to reflect these significant changes and improvements in cryptographic operations.
3.8 KiB
3.8 KiB
Performance Benchmark Results
Test Environment
- CPU: AMD Ryzen 5 PRO 4650G with Radeon Graphics
- OS: Linux (amd64)
- Date: November 4, 2025
- Benchmark Time: 1 second per test
Implementations Compared
- BTCEC - btcsuite/btcd/btcec/v2 (Pure Go)
- P256K1 - p256k1.mleku.dev v1.0.2 (Pure Go)
- P8K - p8k.mleku.dev (Purego + libsecp256k1 v5.0.0)
Results Summary
| Operation | BTCEC (ns/op) | P256K1 (ns/op) | P8K (ns/op) | P8K Speedup vs BTCEC | P8K Speedup vs P256K1 |
|---|---|---|---|---|---|
| Pubkey Derivation | 32,226 | 28,098 | 19,329 | 1.67x faster ✨ | 1.45x faster |
| Schnorr Sign | 225,536 | 28,855 | 19,982 | 11.3x faster 🚀 | 1.44x faster |
| Schnorr Verify | 153,205 | 133,235 | 36,541 | 4.19x faster ⚡ | 3.65x faster |
| ECDH | 125,679 | 97,435 | 41,087 | 3.06x faster 💨 | 2.37x faster |
Memory Allocations
| Operation | BTCEC | P256K1 | P8K |
|---|---|---|---|
| Pubkey Derivation | 80 B / 1 alloc | 0 B / 0 alloc | 160 B / 4 allocs |
| Schnorr Sign | 1408 B / 26 allocs | 640 B / 12 allocs | 304 B / 5 allocs |
| Schnorr Verify | 240 B / 5 allocs | 96 B / 3 allocs | 216 B / 5 allocs |
| ECDH | 32 B / 1 alloc | 0 B / 0 alloc | 208 B / 6 allocs |
Key Findings
🏆 P8K Wins All Categories
P8K consistently outperforms both pure Go implementations:
- Schnorr Signing: 11.3x faster than BTCEC, making it ideal for high-throughput signing operations
- Schnorr Verification: 4.2x faster than BTCEC, excellent for validation-heavy workloads
- ECDH: 3x faster than BTCEC, great for key exchange protocols
- Pubkey Derivation: 1.67x faster than BTCEC
Memory Efficiency
- P256K1 has the best memory efficiency with zero allocations for pubkey derivation and ECDH
- P8K has reasonable memory usage with more allocations due to the FFI boundary
- BTCEC has higher memory overhead, especially for Schnorr operations (1408 B/op)
Trade-offs
P8K (This Package)
- ✅ Best performance across all operations
- ✅ Uses battle-tested C implementation
- ✅ Bundled library for Linux AMD64 (zero installation)
- ⚠️ Requires libsecp256k1 on other platforms
- ⚠️ Slightly more memory allocations (FFI overhead)
P256K1
- ✅ Pure Go (no dependencies)
- ✅ Zero allocations for some operations
- ✅ Good performance overall
- ⚠️ ~1.5x slower than P8K
BTCEC
- ✅ Pure Go (no dependencies)
- ✅ Well-tested in Bitcoin ecosystem
- ✅ Reasonable performance for most use cases
- ⚠️ Significantly slower for Schnorr operations
- ⚠️ Higher memory usage
Recommendations
Choose P8K if:
- You need maximum performance
- You're on Linux AMD64 (bundled library)
- You can install libsecp256k1 on other platforms
- You're building high-throughput systems
Choose P256K1 if:
- You need pure Go (no external dependencies)
- Memory efficiency is critical
- Performance is good enough for your use case
Choose BTCEC if:
- You're already using btcsuite packages
- You need Bitcoin-specific features
- Performance is not critical
Conclusion
P8K delivers exceptional performance by leveraging the highly optimized C implementation of libsecp256k1 through CGO-free dynamic loading. The 11x speedup for Schnorr signing makes it ideal for applications requiring high-throughput cryptographic operations.
The bundled library for Linux AMD64 provides zero-installation convenience while maintaining the performance benefits of the native C library.