tx · Qk5H3EezhDFKqyYH2AEcVAsCZpZFGuDSZgCAE81gB4K

3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A:  -0.01400000 Waves

2022.03.03 19:22 [3013129] smart account 3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A > SELF 0.00000000 Waves

{ "type": 13, "id": "Qk5H3EezhDFKqyYH2AEcVAsCZpZFGuDSZgCAE81gB4K", "fee": 1400000, "feeAssetId": null, "timestamp": 1646324633233, "version": 2, "chainId": 87, "sender": "3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A", "senderPublicKey": "A96wNJF8YTgx1J9Q4nK3oqNoExh6dPSyFAdEkmzN7XDa", "proofs": [ "3EpT39cmTeQTUGE2j4jQMUH9WniorwUSW83kwrUTvXp78mxre1kQkgsCt5DxfAarAEVi7PmPETq4tRV1CgsQn9zE" ], "script": "base64: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", "height": 3013129, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GWyDKJWV4boixsSnPnXMUXk1k6mWQLmcQS4vsa6v8DwL Next: EmfarboDWJ138pCi3hhyv3ofnndFpqFNVLrFF7GoNRqc Diff:
OldNewDifferences
4444 else false
4545
4646
47-func getAddressForWrap (asset) = if (ifSignArtNft(asset))
47+func getAddressForLock (asset) = if (ifSignArtNft(asset))
4848 then Address(nftSignArtWrapper)
4949 else if (ifDuckNft(asset))
5050 then Address(nftDuckWrapper)
5151 else throw("Unsupported NFT attached")
5252
5353
54+func getAddressForUnlock (asset) = {
55+ let isSignArtWrapper = match getString(Address(nftSignArtWrapper), (("signArtNft_" + toBase58String(asset.id)) + "_assetId")) {
56+ case s: String =>
57+ (size(s) > 0)
58+ case _ =>
59+ false
60+ }
61+ if (isSignArtWrapper)
62+ then Address(nftSignArtWrapper)
63+ else {
64+ let isDuckWrapper = match getString(Address(nftDuckWrapper), (("nft_" + toBase58String(asset.id)) + "_duckId")) {
65+ case s: String =>
66+ (size(s) > 0)
67+ case _ =>
68+ false
69+ }
70+ if (isDuckWrapper)
71+ then Address(nftDuckWrapper)
72+ else throw("Unsupported NFT for unlock")
73+ }
74+ }
75+
76+
5477 @Callable(i)
5578 func lockAndSellNFT (buyOutPrice,buyOutAssetId) = {
5679 let assetId = value(value(i.payments[0]).assetId)
5780 let asset = value(assetInfo(assetId))
58- let wrapAddress = getAddressForWrap(asset)
81+ let wrapAddress = getAddressForLock(asset)
5982 let stakedNFTIdStr = match invoke(wrapAddress, "lock", nil, [i.payments[0]]) {
6083 case s: String =>
6184 s
93116 if ((inv1 == inv1))
94117 then {
95118 let canceledAsset = value(assetInfo(fromBase58String(originalAssetId)))
96- let wrapAddress = getAddressForWrap(canceledAsset)
119+ let wrapAddress = getAddressForUnlock(canceledAsset)
97120 let unlockedNftStr = match invoke(wrapAddress, "unlock", nil, [AttachedPayment(asset.id, 1)]) {
98121 case s: String =>
99122 s
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let nftCreationAddress = base58'3P8LVqVKhTViMJau96KNir6FhHr4WnfoW57'
55
66 let signArtNftCreationAddress = base58'3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV'
77
88 let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo'
99
1010 let nftSignArtWrapper = base58'3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC'
1111
1212 let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
1313
1414 let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
1515
1616 let marketplaceContractAddress = base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc'
1717
1818 func ifSignArtNft (asset) = if (if (if ((asset.issuer.bytes == signArtNftCreationAddress))
1919 then (asset.decimals == 0)
2020 else false)
2121 then (asset.reissuable == false)
2222 else false)
2323 then (asset.quantity == 1)
2424 else false
2525
2626
2727 func ifDuckNft (asset) = if (if (if (if ((asset.issuer.bytes == incubatorAddress))
2828 then true
2929 else (asset.issuer.bytes == breederAddress))
3030 then (asset.decimals == 0)
3131 else false)
3232 then (asset.reissuable == false)
3333 else false)
3434 then (asset.quantity == 1)
3535 else false
3636
3737
3838 func isNftFromMarketplace (asset) = if (if (if ((asset.issuer.bytes == nftCreationAddress))
3939 then (asset.decimals == 0)
4040 else false)
4141 then (asset.reissuable == false)
4242 else false)
4343 then (asset.quantity == 1)
4444 else false
4545
4646
47-func getAddressForWrap (asset) = if (ifSignArtNft(asset))
47+func getAddressForLock (asset) = if (ifSignArtNft(asset))
4848 then Address(nftSignArtWrapper)
4949 else if (ifDuckNft(asset))
5050 then Address(nftDuckWrapper)
5151 else throw("Unsupported NFT attached")
5252
5353
54+func getAddressForUnlock (asset) = {
55+ let isSignArtWrapper = match getString(Address(nftSignArtWrapper), (("signArtNft_" + toBase58String(asset.id)) + "_assetId")) {
56+ case s: String =>
57+ (size(s) > 0)
58+ case _ =>
59+ false
60+ }
61+ if (isSignArtWrapper)
62+ then Address(nftSignArtWrapper)
63+ else {
64+ let isDuckWrapper = match getString(Address(nftDuckWrapper), (("nft_" + toBase58String(asset.id)) + "_duckId")) {
65+ case s: String =>
66+ (size(s) > 0)
67+ case _ =>
68+ false
69+ }
70+ if (isDuckWrapper)
71+ then Address(nftDuckWrapper)
72+ else throw("Unsupported NFT for unlock")
73+ }
74+ }
75+
76+
5477 @Callable(i)
5578 func lockAndSellNFT (buyOutPrice,buyOutAssetId) = {
5679 let assetId = value(value(i.payments[0]).assetId)
5780 let asset = value(assetInfo(assetId))
58- let wrapAddress = getAddressForWrap(asset)
81+ let wrapAddress = getAddressForLock(asset)
5982 let stakedNFTIdStr = match invoke(wrapAddress, "lock", nil, [i.payments[0]]) {
6083 case s: String =>
6184 s
6285 case _ =>
6386 throw(("Somthing wrong when lock NFT in address: " + toBase58String(wrapAddress.bytes)))
6487 }
6588 if ((stakedNFTIdStr == stakedNFTIdStr))
6689 then if ((size(stakedNFTIdStr) > 0))
6790 then {
6891 let inv = invoke(Address(marketplaceContractAddress), "sellNFT", [buyOutPrice, buyOutAssetId], [AttachedPayment(fromBase58String(stakedNFTIdStr), 1)])
6992 if ((inv == inv))
7093 then [StringEntry((("nft_" + toBase58String(assetId)) + "_owner"), toString(i.caller)), StringEntry((("nft_" + stakedNFTIdStr) + "_assetId"), toBase58String(assetId))]
7194 else throw("Strict value is not equal to itself.")
7295 }
7396 else throw("The created NFT is invalid")
7497 else throw("Strict value is not equal to itself.")
7598 }
7699
77100
78101
79102 @Callable(i)
80103 func cancelSellAndUnlock (nftId) = {
81104 let asset = value(assetInfo(fromBase58String(nftId)))
82105 let originalAssetId = getStringValue(this, (("nft_" + nftId) + "_assetId"))
83106 let ownerStr = getStringValue(this, (("nft_" + originalAssetId) + "_owner"))
84107 if (if (if (if ((size(originalAssetId) > 0))
85108 then (size(ownerStr) > 0)
86109 else false)
87110 then (toString(i.caller) == ownerStr)
88111 else false)
89112 then isNftFromMarketplace(asset)
90113 else false)
91114 then {
92115 let inv1 = invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil)
93116 if ((inv1 == inv1))
94117 then {
95118 let canceledAsset = value(assetInfo(fromBase58String(originalAssetId)))
96- let wrapAddress = getAddressForWrap(canceledAsset)
119+ let wrapAddress = getAddressForUnlock(canceledAsset)
97120 let unlockedNftStr = match invoke(wrapAddress, "unlock", nil, [AttachedPayment(asset.id, 1)]) {
98121 case s: String =>
99122 s
100123 case _ =>
101124 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(wrapAddress.bytes)))
102125 }
103126 if ((unlockedNftStr == unlockedNftStr))
104127 then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr)), DeleteEntry((("nft_" + originalAssetId) + "_owner")), DeleteEntry((("nft_" + nftId) + "_assetId"))]
105128 else throw("Strict value is not equal to itself.")
106129 }
107130 else throw("Strict value is not equal to itself.")
108131 }
109132 else throw("Ivalid NFT attached")
110133 }
111134
112135
113136 @Verifier(tx)
114137 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
115138

github/deemru/w8io/3ef1775 
34.79 ms