rippled führt Invariante ein: MPT-Ausgabeflags dürfen nie gelöscht werden, nach Prüfung des Lending-Codes
Der XRP-Ledger-Server rippled hat am 6. Oktober den Pull Request #8152 „fix: Enforce that MPT issuance flags are never cleared“ übernommen. Autor ist tyalymov.
Woher es kam. Eine externe Prüfung des Lending-Codes bemängelte, dass LoanPay eine Brokergebühr in einem Multi-Purpose Token (MPT) vom Kreditnehmer an den Broker-Inhaber überweist, ohne lsfMPTCanTransfer zu prüfen – das Flag, das einen Token als übertragbar kennzeichnet. Die Analyse ergab, dass der gefährliche Zustand unerreichbar ist: Das Flag lässt sich nach der Erstellung ein-, aber nie ausschalten, und VaultCreate lehnt nicht übertragbare Assets seit dem ersten Vault-Commit ab; kein Vault und damit kein Kredit kann einen solchen Token halten.

Der Haken. Diese Schlussfolgerung beruht auf einer Annahme: Ausgabeflags werden nie zurückgesetzt. Bisher sicherte das nur der Code von MPTokenIssuanceSet, der konstruktionsbedingt Flags nur hinzufügt.
Die Lösung. Statt LoanPay um eine Übertragbarkeitsprüfung zu ergänzen (frühere Commits des Zweigs taten das und wurden zurückgenommen), nimmt der Pull Request die Annahme selbst in die Invariante ValidMPTIssuance auf: Keine Transaktion darf ein Flag einer MPTokenIssuance löschen. Einzige Ausnahme ist lsfMPTLocked, das tfMPTUnlock legitim entfernt. Eine Transaktion, die die Regel bricht, scheitert mit tecINVARIANT_FAILED.
Was sich für Nutzer ändert. Heute nichts. Die Prüfung hängt am Amendment fixCleanup3_5_0 und greift laut Autoren „nur, wenn ein künftiger Fehler“ einen Pfad zum Löschen eines Flags einführt. Sie macht aus einer Annahme, die nur durch die Bauweise einer Funktion galt, eine Regel, die das Ledger durchsetzt.