2022.05.04 22:52 [3102880] smart account 3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc > SELF 0.00000000 Waves

{ "type": 13, "id": "sHiCe6ABmpXMSUJ1hVGjwG2gbFsdP2ebW4MeqbcyBSL", "fee": 1400000, "feeAssetId": null, "timestamp": 1651693984454, "version": 2, "chainId": 87, "sender": "3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc", "senderPublicKey": "3pJsmGRpWHpqyaAjeX7BacMEfYx32LMNN4qwxQqASBmi", "proofs": [ "vTkbQPiJtWxG1BH9eTCVtJJ8Bsmgdhvm3h94nibureWcGN9M6r2Fy2rH7W5kr2QwGd8UjfJpyq4MHqQscH78Kw8" ], "script": "base64:AAIFAAAAAAAAABIIAhIECgIBCBIDCgEIEgMKAQgAAAAJAAAAAA1jcmVhdGVOZnREYXBwAQAAABoBV5PdxNIX5yAK/fchEk7w8HZnJoMDeNRcTAAAAAAQbWFya2V0RmVlQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBV4qsFihWQUxNjanv4vyA1vN9xNfI8yd6qgAAAAAOcm95YWx0eVBlcmNlbnQAAAAAAAAAAAoBAAAACGNoZWNrTkZUAAAAAQAAAAVhc3NldAMDAwkAAAAAAAACCAgFAAAABWFzc2V0AAAABmlzc3VlcgAAAAVieXRlcwUAAAANY3JlYXRlTmZ0RGFwcAkAAAAAAAACCAUAAAAFYXNzZXQAAAAIZGVjaW1hbHMAAAAAAAAAAAAHCQAAAAAAAAIIBQAAAAVhc3NldAAAAApyZWlzc3VhYmxlBwcJAAAAAAAAAggFAAAABWFzc2V0AAAACHF1YW50aXR5AAAAAAAAAAABBwEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgIAAAAAAQAAAA90cnlHZXRBc3NldEluZm8AAAACAAAAB2Fzc2V0SWQAAAAIZXJyb3JNc2cEAAAAByRtYXRjaDAJAAPsAAAAAQkAAlkAAAABBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABBQAAAAhlcnJvck1zZwEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAWIFAAAAByRtYXRjaDAJAAJYAAAAAQUAAAABYgIAAAAFV0FWRVMBAAAADWdldEFzc2V0Qnl0ZXMAAAABAAAACmFzc2V0SWRTdHIDCQAAAAAAAAIFAAAACmFzc2V0SWRTdHICAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAACmFzc2V0SWRTdHIAAAADAAAAAWkBAAAAB3NlbGxORlQAAAACAAAAC2J1eU91dFByaWNlAAAADWJ1eU91dEFzc2V0SWQEAAAAA3BtdAMDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAAAAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AAAAAAAAAAABBwkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABlORlQgbm90IGxpc3RlZCBhcyBwYXltZW50BAAAAAtidXlPdXRBc3NldAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAA1idXlPdXRBc3NldElkAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAAFbmZ0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAADbmZ0BAAAAAckbWF0Y2gwCQAD7AAAAAEFAAAABW5mdElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAAA5DYW4ndCBmaW5kIE5GVAMJAQAAAAhjaGVja05GVAAAAAEFAAAAA25mdAMJAABmAAAAAgUAAAALYnV5T3V0UHJpY2UAAAAAAAAAAAAEAAAADGFzc2V0TmFtZVN0cgkAAlgAAAABCAUAAAADbmZ0AAAAAmlkBAAAAA9yb3lhbHR5UmVjZWl2ZXIEAAAAByRtYXRjaDAJAAQdAAAAAgkBAAAAB0FkZHJlc3MAAAABBQAAAA1jcmVhdGVOZnREYXBwCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAMYXNzZXROYW1lU3RyAgAAAAdfaXNzdWVyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAMYXNzZXROYW1lU3RyAgAAAAxfYnV5T3V0UHJpY2UFAAAAC2J1eU91dFByaWNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAxhc3NldE5hbWVTdHICAAAADl9idXlPdXRBc3NldElkCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABBQAAAAtidXlPdXRBc3NldAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAMYXNzZXROYW1lU3RyAgAAABBfcm95YWx0eVJlY2VpdmVyBQAAAA9yb3lhbHR5UmVjZWl2ZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAADGFzc2V0TmFtZVN0cgIAAAAHX3NlbGxlcgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18JAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyAgAAAAVfbmZ0XwUAAAAMYXNzZXROYW1lU3RyBQAAAAxhc3NldE5hbWVTdHIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18JAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyAgAAAAVfbmZ0XwUAAAAMYXNzZXROYW1lU3RyAgAAAAxfc3RhcnRTYWxlQXQFAAAABmhlaWdodAUAAAADbmlsCQAAAgAAAAECAAAAH1ByaWNlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8JAAACAAAAAQIAAAAaTkZUIGlzc3VlZCBieSBhbm90aGVyIGRhcHAJAAACAAAAAQIAAAAmTkZUIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgdHJhbnNhY3Rpb24AAAABaQEAAAAGYnV5TkZUAAAAAQAAAAVuZnRJZAQAAAADcG10AwkAAAAAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAAHEF0dGFjaGVkIHBheW1lbnQgaXMgcmVxdWlyZWQEAAAAC2J1eU91dFByaWNlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAMX2J1eU91dFByaWNlBAAAAA1idXlPdXRBc3NldElkCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAA5fYnV5T3V0QXNzZXRJZAQAAAAPcm95YWx0eVJlY2VpdmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAABBfcm95YWx0eVJlY2VpdmVyBAAAAAlzZWxsZXJTdHIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAB19zZWxsZXIEAAAACG5mdEFzc2V0CQEAAAAPdHJ5R2V0QXNzZXRJbmZvAAAAAgUAAAAFbmZ0SWQCAAAADU5GVCBub3QgZm91bmQEAAAAC2J1eU91dEFzc2V0CQEAAAAPdHJ5R2V0QXNzZXRJbmZvAAAAAgUAAAANYnV5T3V0QXNzZXRJZAIAAAAWQnV5b3V0IGFzc2V0IG5vdCBmb3VuZAMDCQAAZgAAAAIFAAAAC2J1eU91dFByaWNlAAAAAAAAAAAACQAAZwAAAAIIBQAAAANwbXQAAAAGYW1vdW50BQAAAAtidXlPdXRQcmljZQcEAAAAC3JveWFsdHlQYXJ0CQAAawAAAAMFAAAAC2J1eU91dFByaWNlBQAAAA5yb3lhbHR5UGVyY2VudAAAAAAAAAAAZAQAAAAJbWFya2V0RmVlCQAAawAAAAMFAAAAC2J1eU91dFByaWNlAAAAAAAAAAAFAAAAAAAAAABkAwkAAAAAAAACCAUAAAADcG10AAAAB2Fzc2V0SWQIBQAAAAtidXlPdXRBc3NldAAAAAJpZAkABRQAAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgAAAAAAAAAAAQgFAAAACG5mdEFzc2V0AAAAAmlkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAlzZWxsZXJTdHIJAABlAAAAAgkAAGUAAAACBQAAAAtidXlPdXRQcmljZQUAAAALcm95YWx0eVBhcnQFAAAACW1hcmtldEZlZQgFAAAAC2J1eU91dEFzc2V0AAAAAmlkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAA9yb3lhbHR5UmVjZWl2ZXIFAAAAC3JveWFsdHlQYXJ0CAUAAAALYnV5T3V0QXNzZXQAAAACaWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAQbWFya2V0RmVlQWRkcmVzcwUAAAAJbWFya2V0RmVlCAUAAAALYnV5T3V0QXNzZXQAAAACaWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAxfYnV5T3V0UHJpY2UJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAA5fYnV5T3V0QXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAEF9yb3lhbHR5UmVjZWl2ZXIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAdfc2VsbGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAlzZWxsZXJTdHICAAAABV9uZnRfBQAAAAVuZnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAlzZWxsZXJTdHICAAAABV9uZnRfBQAAAAVuZnRJZAIAAAAMX3N0YXJ0U2FsZUF0BQAAAANuaWwJAAJYAAAAAQgFAAAACG5mdEFzc2V0AAAAAmlkCQAAAgAAAAECAAAAMlRoZSBidXlvdXQgYXNzZXQgZG9lcyBub3QgbWF0Y2ggdGhlIHB1cmNoYXNlIGFzc2V0CQAAAgAAAAECAAAAKFBheW1lbnQgYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8AAAABaQEAAAAKY2FuY2VsU2VsbAAAAAEAAAAFbmZ0SWQEAAAACXNlbGxlclN0cgkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAHX3NlbGxlcgQAAAAIbmZ0QXNzZXQJAQAAAA90cnlHZXRBc3NldEluZm8AAAACBQAAAAVuZnRJZAIAAAANTkZUIG5vdCBmb3VuZAMDCQAAZgAAAAIJAAExAAAAAQUAAAAJc2VsbGVyU3RyAAAAAAAAAAAACQAAAAAAAAIFAAAACXNlbGxlclN0cgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIHCQAFFAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABCAUAAAAIbmZ0QXNzZXQAAAACaWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAxfYnV5T3V0UHJpY2UJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAA5fYnV5T3V0QXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAEF9yb3lhbHR5UmVjZWl2ZXIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAdfc2VsbGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAlzZWxsZXJTdHICAAAABV9uZnRfBQAAAAVuZnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAlzZWxsZXJTdHICAAAABV9uZnRfBQAAAAVuZnRJZAIAAAAMX3N0YXJ0U2FsZUF0BQAAAANuaWwFAAAABW5mdElkCQAAAgAAAAECAAAAFFlvdSBhcmUgbm90IGEgc2VsbGVyAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXl/Ct8/", "height": 3102880, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7RZELC3E4yn8u9NTfg9nt8RaxZgF6qb9ckvDt4kYuJxR Next: 5AHiDwMYtfNWfbrGZfZMcTDonQ8ghA5HAc4f26ny9pp4 Diff:
OldNewDifferences
108108 let royaltyPart = fraction(buyOutPrice, royaltyPercent, 100)
109109 let marketFee = fraction(buyOutPrice, 5, 100)
110110 if ((pmt.assetId == buyOutAsset.id))
111- then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), ScriptTransfer(Address(fromBase58String(sellerStr)), (buyOutPrice - royaltyPart), buyOutAsset.id), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, buyOutAsset.id), ScriptTransfer(marketFeeAddress, marketFee, buyOutAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], toBase58String(nftAsset.id))
111+ then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), ScriptTransfer(Address(fromBase58String(sellerStr)), ((buyOutPrice - royaltyPart) - marketFee), buyOutAsset.id), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, buyOutAsset.id), ScriptTransfer(marketFeeAddress, marketFee, buyOutAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], toBase58String(nftAsset.id))
112112 else throw("The buyout asset does not match the purchase asset")
113113 }
114114 else throw("Payment amount must be greater than zero")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let createNftDapp = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By'
55
66 let marketFeeAddress = Address(base58'3PEa88W5it7LVPVwtpZDfYajQQWkxFNG8qf')
77
88 let royaltyPercent = 10
99
1010 func checkNFT (asset) = if (if (if ((asset.issuer.bytes == createNftDapp))
1111 then (asset.decimals == 0)
1212 else false)
1313 then (asset.reissuable == false)
1414 else false)
1515 then (asset.quantity == 1)
1616 else false
1717
1818
1919 func tryGetInteger (key) = match getInteger(this, key) {
2020 case b: Int =>
2121 b
2222 case _ =>
2323 0
2424 }
2525
2626
2727 func tryGetString (key) = match getString(this, key) {
2828 case b: String =>
2929 b
3030 case _ =>
3131 ""
3232 }
3333
3434
3535 func tryGetAssetInfo (assetId,errorMsg) = match assetInfo(fromBase58String(assetId)) {
3636 case a: Asset =>
3737 a
3838 case _ =>
3939 throw(errorMsg)
4040 }
4141
4242
4343 func getAssetString (assetId) = match assetId {
4444 case b: ByteVector =>
4545 toBase58String(b)
4646 case _ =>
4747 "WAVES"
4848 }
4949
5050
5151 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
5252 then unit
5353 else fromBase58String(assetIdStr)
5454
5555
5656 @Callable(i)
5757 func sellNFT (buyOutPrice,buyOutAssetId) = {
5858 let pmt = if (if ((size(i.payments) == 1))
5959 then (i.payments[0].amount == 1)
6060 else false)
6161 then i.payments[0]
6262 else throw("NFT not listed as payment")
6363 let buyOutAsset = getAssetBytes(buyOutAssetId)
6464 if (isDefined(pmt.assetId))
6565 then {
6666 let nftId = value(pmt.assetId)
6767 let nft = match assetInfo(nftId) {
6868 case a: Asset =>
6969 a
7070 case _ =>
7171 throw("Can't find NFT")
7272 }
7373 if (checkNFT(nft))
7474 then if ((buyOutPrice > 0))
7575 then {
7676 let assetNameStr = toBase58String(nft.id)
7777 let royaltyReceiver = match getString(Address(createNftDapp), (("nft_" + assetNameStr) + "_issuer")) {
7878 case a: String =>
7979 a
8080 case _ =>
8181 toString(i.caller)
8282 }
8383 [IntegerEntry((("nft_" + assetNameStr) + "_buyOutPrice"), buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)]
8484 }
8585 else throw("Price must be greater than zero")
8686 else throw("NFT issued by another dapp")
8787 }
8888 else throw("NFT is not attached to the transaction")
8989 }
9090
9191
9292
9393 @Callable(i)
9494 func buyNFT (nftId) = {
9595 let pmt = if ((size(i.payments) == 1))
9696 then i.payments[0]
9797 else throw("Attached payment is required")
9898 let buyOutPrice = tryGetInteger((("nft_" + nftId) + "_buyOutPrice"))
9999 let buyOutAssetId = tryGetString((("nft_" + nftId) + "_buyOutAssetId"))
100100 let royaltyReceiver = tryGetString((("nft_" + nftId) + "_royaltyReceiver"))
101101 let sellerStr = tryGetString((("nft_" + nftId) + "_seller"))
102102 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
103103 let buyOutAsset = tryGetAssetInfo(buyOutAssetId, "Buyout asset not found")
104104 if (if ((buyOutPrice > 0))
105105 then (pmt.amount >= buyOutPrice)
106106 else false)
107107 then {
108108 let royaltyPart = fraction(buyOutPrice, royaltyPercent, 100)
109109 let marketFee = fraction(buyOutPrice, 5, 100)
110110 if ((pmt.assetId == buyOutAsset.id))
111- then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), ScriptTransfer(Address(fromBase58String(sellerStr)), (buyOutPrice - royaltyPart), buyOutAsset.id), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, buyOutAsset.id), ScriptTransfer(marketFeeAddress, marketFee, buyOutAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], toBase58String(nftAsset.id))
111+ then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), ScriptTransfer(Address(fromBase58String(sellerStr)), ((buyOutPrice - royaltyPart) - marketFee), buyOutAsset.id), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, buyOutAsset.id), ScriptTransfer(marketFeeAddress, marketFee, buyOutAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], toBase58String(nftAsset.id))
112112 else throw("The buyout asset does not match the purchase asset")
113113 }
114114 else throw("Payment amount must be greater than zero")
115115 }
116116
117117
118118
119119 @Callable(i)
120120 func cancelSell (nftId) = {
121121 let sellerStr = tryGetString((("nft_" + nftId) + "_seller"))
122122 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
123123 if (if ((size(sellerStr) > 0))
124124 then (sellerStr == toString(i.originCaller))
125125 else false)
126126 then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], nftId)
127127 else throw("You are not a seller")
128128 }
129129
130130
131131 @Verifier(tx)
132132 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
133133

github/deemru/w8io/786bc32 
49.29 ms