MemoryFullPrunedBlockStore.smali

.class public Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;
.super Ljava/lang/Object;
.source "MemoryFullPrunedBlockStore.java"

# interfaces
.implements Lorg/bitcoinj/store/FullPrunedBlockStore;


# instance fields
.field private blockMap:Lorg/bitcoinj/store/TransactionalHashMap;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Lorg/bitcoinj/store/TransactionalHashMap",
            "<",
            "Lorg/bitcoinj/core/Sha256Hash;",
            "Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;",
            ">;"
        }
    .end annotation
.end field

.field private chainHead:Lorg/bitcoinj/core/StoredBlock;

.field private fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Lorg/bitcoinj/store/TransactionalMultiKeyHashMap",
            "<",
            "Lorg/bitcoinj/core/Sha256Hash;",
            "Ljava/lang/Integer;",
            "Lorg/bitcoinj/core/StoredUndoableBlock;",
            ">;"
        }
    .end annotation
.end field

.field private fullStoreDepth:I

.field private params:Lorg/bitcoinj/core/NetworkParameters;

.field private transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Lorg/bitcoinj/store/TransactionalHashMap",
            "<",
            "Lorg/bitcoinj/store/StoredTransactionOutPoint;",
            "Lorg/bitcoinj/core/UTXO;",
            ">;"
        }
    .end annotation
.end field

.field private verifiedChainHead:Lorg/bitcoinj/core/StoredBlock;


# direct methods
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;I)V
    .registers 7

    .prologue
    .line 255
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 256
    new-instance v0, Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-direct {v0}, Lorg/bitcoinj/store/TransactionalHashMap;-><init>()V

    iput-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    .line 257
    new-instance v0, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    invoke-direct {v0}, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;-><init>()V

    iput-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    .line 258
    new-instance v0, Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-direct {v0}, Lorg/bitcoinj/store/TransactionalHashMap;-><init>()V

    iput-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    .line 259
    if-lez p2, :cond_50

    :goto_1a
    iput p2, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullStoreDepth:I

    .line 262
    :try_start_1c
    new-instance v0, Lorg/bitcoinj/core/StoredBlock;

    invoke-virtual {p1}, Lorg/bitcoinj/core/NetworkParameters;->getGenesisBlock()Lorg/bitcoinj/core/Block;

    move-result-object v1

    invoke-virtual {v1}, Lorg/bitcoinj/core/Block;->cloneAsHeader()Lorg/bitcoinj/core/Block;

    move-result-object v1

    invoke-virtual {p1}, Lorg/bitcoinj/core/NetworkParameters;->getGenesisBlock()Lorg/bitcoinj/core/Block;

    move-result-object v2

    invoke-virtual {v2}, Lorg/bitcoinj/core/Block;->getWork()Ljava/math/BigInteger;

    move-result-object v2

    const/4 v3, 0x0

    invoke-direct {v0, v1, v2, v3}, Lorg/bitcoinj/core/StoredBlock;-><init>(Lorg/bitcoinj/core/Block;Ljava/math/BigInteger;I)V

    .line 1232
    new-instance v1, Ljava/util/LinkedList;

    invoke-direct {v1}, Ljava/util/LinkedList;-><init>()V

    .line 265
    new-instance v2, Lorg/bitcoinj/core/StoredUndoableBlock;

    invoke-virtual {p1}, Lorg/bitcoinj/core/NetworkParameters;->getGenesisBlock()Lorg/bitcoinj/core/Block;

    move-result-object v3

    invoke-virtual {v3}, Lorg/bitcoinj/core/Block;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v3

    invoke-direct {v2, v3, v1}, Lorg/bitcoinj/core/StoredUndoableBlock;-><init>(Lorg/bitcoinj/core/Sha256Hash;Ljava/util/List;)V

    .line 266
    invoke-virtual {p0, v0, v2}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->put(Lorg/bitcoinj/core/StoredBlock;Lorg/bitcoinj/core/StoredUndoableBlock;)V

    .line 267
    invoke-virtual {p0, v0}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->setChainHead(Lorg/bitcoinj/core/StoredBlock;)V

    .line 268
    invoke-virtual {p0, v0}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->setVerifiedChainHead(Lorg/bitcoinj/core/StoredBlock;)V

    .line 269
    iput-object p1, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->params:Lorg/bitcoinj/core/NetworkParameters;
    :try_end_4f
    .catch Lorg/bitcoinj/store/BlockStoreException; {:try_start_1c .. :try_end_4f} :catch_52
    .catch Lorg/bitcoinj/core/VerificationException; {:try_start_1c .. :try_end_4f} :catch_59

    .line 274
    return-void

    .line 259
    :cond_50
    const/4 p2, 0x1

    goto :goto_1a

    .line 270
    :catch_52
    move-exception v0

    .line 271
    new-instance v1, Ljava/lang/RuntimeException;

    invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V

    throw v1

    .line 272
    :catch_59
    move-exception v0

    .line 273
    new-instance v1, Ljava/lang/RuntimeException;

    invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V

    throw v1
.end method


# virtual methods
.method public declared-synchronized abortDatabaseBatchWrite()V
    .registers 2

    .prologue
    .line 387
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalHashMap;->abortDatabaseBatchWrite()V

    .line 388
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;->AbortTransaction()V

    .line 389
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalHashMap;->abortDatabaseBatchWrite()V
    :try_end_10
    .catchall {:try_start_1 .. :try_end_10} :catchall_12

    .line 390
    monitor-exit p0

    return-void

    .line 387
    :catchall_12
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized addUnspentTransactionOutput(Lorg/bitcoinj/core/UTXO;)V
    .registers 4

    .prologue
    .line 360
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 361
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    new-instance v1, Lorg/bitcoinj/store/StoredTransactionOutPoint;

    invoke-direct {v1, p1}, Lorg/bitcoinj/store/StoredTransactionOutPoint;-><init>(Lorg/bitcoinj/core/UTXO;)V

    invoke-virtual {v0, v1, p1}, Lorg/bitcoinj/store/TransactionalHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)V
    :try_end_12
    .catchall {:try_start_1 .. :try_end_12} :catchall_14

    .line 362
    monitor-exit p0

    return-void

    .line 360
    :catchall_14
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized beginDatabaseBatchWrite()V
    .registers 2

    .prologue
    .line 373
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalHashMap;->beginDatabaseBatchWrite()V

    .line 374
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;->BeginTransaction()V

    .line 375
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalHashMap;->beginDatabaseBatchWrite()V
    :try_end_10
    .catchall {:try_start_1 .. :try_end_10} :catchall_12

    .line 376
    monitor-exit p0

    return-void

    .line 373
    :catchall_12
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public close()V
    .registers 2

    .prologue
    const/4 v0, 0x0

    .line 346
    iput-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    .line 347
    iput-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    .line 348
    iput-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    .line 349
    return-void
.end method

.method public declared-synchronized commitDatabaseBatchWrite()V
    .registers 2

    .prologue
    .line 380
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalHashMap;->commitDatabaseBatchWrite()V

    .line 381
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;->CommitTransaction()V

    .line 382
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalHashMap;->commitDatabaseBatchWrite()V
    :try_end_10
    .catchall {:try_start_1 .. :try_end_10} :catchall_12

    .line 383
    monitor-exit p0

    return-void

    .line 380
    :catchall_12
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized get(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredBlock;
    .registers 4

    .prologue
    .line 295
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 296
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0, p1}, Lorg/bitcoinj/store/TransactionalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;
    :try_end_10
    .catchall {:try_start_1 .. :try_end_10} :catchall_18

    .line 297
    if-nez v0, :cond_15

    const/4 v0, 0x0

    :goto_13
    monitor-exit p0

    return-object v0

    :cond_15
    :try_start_15
    iget-object v0, v0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;->block:Lorg/bitcoinj/core/StoredBlock;
    :try_end_17
    .catchall {:try_start_15 .. :try_end_17} :catchall_18

    goto :goto_13

    .line 295
    :catchall_18
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized getChainHead()Lorg/bitcoinj/core/StoredBlock;
    .registers 3

    .prologue
    .line 317
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 318
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->chainHead:Lorg/bitcoinj/core/StoredBlock;
    :try_end_a
    .catchall {:try_start_1 .. :try_end_a} :catchall_c

    monitor-exit p0

    return-object v0

    .line 317
    :catchall_c
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public getChainHeadHeight()I
    .registers 3

    .prologue
    .line 408
    :try_start_0
    invoke-virtual {p0}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->getVerifiedChainHead()Lorg/bitcoinj/core/StoredBlock;

    move-result-object v0

    invoke-virtual {v0}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I
    :try_end_7
    .catch Lorg/bitcoinj/store/BlockStoreException; {:try_start_0 .. :try_end_7} :catch_9

    move-result v0

    return v0

    .line 409
    :catch_9
    move-exception v0

    .line 410
    new-instance v1, Lorg/bitcoinj/core/UTXOProviderException;

    invoke-direct {v1, v0}, Lorg/bitcoinj/core/UTXOProviderException;-><init>(Ljava/lang/Throwable;)V

    throw v1
.end method

.method public declared-synchronized getOnceUndoableStoredBlock(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredBlock;
    .registers 4

    .prologue
    .line 303
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 304
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0, p1}, Lorg/bitcoinj/store/TransactionalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;

    .line 305
    if-eqz v0, :cond_1a

    iget-boolean v1, v0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;->wasUndoable:Z

    if-eqz v1, :cond_1a

    iget-object v0, v0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;->block:Lorg/bitcoinj/core/StoredBlock;
    :try_end_18
    .catchall {:try_start_1 .. :try_end_18} :catchall_1c

    :goto_18
    monitor-exit p0

    return-object v0

    :cond_1a
    const/4 v0, 0x0

    goto :goto_18

    .line 303
    :catchall_1c
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public getOpenTransactionOutputs(Ljava/util/List;)Ljava/util/List;
    .registers 8
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/List",
            "<",
            "Lorg/bitcoinj/core/Address;",
            ">;)",
            "Ljava/util/List",
            "<",
            "Lorg/bitcoinj/core/UTXO;",
            ">;"
        }
    .end annotation

    .prologue
    .line 418
    new-instance v2, Ljava/util/ArrayList;

    invoke-direct {v2}, Ljava/util/ArrayList;-><init>()V

    .line 419
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    invoke-virtual {v0}, Lorg/bitcoinj/store/TransactionalHashMap;->values()Ljava/util/List;

    move-result-object v0

    .line 420
    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :cond_f
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_3d

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/UTXO;

    .line 421
    invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v4

    :cond_1f
    :goto_1f
    invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z

    move-result v1

    if-eqz v1, :cond_f

    invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lorg/bitcoinj/core/Address;

    .line 422
    invoke-virtual {v0}, Lorg/bitcoinj/core/UTXO;->getAddress()Ljava/lang/String;

    move-result-object v5

    invoke-virtual {v1}, Lorg/bitcoinj/core/Address;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v5, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v1

    if-eqz v1, :cond_1f

    .line 423
    invoke-interface {v2, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    goto :goto_1f

    .line 427
    :cond_3d
    return-object v2
.end method

.method public getParams()Lorg/bitcoinj/core/NetworkParameters;
    .registers 2

    .prologue
    .line 402
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->params:Lorg/bitcoinj/core/NetworkParameters;

    return-object v0
.end method

.method public declared-synchronized getTransactionOutput(Lorg/bitcoinj/core/Sha256Hash;J)Lorg/bitcoinj/core/UTXO;
    .registers 6

    .prologue
    .line 354
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 355
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    new-instance v1, Lorg/bitcoinj/store/StoredTransactionOutPoint;

    invoke-direct {v1, p1, p2, p3}, Lorg/bitcoinj/store/StoredTransactionOutPoint;-><init>(Lorg/bitcoinj/core/Sha256Hash;J)V

    invoke-virtual {v0, v1}, Lorg/bitcoinj/store/TransactionalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/UTXO;
    :try_end_15
    .catchall {:try_start_1 .. :try_end_15} :catchall_17

    monitor-exit p0

    return-object v0

    .line 354
    :catchall_17
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized getUndoBlock(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredUndoableBlock;
    .registers 4

    .prologue
    .line 311
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 312
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    invoke-virtual {v0, p1}, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/StoredUndoableBlock;
    :try_end_10
    .catchall {:try_start_1 .. :try_end_10} :catchall_12

    monitor-exit p0

    return-object v0

    .line 311
    :catchall_12
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized getVerifiedChainHead()Lorg/bitcoinj/core/StoredBlock;
    .registers 3

    .prologue
    .line 329
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 330
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->verifiedChainHead:Lorg/bitcoinj/core/StoredBlock;
    :try_end_a
    .catchall {:try_start_1 .. :try_end_a} :catchall_c

    monitor-exit p0

    return-object v0

    .line 329
    :catchall_c
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized hasUnspentOutputs(Lorg/bitcoinj/core/Sha256Hash;I)Z
    .registers 7

    .prologue
    const/4 v0, 0x0

    .line 394
    monitor-enter p0

    move v1, v0

    :goto_3
    if-ge v1, p2, :cond_d

    .line 395
    int-to-long v2, v1

    :try_start_6
    invoke-virtual {p0, p1, v2, v3}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->getTransactionOutput(Lorg/bitcoinj/core/Sha256Hash;J)Lorg/bitcoinj/core/UTXO;
    :try_end_9
    .catchall {:try_start_6 .. :try_end_9} :catchall_12

    move-result-object v2

    if-eqz v2, :cond_f

    .line 396
    const/4 v0, 0x1

    .line 397
    :cond_d
    monitor-exit p0

    return v0

    .line 394
    :cond_f
    add-int/lit8 v1, v1, 0x1

    goto :goto_3

    :catchall_12
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized put(Lorg/bitcoinj/core/StoredBlock;)V
    .registers 6

    .prologue
    .line 279
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 280
    invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeader()Lorg/bitcoinj/core/Block;

    move-result-object v0

    invoke-virtual {v0}, Lorg/bitcoinj/core/Block;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v0

    .line 281
    iget-object v1, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    new-instance v2, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;

    const/4 v3, 0x0

    invoke-direct {v2, p1, v3}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;-><init>(Lorg/bitcoinj/core/StoredBlock;Z)V

    invoke-virtual {v1, v0, v2}, Lorg/bitcoinj/store/TransactionalHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)V
    :try_end_1b
    .catchall {:try_start_1 .. :try_end_1b} :catchall_1d

    .line 282
    monitor-exit p0

    return-void

    .line 279
    :catchall_1d
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public final declared-synchronized put(Lorg/bitcoinj/core/StoredBlock;Lorg/bitcoinj/core/StoredUndoableBlock;)V
    .registers 7

    .prologue
    .line 286
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 287
    invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeader()Lorg/bitcoinj/core/Block;

    move-result-object v0

    invoke-virtual {v0}, Lorg/bitcoinj/core/Block;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v0

    .line 288
    iget-object v1, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I

    move-result v2

    invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v2

    invoke-virtual {v1, v0, v2, p2}, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V

    .line 289
    iget-object v1, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    new-instance v2, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;

    const/4 v3, 0x1

    invoke-direct {v2, p1, v3}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag;-><init>(Lorg/bitcoinj/core/StoredBlock;Z)V

    invoke-virtual {v1, v0, v2}, Lorg/bitcoinj/store/TransactionalHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)V
    :try_end_28
    .catchall {:try_start_1 .. :try_end_28} :catchall_2a

    .line 290
    monitor-exit p0

    return-void

    .line 286
    :catchall_2a
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized removeUnspentTransactionOutput(Lorg/bitcoinj/core/UTXO;)V
    .registers 4

    .prologue
    .line 366
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 367
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->transactionOutputMap:Lorg/bitcoinj/store/TransactionalHashMap;

    new-instance v1, Lorg/bitcoinj/store/StoredTransactionOutPoint;

    invoke-direct {v1, p1}, Lorg/bitcoinj/store/StoredTransactionOutPoint;-><init>(Lorg/bitcoinj/core/UTXO;)V

    invoke-virtual {v0, v1}, Lorg/bitcoinj/store/TransactionalHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    if-nez v0, :cond_20

    .line 368
    new-instance v0, Lorg/bitcoinj/store/BlockStoreException;

    const-string v1, "Tried to remove a UTXO from MemoryFullPrunedBlockStore that it didn\'t have!"

    invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_1d
    .catchall {:try_start_1 .. :try_end_1d} :catchall_1d

    .line 366
    :catchall_1d
    move-exception v0

    monitor-exit p0

    throw v0

    .line 369
    :cond_20
    monitor-exit p0

    return-void
.end method

.method public final declared-synchronized setChainHead(Lorg/bitcoinj/core/StoredBlock;)V
    .registers 4

    .prologue
    .line 323
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 324
    iput-object p1, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->chainHead:Lorg/bitcoinj/core/StoredBlock;
    :try_end_a
    .catchall {:try_start_1 .. :try_end_a} :catchall_c

    .line 325
    monitor-exit p0

    return-void

    .line 323
    :catchall_c
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public final declared-synchronized setVerifiedChainHead(Lorg/bitcoinj/core/StoredBlock;)V
    .registers 5

    .prologue
    .line 335
    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->blockMap:Lorg/bitcoinj/store/TransactionalHashMap;

    const-string v1, "MemoryFullPrunedBlockStore is closed"

    invoke-static {v0, v1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 336
    iput-object p1, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->verifiedChainHead:Lorg/bitcoinj/core/StoredBlock;

    .line 337
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->chainHead:Lorg/bitcoinj/core/StoredBlock;

    invoke-virtual {v0}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I

    move-result v0

    invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I

    move-result v1

    if-ge v0, v1, :cond_19

    .line 338
    invoke-virtual {p0, p1}, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->setChainHead(Lorg/bitcoinj/core/StoredBlock;)V

    .line 341
    :cond_19
    iget-object v0, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullBlockMap:Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;

    invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I

    move-result v1

    iget v2, p0, Lorg/bitcoinj/store/MemoryFullPrunedBlockStore;->fullStoreDepth:I

    sub-int/2addr v1, v2

    invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/bitcoinj/store/TransactionalMultiKeyHashMap;->removeByMultiKey(Ljava/lang/Object;)V
    :try_end_29
    .catchall {:try_start_1 .. :try_end_29} :catchall_2b

    .line 342
    monitor-exit p0

    return-void

    .line 335
    :catchall_2b
    move-exception v0

    monitor-exit p0

    throw v0
.end method