** (BadMapError) expected a map, got: ..... (stdlib 3.15.2) :maps.keys({

I am new to elixir and struct with this problem.
(BadMapError) expected a map, got: {<<0, 0, 29, 150, 125, 113, 178, 225, 53, 200, 66, 6, 221, 209, 8, 181, 146, 90,
(stdlib 3.15.2) :maps.keys({<<0, 0, 29, 150, 125, 113, 178, 225, 53, 200, 66, 6, 221, 209, 8, 181, 146, 90,
and I think this maybe due to some version difference

In the .ex file I am calling to Map.keys() this way
auth_keys
|> Enum.at(secret_index)
|> Map.keys()

Can you show us the value of auth_keys and secret_index?

1 Like

This is the function

  def list_authorized_public_keys_at(%__MODULE__{authorized_keys: auth_keys}, secret_index)
      when is_integer(secret_index) and secret_index >= 0 do
    auth_keys
    |> Enum.at(secret_index)
    |> Map.keys()
  end

the values are taken from documentation example
      iex> %Keys{
      ...>   secrets: [<<205, 124, 251, 211, 28, 69, 249, 1, 58, 108, 16, 35, 23, 206, 198, 202>>],
      ...>   authorized_keys: [%{
      ...>      <<0, 0, 229, 188, 159, 80, 100, 5, 54, 152, 137, 201, 204, 24, 22, 125, 76, 29,
      ...>         83, 14, 154, 60, 66, 69, 121, 97, 40, 215, 226, 204, 133, 54, 187, 9>> =>
      ...>      <<139, 100, 20, 32, 187, 77, 56, 30, 116, 207, 34, 95, 157, 128, 208, 115, 113,
      ...>        177, 45, 9, 93, 107, 90, 254, 173, 71, 60, 181, 113, 247, 75, 151, 127, 41, 7,
      ...>        233, 227, 98, 209, 211, 97, 117, 68, 101, 59, 121, 214, 105, 225, 218, 91, 92,
      ...>        212, 162, 48, 18, 15, 181, 70, 103, 32, 141, 4, 64, 107, 93, 117, 188, 244, 7,
      ...>        224, 214, 225, 146, 44, 83, 111, 34, 239, 99, 1, 126, 241, 246>>
      ...>   }]
      ...> }
      ...> |> Keys.list_authorized_public_keys()
      [
        <<0, 0, 229, 188, 159, 80, 100, 5, 54, 152, 137, 201, 204, 24, 22, 125, 76, 29,
          83, 14, 154, 60, 66, 69, 121, 97, 40, 215, 226, 204, 133, 54, 187, 9>>
      ]

It seems like when you copied the keys from the documentation example, you might have missed the starting %, i.e. instead of %{.......} you copied {.......}.

2 Likes

but I know know why I am unable to run when it do
iex -S mix
2021-09-08 07:32:22.289 [info] Application sasl exited: :stopped
** (Mix) Could not start application archethic: ArchEthic.Application.start(:normal, []) returned an error: shutdown: failed to start child: ArchEthic.P2P.Supervisor
** (EXIT) shutdown: failed to start child: ArchEthic.P2P.MemTableLoader
** (EXIT) an exception was raised:
** (BadMapError) expected a map, got: {<<0, 0, 29, 150, 125, 113, 178, 225, 53, 200, 66, 6, 221, 209, 8, 181, 146, 90, 44, 217, 156, 142, 188, 90, 181, 216, 253, 46, 201, 64, 12, 227, 201, 138>>, <<254, 226, 255, 214, 148, 239, 6, 212, 193, 106, 182, 155, 96, 202, 64, 231, 120, 214, 235, 214, 42, 192, 125, 158, 18, 25, 11, 146, 80, 132, 243, 39, 125, 136, 175, 111, 241, 62, 209, 54, 136, 85, 176, 255, 252, 186, 38, 79, …>>}
(stdlib 3.15.2) :maps.keys({<<0, 0, 29, 150, 125, 113, 178, 225, 53, 200, 66, 6, 221, 209, 8, 181, 146, 90, 44, 217, 156, 142, 188, 90, 181, 216, 253, 46, 201, 64, 12, 227, 201, 138>>, <<254, 226, 255, 214, 148, 239, 6, 212, 193, 106, 182, 155, 96, 202, 64, 231, 120, 214, 235, 214, 42, 192, 125, 158, 18, 25, 11, 146, 80, 132, 243, 39, 125, 136, 175, 111, 241, 62, 209, 54, 136, 85, 176, 255, 252, 186, 38, 79, …>>})
(archethic 0.11.1) lib/archethic/transaction_chain/transaction/data/keys.ex:287: ArchEthic.TransactionChain.TransactionData.Keys.list_authorized_public_keys_at/2
(archethic 0.11.1) lib/archethic/p2p/mem_table_loader.ex:114: ArchEthic.P2P.MemTableLoader.load_transaction/1
(elixir 1.12.2) lib/enum.ex:930: Enum."-each/2-lists^foreach/1-0-"/2
(archethic 0.11.1) lib/archethic/p2p/mem_table_loader.ex:50: ArchEthic.P2P.MemTableLoader.init/1
(stdlib 3.15.2) gen_server.erl:423: :gen_server.init_it/2
(stdlib 3.15.2) gen_server.erl:390: :gen_server.init_it/6
(stdlib 3.15.2) proc_lib.erl:226: :proc_lib.init_p_do_apply/3

Can you change your snippet

  def list_authorized_public_keys_at(%__MODULE__{authorized_keys: auth_keys}, secret_index)
      when is_integer(secret_index) and secret_index >= 0 do
    auth_keys
    |> Enum.at(secret_index)
    |> Map.keys()
  end

to

  def list_authorized_public_keys_at(%__MODULE__{authorized_keys: auth_keys}, secret_index)
      when is_integer(secret_index) and secret_index >= 0 do
    auth_keys
    |> IO.inspect()
    |> Enum.at(secret_index)
    |> Map.keys()
  end

And share the results of the inspection?

1 Like

I am unable to run the project with iex -S mix
so, how shall I get the results of inspect?

Resovled it was due to database issues

make clean

and it was solved