mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-04 02:52:38 +00:00
fix bugs and inconsistencies
This commit is contained in:
@@ -75,7 +75,7 @@ public:
|
||||
AccountID const& account,
|
||||
std::uint32_t const flags)
|
||||
{
|
||||
WritableMPToken mptoken(issuance, account);
|
||||
WritableMPToken mptoken = makeNew(issuance, account);
|
||||
|
||||
auto const ownerNode = mptoken.applyView().dirInsert(
|
||||
keylet::ownerDir(account), mptoken->key(), describeOwnerDir(account));
|
||||
@@ -83,18 +83,40 @@ public:
|
||||
if (!ownerNode)
|
||||
return tecDIR_FULL; // LCOV_EXCL_LINE
|
||||
|
||||
mptoken.newSLE();
|
||||
|
||||
(*mptoken)[sfAccount] = account;
|
||||
(*mptoken)[sfMPTokenIssuanceID] = issuance.getMptID();
|
||||
(*mptoken)[sfFlags] = flags;
|
||||
(*mptoken)[sfOwnerNode] = *ownerNode;
|
||||
|
||||
mptoken.insert();
|
||||
|
||||
return tesSUCCESS;
|
||||
}
|
||||
|
||||
/** Create a WritableMPToken backed by a brand-new SLE
|
||||
* (not yet inserted into the view).
|
||||
*/
|
||||
[[nodiscard]] static WritableMPToken
|
||||
makeNew(WritableMPTokenIssuance& issuance, AccountID const& holder)
|
||||
{
|
||||
return WritableMPToken(
|
||||
issuance, holder, std::make_shared<SLE>(keylet::mptoken(issuance.getMptID(), holder)));
|
||||
}
|
||||
|
||||
private:
|
||||
// This is a private constructor only used by `makeNew`
|
||||
WritableMPToken(
|
||||
WritableMPTokenIssuance& issuance,
|
||||
AccountID const& holder,
|
||||
std::shared_ptr<SLE> sle)
|
||||
: ReadOnlySLE(sle, issuance.applyView())
|
||||
, TokenHolderBase(issuance.applyView(), sle, issuance, holder)
|
||||
, WritableSLE(sle, issuance.applyView())
|
||||
, WritableTokenHolderBase(issuance.applyView(), sle, issuance, holder)
|
||||
, MPToken(issuance, holder)
|
||||
, writableIssuance_(issuance)
|
||||
{
|
||||
insert();
|
||||
}
|
||||
|
||||
protected:
|
||||
WritableMPTokenIssuance& writableIssuance_;
|
||||
};
|
||||
|
||||
@@ -90,15 +90,6 @@ public:
|
||||
return writableIOUToken_;
|
||||
}
|
||||
|
||||
static Expected<WritableRippleState, TER>
|
||||
makeNew(WritableIOUToken& token, AccountID const& accountID, beast::Journal journal)
|
||||
{
|
||||
auto const ter = token.addEmptyHolding(accountID, XRPAmount{0}, journal);
|
||||
if (ter != tesSUCCESS)
|
||||
return Unexpected(ter);
|
||||
return WritableRippleState{token.applyView(), token, accountID};
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
// Trust line operations
|
||||
@@ -137,6 +128,29 @@ public:
|
||||
AccountID const& uHighAccountID,
|
||||
beast::Journal j);
|
||||
|
||||
/** Create a WritableRippleState backed by a brand-new SLE
|
||||
* (not yet inserted into the view).
|
||||
*/
|
||||
[[nodiscard]] static WritableRippleState
|
||||
makeNew(WritableIOUToken& token, AccountID const& holder)
|
||||
{
|
||||
return WritableRippleState(
|
||||
token, holder, std::make_shared<SLE>(keylet::line(holder, token.getIssue())));
|
||||
}
|
||||
|
||||
private:
|
||||
// This is a private constructor only used by `makeNew`
|
||||
WritableRippleState(WritableIOUToken& token, AccountID const& holder, std::shared_ptr<SLE> sle)
|
||||
: ReadOnlySLE(sle, token.applyView())
|
||||
, TokenHolderBase(token.applyView(), sle, token, holder)
|
||||
, WritableSLE(sle, token.applyView())
|
||||
, WritableTokenHolderBase(token.applyView(), sle, token, holder)
|
||||
, RippleState(token, holder)
|
||||
, writableIOUToken_(token)
|
||||
{
|
||||
insert();
|
||||
}
|
||||
|
||||
protected:
|
||||
WritableIOUToken& writableIOUToken_;
|
||||
};
|
||||
|
||||
@@ -49,6 +49,12 @@ public:
|
||||
return currency_;
|
||||
}
|
||||
|
||||
[[nodiscard]] Issue const&
|
||||
getIssue() const
|
||||
{
|
||||
return issue_;
|
||||
}
|
||||
|
||||
[[nodiscard]] bool
|
||||
isGlobalFrozen() const override
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user