Skip to content

Конструктор TrustSet ставит tfSetNoRipple: линия меняет флаг, о котором вызывающий не просил #130

Description

@Platonenkov

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions