TM-SGNL-iOS/SignalServiceKit/Payments/TSPaymentModel.h
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

203 lines
8.6 KiB
Objective-C

//
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
#import <SignalServiceKit/BaseModel.h>
#import <SignalServiceKit/TSPaymentModels.h>
NS_ASSUME_NONNULL_BEGIN
@class AciObjC;
@class MobileCoinPayment;
@class SDSAnyWriteTransaction;
@class SignalServiceAddress;
// We store payment records separately from interactions.
//
// * Payment records might correspond to transfers to/from exchanges,
// without an associated interaction.
// * Interactions might be deleted, but we need to maintain records of
// all payments.
@interface TSPaymentModel : BaseModel
// Incoming, outgoing, etc.
//
// This is inferred from paymentState.
@property (nonatomic, readonly) TSPaymentType paymentType;
@property (nonatomic, readonly) TSPaymentState paymentState;
// This property only applies if paymentState is .incomingFailure
// or .outgoingFailure.
@property (nonatomic, readonly) TSPaymentFailure paymentFailure;
// Might not be set for unverified incoming payments.
@property (nonatomic, readonly, nullable) TSPaymentAmount *paymentAmount;
@property (nonatomic, readonly) uint64_t createdTimestamp;
@property (nonatomic, readonly) NSDate *createdDate;
// This uses ledgerBlockDate if available and createdDate otherwise.
@property (nonatomic, readonly) NSDate *sortDate;
// Optional. The address of the sender/recipient, if any.
//
// We should not treat this value as valid for unverified incoming payments.
@property (nonatomic, readonly, nullable) NSString *addressUuidString;
@property (nonatomic, readonly, nullable) AciObjC *senderOrRecipientAci;
// Optional. Used to construct outgoing notifications.
// This should only be set for outgoing payments from the device that
// submitted the payment.
// We should clear this as soon as sending notification succeeds.
@property (nonatomic, readonly, nullable) NSString *requestUuidString;
@property (nonatomic, readonly, nullable) NSString *memoMessage;
@property (nonatomic, readonly) BOOL isUnread;
// Optional. If set, the unique id of the interaction displayed in chat
// for this payment. If nil, safe to assume no interaction exists and one
// can be created.
@property (nonatomic, readonly, nullable) NSString *interactionUniqueId;
#pragma mark - MobileCoin
// This only applies to mobilecoin.
@property (nonatomic, readonly, nullable) MobileCoinPayment *mobileCoin;
// This only applies to mobilecoin.
// Used by PaymentFinder.
// This value is zero if not set.
@property (nonatomic, readonly) uint64_t mcLedgerBlockIndex;
// Only set for outgoing mobileCoin payments.
// This only applies to mobilecoin.
// Used by PaymentFinder.
@property (nonatomic, readonly, nullable) NSData *mcTransactionData;
// This only applies to mobilecoin.
// Used by PaymentFinder.
@property (nonatomic, readonly, nullable) NSData *mcReceiptData;
#pragma mark -
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithUniqueId:(NSString *)uniqueId NS_UNAVAILABLE;
- (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId NS_UNAVAILABLE;
- (instancetype)initWithPaymentType:(TSPaymentType)paymentType
paymentState:(TSPaymentState)paymentState
paymentAmount:(nullable TSPaymentAmount *)paymentAmount
createdDate:(NSDate *)createdDate
senderOrRecipientAci:(nullable AciObjC *)senderOrRecipientAci
memoMessage:(nullable NSString *)memoMessage
isUnread:(BOOL)isUnread
interactionUniqueId:(nullable NSString *)interactionUniqueId
mobileCoin:(MobileCoinPayment *)mobileCoin NS_DESIGNATED_INITIALIZER;
// --- CODE GENERATION MARKER
// This snippet is generated by /Scripts/sds_codegen/sds_generate.py. Do not manually edit it, instead run
// `sds_codegen.sh`.
// clang-format off
- (instancetype)initWithGrdbId:(int64_t)grdbId
uniqueId:(NSString *)uniqueId
addressUuidString:(nullable NSString *)addressUuidString
createdTimestamp:(uint64_t)createdTimestamp
interactionUniqueId:(nullable NSString *)interactionUniqueId
isUnread:(BOOL)isUnread
mcLedgerBlockIndex:(uint64_t)mcLedgerBlockIndex
mcReceiptData:(nullable NSData *)mcReceiptData
mcTransactionData:(nullable NSData *)mcTransactionData
memoMessage:(nullable NSString *)memoMessage
mobileCoin:(nullable MobileCoinPayment *)mobileCoin
paymentAmount:(nullable TSPaymentAmount *)paymentAmount
paymentFailure:(TSPaymentFailure)paymentFailure
paymentState:(TSPaymentState)paymentState
paymentType:(TSPaymentType)paymentType
requestUuidString:(nullable NSString *)requestUuidString
NS_DESIGNATED_INITIALIZER NS_SWIFT_NAME(init(grdbId:uniqueId:addressUuidString:createdTimestamp:interactionUniqueId:isUnread:mcLedgerBlockIndex:mcReceiptData:mcTransactionData:memoMessage:mobileCoin:paymentAmount:paymentFailure:paymentState:paymentType:requestUuidString:));
// clang-format on
// --- CODE GENERATION MARKER
- (void)updateWithPaymentState:(TSPaymentState)paymentState
transaction:(SDSAnyWriteTransaction *)transaction NS_SWIFT_NAME(update(paymentState:transaction:));
- (void)updateWithMCLedgerBlockIndex:(uint64_t)ledgerBlockIndex
transaction:(SDSAnyWriteTransaction *)transaction
NS_SWIFT_NAME(update(mcLedgerBlockIndex:transaction:));
- (void)updateWithMCLedgerBlockTimestamp:(uint64_t)ledgerBlockTimestamp
transaction:(SDSAnyWriteTransaction *)transaction
NS_SWIFT_NAME(update(mcLedgerBlockTimestamp:transaction:));
- (void)updateWithPaymentFailure:(TSPaymentFailure)paymentFailure
paymentState:(TSPaymentState)paymentState
transaction:(SDSAnyWriteTransaction *)transaction
NS_SWIFT_NAME(update(withPaymentFailure:paymentState:transaction:));
- (void)updateWithPaymentAmount:(TSPaymentAmount *)paymentAmount
transaction:(SDSAnyWriteTransaction *)transaction
NS_SWIFT_NAME(update(withPaymentAmount:transaction:));
- (void)updateWithIsUnread:(BOOL)isUnread transaction:(SDSAnyWriteTransaction *)transaction;
- (void)updateWithInteractionUniqueId:(NSString *)interactionUniqueId transaction:(SDSAnyWriteTransaction *)transaction;
@end
#pragma mark -
@interface MobileCoinPayment : MTLModel
// This property is only used for transfer in/out flows.
@property (nonatomic, readonly, nullable) NSData *recipientPublicAddressData;
// Optional. Only set for outgoing mobileCoin payments.
@property (nonatomic, readonly, nullable) NSData *transactionData;
// Optional. Set for incoming and outgoing mobileCoin payments.
@property (nonatomic, readonly, nullable) NSData *receiptData;
// Optional. Set for incoming and outgoing mobileCoin payments.
@property (nonatomic, readonly, nullable) NSArray<NSData *> *incomingTransactionPublicKeys;
// The image keys for the TXOs spent in this outgoing MC transaction.
@property (nonatomic, readonly, nullable) NSArray<NSData *> *spentKeyImages;
// The TXOs spent in this outgoing MC transaction.
@property (nonatomic, readonly, nullable) NSArray<NSData *> *outputPublicKeys;
// This value is zero if not set.
@property (nonatomic, readonly) uint64_t ledgerBlockTimestamp;
@property (nonatomic, readonly, nullable) NSDate *ledgerBlockDate;
// This value is zero if not set.
//
// This only applies to mobilecoin.
@property (nonatomic, readonly) uint64_t ledgerBlockIndex;
// Optional. Only set for outgoing mobileCoin payments.
@property (nonatomic, readonly, nullable) TSPaymentAmount *feeAmount;
- (instancetype)initWithRecipientPublicAddressData:(nullable NSData *)recipientPublicAddressData
transactionData:(nullable NSData *)transactionData
receiptData:(nullable NSData *)receiptData
incomingTransactionPublicKeys:(nullable NSArray<NSData *> *)incomingTransactionPublicKeys
spentKeyImages:(nullable NSArray<NSData *> *)spentKeyImages
outputPublicKeys:(nullable NSArray<NSData *> *)outputPublicKeys
ledgerBlockTimestamp:(uint64_t)ledgerBlockTimestamp
ledgerBlockIndex:(uint64_t)ledgerBlockIndex
feeAmount:(nullable TSPaymentAmount *)feeAmount;
@end
NS_ASSUME_NONNULL_END