tx · G2gVFJYeg3RqNJYpFVcU5JnUKAigQ3bgxRMtaV8V9cyY

3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G:  -0.00900000 Waves

2023.03.07 21:45 [3545539] smart account 3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G > SELF 0.00000000 Waves

{ "type": 13, "id": "G2gVFJYeg3RqNJYpFVcU5JnUKAigQ3bgxRMtaV8V9cyY", "fee": 900000, "feeAssetId": null, "timestamp": 1678214643910, "version": 2, "chainId": 87, "sender": "3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G", "senderPublicKey": "24RfWVqC3utDSKA5GoSKJCJo5mFErm1aABFhpavJYbpW", "proofs": [ "xVFsdUPdzP1eKkf6nC1h1cTqT7Mf9rxZpRpDs5QdhBXxUoo22wp4ncWD7JZt1eX3vAzM7G1nVZ45P8hEsAaqReN", "2gLZqMWDMFASUbFrnPHVVBDQs27y2Q75AkeanWdBXXqCxtdqVYA11xu2mPmvRsMQJ4ZCCYHoRPqTCoyT7RJXVRSZ" ], "script": "base64:AAIFAAAAAAAAABYIAhIECgIICBIECgIIARIECgIIAhIAAAAADgEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAEWdldEludGVnZXJPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEAAAAMbWF5YmVBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAMbWF5YmVBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAaQ2FuJ3QgcGFyc2UgYWRkcmVzcyBmcm9tICcFAAAADG1heWJlQWRkcmVzcwIAAAABJwEAAAAKa2V5X2VudGl0eQAAAAMAAAAEbmFtZQAAAAJwawAAAAhwcm9wZXJ0eQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARuYW1lAgAAAAFfBQAAAAJwawIAAAABXwUAAAAIcHJvcGVydHkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABXRva2VuAAAAABFrZXlfbWVlZHVzQWRkcmVzcwIAAAANbWVlZHVzQWRkcmVzcwAAAAAUa2V5X3JlZ2lzdHJhckFkZHJlc3MCAAAAEHJlZ2lzdHJhckFkZHJlc3MAAAAAEWtleV9wdXp6bGVBZGRyZXNzAgAAAA1wdXp6bGVBZGRyZXNzAAAAAA1tZWVkdXNBZGRyZXNzCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMFAAAAEWtleV9tZWVkdXNBZGRyZXNzAAAAAAZtZWVkdXMJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQUAAAANbWVlZHVzQWRkcmVzcwAAAAANcHV6emxlQWRkcmVzcwkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzBQAAABFrZXlfcHV6emxlQWRkcmVzcwAAAAAGcHV6emxlCQEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEFAAAADXB1enpsZUFkZHJlc3MAAAAAEHJlZ2lzdHJhckFkZHJlc3MJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwUAAAAUa2V5X3JlZ2lzdHJhckFkZHJlc3MAAAAACXJlZ2lzdHJhcgkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABBQAAABByZWdpc3RyYXJBZGRyZXNzAAAABAAAAANpbnYBAAAABGluaXQAAAACAAAADW1lZWR1c0FkZHJlc3MAAAAQcmVnaXN0cmFyQWRkcmVzcwMJAQAAAAIhPQAAAAIIBQAAAANpbnYAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAG09ubHkgc2VsZiBjYWxscyBhcmUgYWxsb3dlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABFrZXlfbWVlZHVzQWRkcmVzcwUAAAANbWVlZHVzQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABRrZXlfcmVnaXN0cmFyQWRkcmVzcwUAAAAQcmVnaXN0cmFyQWRkcmVzcwUAAAADbmlsAAAAA2ludgEAAAAHcmVzZXJ2ZQAAAAIAAAAEbmFtZQAAAA1pbml0VGltZXN0YW1wBAAAAAZjYWxsZXIIBQAAAANpbnYAAAAGY2FsbGVyBAAAAAljYWxsZXJTdHIJAAQlAAAAAQUAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAEdGhpcwUAAAAGY2FsbGVyCQAAAgAAAAECAAAAG09ubHkgc2VsZiBjYWxscyBhcmUgYWxsb3dlZAQAAAALcmVz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", "height": 3545539, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3mWcGnJ3aCzp2G2XAFqr6j6oToAnhcrgDb9txwMeX1oR Next: none Diff:
OldNewDifferences
2020
2121 let key_registrarAddress = "registrarAddress"
2222
23+let key_puzzleAddress = "puzzleAddress"
24+
2325 let meedusAddress = getStringOrThrow(this, key_meedusAddress)
2426
2527 let meedus = parseAddressOrThrow(meedusAddress)
28+
29+let puzzleAddress = getStringOrThrow(this, key_puzzleAddress)
30+
31+let puzzle = parseAddressOrThrow(puzzleAddress)
2632
2733 let registrarAddress = getStringOrThrow(this, key_registrarAddress)
2834
6773 let callerStr = toString(caller)
6874 let pmt = inv.payments[0]
6975 let assetId = valueOrErrorMessage(pmt.assetId, "Asset cannot be WAVES")
76+ let assetIdStr = toBase58String(assetId)
7077 let asset = valueOrErrorMessage(assetInfo(assetId), "Invalid asset")
71- let isMeedusNFT = if (if (if ((asset.issuer == meedus))
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))
7281 then (asset.quantity == 1)
7382 else false)
7483 then (asset.decimals == 0)
7584 else false)
7685 then (asset.reissuable == false)
86+ else false)
87+ then (originIssuer == meedusAddress)
88+ else false)
89+ then (originAssetId == assetIdStr)
7790 else false
7891 if (if ((pmt.amount != 1))
7992 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
66
77 func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
88
99
1010 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
1111
1212
1313 func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
1414
1515
1616 func key_Name_token (name) = key_entity("Name", name, "token")
1717
1818
1919 let key_meedusAddress = "meedusAddress"
2020
2121 let key_registrarAddress = "registrarAddress"
2222
23+let key_puzzleAddress = "puzzleAddress"
24+
2325 let meedusAddress = getStringOrThrow(this, key_meedusAddress)
2426
2527 let meedus = parseAddressOrThrow(meedusAddress)
28+
29+let puzzleAddress = getStringOrThrow(this, key_puzzleAddress)
30+
31+let puzzle = parseAddressOrThrow(puzzleAddress)
2632
2733 let registrarAddress = getStringOrThrow(this, key_registrarAddress)
2834
2935 let registrar = parseAddressOrThrow(registrarAddress)
3036
3137 @Callable(inv)
3238 func init (meedusAddress,registrarAddress) = if ((inv.caller != this))
3339 then throw("Only self calls are allowed")
3440 else [StringEntry(key_meedusAddress, meedusAddress), StringEntry(key_registrarAddress, registrarAddress)]
3541
3642
3743
3844 @Callable(inv)
3945 func reserve (name,initTimestamp) = {
4046 let caller = inv.caller
4147 let callerStr = toString(caller)
4248 if ((this != caller))
4349 then throw("Only self calls are allowed")
4450 else {
4551 let reservation = invoke(registrar, "register", [name, callerStr, initTimestamp], nil)
4652 if ((reservation == reservation))
4753 then nil
4854 else throw("Strict value is not equal to itself.")
4955 }
5056 }
5157
5258
5359
5460 @Callable(inv)
5561 func transfer (addressStr,asset) = if ((inv.caller != this))
5662 then throw("Only self calls are allowed")
5763 else {
5864 let address = parseAddressOrThrow(addressStr)
5965 [ScriptTransfer(address, 1, asset)]
6066 }
6167
6268
6369
6470 @Callable(inv)
6571 func exchange () = {
6672 let caller = inv.originCaller
6773 let callerStr = toString(caller)
6874 let pmt = inv.payments[0]
6975 let assetId = valueOrErrorMessage(pmt.assetId, "Asset cannot be WAVES")
76+ let assetIdStr = toBase58String(assetId)
7077 let asset = valueOrErrorMessage(assetInfo(assetId), "Invalid asset")
71- let isMeedusNFT = if (if (if ((asset.issuer == meedus))
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))
7281 then (asset.quantity == 1)
7382 else false)
7483 then (asset.decimals == 0)
7584 else false)
7685 then (asset.reissuable == false)
86+ else false)
87+ then (originIssuer == meedusAddress)
88+ else false)
89+ then (originAssetId == assetIdStr)
7790 else false
7891 if (if ((pmt.amount != 1))
7992 then true
8093 else !(isMeedusNFT))
8194 then throw("Payment should contain Meedus NFT")
8295 else if ((5 > size(asset.name)))
8396 then throw("You cannot exchange names that are less than 5 chars long")
8497 else {
8598 let tokenStr = getStringOrThrow(registrar, key_Name_token(asset.name))
8699 let token = fromBase58String(tokenStr)
87100 let transfer = invoke(this, "transfer", [callerStr, token], nil)
88101 if ((transfer == transfer))
89102 then {
90103 let registration = invoke(registrar, "reclaim", [asset.name], nil)
91104 if ((registration == registration))
92105 then nil
93106 else throw("Strict value is not equal to itself.")
94107 }
95108 else throw("Strict value is not equal to itself.")
96109 }
97110 }
98111
99112
100113 @Verifier(tx)
101114 func verify () = {
102115 let maybeOracle = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
103116 let maybeAdminKeys = if (isDefined(maybeOracle))
104117 then getString(value(maybeOracle), "AdminKeys")
105118 else unit
106119 match maybeAdminKeys {
107120 case adminKeysStr: String =>
108121 let adminKeys = {
109122 let stringKeys = split(adminKeysStr, ",")
110123 [fromBase58String(stringKeys[0]), fromBase58String(stringKeys[1]), fromBase58String(stringKeys[2])]
111124 }
112125 func verifyByAllKeys (proof) = if (sigVerify(tx.bodyBytes, proof, adminKeys[0]))
113126 then 1
114127 else if (sigVerify(tx.bodyBytes, proof, adminKeys[1]))
115128 then 10
116129 else if (sigVerify(tx.bodyBytes, proof, adminKeys[2]))
117130 then 100
118131 else 0
119132
120133 containsElement([110, 101, 11], (verifyByAllKeys(tx.proofs[0]) + verifyByAllKeys(tx.proofs[1])))
121134 case _ =>
122135 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
123136 }
124137 }
125138

github/deemru/w8io/6500d08 
37.40 ms