tx · 29wJxFYtqMHQ8PCwGB5WhFMc4NTJAN7G3JeJQPsG9nPE

3NBquYd5fTq8HRDkagrtNLQ3HmWd7wcZoeL:  -0.01400000 Waves

2021.01.23 08:11 [1365731] smart account 3NBquYd5fTq8HRDkagrtNLQ3HmWd7wcZoeL > SELF 0.00000000 Waves

{ "type": 13, "id": "29wJxFYtqMHQ8PCwGB5WhFMc4NTJAN7G3JeJQPsG9nPE", "fee": 1400000, "feeAssetId": null, "timestamp": 1611378703426, "version": 2, "chainId": 84, "sender": "3NBquYd5fTq8HRDkagrtNLQ3HmWd7wcZoeL", "senderPublicKey": "7irc2VpK5czoyVdwrCuQqr2JU9ZaZnEZn8RPChnfi3yL", "proofs": [ "4H9kCwdEx4x4LmXiNVzYhH2XQbKEndNoRhDksBJ77MktZpUDMinXu5NhxJitMcBgeoupFrsbNaUaYsg9jvxCy5kq" ], "script": "base64:AAIEAAAAAAAAAFcIAhIOCgwICAgICAgBCAgICAgSDQoLCAgICAgBCAgICAgSBQoDCAgIEgQKAggIEgYKBAgBAQgSBAoCCAgSBAoCCAgSBgoECAgICBIGCgQICAgIEgMKAQgAAABDAAAAAAh1bml0VGVzdAcAAAAACW9yYWNsZUZlZQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjJzNVJ0YUhQQmVuQ3N4MkVDY29GUmJZSHgzbm9aaFhXMQAAAAAIc2lnbkRhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM05DMjhoU2l2cm1zVFVYYVlEMXg2TDM2Mko0WnBVbm9UZEIAAAAAC2ZlZVJlY2VpdmVyAgAAACMzTjFFNnRYZGRSb1ZhUmZROWRRM3ZnNUxhVzJmc2Q4SEt1YgAAAAAIdXNlckRhcHADBQAAAAh1bml0VGVzdAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXdEWmFnb1lFaU5mUUxjMzFjR3BZb2FFNTRNR013b0ZyWgAAAAANd2hpdGVsaXN0RGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjZCYVYxZENCNHpnNDNnb05OSGFDdHZSMTNCY3lKNUdzcQAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAt1c2RuQXNzZXRJZAEAAAAgD/IcEqzkxDya7EYaqyWosOy6BytGzG2IcvC14pJJAbQAAAAADHdhdmVzQXNzZXRJZAEAAAAAAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAAdzaWduQ3V0AAAAAAAAAAAHAAAAAAt1c2RuV2F2ZUN1dAAAAAAAAAAACgAAAAAOZGVmYXVsdExpY2VuY2UCAAAAR2JhZnliZWlmdXlvNHBxdTU0aXNtcWd0YjZlNGg2a2t2Z3g3emc0dTN6aWJoMnI3eTZtYjY0aTdienphL2xpY2VuY2UucGRmAAAAABJkZWZhdWx0SGFzaExpY2VuY2UCAAAAQGE4Nzc1OGMzNTRlMzBhOWU3OGZiODRmYTNhMDAxMGE1MDkwYWIyMGRmMGJlMTFhZDQ1YjU3MjBjYzE4N2U2MzkAAAAAC2RhcHBSdW5uaW5nCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX2RhcHBfaXNfcnVubmluZwYAAAAADm1haW50ZW5hbmNlTVNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX21haW50ZW5hbmNlX21zZwIAAAAAAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAAC3VzZXJBbGxvd2VkAgAAAAdBTExPV0VEAQAAABdnZXRTdHJpbmdCeUtleUZyb21Vc2VycwAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwBQAAAANrZXkCAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkCAAAAAAEAAAAZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAJb3JhY2xlRmVlBQAAAANrZXkCAAAAH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUBAAAAD2dldEludGVnZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAOY2hlY2tXaGl0ZWxpc3QAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA13aGl0ZWxpc3REYXBwBQAAAANr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AAAAAAkAAAIAAAABAgAAABhGaWVsZCBjYW5ub3QgYmUgaXMgZW1wdHkDCQAAZgAAAAIJAAExAAAAAQUAAAADc3RyBQAAAANtYXgJAAACAAAAAQkAASwAAAACBQAAAANzdHICAAAADCBpcyB0b28gbG9uZwYBAAAADHZhbGlkYXRlVXNlcgAAAAEAAAAGY2FsbGVyBAAAAAp1c2VyU3RhdHVzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwCQEAAAANa2V5VXNlclN0YXR1cwAAAAEFAAAABmNhbGxlcgUAAAAQdXNlclVucmVnaXN0ZXJlZAMDCQAAAAAAAAIFAAAACnVzZXJTdGF0dXMFAAAAEHVzZXJVbnJlZ2lzdGVyZWQGCQAAAAAAAAIFAAAACnVzZXJTdGF0dXMFAAAAC3VzZXJBbGxvd2VkAgAAAC5SZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAiQWNjb3VudCIgdGFiAwkAAAAAAAACBQAAAAp1c2VyU3RhdHVzBQAAAA11c2VyU3VzcGVuZGVkAgAAABFBY2NvdW50IHN1c3BlbmRlZAMJAAAAAAAAAgUAAAAKdXNlclN0YXR1cwUAAAALdXNlclJlbW92ZWQCAAAAD0FjY291bnQgcmVtb3ZlZAIAAAAAAQAAAApzZXRMSWNlbmNlAAAAAgAAAApjaWRMaWNlbmNlAAAADXNoYTI1NkxpY2VuY2UEAAAAA2NpZAMJAAAAAAAAAgkAATEAAAABBQAAAApjaWRMaWNlbmNlAAAAAAAAAAAABQAAAA5kZWZhdWx0TGljZW5jZQUAAAAKY2lkTGljZW5jZQQAAAAEaGFzaAMJAAAAAAAAAgkAATEAAAABBQAAAA1zaGEyNTZMaWNlbmNlAAAAAAAAAAAABQAAABJkZWZhdWx0SGFzaExpY2VuY2UFAAAADXNoYTI1NkxpY2VuY2UJAAUUAAAAAgUAAAADY2lkBQAAAARoYXNoAQAAABN2YWxpZGF0ZUFydHdvcmtEYXRhAAAACgAAAAZjYWxsZXIAAAAKY2lkRGlzcGxheQAAAAljaWRFeHBvcnQAAAAKbGljZW5jZUNJRAAAAAxzaGEyNTZFeHBvcnQAAAALbGljZW5jZUhhc2gAAAAEbmFtZQAAAAtk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Y2VuY2UFAAAADXNoYTI1NkxpY2VuY2UEAAAACmxpY2VuY2VDSUQIBQAAAA0kdDAxNTk2MDE2MDI5AAAAAl8xBAAAAAtsaWNlbmNlSGFzaAgFAAAADSR0MDE1OTYwMTYwMjkAAAACXzIEAAAAD3ZhbGlkYXRlQXJ0d29yawkBAAAAE3ZhbGlkYXRlQXJ0d29ya0RhdGEAAAAKBQAAAAZjYWxsZXIFAAAACmNpZERpc3BsYXkFAAAACWNpZEV4cG9ydAUAAAAKbGljZW5jZUNJRAUAAAAMc2hhMjU2RXhwb3J0BQAAAAtsaWNlbmNlSGFzaAUAAAAEbmFtZQUAAAALZGVzY3JpcHRpb24FAAAABHRhZ3MFAAAAB21heG1pbnQDCQEAAAACIT0AAAACBQAAAA92YWxpZGF0ZUFydHdvcmsCAAAAAAkAAAIAAAABAgAAABVTb21ldGhpbmcgd2VudCB3cm9uZyEEAAAADSR0MDE2MjU3MTYyOTkJAQAAAA92YWxpZGF0ZVBheW1lbnQAAAABBQAAAAFpBAAAAAZhbW91bnQIBQAAAA0kdDAxNjI1NzE2Mjk5AAAAAl8xBAAAAAdhc3NldElkCAUAAAANJHQwMTYyNTcxNjI5OQAAAAJfMgMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAABmFtb3VudAkAAAIAAAABAgAAABRTb21ldGhpbmcgd2VudCB3cm9uZwQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEmtleVR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAABRZb3UgYWxyZWFkeSBhZGRlZCBpdAQAAAAJaGFzaEV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAOa2V5T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoAwkBAAAAAiE9AAAAAgUAAAAJaGFzaEV4aXN0AgAAAAAJAAACAAAAAQIAAAAXSGFzaCBhbHJlYWR5IHJlZ2lzdGVyZWQEAAAAD2lzU2lnbkNlcnRpZmllZAkBAAAAFGNoZWNrU2lnbkNlcnRpZmljYXRlAAAAAwUAAAAGc2lnbklEBQAAAAZjYWxsZXIFAAAACnNoYTI1Nkhhc2gDCQEAAAABIQAAAAEFAAAAD2lzU2lnbkNlcnRpZmllZAkAAAIAAAABAgAAACxTaWduIENlcnRpZmljYXRlIG5vdCBmb3VuZCBmb3IgdGhpcyBhZGRyZXNzLgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleVR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAABmNhbGxlcgUAAAAFYXJ0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAdrZXlEYXRlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEZGF0ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAHa2V5TmFtZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleURlc2MAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5RGlzcGxheUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmNpZERpc3BsYXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleUV4cG9ydENpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACWNpZEV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5RXhwb3J0SGFzaAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAADHNoYTI1NkV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5TGljZW5jZUhhc2gAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtsaWNlbmNlSGFzaAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5TGljZW5jZUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmxpY2VuY2VDSUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleVR5cGUAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAR0eXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlUYWdzAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEdGFncwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAACmtleU1heE1pbnQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAdtYXhtaW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlTaWduSUQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAZzaWduSUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAlrZXlJc3N1ZWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkAAAAAAAAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAJa2V5T25TYWxlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleWlkQnlTaWduaWQAAAACBQAAAAZjYWxsZXIFAAAABnNpZ25JRAUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUhhc2hCeVR4aWRBZGRyAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAKc2hhMjU2SGFzaAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZmVlUmVjZWl2ZXIFAAAABmFtb3VudAUAAAAHYXNzZXRJZAUAAAADbmlsAAAAAWkBAAAADXVwZGF0ZUFydHdvcmsAAAALAAAABHR4aWQAAAAEbmFtZQAAAAtkZXNjcmlwdGlvbgAAAAR0YWdzAAAABHR5cGUAAAAHbWF4bWludAAAAApjaWREaXNwbGF5AAAADHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwQAAAAGY2FsbGVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADSR0MDE5MDIwMTkwODkJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDE5MDIwMTkwODkAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTkwMjAxOTA4OQAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAoFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwUAAAAHbWF4bWludAMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAB2tleU5hbWUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQDCQAAAAAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAAA9FbnRyeSBub3QgZm91bmQEAAAABGZsYWcJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAdrZXlGbGFnAAAAAgUAAAAGY2FsbGVyBQAAAAR0eGlkAwkAAAAAAAACBQAAAARmbGFnAgAAAAdJTExFR0FMCQAAAgAAAAECAAAAHUNhbm5vdCB1cGRhdGUgSUxMRUdBTCBhcnR3b3JrAwkBAAAAASEAAAABCQEAAAALaXNBcnRNaW50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", "height": 1365731, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FZrPqpPbS6bGhqZEy7cBkXRkRjx3Mt44C8eEhF8Wc4mt Next: 2cxAvvzc5FsNEFP345QymEikmgcZKmRJ7Qh381nmwbVz Diff:
OldNewDifferences
280280
281281
282282 func acceptedAssetIds (assetId) = if (if (if ((assetId != toBase58String(signAssetId)))
283- then (assetId != toBase58String(wavesAssetId))
283+ then if ((assetId != toBase58String(wavesAssetId)))
284+ then true
285+ else (assetId != "WAVES")
284286 else false)
285287 then (assetId != toBase58String(usdnAssetId))
286288 else false)
341343
342344
343345 func buyMint (i,artId,issuer,bidId,bidOwner) = {
344- let $t01175411792 = idCallerDate(i)
345- let id = $t01175411792._1
346- let caller = $t01175411792._2
347- let date = $t01175411792._3
346+ let $t01177811816 = idCallerDate(i)
347+ let id = $t01177811816._1
348+ let caller = $t01177811816._2
349+ let date = $t01177811816._3
348350 let totalNFT = getIntegerByKey("total_nft_issued")
349351 let signID = getStringByKey(keySignID(issuer, artId))
350352 let artworkName = getStringByKey(keyName(issuer, artId))
371373 else (0 >= maxCanSell))
372374 then throw("Art not for sale")
373375 else {
374- let $t01263912768 = if (isBid)
376+ let $t01266312792 = if (isBid)
375377 then getPriceAssetIdFromBid(bidDataKey)
376378 else validatePriceAssetId(i, priceAssetId, artworkPrice)
377- let amount = $t01263912768._1
378- let assetId = $t01263912768._2
379+ let amount = $t01266312792._1
380+ let assetId = $t01266312792._2
379381 let isWhitelisted = checkWhitelist(issuer)
380382 let cut = if ((isWhitelisted > height))
381383 then 0
427429
428430 @Callable(i)
429431 func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
430- let $t01579415835 = idCallerDate(i)
431- let artId = $t01579415835._1
432- let caller = $t01579415835._2
433- let date = $t01579415835._3
432+ let $t01581815859 = idCallerDate(i)
433+ let artId = $t01581815859._1
434+ let caller = $t01581815859._2
435+ let date = $t01581815859._3
434436 if (!(validateHash(sha256Hash)))
435437 then throw("Hash should be 64 characters maximum")
436438 else {
437- let $t01593616005 = setLIcence(cidLicence, sha256Licence)
438- let licenceCID = $t01593616005._1
439- let licenceHash = $t01593616005._2
439+ let $t01596016029 = setLIcence(cidLicence, sha256Licence)
440+ let licenceCID = $t01596016029._1
441+ let licenceHash = $t01596016029._2
440442 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
441443 if ((validateArtwork != ""))
442444 then throw("Something went wrong!")
443445 else {
444- let $t01623316275 = validatePayment(i)
445- let amount = $t01623316275._1
446- let assetId = $t01623316275._2
446+ let $t01625716299 = validatePayment(i)
447+ let amount = $t01625716299._1
448+ let assetId = $t01625716299._2
447449 if (!(isDefined(amount)))
448450 then throw("Something went wrong")
449451 else {
473475 then throw(maintenanceMSG)
474476 else {
475477 let caller = toBase58String(i.caller.bytes)
476- let $t01899619065 = setLIcence(cidLicence, sha256Licence)
477- let licenceCID = $t01899619065._1
478- let licenceHash = $t01899619065._2
478+ let $t01902019089 = setLIcence(cidLicence, sha256Licence)
479+ let licenceCID = $t01902019089._1
480+ let licenceHash = $t01902019089._2
479481 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
480482 if ((validateArtwork != ""))
481483 then throw("Something went wrong!")
498500
499501 @Callable(i)
500502 func flagArtwork (artId,addr,flag) = {
501- let $t02053820571 = idCallerDate(i)
502- let id = $t02053820571._1
503- let caller = $t02053820571._2
503+ let $t02056220595 = idCallerDate(i)
504+ let id = $t02056220595._1
505+ let caller = $t02056220595._2
504506 if (containsElement([chris, joep, toString(this)], caller))
505507 then if ((flag == "CONSENT"))
506508 then [StringEntry(keyFlag(addr, artId), flag)]
516518
517519 @Callable(i)
518520 func deleteArtwork (artId,addr) = {
519- let $t02141921452 = idCallerDate(i)
520- let id = $t02141921452._1
521- let caller = $t02141921452._2
521+ let $t02144321476 = idCallerDate(i)
522+ let id = $t02144321476._1
523+ let caller = $t02144321476._2
522524 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
523525 then addr
524526 else caller
551553
552554 @Callable(i)
553555 func sellArtwork (artId,price,maxMint,assetId) = {
554- let $t02381823851 = idCallerDate(i)
555- let id = $t02381823851._1
556- let caller = $t02381823851._2
556+ let $t02384223875 = idCallerDate(i)
557+ let id = $t02384223875._1
558+ let caller = $t02384223875._2
557559 let artworkName = getStringByKey(keyName(caller, artId))
558560 if ((artworkName == ""))
559561 then throw("This art doesn't match your account")
604606
605607 @Callable(i)
606608 func setBid (artId,issuer) = {
607- let $t02564725685 = idCallerDate(i)
608- let id = $t02564725685._1
609- let caller = $t02564725685._2
610- let date = $t02564725685._3
611- let $t02569025726 = isPayment(i)
612- let payment = $t02569025726._1
613- let amount = $t02569025726._2
609+ let $t02567125709 = idCallerDate(i)
610+ let id = $t02567125709._1
611+ let caller = $t02567125709._2
612+ let date = $t02567125709._3
613+ let $t02571425750 = isPayment(i)
614+ let payment = $t02571425750._1
615+ let amount = $t02571425750._2
614616 let assetId = if (!(isDefined(payment.assetId)))
615617 then "WAVES"
616618 else toBase58String(value(payment.assetId))
641643
642644 @Callable(i)
643645 func cancelBid (artId,issuer,bidId,bidOwner) = {
644- let $t02680926847 = idCallerDate(i)
645- let id = $t02680926847._1
646- let caller = $t02680926847._2
647- let date = $t02680926847._3
646+ let $t02683326871 = idCallerDate(i)
647+ let id = $t02683326871._1
648+ let caller = $t02683326871._2
649+ let date = $t02683326871._3
648650 if ((caller != bidOwner))
649651 then throw("You cannot do this action")
650652 else {
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 feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
1111
1212 let userDapp = if (unitTest)
1313 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1414 else value(addressFromString("3MwDZagoYEiNfQLc31cGpYoaE54MGMwoFrZ"))
1515
1616 let whitelistDapp = value(addressFromString("3N6BaV1dCB4zg43goNNHaCtvR13BcyJ5Gsq"))
1717
1818 let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
1919
2020 let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
2121
2222 let wavesAssetId = base58''
2323
2424 let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
2525
2626 let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
2727
2828 let signCut = 7
2929
3030 let usdnWaveCut = 10
3131
3232 let defaultLicence = "bafybeifuyo4pqu54ismqgtb6e4h6kkvgx7zg4u3zibh2r7y6mb64i7bzza/licence.pdf"
3333
3434 let defaultHashLicence = "a87758c354e30a9e78fb84fa3a0010a5090ab20df0be11ad45b5720cc187e639"
3535
3636 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3737
3838 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
3939
4040 let userSuspended = "SUSPENDED"
4141
4242 let userRemoved = "REMOVED"
4343
4444 let userUnregistered = "UNREGISTERED"
4545
4646 let userAllowed = "ALLOWED"
4747
4848 func getStringByKeyFromUsers (key) = valueOrElse(getString(userDapp, key), "")
4949
5050
5151 func getStringByKey (key) = valueOrElse(getString(this, key), "")
5252
5353
5454 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
5555
5656
5757 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
5858
5959
6060 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
6161
6262
6363 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
6464
6565
6666 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6767 case a: String =>
6868 if (contains(a, sha256Hash))
6969 then true
7070 else false
7171 case _ =>
7272 false
7373 }
7474
7575
7676 func validateCID (cid) = if (contains(cid, "/"))
7777 then if (if ((76 > size(cid)))
7878 then (size(split(cid, "/")[0]) == 59)
7979 else false)
8080 then (16 > size(split(cid, "/")[1]))
8181 else false
8282 else false
8383
8484
8585 func validateHash (hash) = (size(hash) == 64)
8686
8787
8888 func keyUserStatus (caller) = ("user_status_" + caller)
8989
9090
9191 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9292
9393
9494 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9595
9696
9797 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9898
9999
100100 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
101101
102102
103103 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
104104
105105
106106 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
107107
108108
109109 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
110110
111111
112112 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
113113
114114
115115 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
116116
117117
118118 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
119119
120120
121121 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
122122
123123
124124 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
125125
126126
127127 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
128128
129129
130130 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
131131
132132
133133 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
134134
135135
136136 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
137137
138138
139139 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
140140
141141
142142 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
143143
144144
145145 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
146146
147147
148148 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
149149
150150
151151 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
152152
153153
154154 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
155155 then throw("Wrong Display CID")
156156 else if (!(validateCID(cidExport)))
157157 then throw("Wrong Export CID")
158158 else if (if ((cidLicence != ""))
159159 then !(validateCID(cidLicence))
160160 else false)
161161 then throw("Wrong Licence CID")
162162 else true
163163
164164
165165 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
166166 then throw("Export Hash 64 char. max")
167167 else if (!(validateHash(sha256Licence)))
168168 then throw("Licence Hash 64 char. max")
169169 else true
170170
171171
172172 func validateString (str,max) = if ((size(str) == 0))
173173 then throw("Field cannot be is empty")
174174 else if ((size(str) > max))
175175 then throw((str + " is too long"))
176176 else true
177177
178178
179179 func validateUser (caller) = {
180180 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
181181 if (if ((userStatus == userUnregistered))
182182 then true
183183 else (userStatus == userAllowed))
184184 then "Register this account first with \"Account\" tab"
185185 else if ((userStatus == userSuspended))
186186 then "Account suspended"
187187 else if ((userStatus == userRemoved))
188188 then "Account removed"
189189 else ""
190190 }
191191
192192
193193 func setLIcence (cidLicence,sha256Licence) = {
194194 let cid = if ((size(cidLicence) == 0))
195195 then defaultLicence
196196 else cidLicence
197197 let hash = if ((size(sha256Licence) == 0))
198198 then defaultHashLicence
199199 else sha256Licence
200200 $Tuple2(cid, hash)
201201 }
202202
203203
204204 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,maxmint) = {
205205 let checkUser = validateUser(caller)
206206 if ((checkUser != ""))
207207 then throw(checkUser)
208208 else if ((size(cidDisplay) == 0))
209209 then throw("Display CID cannot be empty")
210210 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
211211 then throw("Problem with CID")
212212 else if (!(validateAllHash(sha256Export, licenceHash)))
213213 then throw("Problem with Hashes")
214214 else if (!(validateString(name, 100)))
215215 then throw("100 Char. max name")
216216 else if (!(validateString(description, 1000)))
217217 then throw("1000 Char. max description")
218218 else if ((size(split(tags, ",")) > 5))
219219 then throw("5 tags max.")
220220 else if ((maxmint > 10))
221221 then throw("10 editions max per artwork")
222222 else ""
223223 }
224224
225225
226226 func isPayment (i) = if ((size(i.payments) == 0))
227227 then throw("No payment attached")
228228 else {
229229 let payment = value(i.payments[0])
230230 let amount = value(payment.amount)
231231 $Tuple2(payment, amount)
232232 }
233233
234234
235235 func validatePayment (i) = {
236236 let $t089038939 = isPayment(i)
237237 let payment = $t089038939._1
238238 let amount = $t089038939._2
239239 let assetId = if (if (isDefined(payment.assetId))
240240 then (payment.assetId == signAssetId)
241241 else false)
242242 then payment.assetId
243243 else throw("Only SIGN token accepted as transaction fee")
244244 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
245245 if ((amount != currentCertificationPrice))
246246 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
247247 else $Tuple2(amount, assetId)
248248 }
249249
250250
251251 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
252252 case b: Int =>
253253 if ((b != 0))
254254 then true
255255 else false
256256 case _ =>
257257 false
258258 }
259259
260260
261261 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
262262 let $t096399675 = isPayment(i)
263263 let payment = $t096399675._1
264264 let amount = $t096399675._2
265265 let assetId = if (!(isDefined(payment.assetId)))
266266 then unit
267267 else if (if ((size(priceAssetId) > 0))
268268 then (toBase58String(value(payment.assetId)) == priceAssetId)
269269 else false)
270270 then payment.assetId
271271 else throw("Wrong asset id")
272272 if (if ((assetId == unit))
273273 then (priceAssetId != "")
274274 else false)
275275 then throw("Wrong asset id")
276276 else if ((artworkPrice != amount))
277277 then throw("Payment don't match")
278278 else $Tuple2(amount, assetId)
279279 }
280280
281281
282282 func acceptedAssetIds (assetId) = if (if (if ((assetId != toBase58String(signAssetId)))
283- then (assetId != toBase58String(wavesAssetId))
283+ then if ((assetId != toBase58String(wavesAssetId)))
284+ then true
285+ else (assetId != "WAVES")
284286 else false)
285287 then (assetId != toBase58String(usdnAssetId))
286288 else false)
287289 then throw("Only SIGN, USDN or WAVES accepted")
288290 else true
289291
290292
291293 func validateMinSell (assetId,price) = {
292294 let minSellWaves = if (unitTest)
293295 then 1
294296 else getIntegerByKeyFromOracle("waves_min_sell")
295297 let minSellUsdn = 1000000
296298 let minSellSign = if (unitTest)
297299 then 1
298300 else (getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId))) * 2)
299301 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
300302 then (minSellUsdn > price)
301303 else false)
302304 then (price != 0)
303305 else false)
304306 then true
305307 else if (if ((assetId == toBase58String(signAssetId)))
306308 then (minSellSign > price)
307309 else false)
308310 then (price != 0)
309311 else false)
310312 then true
311313 else if (if ((assetId == toBase58String(wavesAssetId)))
312314 then (minSellWaves > price)
313315 else false)
314316 then (price != 0)
315317 else false)
316318 then throw("Wrong minimum sell price")
317319 else true
318320 }
319321
320322
321323 func getPriceAssetIdFromBid (bidDataKey) = {
322324 let bidData = getStringByKey((bidDataKey + "_OPEN"))
323325 if ((bidData == ""))
324326 then throw("Bid not found")
325327 else {
326328 let bidDataArr = split(bidData, "_")
327329 let bidAmount = parseIntValue(bidDataArr[1])
328330 let bidAssetId = if ((bidDataArr[0] == "WAVES"))
329331 then unit
330332 else fromBase58String(bidDataArr[0])
331333 if ((0 >= bidAmount))
332334 then throw("Wrong amount")
333335 else $Tuple2(bidAmount, bidAssetId)
334336 }
335337 }
336338
337339
338340 func idCallerDate (i) = if (!(dappRunning))
339341 then throw(maintenanceMSG)
340342 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
341343
342344
343345 func buyMint (i,artId,issuer,bidId,bidOwner) = {
344- let $t01175411792 = idCallerDate(i)
345- let id = $t01175411792._1
346- let caller = $t01175411792._2
347- let date = $t01175411792._3
346+ let $t01177811816 = idCallerDate(i)
347+ let id = $t01177811816._1
348+ let caller = $t01177811816._2
349+ let date = $t01177811816._3
348350 let totalNFT = getIntegerByKey("total_nft_issued")
349351 let signID = getStringByKey(keySignID(issuer, artId))
350352 let artworkName = getStringByKey(keyName(issuer, artId))
351353 if ((artworkName == ""))
352354 then throw("Art doesn't exist")
353355 else {
354356 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
355357 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
356358 let artworkPrice = getIntegerByKey(keyPrice(issuer, artId))
357359 let priceAssetId = getStringByKey(keyAssetIdAccepted(issuer, artId))
358360 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
359361 let isBid = if (if (if ((caller == issuer))
360362 then (bidOwner != "")
361363 else false)
362364 then (bidId != "")
363365 else false)
364366 then true
365367 else false
366368 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
367369 if (if (if ((0 >= artworkPrice))
368370 then true
369371 else !(isOnSale))
370372 then true
371373 else (0 >= maxCanSell))
372374 then throw("Art not for sale")
373375 else {
374- let $t01263912768 = if (isBid)
376+ let $t01266312792 = if (isBid)
375377 then getPriceAssetIdFromBid(bidDataKey)
376378 else validatePriceAssetId(i, priceAssetId, artworkPrice)
377- let amount = $t01263912768._1
378- let assetId = $t01263912768._2
379+ let amount = $t01266312792._1
380+ let assetId = $t01266312792._2
379381 let isWhitelisted = checkWhitelist(issuer)
380382 let cut = if ((isWhitelisted > height))
381383 then 0
382384 else if ((priceAssetId == toBase58String(signAssetId)))
383385 then signCut
384386 else usdnWaveCut
385387 let amountForSign = fraction(amount, cut, 100)
386388 let amountForCreator = (amount - amountForSign)
387389 if ((amountSold == maxCanSell))
388390 then throw("Art sold out")
389391 else {
390392 let newAmountSold = (amountSold + 1)
391393 let issueMeta = ((((((((((("Creator: " + issuer) + ",
392394 ArtID: ") + artId) + ",
393395 SignID: ") + signID) + ",
394396 Artwork name: ") + artworkName) + ",
395397 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
396398 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
397399 let idNFT = calculateAssetId(issueNFT)
398400 let sellStatus = if ((newAmountSold == maxCanSell))
399401 then false
400402 else true
401403 let receiveNFT = if (if (if ((caller == issuer))
402404 then (bidOwner != "")
403405 else false)
404406 then (bidId != "")
405407 else false)
406408 then addressFromStringValue(bidOwner)
407409 else i.caller
408410 let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(receiveNFT, 1, idNFT)]
409411 let assetIdBid = if (!(isDefined(assetId)))
410412 then "WAVES"
411413 else toBase58String(value(assetId))
412414 let getBidData = getStringByKey((bidDataKey + "_OPEN"))
413415 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
414416 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((getBidData + "_") + toString(date)))
415417 let soldValue = if (!(isBid))
416418 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
417419 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
418420 let soldData = StringEntry(((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer), soldValue)
419421 if (isBid)
420422 then [soldData, bidUpdate, bidDelOld] :: buyRes
421423 else soldData :: buyRes
422424 }
423425 }
424426 }
425427 }
426428
427429
428430 @Callable(i)
429431 func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
430- let $t01579415835 = idCallerDate(i)
431- let artId = $t01579415835._1
432- let caller = $t01579415835._2
433- let date = $t01579415835._3
432+ let $t01581815859 = idCallerDate(i)
433+ let artId = $t01581815859._1
434+ let caller = $t01581815859._2
435+ let date = $t01581815859._3
434436 if (!(validateHash(sha256Hash)))
435437 then throw("Hash should be 64 characters maximum")
436438 else {
437- let $t01593616005 = setLIcence(cidLicence, sha256Licence)
438- let licenceCID = $t01593616005._1
439- let licenceHash = $t01593616005._2
439+ let $t01596016029 = setLIcence(cidLicence, sha256Licence)
440+ let licenceCID = $t01596016029._1
441+ let licenceHash = $t01596016029._2
440442 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
441443 if ((validateArtwork != ""))
442444 then throw("Something went wrong!")
443445 else {
444- let $t01623316275 = validatePayment(i)
445- let amount = $t01623316275._1
446- let assetId = $t01623316275._2
446+ let $t01625716299 = validatePayment(i)
447+ let amount = $t01625716299._1
448+ let assetId = $t01625716299._2
447449 if (!(isDefined(amount)))
448450 then throw("Something went wrong")
449451 else {
450452 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
451453 if ((entryExist != ""))
452454 then throw("You already added it")
453455 else {
454456 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
455457 if ((hashExist != ""))
456458 then throw("Hash already registered")
457459 else {
458460 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
459461 if (!(isSignCertified))
460462 then throw("Sign Certificate not found for this address.")
461463 else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), maxmint), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
462464 }
463465 }
464466 }
465467 }
466468 }
467469 }
468470
469471
470472
471473 @Callable(i)
472474 func updateArtwork (txid,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
473475 then throw(maintenanceMSG)
474476 else {
475477 let caller = toBase58String(i.caller.bytes)
476- let $t01899619065 = setLIcence(cidLicence, sha256Licence)
477- let licenceCID = $t01899619065._1
478- let licenceHash = $t01899619065._2
478+ let $t01902019089 = setLIcence(cidLicence, sha256Licence)
479+ let licenceCID = $t01902019089._1
480+ let licenceHash = $t01902019089._2
479481 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
480482 if ((validateArtwork != ""))
481483 then throw("Something went wrong!")
482484 else {
483485 let entryExist = getStringByKey(keyName(caller, txid))
484486 if ((entryExist == ""))
485487 then throw("Entry not found")
486488 else {
487489 let flag = getStringByKey(keyFlag(caller, txid))
488490 if ((flag == "ILLEGAL"))
489491 then throw("Cannot update ILLEGAL artwork")
490492 else if (!(isArtMinted(caller, txid)))
491493 then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), IntegerEntry(keyMaxMint(caller, txid), maxmint), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type)]
492494 else throw("Already minted")
493495 }
494496 }
495497 }
496498
497499
498500
499501 @Callable(i)
500502 func flagArtwork (artId,addr,flag) = {
501- let $t02053820571 = idCallerDate(i)
502- let id = $t02053820571._1
503- let caller = $t02053820571._2
503+ let $t02056220595 = idCallerDate(i)
504+ let id = $t02056220595._1
505+ let caller = $t02056220595._2
504506 if (containsElement([chris, joep, toString(this)], caller))
505507 then if ((flag == "CONSENT"))
506508 then [StringEntry(keyFlag(addr, artId), flag)]
507509 else if ((flag == ""))
508510 then [StringEntry(keyFlag(addr, artId), flag)]
509511 else if ((flag == "ILLEGAL"))
510512 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyName(addr, artId), "ILLEGAL CONTENT"), StringEntry(keyDesc(addr, artId), "ILLEGAL CONTENT"), StringEntry(keyDisplayCid(addr, artId), ""), StringEntry(keyExportCid(addr, artId), ""), StringEntry(keyLicenceCid(addr, artId), "")]
511513 else throw(("Unknow status " + flag))
512514 else throw("You are not allowed")
513515 }
514516
515517
516518
517519 @Callable(i)
518520 func deleteArtwork (artId,addr) = {
519- let $t02141921452 = idCallerDate(i)
520- let id = $t02141921452._1
521- let caller = $t02141921452._2
521+ let $t02144321476 = idCallerDate(i)
522+ let id = $t02144321476._1
523+ let caller = $t02144321476._2
522524 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
523525 then addr
524526 else caller
525527 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
526528 if ((entryExist == ""))
527529 then throw("No art matching for this address")
528530 else {
529531 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
530532 if ((sha256Hash == ""))
531533 then throw("No art hash matching for this address")
532534 else {
533535 let signID = getStringByKey(keySignID(addrToUse, artId))
534536 if ((signID == ""))
535537 then throw("No SIGN ID matching")
536538 else {
537539 let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addr, artId)), DeleteEntry(keyPrice(addr, artId)), DeleteEntry(keyAssetIdAccepted(addr, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse))]
538540 if (!(isArtMinted(addrToUse, artId)))
539541 then if (!(dappRunning))
540542 then throw(maintenanceMSG)
541543 else dataToDelete
542544 else if (containsElement([chris, toString(this)], caller))
543545 then dataToDelete
544546 else throw("Art already minted, you cannot delete it")
545547 }
546548 }
547549 }
548550 }
549551
550552
551553
552554 @Callable(i)
553555 func sellArtwork (artId,price,maxMint,assetId) = {
554- let $t02381823851 = idCallerDate(i)
555- let id = $t02381823851._1
556- let caller = $t02381823851._2
556+ let $t02384223875 = idCallerDate(i)
557+ let id = $t02384223875._1
558+ let caller = $t02384223875._2
557559 let artworkName = getStringByKey(keyName(caller, artId))
558560 if ((artworkName == ""))
559561 then throw("This art doesn't match your account")
560562 else {
561563 let exportCID = getStringByKey(keyExportCid(caller, artId))
562564 if ((size(split(exportCID, "/")[0]) != 59))
563565 then throw("You cannot sell art with no export file")
564566 else if (!(acceptedAssetIds(assetId)))
565567 then throw("Something went wrong!")
566568 else if (!(validateMinSell(assetId, price)))
567569 then throw("Something went wrong!")
568570 else {
569571 let checkUser = validateUser(caller)
570572 if ((checkUser != ""))
571573 then throw(checkUser)
572574 else {
573575 let amountSold = getIntegerByKey(keyIssued(caller, artId))
574576 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
575577 if ((maxMint > 10))
576578 then throw("10 editions max per artwork")
577579 else if (if ((amountSold != 0))
578580 then (amountSold == maxCanSell)
579581 else false)
580582 then throw("Max edition reached.")
581583 else if (if ((amountSold > 0))
582584 then (maxCanSell != maxMint)
583585 else false)
584586 then throw("Cannot change maximum issuable anymore")
585587 else {
586588 let sellStatus = if (if ((price > 0))
587589 then (maxMint > 0)
588590 else false)
589591 then true
590592 else false
591593 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId)]
592594 }
593595 }
594596 }
595597 }
596598 }
597599
598600
599601
600602 @Callable(i)
601603 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
602604
603605
604606
605607 @Callable(i)
606608 func setBid (artId,issuer) = {
607- let $t02564725685 = idCallerDate(i)
608- let id = $t02564725685._1
609- let caller = $t02564725685._2
610- let date = $t02564725685._3
611- let $t02569025726 = isPayment(i)
612- let payment = $t02569025726._1
613- let amount = $t02569025726._2
609+ let $t02567125709 = idCallerDate(i)
610+ let id = $t02567125709._1
611+ let caller = $t02567125709._2
612+ let date = $t02567125709._3
613+ let $t02571425750 = isPayment(i)
614+ let payment = $t02571425750._1
615+ let amount = $t02571425750._2
614616 let assetId = if (!(isDefined(payment.assetId)))
615617 then "WAVES"
616618 else toBase58String(value(payment.assetId))
617619 if (!(acceptedAssetIds(assetId)))
618620 then throw("Something went wrong!")
619621 else if (!(validateMinSell(assetId, amount)))
620622 then throw("Something went wrong!")
621623 else {
622624 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
623625 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
624626 if ((amountSold >= maxCanSell))
625627 then throw("Sold out, you cannot bid")
626628 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date)))]
627629 }
628630 }
629631
630632
631633
632634 @Callable(i)
633635 func acceptBid (artId,issuer,bidId,bidOwner) = {
634636 let caller = toBase58String(i.caller.bytes)
635637 if ((caller != issuer))
636638 then throw("You cannot do this action")
637639 else buyMint(i, artId, issuer, bidId, bidOwner)
638640 }
639641
640642
641643
642644 @Callable(i)
643645 func cancelBid (artId,issuer,bidId,bidOwner) = {
644- let $t02680926847 = idCallerDate(i)
645- let id = $t02680926847._1
646- let caller = $t02680926847._2
647- let date = $t02680926847._3
646+ let $t02683326871 = idCallerDate(i)
647+ let id = $t02683326871._1
648+ let caller = $t02683326871._2
649+ let date = $t02683326871._3
648650 if ((caller != bidOwner))
649651 then throw("You cannot do this action")
650652 else {
651653 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
652654 let bidData = getStringByKey((bidDataKey + "_OPEN"))
653655 if ((bidData == ""))
654656 then throw("Bid not found")
655657 else {
656658 let bidDataArr = split(bidData, "_")
657659 let assetId = if ((bidDataArr[0] == "WAVES"))
658660 then unit
659661 else fromBase58String(bidDataArr[0])
660662 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry((bidDataKey + "_CANCELED"), ((bidData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
661663 }
662664 }
663665 }
664666
665667
666668
667669 @Callable(i)
668670 func deleteEntry (entry) = {
669671 let caller = toString(addressFromPublicKey(i.callerPublicKey))
670672 if ((caller == chris))
671673 then [DeleteEntry(entry)]
672674 else throw("no")
673675 }
674676
675677

github/deemru/w8io/3ef1775 
119.61 ms