Merge 2026-08-update - #43
Merged
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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*, unknown type names cast to ordinal0XchainBridge, definitions spellXChainBridgearray_mergeVector256::toJson()returned a JSON stringUInt64decimal instead of hex; hex input threwautofill()unaware of theAMMCreateowner reserveNFTokenId,ChancelAfter,CheckChanceltyposEscrowFinishfee:strlen($x / 2)instead ofstrlen($x) / 2Security
The
guzzlehttp/guzzleconstraint^7.4allowed every release from 7.4.0 up to7.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 auditis cleanagainst the resulting tree.
Added
MPTokenIssuanceCreate/Destroy/Set,MPTokeort inAmountandIssue`CredentialCreate/Accept/Delete, `CredentipesDomainIDonOfferCreate/`PaymHash192andNumber(STNumber)TRANSACTION_FORMATSBreaking changes
UInt64JSON is now hex, not decimal — as rippled and tproduce it.
MaximumAmount,OutstandingAmount,MPTAmountLockedAmountstay base 10.fromJson()expects hex; usefor decimal.
Amm*→AMM*. The old names neverAMM transaction, so nothing that worked before breaks.
guzzlehttp/guzzleis 7.15.2.Verification
mptoken,permissioned-domain,amm-clawback,nftoken-modify), every transactiontesSUCCESSand validated. The MPT balance, the AMM pool state and the modified NFT URI were read back from the ledger.MPTokenIssuance,MPToken,Credential,PermissionedDomainandOfferobjects those runs created; they are checked in as a fixture, since the xrpl.js fixtures amendments.composer validateandcomposer auditboth clean.