Nostrduino
Loading...
Searching...
No Matches
NostrAmount.h
Go to the documentation of this file.
1#ifndef NOSTR_AMOUNT_H
2#define NOSTR_AMOUNT_H
3
4#include <cstdint>
5#include <limits>
6#include <type_traits>
7
8#ifndef NOSTRDUINO_ENABLE_AMOUNT_GUARDS
9#define NOSTRDUINO_ENABLE_AMOUNT_GUARDS 1
10#endif
11
12#ifndef NOSTRDUINO_MAX_AMOUNT_MSATS
13#define NOSTRDUINO_MAX_AMOUNT_MSATS INT64_C(100000000000000)
14#endif
15
16namespace nostr {
17
27
28static constexpr MilliSats MILLISATS_UNSPECIFIED = INT64_C(-1);
29static constexpr MilliSats MAX_MILLISATS = NOSTRDUINO_MAX_AMOUNT_MSATS;
30
31static_assert(sizeof(MilliSats) == 8, "MilliSats must be a signed 64-bit integer");
32static_assert(std::is_signed<MilliSats>::value, "MilliSats must be signed");
33static_assert(std::numeric_limits<MilliSats>::max() >= INT64_MAX,
34 "MilliSats must represent INT64_MAX");
35static_assert(MILLISATS_UNSPECIFIED < 0, "the unspecified amount sentinel must be negative");
36static_assert(MAX_MILLISATS > 0, "the configured millisatoshi maximum must be positive");
38 "the configured millisatoshi maximum must fit in MilliSats");
39
41#if NOSTRDUINO_ENABLE_AMOUNT_GUARDS
42 return amount <= MAX_MILLISATS;
43#else
44 (void)amount;
45 return true;
46#endif
47}
48
50 return amount > 0 && amountWithinConfiguredMaximum(amount);
51}
52
54 return amount >= MILLISATS_UNSPECIFIED &&
55 (amount <= 0 || amountWithinConfiguredMaximum(amount));
56}
57
58} // namespace nostr
59
60#endif
#define NOSTRDUINO_MAX_AMOUNT_MSATS
Definition NostrAmount.h:13
Definition Nip47.h:44
Definition CryptoLock.h:6
bool isRequiredMilliSatsValid(MilliSats amount)
Definition NostrAmount.h:49
bool amountWithinConfiguredMaximum(MilliSats amount)
Definition NostrAmount.h:40
bool isOptionalMilliSatsValid(MilliSats amount)
Definition NostrAmount.h:53
int64_t MilliSats
Definition NostrAmount.h:26