tx · GWyDKJWV4boixsSnPnXMUXk1k6mWQLmcQS4vsa6v8DwL

3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A:  -0.01400000 Waves

2022.02.24 00:33 [3001937] smart account 3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A > SELF 0.00000000 Waves

{ "type": 13, "id": "GWyDKJWV4boixsSnPnXMUXk1k6mWQLmcQS4vsa6v8DwL", "fee": 1400000, "feeAssetId": null, "timestamp": 1645652098871, "version": 2, "chainId": 87, "sender": "3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A", "senderPublicKey": "A96wNJF8YTgx1J9Q4nK3oqNoExh6dPSyFAdEkmzN7XDa", "proofs": [ "5hXdCvhTdXgwn6KqQQVgdNResbrvtaBxEyZaBtRUSnQwFqrUVgC1MfgrGmvZWfAJwDxXeQ134rYADqvifg2pnvAu" ], "script": "base64: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", "height": 3001937, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 89NdQnAusmqhWn2q2LbrceCDnXKbsKUQjeQem7gAuofC Next: Qk5H3EezhDFKqyYH2AEcVAsCZpZFGuDSZgCAE81gB4K Diff:
OldNewDifferences
6767 then {
6868 let inv = invoke(Address(marketplaceContractAddress), "sellNFT", [buyOutPrice, buyOutAssetId], [AttachedPayment(fromBase58String(stakedNFTIdStr), 1)])
6969 if ((inv == inv))
70- then nil
70+ then [StringEntry((("nft_" + toBase58String(assetId)) + "_owner"), toString(i.caller)), StringEntry((("nft_" + stakedNFTIdStr) + "_assetId"), toBase58String(assetId))]
7171 else throw("Strict value is not equal to itself.")
7272 }
7373 else throw("The created NFT is invalid")
7979 @Callable(i)
8080 func cancelSellAndUnlock (nftId) = {
8181 let asset = value(assetInfo(fromBase58String(nftId)))
82- let originalSAAssetId = getStringValue(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId"))
83- if (if ((size(originalSAAssetId) > 0))
82+ let originalAssetId = getStringValue(this, (("nft_" + nftId) + "_assetId"))
83+ let ownerStr = getStringValue(this, (("nft_" + originalAssetId) + "_owner"))
84+ if (if (if (if ((size(originalAssetId) > 0))
85+ then (size(ownerStr) > 0)
86+ else false)
87+ then (toString(i.caller) == ownerStr)
88+ else false)
8489 then isNftFromMarketplace(asset)
8590 else false)
8691 then {
8792 let inv1 = invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil)
8893 if ((inv1 == inv1))
8994 then {
90- let canceledAsset = value(assetInfo(fromBase58String(originalSAAssetId)))
95+ let canceledAsset = value(assetInfo(fromBase58String(originalAssetId)))
9196 let wrapAddress = getAddressForWrap(canceledAsset)
9297 let unlockedNftStr = match invoke(wrapAddress, "unlock", nil, [AttachedPayment(asset.id, 1)]) {
9398 case s: String =>
96101 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(wrapAddress.bytes)))
97102 }
98103 if ((unlockedNftStr == unlockedNftStr))
99- then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
104+ then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr)), DeleteEntry((("nft_" + originalAssetId) + "_owner")), DeleteEntry((("nft_" + nftId) + "_assetId"))]
100105 else throw("Strict value is not equal to itself.")
101106 }
102107 else throw("Strict value is not equal to itself.")
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
4747 func getAddressForWrap (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
5454 @Callable(i)
5555 func lockAndSellNFT (buyOutPrice,buyOutAssetId) = {
5656 let assetId = value(value(i.payments[0]).assetId)
5757 let asset = value(assetInfo(assetId))
5858 let wrapAddress = getAddressForWrap(asset)
5959 let stakedNFTIdStr = match invoke(wrapAddress, "lock", nil, [i.payments[0]]) {
6060 case s: String =>
6161 s
6262 case _ =>
6363 throw(("Somthing wrong when lock NFT in address: " + toBase58String(wrapAddress.bytes)))
6464 }
6565 if ((stakedNFTIdStr == stakedNFTIdStr))
6666 then if ((size(stakedNFTIdStr) > 0))
6767 then {
6868 let inv = invoke(Address(marketplaceContractAddress), "sellNFT", [buyOutPrice, buyOutAssetId], [AttachedPayment(fromBase58String(stakedNFTIdStr), 1)])
6969 if ((inv == inv))
70- then nil
70+ then [StringEntry((("nft_" + toBase58String(assetId)) + "_owner"), toString(i.caller)), StringEntry((("nft_" + stakedNFTIdStr) + "_assetId"), toBase58String(assetId))]
7171 else throw("Strict value is not equal to itself.")
7272 }
7373 else throw("The created NFT is invalid")
7474 else throw("Strict value is not equal to itself.")
7575 }
7676
7777
7878
7979 @Callable(i)
8080 func cancelSellAndUnlock (nftId) = {
8181 let asset = value(assetInfo(fromBase58String(nftId)))
82- let originalSAAssetId = getStringValue(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId"))
83- if (if ((size(originalSAAssetId) > 0))
82+ let originalAssetId = getStringValue(this, (("nft_" + nftId) + "_assetId"))
83+ let ownerStr = getStringValue(this, (("nft_" + originalAssetId) + "_owner"))
84+ if (if (if (if ((size(originalAssetId) > 0))
85+ then (size(ownerStr) > 0)
86+ else false)
87+ then (toString(i.caller) == ownerStr)
88+ else false)
8489 then isNftFromMarketplace(asset)
8590 else false)
8691 then {
8792 let inv1 = invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil)
8893 if ((inv1 == inv1))
8994 then {
90- let canceledAsset = value(assetInfo(fromBase58String(originalSAAssetId)))
95+ let canceledAsset = value(assetInfo(fromBase58String(originalAssetId)))
9196 let wrapAddress = getAddressForWrap(canceledAsset)
9297 let unlockedNftStr = match invoke(wrapAddress, "unlock", nil, [AttachedPayment(asset.id, 1)]) {
9398 case s: String =>
9499 s
95100 case _ =>
96101 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(wrapAddress.bytes)))
97102 }
98103 if ((unlockedNftStr == unlockedNftStr))
99- then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
104+ then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr)), DeleteEntry((("nft_" + originalAssetId) + "_owner")), DeleteEntry((("nft_" + nftId) + "_assetId"))]
100105 else throw("Strict value is not equal to itself.")
101106 }
102107 else throw("Strict value is not equal to itself.")
103108 }
104109 else throw("Ivalid NFT attached")
105110 }
106111
107112
108113 @Verifier(tx)
109114 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
110115

github/deemru/w8io/3ef1775 
51.40 ms