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

# Struct DelayedPublicMutableValues

Module: `noir_aztec::protocol::delayed_public_mutable::delayed_public_mutable_values`

```rust
pub struct DelayedPublicMutableValues<T, let INITIAL_DELAY: u64> {
    pub svc: ScheduledValueChange<T>,
    pub sdc: ScheduledDelayChange<INITIAL_DELAY>,
}
```

DelayedPublicMutableValues is just a wrapper around ScheduledValueChange and ScheduledDelayChange that then allows us to wrap both of these values in WithHash. WithHash allows for efficient read of values in private.

Note that the WithHash optimization does not work in public (due to there being no unconstrained). But we also want to be able to read the values efficiently in public and we want to be able to read each value separately. Reading the values separately is tricky because ScheduledValueChange and ScheduledDelayChange are packed together (sdc and svc.timestamp_of_change are stored in the same slot). For that reason we expose `unpack_value_change` and `unpack_delay_change` functions that can be used to extract the values from the packed representation. This is "hacky" but there is no way around it.

## Fields

```rust
svc: ScheduledValueChange<T>
```

```rust
sdc: ScheduledDelayChange<INITIAL_DELAY>
```

## Implementations

```rust
impl<T, let INITIAL_DELAY: u64> DelayedPublicMutableValues<T, INITIAL_DELAY>
```

```rust
pub fn new(
    svc: ScheduledValueChange<T>,
    sdc: ScheduledDelayChange<INITIAL_DELAY>,
) -> Self
```

## Trait implementations

```rust
impl<let INITIAL_DELAY: u64, T> Eq for DelayedPublicMutableValues<T, INITIAL_DELAY>
where
    T: Eq
```

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

```rust
impl<let INITIAL_DELAY: u64, T> Hash for DelayedPublicMutableValues<T, INITIAL_DELAY>
where
    T: Packable
```

```rust
pub fn hash(self) -> Field
```

```rust
impl<let INITIAL_DELAY: u64, T> Packable for DelayedPublicMutableValues<T, INITIAL_DELAY>
where
    T: Packable
```

```rust
pub fn pack(self) -> [Field; (<T as traits::Packable>::N * 2) + 1]
```

```rust
pub fn unpack(fields: [Field; (<T as traits::Packable>::N * 2) + 1]) -> Self
```
