fix OwnerCount

This commit is contained in:
tequ
2025-07-31 00:12:09 +09:00
parent d40f8cc232
commit 198ed72fe3
4 changed files with 41 additions and 30 deletions

View File

@@ -91,9 +91,10 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(alice, 0));
env.require(owners(alice, 1));
env.require(sponsored_owners(alice, 1));
env.require(sponsoring_count(sponsor, 1));
env.require(sponsoring_owners(alice, 0));
env.require(sponsoring_owners(sponsor, 1));
// CheckCancel
auto const checkId = keylet::check(alice, seq).key;
@@ -102,7 +103,7 @@ public:
env.require(owners(alice, 0));
env.require(sponsored_owners(alice, 0));
env.require(sponsoring_count(sponsor, 0));
env.require(sponsoring_owners(sponsor, 0));
auto const seq2 = env.seq(alice);
env(check::create(alice, bob, XRP(1)),
@@ -110,6 +111,11 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(alice, 1));
env.require(sponsored_owners(alice, 1));
env.require(sponsoring_owners(alice, 0));
env.require(sponsoring_owners(sponsor, 1));
// CheckCash
auto const checkId2 = keylet::check(alice, seq2).key;
env(check::cash(bob, checkId2, XRP(1)));
@@ -117,7 +123,7 @@ public:
env.require(owners(alice, 0));
env.require(sponsored_owners(alice, 0));
env.require(sponsoring_count(sponsor, 0));
env.require(sponsoring_owners(sponsor, 0));
// printf(
// "meta: %s\n",
@@ -145,9 +151,10 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(alice, 0));
env.require(owners(alice, 1));
env.require(sponsored_owners(alice, 1));
env.require(sponsoring_count(sponsor, 1));
env.require(sponsoring_owners(alice, 0));
env.require(sponsoring_owners(sponsor, 1));
// OfferCancel
env(offer_cancel(alice, seq));
@@ -155,9 +162,10 @@ public:
env.require(owners(alice, 0));
env.require(sponsored_owners(alice, 0));
env.require(sponsoring_count(sponsor, 0));
env.require(sponsoring_owners(alice, 0));
env.require(sponsoring_owners(sponsor, 0));
// TODO: test Execution
// TODO: test Offer Execution
}
void
@@ -178,17 +186,18 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(alice, 0));
env.require(owners(alice, 250));
env.require(sponsored_owners(alice, 250));
env.require(sponsoring_count(sponsor, 250));
env.require(sponsoring_owners(alice, 0));
env.require(sponsoring_owners(sponsor, 250));
// use a Ticket
env(noop(alice), ticket::use(ticketSeq + 1));
env.close();
env.require(owners(alice, 0));
env.require(owners(alice, 249));
env.require(sponsored_owners(alice, 249));
env.require(sponsoring_count(sponsor, 249));
env.require(sponsoring_owners(sponsor, 249));
}
void
@@ -210,9 +219,11 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(issuer, 0));
env.require(owners(issuer, 1));
env.require(owners(subject, 0));
env.require(sponsored_owners(issuer, 1));
env.require(sponsoring_count(sponsor, 1));
env.require(sponsored_owners(subject, 0));
env.require(sponsoring_owners(sponsor, 1));
// CredentialsAccept
env(credentials::accept(subject, issuer, "credType"),
@@ -221,10 +232,10 @@ public:
env.close();
env.require(owners(issuer, 0));
env.require(owners(subject, 0));
env.require(owners(subject, 1));
env.require(sponsored_owners(issuer, 0));
env.require(sponsored_owners(subject, 1));
env.require(sponsoring_count(sponsor, 1));
env.require(sponsoring_owners(sponsor, 1));
// CredentialsDelete
env(credentials::deleteCred(subject, subject, issuer, "credType"));
@@ -234,7 +245,7 @@ public:
env.require(owners(subject, 0));
env.require(sponsored_owners(issuer, 0));
env.require(sponsored_owners(subject, 0));
env.require(sponsoring_count(sponsor, 0));
env.require(sponsoring_owners(sponsor, 0));
}
void
@@ -255,9 +266,9 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(alice, 0));
env.require(owners(alice, 1));
env.require(sponsored_owners(alice, 1));
env.require(sponsoring_count(sponsor, 1));
env.require(sponsoring_owners(sponsor, 1));
// delete
env(delegate::set(alice, bob, {}));
@@ -265,7 +276,7 @@ public:
env.require(owners(alice, 0));
env.require(sponsored_owners(alice, 0));
env.require(sponsoring_count(sponsor, 0));
env.require(sponsoring_owners(sponsor, 0));
}
void
@@ -291,9 +302,9 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(alice, 0));
env.require(owners(alice, 1));
env.require(sponsored_owners(alice, 1));
env.require(sponsoring_count(sponsor, 1));
env.require(sponsoring_owners(sponsor, 1));
// DIDDelete
env(did::del(alice));
@@ -301,7 +312,7 @@ public:
env.require(owners(alice, 0));
env.require(sponsored_owners(alice, 0));
env.require(sponsoring_count(sponsor, 0));
env.require(sponsoring_owners(sponsor, 0));
}
void
@@ -358,9 +369,9 @@ public:
sponsor::sig(sponsor));
env.close();
env.require(owners(alice, 0));
env.require(owners(alice, 1));
env.require(sponsored_owners(alice, 1));
env.require(sponsoring_count(sponsor, 1));
env.require(sponsoring_owners(sponsor, 1));
// Delete
env(signers(alice, none));
@@ -368,7 +379,7 @@ public:
env.require(owners(alice, 0));
env.require(sponsored_owners(alice, 0));
env.require(sponsoring_count(sponsor, 0));
env.require(sponsoring_owners(sponsor, 0));
}
void

View File

@@ -63,7 +63,7 @@ sponsored_owners::operator()(Env& env) const
}
void
sponsoring_count::operator()(Env& env) const
sponsoring_owners::operator()(Env& env) const
{
env.test.expect(
env.le(account_)->getFieldU32(sfSponsoringOwnerCount) == value_);

View File

@@ -103,14 +103,14 @@ public:
};
/** Match the number of items in the account's owner directory */
class sponsoring_count
class sponsoring_owners
{
private:
Account account_;
std::uint32_t value_;
public:
sponsoring_count(Account const& account, std::uint32_t value)
sponsoring_owners(Account const& account, std::uint32_t value)
: account_(account), value_(value)
{
}

View File

@@ -1089,6 +1089,7 @@ adjustOwnerCount(
}
{
// modify account's SponsoredOwnerCount
std::uint32_t const current{
accountSle->getFieldU32(sfSponsoredOwnerCount)};
AccountID const id = (*accountSle)[sfAccount];
@@ -1098,7 +1099,6 @@ adjustOwnerCount(
accountSle->setFieldU32(sfSponsoredOwnerCount, adjusted);
view.update(accountSle);
}
return;
}
std::uint32_t const current{accountSle->getFieldU32(sfOwnerCount)};
AccountID const id = (*accountSle)[sfAccount];