tx · 9VXzJkXmyaeB2ZyAJowtUcYhtDzsTABjFBMZGtJsaJ4r

3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz:  -0.01200000 Waves

2022.10.17 10:47 [2276086] smart account 3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz > SELF 0.00000000 Waves

{ "type": 13, "id": "9VXzJkXmyaeB2ZyAJowtUcYhtDzsTABjFBMZGtJsaJ4r", "fee": 1200000, "feeAssetId": null, "timestamp": 1665992874107, "version": 2, "chainId": 84, "sender": "3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz", "senderPublicKey": "2mHW72YTfnxJ1M8WsdUQjgpp3a2SUbt9mbAiePGiuJok", "proofs": [ "3kSKrhHYViLNVkLGPgW2UJgEVpSCQK4NrJSQksDAxjuKYbVZLdcguPNTjSNm3SAZYi1sMBkQxuGjRdLRhwrDY1Fk" ], "script": "base64:AAIFAAAAAAAAAEEIAhIDCgEBEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggIEgMKAQgSAwoBCBIFCgMICAESAwoBCAAAACgBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABAAAADG1heWJlQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAADG1heWJlQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAGkNhbid0IHBhcnNlIGFkZHJlc3MgZnJvbSAnBQAAAAxtYXliZUFkZHJlc3MCAAAAAScBAAAACmtleV9lbnRpdHkAAAADAAAABG5hbWUAAAACcGsAAAAIcHJvcGVydHkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEbmFtZQIAAAABXwUAAAACcGsCAAAAAV8FAAAACHByb3BlcnR5AQAAAA5rZXlfVG9rZW5fbmFtZQAAAAEAAAAHdG9rZW5JZAkBAAAACmtleV9lbnRpdHkAAAADAgAAAAVUb2tlbgUAAAAHdG9rZW5JZAIAAAAEbmFtZQEAAAAOa2V5X05hbWVfdG9rZW4AAAABAAAABG5hbWUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbmFtZQIAAAAFdG9rZW4BAAAADmtleV9OYW1lX293bmVyAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABW93bmVyAQAAABFrZXlfTmFtZV9yZXNvbHZlcgAAAAEAAAAEbmFtZQkBAAAACmtleV9lbnRpdHkAAAADAgAAAAROYW1lBQAAAARuYW1lAgAAAAhyZXNvbHZlcgEAAAASa2V5X05hbWVfZXhwaXJlc0F0AAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAACWV4cGlyZXNBdAEAAAASa2V5X05hbWVfY3JlYXRlZEF0AAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAACWNyZWF0ZWRBdAAAAAALa2V5X25hbWVUVEwCAAAAB25hbWVUVEwAAAAAD2tleV9jb250cm9sbGVycwIAAAALY29udHJvbGxlcnMBAAAACV9zZXRPd25lcgAAAAIAAAAEbmFtZQAAAAVvd25lcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5X05hbWVfb3duZXIAAAABBQAAAARuYW1lBQAAAAVvd25lcgUAAAADbmlsAQAAAAlfZ2V0T3duZXIAAAABAAAABG5hbWUJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX293bmVyAAAAAQUAAAAEbmFtZQEAAAAMX3NldFJlc29sdmVyAAAAAgAAAARuYW1lAAAACHJlc29sdmVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlfTmFtZV9yZXNvbHZlcgAAAAEFAAAABG5hbWUFAAAACHJlc29sdmVyBQAAAANuaWwBAAAADF9nZXRSZXNvbHZlcgAAAAEAAAAEbmFtZQkABB0AAAACBQAAAAR0aGlzCQEAAAARa2V5X05hbWVfcmVzb2x2ZXIAAAABBQAAAARuYW1lAQAAAAlfZ2V0VG9rZW4AAAABAAAABG5hbWUJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQUAAAAEbmFtZQEAAAANX2dldENyZWF0ZWRB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BSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoAAAAAAAAAAAsAAAAAAAAA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AAABAgAAACFDcmVhdGVkQXQgY2Fubm90IGJlIGluIHRoZSBmdXR1cmUFAAAAA25pbAQAAAAOaXNzdWVOYW1lVG9rZW4JAQAAAA9faXNzdWVOYW1lVG9rZW4AAAABBQAAAARuYW1lBAAAAAd0b2tlbklkCQAEOAAAAAEJAAGRAAAAAgUAAAAOaXNzdWVOYW1lVG9rZW4AAAAAAAAAAAAEAAAACHRva2VuU3RyCQACWAAAAAEFAAAAB3Rva2VuSWQEAAAAFXJlZ2lzdGVyTmFtZVdpdGhUb2tlbgkBAAAAFl9yZWdpc3Rlck5hbWVXaXRoVG9rZW4AAAADBQAAAARuYW1lBQAAAAh0b2tlblN0cgUAAAAJY3JlYXRlZEF0BAAAABR0cmFuc2ZlclRva2VuVG9Pd25lcgkBAAAAFV90cmFuc2ZlclRva2VuVG9Pd25lcgAAAAIFAAAACHRva2VuU3RyBQAAAAVvd25lcgQAAAAMc2V0T3duZXJzaGlwCQEAAAAJX3NldE93bmVyAAAAAgUAAAAEbmFtZQUAAAAFb3duZXIJAAROAAAAAgkABE4AAAACCQAETgAAAAIFAAAADmlzc3VlTmFtZVRva2VuBQAAABVyZWdpc3Rlck5hbWVXaXRoVG9rZW4FAAAAFHRyYW5zZmVyVG9rZW5Ub093bmVyBQAAAAxzZXRPd25lcnNoaXAAAAADaW52AQAAAAdyZWNsYWltAAAAAQAAAARuYW1lCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAJbW9kaWZpZXJzAAAAAQkABEwAAAACAwkBAAAADGlzQWN0aXZlTmFtZQAAAAEFAAAABG5hbWUFAAAABHVuaXQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAAWAFAAAABG5hbWUCAAAAD2AgaXMgbm90IGFjdGl2ZQUAAAADbmlsBAAAAAhuZXdPd25lcggFAAAAA2ludgAAAAZjYWxsZXIEAAAAD25ld093bmVyQWRkcmVzcwkABCUAAAABBQAAAAhuZXdPd25lcgQAAAAIdG9rZW5TdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAACV9nZXRUb2tlbgAAAAEFAAAABG5hbWUJAAEsAAAAAgkAASwAAAACAgAAABhObyB0b2tlbiBpcyBpc3N1ZWQgZm9yIGAFAAAABG5hbWUCAAAAAWAEAAAAB3Rva2VuSWQJAAJZAAAAAQUAAAAIdG9rZW5TdHIEAAAACGhhc1Rva2VuCQAAAAAAAAIJAAPwAAAAAgUAAAAIbmV3T3duZXIFAAAAB3Rva2VuSWQAAAAAAAAAAAEEAAAADGlzVG9rZW5Pd25lcgkBAAAAB2lzT3duZXIAAAACBQAAAANpbnYFAAAABG5hbWUEAAAADWlzVG9rZW5FeGlzdHMEAAAAByRtYXRjaDAJAAPsAAAAAQUAAAAHdG9rZW5JZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFQXNzZXQEAAAABXRva2VuBQAAAAckbWF0Y2gwCQAAAAAAAAIIBQAAAAV0b2tlbgAAAAhxdWFudGl0eQAAAAAAAAAAAQcDAwUAAAAMaXNUb2tlbk93bmVyCQEAAAABIQAAAAEFAAAADWlzVG9rZW5FeGlzdHMHBAAAAA1pc3N1ZU5ld1Rva2VuCQEAAAAPX2lzc3VlTmFtZVRva2VuAAAAAQUAAAAEbmFtZQQAAAAKbmV3VG9rZW5JZAkABDgAAAABCQABkQAAAAIFAAAADWlzc3VlTmV3VG9rZW4AAAAAAAAAAAAEAAAAC25ld1Rva2VuU3RyCQACWAAAAAEFAAAACm5ld1Rva2VuSWQEAAAAF3Jlc3RvcmVOYW1lV2l0aE5ld1Rva2VuCQEAAAAVX3Jlc3RvcmVOYW1lV2l0aFRva2VuAAAAAgUAAAAEbmFtZQUAAAALbmV3VG9rZW5TdHIEAAAAF3RyYW5zZmVyTmV3VG9rZW5Ub093bmVyCQEAAAAVX3RyYW5zZmVyVG9rZW5Ub093bmVyAAAAAgUAAAALbmV3VG9rZW5TdHIFAAAAD25ld093bmVyQWRkcmVzcwkABE4AAAACCQAETgAAAAIFAAAADWlzc3VlTmV3VG9rZW4FAAAAF3Jlc3RvcmVOYW1lV2l0aE5ld1Rva2VuBQAAABd0cmFuc2Zlck5ld1Rva2VuVG9Pd25lcgMDBQAAAAxpc1Rva2VuT3duZXIFAAAACGhhc1Rva2VuBwkAAAIAAAABAgAAABxZb3UgYWxyZWFkeSBvd24gYSBuYW1lIHRva2VuAwkBAAAAASEAAAABBQAAAAhoYXNUb2tlbgkAAAIAAAABAgAAABtZb3UgZG9uJ3QgaGF2ZSBhIG5hbWUgdG9rZW4JAQAAAAlfc2V0T3duZXIAAAACBQAAAARuYW1lBQAAAA9uZXdPd25lckFkZHJlc3MAAAAA11C2UQ==", "height": 2276086, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HQYBkyEqFZN1MiNtUSCBVABXcKbWb72DPAzms2rhDE8z Next: GYDp1N8NDXvx7W2GNgEno1ajJLbGYesREY6AqhXNnhhB Diff:
OldNewDifferences
2222 func n (h) = g("Name", h, "owner")
2323
2424
25-func o (h) = g("Name", h, "expiresAt")
25+func o (h) = g("Name", h, "resolver")
2626
2727
28-func p (h) = g("Name", h, "createdAt")
28+func p (h) = g("Name", h, "expiresAt")
2929
3030
31-let q = "nameTTL"
32-
33-let r = "controllers"
34-
35-func s (h,t) = [StringEntry(n(h), t)]
31+func q (h) = g("Name", h, "createdAt")
3632
3733
38-func u (h) = getString(this, n(h))
34+let r = "nameTTL"
35+
36+let s = "controllers"
37+
38+func t (h,u) = [StringEntry(n(h), u)]
3939
4040
41-func v (h) = getString(this, m(h))
41+func v (h) = getString(this, n(h))
4242
4343
44-func w (h) = getInteger(this, p(h))
44+func w (h,x) = [StringEntry(o(h), x)]
4545
4646
47-func x (h) = getInteger(this, o(h))
47+func y (h) = getString(this, o(h))
4848
4949
50-func y () = getString(this, r)
50+func z (h) = getString(this, m(h))
5151
5252
53-let z = {
54- let A = y()
55- if ($isInstanceOf(A, "String"))
53+func A (h) = getInteger(this, q(h))
54+
55+
56+func B (h) = getInteger(this, p(h))
57+
58+
59+func C () = getString(this, s)
60+
61+
62+let D = {
63+ let E = C()
64+ if ($isInstanceOf(E, "String"))
5665 then {
57- let B = A
58- split(B, ",")
66+ let F = E
67+ split(F, ",")
5968 }
6069 else nil
6170 }
6271
63-let C = d(this, q)
72+let G = d(this, r)
6473
65-func D (h) = isDefined(getString(this, m(h)))
74+func H (h) = isDefined(getString(this, m(h)))
6675
6776
68-func E (h) = isDefined(w(h))
77+func I (h) = isDefined(A(h))
6978
7079
71-func F (h) = {
72- let A = x(h)
73- if ($isInstanceOf(A, "Int"))
80+func J (h) = {
81+ let E = B(h)
82+ if ($isInstanceOf(E, "Int"))
7483 then {
75- let G = A
76- (lastBlock.timestamp > G)
84+ let K = E
85+ (lastBlock.timestamp > K)
7786 }
7887 else false
7988 }
8089
8190
82-func H (h) = if (if (D(h))
83- then E(h)
91+func L (h) = if (if (H(h))
92+ then I(h)
8493 else false)
85- then !(F(h))
94+ then !(J(h))
8695 else false
8796
8897
89-func I (h) = {
90- let J = "abcdefghijklmnopqrstuvwxyz1234567890-"
91- func K (L,M) = if (L)
92- then contains(J, M)
98+func M (h) = {
99+ let N = "abcdefghijklmnopqrstuvwxyz1234567890-"
100+ func O (P,Q) = if (P)
101+ then contains(N, Q)
93102 else false
94103
95- let N = if (if (if (if (if ((size(h) > 0))
104+ let R = if (if (if (if (if ((size(h) > 0))
96105 then (63 >= size(h))
97106 else false)
98107 then (indexOf(h, "--") != 2)
102111 then (lastIndexOf(h, "-") != (size(h) - 1))
103112 else false)
104113 then {
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])
114+ let S = split(h, "")
115+ let T = size(S)
116+ let U = true
117+ func V (W,X) = if ((X >= T))
118+ then W
119+ else O(W, S[X])
111120
112- func U (S,T) = if ((T >= P))
113- then S
121+ func Y (W,X) = if ((X >= T))
122+ then W
114123 else throw("List size exceeds 63")
115124
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)
125+ Y(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(U, 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)
117126 }
118127 else false
119- let V = if (D(h))
120- then !(F(h))
128+ let Z = if (H(h))
129+ then !(J(h))
121130 else false
122- if (!(V))
123- then N
131+ if (!(Z))
132+ then R
124133 else false
125134 }
126135
127136
128-func W (X) = (X.caller == this)
137+func aa (f) = isDefined(addressFromString(f))
129138
130139
131-func Y (X,h) = (toString(X.caller) == valueOrErrorMessage(u(h), (("Owner for `" + h) + "` is not found")))
140+func ab (ac) = (ac.caller == this)
132141
133142
134-func Z (b) = containsElement(z, b)
143+func ad (ac,h) = (toString(ac.caller) == valueOrElse(v(h), ""))
135144
136145
137-func aa (h) = [Issue(if ((size(h) > 16))
146+func ae (b) = containsElement(D, b)
147+
148+
149+func af (h) = {
150+ let ag = split(h, ".")
151+ let ah = (size(ag) - 1)
152+ let ai = ag[ah]
153+ let aj = makeString(removeByIndex(ag, ah), ".")
154+ $Tuple2(ai, aj)
155+ }
156+
157+
158+func ak (h) = [Issue(if ((size(h) > 16))
138159 then (take(h, 15) + "~")
139160 else take(h, 16), (h + ".waves"), 1, 0, false)]
140161
141162
142-func ab (h,l,ac) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(p(h), ac), IntegerEntry(o(h), (ac + C))]
163+func al (h,l,am) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(q(h), am), IntegerEntry(p(h), (am + G))]
143164
144165
145-func ad (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
166+func an (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
146167
147168
148-func ae (l,t) = [ScriptTransfer(e(t), 1, fromBase58String(l))]
169+func ao (l,u) = [ScriptTransfer(e(u), 1, fromBase58String(l))]
149170
150171
151-func af (ag) = unit
172+func ap (aq) = unit
152173
153174
154-func ah (X) = if (W(X))
175+func ar (ac) = if (ab(ac))
155176 then unit
156177 else throw("Permission denied")
157178
158179
159-func ai (X) = if (if (W(X))
180+func as (ac) = if (if (ab(ac))
160181 then true
161- else Z(toString(X.caller)))
182+ else ae(toString(ac.caller)))
162183 then unit
163184 else throw("Permission denied")
164185
165186
166-@Callable(X)
167-func init (C) = valueOrElse(af([ah(X)]), [IntegerEntry(q, C)])
187+func at (ac,h) = if (if (ab(ac))
188+ then true
189+ else ad(ac, h))
190+ then unit
191+ else throw("Permission denied")
192+
193+
194+@Callable(ac)
195+func init (G) = valueOrElse(ap([ar(ac), if ((G > 0))
196+ then unit
197+ else throw("TTL cannot be negative")]), [IntegerEntry(r, G)])
168198
169199
170200
171-@Callable(X)
172-func addController (b) = valueOrElse(af([ah(X), if (!(Z(b)))
173- then unit
174- else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(r, makeString((z :+ b), ","))])
201+@Callable(ac)
202+func supportsInterface (au) = $Tuple2(nil, containsElement(["owner", "resolver", "nameCreated", "nameExpires"], au))
175203
176204
177205
178-@Callable(X)
179-func removeController (b) = valueOrElse(af([ah(X), if (Z(b))
206+@Callable(ac)
207+func addController (b) = valueOrElse(ap([ar(ac), if (aa(b))
208+ then unit
209+ else throw("Controller must be a valid address"), if (!(ae(b)))
210+ then unit
211+ else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(s, makeString((D :+ b), ","))])
212+
213+
214+
215+@Callable(ac)
216+func removeController (b) = valueOrElse(ap([ar(ac), if (ae(b))
180217 then unit
181218 else throw((("Controller `" + b) + "` is not registered"))]), {
182- let aj = value(indexOf(z, b))
183-[StringEntry(r, makeString(removeByIndex(z, aj), ","))]
219+ let av = value(indexOf(D, b))
220+[StringEntry(s, makeString(removeByIndex(D, av), ","))]
184221 })
185222
186223
187224
188-@Callable(X)
189-func available (h) = $Tuple2(nil, I(h))
225+@Callable(ac)
226+func available (h) = $Tuple2(nil, M(h))
190227
191228
192229
193-@Callable(X)
194-func owner (h) = $Tuple2(nil, u(h))
230+@Callable(ac)
231+func owner (h) = $Tuple2(nil, v(af(h)._1))
195232
196233
197234
198-@Callable(X)
199-func nameCreated (h) = $Tuple2(nil, w(h))
235+@Callable(ac)
236+func resolver (h) = $Tuple2(nil, y(af(h)._1))
200237
201238
202239
203-@Callable(X)
204-func nameExpires (h) = $Tuple2(nil, x(h))
240+@Callable(ac)
241+func setResolver (h,x) = valueOrElse(ap([if (L(h))
242+ then unit
243+ else throw("Name expired or not registered"), at(ac, h), if (aa(x))
244+ then unit
245+ else throw("Resolver must be a valid contract address")]), $Tuple2(nil, w(h, x)))
205246
206247
207248
208-@Callable(X)
209-func nameStatus (h) = $Tuple2(nil, if (!(D(h)))
210- then "NOT_REGISTERED"
211- else if (F(h))
212- then "EXPIRED"
213- else if ((assetBalance(value(addressFromString(value(u(h)))), fromBase58String(value(v(h)))) == 0))
214- then "SUSPENDED"
215- else "ACTIVE")
249+@Callable(ac)
250+func nameCreated (h) = $Tuple2(nil, A(af(h)._1))
216251
217252
218253
219-@Callable(X)
220-func register (h,t,ac) = valueOrElse(af([ai(X), if (I(h))
254+@Callable(ac)
255+func nameExpires (h) = $Tuple2(nil, B(af(h)._1))
256+
257+
258+
259+@Callable(ac)
260+func register (h,u,am) = valueOrElse(ap([as(ac), if (M(h))
221261 then unit
222- else throw((("`" + h) + "` cannot be registered")), if ((lastBlock.timestamp >= ac))
262+ else throw((("`" + h) + "` cannot be registered")), if (aa(u))
223263 then unit
224- else throw("createdAt cannot be in the future")]), {
225- let ak = aa(h)
226- let l = calculateAssetId(ak[0])
227- let al = toBase58String(l)
228- let am = ab(h, al, ac)
229- let an = ae(al, t)
230- let ao = s(h, t)
231- (((ak ++ am) ++ an) ++ ao)
264+ else throw("Owner must be a valid address"), if ((am > 0))
265+ then unit
266+ else throw("CreatedAt cannot be negative"), if ((lastBlock.timestamp >= am))
267+ then unit
268+ else throw("CreatedAt cannot be in the future")]), {
269+ let aw = ak(h)
270+ let l = calculateAssetId(aw[0])
271+ let ax = toBase58String(l)
272+ let ay = al(h, ax, am)
273+ let az = ao(ax, u)
274+ let aA = t(h, u)
275+ (((aw ++ ay) ++ az) ++ aA)
232276 })
233277
234278
235279
236-@Callable(X)
237-func reclaim (h) = valueOrElse(af([if (H(h))
280+@Callable(ac)
281+func reclaim (h) = valueOrElse(ap([if (L(h))
238282 then unit
239283 else throw((("`" + h) + "` is not active"))]), {
240- let ap = X.caller
241- let aq = toString(ap)
242- let al = valueOrErrorMessage(v(h), (("No token is issued for `" + h) + "`"))
243- let l = fromBase58String(al)
244- let ar = (assetBalance(ap, l) == 1)
245- let as = Y(X, h)
246- let at = {
247- let A = assetInfo(l)
248- if ($isInstanceOf(A, "Asset"))
284+ let aB = ac.caller
285+ let aC = toString(aB)
286+ let ax = valueOrErrorMessage(z(h), (("No token is issued for `" + h) + "`"))
287+ let l = fromBase58String(ax)
288+ let aD = (assetBalance(aB, l) == 1)
289+ let aE = ad(ac, h)
290+ let aF = {
291+ let E = assetInfo(l)
292+ if ($isInstanceOf(E, "Asset"))
249293 then {
250- let au = A
251- (au.quantity == 1)
294+ let aG = E
295+ (aG.quantity == 1)
252296 }
253297 else false
254298 }
255- if (if (as)
256- then !(at)
299+ if (if (aE)
300+ then !(aF)
257301 else false)
258302 then {
259- let av = aa(h)
260- let aw = calculateAssetId(av[0])
261- let ax = toBase58String(aw)
262- let ay = ad(h, ax)
263- let az = ae(ax, aq)
264- ((av ++ ay) ++ az)
303+ let aH = ak(h)
304+ let aI = calculateAssetId(aH[0])
305+ let aJ = toBase58String(aI)
306+ let aK = an(h, aJ)
307+ let aL = ao(aJ, aC)
308+ ((aH ++ aK) ++ aL)
265309 }
266- else if (if (as)
267- then ar
310+ else if (if (aE)
311+ then aD
268312 else false)
269313 then throw("You already own a name token")
270- else if (!(ar))
314+ else if (!(aD))
271315 then throw("You don't have a name token")
272- else s(h, aq)
316+ else t(h, aC)
273317 })
274318
275319
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
25-func o (h) = g("Name", h, "expiresAt")
25+func o (h) = g("Name", h, "resolver")
2626
2727
28-func p (h) = g("Name", h, "createdAt")
28+func p (h) = g("Name", h, "expiresAt")
2929
3030
31-let q = "nameTTL"
32-
33-let r = "controllers"
34-
35-func s (h,t) = [StringEntry(n(h), t)]
31+func q (h) = g("Name", h, "createdAt")
3632
3733
38-func u (h) = getString(this, n(h))
34+let r = "nameTTL"
35+
36+let s = "controllers"
37+
38+func t (h,u) = [StringEntry(n(h), u)]
3939
4040
41-func v (h) = getString(this, m(h))
41+func v (h) = getString(this, n(h))
4242
4343
44-func w (h) = getInteger(this, p(h))
44+func w (h,x) = [StringEntry(o(h), x)]
4545
4646
47-func x (h) = getInteger(this, o(h))
47+func y (h) = getString(this, o(h))
4848
4949
50-func y () = getString(this, r)
50+func z (h) = getString(this, m(h))
5151
5252
53-let z = {
54- let A = y()
55- if ($isInstanceOf(A, "String"))
53+func A (h) = getInteger(this, q(h))
54+
55+
56+func B (h) = getInteger(this, p(h))
57+
58+
59+func C () = getString(this, s)
60+
61+
62+let D = {
63+ let E = C()
64+ if ($isInstanceOf(E, "String"))
5665 then {
57- let B = A
58- split(B, ",")
66+ let F = E
67+ split(F, ",")
5968 }
6069 else nil
6170 }
6271
63-let C = d(this, q)
72+let G = d(this, r)
6473
65-func D (h) = isDefined(getString(this, m(h)))
74+func H (h) = isDefined(getString(this, m(h)))
6675
6776
68-func E (h) = isDefined(w(h))
77+func I (h) = isDefined(A(h))
6978
7079
71-func F (h) = {
72- let A = x(h)
73- if ($isInstanceOf(A, "Int"))
80+func J (h) = {
81+ let E = B(h)
82+ if ($isInstanceOf(E, "Int"))
7483 then {
75- let G = A
76- (lastBlock.timestamp > G)
84+ let K = E
85+ (lastBlock.timestamp > K)
7786 }
7887 else false
7988 }
8089
8190
82-func H (h) = if (if (D(h))
83- then E(h)
91+func L (h) = if (if (H(h))
92+ then I(h)
8493 else false)
85- then !(F(h))
94+ then !(J(h))
8695 else false
8796
8897
89-func I (h) = {
90- let J = "abcdefghijklmnopqrstuvwxyz1234567890-"
91- func K (L,M) = if (L)
92- then contains(J, M)
98+func M (h) = {
99+ let N = "abcdefghijklmnopqrstuvwxyz1234567890-"
100+ func O (P,Q) = if (P)
101+ then contains(N, Q)
93102 else false
94103
95- let N = if (if (if (if (if ((size(h) > 0))
104+ let R = if (if (if (if (if ((size(h) > 0))
96105 then (63 >= size(h))
97106 else false)
98107 then (indexOf(h, "--") != 2)
99108 else false)
100109 then (indexOf(h, "-") != 0)
101110 else false)
102111 then (lastIndexOf(h, "-") != (size(h) - 1))
103112 else false)
104113 then {
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])
114+ let S = split(h, "")
115+ let T = size(S)
116+ let U = true
117+ func V (W,X) = if ((X >= T))
118+ then W
119+ else O(W, S[X])
111120
112- func U (S,T) = if ((T >= P))
113- then S
121+ func Y (W,X) = if ((X >= T))
122+ then W
114123 else throw("List size exceeds 63")
115124
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)
125+ Y(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(V(U, 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)
117126 }
118127 else false
119- let V = if (D(h))
120- then !(F(h))
128+ let Z = if (H(h))
129+ then !(J(h))
121130 else false
122- if (!(V))
123- then N
131+ if (!(Z))
132+ then R
124133 else false
125134 }
126135
127136
128-func W (X) = (X.caller == this)
137+func aa (f) = isDefined(addressFromString(f))
129138
130139
131-func Y (X,h) = (toString(X.caller) == valueOrErrorMessage(u(h), (("Owner for `" + h) + "` is not found")))
140+func ab (ac) = (ac.caller == this)
132141
133142
134-func Z (b) = containsElement(z, b)
143+func ad (ac,h) = (toString(ac.caller) == valueOrElse(v(h), ""))
135144
136145
137-func aa (h) = [Issue(if ((size(h) > 16))
146+func ae (b) = containsElement(D, b)
147+
148+
149+func af (h) = {
150+ let ag = split(h, ".")
151+ let ah = (size(ag) - 1)
152+ let ai = ag[ah]
153+ let aj = makeString(removeByIndex(ag, ah), ".")
154+ $Tuple2(ai, aj)
155+ }
156+
157+
158+func ak (h) = [Issue(if ((size(h) > 16))
138159 then (take(h, 15) + "~")
139160 else take(h, 16), (h + ".waves"), 1, 0, false)]
140161
141162
142-func ab (h,l,ac) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(p(h), ac), IntegerEntry(o(h), (ac + C))]
163+func al (h,l,am) = [StringEntry(m(h), l), StringEntry(k(l), h), IntegerEntry(q(h), am), IntegerEntry(p(h), (am + G))]
143164
144165
145-func ad (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
166+func an (h,l) = [StringEntry(m(h), l), StringEntry(k(l), h)]
146167
147168
148-func ae (l,t) = [ScriptTransfer(e(t), 1, fromBase58String(l))]
169+func ao (l,u) = [ScriptTransfer(e(u), 1, fromBase58String(l))]
149170
150171
151-func af (ag) = unit
172+func ap (aq) = unit
152173
153174
154-func ah (X) = if (W(X))
175+func ar (ac) = if (ab(ac))
155176 then unit
156177 else throw("Permission denied")
157178
158179
159-func ai (X) = if (if (W(X))
180+func as (ac) = if (if (ab(ac))
160181 then true
161- else Z(toString(X.caller)))
182+ else ae(toString(ac.caller)))
162183 then unit
163184 else throw("Permission denied")
164185
165186
166-@Callable(X)
167-func init (C) = valueOrElse(af([ah(X)]), [IntegerEntry(q, C)])
187+func at (ac,h) = if (if (ab(ac))
188+ then true
189+ else ad(ac, h))
190+ then unit
191+ else throw("Permission denied")
192+
193+
194+@Callable(ac)
195+func init (G) = valueOrElse(ap([ar(ac), if ((G > 0))
196+ then unit
197+ else throw("TTL cannot be negative")]), [IntegerEntry(r, G)])
168198
169199
170200
171-@Callable(X)
172-func addController (b) = valueOrElse(af([ah(X), if (!(Z(b)))
173- then unit
174- else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(r, makeString((z :+ b), ","))])
201+@Callable(ac)
202+func supportsInterface (au) = $Tuple2(nil, containsElement(["owner", "resolver", "nameCreated", "nameExpires"], au))
175203
176204
177205
178-@Callable(X)
179-func removeController (b) = valueOrElse(af([ah(X), if (Z(b))
206+@Callable(ac)
207+func addController (b) = valueOrElse(ap([ar(ac), if (aa(b))
208+ then unit
209+ else throw("Controller must be a valid address"), if (!(ae(b)))
210+ then unit
211+ else throw((("Controller `" + b) + "` is already registered"))]), [StringEntry(s, makeString((D :+ b), ","))])
212+
213+
214+
215+@Callable(ac)
216+func removeController (b) = valueOrElse(ap([ar(ac), if (ae(b))
180217 then unit
181218 else throw((("Controller `" + b) + "` is not registered"))]), {
182- let aj = value(indexOf(z, b))
183-[StringEntry(r, makeString(removeByIndex(z, aj), ","))]
219+ let av = value(indexOf(D, b))
220+[StringEntry(s, makeString(removeByIndex(D, av), ","))]
184221 })
185222
186223
187224
188-@Callable(X)
189-func available (h) = $Tuple2(nil, I(h))
225+@Callable(ac)
226+func available (h) = $Tuple2(nil, M(h))
190227
191228
192229
193-@Callable(X)
194-func owner (h) = $Tuple2(nil, u(h))
230+@Callable(ac)
231+func owner (h) = $Tuple2(nil, v(af(h)._1))
195232
196233
197234
198-@Callable(X)
199-func nameCreated (h) = $Tuple2(nil, w(h))
235+@Callable(ac)
236+func resolver (h) = $Tuple2(nil, y(af(h)._1))
200237
201238
202239
203-@Callable(X)
204-func nameExpires (h) = $Tuple2(nil, x(h))
240+@Callable(ac)
241+func setResolver (h,x) = valueOrElse(ap([if (L(h))
242+ then unit
243+ else throw("Name expired or not registered"), at(ac, h), if (aa(x))
244+ then unit
245+ else throw("Resolver must be a valid contract address")]), $Tuple2(nil, w(h, x)))
205246
206247
207248
208-@Callable(X)
209-func nameStatus (h) = $Tuple2(nil, if (!(D(h)))
210- then "NOT_REGISTERED"
211- else if (F(h))
212- then "EXPIRED"
213- else if ((assetBalance(value(addressFromString(value(u(h)))), fromBase58String(value(v(h)))) == 0))
214- then "SUSPENDED"
215- else "ACTIVE")
249+@Callable(ac)
250+func nameCreated (h) = $Tuple2(nil, A(af(h)._1))
216251
217252
218253
219-@Callable(X)
220-func register (h,t,ac) = valueOrElse(af([ai(X), if (I(h))
254+@Callable(ac)
255+func nameExpires (h) = $Tuple2(nil, B(af(h)._1))
256+
257+
258+
259+@Callable(ac)
260+func register (h,u,am) = valueOrElse(ap([as(ac), if (M(h))
221261 then unit
222- else throw((("`" + h) + "` cannot be registered")), if ((lastBlock.timestamp >= ac))
262+ else throw((("`" + h) + "` cannot be registered")), if (aa(u))
223263 then unit
224- else throw("createdAt cannot be in the future")]), {
225- let ak = aa(h)
226- let l = calculateAssetId(ak[0])
227- let al = toBase58String(l)
228- let am = ab(h, al, ac)
229- let an = ae(al, t)
230- let ao = s(h, t)
231- (((ak ++ am) ++ an) ++ ao)
264+ else throw("Owner must be a valid address"), if ((am > 0))
265+ then unit
266+ else throw("CreatedAt cannot be negative"), if ((lastBlock.timestamp >= am))
267+ then unit
268+ else throw("CreatedAt cannot be in the future")]), {
269+ let aw = ak(h)
270+ let l = calculateAssetId(aw[0])
271+ let ax = toBase58String(l)
272+ let ay = al(h, ax, am)
273+ let az = ao(ax, u)
274+ let aA = t(h, u)
275+ (((aw ++ ay) ++ az) ++ aA)
232276 })
233277
234278
235279
236-@Callable(X)
237-func reclaim (h) = valueOrElse(af([if (H(h))
280+@Callable(ac)
281+func reclaim (h) = valueOrElse(ap([if (L(h))
238282 then unit
239283 else throw((("`" + h) + "` is not active"))]), {
240- let ap = X.caller
241- let aq = toString(ap)
242- let al = valueOrErrorMessage(v(h), (("No token is issued for `" + h) + "`"))
243- let l = fromBase58String(al)
244- let ar = (assetBalance(ap, l) == 1)
245- let as = Y(X, h)
246- let at = {
247- let A = assetInfo(l)
248- if ($isInstanceOf(A, "Asset"))
284+ let aB = ac.caller
285+ let aC = toString(aB)
286+ let ax = valueOrErrorMessage(z(h), (("No token is issued for `" + h) + "`"))
287+ let l = fromBase58String(ax)
288+ let aD = (assetBalance(aB, l) == 1)
289+ let aE = ad(ac, h)
290+ let aF = {
291+ let E = assetInfo(l)
292+ if ($isInstanceOf(E, "Asset"))
249293 then {
250- let au = A
251- (au.quantity == 1)
294+ let aG = E
295+ (aG.quantity == 1)
252296 }
253297 else false
254298 }
255- if (if (as)
256- then !(at)
299+ if (if (aE)
300+ then !(aF)
257301 else false)
258302 then {
259- let av = aa(h)
260- let aw = calculateAssetId(av[0])
261- let ax = toBase58String(aw)
262- let ay = ad(h, ax)
263- let az = ae(ax, aq)
264- ((av ++ ay) ++ az)
303+ let aH = ak(h)
304+ let aI = calculateAssetId(aH[0])
305+ let aJ = toBase58String(aI)
306+ let aK = an(h, aJ)
307+ let aL = ao(aJ, aC)
308+ ((aH ++ aK) ++ aL)
265309 }
266- else if (if (as)
267- then ar
310+ else if (if (aE)
311+ then aD
268312 else false)
269313 then throw("You already own a name token")
270- else if (!(ar))
314+ else if (!(aD))
271315 then throw("You don't have a name token")
272- else s(h, aq)
316+ else t(h, aC)
273317 })
274318
275319

github/deemru/w8io/873ac7e 
99.17 ms