59 lines
2.6 KiB
Swift
59 lines
2.6 KiB
Swift
//
|
|
// Copyright 2021 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
|
|
@objc
|
|
public extension OutgoingPaymentSyncMessage {
|
|
|
|
@objc(syncMessageBuilderWithMobileCoin:transaction:)
|
|
func syncMessageBuilder(mobileCoin: OutgoingPaymentMobileCoin,
|
|
transaction: SDSAnyReadTransaction) -> SSKProtoSyncMessageBuilder? {
|
|
do {
|
|
var amountPicoMob = mobileCoin.amountPicoMob
|
|
var feePicoMob = mobileCoin.feePicoMob
|
|
var ledgerBlockIndex = mobileCoin.blockIndex
|
|
var spentKeyImages = mobileCoin.spentKeyImages
|
|
var outputPublicKeys = mobileCoin.outputPublicKeys
|
|
var receiptData = mobileCoin.receiptData
|
|
if DebugFlags.paymentsMalformedMessages.get() {
|
|
amountPicoMob = 0
|
|
feePicoMob = 0
|
|
ledgerBlockIndex = 0
|
|
spentKeyImages = []
|
|
outputPublicKeys = []
|
|
receiptData = Randomness.generateRandomBytes(UInt(receiptData.count))
|
|
}
|
|
let mobileCoinBuilder = SSKProtoSyncMessageOutgoingPaymentMobileCoin.builder(amountPicoMob: amountPicoMob,
|
|
feePicoMob: feePicoMob,
|
|
ledgerBlockIndex: ledgerBlockIndex)
|
|
mobileCoinBuilder.setSpentKeyImages(spentKeyImages)
|
|
mobileCoinBuilder.setOutputPublicKeys(outputPublicKeys)
|
|
if let recipientAddress = mobileCoin.recipientAddress {
|
|
mobileCoinBuilder.setRecipientAddress(recipientAddress)
|
|
}
|
|
if mobileCoin.blockTimestamp > 0 {
|
|
mobileCoinBuilder.setLedgerBlockTimestamp(mobileCoin.blockTimestamp)
|
|
}
|
|
mobileCoinBuilder.setReceipt(receiptData)
|
|
|
|
let outgoingPaymentBuilder = SSKProtoSyncMessageOutgoingPayment.builder()
|
|
if let recipientAci = mobileCoin.recipientAci {
|
|
outgoingPaymentBuilder.setRecipientServiceID(recipientAci.wrappedAciValue.serviceIdString)
|
|
}
|
|
outgoingPaymentBuilder.setMobileCoin(try mobileCoinBuilder.build())
|
|
if let memoMessage = mobileCoin.memoMessage {
|
|
outgoingPaymentBuilder.setNote(memoMessage)
|
|
}
|
|
|
|
let builder = SSKProtoSyncMessage.builder()
|
|
builder.setOutgoingPayment(try outgoingPaymentBuilder.build())
|
|
return builder
|
|
} catch {
|
|
owsFailDebug("Error: \(error)")
|
|
return nil
|
|
}
|
|
}
|
|
}
|