> Aztec.nr API reference, v6.0.0 (mainnet and testnet). Index: https://docs.aztec.network/aztec-nr-api/v6.0.0/llms.txt

# Struct Poseidon2Sponge

Module: `noir_aztec::protocol::poseidon2`

```rust
pub struct Poseidon2Sponge {
    pub cache: [Field; 3],
    pub state: [Field; 4],
    pub cache_size: u32,
    pub squeeze_mode: bool,
}
```

## Fields

```rust
cache: [Field; 3]
```

```rust
state: [Field; 4]
```

```rust
cache_size: u32
```

```rust
squeeze_mode: bool
```

## Implementations

```rust
impl Poseidon2Sponge
```

```rust
pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field
```

```rust
pub fn new(iv: Field) -> Self
```

```rust
pub fn absorb(&mut self, input: Field)
```

```rust
pub fn squeeze(&mut self) -> Field
```

## Trait implementations

```rust
impl Deserialize for Poseidon2Sponge
```

```rust
pub fn deserialize(fields: [Field; 9]) -> Self
```

```rust
pub fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self
```

```rust
impl Eq for Poseidon2Sponge
```

```rust
pub fn eq(_self: Self, _other: Self) -> bool
```

```rust
impl Serialize for Poseidon2Sponge
```

```rust
pub fn serialize(self) -> [Field; 9]
```

```rust
pub fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>)
```
