std::string LedgerEntryIsValid::checkIsValid(OfferEntry const& oe, uint32 version) const { if (oe.offerID > INT64_MAX) { return fmt::format("Offer offerID ({}) exceeds limit ({})", oe.offerID, INT64_MAX); } if (!isAssetValid(oe.selling)) { return "Offer selling asset is invalid"; } if (!isAssetValid(oe.buying)) { return "Offer buying asset is invalid"; } if (oe.amount <= 0) { return "Offer amount is not positive"; } if (oe.price.n <= 0 || oe.price.d < 1) { return fmt::format("Offer price ({} / {}) is invalid", oe.price.n, oe.price.d); } if ((oe.flags & ~MASK_OFFERENTRY_FLAGS) != 0) { return "Offer flags are invalid"; } return {}; }
std::string LedgerEntryIsValid::checkIsValid(TrustLineEntry const& tl, uint32 version) const { if (tl.asset.type() == ASSET_TYPE_NATIVE) { return "TrustLine asset is native"; } if (!isAssetValid(tl.asset)) { return "TrustLine asset is invalid"; } if (tl.balance < 0) { return fmt::format("TrustLine balance ({}) is negative", tl.balance); } if (tl.limit <= 0) { return fmt::format("TrustLine balance ({}) is not positive", tl.limit); } if (tl.balance > tl.limit) { return fmt::format("TrustLine balance ({}) exceeds limit ({})", tl.balance, tl.limit); } if ((tl.flags & ~MASK_TRUSTLINE_FLAGS) != 0) { return "TrustLine flags are invalid"; } return {}; }
bool ChangeTrustOpFrame::doCheckValid(medida::MetricsRegistry& metrics) { if (mChangeTrust.limit < 0) { metrics.NewMeter( {"op-change-trust", "invalid", "malformed-negative-limit"}, "operation").Mark(); innerResult().code(CHANGE_TRUST_MALFORMED); return false; } if (!isAssetValid(mChangeTrust.line)) { metrics.NewMeter( {"op-change-trust", "invalid", "malformed-invalid-asset"}, "operation").Mark(); innerResult().code(CHANGE_TRUST_MALFORMED); return false; } return true; }
bool AllowTrustOpFrame::doCheckValid(Application& app) { if (mAllowTrust.asset.type() == ASSET_TYPE_NATIVE) { app.getMetrics() .NewMeter({"op-allow-trust", "invalid", "malformed-non-alphanum"}, "operation") .Mark(); innerResult().code(ALLOW_TRUST_MALFORMED); return false; } Asset ci; ci.type(mAllowTrust.asset.type()); if (mAllowTrust.asset.type() == ASSET_TYPE_CREDIT_ALPHANUM4) { ci.alphaNum4().assetCode = mAllowTrust.asset.assetCode4(); ci.alphaNum4().issuer = getSourceID(); } else if (mAllowTrust.asset.type() == ASSET_TYPE_CREDIT_ALPHANUM12) { ci.alphaNum12().assetCode = mAllowTrust.asset.assetCode12(); ci.alphaNum12().issuer = getSourceID(); } if (!isAssetValid(ci)) { app.getMetrics() .NewMeter({"op-allow-trust", "invalid", "malformed-invalid-asset"}, "operation") .Mark(); innerResult().code(ALLOW_TRUST_MALFORMED); return false; } return true; }
bool OfferFrame::isValid(OfferEntry const& oe) { return isAssetValid(oe.buying) && isAssetValid(oe.selling); }