feat(protocol): sfLEVersion — версия схемы Vault (rippled #7817) - #74
Merged
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Platonenkov
changed the base branch from
claude/node-3-2-1-updates-901277
to
dev
August 4, 2026 17:13
protocol-watch сообщил 03.08 об изменении sfields.macro и ledger_entries.macro на develop. Изменение одно: TYPED_SFIELD(sfLEVersion, UINT8, 6) и его появление в ltVAULT как SoeDefault (rippled #7817, cash-basis accounting для LoanBroker). Поле помечает, по какой схеме учёта живёт хранилище. Хранилища, созданные до активации cash-basis, не несут LEVersion вовсе, и rippled трактует его отсутствие как версию 0 (VaultVersion::Legacy), а не как ошибку — то есть отсутствие значения осмысленно, это не потеря данных. * definitions.json + сгенерированный Field.Uint8. Нужны ОБА: definitions.json в рантайме не читается, он вход для Tools/GenerateEnums, поэтому поле, добавленное только туда, не доезжает никуда. Файл перегенерирован инструментом, а не правился руками * LOVault.LEVersion (uint?, как остальные UInt8-поля этого объекта) и enum VaultVersion (Legacy = 0, CashBasis = 1) — имена для значений, которые протокол определяет на сегодня * TestULEVersion_BinaryRoundTrip — именно он показал, что одного definitions.json мало: до кодогенерации кодек поля не знал и тест падал * TestULOVault_LEVersion_Deserialize — обе формы: поле присутствует, и legacy- хранилище без него десериализуется в null Xrpl.BinaryCodec поднят до 10.10.0.0 (minor: добавлено поле). Остальные base-пакеты не тронуты и сохраняют версии. Xrpl не бампится: 10.11.0.0 ещё не выпущен и уже описывает модельные правки этой серии. Проверено: сборка решения без ошибок, юнит-тесты 877/877.
Кодек везёт sfLEVersion, то есть меняется вместе с моделями, — держать его на собственной ветке нумерации незачем: потребитель читает один номер для обоих пакетов. Вместо следующего минора кодека (10.10.0.0) ставится 10.11.0.0. 10.10.x просто пропускается: последняя опубликованная версия Xrpl.BinaryCodec — 10.9.0, номер 10.10.0.0 на NuGet не выходил, так что ничего не переиспользуется и не переписывается. Xrpl.AddressCodec и Xrpl.Keypairs остаются на 10.9.0.0 — они не менялись.
Platonenkov
force-pushed
the
claude/vault-leversion-778740
branch
from
August 4, 2026 17:15
d584554 to
d85d856
Compare
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.
Зачем
3 августа
protocol-watchсообщил (issue #46) об измененииsfields.macroиledger_entries.macroнаdevelop. Изменение ровно одно:Источник — rippled #7817 «Implement LoanBroker cash-basis accounting», влит в
develop30.07.2026.Поле помечает, по какой схеме учёта живёт хранилище. Ключевая деталь семантики: хранилища, созданные до активации cash-basis accounting, не несут
LEVersionвовсе, и rippled трактует его отсутствие как версию 0 (VaultVersion::Legacy), а не как ошибку — то есть отсутствие значения осмысленно, это не потеря данных.Что сделано
definitions.json+ сгенерированныйField.Uint8.Generated.cs. Нужны оба:definitions.jsonв рантайме не читается, он вход дляTools/GenerateEnums. Поле, добавленное только туда, не доезжает никуда. Сгенерированный файл получен запуском инструмента, а не правкой руками.LOVault.LEVersion—uint?, как остальныеUInt8-поля этого объекта (Scale,WithdrawalPolicy), плюс enumVaultVersion(Legacy= 0,CashBasis= 1), дающий имена значениям, которые протокол определяет на сегодня. Тип свойства оставлен простым, а не enum'ом, — тем же решением, что и дляSignerListFlags/DirectoryNodeFlagsв feat(models): флаги ledger-объектов, гвард по LedgerFormats.h и покрытие DynamicMPT (10.11.0.0) #71.TestULEVersion_BinaryRoundTrip(кодек действительно возит поле) иTestULOVault_LEVersion_Deserialize(обе формы: поле присутствует; legacy-хранилище без него даётnull).Что поймал round-trip тест
Он и есть причина, по которой стоило писать тест, а не ограничиться правкой JSON: до кодогенерации тест падал — кодек про поле не знал,
decoded["LEVersion"]былnull. Правкаdefinitions.jsonсама по себе не даёт ничего, и без этой проверки поле молча не работало бы.Попутно всплыла деталь кодека, не требующая правок:
Uint8.FromJsonберётbyte, поэтомуJsonObjectсint-литералом падает сCan't decode 'Scale' from '6', а распарсенный из текста JSON (то, в каком виде приходит ответ ноды) работает. Тест использует второй путь.Версии
Xrpl.BinaryCodec10.9.0.0 → 10.10.0.0 — minor, добавлено поле. Остальные base-пакеты (Xrpl.AddressCodec,Xrpl.Keypairs) не тронуты и сохраняют версии по правилу изCLAUDE.md.Xrplне бампится:10.11.0.0из #71 ещё не выпущен и уже описывает модельные правки этой серии, поэтомуLOVault.LEVersionуезжает в тот же номер. Запись добавлена в существующий разделCHANGES.md.Проверка
devTools/GenerateEnums[Uint8] + LEVersion (nth: 6), остальные 22 файла без измененийИнтеграционного покрытия нет намеренно: поле появляется только на нодах с cash-basis accounting, а это
developпосле 30.07 — свежее, чем пин nightly-стенда (3.3.0~b1от 11.07). Когда стенд поднимут до сборки с #7817, поле можно будет проверить на живомVault.