qp-poseidon

Crates.ioqp-poseidon
lib.rsqp-poseidon
version0.9.5
created_at2025-09-04 09:21:37.826604+00
updated_at2025-09-24 23:32:57.057155+00
descriptionPoseidon hash implementation for Substrate/Polkadot ecosystem using plonky3 field arithmetic
homepagehttps://quantus.com
repositoryhttps://github.com/Quantus-Network/qp-poseidon
max_upload_size
id1823916
size108,847
Quantus Network CI (quantus-network-ci)

documentation

README

qp-poseidon

Substrate-compatible Poseidon hash implementation for the Polkadot ecosystem. This crate wraps qp-poseidon-core and adds Substrate-specific functionality including codec traits and specialized storage operations.

Features

  • Substrate integration: Implements required traits for use in Substrate/Polkadot projects
  • Codec support: Implements Encode, Decode, and TypeInfo traits from parity-scale-codec
  • Serde support: Optional serialization support via the serde feature
  • Storage hashing: Specialized functions for Quantus Network storage operations
  • Circuit compatibility: Maintains compatibility with zero-knowledge circuit implementations
  • No-std support: Works in constrained environments

Usage

Add this to your Cargo.toml:

[dependencies]
qp-poseidon = { path = "path/to/qp-poseidon/crates/substrate" }

Basic Hashing

use qp_poseidon::PoseidonHasher;

// Hash bytes with circuit-compatible padding
let data = b"hello world";
let hash = PoseidonHasher::hash_padded(data);
println!("Hash: {:?}", hash);

Performance

  • Optimized for Substrate's encoding/decoding patterns
  • Maintains deterministic behavior across different platforms
  • Memory efficient for blockchain storage operations
  • Circuit-compatible padding ensures consistency with ZK proofs

Security

  • Built on qp-poseidon-core's security guarantees
  • Uses standard Substrate codec patterns
  • Specialized storage hashing prevents collision attacks
  • Extensive test coverage with known vectors

Integration

use qp_poseidon::PoseidonHasher;
use frame_support::pallet_prelude::*;

#[pallet::config]
pub trait Config: frame_system::Config {
    type Hasher: sp_runtime::traits::Hash<Output = sp_core::H256>;
}

// Use PoseidonHasher as the pallet's hasher
impl pallet::Config for Runtime {
    type Hasher = PoseidonHasher;
}

Related Crates

Commit count: 73

cargo fmt