Search in sources :

Example 1 with MobileCoinLedgerWrapper

use of org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper in project Signal-Android by WhisperSystems.

the class PaymentLedgerUpdateJob method onRun.

@Override
protected void onRun() throws IOException, RetryLaterException {
    if (!SignalStore.paymentsValues().mobileCoinPaymentsEnabled()) {
        Log.w(TAG, "Payments are not enabled");
        return;
    }
    Long minimumBlockIndex = null;
    if (paymentUuid != null) {
        PaymentDatabase.PaymentTransaction payment = SignalDatabase.payments().getPayment(paymentUuid);
        if (payment != null) {
            minimumBlockIndex = payment.getBlockIndex();
            Log.i(TAG, "Fetching for a payment " + paymentUuid + " " + (minimumBlockIndex > 0 ? "non-zero" : "zero"));
        } else {
            Log.w(TAG, "Payment not found " + paymentUuid);
        }
    }
    MobileCoinLedgerWrapper ledger = ApplicationDependencies.getPayments().getWallet().tryGetFullLedger(minimumBlockIndex);
    if (ledger == null) {
        Log.i(TAG, "Ledger not updated yet, waiting for a minimum block index");
        throw new RetryLaterException();
    }
    Log.i(TAG, "Ledger fetched successfully");
    SignalStore.paymentsValues().setMobileCoinFullLedger(ledger);
}
Also used : RetryLaterException(org.thoughtcrime.securesms.transport.RetryLaterException) PaymentDatabase(org.thoughtcrime.securesms.database.PaymentDatabase) MobileCoinLedgerWrapper(org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper)

Example 2 with MobileCoinLedgerWrapper

use of org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper in project Signal-Android by WhisperSystems.

the class LedgerReconcileTest method empty_lists.

@Test
public void empty_lists() {
    List<Payment> payments = reconcile(Collections.emptyList(), new MobileCoinLedgerWrapper(MobileCoinLedger.getDefaultInstance()));
    assertEquals(Collections.emptyList(), payments);
}
Also used : Payment(org.thoughtcrime.securesms.payments.Payment) MobileCoinLedgerWrapper(org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper) Test(org.junit.Test)

Example 3 with MobileCoinLedgerWrapper

use of org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper in project Signal-Android by WhisperSystems.

the class LedgerReconcileTest method single_spent_transaction_on_ledger.

@Test
public void single_spent_transaction_on_ledger() {
    MobileCoinLedger ledger = ledger(spentTxo(mob(10), keyImage(1), publicKey(2), block(1), block(2)));
    List<Payment> payments = reconcile(Collections.emptyList(), new MobileCoinLedgerWrapper(ledger));
    assertEquals(2, payments.size());
    Payment payment1 = payments.get(0);
    assertEquals(mob(10), payment1.getAmount());
    assertEquals(mob(-10), payment1.getAmountWithDirection());
    assertEquals(Direction.SENT, payment1.getDirection());
    assertEquals(mob(0), payment1.getFee());
    assertEquals(Payee.UNKNOWN, payment1.getPayee());
    assertEquals(State.SUCCESSFUL, payment1.getState());
    assertEquals(UuidUtil.UNKNOWN_UUID, payment1.getUuid());
    assertEquals("", payment1.getNote());
    Payment payment2 = payments.get(1);
    assertEquals(mob(10), payment2.getAmount());
    assertEquals(mob(10), payment2.getAmountWithDirection());
    assertEquals(Direction.RECEIVED, payment2.getDirection());
    assertEquals(mob(0), payment2.getFee());
    assertEquals(Payee.UNKNOWN, payment2.getPayee());
    assertEquals(State.SUCCESSFUL, payment2.getState());
    assertEquals(UuidUtil.UNKNOWN_UUID, payment2.getUuid());
    assertEquals("", payment2.getNote());
}
Also used : Payment(org.thoughtcrime.securesms.payments.Payment) MobileCoinLedger(org.thoughtcrime.securesms.payments.proto.MobileCoinLedger) MobileCoinLedgerWrapper(org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper) Test(org.junit.Test)

Example 4 with MobileCoinLedgerWrapper

use of org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper in project Signal-Android by WhisperSystems.

the class LedgerReconcileTest method one_received_and_one_spent_transaction_on_ledger_only_different_blocks.

@Test
public void one_received_and_one_spent_transaction_on_ledger_only_different_blocks() {
    MobileCoinLedger ledger = ledger(spentTxo(mob(2.5), keyImage(1), publicKey(2), block(1), block(2)), unspentTxo(mob(1), keyImage(3), publicKey(4), block(3)));
    List<Payment> payments = reconcile(Collections.emptyList(), new MobileCoinLedgerWrapper(ledger));
    assertEquals(3, payments.size());
    assertEquals(mob(1), payments.get(0).getAmountWithDirection());
    assertEquals(mob(-2.5), payments.get(1).getAmountWithDirection());
    assertEquals(mob(2.5), payments.get(2).getAmountWithDirection());
}
Also used : Payment(org.thoughtcrime.securesms.payments.Payment) MobileCoinLedger(org.thoughtcrime.securesms.payments.proto.MobileCoinLedger) MobileCoinLedgerWrapper(org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper) Test(org.junit.Test)

Example 5 with MobileCoinLedgerWrapper

use of org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper in project Signal-Android by WhisperSystems.

the class LedgerReconcileTest method unknown_payment_remains_in_place_behind_known_alternative_block_order.

@Test
public void unknown_payment_remains_in_place_behind_known_alternative_block_order() {
    List<Payment> localPayments = Arrays.asList(payment("matched payment", mob(10), keyImages(60), publicKeys(7)), payment("unmatched payment", mob(20), keyImages(16), publicKeys(12)));
    MobileCoinLedger ledger = ledger(spentTxo(mob(2.5), keyImage(5), publicKey(2), block(10), block(20)), unspentTxo(mob(10), keyImage(9), publicKey(7), block(15)));
    List<Payment> payments = reconcile(localPayments, new MobileCoinLedgerWrapper(ledger));
    assertEquals(Arrays.asList(20L, 15L, 0L, 10L), Stream.of(payments).map(Payment::getBlockIndex).toList());
    assertEquals(Arrays.asList(mob(-2.5), mob(10), mob(20), mob(2.5)), Stream.of(payments).map(Payment::getAmountWithDirection).toList());
}
Also used : Payment(org.thoughtcrime.securesms.payments.Payment) MobileCoinLedger(org.thoughtcrime.securesms.payments.proto.MobileCoinLedger) MobileCoinLedgerWrapper(org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper) Test(org.junit.Test)

Aggregations

MobileCoinLedgerWrapper (org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper)26 Test (org.junit.Test)24 Payment (org.thoughtcrime.securesms.payments.Payment)24 MobileCoinLedger (org.thoughtcrime.securesms.payments.proto.MobileCoinLedger)22 PaymentDatabase (org.thoughtcrime.securesms.database.PaymentDatabase)2 RetryLaterException (org.thoughtcrime.securesms.transport.RetryLaterException)2