tx · BG4RC62midFT4Fgi1ByaNowSrwcu7XiHoPiKSp4bLUGe

3N9yxjwDM9T8cFxAxjrw8k5wiGxRxHh9FdW:  -0.01400000 Waves

2021.05.17 14:04 [1529594] smart account 3N9yxjwDM9T8cFxAxjrw8k5wiGxRxHh9FdW > SELF 0.00000000 Waves

{ "type": 13, "id": "BG4RC62midFT4Fgi1ByaNowSrwcu7XiHoPiKSp4bLUGe", "fee": 1400000, "feeAssetId": null, "timestamp": 1621249474443, "version": 2, "chainId": 84, "sender": "3N9yxjwDM9T8cFxAxjrw8k5wiGxRxHh9FdW", "senderPublicKey": "7nc1RVTNTXy1DvKS2F4boNQWQir3Lqpvi8zMoo42M3nP", "proofs": [ "5KNY9K6CHXvY2D9cNpmq6KuGkVX794bB2iwAQhLaeQtWwhMujCdDSUQZLspPwG3obKpnVgXDmhjr6Gh91JFyYTTc" ], "script": "base64:AAIEAAAAAAAAAD4IAhIECgIBCBIDCgEIEgMKAQgSAwoBCBIFCgMICAgSBQoDCAgIEgQKAggIEgUKAwgICBIFCgMICAgSAwoBCAAAACcAAAAACHVuaXRUZXN0BwAAAAAJb3JhY2xlRmVlCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOMnM1UnRhSFBCZW5Dc3gyRUNjb0ZSYllIeDNub1poWFcxAAAAAAhzaWduRGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkMyOGhTaXZybXNUVVhhWUQxeDZMMzYySjRacFVub1RkQgAAAAAMYXJ0d29ya3NEYXBwCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOQnluZmJYQzJLYXN0VXhodWtjTVVhRTU4SzljQmRCOVVZAAAAAAtmZWVSZWNlaXZlcgIAAAAjM04xRTZ0WGRkUm9WYVJmUTlkUTN2ZzVMYVcyZnNkOEhLdWIAAAAACHVzZXJEYXBwAwUAAAAIdW5pdFRlc3QJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM044eFhhWWpFMjdBYTc5ZDVoSHJoSHU5SGFGb1RCbWhERWoAAAAADXdoaXRlbGlzdERhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM042QmFWMWRDQjR6ZzQzZ29OTkhhQ3R2UjEzQmN5SjVHc3EAAAAAC3NpZ25Bc3NldElkAQAAACDopWq8yndC8nBhMjVKT0WDubke5ZlnF8Nx6tkLoQSt6wAAAAALdXNkbkFzc2V0SWQBAAAAIA/yHBKs5MQ8muxGGqslqLDsugcrRsxtiHLwteKSSQG0AAAAAAx3YXZlc0Fzc2V0SWQBAAAAAAAAAAAFY2hyaXMCAAAAIzNNc0c2alBOQ3JWSlV0WUI3WEpCeFM3dXRXc1hBZjRuOVZwAAAAAARqb2VwAgAAACMzTXptNFZMd3NOOXVad2JUTXpQajNYdXhWNmtFZkFSOFVETgAAAAAHc2lnbkN1dAAAAAAAAAAAAwAAAAAKY3JlYXRvckN1dAAAAAAAAAAACgAAAAALZGFwcFJ1bm5p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", "height": 1529594, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9H4N7vC4itkAQJPCifni3mLc5o9WDynpUY8kr9UcDptG Next: HV1X4YR7ZEa41RYkfyxBXiVGndUSUFQUV411caGamVUo Diff:
OldNewDifferences
136136 }
137137
138138
139+func checkArtStatus (addr,id) = {
140+ let artStatus = getArtStrByK(keyFlag(addr, id))
141+ if (if ((artStatus == artIllegal))
142+ then true
143+ else (artStatus == artSuspended))
144+ then throw(("Original Artwork flagged as " + artStatus))
145+ else true
146+ }
147+
148+
149+func checkArtistStatus (addr) = {
150+ let artistStatus = getUserStrByK(keyUserStatus(addr))
151+ if (containsElement([userSuspended, userRemoved], artistStatus))
152+ then throw(("Original Artist " + artistStatus))
153+ else true
154+ }
155+
156+
139157 func checkNFTInfo (assetId) = {
140158 let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
141159 let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
142160 if ((size(artSignID) == 0))
143161 then throw("Artwork not found on SIGN Art")
144- else {
145- let artStatus = getArtStrByK(keyFlag(nftData[6], nftData[5]))
146- if (if ((artStatus == artIllegal))
147- then true
148- else (artStatus == artSuspended))
149- then throw(("Original Artwork flagged as " + artStatus))
150- else {
151- let artistStatus = getUserStrByK(keyUserStatus(nftData[6]))
152- if (containsElement([userSuspended, userRemoved], artistStatus))
153- then throw(("Original Artist " + artistStatus))
154- else $Tuple2(true, nftData[6])
155- }
156- }
162+ else if (if (!(checkArtStatus(nftData[6], nftData[5])))
163+ then !(checkArtistStatus(nftData[6]))
164+ else false)
165+ then $Tuple2(false, nftData[6])
166+ else $Tuple2(true, nftData[6])
167+ }
168+
169+
170+func checkARTExist (artId,creatorAddr) = {
171+ let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
172+ if ((size(artSignID) == 0))
173+ then throw("Artwork not found on SIGN Art")
174+ else if (if (!(checkArtStatus(creatorAddr, artId)))
175+ then !(checkArtistStatus(creatorAddr))
176+ else false)
177+ then false
178+ else true
157179 }
158180
159181
160182 @Callable(i)
161183 func sellNFT (price,asset) = {
162- let $t059225961 = idCallerDate(i)
163- let id = $t059225961._1
164- let caller = $t059225961._2
165- let date = $t059225961._3
166- let $t059666002 = isPayment(i)
167- let payment = $t059666002._1
168- let amount = $t059666002._2
184+ let $t062996338 = idCallerDate(i)
185+ let id = $t062996338._1
186+ let caller = $t062996338._2
187+ let date = $t062996338._3
188+ let $t063436379 = isPayment(i)
189+ let payment = $t063436379._1
190+ let amount = $t063436379._2
169191 let assetId = if (if (isDefined(payment.assetId))
170192 then isSignArtNFT(value(payment.assetId))
171193 else false)
174196 if (!(acceptedAssetIds(asset)))
175197 then throw("Only SIGN, USDN or WAVES accepted")
176198 else {
177- let $t062676343 = checkNFTInfo(toBase58String(value(assetId)))
178- let isValidNFT = $t062676343._1
179- let creatorAddr = $t062676343._2
199+ let $t066446720 = checkNFTInfo(toBase58String(value(assetId)))
200+ let isValidNFT = $t066446720._1
201+ let creatorAddr = $t066446720._2
180202 if (!(isValidNFT))
181203 then throw("Something went wrong")
182204 else [StringEntry((((((("sale2nd_info_" + caller) + "_") + toBase58String(value(payment.assetId))) + "_") + creatorAddr) + "_OPEN"), ((((toString(date) + "_") + toString(price)) + "_") + asset)), StringEntry(((("sale2nd_status_" + caller) + "_") + toBase58String(value(payment.assetId))), "OPEN"), StringEntry(("current_owner_on_dapp_" + toBase58String(value(payment.assetId))), caller)]
187209
188210 @Callable(i)
189211 func cancelSale (nftid) = {
190- let $t070197058 = idCallerDate(i)
191- let id = $t070197058._1
192- let caller = $t070197058._2
193- let date = $t070197058._3
212+ let $t073967435 = idCallerDate(i)
213+ let id = $t073967435._1
214+ let caller = $t073967435._2
215+ let date = $t073967435._3
194216 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
195217 if ((saleOwner != caller))
196218 then throw("You don't own this NFT")
210232
211233 @Callable(i)
212234 func buyNFT (nftid) = {
213- let $t081878258 = idCallerDate(i)
214- let id = $t081878258._1
215- let caller = $t081878258._2
216- let date = $t081878258._3
235+ let $t085648635 = idCallerDate(i)
236+ let id = $t085648635._1
237+ let caller = $t085648635._2
238+ let date = $t085648635._3
217239 let saleOwner = getSaleOwnerAndStatus(nftid)
218- let $t083138364 = checkNFTInfo(nftid)
219- let isValidNFT = $t083138364._1
220- let creatorAddr = $t083138364._2
240+ let $t086908741 = checkNFTInfo(nftid)
241+ let isValidNFT = $t086908741._1
242+ let creatorAddr = $t086908741._2
221243 if (!(isValidNFT))
222244 then throw("Something went wrong")
223245 else {
229251 if ((parseInt(saleInfoArray[1]) == 0))
230252 then throw("Offer only")
231253 else {
232- let $t087008736 = isPayment(i)
233- let payment = $t087008736._1
234- let amount = $t087008736._2
254+ let $t090779113 = isPayment(i)
255+ let payment = $t090779113._1
256+ let amount = $t090779113._2
235257 if (if ((saleInfoArray[1] != toString(amount)))
236258 then true
237259 else (saleInfoArray[2] != toBase58String(value(payment.assetId))))
251273
252274 @Callable(i)
253275 func setOffer (nftid) = {
254- let $t01018410226 = idCallerDate(i)
255- let id = $t01018410226._1
256- let offerOwner = $t01018410226._2
257- let date = $t01018410226._3
258- let $t01023110267 = isPayment(i)
259- let payment = $t01023110267._1
260- let amount = $t01023110267._2
276+ let $t01056110603 = idCallerDate(i)
277+ let id = $t01056110603._1
278+ let offerOwner = $t01056110603._2
279+ let date = $t01056110603._3
280+ let $t01060810644 = isPayment(i)
281+ let payment = $t01060810644._1
282+ let amount = $t01060810644._2
261283 let assetId = if (!(isDefined(payment.assetId)))
262284 then "WAVES"
263285 else toBase58String(value(payment.assetId))
264286 if (!(acceptedAssetIds(assetId)))
265287 then throw("asset not accepted")
266288 else {
267- let $t01045310504 = checkNFTInfo(nftid)
268- let isValidNFT = $t01045310504._1
269- let creatorAddr = $t01045310504._2
289+ let $t01083010881 = checkNFTInfo(nftid)
290+ let isValidNFT = $t01083010881._1
291+ let creatorAddr = $t01083010881._2
270292 if (!(isValidNFT))
271293 then throw("Something went wrong")
272294 else {
280302
281303 @Callable(i)
282304 func acceptOffer (nftid,offerId,offerOwner) = {
283- let $t01113511275 = idCallerDate(i)
284- let id = $t01113511275._1
285- let caller = $t01113511275._2
286- let date = $t01113511275._3
305+ let $t01151211652 = idCallerDate(i)
306+ let id = $t01151211652._1
307+ let caller = $t01151211652._2
308+ let date = $t01151211652._3
287309 let saleOwner = getSaleOwnerAndStatus(nftid)
288310 if ((caller != saleOwner))
289311 then throw("You cannot do this action")
292314 if ((offerExist == ""))
293315 then throw("Offer not found or not for sale")
294316 else {
295- let $t01158011631 = checkNFTInfo(nftid)
296- let isValidNFT = $t01158011631._1
297- let creatorAddr = $t01158011631._2
317+ let $t01195712008 = checkNFTInfo(nftid)
318+ let isValidNFT = $t01195712008._1
319+ let creatorAddr = $t01195712008._2
298320 if (!(isValidNFT))
299321 then throw("Something went wrong")
300322 else {
303325 then throw("Sale Not found!")
304326 else {
305327 let bidDataKey = ((((((("offer2nd_" + offerOwner) + "_") + nftid) + "_") + saleOwner) + "_") + offerId)
306- let $t01196712026 = getBidData(bidDataKey)
307- let bidDataArr = $t01196712026._1
308- let assetId = $t01196712026._2
309- let bidData = $t01196712026._3
328+ let $t01234412403 = getBidData(bidDataKey)
329+ let bidDataArr = $t01234412403._1
330+ let assetId = $t01234412403._2
331+ let bidData = $t01234412403._3
310332 let amount = value(parseInt(bidDataArr[1]))
311333 let amountForSign = fraction(amount, signCut, 100)
312334 let amountForCreator = fraction(amount, creatorCut, 100)
322344
323345 @Callable(i)
324346 func cancelOffer (nftid,offerId,saleOwner) = {
325- let $t01341613698 = idCallerDate(i)
326- let id = $t01341613698._1
327- let caller = $t01341613698._2
328- let date = $t01341613698._3
347+ let $t01379314075 = idCallerDate(i)
348+ let id = $t01379314075._1
349+ let caller = $t01379314075._2
350+ let date = $t01379314075._3
329351 let bidDataKey = ((((((("offer2nd_" + caller) + "_") + nftid) + "_") + saleOwner) + "_") + offerId)
330- let $t01378413843 = getBidData(bidDataKey)
331- let bidDataArr = $t01378413843._1
332- let assetId = $t01378413843._2
333- let bidData = $t01378413843._3
352+ let $t01416114220 = getBidData(bidDataKey)
353+ let bidDataArr = $t01416114220._1
354+ let assetId = $t01416114220._2
355+ let bidData = $t01416114220._3
334356 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry((((((bidDataKey + "_") + toString(date)) + "_") + id) + "_CANCELLED"), ((bidData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
357+ }
358+
359+
360+
361+@Callable(i)
362+func makeRequest (artId,creatorAddr) = {
363+ let $t01561015654 = idCallerDate(i)
364+ let id = $t01561015654._1
365+ let requestOwner = $t01561015654._2
366+ let date = $t01561015654._3
367+ let $t01565915695 = isPayment(i)
368+ let payment = $t01565915695._1
369+ let amount = $t01565915695._2
370+ let assetId = if (!(isDefined(payment.assetId)))
371+ then "WAVES"
372+ else toBase58String(value(payment.assetId))
373+ if (!(acceptedAssetIds(assetId)))
374+ then throw("asset not accepted")
375+ else {
376+ let isValidART = checkARTExist(artId, creatorAddr)
377+ if (!(isValidART))
378+ then throw("Something went wrong")
379+ else [StringEntry((((((((("request2nd_" + requestOwner) + "_") + creatorAddr) + "_") + artId) + "_") + id) + "_OPEN"), ((((((((((toString(date) + "_") + toString(amount)) + "_") + toBase58String(value(payment.assetId))) + "_") + artId) + "_") + requestOwner) + "_") + id))]
380+ }
381+ }
382+
383+
384+
385+@Callable(i)
386+func fillRequest (artId,requestOwner,offerId) = {
387+ let $t01647016512 = idCallerDate(i)
388+ let id = $t01647016512._1
389+ let saleOwner = $t01647016512._2
390+ let date = $t01647016512._3
391+ let $t01651716561 = isPayment(i)
392+ let payment = $t01651716561._1
393+ let amountAttached = $t01651716561._2
394+ let assetId = if (if (isDefined(payment.assetId))
395+ then isSignArtNFT(value(payment.assetId))
396+ else false)
397+ then payment.assetId
398+ else throw("No NFT found")
399+ let attachedNft = split(getArtStrByK(("nft_" + toBase58String(value(assetId)))), "_")
400+ if ((size(attachedNft) == 0))
401+ then throw("No NFT found")
402+ else {
403+ let requestData = split(getStrByK((((((((("request2nd_" + requestOwner) + "_") + attachedNft[5]) + "_") + artId) + "_") + offerId) + "_OPEN")), "_")
404+ if ((size(requestData) == 0))
405+ then throw("No request found")
406+ else if ((requestData[3] != attachedNft[5]))
407+ then throw("This NFT don't match the requested artwork")
408+ else {
409+ let amount = value(parseInt(requestData[1]))
410+ let amountForSign = fraction(amount, signCut, 100)
411+ let amountForCreator = fraction(amount, creatorCut, 100)
412+ let amountForOwner = (amount - (amountForSign + amountForCreator))
413+[DeleteEntry((((((((("request2nd_" + requestOwner) + "_") + attachedNft[5]) + "_") + artId) + "_") + offerId) + "_OPEN")), StringEntry((((((((("request2nd_" + requestOwner) + "_") + attachedNft[5]) + "_") + artId) + "_") + offerId) + "_CLOSED"), ((((((((((((toString(date) + "_") + toString(amount)) + "_") + requestData[2]) + "_") + artId) + "_") + requestOwner) + "_") + saleOwner) + "_") + id)), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(Address(fromBase58String(attachedNft[6])), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId), ScriptTransfer(Address(fromBase58String(requestData[4])), 1, assetId)]
414+ }
415+ }
416+ }
417+
418+
419+
420+@Callable(i)
421+func cancelRequest (artId,creatorAddr,requestId) = {
422+ let $t01833318377 = idCallerDate(i)
423+ let id = $t01833318377._1
424+ let requestOwner = $t01833318377._2
425+ let date = $t01833318377._3
426+ let requesDataKey = ((((((("request2nd_" + requestOwner) + "_") + creatorAddr) + "_") + artId) + "_") + requestId)
427+ let requestData = getStrByK((requesDataKey + "_OPEN"))
428+ let requestDataArr = split(getStrByK((requesDataKey + "_OPEN")), "_")
429+[DeleteEntry((requesDataKey + "_OPEN")), StringEntry((((((requesDataKey + "_") + toString(date)) + "_") + id) + "_CANCELLED"), ((requestData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(requestOwner)), parseIntValue(requestDataArr[1]), fromBase58String(requestDataArr[2]))]
335430 }
336431
337432
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let unitTest = false
55
66 let oracleFee = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
77
88 let signDapp = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
99
1010 let artworksDapp = value(addressFromString("3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY"))
1111
1212 let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
1313
1414 let userDapp = if (unitTest)
1515 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1616 else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
1717
1818 let whitelistDapp = value(addressFromString("3N6BaV1dCB4zg43goNNHaCtvR13BcyJ5Gsq"))
1919
2020 let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
2121
2222 let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
2323
2424 let wavesAssetId = base58''
2525
2626 let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
2727
2828 let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
2929
3030 let signCut = 3
3131
3232 let creatorCut = 10
3333
3434 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3535
3636 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
3737
3838 let userSuspended = "SUSPENDED"
3939
4040 let userRemoved = "REMOVED"
4141
4242 let artIllegal = "ILLEGAL"
4343
4444 let artSuspended = "SUSPENDED"
4545
4646 func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
4747
4848
4949 func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
5050
5151
5252 func getStrByK (key) = valueOrElse(getString(this, key), "")
5353
5454
5555 func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
5656
5757
5858 func keyUserStatus (addr) = ("user_status_" + addr)
5959
6060
6161 func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
6262
6363
6464 func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
6565
6666
6767 func keyNFTData (id) = ("nft_" + id)
6868
6969
7070 func idCallerDate (i) = if (!(dappRunning))
7171 then throw(maintenanceMSG)
7272 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
7373
7474
7575 func isPayment (i) = if ((size(i.payments) == 0))
7676 then throw("No payment attached")
7777 else {
7878 let payment = value(i.payments[0])
7979 let amount = value(payment.amount)
8080 $Tuple2(payment, amount)
8181 }
8282
8383
8484 func isSignArtNFT (id) = {
8585 let assetDetails = value(assetInfo(id))
8686 if (if (if (if ((assetDetails.quantity != 1))
8787 then true
8888 else (assetDetails.decimals != 0))
8989 then true
9090 else (assetDetails.reissuable != false))
9191 then true
9292 else (assetDetails.issuer != artworksDapp))
9393 then false
9494 else true
9595 }
9696
9797
9898 func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
9999 then (assetId != toBase58String(wavesAssetId))
100100 else false)
101101 then (assetId != "WAVES")
102102 else false)
103103 then (assetId != toBase58String(usdnAssetId))
104104 else false)
105105 then false
106106 else true
107107
108108
109109 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
110110 then unit
111111 else fromBase58String(assetId)
112112
113113
114114 func getSaleOwnerAndStatus (nftid) = {
115115 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
116116 if ((size(saleOwner) == 0))
117117 then throw("NFT not found")
118118 else {
119119 let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
120120 if ((saleStatus != "OPEN"))
121121 then throw("NFT not for sale")
122122 else saleOwner
123123 }
124124 }
125125
126126
127127 func getBidData (key) = {
128128 let bidData = getStrByK((key + "_OPEN"))
129129 if ((bidData == ""))
130130 then throw("Offer not found")
131131 else {
132132 let bidDataArr = split(bidData, "_")
133133 let assetId = getBidAssetId(bidDataArr[2])
134134 $Tuple3(bidDataArr, assetId, bidData)
135135 }
136136 }
137137
138138
139+func checkArtStatus (addr,id) = {
140+ let artStatus = getArtStrByK(keyFlag(addr, id))
141+ if (if ((artStatus == artIllegal))
142+ then true
143+ else (artStatus == artSuspended))
144+ then throw(("Original Artwork flagged as " + artStatus))
145+ else true
146+ }
147+
148+
149+func checkArtistStatus (addr) = {
150+ let artistStatus = getUserStrByK(keyUserStatus(addr))
151+ if (containsElement([userSuspended, userRemoved], artistStatus))
152+ then throw(("Original Artist " + artistStatus))
153+ else true
154+ }
155+
156+
139157 func checkNFTInfo (assetId) = {
140158 let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
141159 let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
142160 if ((size(artSignID) == 0))
143161 then throw("Artwork not found on SIGN Art")
144- else {
145- let artStatus = getArtStrByK(keyFlag(nftData[6], nftData[5]))
146- if (if ((artStatus == artIllegal))
147- then true
148- else (artStatus == artSuspended))
149- then throw(("Original Artwork flagged as " + artStatus))
150- else {
151- let artistStatus = getUserStrByK(keyUserStatus(nftData[6]))
152- if (containsElement([userSuspended, userRemoved], artistStatus))
153- then throw(("Original Artist " + artistStatus))
154- else $Tuple2(true, nftData[6])
155- }
156- }
162+ else if (if (!(checkArtStatus(nftData[6], nftData[5])))
163+ then !(checkArtistStatus(nftData[6]))
164+ else false)
165+ then $Tuple2(false, nftData[6])
166+ else $Tuple2(true, nftData[6])
167+ }
168+
169+
170+func checkARTExist (artId,creatorAddr) = {
171+ let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
172+ if ((size(artSignID) == 0))
173+ then throw("Artwork not found on SIGN Art")
174+ else if (if (!(checkArtStatus(creatorAddr, artId)))
175+ then !(checkArtistStatus(creatorAddr))
176+ else false)
177+ then false
178+ else true
157179 }
158180
159181
160182 @Callable(i)
161183 func sellNFT (price,asset) = {
162- let $t059225961 = idCallerDate(i)
163- let id = $t059225961._1
164- let caller = $t059225961._2
165- let date = $t059225961._3
166- let $t059666002 = isPayment(i)
167- let payment = $t059666002._1
168- let amount = $t059666002._2
184+ let $t062996338 = idCallerDate(i)
185+ let id = $t062996338._1
186+ let caller = $t062996338._2
187+ let date = $t062996338._3
188+ let $t063436379 = isPayment(i)
189+ let payment = $t063436379._1
190+ let amount = $t063436379._2
169191 let assetId = if (if (isDefined(payment.assetId))
170192 then isSignArtNFT(value(payment.assetId))
171193 else false)
172194 then payment.assetId
173195 else throw("No NFT found")
174196 if (!(acceptedAssetIds(asset)))
175197 then throw("Only SIGN, USDN or WAVES accepted")
176198 else {
177- let $t062676343 = checkNFTInfo(toBase58String(value(assetId)))
178- let isValidNFT = $t062676343._1
179- let creatorAddr = $t062676343._2
199+ let $t066446720 = checkNFTInfo(toBase58String(value(assetId)))
200+ let isValidNFT = $t066446720._1
201+ let creatorAddr = $t066446720._2
180202 if (!(isValidNFT))
181203 then throw("Something went wrong")
182204 else [StringEntry((((((("sale2nd_info_" + caller) + "_") + toBase58String(value(payment.assetId))) + "_") + creatorAddr) + "_OPEN"), ((((toString(date) + "_") + toString(price)) + "_") + asset)), StringEntry(((("sale2nd_status_" + caller) + "_") + toBase58String(value(payment.assetId))), "OPEN"), StringEntry(("current_owner_on_dapp_" + toBase58String(value(payment.assetId))), caller)]
183205 }
184206 }
185207
186208
187209
188210 @Callable(i)
189211 func cancelSale (nftid) = {
190- let $t070197058 = idCallerDate(i)
191- let id = $t070197058._1
192- let caller = $t070197058._2
193- let date = $t070197058._3
212+ let $t073967435 = idCallerDate(i)
213+ let id = $t073967435._1
214+ let caller = $t073967435._2
215+ let date = $t073967435._3
194216 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
195217 if ((saleOwner != caller))
196218 then throw("You don't own this NFT")
197219 else {
198220 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftid))
199221 if ((saleStatus != "OPEN"))
200222 then throw("Sale not active")
201223 else {
202224 let creatorAddr = split(getArtStrByK(keyNFTData(nftid)), "_")[6]
203225 let saleInfo = getStrByK(((((((("sale2nd_info_" + caller) + "_") + nftid) + "_") + creatorAddr) + "_") + saleStatus))
204226 [DeleteEntry((((((("sale2nd_info_" + caller) + "_") + nftid) + "_") + creatorAddr) + "_OPEN")), DeleteEntry(((("sale2nd_status_" + caller) + "_") + nftid)), DeleteEntry(("current_owner_on_dapp_" + nftid)), StringEntry((((((((((("sale2nd_info_" + caller) + "_") + nftid) + "_") + creatorAddr) + "_") + toString(date)) + "_") + id) + "_CANCELLED"), saleInfo), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))]
205227 }
206228 }
207229 }
208230
209231
210232
211233 @Callable(i)
212234 func buyNFT (nftid) = {
213- let $t081878258 = idCallerDate(i)
214- let id = $t081878258._1
215- let caller = $t081878258._2
216- let date = $t081878258._3
235+ let $t085648635 = idCallerDate(i)
236+ let id = $t085648635._1
237+ let caller = $t085648635._2
238+ let date = $t085648635._3
217239 let saleOwner = getSaleOwnerAndStatus(nftid)
218- let $t083138364 = checkNFTInfo(nftid)
219- let isValidNFT = $t083138364._1
220- let creatorAddr = $t083138364._2
240+ let $t086908741 = checkNFTInfo(nftid)
241+ let isValidNFT = $t086908741._1
242+ let creatorAddr = $t086908741._2
221243 if (!(isValidNFT))
222244 then throw("Something went wrong")
223245 else {
224246 let saleInfo = getStrByK((((((("sale2nd_info_" + saleOwner) + "_") + nftid) + "_") + creatorAddr) + "_OPEN"))
225247 if ((size(saleInfo) == 0))
226248 then throw("Sale Not found!")
227249 else {
228250 let saleInfoArray = split(saleInfo, "_")
229251 if ((parseInt(saleInfoArray[1]) == 0))
230252 then throw("Offer only")
231253 else {
232- let $t087008736 = isPayment(i)
233- let payment = $t087008736._1
234- let amount = $t087008736._2
254+ let $t090779113 = isPayment(i)
255+ let payment = $t090779113._1
256+ let amount = $t090779113._2
235257 if (if ((saleInfoArray[1] != toString(amount)))
236258 then true
237259 else (saleInfoArray[2] != toBase58String(value(payment.assetId))))
238260 then throw("Payment infos don't match.")
239261 else {
240262 let amountForSign = fraction(amount, signCut, 100)
241263 let amountForCreator = fraction(amount, creatorCut, 100)
242264 let amountForOwner = (amount - (amountForSign + amountForCreator))
243265 [DeleteEntry((((((("sale2nd_info_" + saleOwner) + "_") + nftid) + "_") + creatorAddr) + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftid)), DeleteEntry(("current_owner_on_dapp_" + nftid)), StringEntry((((((((((("sale2nd_info_" + saleOwner) + "_") + nftid) + "_") + creatorAddr) + "_") + toString(date)) + "_") + id) + "_CLOSED"), ((((((toString(date) + "_") + toString(amount)) + "_") + toBase58String(value(payment.assetId))) + "_to_") + caller)), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, payment.assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, payment.assetId), ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, payment.assetId), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))]
244266 }
245267 }
246268 }
247269 }
248270 }
249271
250272
251273
252274 @Callable(i)
253275 func setOffer (nftid) = {
254- let $t01018410226 = idCallerDate(i)
255- let id = $t01018410226._1
256- let offerOwner = $t01018410226._2
257- let date = $t01018410226._3
258- let $t01023110267 = isPayment(i)
259- let payment = $t01023110267._1
260- let amount = $t01023110267._2
276+ let $t01056110603 = idCallerDate(i)
277+ let id = $t01056110603._1
278+ let offerOwner = $t01056110603._2
279+ let date = $t01056110603._3
280+ let $t01060810644 = isPayment(i)
281+ let payment = $t01060810644._1
282+ let amount = $t01060810644._2
261283 let assetId = if (!(isDefined(payment.assetId)))
262284 then "WAVES"
263285 else toBase58String(value(payment.assetId))
264286 if (!(acceptedAssetIds(assetId)))
265287 then throw("asset not accepted")
266288 else {
267- let $t01045310504 = checkNFTInfo(nftid)
268- let isValidNFT = $t01045310504._1
269- let creatorAddr = $t01045310504._2
289+ let $t01083010881 = checkNFTInfo(nftid)
290+ let isValidNFT = $t01083010881._1
291+ let creatorAddr = $t01083010881._2
270292 if (!(isValidNFT))
271293 then throw("Something went wrong")
272294 else {
273295 let saleOwner = getSaleOwnerAndStatus(nftid)
274296 [StringEntry((((((((("offer2nd_" + offerOwner) + "_") + nftid) + "_") + saleOwner) + "_") + id) + "_OPEN"), ((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + offerOwner) + "_") + id))]
275297 }
276298 }
277299 }
278300
279301
280302
281303 @Callable(i)
282304 func acceptOffer (nftid,offerId,offerOwner) = {
283- let $t01113511275 = idCallerDate(i)
284- let id = $t01113511275._1
285- let caller = $t01113511275._2
286- let date = $t01113511275._3
305+ let $t01151211652 = idCallerDate(i)
306+ let id = $t01151211652._1
307+ let caller = $t01151211652._2
308+ let date = $t01151211652._3
287309 let saleOwner = getSaleOwnerAndStatus(nftid)
288310 if ((caller != saleOwner))
289311 then throw("You cannot do this action")
290312 else {
291313 let offerExist = getStrByK((((((((("offer2nd_" + offerOwner) + "_") + nftid) + "_") + saleOwner) + "_") + offerId) + "_OPEN"))
292314 if ((offerExist == ""))
293315 then throw("Offer not found or not for sale")
294316 else {
295- let $t01158011631 = checkNFTInfo(nftid)
296- let isValidNFT = $t01158011631._1
297- let creatorAddr = $t01158011631._2
317+ let $t01195712008 = checkNFTInfo(nftid)
318+ let isValidNFT = $t01195712008._1
319+ let creatorAddr = $t01195712008._2
298320 if (!(isValidNFT))
299321 then throw("Something went wrong")
300322 else {
301323 let saleInfo = getStrByK((((((("sale2nd_info_" + saleOwner) + "_") + nftid) + "_") + creatorAddr) + "_OPEN"))
302324 if ((size(saleInfo) == 0))
303325 then throw("Sale Not found!")
304326 else {
305327 let bidDataKey = ((((((("offer2nd_" + offerOwner) + "_") + nftid) + "_") + saleOwner) + "_") + offerId)
306- let $t01196712026 = getBidData(bidDataKey)
307- let bidDataArr = $t01196712026._1
308- let assetId = $t01196712026._2
309- let bidData = $t01196712026._3
328+ let $t01234412403 = getBidData(bidDataKey)
329+ let bidDataArr = $t01234412403._1
330+ let assetId = $t01234412403._2
331+ let bidData = $t01234412403._3
310332 let amount = value(parseInt(bidDataArr[1]))
311333 let amountForSign = fraction(amount, signCut, 100)
312334 let amountForCreator = fraction(amount, creatorCut, 100)
313335 let amountForOwner = (amount - (amountForSign + amountForCreator))
314336 [DeleteEntry((((((("sale2nd_info_" + saleOwner) + "_") + nftid) + "_") + creatorAddr) + "_OPEN")), DeleteEntry((bidDataKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftid)), DeleteEntry(("current_owner_on_dapp_" + nftid)), StringEntry((((((bidDataKey + "_") + toString(date)) + "_") + id) + "_CLOSED"), ((((((((toString(date) + "_") + toString(amount)) + "_") + toBase58String(value(assetId))) + "_") + offerOwner) + "_") + offerId)), StringEntry((((((((((("sale2nd_info_" + saleOwner) + "_") + nftid) + "_") + creatorAddr) + "_") + toString(date)) + "_") + id) + "_CLOSED"), ((((((toString(date) + "_") + toString(amount)) + "_") + toBase58String(value(assetId))) + "_to_") + offerOwner)), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId), ScriptTransfer(Address(fromBase58String(bidDataArr[3])), 1, fromBase58String(nftid))]
315337 }
316338 }
317339 }
318340 }
319341 }
320342
321343
322344
323345 @Callable(i)
324346 func cancelOffer (nftid,offerId,saleOwner) = {
325- let $t01341613698 = idCallerDate(i)
326- let id = $t01341613698._1
327- let caller = $t01341613698._2
328- let date = $t01341613698._3
347+ let $t01379314075 = idCallerDate(i)
348+ let id = $t01379314075._1
349+ let caller = $t01379314075._2
350+ let date = $t01379314075._3
329351 let bidDataKey = ((((((("offer2nd_" + caller) + "_") + nftid) + "_") + saleOwner) + "_") + offerId)
330- let $t01378413843 = getBidData(bidDataKey)
331- let bidDataArr = $t01378413843._1
332- let assetId = $t01378413843._2
333- let bidData = $t01378413843._3
352+ let $t01416114220 = getBidData(bidDataKey)
353+ let bidDataArr = $t01416114220._1
354+ let assetId = $t01416114220._2
355+ let bidData = $t01416114220._3
334356 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry((((((bidDataKey + "_") + toString(date)) + "_") + id) + "_CANCELLED"), ((bidData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
357+ }
358+
359+
360+
361+@Callable(i)
362+func makeRequest (artId,creatorAddr) = {
363+ let $t01561015654 = idCallerDate(i)
364+ let id = $t01561015654._1
365+ let requestOwner = $t01561015654._2
366+ let date = $t01561015654._3
367+ let $t01565915695 = isPayment(i)
368+ let payment = $t01565915695._1
369+ let amount = $t01565915695._2
370+ let assetId = if (!(isDefined(payment.assetId)))
371+ then "WAVES"
372+ else toBase58String(value(payment.assetId))
373+ if (!(acceptedAssetIds(assetId)))
374+ then throw("asset not accepted")
375+ else {
376+ let isValidART = checkARTExist(artId, creatorAddr)
377+ if (!(isValidART))
378+ then throw("Something went wrong")
379+ else [StringEntry((((((((("request2nd_" + requestOwner) + "_") + creatorAddr) + "_") + artId) + "_") + id) + "_OPEN"), ((((((((((toString(date) + "_") + toString(amount)) + "_") + toBase58String(value(payment.assetId))) + "_") + artId) + "_") + requestOwner) + "_") + id))]
380+ }
381+ }
382+
383+
384+
385+@Callable(i)
386+func fillRequest (artId,requestOwner,offerId) = {
387+ let $t01647016512 = idCallerDate(i)
388+ let id = $t01647016512._1
389+ let saleOwner = $t01647016512._2
390+ let date = $t01647016512._3
391+ let $t01651716561 = isPayment(i)
392+ let payment = $t01651716561._1
393+ let amountAttached = $t01651716561._2
394+ let assetId = if (if (isDefined(payment.assetId))
395+ then isSignArtNFT(value(payment.assetId))
396+ else false)
397+ then payment.assetId
398+ else throw("No NFT found")
399+ let attachedNft = split(getArtStrByK(("nft_" + toBase58String(value(assetId)))), "_")
400+ if ((size(attachedNft) == 0))
401+ then throw("No NFT found")
402+ else {
403+ let requestData = split(getStrByK((((((((("request2nd_" + requestOwner) + "_") + attachedNft[5]) + "_") + artId) + "_") + offerId) + "_OPEN")), "_")
404+ if ((size(requestData) == 0))
405+ then throw("No request found")
406+ else if ((requestData[3] != attachedNft[5]))
407+ then throw("This NFT don't match the requested artwork")
408+ else {
409+ let amount = value(parseInt(requestData[1]))
410+ let amountForSign = fraction(amount, signCut, 100)
411+ let amountForCreator = fraction(amount, creatorCut, 100)
412+ let amountForOwner = (amount - (amountForSign + amountForCreator))
413+[DeleteEntry((((((((("request2nd_" + requestOwner) + "_") + attachedNft[5]) + "_") + artId) + "_") + offerId) + "_OPEN")), StringEntry((((((((("request2nd_" + requestOwner) + "_") + attachedNft[5]) + "_") + artId) + "_") + offerId) + "_CLOSED"), ((((((((((((toString(date) + "_") + toString(amount)) + "_") + requestData[2]) + "_") + artId) + "_") + requestOwner) + "_") + saleOwner) + "_") + id)), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(Address(fromBase58String(attachedNft[6])), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId), ScriptTransfer(Address(fromBase58String(requestData[4])), 1, assetId)]
414+ }
415+ }
416+ }
417+
418+
419+
420+@Callable(i)
421+func cancelRequest (artId,creatorAddr,requestId) = {
422+ let $t01833318377 = idCallerDate(i)
423+ let id = $t01833318377._1
424+ let requestOwner = $t01833318377._2
425+ let date = $t01833318377._3
426+ let requesDataKey = ((((((("request2nd_" + requestOwner) + "_") + creatorAddr) + "_") + artId) + "_") + requestId)
427+ let requestData = getStrByK((requesDataKey + "_OPEN"))
428+ let requestDataArr = split(getStrByK((requesDataKey + "_OPEN")), "_")
429+[DeleteEntry((requesDataKey + "_OPEN")), StringEntry((((((requesDataKey + "_") + toString(date)) + "_") + id) + "_CANCELLED"), ((requestData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(requestOwner)), parseIntValue(requestDataArr[1]), fromBase58String(requestDataArr[2]))]
335430 }
336431
337432
338433
339434 @Callable(i)
340435 func deleteEntry (entry) = {
341436 let caller = toString(addressFromPublicKey(i.callerPublicKey))
342437 if ((caller == chris))
343438 then [DeleteEntry(entry)]
344439 else throw("no")
345440 }
346441
347442

github/deemru/w8io/3ef1775 
106.14 ms