TER SetSignerList::removeSignersFromLedger (Keylet const& accountKeylet, Keylet const& ownerDirKeylet, Keylet const& signerListKeylet) { // We have to examine the current SignerList so we know how much to // reduce the OwnerCount. SLE::pointer signers = view().peek (signerListKeylet); // If the signer list doesn't exist we've already succeeded in deleting it. if (!signers) return tesSUCCESS; STArray const& actualList = signers->getFieldArray (sfSignerEntries); int const removeFromOwnerCount = ownerCountDelta (actualList.size()) * -1; // Remove the node from the account directory. auto const hint = (*signers)[sfOwnerNode]; auto viewJ = ctx_.app.journal ("View"); TER const result = dirDelete(ctx_.view(), false, hint, ownerDirKeylet.key, signerListKeylet.key, false, (hint == 0), viewJ); if (result == tesSUCCESS) adjustOwnerCount(view(), view().peek(accountKeylet), removeFromOwnerCount, viewJ); ctx_.view().erase (signers); return result; }