std::string LedgerEntryIsValid::checkIsValid(DataEntry const& de, uint32 version) const { if (de.dataName.size() == 0) { return "Data dataName is empty"; } if (!isString32Valid(de.dataName)) { return "Data dataName is invalid"; } return {}; }
std::string LedgerEntryIsValid::checkIsValid(AccountEntry const& ae, uint32 version) const { if (ae.balance < 0) { return fmt::format("Account balance ({}) is negative", ae.balance); } if (ae.seqNum < 0) { return fmt::format("Account seqNum ({}) is negative", ae.seqNum); } if (ae.numSubEntries > INT32_MAX) { return fmt::format("Account numSubEntries ({}) exceeds limit ({})", ae.numSubEntries, INT32_MAX); } if ((ae.flags & ~MASK_ACCOUNT_FLAGS) != 0) { return "Account flags are invalid"; } if (!isString32Valid(ae.homeDomain)) { return "Account homeDomain is invalid"; } if (std::adjacent_find(ae.signers.begin(), ae.signers.end(), [](Signer const& s1, Signer const& s2) { return !signerCompare(s1, s2); }) != ae.signers.end()) { return "Account signers are not strictly increasing"; } if (version > 9) { if (!std::all_of(ae.signers.begin(), ae.signers.end(), [](Signer const& s) { return (s.weight <= UINT8_MAX) && (s.weight != 0); })) { return "Account signers have invalid weights"; } } return {}; }
bool SetOptionsOpFrame::doCheckValid(uint32_t ledgerVersion) { if (mSetOptions.setFlags) { if (*mSetOptions.setFlags & ~allAccountFlags) { innerResult().code(SET_OPTIONS_UNKNOWN_FLAG); return false; } } if (mSetOptions.clearFlags) { if (*mSetOptions.clearFlags & ~allAccountFlags) { innerResult().code(SET_OPTIONS_UNKNOWN_FLAG); return false; } } if (mSetOptions.setFlags && mSetOptions.clearFlags) { if ((*mSetOptions.setFlags & *mSetOptions.clearFlags) != 0) { innerResult().code(SET_OPTIONS_BAD_FLAGS); return false; } } if (mSetOptions.masterWeight) { if (*mSetOptions.masterWeight > UINT8_MAX) { innerResult().code(SET_OPTIONS_THRESHOLD_OUT_OF_RANGE); return false; } } if (mSetOptions.lowThreshold) { if (*mSetOptions.lowThreshold > UINT8_MAX) { innerResult().code(SET_OPTIONS_THRESHOLD_OUT_OF_RANGE); return false; } } if (mSetOptions.medThreshold) { if (*mSetOptions.medThreshold > UINT8_MAX) { innerResult().code(SET_OPTIONS_THRESHOLD_OUT_OF_RANGE); return false; } } if (mSetOptions.highThreshold) { if (*mSetOptions.highThreshold > UINT8_MAX) { innerResult().code(SET_OPTIONS_THRESHOLD_OUT_OF_RANGE); return false; } } if (mSetOptions.signer) { auto isSelf = mSetOptions.signer->key == KeyUtils::convertKey<SignerKey>(getSourceID()); auto isPublicKey = KeyUtils::canConvert<PublicKey>(mSetOptions.signer->key); if (isSelf || (!isPublicKey && ledgerVersion < 3)) { innerResult().code(SET_OPTIONS_BAD_SIGNER); return false; } if (mSetOptions.signer->weight > UINT8_MAX && ledgerVersion > 9) { innerResult().code(SET_OPTIONS_BAD_SIGNER); return false; } } if (mSetOptions.homeDomain) { if (!isString32Valid(*mSetOptions.homeDomain)) { innerResult().code(SET_OPTIONS_INVALID_HOME_DOMAIN); return false; } } return true; }