Home / TxPipe / balius
May 11, 10-11 AM (0)
May 11, 11-12 PM (0)
May 11, 12-1 PM (0)
May 11, 1-2 PM (0)
May 11, 2-3 PM (0)
May 11, 3-4 PM (0)
May 11, 4-5 PM (0)
May 11, 5-6 PM (0)
May 11, 6-7 PM (0)
May 11, 7-8 PM (0)
May 11, 8-9 PM (0)
May 11, 9-10 PM (0)
May 11, 10-11 PM (0)
May 11, 11-12 AM (0)
May 12, 12-1 AM (0)
May 12, 1-2 AM (0)
May 12, 2-3 AM (0)
May 12, 3-4 AM (0)
May 12, 4-5 AM (0)
May 12, 5-6 AM (0)
May 12, 6-7 AM (0)
May 12, 7-8 AM (0)
May 12, 8-9 AM (0)
May 12, 9-10 AM (0)
May 12, 10-11 AM (0)
May 12, 11-12 PM (0)
May 12, 12-1 PM (0)
May 12, 1-2 PM (0)
May 12, 2-3 PM (0)
May 12, 3-4 PM (0)
May 12, 4-5 PM (0)
May 12, 5-6 PM (0)
May 12, 6-7 PM (0)
May 12, 7-8 PM (0)
May 12, 8-9 PM (0)
May 12, 9-10 PM (0)
May 12, 10-11 PM (0)
May 12, 11-12 AM (0)
May 13, 12-1 AM (0)
May 13, 1-2 AM (0)
May 13, 2-3 AM (0)
May 13, 3-4 AM (0)
May 13, 4-5 AM (0)
May 13, 5-6 AM (0)
May 13, 6-7 AM (0)
May 13, 7-8 AM (0)
May 13, 8-9 AM (0)
May 13, 9-10 AM (0)
May 13, 10-11 AM (0)
May 13, 11-12 PM (0)
May 13, 12-1 PM (0)
May 13, 1-2 PM (0)
May 13, 2-3 PM (0)
May 13, 3-4 PM (0)
May 13, 4-5 PM (0)
May 13, 5-6 PM (0)
May 13, 6-7 PM (0)
May 13, 7-8 PM (0)
May 13, 8-9 PM (0)
May 13, 9-10 PM (0)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (0)
May 14, 1-2 AM (0)
May 14, 2-3 AM (0)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (0)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (0)
May 14, 6-7 PM (0)
May 14, 7-8 PM (0)
May 14, 8-9 PM (0)
May 14, 9-10 PM (0)
May 14, 10-11 PM (0)
May 14, 11-12 AM (0)
May 15, 12-1 AM (0)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (0)
May 15, 4-5 AM (0)
May 15, 5-6 AM (0)
May 15, 6-7 AM (0)
May 15, 7-8 AM (0)
May 15, 8-9 AM (0)
May 15, 9-10 AM (0)
May 15, 10-11 AM (0)
May 15, 11-12 PM (0)
May 15, 12-1 PM (0)
May 15, 1-2 PM (0)
May 15, 2-3 PM (0)
May 15, 3-4 PM (0)
May 15, 4-5 PM (0)
May 15, 5-6 PM (0)
May 15, 6-7 PM (0)
May 15, 7-8 PM (0)
May 15, 8-9 PM (0)
May 15, 9-10 PM (0)
May 15, 10-11 PM (0)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
May 16, 6-7 AM (0)
May 16, 7-8 AM (0)
May 16, 8-9 AM (0)
May 16, 9-10 AM (0)
May 16, 10-11 AM (0)
May 16, 11-12 PM (0)
May 16, 12-1 PM (1)
May 16, 1-2 PM (1)
May 16, 2-3 PM (0)
May 16, 3-4 PM (0)
May 16, 4-5 PM (0)
May 16, 5-6 PM (0)
May 16, 6-7 PM (0)
May 16, 7-8 PM (0)
May 16, 8-9 PM (0)
May 16, 9-10 PM (0)
May 16, 10-11 PM (0)
May 16, 11-12 AM (0)
May 17, 12-1 AM (0)
May 17, 1-2 AM (0)
May 17, 2-3 AM (0)
May 17, 3-4 AM (0)
May 17, 4-5 AM (0)
May 17, 5-6 AM (0)
May 17, 6-7 AM (0)
May 17, 7-8 AM (0)
May 17, 8-9 AM (0)
May 17, 9-10 AM (0)
May 17, 10-11 AM (0)
May 17, 11-12 PM (0)
May 17, 12-1 PM (0)
May 17, 1-2 PM (0)
May 17, 2-3 PM (0)
May 17, 3-4 PM (0)
May 17, 4-5 PM (0)
May 17, 5-6 PM (0)
May 17, 6-7 PM (0)
May 17, 7-8 PM (0)
May 17, 8-9 PM (0)
May 17, 9-10 PM (0)
May 17, 10-11 PM (0)
May 17, 11-12 AM (0)
May 18, 12-1 AM (0)
May 18, 1-2 AM (0)
May 18, 2-3 AM (0)
May 18, 3-4 AM (0)
May 18, 4-5 AM (0)
May 18, 5-6 AM (0)
May 18, 6-7 AM (0)
May 18, 7-8 AM (0)
May 18, 8-9 AM (0)
May 18, 9-10 AM (0)
May 18, 10-11 AM (0)
2 commits this week May 11, 2026 - May 18, 2026
refactor: promote PParams shape into balius-core, slim runtime converter
The PParams wire shape — pbjson conventions from utxorpc-spec 0.17 —
deserved the same architectural treatment as Tx/UTxO: defined once in
balius-core, asserted with a wire-compat invariant test that proves
"what we emit, 0.17 decodes," and consumed unchanged on the runtime
and SDK sides.

Before: the shape lived implicitly inside a 100-line imperative JSON
builder in `balius-runtime::ledgers::u5c::convert::pparams_to_legacy_json`
that hand-assembled `serde_json::Value` to match pbjson. The SDK had a
parallel minimal PParams struct just for `coins_per_utxo_byte`. Two
mostly-implicit places to keep in sync; nothing in balius-core actually
owned the contract.

After:
 - `balius_core::proto::v0::cardano::PParams` + 7 nested types
   (RationalNumber, ProtocolVersion, ExUnits, ExPrices, CostModel,
   CostModels, VotingThresholds) own the wire shape via serde +
   serde_with derives: camelCase keys, u64 as JSON strings via
   DisplayFromStr, u32 as plain numbers, default-zero / None fields
   skip serialization. One source of truth.
 - The runtime converter shrinks to a flat `convert_pparams` that
   flattens upstream BigInts via `unwrap_u64` and field-copies into a
   `balius_core::proto::v0::cardano::PParams`. serde_json::to_vec on
   the typed value produces the wire bytes — no imperative JSON
   assembly. ~140 lines removed from convert.rs.
 - balius-sdk drops its inline PParams in favor of
   `pub use balius_core::proto::v0::cardano::PParams`.
 - balius-core/tests/u5c_v017_wire_compat.rs (renamed from
   wire_compat.rs for clarity) gains
   `wire_compat_pparams_roundtrips_via_017` mirroring the TxOutput
   test: build a balius-core PParams, serialize, decode under
   utxorpc-spec 0.17 pbjson, assert every field. Plus
   `wire_compat_pparams_omits_default_fields` for the skip-default
   invariant.
 - Runtime keeps `convert_pparams_decodes_under_017_pbjson` and
   `convert_pparams_overflow_propagates` — they cover the
   upstream-side BigInt seam (balius-core can't, no upstream dep).
   The now-redundant `convert_pparams_omits_default_fields` is dropped.

balius-core gains serde + serde_with as deps and serde_json as a dev-dep.

Verified: cargo check --workspace --tests clean; balius-core 4/4 (incl.
the two new PParams tests); balius-runtime --lib 8/8; e2e::faucet_claim
1/1 (full end-to-end through mock ledger). u5c-chainsync::wallet_balance
remains the pre-existing stale-wasm failure.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>