PostgresFullPrunedBlockStore.smali
.class public Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;
.super Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;
.source "PostgresFullPrunedBlockStore.java"
# static fields
.field private static final CREATE_HEADERS_TABLE:Ljava/lang/String; = "CREATE TABLE headers (\n hash bytea NOT NULL,\n chainwork bytea NOT NULL,\n height integer NOT NULL,\n header bytea NOT NULL,\n wasundoable boolean NOT NULL,\n CONSTRAINT headers_pk PRIMARY KEY (hash)\n)\n"
.field private static final CREATE_OPEN_OUTPUT_TABLE:Ljava/lang/String; = "CREATE TABLE openoutputs (\n hash bytea NOT NULL,\n index integer NOT NULL,\n height integer NOT NULL,\n value bigint NOT NULL,\n scriptbytes bytea NOT NULL,\n toaddress character varying(35),\n addresstargetable smallint,\n coinbase boolean,\n CONSTRAINT openoutputs_pk PRIMARY KEY (hash,index)\n)\n"
.field private static final CREATE_OUTPUTS_ADDRESSTARGETABLE_INDEX:Ljava/lang/String; = "CREATE INDEX openoutputs_addresstargetable_idx ON openoutputs USING btree (addresstargetable)"
.field private static final CREATE_OUTPUTS_ADDRESS_MULTI_INDEX:Ljava/lang/String; = "CREATE INDEX openoutputs_hash_index_num_height_toaddress_idx ON openoutputs USING btree (hash, index, height, toaddress)"
.field private static final CREATE_OUTPUTS_HASH_INDEX:Ljava/lang/String; = "CREATE INDEX openoutputs_hash_idx ON openoutputs USING btree (hash)"
.field private static final CREATE_OUTPUTS_TOADDRESS_INDEX:Ljava/lang/String; = "CREATE INDEX openoutputs_toaddress_idx ON openoutputs USING btree (toaddress)"
.field private static final CREATE_SETTINGS_TABLE:Ljava/lang/String; = "CREATE TABLE settings (\n name character varying(32) NOT NULL,\n value bytea,\n CONSTRAINT setting_pk PRIMARY KEY (name)\n)\n"
.field private static final CREATE_UNDOABLE_TABLE:Ljava/lang/String; = "CREATE TABLE undoableblocks (\n hash bytea NOT NULL,\n height integer NOT NULL,\n txoutchanges bytea,\n transactions bytea,\n CONSTRAINT undoableblocks_pk PRIMARY KEY (hash)\n)\n"
.field private static final CREATE_UNDOABLE_TABLE_INDEX:Ljava/lang/String; = "CREATE INDEX undoableblocks_height_idx ON undoableBlocks USING btree (height)"
.field private static final DATABASE_CONNECTION_URL_PREFIX:Ljava/lang/String; = "jdbc:postgresql://"
.field private static final DATABASE_DRIVER_CLASS:Ljava/lang/String; = "org.postgresql.Driver"
.field private static final POSTGRES_DUPLICATE_KEY_ERROR_CODE:Ljava/lang/String; = "23505"
.field private static final SELECT_UNDOABLEBLOCKS_EXISTS_SQL:Ljava/lang/String; = "select 1 from undoableblocks where hash = ?"
.field private static final log:Lorg/slf4j/Logger;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 41
const-class v0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;
invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;
move-result-object v0
sput-object v0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
.registers 14
.prologue
.line 105
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "jdbc:postgresql://"
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const-string v1, "/"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0, p4}, 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 v2
const/4 v6, 0x0
move-object v0, p0
move-object v1, p1
move v3, p2
move-object v4, p5
move-object v5, p6
invoke-direct/range {v0 .. v6}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;-><init>(Lorg/bitcoinj/core/NetworkParameters;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
.line 106
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
.registers 15
.prologue
.line 126
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "jdbc:postgresql://"
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const-string v1, "/"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0, p4}, 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 v2
move-object v0, p0
move-object v1, p1
move v3, p2
move-object v4, p5
move-object v5, p6
move-object v6, p7
invoke-direct/range {v0 .. v6}, Lorg/bitcoinj/store/DatabaseFullPrunedBlockStore;-><init>(Lorg/bitcoinj/core/NetworkParameters;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
.line 127
return-void
.end method
# virtual methods
.method protected getCreateIndexesSQL()Ljava/util/List;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.prologue
.line 146
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 147
const-string v1, "CREATE INDEX undoableblocks_height_idx ON undoableBlocks USING btree (height)"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 148
const-string v1, "CREATE INDEX openoutputs_hash_index_num_height_toaddress_idx ON openoutputs USING btree (hash, index, height, toaddress)"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 149
const-string v1, "CREATE INDEX openoutputs_addresstargetable_idx ON openoutputs USING btree (addresstargetable)"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 150
const-string v1, "CREATE INDEX openoutputs_hash_idx ON openoutputs USING btree (hash)"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 151
const-string v1, "CREATE INDEX openoutputs_toaddress_idx ON openoutputs USING btree (toaddress)"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 152
return-object v0
.end method
.method protected getCreateSchemeSQL()Ljava/util/List;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.prologue
.line 157
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 158
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "CREATE SCHEMA IF NOT EXISTS "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v2, p0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->schemaName: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}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 159
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "set search_path to \'"
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v2, p0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->schemaName:Ljava/lang/String;
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, "\'"
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}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 160
return-object v0
.end method
.method protected getCreateTablesSQL()Ljava/util/List;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Ljava/lang/String;",
">;"
}
.end annotation
.prologue
.line 136
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 137
const-string v1, "CREATE TABLE settings (\n name character varying(32) NOT NULL,\n value bytea,\n CONSTRAINT setting_pk PRIMARY KEY (name)\n)\n"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 138
const-string v1, "CREATE TABLE headers (\n hash bytea NOT NULL,\n chainwork bytea NOT NULL,\n height integer NOT NULL,\n header bytea NOT NULL,\n wasundoable boolean NOT NULL,\n CONSTRAINT headers_pk PRIMARY KEY (hash)\n)\n"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 139
const-string v1, "CREATE TABLE undoableblocks (\n hash bytea NOT NULL,\n height integer NOT NULL,\n txoutchanges bytea,\n transactions bytea,\n CONSTRAINT undoableblocks_pk PRIMARY KEY (hash)\n)\n"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 140
const-string v1, "CREATE TABLE openoutputs (\n hash bytea NOT NULL,\n index integer NOT NULL,\n height integer NOT NULL,\n value bigint NOT NULL,\n scriptbytes bytea NOT NULL,\n toaddress character varying(35),\n addresstargetable smallint,\n coinbase boolean,\n CONSTRAINT openoutputs_pk PRIMARY KEY (hash,index)\n)\n"
invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 141
return-object v0
.end method
.method protected getDatabaseDriverClass()Ljava/lang/String;
.registers 2
.prologue
.line 165
const-string v0, "org.postgresql.Driver"
return-object v0
.end method
.method protected getDuplicateKeyErrorCode()Ljava/lang/String;
.registers 2
.prologue
.line 131
const-string v0, "23505"
return-object v0
.end method
.method public put(Lorg/bitcoinj/core/StoredBlock;Lorg/bitcoinj/core/StoredUndoableBlock;)V
.registers 11
.prologue
const/4 v4, 0x4
.line 170
invoke-virtual {p0}, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->maybeConnect()V
.line 172
const/16 v0, 0x1c
new-array v3, v0, [B
.line 173
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 174
invoke-virtual {p1}, Lorg/bitcoinj/core/StoredBlock;->getHeight()I
move-result v4
.line 175
const/4 v2, 0x0
.line 176
const/4 v1, 0x0
.line 178
:try_start_20
new-instance v5, Ljava/io/ByteArrayOutputStream;
invoke-direct {v5}, Ljava/io/ByteArrayOutputStream;-><init>()V
.line 179
invoke-virtual {p2}, Lorg/bitcoinj/core/StoredUndoableBlock;->getTxOutChanges()Lorg/bitcoinj/core/TransactionOutputChanges;
move-result-object v0
if-eqz v0, :cond_c3
.line 180
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 181
invoke-virtual {v5}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v0
move-object v1, v0
.line 192
:goto_37
invoke-virtual {v5}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_3a
.catch Ljava/io/IOException; {:try_start_20 .. :try_end_3a} :catch_fd
.line 199
:try_start_3a
sget-object v0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v0}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v0
if-eqz v0, :cond_5c
.line 200
sget-object v0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v5, Ljava/lang/StringBuilder;
const-string v6, "Looking for undoable block with hash: "
invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
sget-object v6, Lorg/bitcoinj/core/Utils;->HEX:Lcom/google/common/io/BaseEncoding;
invoke-virtual {v6, v3}, Lcom/google/common/io/BaseEncoding;->encode([B)Ljava/lang/String;
move-result-object v6
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v5
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v5
invoke-interface {v0, v5}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;)V
.line 202
:cond_5c
iget-object v0, p0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->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-string v5, "select 1 from undoableblocks where hash = ?"
invoke-interface {v0, v5}, Ljava/sql/Connection;->prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;
move-result-object v0
.line 203
const/4 v5, 0x1
invoke-interface {v0, v5, v3}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 205
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeQuery()Ljava/sql/ResultSet;
move-result-object v5
.line 206
invoke-interface {v5}, Ljava/sql/ResultSet;->next()Z
move-result v5
if-eqz v5, :cond_128
.line 209
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
.line 213
iget-object v0, p0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
.line 214
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/PostgresFullPrunedBlockStore;->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 215
const/4 v4, 0x3
invoke-interface {v0, v4, v3}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 217
sget-object v4, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v4}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v4
if-eqz v4, :cond_b1
.line 218
sget-object v4, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v5, Ljava/lang/StringBuilder;
const-string v6, "Updating undoable block with hash: "
invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
sget-object v6, Lorg/bitcoinj/core/Utils;->HEX:Lcom/google/common/io/BaseEncoding;
invoke-virtual {v6, v3}, Lcom/google/common/io/BaseEncoding;->encode([B)Ljava/lang/String;
move-result-object v3
invoke-virtual {v5, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-interface {v4, v3}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;)V
.line 220
:cond_b1
if-nez v2, :cond_10b
.line 221
const/4 v2, 0x1
invoke-interface {v0, v2, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 222
const/4 v1, 0x2
const/4 v2, -0x2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 227
:goto_bc
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 228
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_c2
.catch Ljava/sql/SQLException; {:try_start_3a .. :try_end_c2} :catch_115
.line 260
:cond_c2
:goto_c2
return-void
.line 183
:cond_c3
:try_start_c3
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 184
and-int/lit16 v2, v0, 0xff
invoke-virtual {v5, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 185
shr-int/lit8 v2, v0, 0x8
and-int/lit16 v2, v2, 0xff
invoke-virtual {v5, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 186
shr-int/lit8 v2, v0, 0x10
and-int/lit16 v2, v2, 0xff
invoke-virtual {v5, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 187
shr-int/lit8 v0, v0, 0x18
and-int/lit16 v0, v0, 0xff
invoke-virtual {v5, v0}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 188
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_ed
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_104
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/Transaction;
.line 189
invoke-virtual {v0, v5}, Lorg/bitcoinj/core/Transaction;->bitcoinSerialize(Ljava/io/OutputStream;)V
:try_end_fc
.catch Ljava/io/IOException; {:try_start_c3 .. :try_end_fc} :catch_fd
goto :goto_ed
.line 193
:catch_fd
move-exception v0
.line 194
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 190
:cond_104
:try_start_104
invoke-virtual {v5}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
:try_end_107
.catch Ljava/io/IOException; {:try_start_104 .. :try_end_107} :catch_fd
move-result-object v0
move-object v2, v0
goto/16 :goto_37
.line 224
:cond_10b
const/4 v1, 0x1
const/4 v3, -0x2
:try_start_10d
invoke-interface {v0, v1, v3}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 225
const/4 v1, 0x2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
:try_end_114
.catch Ljava/sql/SQLException; {:try_start_10d .. :try_end_114} :catch_115
goto :goto_bc
.line 255
:catch_115
move-exception v0
.line 256
invoke-virtual {v0}, Ljava/sql/SQLException;->getSQLState()Ljava/lang/String;
move-result-object v1
const-string v2, "23505"
invoke-virtual {v1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_c2
.line 257
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 233
:cond_128
:try_start_128
iget-object v0, p0, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->conn:Ljava/lang/ThreadLocal;
.line 234
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/PostgresFullPrunedBlockStore;->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 235
const/4 v5, 0x1
invoke-interface {v0, v5, v3}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 236
const/4 v5, 0x2
invoke-interface {v0, v5, v4}, Ljava/sql/PreparedStatement;->setInt(II)V
.line 238
sget-object v5, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
invoke-interface {v5}, Lorg/slf4j/Logger;->isDebugEnabled()Z
move-result v5
if-eqz v5, :cond_16c
.line 239
sget-object v5, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->log:Lorg/slf4j/Logger;
new-instance v6, Ljava/lang/StringBuilder;
const-string v7, "Inserting undoable block with hash: "
invoke-direct {v6, v7}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
sget-object v7, Lorg/bitcoinj/core/Utils;->HEX:Lcom/google/common/io/BaseEncoding;
invoke-virtual {v7, v3}, Lcom/google/common/io/BaseEncoding;->encode([B)Ljava/lang/String;
move-result-object v3
invoke-virtual {v6, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
const-string v6, " at height "
invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-interface {v5, v3}, Lorg/slf4j/Logger;->debug(Ljava/lang/String;)V
.line 241
:cond_16c
if-nez v2, :cond_18a
.line 242
const/4 v2, 0x3
invoke-interface {v0, v2, v1}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
.line 243
const/4 v1, 0x4
const/4 v2, -0x2
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 248
:goto_177
invoke-interface {v0}, Ljava/sql/PreparedStatement;->executeUpdate()I
.line 249
invoke-interface {v0}, Ljava/sql/PreparedStatement;->close()V
:try_end_17d
.catch Ljava/sql/SQLException; {:try_start_128 .. :try_end_17d} :catch_115
.line 251
const/4 v0, 0x1
:try_start_17e
invoke-virtual {p0, p1, v0}, Lorg/bitcoinj/store/PostgresFullPrunedBlockStore;->putUpdateStoredBlock(Lorg/bitcoinj/core/StoredBlock;Z)V
:try_end_181
.catch Ljava/sql/SQLException; {:try_start_17e .. :try_end_181} :catch_183
goto/16 :goto_c2
.line 252
:catch_183
move-exception v0
.line 253
:try_start_184
new-instance v1, Lorg/bitcoinj/store/BlockStoreException;
invoke-direct {v1, v0}, Lorg/bitcoinj/store/BlockStoreException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 245
:cond_18a
const/4 v1, 0x3
const/4 v3, -0x2
invoke-interface {v0, v1, v3}, Ljava/sql/PreparedStatement;->setNull(II)V
.line 246
const/4 v1, 0x4
invoke-interface {v0, v1, v2}, Ljava/sql/PreparedStatement;->setBytes(I[B)V
:try_end_193
.catch Ljava/sql/SQLException; {:try_start_184 .. :try_end_193} :catch_115
goto :goto_177
.end method