Xrpl/Models/Transactions/TrustSet.cs:63:
public TrustSet()
{
TransactionType = TransactionType.TrustSet;
Flags = TrustSetFlags.tfSetNoRipple;
}
new TrustSet { Account = ..., LimitAmount = ... } — транзакция, которая помимо предела меняет NoRipple. Ни в одном другом типе транзакций конструктор флагов не ставит.
Почему это дорого
NoRipple — не оформление. Он решает, может ли выпущенная валюта проходить через счёт транзитом, и его состояние по умолчанию зависит от DefaultRipple самого счёта. Изменение флага незаметно ни в коде (Flags нигде не упомянут), ни в обзоре: чтобы увидеть, надо открыть конструктор SDK.
На стороне потребителя это выглядит как «поменяли предел — почему-то поменялся и режим линии». Обратный случай хуже: снимая NoRipple, надо явно писать Flags = 0, иначе конструктор его вернёт, и TrustSet тихо сделает противоположное задуманному.
У нас в приложении из-за этого стоит правило «Flags у TrustSet проставляются всегда, включая ноль», с комментарием, объясняющим почему. Правило существует только ради этого умолчания.
Предложение
Не ставить флаг в конструкторе — Flags остаётся null, как у всех остальных транзакций. Тем, кому нужен именно tfSetNoRipple, оставить явное присваивание либо фабрику:
public static TrustSet NoRipple(string account, Currency limitAmount) => new()
{
Account = account,
LimitAmount = limitAmount,
Flags = TrustSetFlags.tfSetNoRipple,
};
Изменение ломающее по поведению, поэтому просится в тот же выпуск, что и прочие !-правки, с явной строкой в CHANGELOG.
Xrpl/Models/Transactions/TrustSet.cs:63:new TrustSet { Account = ..., LimitAmount = ... }— транзакция, которая помимо предела меняетNoRipple. Ни в одном другом типе транзакций конструктор флагов не ставит.Почему это дорого
NoRipple— не оформление. Он решает, может ли выпущенная валюта проходить через счёт транзитом, и его состояние по умолчанию зависит отDefaultRippleсамого счёта. Изменение флага незаметно ни в коде (Flagsнигде не упомянут), ни в обзоре: чтобы увидеть, надо открыть конструктор SDK.На стороне потребителя это выглядит как «поменяли предел — почему-то поменялся и режим линии». Обратный случай хуже: снимая
NoRipple, надо явно писатьFlags = 0, иначе конструктор его вернёт, иTrustSetтихо сделает противоположное задуманному.У нас в приложении из-за этого стоит правило «
FlagsуTrustSetпроставляются всегда, включая ноль», с комментарием, объясняющим почему. Правило существует только ради этого умолчания.Предложение
Не ставить флаг в конструкторе —
Flagsостаётсяnull, как у всех остальных транзакций. Тем, кому нужен именноtfSetNoRipple, оставить явное присваивание либо фабрику:Изменение ломающее по поведению, поэтому просится в тот же выпуск, что и прочие
!-правки, с явной строкой в CHANGELOG.