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.

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