@@ -2183,7 +2183,8 @@ TER
2183
2183
requireAuth (
2184
2184
ReadView const & view,
2185
2185
MPTIssue const & mptIssue,
2186
- AccountID const & account)
2186
+ AccountID const & account,
2187
+ uint256* domainId)
2187
2188
{
2188
2189
auto const mptID = keylet::mptIssuance (mptIssue.getMptID ());
2189
2190
auto const sleIssuance = view.read (mptID);
@@ -2220,7 +2221,12 @@ requireAuth(
2220
2221
if (auto const err =
2221
2222
credentials::validDomain (view, *maybeDomainID, account);
2222
2223
!isTesSuccess (err))
2224
+ {
2225
+ if (err != tecINVALID_DOMAIN && domainId != nullptr )
2226
+ (*domainId) = *maybeDomainID;
2227
+
2223
2228
return err;
2229
+ }
2224
2230
2225
2231
// We are authorized by permissioned domain.
2226
2232
return tesSUCCESS;
@@ -2237,16 +2243,17 @@ enforceMPTokenAuthorization(
2237
2243
auto const mptIssuanceID = mptIssue.getMptID ();
2238
2244
auto const sleIssuance = view.read (keylet::mptIssuance (mptIssuanceID));
2239
2245
if (!sleIssuance)
2240
- return tefINTERNAL; // Should have called requireAuth earlier
2246
+ return tefINTERNAL;
2241
2247
2242
2248
XRPL_ASSERT (
2243
- sleIssuance->getFieldU32 (sfFlags ) & lsfMPTRequireAuth,
2249
+ sleIssuance->getFlags ( ) & lsfMPTRequireAuth,
2244
2250
" ripple::verifyAuth : MPTokenIssuance requires authorization" );
2245
2251
2246
2252
if (account == sleIssuance->at (sfIssuer))
2247
2253
return tesSUCCESS; // Won't create MPToken for the token issuer
2248
2254
2249
- auto sleToken = view.read (keylet::mptoken (mptIssuanceID, account));
2255
+ auto const keylet = keylet::mptoken (mptIssuanceID, account);
2256
+ auto sleToken = view.read (keylet);
2250
2257
bool const domainOwned =
2251
2258
(sleToken && (sleToken->getFlags () & lsfMPTDomainCheck));
2252
2259
@@ -2282,16 +2289,15 @@ enforceMPTokenAuthorization(
2282
2289
{
2283
2290
// We found an MPToken with lsfMPTDomainCheck flag, but the account is
2284
2291
// no longer authorized.
2285
- if (sleToken->getFieldU32 (sfFlags ) & lsfMPTAuthorized)
2292
+ if (sleToken->getFlags ( ) & lsfMPTAuthorized)
2286
2293
{
2287
2294
// Must reset lsfMPTAuthorized, no current credentials
2288
- auto sleMpt = view.peek (keylet::mptoken (mptIssuanceID, account) );
2295
+ auto sleMpt = view.peek (keylet);
2289
2296
XRPL_ASSERT (sleMpt, " ripple::verifyAuth : non-null bad MPToken" );
2290
- std::uint32_t const flags = sleMpt->getFieldU32 (sfFlags);
2291
- sleMpt->setFieldU32 (sfFlags, flags & ~lsfMPTAuthorized);
2297
+ sleMpt->clearFlag (lsfMPTAuthorized);
2292
2298
view.update (sleMpt);
2293
2299
2294
- sleToken = nullptr ; // return tecNO_AUTH at the end of function
2300
+ sleToken = sleMpt ; // without lsfMPTAuthorized
2295
2301
}
2296
2302
}
2297
2303
else if (!authorizedByDomain)
@@ -2310,10 +2316,9 @@ enforceMPTokenAuthorization(
2310
2316
if ((sleToken->getFlags () & lsfMPTAuthorized) == 0 )
2311
2317
{
2312
2318
// Must set lsfMPTAuthorized, we found new credentials
2313
- auto sleMpt = view.peek (keylet::mptoken (mptIssuanceID, account) );
2319
+ auto sleMpt = view.peek (keylet);
2314
2320
XRPL_ASSERT (sleMpt, " ripple::verifyAuth : non-null good MPToken" );
2315
- std::uint32_t const flags = sleMpt->getFieldU32 (sfFlags);
2316
- sleMpt->setFieldU32 (sfFlags, flags | lsfMPTAuthorized);
2321
+ sleMpt->setFlag (lsfMPTAuthorized);
2317
2322
view.update (sleMpt);
2318
2323
2319
2324
sleToken = sleMpt; // with lsfMPTAuthorized
@@ -2334,11 +2339,9 @@ enforceMPTokenAuthorization(
2334
2339
!isTesSuccess (err))
2335
2340
return err;
2336
2341
2337
- auto sleMpt = view.peek (keylet::mptoken (mptIssuanceID, account) );
2342
+ auto sleMpt = view.peek (keylet);
2338
2343
XRPL_ASSERT (sleMpt, " ripple::verifyAuth : non-null new MPToken" );
2339
- std::uint32_t const flags = sleMpt->getFieldU32 (sfFlags);
2340
- sleMpt->setFieldU32 (
2341
- sfFlags, flags | lsfMPTDomainCheck | lsfMPTAuthorized);
2344
+ sleMpt->setFlag (lsfMPTDomainCheck | lsfMPTAuthorized);
2342
2345
view.update (sleMpt);
2343
2346
2344
2347
sleToken = sleMpt; // with lsfMPTAuthorized
0 commit comments