% @doc hz helper functions -module(fd_hz). -export_type([ ]). -export([ txs_current/0, txs_since_height/1, txs_minus/1, txs_from_to/2, current_height/0, txs_of_height/1, mhs_of_height/1, txs_of_mh/1, test/0 ]). -spec test() -> no_return(). test() -> io:format("~tp~n", [hz:gen_current()]), io:format("~tp~n", [hz:kb_current()]), ok. txs_current() -> H = current_height(), txs_of_height(H). txs_since_height(H) -> txs_from_to(H, current_height()). txs_minus(N) -> H = current_height(), L = H - N, txs_from_to(L, H). txs_from_to(Min, Max) when Min =< Max -> lists:append([txs_of_height(H) || H <- lists:seq(Min, Max)]); txs_from_to(Min, Max) when Min > Max -> []. current_height() -> {ok, H} = hz:kb_current_height(), H. txs_of_height(Height) -> lists:append([txs_of_mh(MH) || MH <- mhs_of_height(Height)]). -spec mhs_of_height(Height :: pos_integer()) -> term(). mhs_of_height(Height) -> {ok, #{"micro_blocks" := MHs}} = hz:gen_by_height(Height), MHs. txs_of_mh(MH) -> {ok, TXs} = hz:mb_txs(MH), filter_spends(TXs). filter_spends(TXs) -> lists:filtermap(fun filter_spend/1, TXs). filter_spend(#{"tx" := TX = #{"type" := "SpendTx"}}) -> {true, spend_info(TX)}; filter_spend(_) -> false. spend_info(#{"type" := "SpendTx", "recipient_id" := Recipient, "amount" := Amount, "payload" := Payload}) -> {sp, Recipient, Amount, Payload}.