Skip to content

September 7–14, 2026

← Developer Updates

This update covers verified engineering progress during the previous seven days. Work in private repositories is summarized without private links or implementation identities; links to public changes appear directly beside the summaries they support.

Strengthened DuskEVM contract reliability.

Simplified native contract queries while preserving response handling and cross-network lookup behavior.

  • Replaced repeated native query and response-decoding code with a shared typed helper, retaining existing request ordering and error behavior.

Aligned wallet-cache indexes with note queries to reduce sorting during balance synchronization and spent-history reads.

  • Reordered note-cache indexes to match unspent-note and spent-history queries, avoiding additional result sorting.

Reduced archive storage overhead and expanded block-processing controls, with faster access to account history and network statistics.

  • Separated node rollback handling and shared test setup, preserving the supported rollback behavior.
  • Added stored account and transfer counters that updated alongside finalized blocks, so statistics reads avoided recounting archive history.
  • Compacted Moonlight event storage, stored block hashes as binary values, removed unused indexes and retired legacy event tables while preserving history responses.
  • Linked archive records to their corresponding blocks and transfer groups, preserving consistent removal of related history entries.
  • Added a protocol-wide block gas ceiling with height-based activation and consistent remaining-gas checks across block processing.

Pinned test-contract builds and reorganized contract validation to make development checks more reproducible and easier to maintain.

  • Locked independently built test contracts to pinned dependency versions so clean builds reproduced their code and gas behavior.
  • Reorganized checks for contract functions, tables, memory, names and globals into dedicated validation modules.

Added a shared typed-data package and expanded signing rules, compatibility tests and integration exports for consistent wallet and application behavior.

  • Specified complete, digest-matching approval details before signing, including schema, defaults and original text, with refusal when full disclosure was unavailable. (PR #5)
  • Separated signer resource policy into its own import and exposed unchanged BLS signing fixtures through public package paths. (PR #3)
  • Required explicit chain and origin policy for signature verification and returned structured results containing the verified digest and outcome. (PR #1)
  • Pinned typed-data signatures to Dusk’s V2 scheme and added cross-language byte-for-byte signing tests against Rust, including controls for incorrect scheme selection. (Commit 913fd04e, Commit d043e242, Commit c20140f7, Commit 95f49264)
  • Extracted the shared protocol package for npm and JSR, preserving implementation history and recording its repository metadata and changelog. (Commit b7de57a6, Commit 975f6a1d, Commit efb5e131)
  • Specified validation of referenced types, tested unused-type handling and aligned error reporting across hashing entry points when inputs violated multiple rules. (Commit 2f0940e8, Commit 1b3a0f0f, Commit 59adae9e)
  • Pinned cryptographic dependencies to exact versions so fresh installs retained the behavior checked by the signing fixtures. (Commit 3af197df)
  • Reused frozen-corpus checks and shared byte helpers while retaining digest, encoding and rejection boundaries. (Commit 5e960d21)
  • Rejected ambiguous field names and invalid Unicode encodings, and aligned optional API exports across npm and JSR. (Commit 5a257cd5)

Strengthened SAFE’s cryptographic sponge lifecycle and input handling while preserving valid encryption output.

  • Removed whole-sponge equality from the Rust API and documented migration for callers that compared internal state. (PR #40)
  • Made failed or cleared sponge instances unusable, tightened input-pattern limits and added cleanup for growing output buffers. (PR #38)
  • Returned a consistent error for empty ciphertext instead of panicking when arithmetic overflow checks were enabled. (PR #36)

Strengthened proof and verifier decoding, with clearer input checks and additional tests for serialized circuit limits.

  • Replaced handwritten structural archive checks for proofs and verifier keys with generated validation, preserving their stored format and required semantic checks. (PR #972)
  • Derived compressed-circuit size limits from their encoding components and tested exact-capacity boundaries, malformed headers and over-capacity rejection. (PR #969)
  • Checked serialized lengths before integer conversion and reported arithmetic overflow as invalid data, preserving distinct errors for genuinely short inputs. (PR #968)
  • Validated verifier input positions and size metadata, rejecting duplicate, unordered or out-of-range entries and undeclared trailing bytes. (PR #961)

Improved Jubjub scalar and curve-point validation while preserving supported encodings.

  • Rejected noncanonical archived scalar values and added fixed layout tests for scalar and point representations in both byte orders. (PR #170)
  • Corrected integer carry handling when recoding scalars for multiplication, with independent reconstruction tests and a fixed compatibility example. (PR #171)
  • Checked extended curve-point coordinates directly, rejecting invalid representations while retaining acceptance of valid equivalent points. (PR #167)

Added raw-point decoding checks to reject invalid G1 curve points before accepting serialized data. (PR #179)

Added a DuskEVM bundle manifest that checked artifact hashes, matching chain settings and compatible component versions before release-candidate acceptance. (PR #15)

Updated PLONK’s transcript dependency and Dusk Merlin’s maintenance path while retaining tested compatibility with existing proof formats.

  • Adopted Dusk Merlin 4.0.0 in PLONK and added migration guidance, preserving tested V2/V3 proof compatibility while documenting Rust 1.96.1 and little-endian-only support. (PR #967, PR #14)
  • Documented maintenance commands and verification against fixed upstream transcript and random-number test vectors. (PR #12)
  • Added cleanup for temporary randomness during normal returns and error unwinding, preserving the transcript sequence. (PR #13)

Expanded developer progress coverage and refocused the privacy overview on Dusk’s capabilities and selective disclosure.

  • Updated the privacy overview around Phoenix, Hedger, Citadel 2 and XSC, with links to component documentation and questions about verification and auditing. (PR #149)
  • Added the August 31 to September 7 developer update, placing source links beside the changes they support and its entry first in the index. (PR #148)

Expanded Poseidon encryption compatibility tests to detect changes in exact ciphertext output across short and longer messages.

  • Added fixed ciphertext examples and independent decryption checks, including a five-element message spanning more than one sponge input block. (PR #299, PR #297)

← Back to Developer Updates