Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
5593062
ci: bump standalone stand to rippled 3.2.1 (#73)
xrpl-release-watch[bot] Aug 3, 2026
e63e9ef
fix(client): исключение из OnConnected больше не убивает клиент навсе…
Platonenkov Aug 4, 2026
1d9fa48
feat(models): флаги ledger-объектов, гвард по LedgerFormats.h и покры…
Platonenkov Aug 4, 2026
7639041
feat(protocol): sfLEVersion — версия схемы Vault (rippled #7817) (#74)
Platonenkov Aug 4, 2026
713da1a
feat(models)!: гвард полей ledger-объектов и чистка моделей по ledger…
Platonenkov Aug 4, 2026
3d35665
fix(client): бэкофф при повторных сбоях OnConnected + замечания CodeR…
Platonenkov Aug 5, 2026
f3d5d61
fix(client): синхронизировать жизненный цикл сессии переподключения (…
Platonenkov Aug 7, 2026
ba5e698
fix(client): не трогать чужой источник отмены в быстром переподключен…
Platonenkov Aug 12, 2026
af28b4b
feat(sugar): комиссии LoanSet/LoanPay/ConfidentialMPT в Autofill (#81)
Platonenkov Aug 12, 2026
1567505
feat(models)!: схема Sponsor и DynamicMPT по rippled 3.3.0 + сторож п…
Platonenkov Aug 12, 2026
a578a23
feat(codec)!: MPT-хопы (0x40) в PathSet, PathStepType вместо int в ша…
Platonenkov Aug 12, 2026
a11ae93
fix(tests): мок-сервер переставал принимать соединения после одного о…
Platonenkov Aug 12, 2026
5e6ed6e
perf(json): кэш производных JsonSerializerOptions в конвертерах + фик…
Platonenkov Aug 12, 2026
d3c8f50
fix(sugar): не глотать отмену в fallback-ах autofill + ValidationExce…
Platonenkov Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ci-config/Dockerfile.nightly
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ RUN install -m 0755 -d /usr/share/keyrings \
# rippled was renamed to xrpld on the develop branch; the nightly channel publishes it as the "xrpld" package.
# The version must be pinned: the timestamp format changed from 14 to 12 digits mid-2026,
# so Debian version ordering ranks old 14-digit builds above the newer 12-digit ones.
ARG XRPLD_VERSION=3.3.0~b1+202607110018.8306ac77-1
ARG XRPLD_VERSION=3.4.0~b0+202608111815.26cc683e-1
RUN echo "deb [signed-by=/usr/share/keyrings/ripple-key.gpg] https://repos.ripple.com/repos/rippled-deb jammy nightly" > /etc/apt/sources.list.d/ripple.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends --allow-downgrades "xrpld=${XRPLD_VERSION}" \
Expand Down
121 changes: 121 additions & 0 deletions .ci-config/bump-nightly-pin.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
#!/usr/bin/env bash
# Move the nightly stand to the newest xrpld build published in the nightly apt
# channel: rewrite ARG XRPLD_VERSION in Dockerfile.nightly and regenerate
# rippled.batchv11.cfg from the matching develop commit.
#
# Why this needs to happen regularly, not only when a new amendment is wanted:
# definitions-watch raises its stand from docker-compose.batchv11.yml, i.e. from
# THIS pin. While the pin is stale the weekly monitor diffs definitions.json
# against a build older than the one CI runs and reports "in sync" about the
# past — which is how rippled 3.3.0 renaming sfMutableFlags to sfImmutableFlags
# and moving SponsorshipSet onto delta fields reached the CI bump PR unnoticed.
#
# The generated config MUST come from the commit the pinned binary was built
# from: a newer ref can emit feature names the binary does not know, and rippled
# rejects unknown names in config at startup. The commit is taken from the
# version string itself, so the two cannot drift apart.
#
# Usage:
# .ci-config/bump-nightly-pin.sh # bump to the newest build
# .ci-config/bump-nightly-pin.sh --check # report only, change nothing
#
# Outputs (stdout, and $GITHUB_OUTPUT when set):
# old_version, new_version, new_ref, age_days (age of the CURRENT pin)
#
# Exit codes: 0 done or already current (see `bumped`), 1 error.

set -euo pipefail

PACKAGES_URL="https://repos.ripple.com/repos/rippled-deb/dists/jammy/nightly/binary-amd64/Packages"
DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKERFILE="$DIR/Dockerfile.nightly"
CFG="$DIR/rippled.batchv11.cfg"

check_only=false
if [ "${1:-}" = "--check" ]; then
check_only=true
elif [ $# -gt 0 ]; then
echo "usage: $(basename "$0") [--check]" >&2
exit 1
fi

for f in "$DOCKERFILE" "$CFG"; do
[ -f "$f" ] || { echo "error: not found: $f" >&2; exit 1; }
done

old_version=$(sed -n -E 's/^ARG XRPLD_VERSION=(.+)$/\1/p' "$DOCKERFILE")
if [ -z "$old_version" ]; then
echo "error: could not read ARG XRPLD_VERSION from $DOCKERFILE" >&2
exit 1
fi

packages=$(curl -sf --max-time 60 "$PACKAGES_URL") || {
echo "error: could not fetch $PACKAGES_URL" >&2
exit 1
}

# Version strings look like 3.4.0~b0+202608111815.26cc683e-1: upstream version,
# a build timestamp and the develop commit it was built from. The timestamp
# format shrank from 14 digits (YYYYMMDDHHMMSS) to 12 (YYYYMMDDHHMM) mid-2026,
# which is why plain version sorting ranks old builds above new ones and why the
# pin exists at all. Truncating both to YYYYMMDDHHMM makes them comparable.
newest=$(printf '%s\n' "$packages" \
| awk '/^Package: xrpld$/ { p = 1; next } /^Version: / { if (p) print $2; p = 0 }' \
| while IFS= read -r v; do
ts=$(printf '%s' "$v" | sed -n -E 's/.*\+([0-9]{12,14})\..*/\1/p')
[ -n "$ts" ] && printf '%s %s\n' "${ts:0:12}" "$v"
done \
| LC_ALL=C sort -k1,1n | tail -1)

if [ -z "$newest" ]; then
echo "error: no parseable xrpld versions in the nightly Packages index" >&2
exit 1
fi

new_version=${newest#* }
new_ts=${newest%% *}
new_ref=$(printf '%s' "$new_version" | sed -n -E 's/.*\+[0-9]{12,14}\.([0-9a-f]+).*/\1/p')
if [ -z "$new_ref" ]; then
echo "error: could not extract the develop commit from '$new_version'" >&2
exit 1
fi

old_ts=$(printf '%s' "$old_version" | sed -n -E 's/.*\+([0-9]{12,14})\..*/\1/p')
old_ts=${old_ts:0:12}
age_days=""
if [ -n "$old_ts" ]; then
old_epoch=$(date -u -d "${old_ts:0:8} ${old_ts:8:2}:${old_ts:10:2}" +%s 2>/dev/null || echo "")
if [ -n "$old_epoch" ]; then
age_days=$(( ( $(date -u +%s) - old_epoch ) / 86400 ))
fi
fi

bumped=false
if [ "$old_version" = "$new_version" ]; then
echo "Nightly pin is already the newest build ($old_version)."
elif [ "$check_only" = true ]; then
echo "Nightly pin $old_version is behind $new_version (build ${new_ts}); run without --check to bump."
else
# Match the whole value so a partially-rewritten pin cannot survive.
sed -i -E "s#^ARG XRPLD_VERSION=.+\$#ARG XRPLD_VERSION=${new_version}#" "$DOCKERFILE"
written=$(sed -n -E 's/^ARG XRPLD_VERSION=(.+)$/\1/p' "$DOCKERFILE")
if [ "$written" != "$new_version" ]; then
echo "error: rewriting ARG XRPLD_VERSION failed (file now holds '$written')" >&2
exit 1
fi
bash "$DIR/generate-amendments.sh" "$new_ref" "$CFG"
bumped=true
echo "Nightly pin bumped: $old_version -> $new_version (ref $new_ref)."
fi

[ -n "$age_days" ] && echo "Current pin age before this run: ${age_days}d."

if [ -n "${GITHUB_OUTPUT:-}" ]; then
{
echo "old_version=$old_version"
echo "new_version=$new_version"
echo "new_ref=$new_ref"
echo "age_days=${age_days:-unknown}"
echo "bumped=$bumped"
} >> "$GITHUB_OUTPUT"
fi
2 changes: 1 addition & 1 deletion .ci-config/docker-compose.ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
xrpld:
image: xrpllabsofficial/xrpld:3.2.0
image: xrpllabsofficial/xrpld:3.3.0
container_name: rippled-service
command: ["-a", "--start"]
ports:
Expand Down
4 changes: 2 additions & 2 deletions .ci-config/rippled.batchv11.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,13 @@ TokenEscrow
XChainBridge
XRPFees
fixAMMClawbackRounding
fixAMMOverflowOffer
fixAMMv1_1
fixAMMv1_2
fixAMMv1_3
fixCleanup3_1_3
fixCleanup3_2_0
fixCleanup3_3_0
fixCleanup3_4_0
fixDirectoryLimit
fixEmptyDID
fixEnforceNFTokenTrustline
Expand Down Expand Up @@ -175,13 +175,13 @@ BE1F90581635DBCEBFC4678C4B54FEDDC1A17B50FD02CFE765A4132A342126AC Sponsor
C98D98EE9616ACD36E81FDEB8D41D349BF5F1B41DD64A0ABC1FE9AA5EA267E9C XChainBridge
93E516234E35E08CA689FA33A6D38E103881F8DCB53023F728C307AA89D515A7 XRPFees
5E9586DB3D765B4C5794658FB6BB385071E9838DF4016027E6E26820C8526724 fixAMMClawbackRounding
12523DF04B553A0B1AD74F42DDB741DE8DC06A03FC089A0EF197E2A87F1D8107 fixAMMOverflowOffer
35291ADD2D79EB6991343BDA0912269C817D0F094B02226C1C14AD2858962ED4 fixAMMv1_1
1E7ED950F2F13C4F8E2A54103B74D57D5D298FFDBD005936164EE9E6484C438C fixAMMv1_2
7CA70A7674A26FA517412858659EBC7EDEEF7D2D608824464E6FDEFD06854E14 fixAMMv1_3
303ACB16CF8DBD3B5C34F131A9D19A7DE01AE05F480A8A682B869D1B4AAC8CFC fixCleanup3_1_3
21B8D2F76F68E11E9C077A43BBBC394136E9987E99DDB73966DD68419467E431 fixCleanup3_2_0
3298D47E1F3A8A24FECAA30F699B8FE1DD234E072834BA099AD8180FFCE0FEC4 fixCleanup3_3_0
98433DD001A5737F773D74F8CA2A25A065089C73B2E611C760BAF369E4FECA76 fixCleanup3_4_0
41765F664A8D67FF03DDB1C1A893DE6273690BA340A6C2B07C8D29D0DD013D3A fixDirectoryLimit
755C971C29971C9F20C6F080F2ED96F87884E40AD19554A5EBECDCEC8A1F77FE fixEmptyDID
763C37B352BE8C7A04E810F8E462644C45AFEAD624BF3894A08E5C917CF9FF39 fixEnforceNFTokenTrustline
Expand Down
22 changes: 12 additions & 10 deletions .ci-config/rippled.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -103,19 +103,23 @@ validators.txt
# retired/unknown feature names at startup.
AMM
AMMClawback
Clawback
BatchV1_1
ConfidentialTransfer
Credentials
DID
DeepFreeze
DynamicMPT
DynamicNFT
LendingProtocol
MPTokensV1
MPTokensV2
NFTokenMintOffer
PermissionDelegationV1_1
PermissionedDEX
PermissionedDomains
PriceOracle
SingleAssetVault
Sponsor
TokenEscrow
XChainBridge
XRPFees
Expand All @@ -126,27 +130,24 @@ fixAMMv1_2
fixAMMv1_3
fixCleanup3_1_3
fixCleanup3_2_0
fixCleanup3_3_0
fixDirectoryLimit
fixDisallowIncomingV1
fixEmptyDID
fixEnforceNFTokenTrustline
fixEnforceNFTokenTrustlineV2
fixFillOrKill
fixFrozenLPTokenTransfer
fixIncludeKeyletFields
fixInnerObjTemplate
fixInnerObjTemplate2
fixInvalidTxFlags
fixMPTDeliveredAmount
fixNFTokenPageLinks
fixNFTokenReserve
fixPayChanCancelAfter
fixPreviousTxnID
fixPriceOracleOrder
fixReducedOffersV2
fixRemoveNFTokenAutoTrustLine
fixTokenEscrowV1
fixUniversalNumber
fixXChainRewardRounding

[network_id]
Expand All @@ -162,18 +163,22 @@ fixXChainRewardRounding
# Supported::No ones (e.g. MPTokensV2) live in [features] as Rules presets.
8CC0774A3BF66D1D22E76BBDA8E8A232E6B6313834301B3B23E8601196AE6455 AMM
726F944886BCDF7433203787E93DD9AA87FAB74DFE3AF4785BA03BEFC97ADA1F AMMClawback
56B241D7A43D40354D02A9DC4C8DF5C7A1F930D92A9035C4E12291B3CA3E1C2B Clawback
9F287AED3CDB50A7BD1ACEC24296A30C9B5230CCD136219317AC790E3B884377 BatchV1_1
2110E4A19966E2EF517C0A8C56A5F35099D7665B0BB89D7B126B30D50B86AAD5 ConfidentialTransfer
1CB67D082CF7D9102412D34258CEDB400E659352D3B207348889297A6D90F5EF Credentials
DB432C3A09D9D5DFC7859F39AE5FF767ABC59AED0A9FB441E83B814D8946C109 DID
DAF3A6EB04FA5DC51E8E4F23E9B7022B693EFA636F23F22664746C77B5786B23 DeepFreeze
58E92F338758479C06084E1B6BA366BAD8F75E5329A7F0EEAFFFDA51E5106B7F DynamicMPT
C1CE18F2A268E6A849C27B3DE485006771B4C01B2FCEC4F18356FE92ECD6BB74 DynamicNFT
565B90CA1AB2B9D42208ED10884188C64F9E19083DECB9634AAF06EB03299509 LendingProtocol
950AE2EA4654E47F04AA8739C0B214E242097E802FD372D24047A89AB1F5EC38 MPTokensV1
EE3CF852F0506782D05E65D49E5DCC3D16D50898CD1B646BAE274863401CC3CE NFTokenMintOffer
0F48FF561C709540328F31F1C97FD512ACC8B4E42138A161CB0E21ECA292540B PermissionDelegationV1_1
677E401A423E3708363A36BA8B3A7D019D21AC5ABD00387BDBEA6BDE4C91247E PermissionedDEX
A730EB18A9D4BB52502C898589558B4CCEB4BE10044500EE5581137A2E80E849 PermissionedDomains
96FD2F293A519AE1DB6F8BED23E4AD9119342DA7CB6BAFD00953D16C54205D8B PriceOracle
81BD2619B6B3C8625AC5D0BC01DE17F06C3F0AB95C7C87C93715B87A4FD240D8 SingleAssetVault
BE1F90581635DBCEBFC4678C4B54FEDDC1A17B50FD02CFE765A4132A342126AC Sponsor
138B968F25822EFBF54C00F97031221C47B1EAB8321D93C7C2AEAF85F04EC5DF TokenEscrow
C98D98EE9616ACD36E81FDEB8D41D349BF5F1B41DD64A0ABC1FE9AA5EA267E9C XChainBridge
93E516234E35E08CA689FA33A6D38E103881F8DCB53023F728C307AA89D515A7 XRPFees
Expand All @@ -184,26 +189,23 @@ C98D98EE9616ACD36E81FDEB8D41D349BF5F1B41DD64A0ABC1FE9AA5EA267E9C XChainBridge
7CA70A7674A26FA517412858659EBC7EDEEF7D2D608824464E6FDEFD06854E14 fixAMMv1_3
303ACB16CF8DBD3B5C34F131A9D19A7DE01AE05F480A8A682B869D1B4AAC8CFC fixCleanup3_1_3
21B8D2F76F68E11E9C077A43BBBC394136E9987E99DDB73966DD68419467E431 fixCleanup3_2_0
3298D47E1F3A8A24FECAA30F699B8FE1DD234E072834BA099AD8180FFCE0FEC4 fixCleanup3_3_0
41765F664A8D67FF03DDB1C1A893DE6273690BA340A6C2B07C8D29D0DD013D3A fixDirectoryLimit
15D61F0C6DB6A2F86BCF96F1E2444FEC54E705923339EC175BD3E517C8B3FF91 fixDisallowIncomingV1
755C971C29971C9F20C6F080F2ED96F87884E40AD19554A5EBECDCEC8A1F77FE fixEmptyDID
763C37B352BE8C7A04E810F8E462644C45AFEAD624BF3894A08E5C917CF9FF39 fixEnforceNFTokenTrustline
B32752F7DCC41FB86534118FC4EEC8F56E7BD0A7DB60FD73F93F257233C08E3A fixEnforceNFTokenTrustlineV2
3318EA0CF0755AF15DAC19F2B5C5BCBFF4B78BDD57609ACCAABE2C41309B051A fixFillOrKill
83FD6594FF83C1D105BD2B41D7E242D86ECB4A8220BD9AF4DA35CB0F69E39B2A fixFrozenLPTokenTransfer
6143A27B71F7DAF9330ECA7C5EC3D54C8083A4FDEF7016737EEC06AB61E82EE0 fixIncludeKeyletFields
C393B3AEEBF575E475F0C60D5E4241B2070CC4D0EB6C4846B1A07508FAEFC485 fixInnerObjTemplate
9196110C23EA879B4229E51C286180C7D02166DA712559F634372F5264D0EC59 fixInnerObjTemplate2
8EC4304A06AF03BE953EA6EDA494864F6F3F30AA002BABA35869FBB8C6AE5D52 fixInvalidTxFlags
AB8D932A5F338903FE5BCBD80B611FFED70839ABA3170E9CE01D947C0EDEDCF2 fixMPTDeliveredAmount
C7981B764EC4439123A86CC7CCBA436E9B3FF73B3F10A0AE51882E404522FC41 fixNFTokenPageLinks
03BDC0099C4E14163ADA272C1B6F6FABB448CC3E51F522F978041E4B57D9158C fixNFTokenReserve
D3456A862DC07E382827981CA02E21946E641877F19B8889031CC57FDCAC83E2 fixPayChanCancelAfter
7BB62DC13EC72B775091E9C71BF8CF97E122647693B50C5E87A80DFD6FCFAC50 fixPreviousTxnID
FF2D1E13CF6D22427111B967BD504917F63A900CECD320D6FD3AC9FA90344631 fixPriceOracleOrder
31E0DA76FB8FB527CADCDF0E61CB9C94120966328EFA9DCA202135BAF319C0BA fixReducedOffersV2
DF8B4536989BDACE3F934F29423848B9F1D76D09BE6A1FCFE7E7F06AA26ABEAD fixRemoveNFTokenAutoTrustLine
32B8614321F7E070419115ABEAB1742EA20F3E3AF34432B5E2F474F8083260DC fixTokenEscrowV1
2E2FB9CF8A44EB80F4694D38AADAE9B8B7ADAFD2F092E10068E61C98C4F092B0 fixUniversalNumber
2BF037D90E1B676B17592A8AF55E88DB465398B4B597AE46EECEE1399AB05699 fixXChainRewardRounding

3 changes: 3 additions & 0 deletions .github/workflows/definitions-watch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ name: Definitions Watch
#
# "develop" here = the pinned xrpld version in .ci-config/Dockerfile.nightly, not
# the literal develop tip; the tip moving is covered separately by protocol-watch.
#
# The pin is therefore this check's horizon: against a stale pin the diff reports
# "in sync" about the past. nightly-pin-watch.yml keeps it moving.

on:
schedule:
Expand Down
Loading
Loading