EnsResolver.smali
.class public Lorg/web3j/ens/EnsResolver;
.super Ljava/lang/Object;
.source "EnsResolver.java"
# static fields
.field static final DEFAULT_SYNC_THRESHOLD:J = 0x2bf20L
# instance fields
.field private syncThreshold:J
.field private final transactionManager:Lorg/web3j/tx/TransactionManager;
.field private final web3j:Lorg/web3j/protocol/Web3j;
# direct methods
.method public constructor <init>(Lorg/web3j/protocol/Web3j;)V
.registers 4
.prologue
.line 34
const-wide/32 v0, 0x2bf20
invoke-direct {p0, p1, v0, v1}, Lorg/web3j/ens/EnsResolver;-><init>(Lorg/web3j/protocol/Web3j;J)V
.line 35
return-void
.end method
.method public constructor <init>(Lorg/web3j/protocol/Web3j;J)V
.registers 6
.prologue
.line 27
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 28
iput-object p1, p0, Lorg/web3j/ens/EnsResolver;->web3j:Lorg/web3j/protocol/Web3j;
.line 29
new-instance v0, Lorg/web3j/tx/ClientTransactionManager;
const/4 v1, 0x0
invoke-direct {v0, p1, v1}, Lorg/web3j/tx/ClientTransactionManager;-><init>(Lorg/web3j/protocol/Web3j;Ljava/lang/String;)V
iput-object v0, p0, Lorg/web3j/ens/EnsResolver;->transactionManager:Lorg/web3j/tx/TransactionManager;
.line 30
iput-wide p2, p0, Lorg/web3j/ens/EnsResolver;->syncThreshold:J
.line 31
return-void
.end method
.method public static isValidEnsName(Ljava/lang/String;)Z
.registers 2
.prologue
.line 100
if-eqz p0, :cond_12
const-string v0, "."
invoke-virtual {p0, v0}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
move-result v0
if-nez v0, :cond_10
invoke-static {p0}, Lorg/web3j/crypto/WalletUtils;->isValidAddress(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_12
:cond_10
const/4 v0, 0x1
:goto_11
return v0
:cond_12
const/4 v0, 0x0
goto :goto_11
.end method
# virtual methods
.method public getSyncThreshold()J
.registers 3
.prologue
.line 42
iget-wide v0, p0, Lorg/web3j/ens/EnsResolver;->syncThreshold:J
return-wide v0
.end method
.method isSynced()Z
.registers 9
.prologue
const/4 v1, 0x0
.line 87
iget-object v0, p0, Lorg/web3j/ens/EnsResolver;->web3j:Lorg/web3j/protocol/Web3j;
invoke-interface {v0}, Lorg/web3j/protocol/Web3j;->ethSyncing()Lorg/web3j/protocol/core/Request;
move-result-object v0
invoke-virtual {v0}, Lorg/web3j/protocol/core/Request;->send()Lorg/web3j/protocol/core/Response;
move-result-object v0
check-cast v0, Lorg/web3j/protocol/core/methods/response/EthSyncing;
.line 88
invoke-virtual {v0}, Lorg/web3j/protocol/core/methods/response/EthSyncing;->isSyncing()Z
move-result v0
if-eqz v0, :cond_15
move v0, v1
.line 95
:goto_14
return v0
.line 91
:cond_15
iget-object v0, p0, Lorg/web3j/ens/EnsResolver;->web3j:Lorg/web3j/protocol/Web3j;
sget-object v2, Lorg/web3j/protocol/core/DefaultBlockParameterName;->LATEST:Lorg/web3j/protocol/core/DefaultBlockParameterName;
invoke-interface {v0, v2, v1}, Lorg/web3j/protocol/Web3j;->ethGetBlockByNumber(Lorg/web3j/protocol/core/DefaultBlockParameter;Z)Lorg/web3j/protocol/core/Request;
move-result-object v0
invoke-virtual {v0}, Lorg/web3j/protocol/core/Request;->send()Lorg/web3j/protocol/core/Response;
move-result-object v0
check-cast v0, Lorg/web3j/protocol/core/methods/response/EthBlock;
.line 93
invoke-virtual {v0}, Lorg/web3j/protocol/core/methods/response/EthBlock;->getBlock()Lorg/web3j/protocol/core/methods/response/EthBlock$Block;
move-result-object v0
invoke-virtual {v0}, Lorg/web3j/protocol/core/methods/response/EthBlock$Block;->getTimestamp()Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0}, Ljava/math/BigInteger;->longValue()J
move-result-wide v2
const-wide/16 v4, 0x3e8
mul-long/2addr v2, v4
.line 95
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v4
iget-wide v6, p0, Lorg/web3j/ens/EnsResolver;->syncThreshold:J
sub-long/2addr v4, v6
cmp-long v0, v4, v2
if-gez v0, :cond_3f
const/4 v0, 0x1
goto :goto_14
:cond_3f
move v0, v1
goto :goto_14
.end method
.method lookupAddress(Ljava/lang/String;)Ljava/lang/String;
.registers 8
.prologue
.line 63
iget-object v0, p0, Lorg/web3j/ens/EnsResolver;->web3j:Lorg/web3j/protocol/Web3j;
invoke-interface {v0}, Lorg/web3j/protocol/Web3j;->netVersion()Lorg/web3j/protocol/core/Request;
move-result-object v0
invoke-virtual {v0}, Lorg/web3j/protocol/core/Request;->send()Lorg/web3j/protocol/core/Response;
move-result-object v0
check-cast v0, Lorg/web3j/protocol/core/methods/response/NetVersion;
.line 64
invoke-virtual {v0}, Lorg/web3j/protocol/core/methods/response/NetVersion;->getNetVersion()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Lorg/web3j/ens/Contracts;->resolveRegistryContract(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 66
iget-object v1, p0, Lorg/web3j/ens/EnsResolver;->web3j:Lorg/web3j/protocol/Web3j;
iget-object v2, p0, Lorg/web3j/ens/EnsResolver;->transactionManager:Lorg/web3j/tx/TransactionManager;
sget-object v3, Lorg/web3j/tx/ManagedTransaction;->GAS_PRICE:Ljava/math/BigInteger;
sget-object v4, Lorg/web3j/tx/Contract;->GAS_LIMIT:Ljava/math/BigInteger;
invoke-static {v0, v1, v2, v3, v4}, Lorg/web3j/ens/contracts/generated/ENS;->load(Ljava/lang/String;Lorg/web3j/protocol/Web3j;Lorg/web3j/tx/TransactionManager;Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/web3j/ens/contracts/generated/ENS;
move-result-object v0
.line 70
invoke-static {p1}, Lorg/web3j/ens/NameHash;->nameHash(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-static {v1}, Lorg/web3j/utils/Numeric;->hexStringToByteArray(Ljava/lang/String;)[B
move-result-object v1
.line 72
invoke-virtual {v0, v1}, Lorg/web3j/ens/contracts/generated/ENS;->resolver([B)Lorg/web3j/protocol/core/RemoteCall;
move-result-object v0
invoke-virtual {v0}, Lorg/web3j/protocol/core/RemoteCall;->send()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
.line 73
iget-object v2, p0, Lorg/web3j/ens/EnsResolver;->web3j:Lorg/web3j/protocol/Web3j;
iget-object v3, p0, Lorg/web3j/ens/EnsResolver;->transactionManager:Lorg/web3j/tx/TransactionManager;
sget-object v4, Lorg/web3j/tx/ManagedTransaction;->GAS_PRICE:Ljava/math/BigInteger;
sget-object v5, Lorg/web3j/tx/Contract;->GAS_LIMIT:Ljava/math/BigInteger;
invoke-static {v0, v2, v3, v4, v5}, Lorg/web3j/ens/contracts/generated/PublicResolver;->load(Ljava/lang/String;Lorg/web3j/protocol/Web3j;Lorg/web3j/tx/TransactionManager;Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/web3j/ens/contracts/generated/PublicResolver;
move-result-object v0
.line 77
invoke-virtual {v0, v1}, Lorg/web3j/ens/contracts/generated/PublicResolver;->addr([B)Lorg/web3j/protocol/core/RemoteCall;
move-result-object v0
invoke-virtual {v0}, Lorg/web3j/protocol/core/RemoteCall;->send()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
.line 79
invoke-static {v0}, Lorg/web3j/crypto/WalletUtils;->isValidAddress(Ljava/lang/String;)Z
move-result v1
if-nez v1, :cond_63
.line 80
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Unable to resolve address for name: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, 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-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 82
:cond_63
return-object v0
.end method
.method public resolve(Ljava/lang/String;)Ljava/lang/String;
.registers 5
.prologue
.line 46
invoke-static {p1}, Lorg/web3j/ens/EnsResolver;->isValidEnsName(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_21
.line 48
:try_start_6
invoke-virtual {p0}, Lorg/web3j/ens/EnsResolver;->isSynced()Z
move-result v0
if-nez v0, :cond_1d
.line 49
new-instance v0, Lorg/web3j/ens/EnsResolutionException;
const-string v1, "Node is not currently synced"
invoke-direct {v0, v1}, Lorg/web3j/ens/EnsResolutionException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_14
.catch Ljava/lang/Exception; {:try_start_6 .. :try_end_14} :catch_14
.line 53
:catch_14
move-exception v0
.line 54
new-instance v1, Lorg/web3j/ens/EnsResolutionException;
const-string v2, "Unable to determine sync status of node"
invoke-direct {v1, v2, v0}, Lorg/web3j/ens/EnsResolutionException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.line 51
:cond_1d
:try_start_1d
invoke-virtual {p0, p1}, Lorg/web3j/ens/EnsResolver;->lookupAddress(Ljava/lang/String;)Ljava/lang/String;
:try_end_20
.catch Ljava/lang/Exception; {:try_start_1d .. :try_end_20} :catch_14
move-result-object p1
.line 58
:cond_21
return-object p1
.end method
.method public setSyncThreshold(J)V
.registers 4
.prologue
.line 38
iput-wide p1, p0, Lorg/web3j/ens/EnsResolver;->syncThreshold:J
.line 39
return-void
.end method