diff --git a/lib/ethers/contract.ex b/lib/ethers/contract.ex index f808115..800c5d5 100644 --- a/lib/ethers/contract.ex +++ b/lib/ethers/contract.ex @@ -41,9 +41,6 @@ defmodule Ethers.Contract do - `[{function_name :: atom(), skip_docs :: boolean()}]`: Specify for each function. """ - require Ethers.ContractHelpers - require Logger - import Ethers.ContractHelpers @default_constructor %{ @@ -362,18 +359,28 @@ defmodule Ethers.Contract do |> Enum.map(fn %{selectors: [selector]} -> selector end) |> Enum.map(&{&1.method_id, Module.concat([mod, Errors, &1.function])}) |> Enum.into(%{}) - |> Macro.escape() - - quote context: errors_module, location: :keep do - @doc false - def find_and_decode(<> = error_data) do - case Map.fetch(error_mappings(), error_id) do - {:ok, module} -> module.decode(error_data) - :error -> {:error, :undefined_error} + + if map_size(error_mappings) == 0 do + quote context: errors_module, location: :keep do + @doc false + def find_and_decode(<<_error_id::binary-4, _::binary>>) do + {:error, :undefined_error} end end + else + error_mappings = Macro.escape(error_mappings) + + quote context: errors_module, location: :keep do + @doc false + def find_and_decode(<> = error_data) do + case Map.fetch(error_mappings(), error_id) do + {:ok, module} -> module.decode(error_data) + :error -> {:error, :undefined_error} + end + end - defp error_mappings, do: unquote(error_mappings) + defp error_mappings, do: unquote(error_mappings) + end end end diff --git a/lib/ethers/contract_helpers.ex b/lib/ethers/contract_helpers.ex index 4a53761..60d7304 100644 --- a/lib/ethers/contract_helpers.ex +++ b/lib/ethers/contract_helpers.ex @@ -1,8 +1,6 @@ defmodule Ethers.ContractHelpers do @moduledoc false - require Logger - @spec read_abi(Keyword.t()) :: {abi :: [...], file_path :: String.t() | nil} def read_abi(opts) do case Keyword.take(opts, [:abi, :abi_file]) do