tx · Fj3jpDoBJFChVpPPioZLt4vKsjnih3rtwQmoje94ezGP

3PDbsENEYpvvV2HhKs34ni4uMWZQNy7rDpg:  -0.01000000 Waves

2023.03.07 21:41 [3545534] smart account 3PDbsENEYpvvV2HhKs34ni4uMWZQNy7rDpg > SELF 0.00000000 Waves

{ "type": 13, "id": "Fj3jpDoBJFChVpPPioZLt4vKsjnih3rtwQmoje94ezGP", "fee": 1000000, "feeAssetId": null, "timestamp": 1678214498755, "version": 2, "chainId": 87, "sender": "3PDbsENEYpvvV2HhKs34ni4uMWZQNy7rDpg", "senderPublicKey": "DGyzat5roRqv3U2kNrwbf7unND1XC5BMR3ScR3Vx9iDT", "proofs": [ "3qrZgLf8KnwFoG8hx2KPufDDUhgBH8G7vFLGfnBNEtBvVhaepG2Aym33ACjT2k5HBoWuaNKajhgLdqr3qyTBqrrp" ], "script": null, "height": 3545534, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EMmTSqus5ZPTjxrwNAKLXDHjSQbEWaGZ8whBUUEgHcda Next: none Full:
OldNewDifferences
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-
1+# no script

github/deemru/w8io/6500d08 
31.54 ms