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