Merge pull request #9062 from blockscout/ll-fix-bens

Fix bens integration
pull/9081/head
nikitosing 11 months ago committed by GitHub
commit 26201a8a72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 71
      apps/explorer/lib/explorer/microservice_interfaces/bens.ex

@ -6,6 +6,7 @@
### Fixes ### Fixes
- [#9062](https://github.com/blockscout/blockscout/pull/9062) - Fix blockscout-ens integration
- [#9061](https://github.com/blockscout/blockscout/pull/9061) - Arbitrum allow tx receipt gasUsedForL1 field - [#9061](https://github.com/blockscout/blockscout/pull/9061) - Arbitrum allow tx receipt gasUsedForL1 field
### Chore ### Chore

@ -35,7 +35,7 @@ defmodule Explorer.MicroserviceInterfaces.BENS do
| Withdrawal.t() | Withdrawal.t()
@doc """ @doc """
Batch request for ENS names via {{baseUrl}}/api/v1/:chainId/addresses:batch-resolve-names Batch request for ENS names via POST {{baseUrl}}/api/v1/:chainId/addresses:batch-resolve-names
""" """
@spec ens_names_batch_request([binary()]) :: {:error, :disabled | binary() | Jason.DecodeError.t()} | {:ok, any} @spec ens_names_batch_request([binary()]) :: {:error, :disabled | binary() | Jason.DecodeError.t()} | {:ok, any}
def ens_names_batch_request(addresses) do def ens_names_batch_request(addresses) do
@ -49,37 +49,37 @@ defmodule Explorer.MicroserviceInterfaces.BENS do
end end
@doc """ @doc """
Request for ENS name via {{baseUrl}}/api/v1/:chainId/addresses:lookup Request for ENS name via GET {{baseUrl}}/api/v1/:chainId/addresses:lookup
""" """
@spec address_lookup(binary()) :: {:error, :disabled | binary() | Jason.DecodeError.t()} | {:ok, any} @spec address_lookup(binary()) :: {:error, :disabled | binary() | Jason.DecodeError.t()} | {:ok, any}
def address_lookup(address) do def address_lookup(address) do
with :ok <- Microservice.check_enabled(__MODULE__) do with :ok <- Microservice.check_enabled(__MODULE__) do
body = %{ query_params = %{
"address" => to_string(address), "address" => to_string(address),
"resolvedTo" => true, "resolved_to" => true,
"ownedBy" => false, "owned_by" => false,
"onlyActive" => true, "only_active" => true,
"order" => "ASC" "order" => "ASC"
} }
http_post_request(address_lookup_url(), body) http_get_request(address_lookup_url(), query_params)
end end
end end
@doc """ @doc """
Lookup for ENS domain name via {{baseUrl}}/api/v1/:chainId/domains:lookup Lookup for ENS domain name via GET {{baseUrl}}/api/v1/:chainId/domains:lookup
""" """
@spec ens_domain_lookup(binary()) :: {:error, :disabled | binary() | Jason.DecodeError.t()} | {:ok, any} @spec ens_domain_lookup(binary()) :: {:error, :disabled | binary() | Jason.DecodeError.t()} | {:ok, any}
def ens_domain_lookup(domain) do def ens_domain_lookup(domain) do
with :ok <- Microservice.check_enabled(__MODULE__) do with :ok <- Microservice.check_enabled(__MODULE__) do
body = %{ query_params = %{
"name" => domain, "name" => domain,
"onlyActive" => true, "only_active" => true,
"sort" => "registration_date", "sort" => "registration_date",
"order" => "DESC" "order" => "DESC"
} }
http_post_request(domain_lookup_url(), body) http_get_request(domain_lookup_url(), query_params)
end end
end end
@ -106,6 +106,27 @@ defmodule Explorer.MicroserviceInterfaces.BENS do
end end
end end
defp http_get_request(url, query_params) do
case HTTPoison.get(url, [], params: query_params) do
{:ok, %Response{body: body, status_code: 200}} ->
Jason.decode(body)
{_, error} ->
old_truncate = Application.get_env(:logger, :truncate)
Logger.configure(truncate: :infinity)
Logger.error(fn ->
[
"Error while sending request to BENS microservice url: #{url}: ",
inspect(error, limit: :infinity, printable_limit: :infinity)
]
end)
Logger.configure(truncate: old_truncate)
{:error, @request_error_msg}
end
end
@spec enabled?() :: boolean @spec enabled?() :: boolean
def enabled?, do: Application.get_env(:explorer, __MODULE__)[:enabled] def enabled?, do: Application.get_env(:explorer, __MODULE__)[:enabled]
@ -221,7 +242,7 @@ defmodule Explorer.MicroserviceInterfaces.BENS do
%{ %{
"items" => "items" =>
[ [
%{"name" => name, "expiryDate" => expiry_date, "resolvedAddress" => %{"hash" => address_hash_string}} %{"name" => name, "expiry_date" => expiry_date, "resolved_address" => %{"hash" => address_hash_string}}
| _other | _other
] = items ] = items
}} }}
@ -249,9 +270,19 @@ defmodule Explorer.MicroserviceInterfaces.BENS do
defp item_to_address_hash_strings(%Transaction{ defp item_to_address_hash_strings(%Transaction{
to_address_hash: to_address_hash, to_address_hash: to_address_hash,
created_contract_address_hash: nil, created_contract_address_hash: nil,
from_address_hash: from_address_hash from_address_hash: from_address_hash,
token_transfers: token_transfers
}) do }) do
[to_string(to_address_hash), to_string(from_address_hash)] token_transfers_addresses =
case token_transfers do
token_transfers_list when is_list(token_transfers_list) ->
List.flatten(Enum.map(token_transfers_list, &item_to_address_hash_strings/1))
_ ->
[]
end
[to_string(to_address_hash), to_string(from_address_hash)] ++ token_transfers_addresses
end end
defp item_to_address_hash_strings(%TokenTransfer{ defp item_to_address_hash_strings(%TokenTransfer{
@ -304,11 +335,21 @@ defmodule Explorer.MicroserviceInterfaces.BENS do
} = tx, } = tx,
names names
) do ) do
token_transfers =
case tx.token_transfers do
token_transfers_list when is_list(token_transfers_list) ->
Enum.map(token_transfers_list, &put_ens_name_to_item(&1, names))
other ->
other
end
%Transaction{ %Transaction{
tx tx
| to_address: alter_address(tx.to_address, to_address_hash, names), | to_address: alter_address(tx.to_address, to_address_hash, names),
created_contract_address: alter_address(tx.created_contract_address, created_contract_address_hash, names), created_contract_address: alter_address(tx.created_contract_address, created_contract_address_hash, names),
from_address: alter_address(tx.from_address, from_address_hash, names) from_address: alter_address(tx.from_address, from_address_hash, names),
token_transfers: token_transfers
} }
end end

Loading…
Cancel
Save