DatabaseFullPrunedBlockStore.smali
.class public abstract Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;
.super Ljava/lang/Object;
.source "DatabaseFullPrunedBlockStore.java"
# interfaces
.implements Lorg/bitcoinj/store/FullPrunedBlockStore;
# static fields
.field private static final CHAIN_HEAD_SETTING:Ljava/lang/String; = "chainhead"
.field private static final DELETE_OPENOUTPUTS_SQL:Ljava/lang/String; = "DELETE FROM openoutputs WHERE hash = ? AND index = ?"
.field private static final DELETE_UNDOABLEBLOCKS_SQL:Ljava/lang/String; = "DELETE FROM undoableblocks WHERE height <= ?"
.field private static final DROP_HEADERS_TABLE:Ljava/lang/String; = "DROP TABLE headers"
.field private static final DROP_OPEN_OUTPUT_TABLE:Ljava/lang/String; = "DROP TABLE openoutputs"
.field private static final DROP_SETTINGS_TABLE:Ljava/lang/String; = "DROP TABLE settings"
.field private static final DROP_UNDOABLE_TABLE:Ljava/lang/String; = "DROP TABLE undoableblocks"
.field private static final INSERT_HEADERS_SQL:Ljava/lang/String; = "INSERT INTO headers(hash, chainwork, height, header, wasundoable) VALUES(?, ?, ?, ?, ?)"
.field private static final INSERT_OPENOUTPUTS_SQL:Ljava/lang/String; = "INSERT INTO openoutputs (hash, index, height, value, scriptbytes, toaddress, addresstargetable, coinbase) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
.field private static final INSERT_SETTINGS_SQL:Ljava/lang/String; = "INSERT INTO settings(name, value) VALUES(?, ?)"
.field private static final INSERT_UNDOABLEBLOCKS_SQL:Ljava/lang/String; = "INSERT INTO undoableblocks(hash, height, txoutchanges, transactions) VALUES(?, ?, ?, ?)"
.field private static final SELECT_BALANCE_SQL:Ljava/lang/String; = "select sum(value) from openoutputs where toaddress = ?"
.field private static final SELECT_CHECK_TABLES_EXIST_SQL:Ljava/lang/String; = "SELECT * FROM settings WHERE 1 = 2"
.field private static final SELECT_COMPATIBILITY_COINBASE_SQL:Ljava/lang/String; = "SELECT coinbase FROM openoutputs WHERE 1 = 2"
.field private static final SELECT_DUMP_HEADERS_SQL:Ljava/lang/String; = "SELECT chainwork, header FROM headers"
.field private static final SELECT_DUMP_OPENOUTPUTS_SQL:Ljava/lang/String; = "SELECT value, scriptbytes FROM openoutputs"
.field private static final SELECT_DUMP_SETTINGS_SQL:Ljava/lang/String; = "SELECT name, value FROM settings"
.field private static final SELECT_DUMP_UNDOABLEBLOCKS_SQL:Ljava/lang/String; = "SELECT txoutchanges, transactions FROM undoableblocks"
.field private static final SELECT_HEADERS_SQL:Ljava/lang/String; = "SELECT chainwork, height, header, wasundoable FROM headers WHERE hash = ?"
.field private static final SELECT_OPENOUTPUTS_COUNT_SQL:Ljava/lang/String; = "SELECT COUNT(*) FROM openoutputs WHERE hash = ?"
.field private static final SELECT_OPENOUTPUTS_SQL:Ljava/lang/String; = "SELECT height, value, scriptbytes, coinbase, toaddress, addresstargetable FROM openoutputs WHERE hash = ? AND index = ?"
.field private static final SELECT_SETTINGS_SQL:Ljava/lang/String; = "SELECT value FROM settings WHERE name = ?"
.field private static final SELECT_TRANSACTION_OUTPUTS_SQL:Ljava/lang/String; = "SELECT hash, value, scriptbytes, height, index, coinbase, toaddress, addresstargetable FROM openoutputs where toaddress = ?"
.field private static final SELECT_UNDOABLEBLOCKS_SQL:Ljava/lang/String; = "SELECT txoutchanges, transactions FROM undoableblocks WHERE hash = ?"
.field private static final UPDATE_HEADERS_SQL:Ljava/lang/String; = "UPDATE headers SET wasundoable=? WHERE hash=?"
.field private static final UPDATE_SETTINGS_SQL:Ljava/lang/String; = "UPDATE settings SET value = ? WHERE name = ?"
.field private static final UPDATE_UNDOABLEBLOCKS_SQL:Ljava/lang/String; = "UPDATE undoableblocks SET txoutchanges=?, transactions=? WHERE hash = ?"
.field private static final VERIFIED_CHAIN_HEAD_SETTING:Ljava/lang/String; = "verifiedchainhead"
.field private static final VERSION_SETTING:Ljava/lang/String; = "version"
.field private static final log:Lorg/slf4j/Logger;
# instance fields
.field protected allConnections:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List",
"<",
"Ljava/sql/Connection;",
">;"
}
.end annotation
.end field
.field protected chainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
.field protected chainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
.field protected conn:Ljava/lang/ThreadLocal;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/ThreadLocal",
"<",
"Ljava/sql/Connection;",
">;"
}
.end annotation
.end field
.field protected connectionURL:Ljava/lang/String;
.field protected fullStoreDepth:I
.field protected params:Lorg/bitcoinj/core/NetworkParameters;
.field protected password:Ljava/lang/String;
.field protected schemaName:Ljava/lang/String;
.field protected username:Ljava/lang/String;
.field protected verifiedChainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
.field protected verifiedChainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 90
const-class v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;
invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;
move-result-object v0
sput-object v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
.registers 10
.prologue
.line 164
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 165
iput-object p1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->params:Lorg/bitcoinj/core/NetworkParameters;
.line 166
iput p3, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->fullStoreDepth:I
.line 167
iput-object p2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->connectionURL:Ljava/lang/String;
.line 168
iput-object p6, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->schemaName:Ljava/lang/String;
.line 169
iput-object p4, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->username:Ljava/lang/String;
.line 170
iput-object p5, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->password:Ljava/lang/String;
.line 171
new-instance v0, Ljava/lang/ThreadLocal;
invoke-direct {v0}, Ljava/lang/ThreadLocal;-><init>()V
iput-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
.line 172
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
iput-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->allConnections:Ljava/util/List;
.line 175
:try_start_1d
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDatabaseDriverClass()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
.line 176
sget-object v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDatabaseDriverClass()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " loaded. "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;)V
:try_end_40
.catch Ljava/lang/ClassNotFoundException; {:try_start_1d .. :try_end_40} :catch_50
.line 181
:goto_40
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 185
:try_start_43
invoke-direct {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->tablesExists()Z
move-result v0
if-nez v0, :cond_59
.line 186
invoke-direct {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->createTables()V
.line 190
:goto_4c
invoke-direct {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->initFromDatabase()V
:try_end_4f
.catch Ljava/sql/SQLException; {:try_start_43 .. :try_end_4f} :catch_5d
.line 193
return-void
.line 177
:catch_50
move-exception v0
.line 178
sget-object v1, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
const-string v2, "check CLASSPATH for database driver jar "
invoke-interface {v1, v2, v0}, Lorg/slf4j/Logger;->error(Ljava/lang/String;Ljava/lang/Throwable;)V
goto :goto_40
.line 188
:cond_59
:try_start_59
invoke-direct {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->checkCompatibility()V
:try_end_5c
.catch Ljava/sql/SQLException; {:try_start_59 .. :try_end_5c} :catch_5d
goto :goto_4c
.line 191
:catch_5d
move-exception v0
.line 192
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method private checkCompatibility()V
.registers 6
.prologue
.line 501
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getCompatibilitySQL()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v3
:cond_8
:goto_8
invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_5c
invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
.line 502
const/4 v2, 0x0
.line 504
:try_start_15
iget-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v1}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/sql/Connection;
invoke-interface {v1, v0}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
:try_end_20
.catch Ljava/sql/SQLException; {:try_start_15 .. :try_end_20} :catch_34
.catchall {:try_start_15 .. :try_end_20} :catchall_5d
move-result-object v1
.line 505
:try_start_21
invoke-interface {v1}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v0
.line 506
invoke-interface {v0}, Ljava/sql/ResultSet;->close()V
:try_end_28
.catch Ljava/sql/SQLException; {:try_start_21 .. :try_end_28} :catch_60
.catchall {:try_start_21 .. :try_end_28} :catchall_4f
.line 511
if-eqz v1, :cond_8
invoke-interface {v1}, Ljava/sql/PreparedStatement;->isClosed()Z
move-result v0
if-nez v0, :cond_8
.line 512
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
goto :goto_8
.line 507
:catch_34
move-exception v0
move-object v1, v2
.line 508
:goto_36
:try_start_36
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
new-instance v3, Ljava/lang/StringBuilder;
const-string v4, "Database block store is not compatible with the current release. See bitcoinj release notes for further information: "
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
.line 509
invoke-virtual {v0}, Ljava/sql/SQLException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v2
:try_end_4f
.catchall {:try_start_36 .. :try_end_4f} :catchall_4f
.line 511
:catchall_4f
move-exception v0
:goto_50
if-eqz v1, :cond_5b
invoke-interface {v1}, Ljava/sql/PreparedStatement;->isClosed()Z
move-result v2
if-nez v2, :cond_5b
.line 512
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:cond_5b
throw v0
.line 516
:cond_5c
return-void
.line 511
:catchall_5d
move-exception v0
move-object v1, v2
goto :goto_50
.line 507
:catch_60
move-exception v0
goto :goto_36
.end method
.method private createNewStore(Lorg/bitcoinj/core/NetworkParameters;)V
.registers 6
.prologue
.line 565
:try_start_0
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 2232
new-instance v1, Ljava/util/LinkedList;
invoke-direct {v1}, Ljava/util/LinkedList;-><init>()V
.line 569
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 570
invoke-virtual {p0, v0, v2}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->put(Lorg/bitcoinj/core/StoredBlock;Lorg/bitcoinj/core/StoredUndoableBlock;)V
.line 571
invoke-virtual {p0, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->setChainHead(Lorg/bitcoinj/core/StoredBlock;)V
.line 572
invoke-virtual {p0, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->setVerifiedChainHead(Lorg/bitcoinj/core/StoredBlock;)V
:try_end_31
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_0 .. :try_end_31} :catch_32
.line 575
return-void
.line 573
:catch_32
move-exception v0
.line 574
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method private createTables()V
.registers 9
.prologue
const/4 v7, -0x2
const/4 v6, 0x2
const/4 v5, 0x1
.line 524
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-interface {v0}, Ljava/sql/Connection;->createStatement()Ljava/sql/Statement;
move-result-object v1
.line 526
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getCreateTablesSQL()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_17
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_36
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
.line 527
sget-object v3, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v3}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v3
if-eqz v3, :cond_32
.line 528
sget-object v3, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
const-string v4, "DatabaseFullPrunedBlockStore : CREATE table [SQL= {0}]"
invoke-interface {v3, v4, v0}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;Ljava/lang/Object;)V
.line 530
:cond_32
invoke-interface {v1, v0}, Ljava/sql/Statement;->executeUpdate(Ljava/lang/String;)I
goto :goto_17
.line 533
:cond_36
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getCreateIndexesSQL()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_3e
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_5d
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
.line 534
sget-object v3, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v3}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v3
if-eqz v3, :cond_59
.line 535
sget-object v3, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
const-string v4, "DatabaseFullPrunedBlockStore : CREATE index [SQL= {0}]"
invoke-interface {v3, v4, v0}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;Ljava/lang/Object;)V
.line 537
:cond_59
invoke-interface {v1, v0}, Ljava/sql/Statement;->executeUpdate(Ljava/lang/String;)I
goto :goto_3e
.line 539
:cond_5d
invoke-interface {v1}, Ljava/sql/Statement;->close()V
.line 542
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getInsertSettingsSQL()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 543
const-string v1, "chainhead"
invoke-interface {v0, v5, v1}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 544
invoke-interface {v0, v6, v7}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 545
invoke-interface {v0}, Ljava/sql/PreparedStatement;->execute()Z
.line 546
const-string v1, "verifiedchainhead"
invoke-interface {v0, v5, v1}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 547
invoke-interface {v0, v6, v7}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 548
invoke-interface {v0}, Ljava/sql/PreparedStatement;->execute()Z
.line 549
const-string v1, "version"
invoke-interface {v0, v5, v1}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 550
const-string v1, "03"
invoke-virtual {v1}, Ljava/lang/String;->getBytes()[B
move-result-object v1
invoke-interface {v0, v6, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 551
invoke-interface {v0}, Ljava/sql/PreparedStatement;->execute()Z
.line 552
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
.line 553
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-direct {p0, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->createNewStore(Lorg/bitcoinj/core/NetworkParameters;)V
.line 554
return-void
.end method
.method private initFromDatabase()V
.registers 5
.prologue
const/4 v3, 0x1
.line 584
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectSettingsSQL()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 586
const-string v1, "chainhead"
invoke-interface {v0, v3, v1}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 587
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v1
.line 588
invoke-interface {v1}, Ljava/sql/ResultSet;->next()Z
move-result v2
if-nez v2, :cond_28
.line 589
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "corrupt database block store - no chain head pointer"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 591
:cond_28
invoke-interface {v1, v3}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v2
invoke-static {v2}, Lorg/bitcoinj/core/Sha256Hash;->wrap([B)Lorg/bitcoinj/core/Sha256Hash;
move-result-object v2
.line 592
invoke-interface {v1}, Ljava/sql/ResultSet;->close()V
.line 593
invoke-virtual {p0, v2}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->get(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredBlock;
move-result-object v1
iput-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
.line 594
iput-object v2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
.line 595
iget-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
if-nez v1, :cond_47
.line 596
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "corrupt database block store - head block not found"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 598
:cond_47
const-string v1, "verifiedchainhead"
invoke-interface {v0, v3, v1}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 599
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v1
.line 600
invoke-interface {v1}, Ljava/sql/ResultSet;->next()Z
move-result v2
if-nez v2, :cond_5e
.line 601
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "corrupt database block store - no verified chain head pointer"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 603
:cond_5e
invoke-interface {v1, v3}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v2
invoke-static {v2}, Lorg/bitcoinj/core/Sha256Hash;->wrap([B)Lorg/bitcoinj/core/Sha256Hash;
move-result-object v2
.line 604
invoke-interface {v1}, Ljava/sql/ResultSet;->close()V
.line 605
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
.line 606
invoke-virtual {p0, v2}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->get(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredBlock;
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
.line 607
iput-object v2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
.line 608
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
if-nez v0, :cond_80
.line 609
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "corrupt databse block store - verified head block not found"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 611
:cond_80
return-void
.end method
.method private removeUndoableBlocksWhereHeightIsLessThan(I)V
.registers 6
.prologue
.line 902
:try_start_0
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 903
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDeleteUndoableBlocksSQL()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 904
const/4 v1, 0x1
invoke-interface {v0, v1, p1}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 905
sget-object v1, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v1}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v1
if-eqz v1, :cond_30
.line 906
sget-object v1, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Deleting undoable undoable block with height <= "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-interface {v1, v2}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;)V
.line 907
:cond_30
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 908
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_36
.catch Ljava/sql/SQLException; {:try_start_0 .. :try_end_36} :catch_37
.line 911
return-void
.line 909
:catch_37
move-exception v0
.line 910
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method private tablesExists()Z
.registers 5
.prologue
.line 481
const/4 v1, 0x0
.line 483
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getTablesExistSQL()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
:try_end_10
.catch Ljava/sql/SQLException; {:try_start_1 .. :try_end_10} :catch_25
.catchall {:try_start_1 .. :try_end_10} :catchall_34
move-result-object v0
.line 484
:try_start_11
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v1
.line 485
invoke-interface {v1}, Ljava/sql/ResultSet;->close()V
:try_end_18
.catch Ljava/sql/SQLException; {:try_start_11 .. :try_end_18} :catch_46
.catchall {:try_start_11 .. :try_end_18} :catchall_41
.line 490
if-eqz v0, :cond_23
invoke-interface {v0}, Ljava/sql/PreparedStatement;->isClosed()Z
move-result v1
if-nez v1, :cond_23
.line 491
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
.line 486
:cond_23
const/4 v0, 0x1
.line 488
:goto_24
return v0
.line 490
:catch_25
move-exception v0
move-object v0, v1
:goto_27
if-eqz v0, :cond_32
invoke-interface {v0}, Ljava/sql/PreparedStatement;->isClosed()Z
move-result v1
if-nez v1, :cond_32
.line 491
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
.line 488
:cond_32
const/4 v0, 0x0
goto :goto_24
.line 490
:catchall_34
move-exception v0
:goto_35
if-eqz v1, :cond_40
invoke-interface {v1}, Ljava/sql/PreparedStatement;->isClosed()Z
move-result v2
if-nez v2, :cond_40
.line 491
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:cond_40
throw v0
.line 490
:catchall_41
move-exception v1
move-object v3, v1
move-object v1, v0
move-object v0, v3
goto :goto_35
:catch_46
move-exception v1
goto :goto_27
.end method
# virtual methods
.method public abortDatabaseBatchWrite()V
.registers 4
.prologue
.line 1032
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1033
sget-object v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v0}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v0
if-eqz v0, :cond_2b
.line 1034
sget-object v1, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v0, "Rollback database batch write with connection: "
invoke-direct {v2, v0}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-interface {v1, v0}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;)V
.line 1036
:cond_2b
:try_start_2b
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-interface {v0}, Ljava/sql/Connection;->getAutoCommit()Z
move-result v0
if-nez v0, :cond_51
.line 1037
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-interface {v0}, Ljava/sql/Connection;->rollback()V
.line 1038
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
const/4 v1, 0x1
invoke-interface {v0, v1}, Ljava/sql/Connection;->setAutoCommit(Z)V
.line 1044
:goto_50
return-void
.line 1040
:cond_51
sget-object v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
const-string v1, "Warning: Rollback attempt without transaction"
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;)V
:try_end_58
.catch Ljava/sql/SQLException; {:try_start_2b .. :try_end_58} :catch_59
goto :goto_50
.line 1042
:catch_59
move-exception v0
.line 1043
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public addUnspentTransactionOutput(Lorg/bitcoinj/core/UTXO;)V
.registers 6
.prologue
.line 957
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 958
const/4 v1, 0x0
.line 960
:try_start_4
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getInsertOpenoutputsSQL()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v1
.line 961
const/4 v0, 0x1
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getHash()Lorg/bitcoinj/core/Sha256Hash;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 963
const/4 v0, 0x2
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getIndex()J
move-result-wide v2
long-to-int v2, v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 964
const/4 v0, 0x3
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getHeight()I
move-result v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 965
const/4 v0, 0x4
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getValue()Lorg/bitcoinj/core/Coin;
move-result-object v2
iget-wide v2, v2, Lorg/bitcoinj/core/Coin;->value:J
invoke-interface {v1, v0, v2, v3}, Ljava/sql/PreparedStatement;->setLong(IJ)V
.line 966
const/4 v0, 0x5
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getScript()Lorg/bitcoinj/script/Script;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/script/Script;->getProgram()[B
move-result-object v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 967
const/4 v0, 0x6
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getAddress()Ljava/lang/String;
move-result-object v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 968
const/4 v0, 0x7
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getScript()Lorg/bitcoinj/script/Script;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/script/Script;->getScriptType()Lorg/bitcoinj/script/Script$ScriptType;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/script/Script$ScriptType;->ordinal()I
move-result v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 969
const/16 v0, 0x8
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->isCoinbase()Z
move-result v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setBoolean(IZ)V
.line 970
invoke-interface {v1}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 971
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_6e
.catch Ljava/sql/SQLException; {:try_start_4 .. :try_end_6e} :catch_7b
.catchall {:try_start_4 .. :try_end_6e} :catchall_90
.line 976
if-eqz v1, :cond_73
.line 978
:try_start_70
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_73
.catch Ljava/sql/SQLException; {:try_start_70 .. :try_end_73} :catch_74
.line 984
:cond_73
:goto_73
return-void
.line 979
:catch_74
move-exception v0
.line 980
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 972
:catch_7b
move-exception v0
.line 973
:try_start_7c
invoke-virtual {v0}, Ljava/sql/SQLException;->getSQLState()Ljava/lang/String;
move-result-object v2
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDuplicateKeyErrorCode()Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-nez v2, :cond_97
.line 974
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_90
.catchall {:try_start_7c .. :try_end_90} :catchall_90
.line 976
:catchall_90
move-exception v0
if-eqz v1, :cond_96
.line 978
:try_start_93
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_96
.catch Ljava/sql/SQLException; {:try_start_93 .. :try_end_96} :catch_a4
.line 980
:cond_96
throw v0
.line 976
:cond_97
if-eqz v1, :cond_73
.line 978
:try_start_99
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_9c
.catch Ljava/sql/SQLException; {:try_start_99 .. :try_end_9c} :catch_9d
goto :goto_73
.line 979
:catch_9d
move-exception v0
.line 980
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 979
:catch_a4
move-exception v0
.line 980
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public beginDatabaseBatchWrite()V
.registers 4
.prologue
.line 1007
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1008
sget-object v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v0}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v0
if-eqz v0, :cond_2b
.line 1009
sget-object v1, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v0, "Starting database batch write with connection: "
invoke-direct {v2, v0}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-interface {v1, v0}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;)V
.line 1011
:cond_2b
:try_start_2b
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
const/4 v1, 0x0
invoke-interface {v0, v1}, Ljava/sql/Connection;->setAutoCommit(Z)V
:try_end_37
.catch Ljava/sql/SQLException; {:try_start_2b .. :try_end_37} :catch_38
.line 1014
return-void
.line 1012
:catch_38
move-exception v0
.line 1013
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public calculateBalanceForAddress(Lorg/bitcoinj/core/Address;)Ljava/math/BigInteger;
.registers 6
.prologue
.line 1134
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1135
const/4 v1, 0x0
.line 1137
:try_start_4
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getBalanceSelectSQL()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v1
.line 1138
const/4 v0, 0x1
invoke-virtual {p1}, Lorg/bitcoinj/core/Address;->toString()Ljava/lang/String;
move-result-object v2
invoke-interface {v1, v0, v2}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 1139
invoke-interface {v1}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v2
.line 1140
sget-object v0, Ljava/math/BigInteger;->ZERO:Ljava/math/BigInteger;
.line 1141
invoke-interface {v2}, Ljava/sql/ResultSet;->next()Z
move-result v3
if-eqz v3, :cond_40
.line 1142
const/4 v0, 0x1
invoke-interface {v2, v0}, Ljava/sql/ResultSet;->getLong(I)J
move-result-wide v2
invoke-static {v2, v3}, Ljava/math/BigInteger;->valueOf(J)Ljava/math/BigInteger;
:try_end_30
.catch Ljava/sql/SQLException; {:try_start_4 .. :try_end_30} :catch_4f
.catchall {:try_start_4 .. :try_end_30} :catchall_56
move-result-object v0
.line 1148
if-eqz v1, :cond_36
.line 1150
:try_start_33
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_36
.catch Ljava/sql/SQLException; {:try_start_33 .. :try_end_36} :catch_37
.line 1144
:cond_36
:goto_36
return-object v0
.line 1152
:catch_37
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Could not close statement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 1148
:cond_40
if-eqz v1, :cond_36
.line 1150
:try_start_42
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_45
.catch Ljava/sql/SQLException; {:try_start_42 .. :try_end_45} :catch_46
goto :goto_36
.line 1152
:catch_46
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Could not close statement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 1145
:catch_4f
move-exception v0
.line 1146
:try_start_50
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_56
.catchall {:try_start_50 .. :try_end_56} :catchall_56
.line 1148
:catchall_56
move-exception v0
if-eqz v1, :cond_5c
.line 1150
:try_start_59
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_5c
.catch Ljava/sql/SQLException; {:try_start_59 .. :try_end_5c} :catch_5d
.line 1152
:cond_5c
throw v0
:catch_5d
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Could not close statement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public declared-synchronized close()V
.registers 4
.prologue
.line 454
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->allConnections:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v1
:cond_7
:goto_7
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_38
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
:try_end_13
.catchall {:try_start_1 .. :try_end_13} :catchall_35
.line 456
:try_start_13
invoke-interface {v0}, Ljava/sql/Connection;->getAutoCommit()Z
move-result v2
if-nez v2, :cond_1c
.line 457
invoke-interface {v0}, Ljava/sql/Connection;->rollback()V
.line 459
:cond_1c
invoke-interface {v0}, Ljava/sql/Connection;->close()V
.line 460
iget-object v2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v2}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v2
if-ne v0, v2, :cond_7
.line 461
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
const/4 v2, 0x0
invoke-virtual {v0, v2}, Ljava/lang/ThreadLocal;->set(Ljava/lang/Object;)V
:try_end_2d
.catch Ljava/sql/SQLException; {:try_start_13 .. :try_end_2d} :catch_2e
.catchall {:try_start_13 .. :try_end_2d} :catchall_35
goto :goto_7
.line 463
:catch_2e
move-exception v0
.line 464
:try_start_2f
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_35
.catchall {:try_start_2f .. :try_end_35} :catchall_35
.line 454
:catchall_35
move-exception v0
monitor-exit p0
throw v0
.line 467
:cond_38
:try_start_38
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->allConnections:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->clear()V
:try_end_3d
.catchall {:try_start_38 .. :try_end_3d} :catchall_35
.line 468
monitor-exit p0
return-void
.end method
.method public commitDatabaseBatchWrite()V
.registers 4
.prologue
.line 1019
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1020
sget-object v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v0}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v0
if-eqz v0, :cond_2b
.line 1021
sget-object v1, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v0, "Committing database batch write with connection: "
invoke-direct {v2, v0}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-interface {v1, v0}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;)V
.line 1023
:cond_2b
:try_start_2b
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-interface {v0}, Ljava/sql/Connection;->commit()V
.line 1024
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
const/4 v1, 0x1
invoke-interface {v0, v1}, Ljava/sql/Connection;->setAutoCommit(Z)V
:try_end_42
.catch Ljava/sql/SQLException; {:try_start_2b .. :try_end_42} :catch_43
.line 1027
return-void
.line 1025
:catch_43
move-exception v0
.line 1026
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public deleteStore()V
.registers 4
.prologue
.line 1107
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1109
:try_start_3
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-interface {v0}, Ljava/sql/Connection;->createStatement()Ljava/sql/Statement;
move-result-object v1
.line 1110
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDropTablesSQL()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_17
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_2e
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
.line 1111
invoke-interface {v1, v0}, Ljava/sql/Statement;->execute(Ljava/lang/String;)Z
:try_end_26
.catch Ljava/sql/SQLException; {:try_start_3 .. :try_end_26} :catch_27
goto :goto_17
.line 1114
:catch_27
move-exception v0
.line 1115
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 1113
:cond_2e
:try_start_2e
invoke-interface {v1}, Ljava/sql/Statement;->close()V
:try_end_31
.catch Ljava/sql/SQLException; {:try_start_2e .. :try_end_31} :catch_27
.line 1116
return-void
.end method
.method public dumpSizes()V
.registers 21
.prologue
.line 1207
invoke-virtual/range {p0 .. p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1208
move-object/from16 v0, p0
iget-object v2, v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v2}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/sql/Connection;
invoke-interface {v2}, Ljava/sql/Connection;->createStatement()Ljava/sql/Statement;
move-result-object v8
.line 1209
const-wide/16 v4, 0x0
.line 1211
const/4 v2, 0x0
.line 1212
invoke-virtual/range {p0 .. p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectSettingsDumpSQL()Ljava/lang/String;
move-result-object v3
invoke-interface {v8, v3}, Ljava/sql/Statement;->executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;
move-result-object v3
.line 1213
:goto_1c
invoke-interface {v3}, Ljava/sql/ResultSet;->next()Z
move-result v6
if-eqz v6, :cond_38
.line 1214
const/4 v6, 0x1
invoke-interface {v3, v6}, Ljava/sql/ResultSet;->getString(I)Ljava/lang/String;
move-result-object v6
invoke-virtual {v6}, Ljava/lang/String;->length()I
move-result v6
int-to-long v6, v6
add-long/2addr v4, v6
.line 1215
const/4 v6, 0x2
invoke-interface {v3, v6}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v6
array-length v6, v6
int-to-long v6, v6
add-long/2addr v4, v6
.line 1216
add-int/lit8 v2, v2, 0x1
goto :goto_1c
.line 1218
:cond_38
invoke-interface {v3}, Ljava/sql/ResultSet;->close()V
.line 1219
sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream;
sget-object v6, Ljava/util/Locale;->US:Ljava/util/Locale;
const-string v7, "Settings size: %d, count: %d, average size: %f%n"
const/4 v9, 0x3
new-array v9, v9, [Ljava/lang/Object;
const/4 v10, 0x0
invoke-static {v4, v5}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v11
aput-object v11, v9, v10
const/4 v10, 0x1
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v11
aput-object v11, v9, v10
const/4 v10, 0x2
long-to-double v12, v4
int-to-double v14, v2
div-double/2addr v12, v14
invoke-static {v12, v13}, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
move-result-object v2
aput-object v2, v9, v10
invoke-virtual {v3, v6, v7, v9}, Ljava/io/PrintStream;->printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
.line 1221
const-wide/16 v6, 0x0
const/4 v2, 0x0
.line 1222
invoke-virtual/range {p0 .. p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectHeadersDumpSQL()Ljava/lang/String;
move-result-object v3
invoke-interface {v8, v3}, Ljava/sql/Statement;->executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;
move-result-object v3
.line 1223
:goto_6a
invoke-interface {v3}, Ljava/sql/ResultSet;->next()Z
move-result v9
if-eqz v9, :cond_89
.line 1224
const-wide/16 v10, 0x1c
add-long/2addr v6, v10
.line 1225
const/4 v9, 0x1
invoke-interface {v3, v9}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v9
array-length v9, v9
int-to-long v10, v9
add-long/2addr v6, v10
.line 1226
const-wide/16 v10, 0x4
add-long/2addr v6, v10
.line 1227
const/4 v9, 0x2
invoke-interface {v3, v9}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v9
array-length v9, v9
int-to-long v10, v9
add-long/2addr v6, v10
.line 1228
add-int/lit8 v2, v2, 0x1
goto :goto_6a
.line 1230
:cond_89
invoke-interface {v3}, Ljava/sql/ResultSet;->close()V
.line 1231
sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream;
sget-object v9, Ljava/util/Locale;->US:Ljava/util/Locale;
const-string v10, "Headers size: %d, count: %d, average size: %f%n"
const/4 v11, 0x3
new-array v11, v11, [Ljava/lang/Object;
const/4 v12, 0x0
invoke-static {v6, v7}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v13
aput-object v13, v11, v12
const/4 v12, 0x1
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v13
aput-object v13, v11, v12
const/4 v12, 0x2
long-to-double v14, v6
int-to-double v0, v2
move-wide/from16 v16, v0
div-double v14, v14, v16
invoke-static {v14, v15}, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
move-result-object v2
aput-object v2, v11, v12
invoke-virtual {v3, v9, v10, v11}, Ljava/io/PrintStream;->printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
.line 1233
add-long/2addr v6, v4
const-wide/16 v4, 0x0
const/4 v2, 0x0
.line 1234
invoke-virtual/range {p0 .. p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectUndoableblocksDumpSQL()Ljava/lang/String;
move-result-object v3
invoke-interface {v8, v3}, Ljava/sql/Statement;->executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;
move-result-object v3
.line 1235
:goto_bf
invoke-interface {v3}, Ljava/sql/ResultSet;->next()Z
move-result v9
if-eqz v9, :cond_e1
.line 1236
const-wide/16 v10, 0x1c
add-long/2addr v4, v10
.line 1237
const-wide/16 v10, 0x4
add-long/2addr v4, v10
.line 1238
const/4 v9, 0x1
invoke-interface {v3, v9}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v9
.line 1239
const/4 v10, 0x2
invoke-interface {v3, v10}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v10
.line 1240
if-nez v9, :cond_dd
.line 1241
array-length v9, v10
int-to-long v10, v9
add-long/2addr v4, v10
.line 1245
:goto_da
add-int/lit8 v2, v2, 0x1
.line 1246
goto :goto_bf
.line 1243
:cond_dd
array-length v9, v9
int-to-long v10, v9
add-long/2addr v4, v10
goto :goto_da
.line 1247
:cond_e1
invoke-interface {v3}, Ljava/sql/ResultSet;->close()V
.line 1248
sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream;
sget-object v9, Ljava/util/Locale;->US:Ljava/util/Locale;
const-string v10, "Undoable Blocks size: %d, count: %d, average size: %f%n"
const/4 v11, 0x3
new-array v11, v11, [Ljava/lang/Object;
const/4 v12, 0x0
invoke-static {v4, v5}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v13
aput-object v13, v11, v12
const/4 v12, 0x1
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v13
aput-object v13, v11, v12
const/4 v12, 0x2
long-to-double v14, v4
int-to-double v0, v2
move-wide/from16 v16, v0
div-double v14, v14, v16
invoke-static {v14, v15}, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
move-result-object v2
aput-object v2, v11, v12
invoke-virtual {v3, v9, v10, v11}, Ljava/io/PrintStream;->printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
.line 1250
add-long v10, v6, v4
const-wide/16 v6, 0x0
const/4 v4, 0x0
.line 1251
const-wide/16 v2, 0x0
.line 1252
invoke-virtual/range {p0 .. p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectopenoutputsDumpSQL()Ljava/lang/String;
move-result-object v5
invoke-interface {v8, v5}, Ljava/sql/Statement;->executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;
move-result-object v5
.line 1253
:goto_11a
invoke-interface {v5}, Ljava/sql/ResultSet;->next()Z
move-result v9
if-eqz v9, :cond_144
.line 1254
const-wide/16 v12, 0x20
add-long/2addr v6, v12
.line 1255
const-wide/16 v12, 0x4
add-long/2addr v6, v12
.line 1256
const-wide/16 v12, 0x4
add-long/2addr v6, v12
.line 1257
const/4 v9, 0x1
invoke-interface {v5, v9}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v9
array-length v9, v9
int-to-long v12, v9
add-long/2addr v6, v12
.line 1258
const/4 v9, 0x2
invoke-interface {v5, v9}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v9
array-length v9, v9
int-to-long v12, v9
add-long/2addr v6, v12
.line 1259
const/4 v9, 0x2
invoke-interface {v5, v9}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v9
array-length v9, v9
int-to-long v12, v9
add-long/2addr v2, v12
.line 1260
add-int/lit8 v4, v4, 0x1
goto :goto_11a
.line 1262
:cond_144
invoke-interface {v5}, Ljava/sql/ResultSet;->close()V
.line 1263
sget-object v5, Ljava/lang/System;->out:Ljava/io/PrintStream;
sget-object v9, Ljava/util/Locale;->US:Ljava/util/Locale;
const-string v12, "Open Outputs size: %d, count: %d, average size: %f, average script size: %f (%d in id indexes)%n"
const/4 v13, 0x5
new-array v13, v13, [Ljava/lang/Object;
const/4 v14, 0x0
.line 1264
invoke-static {v6, v7}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v15
aput-object v15, v13, v14
const/4 v14, 0x1
invoke-static {v4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v15
aput-object v15, v13, v14
const/4 v14, 0x2
long-to-double v0, v6
move-wide/from16 v16, v0
int-to-double v0, v4
move-wide/from16 v18, v0
div-double v16, v16, v18
invoke-static/range {v16 .. v17}, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
move-result-object v15
aput-object v15, v13, v14
const/4 v14, 0x3
long-to-double v2, v2
int-to-double v0, v4
move-wide/from16 v16, v0
div-double v2, v2, v16
invoke-static {v2, v3}, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
move-result-object v2
aput-object v2, v13, v14
const/4 v2, 0x4
shl-int/lit8 v3, v4, 0x3
invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v3
aput-object v3, v13, v2
.line 1263
invoke-virtual {v5, v9, v12, v13}, Ljava/io/PrintStream;->printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
.line 1266
add-long v2, v10, v6
.line 1267
sget-object v4, Ljava/lang/System;->out:Ljava/io/PrintStream;
new-instance v5, Ljava/lang/StringBuilder;
const-string v6, "Total Size: "
invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v5, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v4, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 1269
invoke-interface {v8}, Ljava/sql/Statement;->close()V
.line 1270
return-void
.end method
.method public get(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredBlock;
.registers 3
.prologue
.line 779
const/4 v0, 0x0
invoke-virtual {p0, p1, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->get(Lorg/bitcoinj/core/Sha256Hash;Z)Lorg/bitcoinj/core/StoredBlock;
move-result-object v0
return-object v0
.end method
.method public get(Lorg/bitcoinj/core/Sha256Hash;Z)Lorg/bitcoinj/core/StoredBlock;
.registers 10
.prologue
const/4 v1, 0x0
.line 729
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
if-eqz v0, :cond_10
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
invoke-virtual {v0, p1}, Lorg/bitcoinj/core/Sha256Hash;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_10
.line 730
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
.line 756
:cond_f
:goto_f
return-object v0
.line 731
:cond_10
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
if-eqz v0, :cond_1f
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
invoke-virtual {v0, p1}, Lorg/bitcoinj/core/Sha256Hash;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1f
.line 732
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
goto :goto_f
.line 733
:cond_1f
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 736
:try_start_22
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 737
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectHeadersSQL()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
:try_end_31
.catch Ljava/sql/SQLException; {:try_start_22 .. :try_end_31} :catch_ae
.catch Lorg/bitcoinj/core/ProtocolException; {:try_start_22 .. :try_end_31} :catch_bd
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_22 .. :try_end_31} :catch_c7
.catchall {:try_start_22 .. :try_end_31} :catchall_d8
move-result-object v2
.line 739
const/16 v0, 0x1c
:try_start_34
new-array v0, v0, [B
.line 740
invoke-virtual {p1}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v3
const/4 v4, 0x4
const/4 v5, 0x0
const/16 v6, 0x1c
invoke-static {v3, v4, v0, v5, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 741
const/4 v3, 0x1
invoke-interface {v2, v3, v0}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 742
invoke-interface {v2}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v0
.line 743
invoke-interface {v0}, Ljava/sql/ResultSet;->next()Z
:try_end_4c
.catch Ljava/sql/SQLException; {:try_start_34 .. :try_end_4c} :catch_df
.catch Lorg/bitcoinj/core/ProtocolException; {:try_start_34 .. :try_end_4c} :catch_dd
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_34 .. :try_end_4c} :catch_db
.catchall {:try_start_34 .. :try_end_4c} :catchall_c5
move-result v3
if-nez v3, :cond_5f
.line 767
if-eqz v2, :cond_54
.line 769
:try_start_51
invoke-interface {v2}, Ljava/sql/PreparedStatement;->close()V
:try_end_54
.catch Ljava/sql/SQLException; {:try_start_51 .. :try_end_54} :catch_56
:cond_54
move-object v0, v1
.line 744
goto :goto_f
.line 771
:catch_56
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 748
:cond_5f
if-eqz p2, :cond_78
const/4 v3, 0x4
:try_start_62
invoke-interface {v0, v3}, Ljava/sql/ResultSet;->getBoolean(I)Z
:try_end_65
.catch Ljava/sql/SQLException; {:try_start_62 .. :try_end_65} :catch_df
.catch Lorg/bitcoinj/core/ProtocolException; {:try_start_62 .. :try_end_65} :catch_dd
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_62 .. :try_end_65} :catch_db
.catchall {:try_start_62 .. :try_end_65} :catchall_c5
move-result v3
if-nez v3, :cond_78
.line 767
if-eqz v2, :cond_6d
.line 769
:try_start_6a
invoke-interface {v2}, Ljava/sql/PreparedStatement;->close()V
:try_end_6d
.catch Ljava/sql/SQLException; {:try_start_6a .. :try_end_6d} :catch_6f
:cond_6d
move-object v0, v1
.line 749
goto :goto_f
.line 771
:catch_6f
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 751
:cond_78
:try_start_78
new-instance v1, Ljava/math/BigInteger;
const/4 v3, 0x1
invoke-interface {v0, v3}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v3
invoke-direct {v1, v3}, Ljava/math/BigInteger;-><init>([B)V
.line 752
const/4 v3, 0x2
invoke-interface {v0, v3}, Ljava/sql/ResultSet;->getInt(I)I
move-result v3
.line 753
iget-object v4, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v4}, Lorg/bitcoinj/core/NetworkParameters;->getDefaultSerializer()Lorg/bitcoinj/core/MessageSerializer;
move-result-object v4
const/4 v5, 0x3
invoke-interface {v0, v5}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v0
invoke-virtual {v4, v0}, Lorg/bitcoinj/core/MessageSerializer;->makeBlock([B)Lorg/bitcoinj/core/Block;
move-result-object v4
.line 754
invoke-virtual {v4}, Lorg/bitcoinj/core/Block;->verifyHeader()V
.line 755
new-instance v0, Lorg/bitcoinj/core/StoredBlock;
invoke-direct {v0, v4, v1, v3}, Lorg/bitcoinj/core/StoredBlock;-><init>(Lorg/bitcoinj/core/Block;Ljava/math/BigInteger;I)V
:try_end_9e
.catch Ljava/sql/SQLException; {:try_start_78 .. :try_end_9e} :catch_df
.catch Lorg/bitcoinj/core/ProtocolException; {:try_start_78 .. :try_end_9e} :catch_dd
.catch Lorg/bitcoinj/core/VerificationException; {:try_start_78 .. :try_end_9e} :catch_db
.catchall {:try_start_78 .. :try_end_9e} :catchall_c5
.line 767
if-eqz v2, :cond_f
.line 769
:try_start_a0
invoke-interface {v2}, Ljava/sql/PreparedStatement;->close()V
:try_end_a3
.catch Ljava/sql/SQLException; {:try_start_a0 .. :try_end_a3} :catch_a5
goto/16 :goto_f
.line 771
:catch_a5
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 757
:catch_ae
move-exception v0
.line 758
:goto_af
:try_start_af
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_b5
.catchall {:try_start_af .. :try_end_b5} :catchall_b5
.line 767
:catchall_b5
move-exception v0
move-object v2, v1
:goto_b7
if-eqz v2, :cond_bc
.line 769
:try_start_b9
invoke-interface {v2}, Ljava/sql/PreparedStatement;->close()V
:try_end_bc
.catch Ljava/sql/SQLException; {:try_start_b9 .. :try_end_bc} :catch_cf
.line 771
:cond_bc
throw v0
.line 759
:catch_bd
move-exception v0
move-object v2, v1
.line 761
:goto_bf
:try_start_bf
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 767
:catchall_c5
move-exception v0
goto :goto_b7
.line 762
:catch_c7
move-exception v0
move-object v2, v1
.line 765
:goto_c9
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_cf
.catchall {:try_start_bf .. :try_end_cf} :catchall_c5
.line 771
:catch_cf
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 767
:catchall_d8
move-exception v0
move-object v2, v1
goto :goto_b7
.line 762
:catch_db
move-exception v0
goto :goto_c9
.line 759
:catch_dd
move-exception v0
goto :goto_bf
.line 757
:catch_df
move-exception v0
move-object v1, v2
goto :goto_af
.end method
.method protected getBalanceSelectSQL()Ljava/lang/String;
.registers 2
.prologue
.line 233
const-string v0, "select sum(value) from openoutputs where toaddress = ?"
return-object v0
.end method
.method public getChainHead()Lorg/bitcoinj/core/StoredBlock;
.registers 2
.prologue
.line 853
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
return-object v0
.end method
.method public getChainHeadHeight()I
.registers 3
.prologue
.line 1081
:try_start_0
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->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 1082
:catch_9
move-exception v0
.line 1083
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 protected getCompatibilitySQL()Ljava/util/List;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.prologue
.line 249
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 250
const-string v1, "SELECT coinbase FROM openoutputs WHERE 1 = 2"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 251
return-object v0
.end method
.method protected abstract getCreateIndexesSQL()Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.end method
.method protected abstract getCreateSchemeSQL()Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.end method
.method protected abstract getCreateTablesSQL()Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.end method
.method protected abstract getDatabaseDriverClass()Ljava/lang/String;
.end method
.method protected getDeleteOpenoutputsSQL()Ljava/lang/String;
.registers 2
.prologue
.line 384
const-string v0, "DELETE FROM openoutputs WHERE hash = ? AND index = ?"
return-object v0
.end method
.method protected getDeleteUndoableBlocksSQL()Ljava/lang/String;
.registers 2
.prologue
.line 352
const-string v0, "DELETE FROM undoableblocks WHERE height <= ?"
return-object v0
.end method
.method protected getDropTablesSQL()Ljava/util/List;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.prologue
.line 267
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 268
const-string v1, "DROP TABLE settings"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 269
const-string v1, "DROP TABLE headers"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 270
const-string v1, "DROP TABLE undoableblocks"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 271
const-string v1, "DROP TABLE openoutputs"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 272
return-object v0
.end method
.method protected abstract getDuplicateKeyErrorCode()Ljava/lang/String;
.end method
.method protected getInsertHeadersSQL()Ljava/lang/String;
.registers 2
.prologue
.line 312
const-string v0, "INSERT INTO headers(hash, chainwork, height, header, wasundoable) VALUES(?, ?, ?, ?, ?)"
return-object v0
.end method
.method protected getInsertOpenoutputsSQL()Ljava/lang/String;
.registers 2
.prologue
.line 376
const-string v0, "INSERT INTO openoutputs (hash, index, height, value, scriptbytes, toaddress, addresstargetable, coinbase) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
return-object v0
.end method
.method protected getInsertSettingsSQL()Ljava/lang/String;
.registers 2
.prologue
.line 288
const-string v0, "INSERT INTO settings(name, value) VALUES(?, ?)"
return-object v0
.end method
.method protected getInsertUndoableBlocksSQL()Ljava/lang/String;
.registers 2
.prologue
.line 336
const-string v0, "INSERT INTO undoableblocks(hash, height, txoutchanges, transactions) VALUES(?, ?, ?, ?)"
return-object v0
.end method
.method public getOnceUndoableStoredBlock(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredBlock;
.registers 3
.prologue
.line 784
const/4 v0, 0x1
invoke-virtual {p0, p1, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->get(Lorg/bitcoinj/core/Sha256Hash;Z)Lorg/bitcoinj/core/StoredBlock;
move-result-object v0
return-object v0
.end method
.method public getOpenTransactionOutputs(Ljava/util/List;)Ljava/util/List;
.registers 16
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/core/Address;",
">;)",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/core/UTXO;",
">;"
}
.end annotation
.prologue
.line 1160
const/4 v1, 0x0
.line 1161
new-instance v10, Ljava/util/ArrayList;
invoke-direct {v10}, Ljava/util/ArrayList;-><init>()V
.line 1163
:try_start_6
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1164
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getTrasactionOutputSelectSQL()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
:try_end_18
.catch Ljava/sql/SQLException; {:try_start_6 .. :try_end_18} :catch_ac
.catch Lorg/bitcoinj/store/BlockStoreException; {:try_start_6 .. :try_end_18} :catch_94
.catchall {:try_start_6 .. :try_end_18} :catchall_a7
move-result-object v9
.line 1165
:try_start_19
invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v11
:cond_1d
invoke-interface {v11}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_85
invoke-interface {v11}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/Address;
.line 1166
const/4 v1, 0x1
invoke-virtual {v0}, Lorg/bitcoinj/core/Address;->toString()Ljava/lang/String;
move-result-object v0
invoke-interface {v9, v1, v0}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 1167
invoke-interface {v9}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v12
.line 1168
:goto_35
invoke-interface {v12}, Ljava/sql/ResultSet;->next()Z
move-result v0
if-eqz v0, :cond_1d
.line 1169
const/4 v0, 0x1
invoke-interface {v12, v0}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v0
invoke-static {v0}, Lorg/bitcoinj/core/Sha256Hash;->wrap([B)Lorg/bitcoinj/core/Sha256Hash;
move-result-object v1
.line 1170
const/4 v0, 0x2
invoke-interface {v12, v0}, Ljava/sql/ResultSet;->getLong(I)J
move-result-wide v2
invoke-static {v2, v3}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;
move-result-object v4
.line 1171
const/4 v0, 0x3
invoke-interface {v12, v0}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v13
.line 1172
const/4 v0, 0x4
invoke-interface {v12, v0}, Ljava/sql/ResultSet;->getInt(I)I
move-result v5
.line 1173
const/4 v0, 0x5
invoke-interface {v12, v0}, Ljava/sql/ResultSet;->getInt(I)I
move-result v2
.line 1174
const/4 v0, 0x6
invoke-interface {v12, v0}, Ljava/sql/ResultSet;->getBoolean(I)Z
move-result v6
.line 1175
const/4 v0, 0x7
invoke-interface {v12, v0}, Ljava/sql/ResultSet;->getString(I)Ljava/lang/String;
move-result-object v8
.line 1176
new-instance v0, Lorg/bitcoinj/core/UTXO;
int-to-long v2, v2
new-instance v7, Lorg/bitcoinj/script/Script;
invoke-direct {v7, v13}, Lorg/bitcoinj/script/Script;-><init>([B)V
invoke-direct/range {v0 .. v8}, Lorg/bitcoinj/core/UTXO;-><init>(Lorg/bitcoinj/core/Sha256Hash;JLorg/bitcoinj/core/Coin;IZLorg/bitcoinj/script/Script;Ljava/lang/String;)V
.line 1183
invoke-interface {v10, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z
:try_end_74
.catch Ljava/sql/SQLException; {:try_start_19 .. :try_end_74} :catch_75
.catch Lorg/bitcoinj/store/BlockStoreException; {:try_start_19 .. :try_end_74} :catch_aa
.catchall {:try_start_19 .. :try_end_74} :catchall_9c
goto :goto_35
.line 1187
:catch_75
move-exception v0
move-object v1, v9
.line 1188
:goto_77
:try_start_77
new-instance v2, Lorg/bitcoinj/core/UTXOProviderException;
invoke-direct {v2, v0}, Lorg/bitcoinj/core/UTXOProviderException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_7d
.catchall {:try_start_77 .. :try_end_7d} :catchall_7d
.line 1192
:catchall_7d
move-exception v0
move-object v9, v1
:goto_7f
if-eqz v9, :cond_84
.line 1194
:try_start_81
invoke-interface {v9}, Ljava/sql/PreparedStatement;->close()V
:try_end_84
.catch Ljava/sql/SQLException; {:try_start_81 .. :try_end_84} :catch_9e
.line 1196
:cond_84
throw v0
.line 1192
:cond_85
if-eqz v9, :cond_8a
.line 1194
:try_start_87
invoke-interface {v9}, Ljava/sql/PreparedStatement;->close()V
:try_end_8a
.catch Ljava/sql/SQLException; {:try_start_87 .. :try_end_8a} :catch_8b
.line 1186
:cond_8a
return-object v10
.line 1195
:catch_8b
move-exception v0
.line 1196
new-instance v1, Lorg/bitcoinj/core/UTXOProviderException;
const-string v2, "Could not close statement"
invoke-direct {v1, v2, v0}, Lorg/bitcoinj/core/UTXOProviderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.line 1189
:catch_94
move-exception v0
move-object v9, v1
.line 1190
:goto_96
:try_start_96
new-instance v1, Lorg/bitcoinj/core/UTXOProviderException;
invoke-direct {v1, v0}, Lorg/bitcoinj/core/UTXOProviderException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_9c
.catchall {:try_start_96 .. :try_end_9c} :catchall_9c
.line 1192
:catchall_9c
move-exception v0
goto :goto_7f
.line 1195
:catch_9e
move-exception v0
.line 1196
new-instance v1, Lorg/bitcoinj/core/UTXOProviderException;
const-string v2, "Could not close statement"
invoke-direct {v1, v2, v0}, Lorg/bitcoinj/core/UTXOProviderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.line 1192
:catchall_a7
move-exception v0
move-object v9, v1
goto :goto_7f
.line 1189
:catch_aa
move-exception v0
goto :goto_96
.line 1187
:catch_ac
move-exception v0
goto :goto_77
.end method
.method public getParams()Lorg/bitcoinj/core/NetworkParameters;
.registers 2
.prologue
.line 1075
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->params:Lorg/bitcoinj/core/NetworkParameters;
return-object v0
.end method
.method protected getSelectHeadersDumpSQL()Ljava/lang/String;
.registers 2
.prologue
.line 400
const-string v0, "SELECT chainwork, header FROM headers"
return-object v0
.end method
.method protected getSelectHeadersSQL()Ljava/lang/String;
.registers 2
.prologue
.line 304
const-string v0, "SELECT chainwork, height, header, wasundoable FROM headers WHERE hash = ?"
return-object v0
.end method
.method protected getSelectOpenoutputsCountSQL()Ljava/lang/String;
.registers 2
.prologue
.line 368
const-string v0, "SELECT COUNT(*) FROM openoutputs WHERE hash = ?"
return-object v0
.end method
.method protected getSelectOpenoutputsSQL()Ljava/lang/String;
.registers 2
.prologue
.line 360
const-string v0, "SELECT height, value, scriptbytes, coinbase, toaddress, addresstargetable FROM openoutputs WHERE hash = ? AND index = ?"
return-object v0
.end method
.method protected getSelectSettingsDumpSQL()Ljava/lang/String;
.registers 2
.prologue
.line 392
const-string v0, "SELECT name, value FROM settings"
return-object v0
.end method
.method protected getSelectSettingsSQL()Ljava/lang/String;
.registers 2
.prologue
.line 280
const-string v0, "SELECT value FROM settings WHERE name = ?"
return-object v0
.end method
.method protected getSelectUndoableBlocksSQL()Ljava/lang/String;
.registers 2
.prologue
.line 328
const-string v0, "SELECT txoutchanges, transactions FROM undoableblocks WHERE hash = ?"
return-object v0
.end method
.method protected getSelectUndoableblocksDumpSQL()Ljava/lang/String;
.registers 2
.prologue
.line 408
const-string v0, "SELECT txoutchanges, transactions FROM undoableblocks"
return-object v0
.end method
.method protected getSelectopenoutputsDumpSQL()Ljava/lang/String;
.registers 2
.prologue
.line 416
const-string v0, "SELECT value, scriptbytes FROM openoutputs"
return-object v0
.end method
.method protected getTablesExistSQL()Ljava/lang/String;
.registers 2
.prologue
.line 241
const-string v0, "SELECT * FROM settings WHERE 1 = 2"
return-object v0
.end method
.method public getTransactionOutput(Lorg/bitcoinj/core/Sha256Hash;J)Lorg/bitcoinj/core/UTXO;
.registers 14
.prologue
const/4 v1, 0x0
.line 916
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 919
:try_start_4
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 920
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectOpenoutputsSQL()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
:try_end_13
.catch Ljava/sql/SQLException; {:try_start_4 .. :try_end_13} :catch_73
.catchall {:try_start_4 .. :try_end_13} :catchall_8b
move-result-object v9
.line 921
const/4 v0, 0x1
:try_start_15
invoke-virtual {p1}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v2
invoke-interface {v9, v0, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 923
const/4 v0, 0x2
long-to-int v2, p2
invoke-interface {v9, v0, v2}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 924
invoke-interface {v9}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v0
.line 925
invoke-interface {v0}, Ljava/sql/ResultSet;->next()Z
:try_end_28
.catch Ljava/sql/SQLException; {:try_start_15 .. :try_end_28} :catch_90
.catchall {:try_start_15 .. :try_end_28} :catchall_8e
move-result v2
if-nez v2, :cond_3b
.line 945
if-eqz v9, :cond_30
.line 947
:try_start_2d
invoke-interface {v9}, Ljava/sql/PreparedStatement;->close()V
:try_end_30
.catch Ljava/sql/SQLException; {:try_start_2d .. :try_end_30} :catch_32
:cond_30
move-object v0, v1
.line 941
:cond_31
:goto_31
return-object v0
.line 949
:catch_32
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 929
:cond_3b
const/4 v1, 0x1
:try_start_3c
invoke-interface {v0, v1}, Ljava/sql/ResultSet;->getInt(I)I
move-result v5
.line 930
const/4 v1, 0x2
invoke-interface {v0, v1}, Ljava/sql/ResultSet;->getLong(I)J
move-result-wide v2
invoke-static {v2, v3}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;
move-result-object v4
.line 931
const/4 v1, 0x3
invoke-interface {v0, v1}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v1
.line 932
const/4 v2, 0x4
invoke-interface {v0, v2}, Ljava/sql/ResultSet;->getBoolean(I)Z
move-result v6
.line 933
const/4 v2, 0x5
invoke-interface {v0, v2}, Ljava/sql/ResultSet;->getString(I)Ljava/lang/String;
move-result-object v8
.line 934
new-instance v0, Lorg/bitcoinj/core/UTXO;
new-instance v7, Lorg/bitcoinj/script/Script;
invoke-direct {v7, v1}, Lorg/bitcoinj/script/Script;-><init>([B)V
move-object v1, p1
move-wide v2, p2
invoke-direct/range {v0 .. v8}, Lorg/bitcoinj/core/UTXO;-><init>(Lorg/bitcoinj/core/Sha256Hash;JLorg/bitcoinj/core/Coin;IZLorg/bitcoinj/script/Script;Ljava/lang/String;)V
:try_end_64
.catch Ljava/sql/SQLException; {:try_start_3c .. :try_end_64} :catch_90
.catchall {:try_start_3c .. :try_end_64} :catchall_8e
.line 945
if-eqz v9, :cond_31
.line 947
:try_start_66
invoke-interface {v9}, Ljava/sql/PreparedStatement;->close()V
:try_end_69
.catch Ljava/sql/SQLException; {:try_start_66 .. :try_end_69} :catch_6a
goto :goto_31
.line 949
:catch_6a
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 942
:catch_73
move-exception v0
.line 943
:goto_74
:try_start_74
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_7a
.catchall {:try_start_74 .. :try_end_7a} :catchall_7a
.line 945
:catchall_7a
move-exception v0
move-object v9, v1
:goto_7c
if-eqz v9, :cond_81
.line 947
:try_start_7e
invoke-interface {v9}, Ljava/sql/PreparedStatement;->close()V
:try_end_81
.catch Ljava/sql/SQLException; {:try_start_7e .. :try_end_81} :catch_82
.line 949
:cond_81
throw v0
:catch_82
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 945
:catchall_8b
move-exception v0
move-object v9, v1
goto :goto_7c
:catchall_8e
move-exception v0
goto :goto_7c
.line 942
:catch_90
move-exception v0
move-object v1, v9
goto :goto_74
.end method
.method protected getTrasactionOutputSelectSQL()Ljava/lang/String;
.registers 2
.prologue
.line 259
const-string v0, "SELECT hash, value, scriptbytes, height, index, coinbase, toaddress, addresstargetable FROM openoutputs where toaddress = ?"
return-object v0
.end method
.method public getUndoBlock(Lorg/bitcoinj/core/Sha256Hash;)Lorg/bitcoinj/core/StoredUndoableBlock;
.registers 10
.prologue
const/4 v3, 0x4
const/4 v2, 0x0
.line 789
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 790
const/4 v1, 0x0
.line 792
:try_start_6
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 793
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectUndoableBlocksSQL()Ljava/lang/String;
move-result-object v4
invoke-interface {v0, v4}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v1
.line 796
const/16 v0, 0x1c
new-array v0, v0, [B
.line 797
invoke-virtual {p1}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v4
const/4 v5, 0x4
const/4 v6, 0x0
const/16 v7, 0x1c
invoke-static {v4, v5, v0, v6, v7}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 798
const/4 v4, 0x1
invoke-interface {v1, v4, v0}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 799
invoke-interface {v1}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v0
.line 800
invoke-interface {v0}, Ljava/sql/ResultSet;->next()Z
:try_end_30
.catch Ljava/sql/SQLException; {:try_start_6 .. :try_end_30} :catch_ae
.catch Ljava/lang/NullPointerException; {:try_start_6 .. :try_end_30} :catch_bc
.catch Ljava/lang/ClassCastException; {:try_start_6 .. :try_end_30} :catch_c3
.catch Lorg/bitcoinj/core/ProtocolException; {:try_start_6 .. :try_end_30} :catch_ca
.catch Ljava/io/IOException; {:try_start_6 .. :try_end_30} :catch_d1
.catchall {:try_start_6 .. :try_end_30} :catchall_b5
move-result v4
if-nez v4, :cond_43
.line 841
if-eqz v1, :cond_38
.line 843
:try_start_35
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_38
.catch Ljava/sql/SQLException; {:try_start_35 .. :try_end_38} :catch_3a
.line 801
:cond_38
const/4 v0, 0x0
.line 825
:cond_39
:goto_39
return-object v0
.line 845
:catch_3a
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 804
:cond_43
const/4 v4, 0x1
:try_start_44
invoke-interface {v0, v4}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v4
.line 805
const/4 v5, 0x2
invoke-interface {v0, v5}, Ljava/sql/ResultSet;->getBytes(I)[B
move-result-object v5
.line 807
if-nez v4, :cond_9e
.line 809
const/4 v0, 0x0
aget-byte v0, v5, v0
and-int/lit16 v0, v0, 0xff
const/4 v4, 0x1
aget-byte v4, v5, v4
and-int/lit16 v4, v4, 0xff
shl-int/lit8 v4, v4, 0x8
or-int/2addr v0, v4
const/4 v4, 0x2
aget-byte v4, v5, v4
and-int/lit16 v4, v4, 0xff
shl-int/lit8 v4, v4, 0x10
or-int/2addr v0, v4
const/4 v4, 0x3
aget-byte v4, v5, v4
and-int/lit16 v4, v4, 0xff
shl-int/lit8 v4, v4, 0x18
or-int/2addr v4, v0
.line 813
new-instance v6, Ljava/util/LinkedList;
invoke-direct {v6}, Ljava/util/LinkedList;-><init>()V
move v0, v2
move v2, v3
.line 814
:goto_73
if-ge v0, v4, :cond_8a
.line 815
iget-object v3, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v3}, Lorg/bitcoinj/core/NetworkParameters;->getDefaultSerializer()Lorg/bitcoinj/core/MessageSerializer;
move-result-object v3
invoke-virtual {v3, v5, v2}, Lorg/bitcoinj/core/MessageSerializer;->makeTransaction([BI)Lorg/bitcoinj/core/Transaction;
move-result-object v3
.line 816
invoke-interface {v6, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 817
invoke-virtual {v3}, Lorg/bitcoinj/core/Transaction;->getMessageSize()I
move-result v3
add-int/2addr v2, v3
.line 814
add-int/lit8 v0, v0, 0x1
goto :goto_73
.line 819
:cond_8a
new-instance v0, Lorg/bitcoinj/core/StoredUndoableBlock;
invoke-direct {v0, p1, v6}, Lorg/bitcoinj/core/StoredUndoableBlock;-><init>(Lorg/bitcoinj/core/Sha256Hash;Ljava/util/List;)V
:try_end_8f
.catch Ljava/sql/SQLException; {:try_start_44 .. :try_end_8f} :catch_ae
.catch Ljava/lang/NullPointerException; {:try_start_44 .. :try_end_8f} :catch_bc
.catch Ljava/lang/ClassCastException; {:try_start_44 .. :try_end_8f} :catch_c3
.catch Lorg/bitcoinj/core/ProtocolException; {:try_start_44 .. :try_end_8f} :catch_ca
.catch Ljava/io/IOException; {:try_start_44 .. :try_end_8f} :catch_d1
.catchall {:try_start_44 .. :try_end_8f} :catchall_b5
.line 841
:goto_8f
if-eqz v1, :cond_39
.line 843
:try_start_91
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_94
.catch Ljava/sql/SQLException; {:try_start_91 .. :try_end_94} :catch_95
goto :goto_39
.line 845
:catch_95
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 821
:cond_9e
:try_start_9e
new-instance v2, Lorg/bitcoinj/core/TransactionOutputChanges;
new-instance v0, Ljava/io/ByteArrayInputStream;
invoke-direct {v0, v4}, Ljava/io/ByteArrayInputStream;-><init>([B)V
invoke-direct {v2, v0}, Lorg/bitcoinj/core/TransactionOutputChanges;-><init>(Ljava/io/InputStream;)V
.line 823
new-instance v0, Lorg/bitcoinj/core/StoredUndoableBlock;
invoke-direct {v0, p1, v2}, Lorg/bitcoinj/core/StoredUndoableBlock;-><init>(Lorg/bitcoinj/core/Sha256Hash;Lorg/bitcoinj/core/TransactionOutputChanges;)V
:try_end_ad
.catch Ljava/sql/SQLException; {:try_start_9e .. :try_end_ad} :catch_ae
.catch Ljava/lang/NullPointerException; {:try_start_9e .. :try_end_ad} :catch_bc
.catch Ljava/lang/ClassCastException; {:try_start_9e .. :try_end_ad} :catch_c3
.catch Lorg/bitcoinj/core/ProtocolException; {:try_start_9e .. :try_end_ad} :catch_ca
.catch Ljava/io/IOException; {:try_start_9e .. :try_end_ad} :catch_d1
.catchall {:try_start_9e .. :try_end_ad} :catchall_b5
goto :goto_8f
.line 826
:catch_ae
move-exception v0
.line 827
:try_start_af
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_b5
.catchall {:try_start_af .. :try_end_b5} :catchall_b5
.line 841
:catchall_b5
move-exception v0
if-eqz v1, :cond_bb
.line 843
:try_start_b8
invoke-interface {v1}, Ljava/sql/PreparedStatement;->close()V
:try_end_bb
.catch Ljava/sql/SQLException; {:try_start_b8 .. :try_end_bb} :catch_d8
.line 845
:cond_bb
throw v0
.line 828
:catch_bc
move-exception v0
.line 830
:try_start_bd
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
.line 831
:catch_c3
move-exception v0
.line 833
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
.line 834
:catch_ca
move-exception v0
.line 836
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
.line 837
:catch_d1
move-exception v0
.line 839
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_d8
.catchall {:try_start_bd .. :try_end_d8} :catchall_b5
.line 845
:catch_d8
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected getUpdateHeadersSQL()Ljava/lang/String;
.registers 2
.prologue
.line 320
const-string v0, "UPDATE headers SET wasundoable=? WHERE hash=?"
return-object v0
.end method
.method protected getUpdateSettingsSLQ()Ljava/lang/String;
.registers 2
.prologue
.line 296
const-string v0, "UPDATE settings SET value = ? WHERE name = ?"
return-object v0
.end method
.method protected getUpdateUndoableBlocksSQL()Ljava/lang/String;
.registers 2
.prologue
.line 344
const-string v0, "UPDATE undoableblocks SET txoutchanges=?, transactions=? WHERE hash = ?"
return-object v0
.end method
.method public getVerifiedChainHead()Lorg/bitcoinj/core/StoredBlock;
.registers 2
.prologue
.line 876
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
return-object v0
.end method
.method public hasUnspentOutputs(Lorg/bitcoinj/core/Sha256Hash;I)Z
.registers 7
.prologue
const/4 v1, 0x1
.line 1049
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1050
const/4 v2, 0x0
.line 1052
:try_start_5
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getSelectOpenoutputsCountSQL()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
:try_end_14
.catch Ljava/sql/SQLException; {:try_start_5 .. :try_end_14} :catch_63
.catchall {:try_start_5 .. :try_end_14} :catchall_61
move-result-object v2
.line 1053
const/4 v0, 0x1
:try_start_16
invoke-virtual {p1}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v3
invoke-interface {v2, v0, v3}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 1054
invoke-interface {v2}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v0
.line 1055
invoke-interface {v0}, Ljava/sql/ResultSet;->next()Z
move-result v3
if-nez v3, :cond_3f
.line 1056
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Got no results from a COUNT(*) query"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_2f
.catch Ljava/sql/SQLException; {:try_start_16 .. :try_end_2f} :catch_2f
.catchall {:try_start_16 .. :try_end_2f} :catchall_61
.line 1060
:catch_2f
move-exception v0
move-object v1, v2
.line 1061
:goto_31
:try_start_31
new-instance v2, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v2, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v2
:try_end_37
.catchall {:try_start_31 .. :try_end_37} :catchall_37
.line 1063
:catchall_37
move-exception v0
move-object v2, v1
:goto_39
if-eqz v2, :cond_3e
.line 1065
:try_start_3b
invoke-interface {v2}, Ljava/sql/PreparedStatement;->close()V
:try_end_3e
.catch Ljava/sql/SQLException; {:try_start_3b .. :try_end_3e} :catch_58
.line 1067
:cond_3e
throw v0
.line 1058
:cond_3f
const/4 v3, 0x1
:try_start_40
invoke-interface {v0, v3}, Ljava/sql/ResultSet;->getInt(I)I
:try_end_43
.catch Ljava/sql/SQLException; {:try_start_40 .. :try_end_43} :catch_2f
.catchall {:try_start_40 .. :try_end_43} :catchall_61
move-result v0
.line 1059
if-eqz v0, :cond_4d
move v0, v1
.line 1063
:goto_47
if-eqz v2, :cond_4c
.line 1065
:try_start_49
invoke-interface {v2}, Ljava/sql/PreparedStatement;->close()V
:try_end_4c
.catch Ljava/sql/SQLException; {:try_start_49 .. :try_end_4c} :catch_4f
.line 1059
:cond_4c
return v0
:cond_4d
const/4 v0, 0x0
goto :goto_47
.line 1067
:catch_4f
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
:catch_58
move-exception v0
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Failed to close PreparedStatement"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 1063
:catchall_61
move-exception v0
goto :goto_39
.line 1060
:catch_63
move-exception v0
move-object v1, v2
goto :goto_31
.end method
.method protected final declared-synchronized maybeConnect()V
.registers 4
.prologue
.line 426
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
if-eqz v0, :cond_19
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-interface {v0}, Ljava/sql/Connection;->isClosed()Z
:try_end_14
.catch Ljava/sql/SQLException; {:try_start_1 .. :try_end_14} :catch_5f
.catchall {:try_start_1 .. :try_end_14} :catchall_66
move-result v0
if-nez v0, :cond_19
.line 449
:goto_17
monitor-exit p0
return-void
.line 429
:cond_19
:try_start_19
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->username:Ljava/lang/String;
if-eqz v0, :cond_21
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->password:Ljava/lang/String;
if-nez v0, :cond_69
.line 430
:cond_21
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
iget-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->connectionURL:Ljava/lang/String;
invoke-static {v1}, Ljava/sql/DriverManager;->getConnection(Ljava/lang/String;)Ljava/sql/Connection;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/ThreadLocal;->set(Ljava/lang/Object;)V
.line 437
:goto_2c
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->allConnections:Ljava/util/List;
iget-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v1}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v1
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 438
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 440
iget-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->schemaName:Ljava/lang/String;
if-eqz v1, :cond_88
.line 441
invoke-interface {v0}, Ljava/sql/Connection;->createStatement()Ljava/sql/Statement;
move-result-object v1
.line 442
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getCreateSchemeSQL()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_4f
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_88
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
.line 443
invoke-interface {v1, v0}, Ljava/sql/Statement;->execute(Ljava/lang/String;)Z
:try_end_5e
.catch Ljava/sql/SQLException; {:try_start_19 .. :try_end_5e} :catch_5f
.catchall {:try_start_19 .. :try_end_5e} :catchall_66
goto :goto_4f
.line 447
:catch_5f
move-exception v0
.line 448
:try_start_60
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_66
.catchall {:try_start_60 .. :try_end_66} :catchall_66
.line 426
:catchall_66
move-exception v0
monitor-exit p0
throw v0
.line 432
:cond_69
:try_start_69
new-instance v0, Ljava/util/Properties;
invoke-direct {v0}, Ljava/util/Properties;-><init>()V
.line 433
const-string v1, "user"
iget-object v2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->username:Ljava/lang/String;
invoke-virtual {v0, v1, v2}, Ljava/util/Properties;->setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
.line 434
const-string v1, "password"
iget-object v2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->password:Ljava/lang/String;
invoke-virtual {v0, v1, v2}, Ljava/util/Properties;->setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
.line 435
iget-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
iget-object v2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->connectionURL:Ljava/lang/String;
invoke-static {v2, v0}, Ljava/sql/DriverManager;->getConnection(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/lang/ThreadLocal;->set(Ljava/lang/Object;)V
goto :goto_2c
.line 446
:cond_88
sget-object v0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Made a new connection to database "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v2, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->connectionURL:Ljava/lang/String;
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;)V
:try_end_9e
.catch Ljava/sql/SQLException; {:try_start_69 .. :try_end_9e} :catch_5f
.catchall {:try_start_69 .. :try_end_9e} :catchall_66
goto/16 :goto_17
.end method
.method public put(Lorg/bitcoinj/core/StoredBlock;)V
.registers 4
.prologue
.line 646
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 648
const/4 v0, 0x0
:try_start_4
invoke-virtual {p0, p1, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->putUpdateStoredBlock(Lorg/bitcoinj/core/StoredBlock;Z)V
:try_end_7
.catch Ljava/sql/SQLException; {:try_start_4 .. :try_end_7} :catch_8
.line 651
return-void
.line 649
:catch_8
move-exception v0
.line 650
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public put(Lorg/bitcoinj/core/StoredBlock;Lorg/bitcoinj/core/StoredUndoableBlock;)V
.registers 9
.prologue
const/4 v4, 0x4
.line 657
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 659
const/16 v0, 0x1c
new-array v3, v0, [B
.line 660
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
invoke-virtual {v0}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v0
const/4 v1, 0x0
const/16 v2, 0x1c
invoke-static {v0, v4, v3, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 661
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I
move-result v4
.line 662
const/4 v2, 0x0
.line 663
const/4 v1, 0x0
.line 665
:try_start_20
new-instance v5, Ljava/io/ByteArrayOutputStream;
invoke-direct {v5}, Ljava/io/ByteArrayOutputStream;-><init>()V
.line 666
invoke-virtual {p2}, Lorg/bitcoinj/core/StoredUndoableBlock;->getTxOutChanges()Lorg/bitcoinj/core/TransactionOutputChanges;
move-result-object v0
if-eqz v0, :cond_68
.line 667
invoke-virtual {p2}, Lorg/bitcoinj/core/StoredUndoableBlock;->getTxOutChanges()Lorg/bitcoinj/core/TransactionOutputChanges;
move-result-object v0
invoke-virtual {v0, v5}, Lorg/bitcoinj/core/TransactionOutputChanges;->serializeToStream(Ljava/io/OutputStream;)V
.line 668
invoke-virtual {v5}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v0
move-object v1, v0
.line 679
:goto_37
invoke-virtual {v5}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_3a
.catch Ljava/io/IOException; {:try_start_20 .. :try_end_3a} :catch_a2
.line 686
:try_start_3a
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
.line 687
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getInsertUndoableBlocksSQL()Ljava/lang/String;
move-result-object v5
invoke-interface {v0, v5}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 688
const/4 v5, 0x1
invoke-interface {v0, v5, v3}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 689
const/4 v5, 0x2
invoke-interface {v0, v5, v4}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 690
if-nez v2, :cond_af
.line 691
const/4 v4, 0x3
invoke-interface {v0, v4, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 692
const/4 v4, 0x4
const/4 v5, -0x2
invoke-interface {v0, v4, v5}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 697
:goto_5d
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 698
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_63
.catch Ljava/sql/SQLException; {:try_start_3a .. :try_end_63} :catch_b9
.line 700
const/4 v0, 0x1
:try_start_64
invoke-virtual {p0, p1, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->putUpdateStoredBlock(Lorg/bitcoinj/core/StoredBlock;Z)V
:try_end_67
.catch Ljava/sql/SQLException; {:try_start_64 .. :try_end_67} :catch_d5
.line 724
:goto_67
return-void
.line 670
:cond_68
:try_start_68
invoke-virtual {p2}, Lorg/bitcoinj/core/StoredUndoableBlock;->getTransactions()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v0
.line 671
and-int/lit16 v2, v0, 0xff
invoke-virtual {v5, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 672
shr-int/lit8 v2, v0, 0x8
and-int/lit16 v2, v2, 0xff
invoke-virtual {v5, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 673
shr-int/lit8 v2, v0, 0x10
and-int/lit16 v2, v2, 0xff
invoke-virtual {v5, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 674
shr-int/lit8 v0, v0, 0x18
and-int/lit16 v0, v0, 0xff
invoke-virtual {v5, v0}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 675
invoke-virtual {p2}, Lorg/bitcoinj/core/StoredUndoableBlock;->getTransactions()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_92
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_a9
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/Transaction;
.line 676
invoke-virtual {v0, v5}, Lorg/bitcoinj/core/Transaction;->bitcoinSerialize(Ljava/io/OutputStream;)V
:try_end_a1
.catch Ljava/io/IOException; {:try_start_68 .. :try_end_a1} :catch_a2
goto :goto_92
.line 680
:catch_a2
move-exception v0
.line 681
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 677
:cond_a9
:try_start_a9
invoke-virtual {v5}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
:try_end_ac
.catch Ljava/io/IOException; {:try_start_a9 .. :try_end_ac} :catch_a2
move-result-object v0
move-object v2, v0
goto :goto_37
.line 694
:cond_af
const/4 v4, 0x3
const/4 v5, -0x2
:try_start_b1
invoke-interface {v0, v4, v5}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 695
const/4 v4, 0x4
invoke-interface {v0, v4, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
:try_end_b8
.catch Ljava/sql/SQLException; {:try_start_b1 .. :try_end_b8} :catch_b9
goto :goto_5d
.line 704
:catch_b9
move-exception v0
.line 705
:try_start_ba
invoke-virtual {v0}, Ljava/sql/SQLException;->getSQLState()Ljava/lang/String;
move-result-object v4
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDuplicateKeyErrorCode()Ljava/lang/String;
move-result-object v5
invoke-virtual {v4, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-nez v4, :cond_dc
.line 706
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_ce
.catch Ljava/sql/SQLException; {:try_start_ba .. :try_end_ce} :catch_ce
.line 722
:catch_ce
move-exception v0
.line 723
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 701
:catch_d5
move-exception v0
.line 702
:try_start_d6
new-instance v4, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v4, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v4
:try_end_dc
.catch Ljava/sql/SQLException; {:try_start_d6 .. :try_end_dc} :catch_b9
.line 709
:cond_dc
:try_start_dc
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
.line 710
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getUpdateUndoableBlocksSQL()Ljava/lang/String;
move-result-object v4
invoke-interface {v0, v4}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 711
const/4 v4, 0x3
invoke-interface {v0, v4, v3}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 712
if-nez v2, :cond_103
.line 713
const/4 v2, 0x1
invoke-interface {v0, v2, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 714
const/4 v1, 0x2
const/4 v2, -0x2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 719
:goto_fb
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 720
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
goto/16 :goto_67
.line 716
:cond_103
const/4 v1, 0x1
const/4 v3, -0x2
invoke-interface {v0, v1, v3}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 717
const/4 v1, 0x2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
:try_end_10c
.catch Ljava/sql/SQLException; {:try_start_dc .. :try_end_10c} :catch_ce
goto :goto_fb
.end method
.method protected putUpdateStoredBlock(Lorg/bitcoinj/core/StoredBlock;Z)V
.registers 14
.prologue
const/4 v10, 0x2
const/4 v9, 0x0
const/4 v8, 0x4
const/4 v7, 0x1
const/16 v6, 0x1c
.line 615
:try_start_6
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
.line 616
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getInsertHeadersSQL()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 618
const/16 v1, 0x1c
new-array v1, v1, [B
.line 619
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeader()Lorg/bitcoinj/core/Block;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Block;->getHash()Lorg/bitcoinj/core/Sha256Hash;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v2
const/4 v3, 0x4
const/4 v4, 0x0
const/16 v5, 0x1c
invoke-static {v2, v3, v1, v4, v5}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 620
const/4 v2, 0x1
invoke-interface {v0, v2, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 621
const/4 v1, 0x2
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getChainWork()Ljava/math/BigInteger;
move-result-object v2
invoke-virtual {v2}, Ljava/math/BigInteger;->toByteArray()[B
move-result-object v2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 622
const/4 v1, 0x3
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I
move-result v2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 623
const/4 v1, 0x4
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeader()Lorg/bitcoinj/core/Block;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Block;->cloneAsHeader()Lorg/bitcoinj/core/Block;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Block;->unsafeBitcoinSerialize()[B
move-result-object v2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 624
const/4 v1, 0x5
invoke-interface {v0, v1, p2}, Ljava/sql/PreparedStatement;->setBoolean(IZ)V
.line 625
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 626
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_5f
.catch Ljava/sql/SQLException; {:try_start_6 .. :try_end_5f} :catch_60
.line 642
:goto_5f
return-void
.line 627
:catch_60
move-exception v0
.line 630
invoke-virtual {v0}, Ljava/sql/SQLException;->getSQLState()Ljava/lang/String;
move-result-object v1
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDuplicateKeyErrorCode()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_71
if-nez p2, :cond_72
.line 631
:cond_71
throw v0
.line 633
:cond_72
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getUpdateHeadersSQL()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 634
invoke-interface {v0, v7, v7}, Ljava/sql/PreparedStatement;->setBoolean(IZ)V
.line 636
new-array v1, v6, [B
.line 637
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeader()Lorg/bitcoinj/core/Block;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Block;->getHash()Lorg/bitcoinj/core/Sha256Hash;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v2
invoke-static {v2, v8, v1, v9, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 638
invoke-interface {v0, v10, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 639
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 640
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
goto :goto_5f
.end method
.method public removeUnspentTransactionOutput(Lorg/bitcoinj/core/UTXO;)V
.registers 6
.prologue
.line 988
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 990
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getHash()Lorg/bitcoinj/core/Sha256Hash;
move-result-object v0
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getIndex()J
move-result-wide v2
invoke-virtual {p0, v0, v2, v3}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getTransactionOutput(Lorg/bitcoinj/core/Sha256Hash;J)Lorg/bitcoinj/core/UTXO;
move-result-object v0
if-nez v0, :cond_19
.line 991
new-instance v0, Lorg/bitcoinj/store/BlockStoreException;
const-string v1, "Tried to remove a UTXO from DatabaseFullPrunedBlockStore that it didn\'t have!"
invoke-direct {v0, v1}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 993
:cond_19
:try_start_19
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 994
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getDeleteOpenoutputsSQL()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 995
const/4 v1, 0x1
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getHash()Lorg/bitcoinj/core/Sha256Hash;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 997
const/4 v1, 0x2
invoke-virtual {p1}, Lorg/bitcoinj/core/UTXO;->getIndex()J
move-result-wide v2
long-to-int v2, v2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 998
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 999
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_44
.catch Ljava/sql/SQLException; {:try_start_19 .. :try_end_44} :catch_45
.line 1002
return-void
.line 1000
:catch_45
move-exception v0
.line 1001
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public resetStore()V
.registers 3
.prologue
.line 1092
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 1094
:try_start_3
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->deleteStore()V
.line 1095
invoke-direct {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->createTables()V
.line 1096
invoke-direct {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->initFromDatabase()V
:try_end_c
.catch Ljava/sql/SQLException; {:try_start_3 .. :try_end_c} :catch_d
.line 1099
return-void
.line 1097
:catch_d
move-exception v0
.line 1098
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public setChainHead(Lorg/bitcoinj/core/StoredBlock;)V
.registers 6
.prologue
.line 858
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 v1
.line 859
iput-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
.line 860
iput-object p1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
.line 861
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 863
:try_start_f
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 864
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getUpdateSettingsSLQ()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 865
const/4 v2, 0x2
const-string v3, "chainhead"
invoke-interface {v0, v2, v3}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 866
const/4 v2, 0x1
invoke-virtual {v1}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v1
invoke-interface {v0, v2, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 867
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 868
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_33
.catch Ljava/sql/SQLException; {:try_start_f .. :try_end_33} :catch_34
.line 871
return-void
.line 869
:catch_34
move-exception v0
.line 870
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public setVerifiedChainHead(Lorg/bitcoinj/core/StoredBlock;)V
.registers 6
.prologue
.line 881
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 v1
.line 882
iput-object v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadHash:Lorg/bitcoinj/core/Sha256Hash;
.line 883
iput-object p1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->verifiedChainHeadBlock:Lorg/bitcoinj/core/StoredBlock;
.line 884
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->maybeConnect()V
.line 886
:try_start_f
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/sql/Connection;
.line 887
invoke-virtual {p0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->getUpdateSettingsSLQ()Ljava/lang/String;
move-result-object v2
invoke-interface {v0, v2}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 888
const/4 v2, 0x2
const-string v3, "verifiedchainhead"
invoke-interface {v0, v2, v3}, Ljava/sql/PreparedStatement;->setString(ILjava/lang/String;)V
.line 889
const/4 v2, 0x1
invoke-virtual {v1}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v1
invoke-interface {v0, v2, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 890
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 891
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_33
.catch Ljava/sql/SQLException; {:try_start_f .. :try_end_33} :catch_4d
.line 895
iget-object v0, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->chainHeadBlock: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_42
.line 896
invoke-virtual {p0, p1}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->setChainHead(Lorg/bitcoinj/core/StoredBlock;)V
.line 897
:cond_42
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I
move-result v0
iget v1, p0, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->fullStoreDepth:I
sub-int/2addr v0, v1
invoke-direct {p0, v0}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;->removeUndoableBlocksWhereHeightIsLessThan(I)V
.line 898
return-void
.line 892
:catch_4d
move-exception v0
.line 893
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method