Skip to content

Commit d590e2f

Browse files
committed
fixup! wip: serialize to/from list when downloading bundles from the chain
1 parent 3e6e3aa commit d590e2f

File tree

1 file changed

+31
-52
lines changed

1 file changed

+31
-52
lines changed

src/ar_bundles.erl

Lines changed: 31 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ data_item_signature_data(RawItem, signed) ->
147147
true = enforce_valid_tx(RawItem),
148148
?event({data_item_signature_data, hb_util:human_id(RawItem#tx.unsigned_id)}),
149149
NormItem = normalize_data(RawItem, true),
150-
?event(debug_test, {data_item_signature_data, {explicit, NormItem}}),
150+
?event({data_item_signature_data, {explicit, NormItem}}),
151151
ar_deep_hash:hash([
152152
utf8_encoded("dataitem"),
153153
utf8_encoded("1"),
@@ -480,14 +480,14 @@ to_serialized_pair(Item, JustData) when is_binary(Item) ->
480480
to_serialized_pair(
481481
#tx{ tags = [{<<"ao-type">>, <<"binary">>}], data = Item }, JustData);
482482
to_serialized_pair(Item, JustData) ->
483-
?event(debug_test, {to_serialized_pair, Item}),
483+
?event({to_serialized_pair, Item}),
484484
% TODO: This is a hack to get the ID of the item. We need to do this because we may not
485485
% have the ID in 'item' if it is just a map/list. We need to make this more efficient.
486486
Serialized = serialize(Item, JustData),
487487
Deserialized = deserialize(Serialized),
488488
UnsignedID = id(Deserialized, unsigned),
489489
SignedID = id(Deserialized, signed),
490-
?event(debug_test, {serialized_pair,
490+
?event({serialized_pair,
491491
{unsigned_id, UnsignedID}, {signed_id, SignedID}, {size, byte_size(Serialized)}}),
492492
{UnsignedID, SignedID, Serialized}.
493493

@@ -1079,22 +1079,23 @@ arbundles_item_roundtrip_test() ->
10791079
Serialized = serialize(Item),
10801080
?assertEqual(Bin, Serialized).
10811081

1082-
%% @doc Similar test as arbundles_item_roundtrip_test *but* we can't do
1083-
%% a full roundtrip since HyperBEAM explicitly serializes lists as maps
1084-
%% so the full roundtrip will not match.
1085-
arbundles_list_bundle_deserialize_test() ->
1082+
arbundles_list_bundle_roundtrip_test() ->
1083+
W = ar_wallet:new(),
10861084
{ok, Bin} = file:read_file(<<"test/arbundles.js/ans104-list-bundle.bundle">>),
1087-
TX = #tx{
1085+
TX = sign_item(#tx{
10881086
format = ans104,
10891087
data = Bin,
10901088
data_size = byte_size(Bin),
10911089
tags = ?BUNDLE_TAGS
1092-
},
1093-
?event(debug_test, {serialized, {explicit, TX}}),
1094-
DeserializedJS = deserialize(TX),
1095-
?event(debug_test, {deserialized, {explicit, DeserializedJS}}),
1096-
?assertEqual(3, length(DeserializedJS#tx.data)),
1097-
[Item1, Item2, Item3] = DeserializedJS#tx.data,
1090+
}, W),
1091+
?event(debug_test, {tx, {explicit, TX}}),
1092+
?assert(verify_item(TX)),
1093+
1094+
Deserialized = deserialize(TX),
1095+
?event(debug_test, {deserialized, Deserialized}),
1096+
?assertEqual(3, maps:size(Deserialized#tx.data)),
1097+
#{<<"1">> := Item1, <<"2">> := Item2, <<"3">> := Item3} =
1098+
Deserialized#tx.data,
10981099
?assertEqual(<<"first">>, Item1#tx.data),
10991100
?assertEqual([{<<"Type">>, <<"list">>}, {<<"Index">>, <<"0">>}], Item1#tx.tags),
11001101
?assertEqual(
@@ -1117,21 +1118,11 @@ arbundles_list_bundle_deserialize_test() ->
11171118
?assert(verify_item(Item2)),
11181119
?assert(verify_item(Item3)),
11191120

1120-
% Normalizing the bundle will convert it to a serialized HyperBEAM bundle
1121-
% (i.e. map instead of list)
1122-
Normalized = normalize(DeserializedJS),
1123-
?event(debug_test, {normalized, {explicit, Normalized}}),
1124-
?assertEqual([
1125-
{<<"bundle-format">>, <<"binary">>},
1126-
{<<"bundle-version">>, <<"2.0.0">>},
1127-
{<<"bundle-map">>, hb_util:encode(id(Normalized#tx.manifest, unsigned))}
1128-
], Normalized#tx.tags),
1129-
% Deserialize again so we can verify the data itme
1130-
DeserializedHB = deserialize(Normalized),
1131-
?event(debug_test, {deserialized_hb, DeserializedHB}),
1132-
?assertEqual(
1133-
#{ <<"1">> => Item1, <<"2">> => Item2, <<"3">> => Item3 },
1134-
DeserializedHB#tx.data).
1121+
Normalized = normalize(Deserialized, true),
1122+
?event(debug_test, {normalized, Normalized}),
1123+
?assert(verify_item(Normalized)),
1124+
?assertEqual(Bin, Normalized#tx.data),
1125+
ok.
11351126

11361127
arbundles_single_list_bundle_roundtrip_test() ->
11371128
W = ar_wallet:new(),
@@ -1143,37 +1134,25 @@ arbundles_single_list_bundle_roundtrip_test() ->
11431134
data_size = byte_size(Bin),
11441135
tags = ?BUNDLE_TAGS
11451136
}, W),
1137+
?event(debug_test, {tx, {explicit, TX}}),
11461138
?assert(verify_item(TX)),
1147-
?event(debug_test, {serialized, {explicit, TX}}),
1148-
Deserialized = deserialize(TX),
11491139

1140+
Deserialized = deserialize(TX),
1141+
?event(debug_test, {deserialized, Deserialized}),
11501142
?assertEqual(1, maps:size(Deserialized#tx.data)),
11511143
#{<<"1">> := Item} = Deserialized#tx.data,
1144+
?event(debug_test, {item, Item}),
1145+
?assertEqual(
1146+
<<"IchWLlJKLaCqKd4KW6BcDKe560XpfgFuPHXjjK8tfgA">>,
1147+
hb_util:encode(Item#tx.id)),
11521148
?assertEqual(<<"only">>, Item#tx.data),
11531149
?assertEqual([{<<"Type">>, <<"list">>}, {<<"Index">>, <<"1">>}], Item#tx.tags),
11541150
?assert(verify_item(Item)),
11551151

1156-
?event(debug_test, {deserialized, Deserialized}),
1157-
Reserialized = normalize(Deserialized, true),
1158-
?event(debug_test, {reserialized, Reserialized}),
1159-
1160-
?event(debug_test, {original_data, {explicit, TX#tx.data}}),
1161-
?event(debug_test, {reserialized_data, {explicit, Reserialized#tx.data}}),
1162-
?assert(verify_item(Reserialized)),
1163-
1164-
% % Normalizing the bundle will convert it to a serialized HyperBEAM bundle
1165-
% % (i.e. map instead of list)
1166-
% Normalized = normalize(DeserializedJS),
1167-
% ?event(debug_test, {normalized, {explicit, Normalized}}),
1168-
% ?assertEqual([
1169-
% {<<"bundle-format">>, <<"binary">>},
1170-
% {<<"bundle-version">>, <<"2.0.0">>},
1171-
% {<<"bundle-map">>, hb_util:encode(id(Normalized#tx.manifest, unsigned))}
1172-
% ], Normalized#tx.tags),
1173-
% % Deserialize again so we can verify the data itme
1174-
% DeserializedHB = deserialize(Normalized),
1175-
% ?event(debug_test, {deserialized_hb, DeserializedHB}),
1176-
% ?assertEqual(#{ <<"1">> => Item }, DeserializedHB#tx.data),
1152+
Normalized = normalize(Deserialized, true),
1153+
?event(debug_test, {normalized, Normalized}),
1154+
?assert(verify_item(Normalized)),
1155+
?assertEqual(Bin, Normalized#tx.data),
11771156
ok.
11781157

11791158
%% @doc This test generates and writes a map bundle to a file so that we can

0 commit comments

Comments
 (0)