tx · 3mWcGnJ3aCzp2G2XAFqr6j6oToAnhcrgDb9txwMeX1oR

3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G:  -0.01000000 Waves

2023.03.03 20:50 [3539683] smart account 3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G > SELF 0.00000000 Waves

{ "type": 13, "id": "3mWcGnJ3aCzp2G2XAFqr6j6oToAnhcrgDb9txwMeX1oR", "fee": 1000000, "feeAssetId": null, "timestamp": 1677865381168, "version": 2, "chainId": 87, "sender": "3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G", "senderPublicKey": "24RfWVqC3utDSKA5GoSKJCJo5mFErm1aABFhpavJYbpW", "proofs": [ "2nmyCW8C2Lqd1DEg6cjLMoViyKzswGihZivYueBUd4CuP4wXMXTHmbVwkbHy2mqMw8g4iXrk2Nj9CXfN7dazJzvo", "5XeahJoSf3wHDsfEJxwj7KmkPMbxYLHGwNmqAvrgjtscX8A5m93WKoSdFrbPZ4DDLSoeLNHKfUaTqd2y8fzAquzd" ], "script": "base64:AAIFAAAAAAAAABYIAhIECgIICBIECgIIARIECgIIAhIAAAAACwEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAEWdldEludGVnZXJPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEAAAAMbWF5YmVBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAMbWF5YmVBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAaQ2FuJ3QgcGFyc2UgYWRkcmVzcyBmcm9tICcFAAAADG1heWJlQWRkcmVzcwIAAAABJwEAAAAKa2V5X2VudGl0eQAAAAMAAAAEbmFtZQAAAAJwawAAAAhwcm9wZXJ0eQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARuYW1lAgAAAAFfBQAAAAJwawIAAAABXwUAAAAIcHJvcGVydHkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABXRva2VuAAAAABFrZXlfbWVlZHVzQWRkcmVzcwIAAAANbWVlZHVzQWRkcmVzcwAAAAAUa2V5X3JlZ2lzdHJhckFkZHJlc3MCAAAAEHJlZ2lzdHJhckFkZHJlc3MAAAAADW1lZWR1c0FkZHJlc3MJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwUAAAARa2V5X21lZWR1c0FkZHJlc3MAAAAABm1lZWR1cwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABBQAAAA1tZWVkdXNBZGRyZXNzAAAAABByZWdpc3RyYXJBZGRyZXNzCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMFAAAAFGtleV9yZWdpc3RyYXJBZGRyZXNzAAAAAAlyZWdpc3RyYXIJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQUAAAAQcmVnaXN0cmFyQWRkcmVzcwAAAAQAAAADaW52AQAAAARpbml0AAAAAgAAAA1tZWVkdXNBZGRyZXNzAAAAEHJlZ2lzdHJhckFkZHJlc3MDCQEAAAACIT0AAAACCAUAAAADaW52AAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABtPbmx5IHNlbGYgY2FsbHMgYXJlIGFsbG93ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARa2V5X21lZWR1c0FkZHJlc3MFAAAADW1lZWR1c0FkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAUa2V5X3JlZ2lzdHJhckFkZHJlc3MFAAAAEHJlZ2lzdHJhckFkZHJlc3MFAAAAA25pbAAAAANpbnYBAAAAB3Jlc2VydmUAAAACAAAABG5hbWUAAAANaW5pdFRpbWVzdGFtcAQAAAAGY2FsbGVyCAUAAAADaW52AAAABmNhbGxlcgQAAAAJY2FsbGVyU3RyCQAEJQAAAAEFAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAABHRoaXMFAAAABmNhbGxlcgkAAAIAAAABAgAAABtPbmx5IHNlbGYgY2FsbHMgYXJlIGFsbG93ZWQEAAAAC3Jlc2VydmF0aW9uCQAD/AAAAAQFAAAACXJlZ2lzdHJhcgIAAAAIcmVnaXN0ZXIJAARMAAAAAgUAAAAEbmFtZQkABEwAAAACBQAAAAljYWxsZXJTdHIJAARMAAAAAgUAAAANaW5pdFRpbWVzdGFtcAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAC3Jlc2VydmF0aW9uBQAAAAtyZXNlcnZhdGlvbgUAAAADbmls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", "height": 3539683, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AqcfcjinWSqSNbvVxE1a3QMdi27d8KV53gEk88JwBBgC Next: G2gVFJYeg3RqNJYpFVcU5JnUKAigQ3bgxRMtaV8V9cyY Diff:
OldNewDifferences
5050 }
5151
5252
53+
54+@Callable(inv)
55+func transfer (addressStr,asset) = if ((inv.caller != this))
56+ then throw("Only self calls are allowed")
57+ else {
58+ let address = parseAddressOrThrow(addressStr)
59+[ScriptTransfer(address, 1, asset)]
60+ }
61+
62+
63+
64+@Callable(inv)
65+func exchange () = {
66+ let caller = inv.originCaller
67+ let callerStr = toString(caller)
68+ let pmt = inv.payments[0]
69+ let assetId = valueOrErrorMessage(pmt.assetId, "Asset cannot be WAVES")
70+ let asset = valueOrErrorMessage(assetInfo(assetId), "Invalid asset")
71+ let isMeedusNFT = if (if (if ((asset.issuer == meedus))
72+ then (asset.quantity == 1)
73+ else false)
74+ then (asset.decimals == 0)
75+ else false)
76+ then (asset.reissuable == false)
77+ else false
78+ if (if ((pmt.amount != 1))
79+ then true
80+ else !(isMeedusNFT))
81+ then throw("Payment should contain Meedus NFT")
82+ else if ((5 > size(asset.name)))
83+ then throw("You cannot exchange names that are less than 5 chars long")
84+ else {
85+ let tokenStr = getStringOrThrow(registrar, key_Name_token(asset.name))
86+ let token = fromBase58String(tokenStr)
87+ let transfer = invoke(this, "transfer", [callerStr, token], nil)
88+ if ((transfer == transfer))
89+ then {
90+ let registration = invoke(registrar, "reclaim", [asset.name], nil)
91+ if ((registration == registration))
92+ then nil
93+ else throw("Strict value is not equal to itself.")
94+ }
95+ else throw("Strict value is not equal to itself.")
96+ }
97+ }
98+
99+
53100 @Verifier(tx)
54101 func verify () = {
55102 let maybeOracle = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
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
2323 let meedusAddress = getStringOrThrow(this, key_meedusAddress)
2424
2525 let meedus = parseAddressOrThrow(meedusAddress)
2626
2727 let registrarAddress = getStringOrThrow(this, key_registrarAddress)
2828
2929 let registrar = parseAddressOrThrow(registrarAddress)
3030
3131 @Callable(inv)
3232 func init (meedusAddress,registrarAddress) = if ((inv.caller != this))
3333 then throw("Only self calls are allowed")
3434 else [StringEntry(key_meedusAddress, meedusAddress), StringEntry(key_registrarAddress, registrarAddress)]
3535
3636
3737
3838 @Callable(inv)
3939 func reserve (name,initTimestamp) = {
4040 let caller = inv.caller
4141 let callerStr = toString(caller)
4242 if ((this != caller))
4343 then throw("Only self calls are allowed")
4444 else {
4545 let reservation = invoke(registrar, "register", [name, callerStr, initTimestamp], nil)
4646 if ((reservation == reservation))
4747 then nil
4848 else throw("Strict value is not equal to itself.")
4949 }
5050 }
5151
5252
53+
54+@Callable(inv)
55+func transfer (addressStr,asset) = if ((inv.caller != this))
56+ then throw("Only self calls are allowed")
57+ else {
58+ let address = parseAddressOrThrow(addressStr)
59+[ScriptTransfer(address, 1, asset)]
60+ }
61+
62+
63+
64+@Callable(inv)
65+func exchange () = {
66+ let caller = inv.originCaller
67+ let callerStr = toString(caller)
68+ let pmt = inv.payments[0]
69+ let assetId = valueOrErrorMessage(pmt.assetId, "Asset cannot be WAVES")
70+ let asset = valueOrErrorMessage(assetInfo(assetId), "Invalid asset")
71+ let isMeedusNFT = if (if (if ((asset.issuer == meedus))
72+ then (asset.quantity == 1)
73+ else false)
74+ then (asset.decimals == 0)
75+ else false)
76+ then (asset.reissuable == false)
77+ else false
78+ if (if ((pmt.amount != 1))
79+ then true
80+ else !(isMeedusNFT))
81+ then throw("Payment should contain Meedus NFT")
82+ else if ((5 > size(asset.name)))
83+ then throw("You cannot exchange names that are less than 5 chars long")
84+ else {
85+ let tokenStr = getStringOrThrow(registrar, key_Name_token(asset.name))
86+ let token = fromBase58String(tokenStr)
87+ let transfer = invoke(this, "transfer", [callerStr, token], nil)
88+ if ((transfer == transfer))
89+ then {
90+ let registration = invoke(registrar, "reclaim", [asset.name], nil)
91+ if ((registration == registration))
92+ then nil
93+ else throw("Strict value is not equal to itself.")
94+ }
95+ else throw("Strict value is not equal to itself.")
96+ }
97+ }
98+
99+
53100 @Verifier(tx)
54101 func verify () = {
55102 let maybeOracle = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
56103 let maybeAdminKeys = if (isDefined(maybeOracle))
57104 then getString(value(maybeOracle), "AdminKeys")
58105 else unit
59106 match maybeAdminKeys {
60107 case adminKeysStr: String =>
61108 let adminKeys = {
62109 let stringKeys = split(adminKeysStr, ",")
63110 [fromBase58String(stringKeys[0]), fromBase58String(stringKeys[1]), fromBase58String(stringKeys[2])]
64111 }
65112 func verifyByAllKeys (proof) = if (sigVerify(tx.bodyBytes, proof, adminKeys[0]))
66113 then 1
67114 else if (sigVerify(tx.bodyBytes, proof, adminKeys[1]))
68115 then 10
69116 else if (sigVerify(tx.bodyBytes, proof, adminKeys[2]))
70117 then 100
71118 else 0
72119
73120 containsElement([110, 101, 11], (verifyByAllKeys(tx.proofs[0]) + verifyByAllKeys(tx.proofs[1])))
74121 case _ =>
75122 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
76123 }
77124 }
78125

github/deemru/w8io/6500d08 
28.46 ms