tx · FDTzkV9ykrp1TUDXVnRqLzjcRCDuCVGZ61V4E4DnmKhX

3N6kySBFK2Uecrwe171vuJt2GXQ6pfxuqga:  -0.01000000 Waves

2022.02.15 08:33 [1924323] smart account 3N6kySBFK2Uecrwe171vuJt2GXQ6pfxuqga > SELF 0.00000000 Waves

{ "type": 13, "id": "FDTzkV9ykrp1TUDXVnRqLzjcRCDuCVGZ61V4E4DnmKhX", "fee": 1000000, "feeAssetId": null, "timestamp": 1644903196928, "version": 2, "chainId": 84, "sender": "3N6kySBFK2Uecrwe171vuJt2GXQ6pfxuqga", "senderPublicKey": "GDXG97kJ5xw1kyc1K28CGtswEozf1q8KPo8C2DFPxkHs", "proofs": [ "4RyQM7HvUMMe6ruBVzejQXmD9sf5nCzdkvuT3VhwAnRCzT3bh9MF82yHLbr1xzw8pLSohq7uzxZV3sbVoWtkZVL1" ], "script": "base64:AAIFAAAAAAAAAEcIAhIECgIECBIECgIBCBIFCgMIAQgSAwoBCBIDCgEIEgMKAQgSBQoDCAgIEgYKBAgICAgSBAoCCAgSBQoDCAgIEgUKAwgICAAAADUAAAAACHVuaXRUZXN0BgAAAAARdW5pdFRlc3RTZWNvbmRhcnkGAAAAAAxhcnR3b3Jrc0RhcHADBQAAABF1bml0VGVzdFNlY29uZGFyeQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjdpajFIUFRvM2JjQndpWWZDc3VDdDVVN3NDalFCek1lRQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkJ5bmZiWEMyS2FzdFV4aHVrY01VYUU1OEs5Y0JkQjlVWQAAAAAIdXNlckRhcHADBQAAAAh1bml0VGVzdAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjh4WGFZakUyN0FhNzlkNWhIcmhIdTlIYUZvVEJtaERFagAAAAAJb3JhY2xlRmVlCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOMnM1UnRhSFBCZW5Dc3gyRUNjb0ZSYllIeDNub1poWFcxAAAAAAhzaWduRGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkMyOGhTaXZybXNUVVhhWUQxeDZMMzYySjRacFVub1RkQgAAAAALZmVlUmVjZWl2ZXICAAAAIzNOMUU2dFhkZFJvVmFSZlE5ZFEzdmc1TGFXMmZzZDhIS3ViAAAAAA13aGl0ZWxpc3REYXBwCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNONkJhVjFkQ0I0emc0M2dvTk5IYUN0dlIxM0JjeUo1R3NxAAAAAAtzaWduQXNzZXRJZAEAAAAg6KVqvMp3QvJwYTI1Sk9Fg7m5HuWZZxfDcerZC6EEresAAAAAC3VzZG5Bc3NldElkAQAAACAP8hwSrOTEPJrsRhqrJaiw7LoHK0bMbYhy8LXikkkBtAAAAAAMd2F2ZXNBc3NldElkAQAAAAAAAAAABWNocmlzAgAAACMzTXNHNmpQTkNyVkpVdFlCN1hKQnhTN3V0V3NYQWY0bjlWcAAAAAAHc2lnbkN1dAAAAAAAAAAAAwAAAAAKY3JlYXRvckN1dAAAAAAAAAAACgAAAAANdXNlclN1c3BlbmRlZAIAAAAJU1VTUEVOREVEAAAAAAt1c2VyUmVtb3ZlZAIAAAAHUkVNT1ZFRAAAAAAKYXJ0SWxsZWdhbAIAAAAHSUxMRUdBTAAAAAAMYXJ0U3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAADmRhcHBSdW5uaW5nS2V5AgAAABRjb25mX2RhcHBfaXNfcnVubmluZwAAAAARbWFpbnRlbmFuY2VNU0dLZXkCAAAAFGNvbmZfbWFpbnRlbmFuY2VfbXNnAAAAAAtkYXBwUnVubmluZwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzBQAAAA5kYXBwUnVubmluZ0tleQYAAAAADm1haW50ZW5hbmNlTVNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAEW1haW50ZW5hbmNlTVNHS2V5AgAAAAAAAAAACW51bVNhbGVzSwIAAAAJbnVtX3NhbGVzAQAAAA1nZXRVc2VyU3RyQnlLAAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHAFAAAAA2tleQIAAAAFRXJyb3IBAAAADGdldEFydFN0ckJ5SwAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAADGFydHdvcmtzRGFwcAUAAAADa2V5AgAAAAABAAAACWdldFN0ckJ5SwAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAAAlnZXRJbnRCeUsAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkAAAAAAAAAAAABAAAADWtleVVzZXJTdGF0dXMAAAABAAAABGFkZHIJAAEsAAAAAgIAAAAMdXNlcl9zdGF0dXNfBQAAAARhZGRyAQAAAAlrZXlTaWduSUQAAAACAAAACmFydGlzdEFkZHIAAAAFYXJ0SWQJAAEsAAAAAgkAASwA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AAAOYW1vdW50Rm9yT3duZXIJAABlAAAAAgUAAAAGYW1vdW50CQAAZAAAAAIFAAAADWFtb3VudEZvclNpZ24FAAAAEGFtb3VudEZvckNyZWF0b3IEAAAAB3NpZ25GZWUJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAtmZWVSZWNlaXZlcgUAAAANYW1vdW50Rm9yU2lnbgUAAAAHYXNzZXRJZAQAAAAKY3JlYXRvckZlZQkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAC2NyZWF0b3JBZGRyBQAAABBhbW91bnRGb3JDcmVhdG9yBQAAAAdhc3NldElkBAAAAAhvd25lckZlZQkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAACXNhbGVPd25lcgUAAAAOYW1vdW50Rm9yT3duZXIFAAAAB2Fzc2V0SWQEAAAADGNvbGxlY3Rvck5GVAkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAABmNhbGxlcgAAAAAAAAAAAQkAAlkAAAABBQAAAAVuZnRpZAkABRYAAAAEBQAAAAdzaWduRmVlBQAAAApjcmVhdG9yRmVlBQAAAAhvd25lckZlZQUAAAAMY29sbGVjdG9yTkZUAQAAAA92YWxpZGF0ZU1pblNlbGwAAAACAAAAB2Fzc2V0SWQAAAAFcHJpY2UEAAAADG1pblNlbGxXYXZlcwMFAAAACHVuaXRUZXN0AAAAAAAAAAAKCQEAAAATZ2V0SW50QnlLRnJvbU9yYWNsZQAAAAECAAAADndhdmVzX21pbl9zZWxsBAAAAAttaW5TZWxsVXNkbgAAAAAAAA9CQAQAAAALbWluU2VsbFNpZ24DBQAAAAh1bml0VGVzdAAAAAAAAAAAAQkAAGgAAAACBQAAABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlAAAAAAAAAAACAwMDAwMJAAAAAAAAAgUAAAAHYXNzZXRJZAkAAlgAAAABBQAAAAt1c2RuQXNzZXRJZAkAAGYAAAACBQAAAAttaW5TZWxsVXNkbgUAAAAF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", "height": 1924323, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let unitTest = true
5+
6+let unitTestSecondary = true
7+
8+let artworksDapp = if (unitTestSecondary)
9+ then value(addressFromString("3N7ij1HPTo3bcBwiYfCsuCt5U7sCjQBzMeE"))
10+ else value(addressFromString("3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY"))
11+
12+let userDapp = if (unitTest)
13+ then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
14+ else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
15+
16+let oracleFee = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
17+
18+let signDapp = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
19+
20+let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
21+
22+let whitelistDapp = value(addressFromString("3N6BaV1dCB4zg43goNNHaCtvR13BcyJ5Gsq"))
23+
24+let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
25+
26+let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
27+
28+let wavesAssetId = base58''
29+
30+let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
31+
32+let signCut = 3
33+
34+let creatorCut = 10
35+
36+let userSuspended = "SUSPENDED"
37+
38+let userRemoved = "REMOVED"
39+
40+let artIllegal = "ILLEGAL"
41+
42+let artSuspended = "SUSPENDED"
43+
44+let dappRunningKey = "conf_dapp_is_running"
45+
46+let maintenanceMSGKey = "conf_maintenance_msg"
47+
48+let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
49+
50+let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
51+
52+let numSalesK = "num_sales"
53+
54+func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
55+
56+
57+func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
58+
59+
60+func getStrByK (key) = valueOrElse(getString(this, key), "")
61+
62+
63+func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
64+
65+
66+func keyUserStatus (addr) = ("user_status_" + addr)
67+
68+
69+func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
70+
71+
72+func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
73+
74+
75+func keyNFTData (id) = ("nft_" + id)
76+
77+
78+func getSaleKey (caller,nftId,artId,creatorAddr) = ((((((("sale2nd_info_" + caller) + "_") + nftId) + "_") + artId) + "_") + creatorAddr)
79+
80+
81+func getBidKey (offerOwner,nftId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + nftId) + "_") + saleOwner) + "_") + offerId)
82+
83+
84+func getRequestKey (requestOwner,creatorAddr,artId,id) = ((((((("request2nd_" + requestOwner) + "_") + creatorAddr) + "_") + artId) + "_") + id)
85+
86+
87+func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
88+
89+
90+let currentCertificationPrice = getIntByKFromOracle(("certification_fee_" + toBase58String(signAssetId)))
91+
92+func idCallerDate (i) = if (!(dappRunning))
93+ then throw(maintenanceMSG)
94+ else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
95+
96+
97+func isPayment (i) = if ((size(i.payments) == 0))
98+ then throw("No payment attached")
99+ else {
100+ let payment = value(i.payments[0])
101+ let amount = value(payment.amount)
102+ $Tuple2(payment, amount)
103+ }
104+
105+
106+func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
107+ then (assetDetails.decimals == 0)
108+ else false)
109+ then (assetDetails.reissuable == false)
110+ else false)
111+ then (assetDetails.issuer == artworksDapp)
112+ else false
113+
114+
115+func isSignArtNFT (id) = {
116+ let assetDetails = value(assetInfo(id))
117+ assetIsValid(assetDetails)
118+ }
119+
120+
121+func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
122+ then (assetId != toBase58String(wavesAssetId))
123+ else false)
124+ then (assetId != "WAVES")
125+ else false)
126+ then (assetId != toBase58String(usdnAssetId))
127+ else false)
128+ then false
129+ else true
130+
131+
132+func getBidAssetId (assetId) = if ((assetId == "WAVES"))
133+ then unit
134+ else fromBase58String(assetId)
135+
136+
137+func getSaleOwnerAndStatus (nftid) = {
138+ let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
139+ if ((size(saleOwner) == 0))
140+ then throw("NFT not found")
141+ else {
142+ let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
143+ if ((saleStatus != "OPEN"))
144+ then throw("NFT not for sale")
145+ else saleOwner
146+ }
147+ }
148+
149+
150+func getBidData (key) = {
151+ let bidData = getStrByK((key + "_OPEN"))
152+ if ((bidData == ""))
153+ then throw("Offer not found")
154+ else {
155+ let bidDataArr = split(bidData, "_")
156+ let assetId = getBidAssetId(bidDataArr[2])
157+ $Tuple3(bidDataArr, assetId, bidData)
158+ }
159+ }
160+
161+
162+func artIsValid (artStatus) = if ((artStatus != artIllegal))
163+ then (artStatus != artSuspended)
164+ else false
165+
166+
167+func checkArtStatus (addr,id) = {
168+ let artStatus = getArtStrByK(keyFlag(addr, id))
169+ if (artIsValid(artStatus))
170+ then true
171+ else throw(("Original Artwork flagged as " + artStatus))
172+ }
173+
174+
175+func checkArtistStatus (addr) = {
176+ let artistStatus = getUserStrByK(keyUserStatus(addr))
177+ if (containsElement([userSuspended, userRemoved], artistStatus))
178+ then throw(("Original Artist " + artistStatus))
179+ else true
180+ }
181+
182+
183+func checkNFTInfo (assetId) = {
184+ let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
185+ let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
186+ if (if (!(checkArtStatus(nftData[6], nftData[5])))
187+ then !(checkArtistStatus(nftData[6]))
188+ else false)
189+ then $Tuple4(false, nftData[5], nftData[6], artSignID)
190+ else $Tuple4(true, nftData[5], nftData[6], artSignID)
191+ }
192+
193+
194+func checkARTExist (artId,creatorAddr) = {
195+ let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
196+ if ((size(artSignID) == 0))
197+ then throw("Artwork not found on SIGN Art")
198+ else if (if (!(checkArtStatus(creatorAddr, artId)))
199+ then !(checkArtistStatus(creatorAddr))
200+ else false)
201+ then false
202+ else true
203+ }
204+
205+
206+func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller) = {
207+ let amountForSign = fraction(amount, signCut, 100)
208+ let amountForCreator = fraction(amount, creatorCut, 100)
209+ let amountForOwner = (amount - (amountForSign + amountForCreator))
210+ let signFee = ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)
211+ let creatorFee = ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)
212+ let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
213+ let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
214+ $Tuple4(signFee, creatorFee, ownerFee, collectorNFT)
215+ }
216+
217+
218+func validateMinSell (assetId,price) = {
219+ let minSellWaves = if (unitTest)
220+ then 10
221+ else getIntByKFromOracle("waves_min_sell")
222+ let minSellUsdn = 1000000
223+ let minSellSign = if (unitTest)
224+ then 1
225+ else (currentCertificationPrice * 2)
226+ if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
227+ then (minSellUsdn > price)
228+ else false)
229+ then (price != 0)
230+ else false)
231+ then true
232+ else if (if ((assetId == toBase58String(signAssetId)))
233+ then (minSellSign > price)
234+ else false)
235+ then (price != 0)
236+ else false)
237+ then true
238+ else if (if (if ((assetId == toBase58String(wavesAssetId)))
239+ then true
240+ else (assetId == "WAVES"))
241+ then (minSellWaves > price)
242+ else false)
243+ then (price != 0)
244+ else false)
245+ then false
246+ else true
247+ }
248+
249+
250+func provideBaseData (i,nftId) = {
251+ let $t092269265 = idCallerDate(i)
252+ let id = $t092269265._1
253+ let caller = $t092269265._2
254+ let date = $t092269265._3
255+ let $t092699338 = checkNFTInfo(nftId)
256+ let isValidNFT = $t092699338._1
257+ let artId = $t092699338._2
258+ let creatorAddr = $t092699338._3
259+ let artSignID = $t092699338._4
260+ $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
261+ }
262+
263+
264+func updateNumSales () = {
265+ let numSales = getIntByK(numSalesK)
266+ IntegerEntry(numSalesK, (numSales + 1))
267+ }
268+
269+
270+@Callable(invoke)
271+func appRunning (isLive,message) = {
272+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
273+ let id = toBase58String(invoke.transactionId)
274+ if (containsElement([chris, toString(this)], caller))
275+ then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
276+ else throw("You are not allowed to change this")
277+ }
278+
279+
280+
281+@Callable(i)
282+func sellNFT (price,asset) = {
283+ let $t01007810114 = isPayment(i)
284+ let payment = $t01007810114._1
285+ let amount = $t01007810114._2
286+ if ((amount != 1))
287+ then throw("No NFT attached")
288+ else {
289+ let nftId = if (if (isDefined(payment.assetId))
290+ then isSignArtNFT(value(payment.assetId))
291+ else false)
292+ then toBase58String(value(payment.assetId))
293+ else throw("Only SIGN Art NFT accepted.")
294+ let $t01035210444 = provideBaseData(i, nftId)
295+ let id = $t01035210444._1
296+ let caller = $t01035210444._2
297+ let date = $t01035210444._3
298+ let isValidNFT = $t01035210444._4
299+ let artId = $t01035210444._5
300+ let creatorAddr = $t01035210444._6
301+ let artSignID = $t01035210444._7
302+ if ((size(artSignID) == 0))
303+ then throw("Artwork not found on SIGN Art")
304+ else if (!(isValidNFT))
305+ then throw("Not a valid nft")
306+ else if (!(acceptedAssetIds(asset)))
307+ then throw("Only SIGN, USDN or WAVES accepted")
308+ else if (!(validateMinSell(asset, price)))
309+ then throw("Wrong minimum sell price")
310+ else [StringEntry((getSaleKey(caller, nftId, artId, creatorAddr) + "_OPEN"), ((((((((((((toString(date) + "_") + toString(price)) + "_") + asset) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + id)), StringEntry(((("sale2nd_status_" + caller) + "_") + nftId), "OPEN"), StringEntry(("current_owner_on_dapp_" + nftId), caller)]
311+ }
312+ }
313+
314+
315+
316+@Callable(i)
317+func updateSalePrice (nftId,price,asset) = {
318+ let $t01134211434 = provideBaseData(i, nftId)
319+ let id = $t01134211434._1
320+ let caller = $t01134211434._2
321+ let date = $t01134211434._3
322+ let isValidNFT = $t01134211434._4
323+ let artId = $t01134211434._5
324+ let creatorAddr = $t01134211434._6
325+ let artSignID = $t01134211434._7
326+ if ((size(artSignID) == 0))
327+ then throw("Artwork not found on SIGN Art, cancel your sale.")
328+ else if (!(isValidNFT))
329+ then throw("Not a valid nft")
330+ else {
331+ let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
332+ if ((saleOwner != caller))
333+ then throw("You don't own this NFT")
334+ else {
335+ let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
336+ if ((saleStatus != "OPEN"))
337+ then throw("Sale not active")
338+ else if (!(acceptedAssetIds(asset)))
339+ then throw("Only SIGN, USDN or WAVES accepted")
340+ else if (!(validateMinSell(asset, price)))
341+ then throw("Wrong minimum sell price")
342+ else {
343+ let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
344+ let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
345+[StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
346+ }
347+ }
348+ }
349+ }
350+
351+
352+
353+@Callable(i)
354+func cancelSale (nftId) = {
355+ let $t01260512848 = provideBaseData(i, nftId)
356+ let id = $t01260512848._1
357+ let caller = $t01260512848._2
358+ let date = $t01260512848._3
359+ let isValidNFT = $t01260512848._4
360+ let artId = $t01260512848._5
361+ let creatorAddr = $t01260512848._6
362+ let artSignID = $t01260512848._7
363+ let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
364+ if ((saleOwner != caller))
365+ then throw("You don't own this NFT")
366+ else {
367+ let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
368+ if ((saleStatus != "OPEN"))
369+ then throw("Sale not active")
370+ else {
371+ let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
372+ let saleInfo = getStrByK((saleKey + "_OPEN"))
373+[DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + caller) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CANCELLED"), ((((saleInfo + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftId))]
374+ }
375+ }
376+ }
377+
378+
379+
380+@Callable(i)
381+func buyNFT (nftId) = {
382+ let $t01370213794 = provideBaseData(i, nftId)
383+ let id = $t01370213794._1
384+ let caller = $t01370213794._2
385+ let date = $t01370213794._3
386+ let isValidNFT = $t01370213794._4
387+ let artId = $t01370213794._5
388+ let creatorAddr = $t01370213794._6
389+ let artSignID = $t01370213794._7
390+ if ((size(artSignID) == 0))
391+ then throw("Artwork not found on SIGN Art, cancel your sale.")
392+ else if (!(isValidNFT))
393+ then throw("Not a valid nft")
394+ else {
395+ let saleOwner = getSaleOwnerAndStatus(nftId)
396+ let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
397+ let saleInfo = getStrByK((saleKey + "_OPEN"))
398+ if ((size(saleInfo) == 0))
399+ then throw("Sale Not found!")
400+ else {
401+ let saleInfoArray = split(saleInfo, "_")
402+ if ((parseInt(saleInfoArray[1]) == 0))
403+ then throw("Offer only")
404+ else {
405+ let $t01430314339 = isPayment(i)
406+ let payment = $t01430314339._1
407+ let amount = $t01430314339._2
408+ let paymentAssetStr = if (isDefined(payment.assetId))
409+ then toBase58String(value(payment.assetId))
410+ else ""
411+ if (if ((saleInfoArray[1] != toString(amount)))
412+ then true
413+ else (saleInfoArray[2] != paymentAssetStr))
414+ then throw("Payment infos don't match.")
415+ else {
416+ let amountForSign = fraction(amount, signCut, 100)
417+ let amountForCreator = fraction(amount, creatorCut, 100)
418+ let amountForOwner = (amount - (amountForSign + amountForCreator))
419+ let $t01485014978 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller)
420+ let signFee = $t01485014978._1
421+ let creatorFee = $t01485014978._2
422+ let ownerFee = $t01485014978._3
423+ let collectorNFT = $t01485014978._4
424+[DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), signFee, creatorFee, ownerFee, collectorNFT]
425+ }
426+ }
427+ }
428+ }
429+ }
430+
431+
432+
433+@Callable(i)
434+func setOffer (nftId) = {
435+ let $t01540315499 = provideBaseData(i, nftId)
436+ let id = $t01540315499._1
437+ let offerOwner = $t01540315499._2
438+ let date = $t01540315499._3
439+ let isValidNFT = $t01540315499._4
440+ let artId = $t01540315499._5
441+ let creatorAddr = $t01540315499._6
442+ let artSignID = $t01540315499._7
443+ if (!(isValidNFT))
444+ then throw("Not a valid nft")
445+ else {
446+ let $t01556315599 = isPayment(i)
447+ let payment = $t01556315599._1
448+ let amount = $t01556315599._2
449+ let assetId = if (!(isDefined(payment.assetId)))
450+ then "WAVES"
451+ else toBase58String(value(payment.assetId))
452+ if (!(acceptedAssetIds(assetId)))
453+ then throw("asset not accepted")
454+ else if ((amount == 0))
455+ then throw("Offer of 0 not allowed")
456+ else if (!(validateMinSell(assetId, amount)))
457+ then throw("Wrong minimum sell price")
458+ else {
459+ let saleOwner = getSaleOwnerAndStatus(nftId)
460+[StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
461+ }
462+ }
463+ }
464+
465+
466+
467+@Callable(i)
468+func acceptOffer (nftId,offerId,offerOwner) = {
469+ let $t01642016512 = provideBaseData(i, nftId)
470+ let id = $t01642016512._1
471+ let caller = $t01642016512._2
472+ let date = $t01642016512._3
473+ let isValidNFT = $t01642016512._4
474+ let artId = $t01642016512._5
475+ let creatorAddr = $t01642016512._6
476+ let artSignID = $t01642016512._7
477+ if (!(isValidNFT))
478+ then throw("Not a valid nft")
479+ else {
480+ let saleOwner = getSaleOwnerAndStatus(nftId)
481+ if ((caller != saleOwner))
482+ then throw("Only sale owner can accept offer")
483+ else {
484+ let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
485+ let $t01677316828 = getBidData(bidKey)
486+ let bidDataArr = $t01677316828._1
487+ let assetId = $t01677316828._2
488+ let bidData = $t01677316828._3
489+ let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
490+ let saleInfo = getStrByK((saleKey + "_OPEN"))
491+ if ((size(saleInfo) == 0))
492+ then throw("Sale Not found!")
493+ else {
494+ let amount = value(parseInt(bidDataArr[1]))
495+ let $t01706717194 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6])
496+ let signFee = $t01706717194._1
497+ let creatorFee = $t01706717194._2
498+ let ownerFee = $t01706717194._3
499+ let collectorNFT = $t01706717194._4
500+ let assetIdStr = if (isDefined(assetId))
501+ then toBase58String(value(assetId))
502+ else "WAVES"
503+[DeleteEntry((saleKey + "_OPEN")), DeleteEntry((bidKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((bidKey + "_CLOSED"), ((((bidData + "_CLOSED_") + toString(date)) + "_") + id)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((((((saleInfo + "_CLOSED-OFFER_") + toString(date)) + "_") + id) + "_") + offerOwner) + "_") + toString(amount)) + "_") + assetIdStr)), updateNumSales(), signFee, creatorFee, ownerFee, collectorNFT]
504+ }
505+ }
506+ }
507+ }
508+
509+
510+
511+@Callable(i)
512+func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
513+ let $t01801518088 = idCallerDate(i)
514+ let id = $t01801518088._1
515+ let caller = $t01801518088._2
516+ let date = $t01801518088._3
517+ if (if ((caller != offerOwner))
518+ then (caller != saleOwner)
519+ else false)
520+ then throw("You cannot cancel this offer.")
521+ else {
522+ let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
523+ let $t01826218317 = getBidData(bidKey)
524+ let bidDataArr = $t01826218317._1
525+ let assetId = $t01826218317._2
526+ let bidData = $t01826218317._3
527+[DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
528+ }
529+ }
530+
531+
532+
533+@Callable(i)
534+func makeRequest (artId,creatorAddr) = {
535+ let $t01865518699 = idCallerDate(i)
536+ let id = $t01865518699._1
537+ let requestOwner = $t01865518699._2
538+ let date = $t01865518699._3
539+ let $t01870718743 = isPayment(i)
540+ let payment = $t01870718743._1
541+ let amount = $t01870718743._2
542+ let assetId = if (!(isDefined(payment.assetId)))
543+ then "WAVES"
544+ else toBase58String(value(payment.assetId))
545+ if (!(acceptedAssetIds(assetId)))
546+ then throw("asset not accepted")
547+ else if (!(validateMinSell(assetId, amount)))
548+ then throw("Wrong minimum sell price")
549+ else {
550+ let isValidART = checkARTExist(artId, creatorAddr)
551+ if (!(isValidART))
552+ then throw("Something went wrong")
553+ else [StringEntry((getRequestKey(requestOwner, creatorAddr, artId, id) + "_OPEN"), ((((((((((toString(date) + "_") + toString(amount)) + "_") + toBase58String(value(payment.assetId))) + "_") + artId) + "_") + requestOwner) + "_") + id))]
554+ }
555+ }
556+
557+
558+
559+@Callable(i)
560+func fillRequest (artId,requestOwner,offerId) = {
561+ let $t01955619598 = idCallerDate(i)
562+ let id = $t01955619598._1
563+ let saleOwner = $t01955619598._2
564+ let date = $t01955619598._3
565+ let $t01960419648 = isPayment(i)
566+ let payment = $t01960419648._1
567+ let amountAttached = $t01960419648._2
568+ let NFTid = if (if (isDefined(payment.assetId))
569+ then isSignArtNFT(value(payment.assetId))
570+ else false)
571+ then payment.assetId
572+ else throw("No NFT found")
573+ let NFTdata = split(getArtStrByK(("nft_" + toBase58String(value(NFTid)))), "_")
574+ if ((size(NFTdata) == 0))
575+ then throw("No NFT found")
576+ else {
577+ let requestKey = getRequestKey(requestOwner, NFTdata[6], artId, offerId)
578+ let requestData = split(getStrByK((requestKey + "_OPEN")), "_")
579+ if ((size(requestData) == 1))
580+ then throw("No request found")
581+ else if ((requestData[3] != NFTdata[5]))
582+ then throw("This NFT don't match the requested artwork")
583+ else {
584+ let amount = value(parseInt(requestData[1]))
585+ let $t02040320578 = setTransfers(amount, fromBase58String(requestData[2]), toBase58String(value(NFTid)), NFTdata[6], saleOwner, requestData[4])
586+ let signFee = $t02040320578._1
587+ let creatorFee = $t02040320578._2
588+ let ownerFee = $t02040320578._3
589+ let collectorNFT = $t02040320578._4
590+[DeleteEntry((requestKey + "_OPEN")), updateNumSales(), StringEntry((requestKey + "_CLOSED"), ((((((((((((toString(date) + "_") + toString(amount)) + "_") + requestData[2]) + "_") + artId) + "_") + requestOwner) + "_") + saleOwner) + "_") + id)), signFee, creatorFee, ownerFee, collectorNFT]
591+ }
592+ }
593+ }
594+
595+
596+
597+@Callable(i)
598+func cancelRequest (artId,creatorAddr,requestId) = {
599+ let $t02106821112 = idCallerDate(i)
600+ let id = $t02106821112._1
601+ let requestOwner = $t02106821112._2
602+ let date = $t02106821112._3
603+ let requestKey = getRequestKey(requestOwner, creatorAddr, artId, requestId)
604+ let requestData = getStrByK((requestKey + "_OPEN"))
605+ if ((size(requestData) == 0))
606+ then throw("Request not found")
607+ else {
608+ let requestDataArr = split(requestData, "_")
609+[DeleteEntry((requestKey + "_OPEN")), StringEntry((((((requestKey + "_") + toString(date)) + "_") + id) + "_CANCELLED"), ((requestData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(requestOwner)), parseIntValue(requestDataArr[1]), fromBase58String(requestDataArr[2]))]
610+ }
611+ }
612+
613+

github/deemru/w8io/169f3d6 
74.51 ms