tx · EMmTSqus5ZPTjxrwNAKLXDHjSQbEWaGZ8whBUUEgHcda

3PDbsENEYpvvV2HhKs34ni4uMWZQNy7rDpg:  -0.01000000 Waves

2023.03.07 21:39 [3545532] smart account 3PDbsENEYpvvV2HhKs34ni4uMWZQNy7rDpg > SELF 0.00000000 Waves

{ "type": 13, "id": "EMmTSqus5ZPTjxrwNAKLXDHjSQbEWaGZ8whBUUEgHcda", "fee": 1000000, "feeAssetId": null, "timestamp": 1678214431906, "version": 2, "chainId": 87, "sender": "3PDbsENEYpvvV2HhKs34ni4uMWZQNy7rDpg", "senderPublicKey": "DGyzat5roRqv3U2kNrwbf7unND1XC5BMR3ScR3Vx9iDT", "proofs": [ "2eoQXRpnmA6Y3kBhd3KJkrMV9nomZKo3RVfGph3TmcjdpU3StgaNn5osbEy7u8Acy3dsXBTdTUpcvebLaC8bkwij" ], "script": "base64:AAIFAAAAAAAAABYIAhIECgIICBIECgIIARIECgIIAhIAAAAADgEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAEWdldEludGVnZXJPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEAAAAMbWF5YmVBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAMbWF5YmVBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAaQ2FuJ3QgcGFyc2UgYWRkcmVzcyBmcm9tICcFAAAADG1heWJlQWRkcmVzcwIAAAABJwEAAAAKa2V5X2VudGl0eQAAAAMAAAAEbmFtZQAAAAJwawAAAAhwcm9wZXJ0eQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARuYW1lAgAAAAFfBQAAAAJwawIAAAABXwUAAAAIcHJvcGVydHkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABXRva2VuAAAAABFrZXlfbWVlZHVzQWRkcmVzcwIAAAANbWVlZHVzQWRkcmVzcwAAAAAUa2V5X3JlZ2lzdHJhckFkZHJlc3MCAAAAEHJlZ2lzdHJhckFkZHJlc3MAAAAAEWtleV9wdXp6bGVBZGRyZXNzAgAAAA1wdXp6bGVBZGRyZXNzAAAAAA1tZWVkdXNBZGRyZXNzCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMFAAAAEWtleV9tZWVkdXNBZGRyZXNzAAAAAAZtZWVkdXMJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQUAAAANbWVlZHVzQWRkcmVzcwAAAAANcHV6emxlQWRkcmVzcwkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzBQAAABFrZXlfcHV6emxlQWRkcmVzcwAAAAAGcHV6emxlCQEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEFAAAADXB1enpsZUFkZHJlc3MAAAAAEHJlZ2lzdHJhckFkZHJlc3MJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwUAAAAUa2V5X3JlZ2lzdHJhckFkZHJlc3MAAAAACXJlZ2lzdHJhcgkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABBQAAABByZWdpc3RyYXJBZGRyZXNzAAAABAAAAANpbnYBAAAABGluaXQAAAACAAAADW1lZWR1c0FkZHJlc3MAAAAQcmVnaXN0cmFyQWRkcmVzcwMJAQAAAAIhPQAAAAIIBQAAAANpbnYAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAG09ubHkgc2VsZiBjYWxscyBhcmUgYWxsb3dlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABFrZXlfbWVlZHVzQWRkcmVzcwUAAAANbWVlZHVzQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABRrZXlfcmVnaXN0cmFyQWRkcmVzcwUAAAAQcmVnaXN0cmFyQWRkcmVzcwUAAAADbmlsAAAAA2ludgEAAAAHcmVzZXJ2ZQAAAAIAAAAEbmFtZQAAAA1pbml0VGltZXN0YW1wBAAAAAZjYWxsZXIIBQAAAANpbnYAAAAGY2FsbGVyBAAAAAljYWxsZXJTdHIJAAQlAAAAAQUAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAEdGhpcwUAAAAGY2FsbGVyCQAAAgAAAAECAAAAG09ubHkgc2VsZiBjYWxscyBhcmUgYWxsb3dlZAQAAAALcmVz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", "height": 3545532, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: Fj3jpDoBJFChVpPPioZLt4vKsjnih3rtwQmoje94ezGP 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_Name_token (name) = key_entity("Name", name, "token")
17+
18+
19+let key_meedusAddress = "meedusAddress"
20+
21+let key_registrarAddress = "registrarAddress"
22+
23+let key_puzzleAddress = "puzzleAddress"
24+
25+let meedusAddress = getStringOrThrow(this, key_meedusAddress)
26+
27+let meedus = parseAddressOrThrow(meedusAddress)
28+
29+let puzzleAddress = getStringOrThrow(this, key_puzzleAddress)
30+
31+let puzzle = parseAddressOrThrow(puzzleAddress)
32+
33+let registrarAddress = getStringOrThrow(this, key_registrarAddress)
34+
35+let registrar = parseAddressOrThrow(registrarAddress)
36+
37+@Callable(inv)
38+func init (meedusAddress,registrarAddress) = if ((inv.caller != this))
39+ then throw("Only self calls are allowed")
40+ else [StringEntry(key_meedusAddress, meedusAddress), StringEntry(key_registrarAddress, registrarAddress)]
41+
42+
43+
44+@Callable(inv)
45+func reserve (name,initTimestamp) = {
46+ let caller = inv.caller
47+ let callerStr = toString(caller)
48+ if ((this != caller))
49+ then throw("Only self calls are allowed")
50+ else {
51+ let reservation = invoke(registrar, "register", [name, callerStr, initTimestamp], nil)
52+ if ((reservation == reservation))
53+ then nil
54+ else throw("Strict value is not equal to itself.")
55+ }
56+ }
57+
58+
59+
60+@Callable(inv)
61+func transfer (addressStr,asset) = if ((inv.caller != this))
62+ then throw("Only self calls are allowed")
63+ else {
64+ let address = parseAddressOrThrow(addressStr)
65+[ScriptTransfer(address, 1, asset)]
66+ }
67+
68+
69+
70+@Callable(inv)
71+func exchange () = {
72+ let caller = inv.originCaller
73+ let callerStr = toString(caller)
74+ let pmt = inv.payments[0]
75+ let assetId = valueOrErrorMessage(pmt.assetId, "Asset cannot be WAVES")
76+ let assetIdStr = toBase58String(assetId)
77+ let asset = valueOrErrorMessage(assetInfo(assetId), "Invalid asset")
78+ let originIssuer = valueOrElse(getString(puzzle, (("nft_" + assetIdStr) + "_issuer")), "~")
79+ let originAssetId = valueOrElse(getString(meedus, asset.name), "~")
80+ let isMeedusNFT = if (if (if (if (if ((asset.issuer == puzzle))
81+ then (asset.quantity == 1)
82+ else false)
83+ then (asset.decimals == 0)
84+ else false)
85+ then (asset.reissuable == false)
86+ else false)
87+ then (originIssuer == meedusAddress)
88+ else false)
89+ then (originAssetId == assetIdStr)
90+ else false
91+ if (if ((pmt.amount != 1))
92+ then true
93+ else !(isMeedusNFT))
94+ then throw("Payment should contain Meedus NFT")
95+ else if ((5 > size(asset.name)))
96+ then throw("You cannot exchange names that are less than 5 chars long")
97+ else {
98+ let tokenStr = getStringOrThrow(registrar, key_Name_token(asset.name))
99+ let token = fromBase58String(tokenStr)
100+ let transfer = invoke(this, "transfer", [callerStr, token], nil)
101+ if ((transfer == transfer))
102+ then {
103+ let registration = invoke(registrar, "reclaim", [asset.name], nil)
104+ if ((registration == registration))
105+ then nil
106+ else throw("Strict value is not equal to itself.")
107+ }
108+ else throw("Strict value is not equal to itself.")
109+ }
110+ }
111+
112+
113+@Verifier(tx)
114+func verify () = {
115+ let maybeOracle = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
116+ let maybeAdminKeys = if (isDefined(maybeOracle))
117+ then getString(value(maybeOracle), "AdminKeys")
118+ else unit
119+ match maybeAdminKeys {
120+ case adminKeysStr: String =>
121+ let adminKeys = {
122+ let stringKeys = split(adminKeysStr, ",")
123+[fromBase58String(stringKeys[0]), fromBase58String(stringKeys[1]), fromBase58String(stringKeys[2])]
124+ }
125+ func verifyByAllKeys (proof) = if (sigVerify(tx.bodyBytes, proof, adminKeys[0]))
126+ then 1
127+ else if (sigVerify(tx.bodyBytes, proof, adminKeys[1]))
128+ then 10
129+ else if (sigVerify(tx.bodyBytes, proof, adminKeys[2]))
130+ then 100
131+ else 0
132+
133+ containsElement([110, 101, 11], (verifyByAllKeys(tx.proofs[0]) + verifyByAllKeys(tx.proofs[1])))
134+ case _ =>
135+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
136+ }
137+ }
138+

github/deemru/w8io/3ef1775 
21.36 ms