Skip to content

Merge 2026-08-update - #43

Merged
AlexanderBuzz merged 1 commit into
masterfrom
2026-08-update
Aug 24, 2026
Merged

Merge 2026-08-update#43
AlexanderBuzz merged 1 commit into
masterfrom
2026-08-update

Conversation

@AlexanderBuzz

@AlexanderBuzz AlexanderBuzz commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Summary

Parity with rippled 3.3.0 / ripple-binary-codec 5.0.0, a set of binary codec
fixes, and a security update of the HTTP stack.

Fixes

  • AMM classes named Amm*, unknown type names cast to ordinal 0
  • Type map spelled XchainBridge, definitions spell XChainBridge
  • Xahau definitions merged over mainline with array_merge
  • Vector256::toJson() returned a JSON string
  • UInt64 decimal instead of hex; hex input threw
  • autofill() unaware of the AMMCreate owner reserve
  • NFTokenId, ChancelAfter, CheckChancel typos
  • EscrowFinish fee: strlen($x / 2) instead of strlen($x) / 2

Security

The guzzlehttp/guzzle constraint ^7.4 allowed every release from 7.4.0 up to
7.15.1 — all of which carry open advisories, among them CVE-2026-69246
(high, noncanonical hosts bypassing host-based checks). Anyone resolving the
dependency tree could land on a vulnerable version. The constraint moves to
^7.15.2, the first release fixing all of them; composer audit is clean
against the resulting tree.

Added

  • MPTokensV1MPTokenIssuanceCreate/Destroy/Set, MPTokeort in AmountandIssue`
  • CredentialsCredentialCreate/Accept/Delete, `Credentipes
  • PermissionedDomains and DomainID on OfferCreate/`Paym
  • AMMClawback, NFTokenModify, Batch, DelegateSet
  • Serialized types Hash192 and Number (STNumber)
  • 15 missing fields on existing models, found by diffing every model against the reference TRANSACTION_FORMATS

Breaking changes

  1. UInt64 JSON is now hex, not decimal — as rippled and t
    produce it. MaximumAmount, OutstandingAmount, MPTAmount LockedAmountstay base 10.fromJson()expects hex; use
    for decimal.
  2. AMM classes renamed Amm*AMM*. The old names never
    AMM transaction, so nothing that worked before breaks.
  3. Minimum guzzlehttp/guzzle is 7.15.2.

Verification

  • 539 unit tests (up from 97), including conformance against reference fixtures and a regression test pinning that Xahau definitions never shadow mainline ones.
  • Run against Testnet: four examples (mptoken, permissioned-domain, amm-clawback, nftoken-modify), every transaction tesSUCCESS and validated. The MPT balance, the AMM pool state and the modified NFT URI were read back from the ledger.
  • Ledger object decoding verified against the real MPTokenIssuance, MPToken, Credential, PermissionedDomain and Offer objects those runs created; they are checked in as a fixture, since the xrpl.js fixtures amendments.
  • composer validate and composer audit both clean.

  Brings the library to parity with rippled 3.3.0 / ripple-binary-codec 5.0.0,
  fixes a set of serialization bugs that made several shipped transaction types
  unusable or silently wrong, and closes 13 dependency advisories.

  The codec is now verified against the official codec-fixtures.json of xrpl.js:
  34 transactions and 261 ledger objects encode to the exact reference binary and
  decode back to the reference JSON.

  Critical fixes:

  * AMM transactions were silently serialized as Payments. The model classes were
    named Amm* instead of AMM*, and an unknown transaction type name was cast to
    the ordinal 0. Unknown enum values now raise instead of falling back to 0.
  * All eight XChain types could not be serialized at all - the type map spelled
    the bridge type XchainBridge, definitions.json spells it XChainBridge.
  * Xahau definitions were merged over the mainline with array_merge, so decoding
    produced Xahau names for XRPL ordinals (AMMID as ObjectID, DomainID as
    OfferID, DIDDocument as Blob). The XRP Ledger now wins; Xahau entries are only
    added where the mainline has none.
  * Vector256::toJson() returned a JSON string instead of an array, breaking every
    ledger object with Indexes, Hashes or Amendments.
  * UInt64 was rendered in base 10 instead of hex, and hex input threw.
  * AMMCreate was rejected with telINSUF_FEE_P because autofill() did not know it
    pays one owner reserve as its transaction cost.

  New transaction types: MPTokensV1, Credentials, PermissionedDomains, AMMClawback,
  NFTokenModify, Batch, DelegateSet. New serialized types Hash192 and Number
  (STNumber). MPT support in Amount and Issue.

  Dependencies: guzzlehttp/guzzle is raised from ^7.4 to ^7.15.2, closing 13
  advisories including CVE-2026-69246 (high). The lock file had been stale since
  the buffer bump and is regenerated. composer.json now declares "php": "^8.2",
  and brick/math is narrowed to <0.15 because 0.15 removes the BigDecimal methods
  this library uses and 0.16 reintroduces them with different semantics.

  BREAKING CHANGE: the JSON representation of a UInt64 is now a 16 character hex
  string, matching rippled and the reference SDKs. MaximumAmount, OutstandingAmount,
  MPTAmount and LockedAmount stay base 10.

  BREAKING CHANGE: the AMM model classes are renamed from Amm* to AMM*. The old
  names never produced a valid AMM transaction.

  BREAKING CHANGE: minimum guzzlehttp/guzzle is now 7.15.2.

  See CHANGELOG.md for the complete list.
@AlexanderBuzz
AlexanderBuzz merged commit 9472bfb into master Aug 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant