tx · 562Uq8pLcxgMDVGpLuD5cLgh7Gp8aLrJ9idb8oE52S2V

3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A:  -0.01400000 Waves

2022.02.24 00:15 [3001918] smart account 3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A > SELF 0.00000000 Waves

{ "type": 13, "id": "562Uq8pLcxgMDVGpLuD5cLgh7Gp8aLrJ9idb8oE52S2V", "fee": 1400000, "feeAssetId": null, "timestamp": 1645650932601, "version": 2, "chainId": 87, "sender": "3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A", "senderPublicKey": "A96wNJF8YTgx1J9Q4nK3oqNoExh6dPSyFAdEkmzN7XDa", "proofs": [ "bPgz8e9HTGz1VRDzZtKNXCSTnpbP9heivX6KN9wNSWM2pSeZzVhf1YfEoh79J9kEywwkxiCQwyARoD1rckC4V4Z" ], "script": "base64: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", "height": 3001918, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HP9gV1x8WkDER8f4dgSyUNr2EfGNjiisJEHnfZ9CCo6L Next: 89NdQnAusmqhWn2q2LbrceCDnXKbsKUQjeQem7gAuofC Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let nftCreationAddress = base58'3P8LVqVKhTViMJau96KNir6FhHr4WnfoW57'
5+
46 let signArtNftCreationAddress = base58'3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV'
57
68 let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo'
2527 func ifDuckNft (asset) = if (if (if (if ((asset.issuer.bytes == incubatorAddress))
2628 then true
2729 else (asset.issuer.bytes == breederAddress))
30+ then (asset.decimals == 0)
31+ else false)
32+ then (asset.reissuable == false)
33+ else false)
34+ then (asset.quantity == 1)
35+ else false
36+
37+
38+func isNftFromMarketplace (asset) = if (if (if ((asset.issuer.bytes == nftCreationAddress))
2839 then (asset.decimals == 0)
2940 else false)
3041 then (asset.reissuable == false)
6677
6778
6879 @Callable(i)
69-func unlockNFT (nftId) = {
80+func cancelSellAndUnlock (nftId) = {
7081 let asset = value(assetInfo(fromBase58String(nftId)))
71- let stakedNFTIdStr = match invoke(Address(nftSignArtWrapper), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
72- case s: String =>
73- s
74- case _ =>
75- throw(("Somthing wrong when lock NFT in address: " + toBase58String(nftSignArtWrapper)))
76- }
77- if ((stakedNFTIdStr == stakedNFTIdStr))
78- then [ScriptTransfer(i.caller, 1, fromBase58String(stakedNFTIdStr))]
79- else throw("Strict value is not equal to itself.")
82+ let originalSAAssetId = getStringValue(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId"))
83+ if (if ((size(originalSAAssetId) > 0))
84+ then isNftFromMarketplace(asset)
85+ else false)
86+ then {
87+ let inv1 = invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil)
88+ if ((inv1 == inv1))
89+ then {
90+ let canceledAsset = value(assetInfo(fromBase58String(originalSAAssetId)))
91+ let wrapAddress = getAddressForWrap(canceledAsset)
92+ let unlockedNftStr = match invoke(wrapAddress, "unlock", nil, [AttachedPayment(canceledAsset.id, 1)]) {
93+ case s: String =>
94+ s
95+ case _ =>
96+ throw(("Somthing wrong when unlock NFT in address: " + toBase58String(wrapAddress.bytes)))
97+ }
98+ if ((unlockedNftStr == unlockedNftStr))
99+ then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
100+ else throw("Strict value is not equal to itself.")
101+ }
102+ else throw("Strict value is not equal to itself.")
103+ }
104+ else throw("Ivalid NFT attached")
80105 }
81106
82107
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let nftCreationAddress = base58'3P8LVqVKhTViMJau96KNir6FhHr4WnfoW57'
5+
46 let signArtNftCreationAddress = base58'3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV'
57
68 let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo'
79
810 let nftSignArtWrapper = base58'3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC'
911
1012 let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
1113
1214 let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
1315
1416 let marketplaceContractAddress = base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc'
1517
1618 func ifSignArtNft (asset) = if (if (if ((asset.issuer.bytes == signArtNftCreationAddress))
1719 then (asset.decimals == 0)
1820 else false)
1921 then (asset.reissuable == false)
2022 else false)
2123 then (asset.quantity == 1)
2224 else false
2325
2426
2527 func ifDuckNft (asset) = if (if (if (if ((asset.issuer.bytes == incubatorAddress))
2628 then true
2729 else (asset.issuer.bytes == breederAddress))
30+ then (asset.decimals == 0)
31+ else false)
32+ then (asset.reissuable == false)
33+ else false)
34+ then (asset.quantity == 1)
35+ else false
36+
37+
38+func isNftFromMarketplace (asset) = if (if (if ((asset.issuer.bytes == nftCreationAddress))
2839 then (asset.decimals == 0)
2940 else false)
3041 then (asset.reissuable == false)
3142 else false)
3243 then (asset.quantity == 1)
3344 else false
3445
3546
3647 func getAddressForWrap (asset) = if (ifSignArtNft(asset))
3748 then Address(nftSignArtWrapper)
3849 else if (ifDuckNft(asset))
3950 then Address(nftDuckWrapper)
4051 else throw("Unsupported NFT attached")
4152
4253
4354 @Callable(i)
4455 func lockAndSellNFT (buyOutPrice,buyOutAssetId) = {
4556 let assetId = value(value(i.payments[0]).assetId)
4657 let asset = value(assetInfo(assetId))
4758 let wrapAddress = getAddressForWrap(asset)
4859 let stakedNFTIdStr = match invoke(wrapAddress, "lock", nil, [i.payments[0]]) {
4960 case s: String =>
5061 s
5162 case _ =>
5263 throw(("Somthing wrong when lock NFT in address: " + toBase58String(wrapAddress.bytes)))
5364 }
5465 if ((stakedNFTIdStr == stakedNFTIdStr))
5566 then if ((size(stakedNFTIdStr) > 0))
5667 then {
5768 let inv = invoke(Address(marketplaceContractAddress), "sellNFT", [buyOutPrice, buyOutAssetId], [AttachedPayment(fromBase58String(stakedNFTIdStr), 1)])
5869 if ((inv == inv))
5970 then nil
6071 else throw("Strict value is not equal to itself.")
6172 }
6273 else throw("The created NFT is invalid")
6374 else throw("Strict value is not equal to itself.")
6475 }
6576
6677
6778
6879 @Callable(i)
69-func unlockNFT (nftId) = {
80+func cancelSellAndUnlock (nftId) = {
7081 let asset = value(assetInfo(fromBase58String(nftId)))
71- let stakedNFTIdStr = match invoke(Address(nftSignArtWrapper), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
72- case s: String =>
73- s
74- case _ =>
75- throw(("Somthing wrong when lock NFT in address: " + toBase58String(nftSignArtWrapper)))
76- }
77- if ((stakedNFTIdStr == stakedNFTIdStr))
78- then [ScriptTransfer(i.caller, 1, fromBase58String(stakedNFTIdStr))]
79- else throw("Strict value is not equal to itself.")
82+ let originalSAAssetId = getStringValue(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId"))
83+ if (if ((size(originalSAAssetId) > 0))
84+ then isNftFromMarketplace(asset)
85+ else false)
86+ then {
87+ let inv1 = invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil)
88+ if ((inv1 == inv1))
89+ then {
90+ let canceledAsset = value(assetInfo(fromBase58String(originalSAAssetId)))
91+ let wrapAddress = getAddressForWrap(canceledAsset)
92+ let unlockedNftStr = match invoke(wrapAddress, "unlock", nil, [AttachedPayment(canceledAsset.id, 1)]) {
93+ case s: String =>
94+ s
95+ case _ =>
96+ throw(("Somthing wrong when unlock NFT in address: " + toBase58String(wrapAddress.bytes)))
97+ }
98+ if ((unlockedNftStr == unlockedNftStr))
99+ then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
100+ else throw("Strict value is not equal to itself.")
101+ }
102+ else throw("Strict value is not equal to itself.")
103+ }
104+ else throw("Ivalid NFT attached")
80105 }
81106
82107
83108 @Verifier(tx)
84109 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
85110

github/deemru/w8io/3ef1775 
44.53 ms