tx · 632aNsgstRdDpTr99wUrx2D8k5Lon7uwRnKrf5gan3Cm

3MvrXJVzDMDcshazxn88FybxHV2JvWQBxTc:  -0.01100000 Waves

2022.10.14 13:02 [2271870] smart account 3MvrXJVzDMDcshazxn88FybxHV2JvWQBxTc > SELF 0.00000000 Waves

{ "type": 13, "id": "632aNsgstRdDpTr99wUrx2D8k5Lon7uwRnKrf5gan3Cm", "fee": 1100000, "feeAssetId": null, "timestamp": 1665741701904, "version": 2, "chainId": 84, "sender": "3MvrXJVzDMDcshazxn88FybxHV2JvWQBxTc", "senderPublicKey": "Fq8P5ctrS7PNTX37bWWxvnwoB7C2FaNySZWnRmgPUaDH", "proofs": [ "4HLa5K59pFpRV7H5v1RDc6pyPkP69wuDvNVwbX8Ry9VLtqxf1CH6S791cAP5opXnnW3ueaYf8ZndUSAttWZj2gGP" ], "script": "base64:AAIFAAAAAAAAACwIAhIDCgEBEgMKAQgSAwoBCBIDCgEIEgMKAQgSBQoDCAgBEgMKAQgSAwoBCAAAACQBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABAAAADG1heWJlQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAADG1heWJlQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAGkNhbid0IHBhcnNlIGFkZHJlc3MgZnJvbSAnBQAAAAxtYXliZUFkZHJlc3MCAAAAAScBAAAACmtleV9lbnRpdHkAAAADAAAABG5hbWUAAAACcGsAAAAIcHJvcGVydHkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEbmFtZQIAAAABXwUAAAACcGsCAAAAAV8FAAAACHByb3BlcnR5AQAAAA5rZXlfVG9rZW5fbmFtZQAAAAEAAAAHdG9rZW5JZAkBAAAACmtleV9lbnRpdHkAAAADAgAAAAVUb2tlbgUAAAAHdG9rZW5JZAIAAAAEbmFtZQEAAAAOa2V5X05hbWVfdG9rZW4AAAABAAAABG5hbWUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbmFtZQIAAAAFdG9rZW4BAAAADmtleV9OYW1lX293bmVyAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABW93bmVyAQAAABJrZXlfTmFtZV9leHBpcmVzQXQAAAABAAAABG5hbWUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbmFtZQIAAAAJZXhwaXJlc0F0AQAAABJrZXlfTmFtZV9jcmVhdGVkQXQAAAABAAAABG5hbWUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbmFtZQIAAAAJY3JlYXRlZEF0AAAAAAtrZXlfbmFtZVRUTAIAAAAHbmFtZVRUTAAAAAAPa2V5X2NvbnRyb2xsZXJzAgAAAAtjb250cm9sbGVycwEAAAAJX3NldE93bmVyAAAAAgAAAARuYW1lAAAABW93bmVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5rZXlfTmFtZV9vd25lcgAAAAEFAAAABG5hbWUFAAAABW93bmVyBQAAAANuaWwBAAAACV9nZXRPd25lcgAAAAEAAAAEbmFtZQkABB0AAAACBQAAAAR0aGlzCQEAAAAOa2V5X05hbWVfb3duZXIAAAABBQAAAARuYW1lAQAAAAlfZ2V0VG9rZW4AAAABAAAABG5hbWUJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQUAAAAEbmFtZQEAAAANX2dldENyZWF0ZWRBdAAAAAEAAAAEbmFtZQkABBoAAAACBQAAAAR0aGlzCQEAAAASa2V5X05hbWVfY3JlYXRlZEF0AAAAAQUAAAAEbmFtZQEAAAANX2dldEV4cGlyZXNBdAAAAAEAAAAEbmFtZQkABBoAAAACBQAAAAR0aGlzCQEAAAASa2V5X05hbWVfZXhwaXJlc0F0AAAAAQUAAAAEbmFtZQEAAAAPX2dldENvbnRyb2xsZXJzAAAAAAkABB0AAAACBQAAAAR0aGlzBQAAAA9rZXlfY29udHJvbGxlcnMAAAAAC2NvbnRyb2xsZXJzBAAAAAckbWF0Y2gwCQEAAAAPX2dldENvbnRyb2xsZXJzAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAARyZXByBQAAAAckbWF0Y2gwCQAEtQAAAAIFAAAABHJlcHICAAAAASwFAAAAA25pbAAAAAAHbmFtZVRUTAkBAAAAEWdldEludGVnZXJPclRocm93AAAAAgUAAAAEdGhpcwUAAAALa2V5X25hbWVUVEwBAAAAEGlzUmVnaXN0ZXJlZE5hbWUAAAABAAAABG5hbWUJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAQAAAA5rZXlfTmFtZV90b2tlbgAAAAEFAAAABG5hbWUBAAAADWlzQ3JlYXRlZE5hbWUAAAABAAAABG5hbWUJAQAAAAlpc0RlZmluZWQAAAABCQEAAAANX2dldENyZWF0ZWRBdAAAAAEFAAAABG5hbWUBAAAADWlzRXhwaXJlZE5hbWUAAAABAAAABG5hbWUEAAAAByRtYXRjaDAJAQAAAA1fZ2V0RXhwaXJlc0F0AAAAAQUAAAAEbmFtZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAlleHBpcmVzQXQFAAAAByRtYXRjaDAJAABmAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAACWV4cGlyZXNBdAcBAAAADGlzQWN0aXZlTmFtZQAAAAEAAAAEbmFtZQMDCQEAAAAQaXNSZWdpc3RlcmVkTmFtZQAAAAEFAAAABG5hbWUJAQAAAA1pc0NyZWF0ZWROYW1lAAAAAQUAAAAEbmFtZQcJAQAAAAEhAAAAAQkBAAAADWlzRXhwaXJlZE5hbWUAAAABBQAAAARuYW1lBwEAAAAPaXNBdmFpbGFibGVOYW1lAAAAAQAAAARuYW1lBAAAAAdzeW1ib2xzAgAAACVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAtCgEAAAANdmFsaWRhdGVDaGFycwAAAAIAAAAHaXNWYWxpZAAAAARjaGFyAwUAAAAHaXNWYWxpZAkBAAAACGNvbnRhaW5zAAAAAgUAAAAHc3ltYm9scwUAAAAEY2hhcgcEAAAAC2lzVmFsaWROYW1lAwMDAwMJAABmAAAAAgkAATEAAAABBQAAAARuYW1lAAAAAAAAAAAACQAAZwAAAAIAAAAAAAAAAD8JAAExAAAAAQUAAAAEbmFtZQcJAQAAAAIhPQAAAAIJAASzAAAAAgUAAAAEbmFtZQIAAAACLS0AAAAAAAAAAAIHCQEAAAACIT0AAAACCQAEswAAAAIFAAAABG5hbWUCAAAAAS0AAAAAAAAAAAAHCQEAAAACIT0AAAACCQAEtwAAAAIFAAAABG5hbWUCAAAAAS0JAABlAAAAAgkAATEAAAABBQAAAARuYW1lAAAAAAAAAAABBwoAAAAAAiRsCQAEtQAAAAIFAAAABG5hbWUCAAAAAAoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAGCgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAANdmFsaWRhdGVDaGFycwAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyA2MwkBAAAABSRmMF8yAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoAAAAAAAAAAAsAAAAAAAAAAAwAAAAAAAAAAA0AAAAAAAAAAA4AAAAAAAAAAA8AAAAAAAAAABAAAAAAAAAAABEAAAAAAAAAABIAAAAAAAAAABMAAAAAAAAAABQAAAAAAAAAABUAAAAAAAAAABYAAAAAAAAAABcAAAAAAAAAABgAAAAAAAAAABkAAAAAAAAAABoAAAAAAAAAABsAAAAAAAAAABwAAAAAAAAAAB0AAAAAAAAAAB4AAAAAAAAAAB8AAAAAAAAAACAAAAAAAAAAACEAAAAAAAAAACIAAAAAAAAAACMAAAAAAAAAACQAAAAAAAAAACUAAAAAAAAAACYAAAAAAAAAACcAAAAAAAAAACgAAAAAAAAAACkAAAAAAAAAACoAAAAAAAAAACsAAAAAAAAAACwAAAAAAAAAAC0AAAAAAAAAAC4AAAAAAAAA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VG9rZW4JAQAAABVfcmVzdG9yZU5hbWVXaXRoVG9rZW4AAAACBQAAAARuYW1lBQAAAAtuZXdUb2tlblN0cgQAAAAXdHJhbnNmZXJOZXdUb2tlblRvT3duZXIJAQAAABVfdHJhbnNmZXJUb2tlblRvT3duZXIAAAACBQAAAAtuZXdUb2tlblN0cgUAAAAPbmV3T3duZXJBZGRyZXNzCQAETgAAAAIJAAROAAAAAgUAAAANaXNzdWVOZXdUb2tlbgUAAAAXcmVzdG9yZU5hbWVXaXRoTmV3VG9rZW4FAAAAF3RyYW5zZmVyTmV3VG9rZW5Ub093bmVyAwMFAAAADGlzVG9rZW5Pd25lcgUAAAAIaGFzVG9rZW4HCQAAAgAAAAECAAAAHFlvdSBhbHJlYWR5IG93biBhIG5hbWUgdG9rZW4DCQEAAAABIQAAAAEFAAAACGhhc1Rva2VuCQAAAgAAAAECAAAAG1lvdSBkb24ndCBoYXZlIGEgbmFtZSB0b2tlbgkBAAAACV9zZXRPd25lcgAAAAIFAAAABG5hbWUFAAAAD25ld093bmVyQWRkcmVzcwAAAANpbnYBAAAABXdob0lzAAAAAQAAAARuYW1lCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAJbW9kaWZpZXJzAAAAAQkABEwAAAACAwkAAGYAAAACCQABMQAAAAEFAAAABG5hbWUAAAAAAAAAAAAFAAAABHVuaXQJAAACAAAAAQIAAAAUTmFtZSBjYW5ub3QgYmUgZW1wdHkFAAAAA25pbAQAAAAJbGFzdExhYmVsCAkBAAAAD19zcGxpdExhc3RMYWJlbAAAAAEFAAAABG5hbWUAAAACXzEEAAAACnJlZ2lzdHJhbnQJAQAAAAlfZ2V0T3duZXIAAAABBQAAAAlsYXN0TGFiZWwEAAAACHJlc29sdmVyBQAAAAR1bml0BAAAAAtuYW1lQ3JlYXRlZAkBAAAADV9nZXRDcmVhdGVkQXQAAAABBQAAAAlsYXN0TGFiZWwEAAAAC25hbWVFeHBpcmVzCQEAAAANX2dldEV4cGlyZXNBdAAAAAEFAAAACWxhc3RMYWJlbAkABRQAAAACBQAAAANuaWwJAAUWAAAABAUAAAAKcmVnaXN0cmFudAUAAAAIcmVzb2x2ZXIFAAAAC25hbWVDcmVhdGVkBQAAAAtuYW1lRXhwaXJlcwAAAAAYLrw1", "height": 2271870, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 67CL4ykCEXAiVgq857v7a6AV5g4W4Ym2V6wrszbeH6hF Next: CPMAhrWJrvtNvhzcfrsLnPMbWgnQ1MwuWo4AunxW2oeY Diff:
OldNewDifferences
2828 func p (h) = g("Name", h, "createdAt")
2929
3030
31-let q = "rootAddress"
31+let q = "nameTTL"
3232
33-let r = "nameTTL"
33+let r = "controllers"
3434
35-let s = "controllers"
36-
37-func t (h,u) = [StringEntry(n(h), u)]
35+func s (h,t) = [StringEntry(n(h), t)]
3836
3937
40-func v (h) = getString(this, n(h))
38+func u (h) = getString(this, n(h))
4139
4240
43-func w (h) = getString(this, m(h))
41+func v (h) = getString(this, m(h))
4442
4543
46-func x (h) = getInteger(this, p(h))
44+func w (h) = getInteger(this, p(h))
4745
4846
49-func y (h) = getInteger(this, o(h))
47+func x (h) = getInteger(this, o(h))
5048
5149
52-func z () = getString(this, s)
50+func y () = getString(this, r)
5351
5452
55-let A = a(this, q)
56-
57-let B = e(A)
58-
59-let C = {
60- let D = z()
61- if ($isInstanceOf(D, "String"))
53+let z = {
54+ let A = y()
55+ if ($isInstanceOf(A, "String"))
6256 then {
63- let E = D
64- split(E, ",")
57+ let B = A
58+ split(B, ",")
6559 }
6660 else nil
6761 }
6862
69-let F = d(this, r)
63+let C = d(this, q)
7064
71-func G (h) = isDefined(getString(this, m(h)))
65+func D (h) = isDefined(getString(this, m(h)))
7266
7367
74-func H (h) = isDefined(x(h))
68+func E (h) = isDefined(w(h))
7569
7670
77-func I (h) = {
78- let D = y(h)
79- if ($isInstanceOf(D, "Int"))
71+func F (h) = {
72+ let A = x(h)
73+ if ($isInstanceOf(A, "Int"))
8074 then {
81- let J = D
82- (lastBlock.timestamp > J)
75+ let G = A
76+ (lastBlock.timestamp > G)
8377 }
8478 else false
8579 }
8680
8781
88-func K (h) = if (if (G(h))
89- then H(h)
82+func H (h) = if (if (D(h))
83+ then E(h)
9084 else false)
91- then !(I(h))
85+ then !(F(h))
9286 else false
9387
9488
95-func L (h) = {
96- let M = "abcdefghijklmnopqrstuvwxyz1234567890-"
97- func N (O,P) = if (O)
98- then contains(M, P)
89+func I (h) = {
90+ let J = "abcdefghijklmnopqrstuvwxyz1234567890-"
91+ func K (L,M) = if (L)
92+ then contains(J, M)
9993 else false
10094
101- let Q = if (if (if (if ((size(h) > 0))
95+ let N = if (if (if (if (if ((size(h) > 0))
10296 then (63 >= size(h))
97+ else false)
98+ then (indexOf(h, "--") != 2)
10399 else false)
104100 then (indexOf(h, "-") != 0)
105101 else false)
106102 then (lastIndexOf(h, "-") != (size(h) - 1))
107103 else false)
108104 then {
109- let R = split(h, "")
110- let S = size(R)
111- let T = true
112- func U (V,W) = if ((W >= S))
113- then V
114- else N(V, R[W])
105+ let O = split(h, "")
106+ let P = size(O)
107+ let Q = true
108+ func R (S,T) = if ((T >= P))
109+ then S
110+ else K(S, O[T])
115111
116- func X (V,W) = if ((W >= S))
117- then V
112+ func U (S,T) = if ((T >= P))
113+ then S
118114 else throw("List size exceeds 63")
119115
120- X(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(T, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63)
116+ U(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63)
121117 }
122118 else false
123- let Y = if (G(h))
124- then !(I(h))
119+ let V = if (D(h))
120+ then !(F(h))
125121 else false
126- if (!(Y))
127- then Q
122+ if (!(V))
123+ then N
128124 else false
129125 }
130126
131127
132-func Z (aa) = (aa.caller == this)
128+func W (X) = (X.caller == this)
133129
134130
135-func ab (aa,h) = (toString(aa.caller) == valueOrErrorMessage(v(h), (("Owner for `" + h) + "` is not found")))
131+func Y (X,h) = (toString(X.caller) == valueOrElse(u(h), ""))
136132
137133
138-func ac (b) = containsElement(C, b)
134+func Z (b) = containsElement(z, b)
139135
140136
141-func ad (h) = [Issue(if ((size(h) > 16))
142- then (take(h, 15) + "~")
143- else take(h, 16), h, 1, 0, false)]
137+func aa (h) = {
138+ let ab = split(h, ".")
139+ let ac = (size(ab) - 1)
140+ let ad = ab[ac]
141+ let ae = makeString(removeByIndex(ab, ac), ".")
142+ $Tuple2(ad, ae)
143+ }
144144
145145
146-func ae (h,l,af) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(p(h), af), IntegerEntry(o(h), (af + F))]
146+func af (h) = [Issue(if ((size(h) > 16))
147+ then (take(h, 15) + "~")
148+ else take(h, 16), (h + ".waves"), 1, 0, false)]
147149
148150
149-func ag (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
151+func ag (h,l,ah) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(p(h), ah), IntegerEntry(o(h), (ah + C))]
150152
151153
152-func ah (l,u) = [ScriptTransfer(e(u), 1, fromBase58String(l))]
154+func ai (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
153155
154156
155-func ai (aj) = unit
157+func aj (l,t) = [ScriptTransfer(e(t), 1, fromBase58String(l))]
156158
157159
158-func ak (aa) = if (Z(aa))
160+func ak (al) = unit
161+
162+
163+func am (X) = if (W(X))
159164 then unit
160165 else throw("Permission denied")
161166
162167
163-func al (aa) = if (if (Z(aa))
168+func an (X) = if (if (W(X))
164169 then true
165- else ac(toString(aa.caller)))
170+ else Z(toString(X.caller)))
166171 then unit
167172 else throw("Permission denied")
168173
169174
170-@Callable(aa)
171-func init (A,F) = valueOrElse(ai([ak(aa)]), [StringEntry(q, A), IntegerEntry(r, F)])
175+func ao (b) = if (isDefined(addressFromString(b)))
176+ then unit
177+ else throw("The address must be valid")
178+
179+
180+@Callable(X)
181+func init (C) = valueOrElse(ak([am(X), if ((C > 0))
182+ then unit
183+ else throw("TTL cannot be negative")]), [IntegerEntry(q, C)])
172184
173185
174186
175-@Callable(aa)
176-func addController (b) = valueOrElse(ai([ak(aa), if (!(ac(b)))
177- then unit
178- else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(s, makeString((C :+ b), ","))])
187+@Callable(X)
188+func supportsInterface (ap) = $Tuple2(nil, (ap == "whoIs"))
179189
180190
181191
182-@Callable(aa)
183-func removeController (b) = valueOrElse(ai([ak(aa), if (ac(b))
192+@Callable(X)
193+func addController (b) = valueOrElse(ak([am(X), ao(b), if (!(Z(b)))
194+ then unit
195+ else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(r, makeString((z :+ b), ","))])
196+
197+
198+
199+@Callable(X)
200+func removeController (b) = valueOrElse(ak([am(X), ao(b), if (Z(b))
184201 then unit
185202 else throw((("Controller `" + b) + "` is not registered"))]), {
186- let am = value(indexOf(C, b))
187-[StringEntry(s, makeString(removeByIndex(C, am), ","))]
203+ let aq = value(indexOf(z, b))
204+[StringEntry(r, makeString(removeByIndex(z, aq), ","))]
188205 })
189206
190207
191208
192-@Callable(aa)
193-func available (h) = $Tuple2(nil, L(h))
209+@Callable(X)
210+func available (h) = $Tuple2(nil, I(h))
194211
195212
196213
197-@Callable(aa)
198-func owner (h) = $Tuple2(nil, v(h))
199-
200-
201-
202-@Callable(aa)
203-func nameCreated (h) = $Tuple2(nil, x(h))
204-
205-
206-
207-@Callable(aa)
208-func nameExpires (h) = $Tuple2(nil, y(h))
209-
210-
211-
212-@Callable(aa)
213-func nameStatus (h) = $Tuple2(nil, if (!(G(h)))
214- then "NOT_REGISTERED"
215- else if (I(h))
216- then "EXPIRED"
217- else if ((assetBalance(value(addressFromString(value(v(h)))), fromBase58String(value(w(h)))) == 0))
218- then "SUSPENDED"
219- else "ACTIVE")
220-
221-
222-
223-@Callable(aa)
224-func register (h,u,af) = valueOrElse(ai([al(aa), if (L(h))
214+@Callable(X)
215+func register (h,t,ah) = valueOrElse(ak([an(X), if (I(h))
225216 then unit
226- else throw((("`" + h) + "` cannot be registered")), if ((lastBlock.timestamp >= af))
217+ else throw((("`" + h) + "` cannot be registered")), ao(t), if ((ah > 0))
227218 then unit
228- else throw("createdAt cannot be in the future")]), {
229- let an = ad(h)
230- let l = calculateAssetId(an[0])
231- let ao = toBase58String(l)
232- let ap = ae(h, ao, af)
233- let aq = ah(ao, u)
234- let ar = t(h, u)
235- (((an ++ ap) ++ aq) ++ ar)
219+ else throw("CreatedAt cannot be negative"), if ((lastBlock.timestamp >= ah))
220+ then unit
221+ else throw("CreatedAt cannot be in the future")]), {
222+ let ar = af(h)
223+ let l = calculateAssetId(ar[0])
224+ let as = toBase58String(l)
225+ let at = ag(h, as, ah)
226+ let au = aj(as, t)
227+ let av = s(h, t)
228+ (((ar ++ at) ++ au) ++ av)
236229 })
237230
238231
239232
240-@Callable(aa)
241-func reclaim (h) = valueOrElse(ai([if (K(h))
233+@Callable(X)
234+func reclaim (h) = valueOrElse(ak([if (H(h))
242235 then unit
243236 else throw((("`" + h) + "` is not active"))]), {
244- let as = aa.caller
245- let at = toString(as)
246- let ao = valueOrErrorMessage(w(h), (("No token is issued for `" + h) + "`"))
247- let l = fromBase58String(ao)
248- let au = (assetBalance(as, l) == 1)
249- let av = ab(aa, h)
250- let aw = {
251- let D = assetInfo(l)
252- if ($isInstanceOf(D, "Asset"))
237+ let aw = X.caller
238+ let ax = toString(aw)
239+ let as = valueOrErrorMessage(v(h), (("No token is issued for `" + h) + "`"))
240+ let l = fromBase58String(as)
241+ let ay = (assetBalance(aw, l) == 1)
242+ let az = Y(X, h)
243+ let aA = {
244+ let A = assetInfo(l)
245+ if ($isInstanceOf(A, "Asset"))
253246 then {
254- let ax = D
255- (ax.quantity == 1)
247+ let aB = A
248+ (aB.quantity == 1)
256249 }
257250 else false
258251 }
259- if (if (av)
260- then !(aw)
252+ if (if (az)
253+ then !(aA)
261254 else false)
262255 then {
263- let ay = ad(h)
264- let az = calculateAssetId(ay[0])
265- let aA = toBase58String(az)
266- let aB = ag(h, aA)
267- let aC = ah(aA, at)
268- ((ay ++ aB) ++ aC)
256+ let aC = af(h)
257+ let aD = calculateAssetId(aC[0])
258+ let aE = toBase58String(aD)
259+ let aF = ai(h, aE)
260+ let aG = aj(aE, ax)
261+ ((aC ++ aF) ++ aG)
269262 }
270- else if (if (av)
271- then au
263+ else if (if (az)
264+ then ay
272265 else false)
273266 then throw("You already own a name token")
274- else if (!(au))
267+ else if (!(ay))
275268 then throw("You don't have a name token")
276- else t(h, at)
269+ else s(h, ax)
270+ })
271+
272+
273+
274+@Callable(X)
275+func whoIs (h) = valueOrElse(ak([if ((size(h) > 0))
276+ then unit
277+ else throw("Name cannot be empty")]), {
278+ let ad = aa(h)._1
279+ let aH = u(ad)
280+ let aI = unit
281+ let aJ = w(ad)
282+ let aK = x(ad)
283+ $Tuple2(nil, $Tuple4(aH, aI, aJ, aK))
277284 })
278285
279286
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = valueOrErrorMessage(getString(b, c), ((("Can't read '" + c) + "' at address ") + toString(b)))
55
66
77 func d (b,c) = valueOrErrorMessage(getInteger(b, c), ((("Can't read '" + c) + "' at address ") + toString(b)))
88
99
1010 func e (f) = valueOrErrorMessage(addressFromString(f), (("Can't parse address from '" + f) + "'"))
1111
1212
1313 func g (h,i,j) = ((((h + "_") + i) + "_") + j)
1414
1515
1616 func k (l) = g("Token", l, "name")
1717
1818
1919 func m (h) = g("Name", h, "token")
2020
2121
2222 func n (h) = g("Name", h, "owner")
2323
2424
2525 func o (h) = g("Name", h, "expiresAt")
2626
2727
2828 func p (h) = g("Name", h, "createdAt")
2929
3030
31-let q = "rootAddress"
31+let q = "nameTTL"
3232
33-let r = "nameTTL"
33+let r = "controllers"
3434
35-let s = "controllers"
36-
37-func t (h,u) = [StringEntry(n(h), u)]
35+func s (h,t) = [StringEntry(n(h), t)]
3836
3937
40-func v (h) = getString(this, n(h))
38+func u (h) = getString(this, n(h))
4139
4240
43-func w (h) = getString(this, m(h))
41+func v (h) = getString(this, m(h))
4442
4543
46-func x (h) = getInteger(this, p(h))
44+func w (h) = getInteger(this, p(h))
4745
4846
49-func y (h) = getInteger(this, o(h))
47+func x (h) = getInteger(this, o(h))
5048
5149
52-func z () = getString(this, s)
50+func y () = getString(this, r)
5351
5452
55-let A = a(this, q)
56-
57-let B = e(A)
58-
59-let C = {
60- let D = z()
61- if ($isInstanceOf(D, "String"))
53+let z = {
54+ let A = y()
55+ if ($isInstanceOf(A, "String"))
6256 then {
63- let E = D
64- split(E, ",")
57+ let B = A
58+ split(B, ",")
6559 }
6660 else nil
6761 }
6862
69-let F = d(this, r)
63+let C = d(this, q)
7064
71-func G (h) = isDefined(getString(this, m(h)))
65+func D (h) = isDefined(getString(this, m(h)))
7266
7367
74-func H (h) = isDefined(x(h))
68+func E (h) = isDefined(w(h))
7569
7670
77-func I (h) = {
78- let D = y(h)
79- if ($isInstanceOf(D, "Int"))
71+func F (h) = {
72+ let A = x(h)
73+ if ($isInstanceOf(A, "Int"))
8074 then {
81- let J = D
82- (lastBlock.timestamp > J)
75+ let G = A
76+ (lastBlock.timestamp > G)
8377 }
8478 else false
8579 }
8680
8781
88-func K (h) = if (if (G(h))
89- then H(h)
82+func H (h) = if (if (D(h))
83+ then E(h)
9084 else false)
91- then !(I(h))
85+ then !(F(h))
9286 else false
9387
9488
95-func L (h) = {
96- let M = "abcdefghijklmnopqrstuvwxyz1234567890-"
97- func N (O,P) = if (O)
98- then contains(M, P)
89+func I (h) = {
90+ let J = "abcdefghijklmnopqrstuvwxyz1234567890-"
91+ func K (L,M) = if (L)
92+ then contains(J, M)
9993 else false
10094
101- let Q = if (if (if (if ((size(h) > 0))
95+ let N = if (if (if (if (if ((size(h) > 0))
10296 then (63 >= size(h))
97+ else false)
98+ then (indexOf(h, "--") != 2)
10399 else false)
104100 then (indexOf(h, "-") != 0)
105101 else false)
106102 then (lastIndexOf(h, "-") != (size(h) - 1))
107103 else false)
108104 then {
109- let R = split(h, "")
110- let S = size(R)
111- let T = true
112- func U (V,W) = if ((W >= S))
113- then V
114- else N(V, R[W])
105+ let O = split(h, "")
106+ let P = size(O)
107+ let Q = true
108+ func R (S,T) = if ((T >= P))
109+ then S
110+ else K(S, O[T])
115111
116- func X (V,W) = if ((W >= S))
117- then V
112+ func U (S,T) = if ((T >= P))
113+ then S
118114 else throw("List size exceeds 63")
119115
120- X(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(T, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63)
116+ U(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63)
121117 }
122118 else false
123- let Y = if (G(h))
124- then !(I(h))
119+ let V = if (D(h))
120+ then !(F(h))
125121 else false
126- if (!(Y))
127- then Q
122+ if (!(V))
123+ then N
128124 else false
129125 }
130126
131127
132-func Z (aa) = (aa.caller == this)
128+func W (X) = (X.caller == this)
133129
134130
135-func ab (aa,h) = (toString(aa.caller) == valueOrErrorMessage(v(h), (("Owner for `" + h) + "` is not found")))
131+func Y (X,h) = (toString(X.caller) == valueOrElse(u(h), ""))
136132
137133
138-func ac (b) = containsElement(C, b)
134+func Z (b) = containsElement(z, b)
139135
140136
141-func ad (h) = [Issue(if ((size(h) > 16))
142- then (take(h, 15) + "~")
143- else take(h, 16), h, 1, 0, false)]
137+func aa (h) = {
138+ let ab = split(h, ".")
139+ let ac = (size(ab) - 1)
140+ let ad = ab[ac]
141+ let ae = makeString(removeByIndex(ab, ac), ".")
142+ $Tuple2(ad, ae)
143+ }
144144
145145
146-func ae (h,l,af) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(p(h), af), IntegerEntry(o(h), (af + F))]
146+func af (h) = [Issue(if ((size(h) > 16))
147+ then (take(h, 15) + "~")
148+ else take(h, 16), (h + ".waves"), 1, 0, false)]
147149
148150
149-func ag (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
151+func ag (h,l,ah) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(p(h), ah), IntegerEntry(o(h), (ah + C))]
150152
151153
152-func ah (l,u) = [ScriptTransfer(e(u), 1, fromBase58String(l))]
154+func ai (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
153155
154156
155-func ai (aj) = unit
157+func aj (l,t) = [ScriptTransfer(e(t), 1, fromBase58String(l))]
156158
157159
158-func ak (aa) = if (Z(aa))
160+func ak (al) = unit
161+
162+
163+func am (X) = if (W(X))
159164 then unit
160165 else throw("Permission denied")
161166
162167
163-func al (aa) = if (if (Z(aa))
168+func an (X) = if (if (W(X))
164169 then true
165- else ac(toString(aa.caller)))
170+ else Z(toString(X.caller)))
166171 then unit
167172 else throw("Permission denied")
168173
169174
170-@Callable(aa)
171-func init (A,F) = valueOrElse(ai([ak(aa)]), [StringEntry(q, A), IntegerEntry(r, F)])
175+func ao (b) = if (isDefined(addressFromString(b)))
176+ then unit
177+ else throw("The address must be valid")
178+
179+
180+@Callable(X)
181+func init (C) = valueOrElse(ak([am(X), if ((C > 0))
182+ then unit
183+ else throw("TTL cannot be negative")]), [IntegerEntry(q, C)])
172184
173185
174186
175-@Callable(aa)
176-func addController (b) = valueOrElse(ai([ak(aa), if (!(ac(b)))
177- then unit
178- else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(s, makeString((C :+ b), ","))])
187+@Callable(X)
188+func supportsInterface (ap) = $Tuple2(nil, (ap == "whoIs"))
179189
180190
181191
182-@Callable(aa)
183-func removeController (b) = valueOrElse(ai([ak(aa), if (ac(b))
192+@Callable(X)
193+func addController (b) = valueOrElse(ak([am(X), ao(b), if (!(Z(b)))
194+ then unit
195+ else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(r, makeString((z :+ b), ","))])
196+
197+
198+
199+@Callable(X)
200+func removeController (b) = valueOrElse(ak([am(X), ao(b), if (Z(b))
184201 then unit
185202 else throw((("Controller `" + b) + "` is not registered"))]), {
186- let am = value(indexOf(C, b))
187-[StringEntry(s, makeString(removeByIndex(C, am), ","))]
203+ let aq = value(indexOf(z, b))
204+[StringEntry(r, makeString(removeByIndex(z, aq), ","))]
188205 })
189206
190207
191208
192-@Callable(aa)
193-func available (h) = $Tuple2(nil, L(h))
209+@Callable(X)
210+func available (h) = $Tuple2(nil, I(h))
194211
195212
196213
197-@Callable(aa)
198-func owner (h) = $Tuple2(nil, v(h))
199-
200-
201-
202-@Callable(aa)
203-func nameCreated (h) = $Tuple2(nil, x(h))
204-
205-
206-
207-@Callable(aa)
208-func nameExpires (h) = $Tuple2(nil, y(h))
209-
210-
211-
212-@Callable(aa)
213-func nameStatus (h) = $Tuple2(nil, if (!(G(h)))
214- then "NOT_REGISTERED"
215- else if (I(h))
216- then "EXPIRED"
217- else if ((assetBalance(value(addressFromString(value(v(h)))), fromBase58String(value(w(h)))) == 0))
218- then "SUSPENDED"
219- else "ACTIVE")
220-
221-
222-
223-@Callable(aa)
224-func register (h,u,af) = valueOrElse(ai([al(aa), if (L(h))
214+@Callable(X)
215+func register (h,t,ah) = valueOrElse(ak([an(X), if (I(h))
225216 then unit
226- else throw((("`" + h) + "` cannot be registered")), if ((lastBlock.timestamp >= af))
217+ else throw((("`" + h) + "` cannot be registered")), ao(t), if ((ah > 0))
227218 then unit
228- else throw("createdAt cannot be in the future")]), {
229- let an = ad(h)
230- let l = calculateAssetId(an[0])
231- let ao = toBase58String(l)
232- let ap = ae(h, ao, af)
233- let aq = ah(ao, u)
234- let ar = t(h, u)
235- (((an ++ ap) ++ aq) ++ ar)
219+ else throw("CreatedAt cannot be negative"), if ((lastBlock.timestamp >= ah))
220+ then unit
221+ else throw("CreatedAt cannot be in the future")]), {
222+ let ar = af(h)
223+ let l = calculateAssetId(ar[0])
224+ let as = toBase58String(l)
225+ let at = ag(h, as, ah)
226+ let au = aj(as, t)
227+ let av = s(h, t)
228+ (((ar ++ at) ++ au) ++ av)
236229 })
237230
238231
239232
240-@Callable(aa)
241-func reclaim (h) = valueOrElse(ai([if (K(h))
233+@Callable(X)
234+func reclaim (h) = valueOrElse(ak([if (H(h))
242235 then unit
243236 else throw((("`" + h) + "` is not active"))]), {
244- let as = aa.caller
245- let at = toString(as)
246- let ao = valueOrErrorMessage(w(h), (("No token is issued for `" + h) + "`"))
247- let l = fromBase58String(ao)
248- let au = (assetBalance(as, l) == 1)
249- let av = ab(aa, h)
250- let aw = {
251- let D = assetInfo(l)
252- if ($isInstanceOf(D, "Asset"))
237+ let aw = X.caller
238+ let ax = toString(aw)
239+ let as = valueOrErrorMessage(v(h), (("No token is issued for `" + h) + "`"))
240+ let l = fromBase58String(as)
241+ let ay = (assetBalance(aw, l) == 1)
242+ let az = Y(X, h)
243+ let aA = {
244+ let A = assetInfo(l)
245+ if ($isInstanceOf(A, "Asset"))
253246 then {
254- let ax = D
255- (ax.quantity == 1)
247+ let aB = A
248+ (aB.quantity == 1)
256249 }
257250 else false
258251 }
259- if (if (av)
260- then !(aw)
252+ if (if (az)
253+ then !(aA)
261254 else false)
262255 then {
263- let ay = ad(h)
264- let az = calculateAssetId(ay[0])
265- let aA = toBase58String(az)
266- let aB = ag(h, aA)
267- let aC = ah(aA, at)
268- ((ay ++ aB) ++ aC)
256+ let aC = af(h)
257+ let aD = calculateAssetId(aC[0])
258+ let aE = toBase58String(aD)
259+ let aF = ai(h, aE)
260+ let aG = aj(aE, ax)
261+ ((aC ++ aF) ++ aG)
269262 }
270- else if (if (av)
271- then au
263+ else if (if (az)
264+ then ay
272265 else false)
273266 then throw("You already own a name token")
274- else if (!(au))
267+ else if (!(ay))
275268 then throw("You don't have a name token")
276- else t(h, at)
269+ else s(h, ax)
270+ })
271+
272+
273+
274+@Callable(X)
275+func whoIs (h) = valueOrElse(ak([if ((size(h) > 0))
276+ then unit
277+ else throw("Name cannot be empty")]), {
278+ let ad = aa(h)._1
279+ let aH = u(ad)
280+ let aI = unit
281+ let aJ = w(ad)
282+ let aK = x(ad)
283+ $Tuple2(nil, $Tuple4(aH, aI, aJ, aK))
277284 })
278285
279286

github/deemru/w8io/c3f4982 
103.67 ms