Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
14b13c8
fix: Add try/catch on hb_store_arweave
speeddragon Apr 21, 2026
5ba5aaf
feat: Add L1 TX filtering with owner and tag support
charmful0x Mar 6, 2026
5a0f085
feat: Add L1 TX offset loading and configuration
charmful0x Mar 7, 2026
1b2f8d7
feat: Add block N depth indexing
charmful0x Mar 10, 2026
4f4ed79
test: Add tests and refactor copycat internals
JamesPiechota Mar 10, 2026
390d93b
impr: Add indexer logging and response improvements
JamesPiechota Mar 12, 2026
0c5d03b
fix: Operational fixes for copycat indexer
JamesPiechota Mar 13, 2026
13e7509
feat: Add per-block item index with depth tracking
nikooo777 Apr 3, 2026
5f7b989
feat: Add parallel block processing with shared memory budget
nikooo777 Apr 9, 2026
7b8f0d7
feat: Add parent lookup endpoint at ~arweave@2.9/parent=<id>
nikooo777 Apr 9, 2026
c3007a5
fix: Stop latest_height from silently returning 0 on network errors
nikooo777 Apr 14, 2026
b98280d
fix: Catch non UTF8 tags error
speeddragon Apr 28, 2026
aa18212
impr: Missing try catch on non UTF8 tags
speeddragon Apr 29, 2026
2af34c1
impr: signed not needed
speeddragon May 1, 2026
36eb361
impr: Add overlay_count metrics from store LMDB to see if server is w…
speeddragon May 1, 2026
2cc56d9
impr: Check if write fails and throw fast in index write cases
speeddragon May 1, 2026
a5d40a3
impr: Add a max retry limit to hb_copycat_budget
speeddragon May 1, 2026
833b6af
impr: Remove dead code
speeddragon May 1, 2026
a54b6fb
impr: Remove memory_safe_cap (redundant), to only use copycat_memory_…
speeddragon May 1, 2026
9a35440
impr: Do not return not_found where there is an error in dev_arweave:…
speeddragon May 3, 2026
8f31fc8
impr: Re-add warning before exit on hb_event
speeddragon May 3, 2026
bbe47a1
impr: Minor fixes
speeddragon May 4, 2026
d16ae50
impr: stop monitor in hb_store_lmdb
speeddragon May 4, 2026
63703d4
impr: Fix hb_store new structure for previous changes
speeddragon May 4, 2026
e18879a
impr: document (subfork) offset index upgrade, allowing `relative` refs
samcamwilliams Apr 13, 2026
22ab862
wip: impl improved offset indexing format; tidy Arweave data access r…
samcamwilliams Apr 13, 2026
cc80fe1
wip: progress towards `GET /raw` on pending IDs
samcamwilliams Apr 13, 2026
f83e553
slop: Claude's draft of copycat on pending
samcamwilliams Apr 13, 2026
f04e71b
fix: port restore chunk reads without explicit len fix from impr/
charmful0x Apr 20, 2026
00ba4c6
fix: non-numeric pending offsets & tx_to_message hard match
charmful0x Apr 16, 2026
d57e998
chore: add pinned dev_arweave:pending/3 list
charmful0x Apr 16, 2026
e943cfd
fix: attempt 1 for get_chunk_range_relative/4 chunk relative decoding
charmful0x Apr 17, 2026
742184e
fix: index mempool bundle children from raw pending bytes
charmful0x Apr 17, 2026
d09bbef
fix: normalize arweave reads across pending & confirmed bundle offsets
charmful0x Apr 17, 2026
b0e3948
fix: bundle l2 items discovery
charmful0x Apr 17, 2026
42cf8d0
feat: stable pending-chunks traversal
charmful0x Apr 19, 2026
3d9caa0
feat: mempool copycat rich logs
charmful0x Apr 19, 2026
d491d00
feat: filter TXs by sender
charmful0x Apr 20, 2026
e97cb63
chore: add tests
charmful0x Apr 20, 2026
4b3076d
feat: add mempool sender filtered determinsitv test
charmful0x Apr 20, 2026
9ec16f5
fix: pending header recursion - rebase
charmful0x Apr 29, 2026
95b420a
fix: mempool test
charmful0x Apr 29, 2026
8313f2b
fix: tests in dev_copycat_arweave after edge rebase
speeddragon May 5, 2026
eba5cb2
fix: encode anchor based on arweave spec
Lucifer0x17 May 5, 2026
72c2a8c
fix: no variable can return null or not_found rather than empty map
Lucifer0x17 May 5, 2026
34e3ff2
chore: clean the code
Lucifer0x17 May 6, 2026
32d1d93
fix: breaking tests and some cleanup
Lucifer0x17 May 6, 2026
0fe11de
feat(wip): store tx-headers in local-store to access via graphql
Lucifer0x17 May 6, 2026
0ba5634
chore: fix a test
Lucifer0x17 May 6, 2026
b0fc6bd
feat: added support for fee in graphql
Lucifer0x17 May 8, 2026
b2d8cea
fix: avoid rest of the filter also failing if first filter failed
Lucifer0x17 May 8, 2026
b66df6b
impr: Moving some functions to hb_store_arweave from dev_copycat_arwe…
speeddragon May 8, 2026
3a27a2f
impr: Fix bug on index scope
speeddragon May 8, 2026
206e1e2
impr: Use hb_opts instead of hb_maps
speeddragon May 7, 2026
b570152
impr: Make test work after rebase
speeddragon May 8, 2026
109a194
feat: optimize the header indexing size on disk
Lucifer0x17 May 12, 2026
1a5f102
fix: gql queries matching with lower and uppercase tag names
Lucifer0x17 May 12, 2026
f18a6ff
chore: align rebase resolutions with edge conventions
nikooo777 May 18, 2026
9b1a971
fix: prevent crash on copycat tag filtering
nikooo777 May 19, 2026
6ad9d45
fix: bound copycat range test indexing depth
nikooo777 May 20, 2026
2a962bb
feat(query): self-contained block-range, tx.block, tag and owner queries
Lucifer0x17 Jun 3, 2026
ee0bb1f
refactor(copycat): consolidate result-map and json-response helpers
Lucifer0x17 Jun 3, 2026
8ba34ef
fix: Test without binary store key
speeddragon Jun 3, 2026
e4718cd
fix(query): declare graphql as hb app dep so it ships in releases
Lucifer0x17 Jun 3, 2026
ea49c23
impr: Remove the cut over logic, created to support different version…
speeddragon Jun 4, 2026
660c1cd
fix: Merge conflicts regarding offset renaming
speeddragon Jun 4, 2026
dc0ba05
impr: Always reprocess blocks in ranged copycat arweave requests
speeddragon Jun 5, 2026
4c98147
impr: Updare lmdb-rs to a version that doesn't cause OOM when using m…
speeddragon Jun 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion rebar.config
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
]}.

{deps, [
{elmdb, {git, "https://github.com/permaweb/elmdb-rs.git", {ref, "06ccf937abc250cb22c782d568efcaa39f5452ff"}}},
{elmdb, {git, "https://github.com/permaweb/elmdb-rs.git", {ref, "68316484a5bd45bcc4b180a60883db7272c5dbde"}}},
{b64rs, {git, "https://github.com/permaweb/b64rs.git", {ref, "94b7d8e51d9a44f3bd12b7d138dd0d2cb74c169f"}}},
{base32, "1.0.0"},
{cowlib, "2.16.0"},
Expand Down
2 changes: 1 addition & 1 deletion rebar.lock
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
{<<"ddskerl">>,{pkg,<<"ddskerl">>,<<"0.4.2">>},1},
{<<"elmdb">>,
{git,"https://github.com/permaweb/elmdb-rs.git",
{ref,"06ccf937abc250cb22c782d568efcaa39f5452ff"}},
{ref,"68316484a5bd45bcc4b180a60883db7272c5dbde"}},
0},
{<<"eqwalizer_support">>,
{git_subdir,"https://github.com/whatsapp/eqwalizer.git",
Expand Down
3 changes: 3 additions & 0 deletions src/core/include/hb_store_arweave.hrl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-define(SCOPE_PARENT, <<"parent">>).
-define(SCOPE_OFFSET, <<"offset">>).

16 changes: 3 additions & 13 deletions src/core/monitor/hb_event.erl
Original file line number Diff line number Diff line change
Expand Up @@ -405,18 +405,8 @@ check_overload(Last, N) ->
case erlang:process_info(self(), message_queue_len) of
{message_queue_len, Len} when Len > ?OVERLOAD_QUEUE_LENGTH ->
{memory, MemorySize} = erlang:process_info(self(), memory),
case rand:uniform(max(1000, Len - ?OVERLOAD_QUEUE_LENGTH)) of
1 ->
?debug_print(
{warning,
prometheus_event_queue_overloading,
{queue, Len},
{last_event, Last},
{memory_bytes, MemorySize}
}
);
_ -> ignored
end,
% If the size of this process is too large, exit such that
% we can be restarted by the next caller.
case MemorySize of
MemorySize when MemorySize > ?MAX_MEMORY ->
?debug_print(
Expand Down Expand Up @@ -683,4 +673,4 @@ wait_drain_loop(Pid, Deadline) ->
undefined ->
error(event_server_dead)
end.
-endif.
-endif.
13 changes: 11 additions & 2 deletions src/core/monitor/hb_prometheus.erl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%%% @doc HyperBEAM wrapper for Prometheus metrics.
-module(hb_prometheus).
-export([ensure_started/0, declare/2, measure_and_report/2, measure_and_report/3]).
-export([observe/2, observe/3, inc/2, inc/3, inc/4, dec/2, dec/3, dec/4]).
-export([observe/2, observe/3, inc/2, inc/3, inc/4, dec/2, dec/3, dec/4, set/4]).
-define(STARTED_CACHE_KEY, {?MODULE, started}).

%% @doc Ensure the Prometheus application has been started. Caches startup
Expand Down Expand Up @@ -118,4 +118,13 @@ dec(Type, Metrics, Labels, Value) ->
end.

do_dec(gauge, Name, Labels, Value) ->
prometheus_gauge:dec(Name, Labels, Value).
prometheus_gauge:dec(Name, Labels, Value).

set(gauge, Name, Labels, Value) ->
case ensure_started() of
ok ->
try prometheus_gauge:set(Name, Labels, Value)
catch error:mfa_already_exists -> ok
end;
_ -> ok
end.
9 changes: 8 additions & 1 deletion src/core/resolver/hb_opts.erl
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
-include("include/hb.hrl").
-include("include/hb_opts.hrl").
-include("include/hb_arweave_nodes.hrl").
-include("include/hb_store_arweave.hrl").
-include("../../_build/hb_preloaded_index.hrl").

-ifndef(PRELOADED_DEVICES_INDEX_MESSAGE_ID).
Expand Down Expand Up @@ -283,6 +284,12 @@ raw_default_message() ->
<<"relay-http-client">> => httpc,
% The default codec to use for commitment signatures.
<<"commitment-device">> => <<"httpsig@1.0">>,
% Copycat-specific options.
<<"copycat-memory-cap">> => 6 * 1024 * 1024 * 1024,
<<"copycat-memory-budget">> => 6 * 1024 * 1024 * 1024,
<<"copycat-depth-recursion-cap">> => 6, % 2x the deepest we've seen to date
<<"arweave-block-workers">> => 3,
<<"copycat-scope">> => [?SCOPE_OFFSET, ?SCOPE_PARENT],
% Dev options
<<"mode">> => debug,
<<"profiling">> => true,
Expand Down Expand Up @@ -1258,4 +1265,4 @@ ensure_node_history_test() ->
]
},
?assertEqual({error, invalid_values}, ensure_node_history(InvalidItems, RequiredOpts)).
-endif.
-endif.
2 changes: 0 additions & 2 deletions src/core/store/hb_store.erl
Original file line number Diff line number Diff line change
Expand Up @@ -561,8 +561,6 @@ start_one(Store = #{ <<"store-module">> := Mod }, Req, Opts) ->
end.

call_store_start(Mod, Store, Req, Opts) ->
%% function_exported doesn't load the module. We need to call ensure_loaded
%% here since is the first time we call a function to load the module.
code:ensure_loaded(Mod),
case erlang:function_exported(Mod, start, 3) of
true -> Mod:start(Store, Req, Opts);
Expand Down
Loading