Skip to content

Commit 22066aa

Browse files
authored
chore: update aex141 metadata signature (#874)
1 parent f3a9475 commit 22066aa

File tree

4 files changed

+158
-14
lines changed

4 files changed

+158
-14
lines changed

.iex.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ alias AeMdw.Db.Name
33
alias AeMdw.Db.Util
44
alias AeMdw.Db.State
55

6+
alias AeMdw.Collection
67
alias AeMdw.Contract
78
alias AeMdw.Database
89
alias AeMdw.Validate

lib/ae_mdw/aexn_contracts.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,12 @@ defmodule AeMdw.AexnContracts do
152152
@option_metadata_spec {:variant,
153153
[
154154
tuple: [],
155-
tuple: [variant: [tuple: [:string], tuple: [:string, :string]]]
155+
tuple: [variant: [tuple: [:string], tuple: [{:map, :string, :string}]]]
156156
]}
157157
@option_metadata_str {:variant, [tuple: [], tuple: [variant: [tuple: [:string]]]]}
158-
@option_metadata_map {:variant, [tuple: [], tuple: [variant: [tuple: [:string, :string]]]]}
158+
@option_metadata_map {:variant,
159+
[tuple: [], tuple: [variant: [tuple: [{:map, :string, :string}]]]]}
160+
159161
@metadata_hash <<99, 148, 233, 122>>
160162
@mint_hash <<207, 221, 154, 162>>
161163
@burn_hash <<177, 239, 193, 123>>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
defmodule AeMdw.Migrations.Aex141Cleanup do
2+
@moduledoc """
3+
Remove old contracts from AEX-141 standard draft.
4+
"""
5+
6+
alias AeMdw.AexnContracts
7+
alias AeMdw.Collection
8+
alias AeMdw.Database
9+
alias AeMdw.Db.Model
10+
alias AeMdw.Db.State
11+
12+
import AeMdwWeb.Helpers.AexnHelper, only: [sort_field_truncate: 1]
13+
14+
require Model
15+
16+
@spec run(boolean()) :: {:ok, {non_neg_integer(), non_neg_integer()}}
17+
def run(_from_start?) do
18+
begin = DateTime.utc_now()
19+
20+
deleted_count =
21+
State.new()
22+
|> Collection.stream(Model.AexnContract, {:aex141, <<>>})
23+
|> Stream.take_while(&match?({:aex141, _pk}, &1))
24+
|> Stream.map(&Database.fetch!(Model.AexnContract, &1))
25+
|> Enum.map(fn Model.aexn_contract(
26+
index: {:aex141, ct_pk},
27+
meta_info: {name, symbol, _baseurl, _type}
28+
) ->
29+
if AexnContracts.is_aex141?(ct_pk) do
30+
0
31+
else
32+
Database.dirty_delete(Model.AexnContract, {:aex141, ct_pk})
33+
34+
Database.dirty_delete(
35+
Model.AexnContractName,
36+
{:aex141, sort_field_truncate(name), ct_pk}
37+
)
38+
39+
Database.dirty_delete(
40+
Model.AexnContractSymbol,
41+
{:aex141, sort_field_truncate(symbol), ct_pk}
42+
)
43+
44+
1
45+
end
46+
end)
47+
|> Enum.sum()
48+
49+
duration = DateTime.diff(DateTime.utc_now(), begin)
50+
51+
{:ok, {deleted_count, duration}}
52+
end
53+
end

test/ae_mdw/aexn_contracts_test.exs

Lines changed: 100 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,21 @@ defmodule AeMdw.AexnContractsTest do
105105
:RETURN
106106
]
107107
}},
108+
<<32, 4, 164, 216>> =>
109+
{[:private], {[list: :string], :string},
110+
%{
111+
0 => [
112+
{:IS_NIL, {:stack, 0}, {:arg, 0}},
113+
{:JUMPIF, {:stack, 0}, {:immediate, 2}}
114+
],
115+
1 => [
116+
{:TL, {:stack, 0}, {:arg, 0}},
117+
{:HD, {:stack, 0}, {:arg, 0}},
118+
{:PUSH, {:immediate, {:tuple, {<<93, 142, 50, 216>>, {:tuple, {}}}}}},
119+
{:CALL_T, {:immediate, <<94, 119, 225, 37>>}}
120+
],
121+
2 => [RETURNR: {:immediate, ""}]
122+
}},
108123
<<39, 89, 45, 234>> =>
109124
{[], {[:integer], {:variant, [tuple: [], tuple: [:address]]}},
110125
%{
@@ -125,8 +140,8 @@ defmodule AeMdw.AexnContractsTest do
125140
{[
126141
:string,
127142
:string,
128-
{:variant, [tuple: [], tuple: [], tuple: [], tuple: []]},
129-
{:variant, [tuple: [], tuple: [:string]]}
143+
{:variant, [tuple: [], tuple: [:string]]},
144+
{:variant, [tuple: [], tuple: [], tuple: [], tuple: []]}
130145
], {:tuple, []}},
131146
%{
132147
0 => [
@@ -158,8 +173,8 @@ defmodule AeMdw.AexnContractsTest do
158173
{:STORE, {:var, -10}, {:immediate, %{}}},
159174
{:STORE, {:var, -2}, {:arg, 0}},
160175
{:STORE, {:var, -3}, {:arg, 1}},
161-
{:STORE, {:var, -4}, {:arg, 3}},
162-
{:STORE, {:var, -5}, {:arg, 2}},
176+
{:STORE, {:var, -4}, {:arg, 2}},
177+
{:STORE, {:var, -5}, {:arg, 3}},
163178
{:STORE, {:var, -11}, {:immediate, false}},
164179
{:RETURNR, {:immediate, {:tuple, {}}}}
165180
]
@@ -206,9 +221,36 @@ defmodule AeMdw.AexnContractsTest do
206221
:RETURN
207222
]
208223
}},
224+
<<93, 142, 50, 216>> =>
225+
{[:private], {[:any, :any, :any], :any},
226+
%{0 => [{:STR_JOIN, {:stack, 0}, {:arg, 1}, {:arg, 2}}, :RETURN]}},
227+
<<94, 119, 225, 37>> =>
228+
{[:private], {[tuple: [:string, :any], tvar: 0, list: {:tvar, 1}], {:tvar, 0}},
229+
%{
230+
0 => [
231+
{:IS_NIL, {:stack, 0}, {:arg, 2}},
232+
{:JUMPIF, {:stack, 0}, {:immediate, 3}}
233+
],
234+
1 => [
235+
{:HD, {:stack, 0}, {:arg, 2}},
236+
{:PUSH, {:arg, 1}},
237+
{:ELEMENT, {:stack, 0}, {:immediate, 1}, {:arg, 0}},
238+
{:ELEMENT, {:stack, 0}, {:immediate, 0}, {:arg, 0}},
239+
{:CALL, {:stack, 0}}
240+
],
241+
2 => [
242+
{:POP, {:arg, 1}},
243+
{:TL, {:arg, 2}, {:arg, 2}},
244+
{:JUMP, {:immediate, 0}}
245+
],
246+
3 => [RETURNR: {:arg, 1}]
247+
}},
209248
<<99, 80, 161, 92>> =>
210249
{[],
211-
{[:address, {:variant, [tuple: [:string], tuple: [:string, :string]]}], {:tuple, []}},
250+
{[
251+
:address,
252+
{:variant, [tuple: [:string], tuple: [{:map, :string, :string}]]}
253+
], {:tuple, []}},
212254
%{
213255
0 => [
214256
{:EQ, {:stack, 0}, {:var, -11}, {:immediate, false}},
@@ -253,15 +295,60 @@ defmodule AeMdw.AexnContractsTest do
253295
{:variant,
254296
[
255297
tuple: [],
256-
tuple: [variant: [tuple: [:string], tuple: [:string, :string]]]
298+
tuple: [variant: [tuple: [:string], tuple: [{:map, :string, :string}]]]
257299
]}},
258300
%{
259301
0 => [
260-
{:INT_TO_STR, {:stack, 0}, {:arg, 0}},
261-
{:PUSH, {:immediate, "some-url"}},
262-
{:VARIANT, {:stack, 0}, {:immediate, [1, 2]}, {:immediate, 1}, {:immediate, 2}},
302+
{:STORE, {:var, 0}, {:var, -10}},
303+
{:MAP_MEMBER, {:stack, 0}, {:var, -10}, {:arg, 0}},
304+
{:JUMPIF, {:stack, 0}, {:immediate, 11}}
305+
],
306+
1 => [
307+
{:PUSH, {:immediate, {:variant, [0, 1], 0, {}}}},
308+
{:POP, {:var, 2}},
309+
{:SWITCH_V2, {:var, 2}, {:immediate, 2}, {:immediate, 3}}
310+
],
311+
2 => [RETURNR: {:immediate, {:variant, [0, 1], 0, {}}}],
312+
3 => [
313+
{:VARIANT_ELEMENT, {:var, 3}, {:var, 2}, {:immediate, 0}},
314+
{:EQ, {:stack, 0}, {:var, -5}, {:immediate, {:variant, [0, 0, 0, 0], 0, {}}}},
315+
{:JUMPIF, {:stack, 0}, {:immediate, 5}}
316+
],
317+
4 => [
318+
{:PUSH, {:var, 3}},
319+
{:VARIANT, {:stack, 0}, {:immediate, [0, 1]}, {:immediate, 1}, {:immediate, 1}},
320+
:RETURN
321+
],
322+
5 => [
323+
{:STORE, {:var, 6}, {:var, -4}},
324+
{:SWITCH_V2, {:var, -4}, {:immediate, 6}, {:immediate, 7}}
325+
],
326+
6 => [
327+
{:PUSH, {:var, 3}},
263328
{:VARIANT, {:stack, 0}, {:immediate, [0, 1]}, {:immediate, 1}, {:immediate, 1}},
264329
:RETURN
330+
],
331+
7 => [
332+
{:VARIANT_ELEMENT, {:var, 7}, {:var, 6}, {:immediate, 0}},
333+
{:SWITCH_V2, {:var, 3}, {:immediate, 9}, {:immediate, 8}}
334+
],
335+
8 => [ABORT: {:immediate, "Incomplete patterns"}],
336+
9 => [
337+
{:VARIANT_ELEMENT, {:var, 8}, {:var, 3}, {:immediate, 0}},
338+
{:CONS, {:stack, 0}, {:var, 8}, {:immediate, []}},
339+
{:CONS, {:stack, 0}, {:var, 7}, {:stack, 0}},
340+
{:CALL, {:immediate, <<32, 4, 164, 216>>}}
341+
],
342+
10 => [
343+
{:VARIANT, {:stack, 0}, {:immediate, [1, 1]}, {:immediate, 0}, {:immediate, 1}},
344+
{:VARIANT, {:stack, 0}, {:immediate, [0, 1]}, {:immediate, 1}, {:immediate, 1}},
345+
:RETURN
346+
],
347+
11 => [
348+
{:MAP_LOOKUP, {:stack, 0}, {:var, 0}, {:arg, 0}},
349+
{:VARIANT, {:stack, 0}, {:immediate, [0, 1]}, {:immediate, 1}, {:immediate, 1}},
350+
{:POP, {:var, 2}},
351+
{:SWITCH_V2, {:var, 2}, {:immediate, 2}, {:immediate, 3}}
265352
]
266353
}},
267354
<<101, 165, 224, 15>> =>
@@ -533,9 +620,7 @@ defmodule AeMdw.AexnContractsTest do
533620
],
534621
6 => [JUMP: {:immediate, 7}],
535622
7 => [{:JUMPIF, {:stack, 0}, {:immediate, 10}}],
536-
8 => [
537-
ABORT: {:immediate, "ONLY_OWNER_APPROVED_OR_OPERATOR_CALL_ALLOWED"}
538-
],
623+
8 => [ABORT: {:immediate, "ONLY_OWNER_APPROVED_OR_OPERATOR_CALL_ALLOWED"}],
539624
9 => [PUSH: {:immediate, true}, JUMP: {:immediate, 7}],
540625
10 => [RETURNR: {:immediate, {:tuple, {}}}],
541626
11 => [PUSH: {:immediate, true}, JUMP: {:immediate, 7}],
@@ -562,9 +647,12 @@ defmodule AeMdw.AexnContractsTest do
562647
<<15, 27, 134, 79>> => ".BaseNFT.require_contract_owner",
563648
<<15, 89, 34, 233>> => "is_approved_for_all",
564649
<<20, 55, 180, 56>> => "meta_info",
650+
<<32, 4, 164, 216>> => ".String.concats",
565651
<<39, 89, 45, 234>> => "get_approved",
566652
<<68, 214, 68, 31>> => "init",
567653
<<80, 90, 158, 181>> => ".BaseNFT.invoke_nft_receiver",
654+
<<93, 142, 50, 216>> => ".^1697",
655+
<<94, 119, 225, 37>> => ".List.foldl",
568656
<<99, 80, 161, 92>> => "define_token",
569657
<<99, 148, 233, 122>> => "metadata",
570658
<<101, 165, 224, 15>> => "Chain.event",

0 commit comments

Comments
 (0)