2026-09-26 23:51:06 -06:00
# Programmability {#programmability}
2026-09-28 05:59:19 -06:00
\htmlonly
< div class = "eli5" > < b > ELI5.< / b > A wildcard is a placeholder with the correction word not yet fixed. Assigning an input or a leaf is a Beaver multiplication against that placeholder: one blinded share is exchanged, then both parties write the same correction. An updatable leaf can be patched again the same way.< / div >
\endhtmlonly
2026-09-26 23:51:06 -06:00
Fill in a secret index or payload after the key exists, rewrite an
updatable leaf, or commit to a vector before choosing which coordinate
to open.
| Mechanism | What it does |
| --- | --- |
| [dpf::wildcard_value ](@ref dpf/wildcard.hpp ) | Placeholder input or leaf. Eval throws until you assign. |
| Leaf assign | `compute_and_get_blinded_output_share` , `reconstruct_correction_word` , `async_assign_leaf` , `assign_cmp` — see [wildcard assign ](@ref wildcard_assign ). |
| [dpf::updatable ](@ref dpf/placement.hpp ) | Beaver leaf so a later rewrite replaces the payload without regenerating the spine. |
| [dpf::ppvc ](@ref ppvc_manual ) | Point-programmable vector commitment: bind `(Z/2^s Z)^n` , then open one hidden coordinate (or the sum). |
| [dpf::at ](@ref dpf/placement.hpp ) / `idpf` | Plant values on public prefixes as well as the leaf. |
```cpp
auto [k0, k1] = dpf::make_dpf(
std::uint8_t{12},
dpf::wildcard_value< std::uint32_t > {});
// assign the payload later; eval before assign throws
using scheme = dpf::ppvc< std::uint8_t , 8 > ;
const auto pp = scheme::setup();
const auto [com, st] = scheme::commit(pp);
const auto op = scheme::open(st, 0, 0x5a, std::uint8_t{40});
```
**Go deeper:** [guided tour — wildcards ](@ref tour_outputs ),
[PPVC ](@ref tour_ppvc ), [PPVC manual ](@ref ppvc_manual ),
[input types ](@ref input_types ), [output types ](@ref output_types ).