tx · Aop13NoHnMMDE5vEgsgZeJBBs5ZKquUrtA9Jtn2mvFzX

3MvrXJVzDMDcshazxn88FybxHV2JvWQBxTc:  -0.01000000 Waves

2022.10.09 09:22 [2264415] smart account 3MvrXJVzDMDcshazxn88FybxHV2JvWQBxTc > SELF 0.00000000 Waves

{ "type": 13, "id": "Aop13NoHnMMDE5vEgsgZeJBBs5ZKquUrtA9Jtn2mvFzX", "fee": 1000000, "feeAssetId": null, "timestamp": 1665296581851, "version": 2, "chainId": 84, "sender": "3MvrXJVzDMDcshazxn88FybxHV2JvWQBxTc", "senderPublicKey": "Fq8P5ctrS7PNTX37bWWxvnwoB7C2FaNySZWnRmgPUaDH", "proofs": [ "v1NnMfSfxfgkDgzp19Fdu3udecCXne9jf52na6Xf6joTezyc8Q7N4c6rkga9ZR69DSfqPsjzXKWzvbx9yFbAoHk" ], "script": "base64:AAIFAAAAAAAAACMIAhIECgIIARIDCgEIEgMKAQgSAwoBCBIFCgMICAESAwoBCAAAACQBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABAAAADG1heWJlQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAADG1heWJlQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAGkNhbid0IHBhcnNlIGFkZHJlc3MgZnJvbSAnBQAAAAxtYXliZUFkZHJlc3MCAAAAAScBAAAACmtleV9lbnRpdHkAAAADAAAABG5hbWUAAAACcGsAAAAIcHJvcGVydHkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEbmFtZQIAAAABXwUAAAACcGsCAAAAAV8FAAAACHByb3BlcnR5AQAAAA5rZXlfVG9rZW5fbmFtZQAAAAEAAAAHdG9rZW5JZAkBAAAACmtleV9lbnRpdHkAAAADAgAAAAVUb2tlbgUAAAAHdG9rZW5JZAIAAAAEbmFtZQEAAAAOa2V5X05hbWVfdG9rZW4AAAABAAAABG5hbWUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbmFtZQIAAAAFdG9rZW4BAAAADmtleV9OYW1lX293bmVyAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABW93bmVyAQAAABJrZXlfTmFtZV9leHBpcmVzQXQAAAABAAAABG5hbWUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbmFtZQIAAAAJZXhwaXJlc0F0AQAAABJrZXlfTmFtZV9jcmVhdGVkQXQAAAABAAAABG5hbWUJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAETmFtZQUAAAAEbmFtZQIAAAAJY3JlYXRlZEF0AAAAAA9rZXlfcm9vdEFkZHJlc3MCAAAAC3Jvb3RBZGRyZXNzAAAAAAtrZXlfbmFtZVRUTAIAAAAHbmFtZVRUTAAAAAAPa2V5X2NvbnRyb2xsZXJzAgAAAAtjb250cm9sbGVycwAAAAALcm9vdEFkZHJlc3MJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwUAAAAPa2V5X3Jvb3RBZGRyZXNzAAAAAARyb290CQEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEFAAAAC3Jvb3RBZGRyZXNzAAAAAAtjb250cm9sbGVycwkABLUAAAACCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMFAAAAD2tleV9jb250cm9sbGVycwIAAAABLAAAAAAHbmFtZVRUTAkBAAAAEWdldEludGVnZXJPclRocm93AAAAAgUAAAAEdGhpcwUAAAALa2V5X25hbWVUVEwBAAAACV9zZXRPd25lcgAAAAIAAAAEbmFtZQAAAAVvd25lcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5X05hbWVfb3duZXIAAAABBQAAAARuYW1lBQAAAAVvd25lcgUAAAADbmlsAQAAAAlfZ2V0T3duZXIAAAABAAAABG5hbWUJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX293bmVyAAAAAQUAAAAEbmFtZQEAAAAJX2dldFRva2VuAAAAAQAAAARuYW1lCQAEHQAAAAIFAAAABHRoaXMJAQAAAA5rZXlfTmFtZV90b2tlbgAAAAEFAAAABG5hbWUBAAAADV9nZXRDcmVhdGVkQXQAAAABAAAABG5hbWUJ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AAACBQAAAA1pc3N1ZU5ld1Rva2VuAAAAAAAAAAAABAAAAAtuZXdUb2tlblN0cgkAAlgAAAABBQAAAApuZXdUb2tlbklkBAAAABdyZXN0b3JlTmFtZVdpdGhOZXdUb2tlbgkBAAAAFV9yZXN0b3JlTmFtZVdpdGhUb2tlbgAAAAIFAAAABG5hbWUFAAAAC25ld1Rva2VuU3RyBAAAABd0cmFuc2Zlck5ld1Rva2VuVG9Pd25lcgkBAAAAFV90cmFuc2ZlclRva2VuVG9Pd25lcgAAAAIFAAAAC25ld1Rva2VuU3RyBQAAAA9uZXdPd25lckFkZHJlc3MJAAROAAAAAgkABE4AAAACBQAAAA1pc3N1ZU5ld1Rva2VuBQAAABdyZXN0b3JlTmFtZVdpdGhOZXdUb2tlbgUAAAAXdHJhbnNmZXJOZXdUb2tlblRvT3duZXIDCQAAAAAAAAIJAAPwAAAAAgUAAAAIbmV3T3duZXIFAAAAB3Rva2VuSWQAAAAAAAAAAAAJAAACAAAAAQIAAAAdWW91IGRvbid0IGhhdmUgYSBuYW1lZCB0b2tlbi4JAQAAAAlfc2V0T3duZXIAAAACBQAAAARuYW1lBQAAAA9uZXdPd25lckFkZHJlc3MAAAAA3mKe/A==", "height": 2264415, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: CPccZRMsg6kJddMEQnAXbkb1krVvweFYotnnthjuWaSL Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
5+
6+
7+func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
8+
9+
10+func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
11+
12+
13+func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
14+
15+
16+func key_Token_name (tokenId) = key_entity("Token", tokenId, "name")
17+
18+
19+func key_Name_token (name) = key_entity("Name", name, "token")
20+
21+
22+func key_Name_owner (name) = key_entity("Name", name, "owner")
23+
24+
25+func key_Name_expiresAt (name) = key_entity("Name", name, "expiresAt")
26+
27+
28+func key_Name_createdAt (name) = key_entity("Name", name, "createdAt")
29+
30+
31+let key_rootAddress = "rootAddress"
32+
33+let key_nameTTL = "nameTTL"
34+
35+let key_controllers = "controllers"
36+
37+let rootAddress = getStringOrThrow(this, key_rootAddress)
38+
39+let root = parseAddressOrThrow(rootAddress)
40+
41+let controllers = split(getStringOrThrow(this, key_controllers), ",")
42+
43+let nameTTL = getIntegerOrThrow(this, key_nameTTL)
44+
45+func _setOwner (name,owner) = [StringEntry(key_Name_owner(name), owner)]
46+
47+
48+func _getOwner (name) = getString(this, key_Name_owner(name))
49+
50+
51+func _getToken (name) = getString(this, key_Name_token(name))
52+
53+
54+func _getCreatedAt (name) = getInteger(this, key_Name_createdAt(name))
55+
56+
57+func _getExpiresAt (name) = getInteger(this, key_Name_expiresAt(name))
58+
59+
60+func isRegisteredName (name) = isDefined(getString(this, key_Name_token(name)))
61+
62+
63+func isCreatedName (name) = isDefined(_getCreatedAt(name))
64+
65+
66+func isExpiredName (name) = match _getExpiresAt(name) {
67+ case expiresAt: Int =>
68+ (lastBlock.timestamp > expiresAt)
69+ case _ =>
70+ false
71+}
72+
73+
74+func isActiveName (name) = if (if (isRegisteredName(name))
75+ then isCreatedName(name)
76+ else false)
77+ then !(isExpiredName(name))
78+ else false
79+
80+
81+func isAvailableName (name) = {
82+ let symbols = "abcdefghijklmnopqrstuvwxyz1234567890-"
83+ func validateChars (isValid,char) = if (isValid)
84+ then contains(symbols, char)
85+ else false
86+
87+ let isValidName = if (if (if (if ((size(name) > 0))
88+ then (63 >= size(name))
89+ else false)
90+ then (indexOf(name, "-") != 0)
91+ else false)
92+ then (lastIndexOf(name, "-") != (size(name) - 1))
93+ else false)
94+ then {
95+ let $l = split(name, "")
96+ let $s = size($l)
97+ let $acc0 = true
98+ func $f0_1 ($a,$i) = if (($i >= $s))
99+ then $a
100+ else validateChars($a, $l[$i])
101+
102+ func $f0_2 ($a,$i) = if (($i >= $s))
103+ then $a
104+ else throw("List size exceeds 63")
105+
106+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 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)
107+ }
108+ else false
109+ let inUse = if (isRegisteredName(name))
110+ then !(isExpiredName(name))
111+ else false
112+ if (!(inUse))
113+ then isValidName
114+ else false
115+ }
116+
117+
118+func isAdmin (inv) = (inv.caller == this)
119+
120+
121+func isOwner (inv,name) = (toString(inv.caller) == valueOrErrorMessage(_getOwner(name), (("Owner for `" + name) + "` is not found")))
122+
123+
124+func isController (address) = containsElement(controllers, address)
125+
126+
127+func _issueNameToken (name) = [Issue(if ((size(name) > 16))
128+ then (take(name, 15) + "~")
129+ else take(name, 16), name, 1, 0, false)]
130+
131+
132+func _registerNameWithToken (name,tokenId,createdAt) = [StringEntry(key_Name_token(name), tokenId), StringEntry(key_Token_name(tokenId), name), IntegerEntry(key_Name_createdAt(name), createdAt), IntegerEntry(key_Name_expiresAt(name), (createdAt + nameTTL))]
133+
134+
135+func _restoreNameWithToken (name,tokenId) = [StringEntry(key_Name_token(name), tokenId), StringEntry(key_Token_name(tokenId), name)]
136+
137+
138+func _transferTokenToOwner (tokenId,owner) = [ScriptTransfer(parseAddressOrThrow(owner), 1, fromBase58String(tokenId))]
139+
140+
141+func modifiers (validations) = unit
142+
143+
144+func onlyAdmin (inv) = if (isAdmin(inv))
145+ then unit
146+ else throw("Permission denied")
147+
148+
149+func onlyController (inv) = if (if (isAdmin(inv))
150+ then true
151+ else isController(toString(inv.caller)))
152+ then unit
153+ else throw("Permission denied")
154+
155+
156+@Callable(inv)
157+func init (rootAddress,nameExpirationInterval) = valueOrElse(modifiers([onlyAdmin(inv)]), [StringEntry(key_rootAddress, rootAddress), IntegerEntry(key_nameTTL, nameTTL)])
158+
159+
160+
161+@Callable(inv)
162+func addController (address) = valueOrElse(modifiers([onlyAdmin(inv), if (!(isController(address)))
163+ then unit
164+ else throw((("Controller `" + address) + "` is already registered"))]), [StringEntry(key_controllers, makeString((controllers :+ address), ","))])
165+
166+
167+
168+@Callable(inv)
169+func removeController (address) = valueOrElse(modifiers([onlyAdmin(inv), if (isController(address))
170+ then unit
171+ else throw((("Controller `" + address) + "` is not registered"))]), {
172+ let controllerIndex = value(indexOf(controllers, address))
173+[StringEntry(key_controllers, makeString(removeByIndex(controllers, controllerIndex), ","))]
174+ })
175+
176+
177+
178+@Callable(inv)
179+func available (name) = $Tuple2(nil, isAvailableName(name))
180+
181+
182+
183+@Callable(inv)
184+func register (name,owner,createdAt) = valueOrElse(modifiers([onlyController(inv), if (isAvailableName(name))
185+ then unit
186+ else throw((("`" + name) + "` cannot be registered")), if ((lastBlock.timestamp >= createdAt))
187+ then unit
188+ else throw("createdAt cannot be in the future")]), {
189+ let issueNameToken = _issueNameToken(name)
190+ let tokenId = calculateAssetId(issueNameToken[0])
191+ let tokenStr = toBase58String(tokenId)
192+ let registerNameWithToken = _registerNameWithToken(name, tokenStr, createdAt)
193+ let transferTokenToOwner = _transferTokenToOwner(tokenStr, owner)
194+ let setOwnership = _setOwner(name, owner)
195+ (((issueNameToken ++ registerNameWithToken) ++ transferTokenToOwner) ++ setOwnership)
196+ })
197+
198+
199+
200+@Callable(inv)
201+func reclaim (name) = valueOrElse(modifiers([if (isActiveName(name))
202+ then unit
203+ else throw((("`" + name) + "` is not active"))]), {
204+ let newOwner = inv.caller
205+ let newOwnerAddress = toString(newOwner)
206+ let tokenStr = valueOrErrorMessage(_getToken(name), (("No token is issued for `" + name) + "`"))
207+ let tokenId = fromBase58String(tokenStr)
208+ let token = assetInfo(tokenId)
209+ if (isOwner(inv, name))
210+ then if (isDefined(token))
211+ then throw("You can only restore a burned token")
212+ else {
213+ let issueNewToken = _issueNameToken(name)
214+ let newTokenId = calculateAssetId(issueNewToken[0])
215+ let newTokenStr = toBase58String(newTokenId)
216+ let restoreNameWithNewToken = _restoreNameWithToken(name, newTokenStr)
217+ let transferNewTokenToOwner = _transferTokenToOwner(newTokenStr, newOwnerAddress)
218+ ((issueNewToken ++ restoreNameWithNewToken) ++ transferNewTokenToOwner)
219+ }
220+ else if ((assetBalance(newOwner, tokenId) == 0))
221+ then throw("You don't have a named token.")
222+ else _setOwner(name, newOwnerAddress)
223+ })
224+
225+

github/deemru/w8io/c3f4982 
18.04 ms