defmodule ArweaveSdkEx.CodeRunner do
@moduledoc """
Run codes storage in arweave TX.
"""
def get_ex_by_tx_id(node, tx_id) do
{:ok, %{decoded_tags: decoded_tags}} =ArweaveSdkEx.get_tx(node, tx_id)
type = Map.get(decoded_tags, :"Content-Type")
if_record = has_if_record(decoded_tags)
case do_get_ex_by_tx_id(node, tx_id, type) do
{:ok, content} ->
{:ok, %{code: content, if_record: if_record}}
{:error, msg} ->
{:error, msg}
end
end
defp do_get_ex_by_tx_id(node, tx_hash, "application/elixir") do
{:ok, %{content: content}} = ArweaveSdkEx.get_content_in_tx(node, tx_hash)
{:ok, content}
end
defp do_get_ex_by_tx_id(_node, _tx_id, _other_type) do
{:error, "it's not a elixir func"}
end
def has_if_record(decoded_tags) do
raw_res = Map.get(decoded_tags, "If-Record")
if is_nil(raw_res) or raw_res=="0" do
false
else
true
end
end
# +--------+
# | runner |
# +--------+
def run_ex(code, params_map) do
params_list = Map.to_list(params_map)
{result, _} = Code.eval_string(code,params_list, __ENV__)
%{output: result, input: params_map}
end
end