tx · 4qopqEGC4drZ3XJV3puRvYYymA6pDxy1gpNzGdT6q925

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01400000 Waves

2021.03.21 05:45 [1446914] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "4qopqEGC4drZ3XJV3puRvYYymA6pDxy1gpNzGdT6q925", "fee": 1400000, "feeAssetId": null, "timestamp": 1616294832561, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "222ShF5Pxe7rgKP7aYUsVMFVK3btTFMXLSqvFVtMfM6TgvinxvRQUYf9xJ9hF6WYNRsmkEMm7wptaRBd4or62efY" ], "script": "base64:AAIEAAAAAAAAAFQIAhINCgsICAgICAgICAgICBIMCgoICAgICAgICAgIEgUKAwgICBIECgIICBIGCgQIAQEIEgQKAggIEgQKAggIEgYKBAgICAgSBQoDCAgIEgMKAQgAAABLAAAAAAh1bml0VGVzdAYAAAAACW9yYWNsZUZlZQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjJzNVJ0YUhQQmVuQ3N4MkVDY29GUmJZSHgzbm9aaFhXMQAAAAAIc2lnbkRhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM05DMjhoU2l2cm1zVFVYYVlEMXg2TDM2Mko0WnBVbm9UZEIAAAAAC2ZlZVJlY2VpdmVyAgAAACMzTjFFNnRYZGRSb1ZhUmZROWRRM3ZnNUxhVzJmc2Q4SEt1YgAAAAAIdXNlckRhcHADBQAAAAh1bml0VGVzdAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjh4WGFZakUyN0FhNzlkNWhIcmhIdTlIYUZvVEJtaERFagAAAAANd2hpdGVsaXN0RGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjZCYVYxZENCNHpnNDNnb05OSGFDdHZSMTNCY3lKNUdzcQAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAt1c2RuQXNzZXRJZAEAAAAgD/IcEqzkxDya7EYaqyWosOy6BytGzG2IcvC14pJJAbQAAAAADHdhdmVzQXNzZXRJZAEAAAAAAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAAdzaWduQ3V0AAAAAAAAAAAHAAAAAAt1c2RuV2F2ZUN1dAAAAAAAAAAACgAAAAAOZGVmYXVsdExpY2VuY2UCAAAAR2JhZnliZWlmdXlvNHBxdTU0aXNtcWd0YjZlNGg2a2t2Z3g3emc0dTN6aWJoMnI3eTZtYjY0aTdienphL2xpY2VuY2UucGRmAAAAABJkZWZhdWx0SGFzaExpY2VuY2UCAAAAQGE4Nzc1OGMzNTRlMzBhOWU3OGZiODRmYTNhMDAxMGE1MDkwYWIyMGRmMGJlMTFhZDQ1YjU3MjBjYzE4N2U2MzkAAAAAC2RhcHBSdW5uaW5nCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX2RhcHBfaXNfcnVubmluZwYAAAAADm1haW50ZW5hbmNlTVNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX21haW50ZW5hbmNlX21zZwIAAAAAAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAAC3VzZXJBbGxvd2VkAgAAAAdBTExPV0VEAQAAABdnZXRTdHJpbmdCeUtleUZyb21Vc2VycwAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwBQAAAANrZXkCAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkCAAAAAAEAAAAZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAJb3JhY2xlRmVlBQAAAANrZXkCAAAAH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUBAAAAD2dldEludGVnZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAOY2hlY2tXaGl0ZWxpc3QAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA13aGl0ZWxpc3REYXBwBQAAAANrZXkA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BQAAAAthcnR3b3JrTmFtZQUAAAAKYW1vdW50U29sZAUAAAAMYXJ0d29ya1ByaWNlBQAAAAxwcmljZUFzc2V0SWQFAAAACm1heENhblNlbGwFAAAACGlzT25TYWxlAQAAAApnZXRCaWREYXRhAAAACQAAAAFpAAAABmNhbGxlcgAAAAZpc3N1ZXIAAAAFYXJ0SWQAAAAIYmlkT3duZXIAAAAFYmlkSWQAAAAMcHJpY2VBc3NldElkAAAADGFydHdvcmtQcmljZQAAAAVpc0JpZAQAAAAJY2hlY2tVc2VyCQEAAAAMdmFsaWRhdGVVc2VyAAAAAQUAAAAGaXNzdWVyAwMFAAAABWlzQmlkCQEAAAACIT0AAAACBQAAAAljaGVja1VzZXICAAAAAAcJAAACAAAAAQUAAAAJY2hlY2tVc2VyBAAAAApiaWREYXRhS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGJpZF8FAAAABWFydElkAgAAAAFfBQAAAAZpc3N1ZXICAAAAAV8FAAAACGJpZE93bmVyAgAAAAFfBQAAAAViaWRJZAQAAAANJHQwMTM0OTQxMzYyMwMFAAAABWlzQmlkCQEAAAAWZ2V0UHJpY2VBc3NldElkRnJvbUJpZAAAAAEFAAAACmJpZERhdGFLZXkJAQAAABR2YWxpZGF0ZVByaWNlQXNzZXRJZAAAAAMFAAAAAWkFAAAADHByaWNlQXNzZXRJZAUAAAAMYXJ0d29ya1ByaWNlBAAAAAZhbW91bnQIBQAAAA0kdDAxMzQ5NDEzNjIzAAAAAl8xBAAAAAdhc3NldElkCAUAAAANJHQwMTM0OTQxMzYyMwAAAAJfMgkABRUAAAADBQAAAApiaWREYXRhS2V5BQAAAAZhbW91bnQFAAAAB2Fzc2V0SWQBAAAAEWdldENvbW1pc3Npb25EYXRhAAAABQAAAAZpc3N1ZXIAAAAHYXNzZXRJZAAAAAZhbW91bnQAAAAKYW1vdW50U29sZAAAAAptYXhDYW5TZWxsBAAAAA1pc1doaXRlbGlzdGVkCQEAAAAOY2hlY2tXaGl0ZWxpc3QAAAABBQAAAAZpc3N1ZXIEAAAAA2N1dAMJAABmAAAAAgUAAAANaXNXaGl0ZWxpc3Rl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DSR0MDE1NDkxMTU1NDEJAQAAAAxpZENhbGxlckRhdGUAAAABBQAAAAFpBAAAAAJpZAgFAAAADSR0MDE1NDkxMTU1NDEAAAACXzEEAAAABmNhbGxlcggFAAAADSR0MDE1NDkxMTU1NDEAAAACXzIEAAAABGRhdGUIBQAAAA0kdDAxNTQ5MTE1NTQxAAAAAl8zBAAAAAVpc0JpZAkBAAAACmlzQmlkQ2hlY2sAAAAEBQAAAAFpBQAAAAZpc3N1ZXIFAAAACGJpZE93bmVyBQAAAAViaWRJZAQAAAANJHQwMTU2MjExNTc3MgkBAAAACmdldEFydERhdGEAAAAEBQAAAAFpBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAAVpc0JpZAQAAAAIdG90YWxORlQIBQAAAA0kdDAxNTYyMTE1NzcyAAAAAl8xBAAAAAZzaWduSUQIBQAAAA0kdDAxNTYyMTE1NzcyAAAAAl8yBAAAAAthcnR3b3JrTmFtZQgFAAAADSR0MDE1NjIxMTU3NzIAAAACXzMEAAAACmFtb3VudFNvbGQIBQAAAA0kdDAxNTYyMTE1NzcyAAAAAl80BAAAAAxhcnR3b3JrUHJpY2UIBQAAAA0kdDAxNTYyMTE1NzcyAAAAAl81BAAAAAxwcmljZUFzc2V0SWQIBQAAAA0kdDAxNTYyMTE1NzcyAAAAAl82BAAAAAptYXhDYW5TZWxsCAUAAAANJHQwMTU2MjExNTc3MgAAAAJfNwQAAAAIaXNPblNhbGUIBQAAAA0kdDAxNTYyMTE1NzcyAAAAAl84BAAAAA0kdDAxNTc3NzE1OTIzCQEAAAAKZ2V0QmlkRGF0YQAAAAkFAAAAAWkFAAAABmNhbGxlcgUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAAIYmlkT3duZXIFAAAABWJpZElkBQAAAAxwcmljZUFzc2V0SWQFAAAADGFydHdvcmtQcmljZQUAAAAFaXNCaWQEAAAACmJpZERhdGFLZXkIBQAAAA0kdDAxNTc3NzE1OTIzAAAAAl8xBAAAAAZhbW91bnQIBQAAAA0kdDAxNTc3NzE1OTIzAAAAAl8yBAAAAAdhc3NldElkCAUAAAANJHQwMTU3NzcxNTkyMwAAAAJfMwQAAAANJHQwMTU5MjgxNjA3MAkBAAAAEWdldENvbW1pc3Npb25EYXRhAAAABQUAAAAGaXNzdWVyBQAAAAdhc3NldElkBQAAAAZhbW91bnQFAAAACmFtb3VudFNvbGQFAAAACm1heENhblNlbGwEAAAADWFtb3VudEZvclNpZ24IBQAAAA0kdDAxNTkyODE2MDcwAAAAAl8xBAAAABBhbW91bnRGb3JDcmVhdG9yCAUAAAANJHQwMTU5MjgxNjA3MAAAAAJfMgQAAAANbmV3QW1vdW50U29sZAgFAAAADSR0MDE1OTI4MTYwNzAAAAACXzMEAAAADSR0MDE2MDc1MTYyNjUJAQAAAAxnZXRJc3N1ZURhdGEAAAAMBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAAZzaWduSUQFAAAAC2FydHdvcmtOYW1lBQAAAA1uZXdBbW91bnRTb2xkBQAAAAptYXhDYW5TZWxsBQAAAAh0b3RhbE5GVAUAAAAGY2FsbGVyBQAAAAhiaWRPd25lcgUAAAAFYmlkSWQFAAAAAWkFAAAACGlzT25TYWxlBAAAAAhpc3N1ZU5GVAgFAAAADSR0MDE2MDc1MTYyNjUAAAACXzEEAAAABWlkTkZUCAUAAAANJHQwMTYwNzUxNjI2NQAAAAJfMgQAAAAKc2VsbFN0YXR1cwgFAAAADSR0MDE2MDc1MTYyNjUAAAACXzMEAAAACnJlY2VpdmVORlQIBQAAAA0kdDAxNjA3NTE2MjY1AAAAAl80BAAAAA0kdDAxNjI3MDE2MzY5CQEAAAAMZ2V0QmlkS2V5VmFsAAAAAwUAAAAHYXNzZXRJZAUAAAAKYmlkRGF0YUtleQUAAAAEZGF0ZQQAAAAKYXNzZXRJZEJpZAgFAAAADSR0MDE2MjcwMTYzNjkAAAACXzEEAAAACWJpZERlbE9sZAgFAAAADSR0MDE2MjcwMTYzNjkAAAACXzIEAAAACWJpZFVwZGF0ZQgFAAAADSR0MDE2MjcwMTYzNjkAAAACXzMEAAAAB3NvbGRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0X3NvbGRfCQABpAAAAAEFAAAADW5ld0Ftb3VudFNvbGQCAAAABF9vZl8JAAGkAAAAAQUAAAAKbWF4Q2FuU2VsbAIAAAABXwUAAAAFYXJ0SWQCAAAAAV8FAAAABmlzc3VlcgQAAAAJc29sZFZhbHVlAwkBAAAAASEAAAABBQAAAAVpc0JpZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAAEZGF0ZQIAAAABXwUAAAACaWQCAAAAAV8JAAGkAAAAAQUAAAAMYXJ0d29ya1ByaWNlAgAAAAFfBQAAAAxwcmljZUFzc2V0SWQCAAAAAV8JAAJYAAAAAQUAAAAFaWRORlQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABBQAAAApyZWNlaXZlTkZUAgAAAAFfCQABpAAAAAEFAAAABGRhdGUCAAAAAV8FAAAAAmlkAgAAAAFfCQABpAAAAAEFAAAABmFtb3VudAIAAAABXwUAAAAKYXNzZXRJZEJpZAIAAAABXwkAAlgAAAABBQAAAAVpZE5GVAQAAAAIc29sZERhdGEJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAB3NvbGRLZXkFAAAACXNvbGRWYWx1ZQQAAAAGYnV5UmVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAJa2V5SXNzdWVkAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAANbmV3QW1vdW50U29sZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAABG5mdF8JAAJYAAAAAQUAAAAFaWRORlQFAAAAB3NvbGRLZXkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEHRvdGFsX25mdF9pc3N1ZWQJAABkAAAAAgUAAAAIdG90YWxORlQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAlrZXlPblNhbGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAApzZWxsU3RhdHVzCQAETAAAAAIFAAAACGlzc3VlTkZUCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAZpc3N1ZXIFAAAAEGFtb3VudEZvckNyZWF0b3IFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAC2ZlZVJlY2VpdmVyBQAAAA1hbW91bnRGb3JTaWduBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACnJlY2VpdmVORlQAAAAAAAAAAAEFAAAABWlkTkZUBQAAAANuaWwDBQAAAAVpc0JpZAkABEwAAAACBQAAAAhzb2xkRGF0YQkABEwAAAACBQAAAAliaWRVcGRhdGUJAARMAAAAAgUAAAAJYmlkRGVsT2xkBQAAAAZidXlSZXMJAARMAAAAAgUAAAAIc29sZERhdGEFAAAABmJ1eVJlcwAAAAoAAAABaQEAAAAKYWRkQXJ0d29yawAAAAsAAAAKc2hhMjU2SGFzaAAAAAZzaWduSUQAAAAEbmFtZQAAAAtkZXNjcmlwdGlvbgAAAAR0YWdzAAAABHR5cGUAAAAKY2lkRGlzcGxheQAAAAxzaGEyNTZFeHBvcnQAAAAJY2lkRXhwb3J0AAAADXNoYTI1NkxpY2VuY2UAAAAKY2lkTGljZW5jZQQAAAANJHQwMTc3MTUxNzc1NgkBAAAADGlkQ2FsbGVyRGF0ZQAAAAEFAAAAAWkEAAAABWFydElkCAUAAAANJHQwMTc3MTUxNzc1NgAAAAJfMQQAAAAGY2FsbGVyCAUAAAANJHQwMTc3MTUxNzc1NgAAAAJfMgQAAAAEZGF0ZQgFAAAADSR0MDE3NzE1MTc3NTYAAAACXzMDCQEAAAABIQAAAAEJAQAAAAx2YWxpZGF0ZUhhc2gAAAABBQAAAApzaGEyNTZIYXNoCQAAAgAAAAECAAAAJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQAAAANJHQwMTc4NTcxNzkyNgkBAAAACnNldExJY2VuY2UAAAACBQAAAApjaWRMaWNlbmNlBQAAAA1zaGEyNTZMaWNlbmNlBAAAAApsaWNlbmNlQ0lECAUAAAANJHQwMTc4NTcxNzkyNgAAAAJfMQQAAAALbGljZW5jZUhhc2gIBQAAAA0kdDAxNzg1NzE3OTI2AAAAAl8yBAAAAA92YWxpZGF0ZUFydHdvcmsJAQAAABN2YWxpZGF0ZUFydHdvcmtEYXRhAAAACQUAAAAGY2FsbGVyBQAAAApjaWREaXNwbGF5BQAAAAljaWRFeHBvcnQFAAAACmxpY2VuY2VDSUQFAAAADHNoYTI1NkV4cG9ydAUAAAALbGljZW5jZUhhc2gFAAAABG5hbWUFAAAAC2Rlc2NyaXB0aW9uBQAAAAR0YWdzAwkBAAAAAiE9AAAAAgUAAAAPdmFsaWRhdGVBcnR3b3JrAgAAAAAJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmchBAAAAA0kdDAxODE0NTE4MTg3CQEAAAAPdmFsaWRhdGVQYXltZW50AAAAAQUAAAABaQQAAAAGYW1vdW50CAUAAAANJHQwMTgxNDUxODE4NwAAAAJfMQQAAAAHYXNzZXRJZAgFAAAADSR0MDE4MTQ1MTgxODcAAAACXzIDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAZhbW91bnQJAAACAAAAAQIAAAAUU29tZXRoaW5nIHdlbnQgd3JvbmcEAAAACmVudHJ5RXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABJrZXlUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAUWW91IGFscmVhZHkgYWRkZWQgaXQEAAAACWhhc2hFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADmtleU93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAMJAQAAAAIhPQAAAAIFAAAACWhhc2hFeGlzdAIAAAAACQAAAgAAAAECAAAAF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBAAAAA9pc1NpZ25DZXJ0aWZpZWQJAQAAABRjaGVja1NpZ25DZXJ0aWZpY2F0ZQAAAAMFAAAABnNpZ25JRAUAAAAGY2FsbGVyBQAAAApzaGEyNTZIYXNoAwkBAAAAASEAAAABBQAAAA9pc1NpZ25DZXJ0aWZpZWQJAAACAAAAAQIAAAAsU2lnbiBDZXJ0aWZpY2F0ZSBub3QgZm91bmQgZm9yIHRoaXMgYWRkcmVzcy4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleU93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAUAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIFAAAABWFydElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAHa2V5RGF0ZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABGRhdGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleU5hbWUAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAARuYW1lCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlEZXNjAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAALZGVzY3JpcHRpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleURpc3BsYXlDaWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAApjaWREaXNwbGF5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlFeHBvcnRDaWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAljaWRFeHBvcnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleUV4cG9ydEhhc2gAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAxzaGEyNTZFeHBvcnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleUxpY2VuY2VIYXNoAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAALbGljZW5jZUhhc2gJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleUxpY2VuY2VDaWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAApsaWNlbmNlQ0lECQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlUeXBlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEdHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAHa2V5VGFncwAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABHRhZ3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAprZXlNYXhNaW50AAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAAAAAAAAAAAAAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5U2lnbklEAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAGc2lnbklECQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAJa2V5SXNzdWVkAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAAAAAAAAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAACWtleU9uU2FsZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlpZEJ5U2lnbmlkAAAAAgUAAAAGY2FsbGVyBQAAAAZzaWduSUQFAAAABWFydElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlIYXNoQnlUeGlkQWRkcgAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACnNoYTI1Nkhhc2gJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAC2ZlZVJlY2VpdmVyBQAAAAZhbW91bnQFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAAA11cGRhdGVBcnR3b3JrAAAACgAAAAR0eGlkAAAABG5hbWUAAAALZGVzY3JpcHRpb24AAAAEdGFncwAAAAR0eXBlAAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UDCQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAZjYWxsZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAANJHQwMjA4MjcyMDg5NgkBAAAACnNldExJY2VuY2UAAAACBQAAAApjaWRMaWNlbmNlBQAAAA1zaGEyNTZMaWNlbmNlBAAAAApsaWNlbmNlQ0lECAUAAAANJHQwMjA4MjcyMDg5NgAAAAJfMQQAAAALbGljZW5jZUhhc2gIBQAAAA0kdDAyMDgyNzIwODk2AAAAAl8yBAAAAA92YWxpZGF0ZUFydHdvcmsJAQAAABN2YWxpZGF0ZUFydHdvcmtEYXRhAAAACQUAAAAGY2FsbGVyBQAAAApjaWREaXNwbGF5BQAAAAljaWRFeHBvcnQFAAAACmxpY2VuY2VDSUQFAAAADHNoYTI1NkV4cG9ydAUAAAALbGljZW5jZUhhc2gFAAAABG5hbWUFAAAAC2Rlc2NyaXB0aW9uBQAAAAR0YWdzAwkBAAAAAiE9AAAAAgUAAAAPdmFsaWRhdGVBcnR3b3JrAgAAAAAJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmchBAAAAAplbnRyeUV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAHa2V5TmFtZQAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAMJAAAAAAAAAgUAAAAKZW50cnlFeGlzdAIAAAAACQAAAgAAAAECAAAAD0VudHJ5IG5vdCBmb3VuZAQAAAAEZmxhZwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAB2tleUZsYWcAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQDCQAAAAAAAAIFAAAABGZsYWcCAAAAB0lMTEVHQUwJAAACAAAAAQIAAAAdQ2Fubm90IHVwZGF0ZSBJTExFR0FMIGFydHdvcmsDCQEAAAABIQAAAAEJAQAAAAtpc0FydE1pbnRlZAAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAHa2V5TmFtZQAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAUAAAAE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", "height": 1446914, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ANcG6n6bAdRAWtxttR7tUhyRLGxhVxsLcJUmVBruYbxb Next: 96ryTQ78jqc7ZZrWrAKmtLgeUyWoeAheV52ma5396ndL Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let unitTest = false
4+let unitTest = true
55
66 let oracleFee = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
77
233233
234234
235235 func validatePayment (i) = {
236- let $t089699005 = isPayment(i)
237- let payment = $t089699005._1
238- let amount = $t089699005._2
236+ let $t089578993 = isPayment(i)
237+ let payment = $t089578993._1
238+ let amount = $t089578993._2
239239 let assetId = if (if (isDefined(payment.assetId))
240240 then (payment.assetId == signAssetId)
241241 else false)
258258
259259
260260 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
261- let $t095989634 = isPayment(i)
262- let payment = $t095989634._1
263- let amount = $t095989634._2
261+ let $t095869622 = isPayment(i)
262+ let payment = $t095869622._1
263+ let amount = $t095869622._2
264264 let assetId = if (!(isDefined(payment.assetId)))
265265 then unit
266266 else if (if ((size(priceAssetId) > 0))
356356
357357
358358 func getArtData (i,issuer,artId,isBid) = {
359+ let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
359360 let totalNFT = getIntegerByKey("total_nft_issued")
360361 let signID = getStringByKey(keySignID(issuer, artId))
361362 let artworkName = getStringByKey(keyName(issuer, artId))
364365 else {
365366 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
366367 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
367- let artworkPrice = getIntegerByKey(keyPrice(issuer, artId))
368- let priceAssetId = getStringByKey(keyAssetIdAccepted(issuer, artId))
368+ let artworkPrice = if (callerIsIssuer)
369+ then (currentCertificationPrice * 2)
370+ else getIntegerByKey(keyPrice(issuer, artId))
371+ let priceAssetId = if (callerIsIssuer)
372+ then toBase58String(signAssetId)
373+ else getStringByKey(keyAssetIdAccepted(issuer, artId))
369374 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
370- if (if (!(isBid))
375+ if (if (if (!(isBid))
376+ then !(callerIsIssuer)
377+ else false)
371378 then if (if ((0 >= artworkPrice))
372379 then true
373380 else !(isOnSale))
375382 else (0 >= maxCanSell)
376383 else false)
377384 then throw("Art not for sale")
378- else if (if (isBid)
385+ else if (if (if (!(isBid))
386+ then callerIsIssuer
387+ else false)
379388 then (0 >= maxCanSell)
380389 else false)
381- then throw("Art not open for Offer")
390+ then throw("Max issuable not set")
382391 else $Tuple8(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
383392 }
384393 }
392401 then throw(checkUser)
393402 else {
394403 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
395- let $t01329113420 = if (isBid)
404+ let $t01349413623 = if (isBid)
396405 then getPriceAssetIdFromBid(bidDataKey)
397406 else validatePriceAssetId(i, priceAssetId, artworkPrice)
398- let amount = $t01329113420._1
399- let assetId = $t01329113420._2
407+ let amount = $t01349413623._1
408+ let assetId = $t01349413623._2
400409 $Tuple3(bidDataKey, amount, assetId)
401410 }
402411 }
456465
457466
458467 func buyMint (i,artId,issuer,bidId,bidOwner) = {
459- let $t01529215342 = idCallerDate(i)
460- let id = $t01529215342._1
461- let caller = $t01529215342._2
462- let date = $t01529215342._3
468+ let $t01549115541 = idCallerDate(i)
469+ let id = $t01549115541._1
470+ let caller = $t01549115541._2
471+ let date = $t01549115541._3
463472 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
464- let $t01542215573 = getArtData(i, issuer, artId, isBid)
465- let totalNFT = $t01542215573._1
466- let signID = $t01542215573._2
467- let artworkName = $t01542215573._3
468- let amountSold = $t01542215573._4
469- let artworkPrice = $t01542215573._5
470- let priceAssetId = $t01542215573._6
471- let maxCanSell = $t01542215573._7
472- let isOnSale = $t01542215573._8
473- let $t01557815725 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
474- let bidDataKey = $t01557815725._1
475- let amount = $t01557815725._2
476- let assetId = $t01557815725._3
477- let $t01573015873 = getCommissionData(issuer, assetId, amount, amountSold, maxCanSell)
478- let amountForSign = $t01573015873._1
479- let amountForCreator = $t01573015873._2
480- let newAmountSold = $t01573015873._3
481- let $t01587816068 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
482- let issueNFT = $t01587816068._1
483- let idNFT = $t01587816068._2
484- let sellStatus = $t01587816068._3
485- let receiveNFT = $t01587816068._4
486- let $t01607316172 = getBidKeyVal(assetId, bidDataKey, date)
487- let assetIdBid = $t01607316172._1
488- let bidDelOld = $t01607316172._2
489- let bidUpdate = $t01607316172._3
473+ let $t01562115772 = getArtData(i, issuer, artId, isBid)
474+ let totalNFT = $t01562115772._1
475+ let signID = $t01562115772._2
476+ let artworkName = $t01562115772._3
477+ let amountSold = $t01562115772._4
478+ let artworkPrice = $t01562115772._5
479+ let priceAssetId = $t01562115772._6
480+ let maxCanSell = $t01562115772._7
481+ let isOnSale = $t01562115772._8
482+ let $t01577715923 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
483+ let bidDataKey = $t01577715923._1
484+ let amount = $t01577715923._2
485+ let assetId = $t01577715923._3
486+ let $t01592816070 = getCommissionData(issuer, assetId, amount, amountSold, maxCanSell)
487+ let amountForSign = $t01592816070._1
488+ let amountForCreator = $t01592816070._2
489+ let newAmountSold = $t01592816070._3
490+ let $t01607516265 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
491+ let issueNFT = $t01607516265._1
492+ let idNFT = $t01607516265._2
493+ let sellStatus = $t01607516265._3
494+ let receiveNFT = $t01607516265._4
495+ let $t01627016369 = getBidKeyVal(assetId, bidDataKey, date)
496+ let assetIdBid = $t01627016369._1
497+ let bidDelOld = $t01627016369._2
498+ let bidUpdate = $t01627016369._3
490499 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
491500 let soldValue = if (!(isBid))
492501 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
501510
502511 @Callable(i)
503512 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
504- let $t01751817559 = idCallerDate(i)
505- let artId = $t01751817559._1
506- let caller = $t01751817559._2
507- let date = $t01751817559._3
513+ let $t01771517756 = idCallerDate(i)
514+ let artId = $t01771517756._1
515+ let caller = $t01771517756._2
516+ let date = $t01771517756._3
508517 if (!(validateHash(sha256Hash)))
509518 then throw("Hash should be 64 characters maximum")
510519 else {
511- let $t01766017729 = setLIcence(cidLicence, sha256Licence)
512- let licenceCID = $t01766017729._1
513- let licenceHash = $t01766017729._2
520+ let $t01785717926 = setLIcence(cidLicence, sha256Licence)
521+ let licenceCID = $t01785717926._1
522+ let licenceHash = $t01785717926._2
514523 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
515524 if ((validateArtwork != ""))
516525 then throw("Something went wrong!")
517526 else {
518- let $t01794817990 = validatePayment(i)
519- let amount = $t01794817990._1
520- let assetId = $t01794817990._2
527+ let $t01814518187 = validatePayment(i)
528+ let amount = $t01814518187._1
529+ let assetId = $t01814518187._2
521530 if (!(isDefined(amount)))
522531 then throw("Something went wrong")
523532 else {
547556 then throw(maintenanceMSG)
548557 else {
549558 let caller = toBase58String(i.caller.bytes)
550- let $t02063020699 = setLIcence(cidLicence, sha256Licence)
551- let licenceCID = $t02063020699._1
552- let licenceHash = $t02063020699._2
559+ let $t02082720896 = setLIcence(cidLicence, sha256Licence)
560+ let licenceCID = $t02082720896._1
561+ let licenceHash = $t02082720896._2
553562 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
554563 if ((validateArtwork != ""))
555564 then throw("Something went wrong!")
572581
573582 @Callable(i)
574583 func flagArtwork (artId,addr,flag) = {
575- let $t02204122074 = idCallerDate(i)
576- let id = $t02204122074._1
577- let caller = $t02204122074._2
584+ let $t02223822271 = idCallerDate(i)
585+ let id = $t02223822271._1
586+ let caller = $t02223822271._2
578587 if (containsElement([chris, joep, toString(this)], caller))
579588 then if ((flag == "CONSENT"))
580589 then [StringEntry(keyFlag(addr, artId), flag)]
594603
595604 @Callable(i)
596605 func deleteArtwork (artId,addr) = {
597- let $t02309323126 = idCallerDate(i)
598- let id = $t02309323126._1
599- let caller = $t02309323126._2
606+ let $t02329023323 = idCallerDate(i)
607+ let id = $t02329023323._1
608+ let caller = $t02329023323._2
600609 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
601610 then addr
602611 else caller
629638
630639 @Callable(i)
631640 func sellArtwork (artId,price,maxMint,assetId) = {
632- let $t02549225525 = idCallerDate(i)
633- let id = $t02549225525._1
634- let caller = $t02549225525._2
641+ let $t02568925722 = idCallerDate(i)
642+ let id = $t02568925722._1
643+ let caller = $t02568925722._2
635644 let artworkName = getStringByKey(keyName(caller, artId))
636645 if ((artworkName == ""))
637646 then throw("This art doesn't match your account")
689698
690699 @Callable(i)
691700 func setBid (artId,issuer) = {
692- let $t02748727525 = idCallerDate(i)
693- let id = $t02748727525._1
694- let caller = $t02748727525._2
695- let date = $t02748727525._3
696- let $t02753027566 = isPayment(i)
697- let payment = $t02753027566._1
698- let amount = $t02753027566._2
701+ let $t02768427722 = idCallerDate(i)
702+ let id = $t02768427722._1
703+ let caller = $t02768427722._2
704+ let date = $t02768427722._3
705+ let $t02772727763 = isPayment(i)
706+ let payment = $t02772727763._1
707+ let amount = $t02772727763._2
699708 let assetId = if (!(isDefined(payment.assetId)))
700709 then "WAVES"
701710 else toBase58String(value(payment.assetId))
729738
730739 @Callable(i)
731740 func cancelBid (artId,issuer,bidId) = {
732- let $t02872028872 = idCallerDate(i)
733- let id = $t02872028872._1
734- let caller = $t02872028872._2
735- let date = $t02872028872._3
741+ let $t02891729069 = idCallerDate(i)
742+ let id = $t02891729069._1
743+ let caller = $t02891729069._2
744+ let date = $t02891729069._3
736745 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
737746 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
738747 let bidData = getStringByKey((bidDataKey + "_OPEN"))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let unitTest = false
4+let unitTest = true
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("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
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 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6767
6868 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6969 case a: String =>
7070 if (contains(a, sha256Hash))
7171 then true
7272 else false
7373 case _ =>
7474 false
7575 }
7676
7777
7878 func validateCID (cid) = if (contains(cid, "/"))
7979 then if (if ((76 > size(cid)))
8080 then (size(split(cid, "/")[0]) == 59)
8181 else false)
8282 then (16 > size(split(cid, "/")[1]))
8383 else false
8484 else false
8585
8686
8787 func validateHash (hash) = (size(hash) == 64)
8888
8989
9090 func keyUserStatus (caller) = ("user_status_" + caller)
9191
9292
9393 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9494
9595
9696 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9797
9898
9999 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
100100
101101
102102 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
103103
104104
105105 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
106106
107107
108108 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
109109
110110
111111 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
112112
113113
114114 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
115115
116116
117117 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
118118
119119
120120 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
121121
122122
123123 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
124124
125125
126126 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
127127
128128
129129 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
130130
131131
132132 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
133133
134134
135135 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
136136
137137
138138 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
139139
140140
141141 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
142142
143143
144144 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
145145
146146
147147 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
148148
149149
150150 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
151151
152152
153153 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
154154
155155
156156 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
157157 then throw("Wrong Display CID")
158158 else if (!(validateCID(cidExport)))
159159 then throw("Wrong Export CID")
160160 else if (if ((cidLicence != ""))
161161 then !(validateCID(cidLicence))
162162 else false)
163163 then throw("Wrong Licence CID")
164164 else true
165165
166166
167167 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
168168 then throw("Export Hash 64 char. max")
169169 else if (!(validateHash(sha256Licence)))
170170 then throw("Licence Hash 64 char. max")
171171 else true
172172
173173
174174 func validateString (str,max) = if ((size(str) == 0))
175175 then throw("Field cannot be is empty")
176176 else if ((size(str) > max))
177177 then throw((str + " is too long"))
178178 else true
179179
180180
181181 func validateUser (caller) = {
182182 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
183183 if (if ((userStatus == userUnregistered))
184184 then true
185185 else (userStatus == userAllowed))
186186 then "Register this account first with \"Account\" tab"
187187 else if ((userStatus == userSuspended))
188188 then "Account suspended"
189189 else if ((userStatus == userRemoved))
190190 then "Account removed"
191191 else ""
192192 }
193193
194194
195195 func setLIcence (cidLicence,sha256Licence) = {
196196 let cid = if ((size(cidLicence) == 0))
197197 then defaultLicence
198198 else cidLicence
199199 let hash = if ((size(sha256Licence) == 0))
200200 then defaultHashLicence
201201 else sha256Licence
202202 $Tuple2(cid, hash)
203203 }
204204
205205
206206 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags) = {
207207 let checkUser = validateUser(caller)
208208 if ((checkUser != ""))
209209 then throw(checkUser)
210210 else if ((size(cidDisplay) == 0))
211211 then throw("Display CID cannot be empty")
212212 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
213213 then throw("Problem with CID")
214214 else if (!(validateAllHash(sha256Export, licenceHash)))
215215 then throw("Problem with Hashes")
216216 else if (!(validateString(name, 100)))
217217 then throw("100 Char. max name")
218218 else if (!(validateString(description, 1000)))
219219 then throw("1000 Char. max description")
220220 else if ((size(split(tags, ",")) > 5))
221221 then throw("5 tags max.")
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) = {
236- let $t089699005 = isPayment(i)
237- let payment = $t089699005._1
238- let amount = $t089699005._2
236+ let $t089578993 = isPayment(i)
237+ let payment = $t089578993._1
238+ let amount = $t089578993._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 if ((amount != currentCertificationPrice))
245245 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
246246 else $Tuple2(amount, assetId)
247247 }
248248
249249
250250 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
251251 case b: Int =>
252252 if ((b != 0))
253253 then true
254254 else false
255255 case _ =>
256256 false
257257 }
258258
259259
260260 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
261- let $t095989634 = isPayment(i)
262- let payment = $t095989634._1
263- let amount = $t095989634._2
261+ let $t095869622 = isPayment(i)
262+ let payment = $t095869622._1
263+ let amount = $t095869622._2
264264 let assetId = if (!(isDefined(payment.assetId)))
265265 then unit
266266 else if (if ((size(priceAssetId) > 0))
267267 then (toBase58String(value(payment.assetId)) == priceAssetId)
268268 else false)
269269 then payment.assetId
270270 else throw("Wrong asset id")
271271 if (if ((assetId == unit))
272272 then (priceAssetId != "")
273273 else false)
274274 then throw("Wrong asset id")
275275 else if ((artworkPrice != amount))
276276 then throw("Payment don't match")
277277 else $Tuple2(amount, assetId)
278278 }
279279
280280
281281 func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
282282 then (assetId != toBase58String(wavesAssetId))
283283 else false)
284284 then (assetId != "WAVES")
285285 else false)
286286 then (assetId != toBase58String(usdnAssetId))
287287 else false)
288288 then throw("Only SIGN, USDN or WAVES accepted")
289289 else true
290290
291291
292292 func validateMinSell (assetId,price) = {
293293 let minSellWaves = if (unitTest)
294294 then 10
295295 else getIntegerByKeyFromOracle("waves_min_sell")
296296 let minSellUsdn = 1000000
297297 let minSellSign = if (unitTest)
298298 then 1
299299 else (currentCertificationPrice * 2)
300300 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
301301 then (minSellUsdn > price)
302302 else false)
303303 then (price != 0)
304304 else false)
305305 then true
306306 else if (if ((assetId == toBase58String(signAssetId)))
307307 then (minSellSign > price)
308308 else false)
309309 then (price != 0)
310310 else false)
311311 then true
312312 else if (if (if ((assetId == toBase58String(wavesAssetId)))
313313 then true
314314 else (assetId == "WAVES"))
315315 then (minSellWaves > price)
316316 else false)
317317 then (price != 0)
318318 else false)
319319 then throw("Wrong minimum sell price")
320320 else true
321321 }
322322
323323
324324 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
325325 then unit
326326 else fromBase58String(assetId)
327327
328328
329329 func getPriceAssetIdFromBid (bidDataKey) = {
330330 let bidData = getStringByKey((bidDataKey + "_OPEN"))
331331 if ((bidData == ""))
332332 then throw("Bid not found")
333333 else {
334334 let bidDataArr = split(bidData, "_")
335335 let bidAmount = parseIntValue(bidDataArr[1])
336336 let bidAssetId = getBidAssetId(bidDataArr[0])
337337 if ((0 >= bidAmount))
338338 then throw("Wrong amount")
339339 else $Tuple2(bidAmount, bidAssetId)
340340 }
341341 }
342342
343343
344344 func idCallerDate (i) = if (!(dappRunning))
345345 then throw(maintenanceMSG)
346346 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
347347
348348
349349 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
350350 then (bidOwner != "")
351351 else false)
352352 then (bidId != "")
353353 else false)
354354 then true
355355 else false
356356
357357
358358 func getArtData (i,issuer,artId,isBid) = {
359+ let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
359360 let totalNFT = getIntegerByKey("total_nft_issued")
360361 let signID = getStringByKey(keySignID(issuer, artId))
361362 let artworkName = getStringByKey(keyName(issuer, artId))
362363 if ((artworkName == ""))
363364 then throw("Art doesn't exist")
364365 else {
365366 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
366367 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
367- let artworkPrice = getIntegerByKey(keyPrice(issuer, artId))
368- let priceAssetId = getStringByKey(keyAssetIdAccepted(issuer, artId))
368+ let artworkPrice = if (callerIsIssuer)
369+ then (currentCertificationPrice * 2)
370+ else getIntegerByKey(keyPrice(issuer, artId))
371+ let priceAssetId = if (callerIsIssuer)
372+ then toBase58String(signAssetId)
373+ else getStringByKey(keyAssetIdAccepted(issuer, artId))
369374 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
370- if (if (!(isBid))
375+ if (if (if (!(isBid))
376+ then !(callerIsIssuer)
377+ else false)
371378 then if (if ((0 >= artworkPrice))
372379 then true
373380 else !(isOnSale))
374381 then true
375382 else (0 >= maxCanSell)
376383 else false)
377384 then throw("Art not for sale")
378- else if (if (isBid)
385+ else if (if (if (!(isBid))
386+ then callerIsIssuer
387+ else false)
379388 then (0 >= maxCanSell)
380389 else false)
381- then throw("Art not open for Offer")
390+ then throw("Max issuable not set")
382391 else $Tuple8(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
383392 }
384393 }
385394
386395
387396 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
388397 let checkUser = validateUser(issuer)
389398 if (if (isBid)
390399 then (checkUser != "")
391400 else false)
392401 then throw(checkUser)
393402 else {
394403 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
395- let $t01329113420 = if (isBid)
404+ let $t01349413623 = if (isBid)
396405 then getPriceAssetIdFromBid(bidDataKey)
397406 else validatePriceAssetId(i, priceAssetId, artworkPrice)
398- let amount = $t01329113420._1
399- let assetId = $t01329113420._2
407+ let amount = $t01349413623._1
408+ let assetId = $t01349413623._2
400409 $Tuple3(bidDataKey, amount, assetId)
401410 }
402411 }
403412
404413
405414 func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
406415 let isWhitelisted = checkWhitelist(issuer)
407416 let cut = if ((isWhitelisted > height))
408417 then 0
409418 else if ((assetId == signAssetId))
410419 then signCut
411420 else usdnWaveCut
412421 let amountForSign = fraction(amount, cut, 100)
413422 let amountForCreator = (amount - amountForSign)
414423 if ((amountSold == maxCanSell))
415424 then throw("Art sold out")
416425 else {
417426 let newAmountSold = (amountSold + 1)
418427 $Tuple3(amountForSign, amountForCreator, newAmountSold)
419428 }
420429 }
421430
422431
423432 func getIssueData (issuer,artId,signID,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
424433 let issueMeta = ((((((((((("Creator: " + issuer) + ",
425434 ArtID: ") + artId) + ",
426435 SignID: ") + signID) + ",
427436 Artwork name: ") + artworkName) + ",
428437 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
429438 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
430439 let idNFT = calculateAssetId(issueNFT)
431440 let sellStatus = if (if ((newAmountSold == maxCanSell))
432441 then true
433442 else !(isOnSale))
434443 then false
435444 else true
436445 let receiveNFT = if (if (if ((caller == issuer))
437446 then (bidOwner != "")
438447 else false)
439448 then (bidId != "")
440449 else false)
441450 then addressFromStringValue(bidOwner)
442451 else i.caller
443452 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
444453 }
445454
446455
447456 func getBidKeyVal (assetId,bidDataKey,date) = {
448457 let assetIdBid = if (!(isDefined(assetId)))
449458 then "WAVES"
450459 else toBase58String(value(assetId))
451460 let bidData = getStringByKey((bidDataKey + "_OPEN"))
452461 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
453462 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
454463 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
455464 }
456465
457466
458467 func buyMint (i,artId,issuer,bidId,bidOwner) = {
459- let $t01529215342 = idCallerDate(i)
460- let id = $t01529215342._1
461- let caller = $t01529215342._2
462- let date = $t01529215342._3
468+ let $t01549115541 = idCallerDate(i)
469+ let id = $t01549115541._1
470+ let caller = $t01549115541._2
471+ let date = $t01549115541._3
463472 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
464- let $t01542215573 = getArtData(i, issuer, artId, isBid)
465- let totalNFT = $t01542215573._1
466- let signID = $t01542215573._2
467- let artworkName = $t01542215573._3
468- let amountSold = $t01542215573._4
469- let artworkPrice = $t01542215573._5
470- let priceAssetId = $t01542215573._6
471- let maxCanSell = $t01542215573._7
472- let isOnSale = $t01542215573._8
473- let $t01557815725 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
474- let bidDataKey = $t01557815725._1
475- let amount = $t01557815725._2
476- let assetId = $t01557815725._3
477- let $t01573015873 = getCommissionData(issuer, assetId, amount, amountSold, maxCanSell)
478- let amountForSign = $t01573015873._1
479- let amountForCreator = $t01573015873._2
480- let newAmountSold = $t01573015873._3
481- let $t01587816068 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
482- let issueNFT = $t01587816068._1
483- let idNFT = $t01587816068._2
484- let sellStatus = $t01587816068._3
485- let receiveNFT = $t01587816068._4
486- let $t01607316172 = getBidKeyVal(assetId, bidDataKey, date)
487- let assetIdBid = $t01607316172._1
488- let bidDelOld = $t01607316172._2
489- let bidUpdate = $t01607316172._3
473+ let $t01562115772 = getArtData(i, issuer, artId, isBid)
474+ let totalNFT = $t01562115772._1
475+ let signID = $t01562115772._2
476+ let artworkName = $t01562115772._3
477+ let amountSold = $t01562115772._4
478+ let artworkPrice = $t01562115772._5
479+ let priceAssetId = $t01562115772._6
480+ let maxCanSell = $t01562115772._7
481+ let isOnSale = $t01562115772._8
482+ let $t01577715923 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
483+ let bidDataKey = $t01577715923._1
484+ let amount = $t01577715923._2
485+ let assetId = $t01577715923._3
486+ let $t01592816070 = getCommissionData(issuer, assetId, amount, amountSold, maxCanSell)
487+ let amountForSign = $t01592816070._1
488+ let amountForCreator = $t01592816070._2
489+ let newAmountSold = $t01592816070._3
490+ let $t01607516265 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
491+ let issueNFT = $t01607516265._1
492+ let idNFT = $t01607516265._2
493+ let sellStatus = $t01607516265._3
494+ let receiveNFT = $t01607516265._4
495+ let $t01627016369 = getBidKeyVal(assetId, bidDataKey, date)
496+ let assetIdBid = $t01627016369._1
497+ let bidDelOld = $t01627016369._2
498+ let bidUpdate = $t01627016369._3
490499 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
491500 let soldValue = if (!(isBid))
492501 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
493502 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
494503 let soldData = StringEntry(soldKey, soldValue)
495504 let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), 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)]
496505 if (isBid)
497506 then [soldData, bidUpdate, bidDelOld] :: buyRes
498507 else soldData :: buyRes
499508 }
500509
501510
502511 @Callable(i)
503512 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
504- let $t01751817559 = idCallerDate(i)
505- let artId = $t01751817559._1
506- let caller = $t01751817559._2
507- let date = $t01751817559._3
513+ let $t01771517756 = idCallerDate(i)
514+ let artId = $t01771517756._1
515+ let caller = $t01771517756._2
516+ let date = $t01771517756._3
508517 if (!(validateHash(sha256Hash)))
509518 then throw("Hash should be 64 characters maximum")
510519 else {
511- let $t01766017729 = setLIcence(cidLicence, sha256Licence)
512- let licenceCID = $t01766017729._1
513- let licenceHash = $t01766017729._2
520+ let $t01785717926 = setLIcence(cidLicence, sha256Licence)
521+ let licenceCID = $t01785717926._1
522+ let licenceHash = $t01785717926._2
514523 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
515524 if ((validateArtwork != ""))
516525 then throw("Something went wrong!")
517526 else {
518- let $t01794817990 = validatePayment(i)
519- let amount = $t01794817990._1
520- let assetId = $t01794817990._2
527+ let $t01814518187 = validatePayment(i)
528+ let amount = $t01814518187._1
529+ let assetId = $t01814518187._2
521530 if (!(isDefined(amount)))
522531 then throw("Something went wrong")
523532 else {
524533 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
525534 if ((entryExist != ""))
526535 then throw("You already added it")
527536 else {
528537 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
529538 if ((hashExist != ""))
530539 then throw("Hash already registered")
531540 else {
532541 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
533542 if (!(isSignCertified))
534543 then throw("Sign Certificate not found for this address.")
535544 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), 0), 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)]
536545 }
537546 }
538547 }
539548 }
540549 }
541550 }
542551
543552
544553
545554 @Callable(i)
546555 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
547556 then throw(maintenanceMSG)
548557 else {
549558 let caller = toBase58String(i.caller.bytes)
550- let $t02063020699 = setLIcence(cidLicence, sha256Licence)
551- let licenceCID = $t02063020699._1
552- let licenceHash = $t02063020699._2
559+ let $t02082720896 = setLIcence(cidLicence, sha256Licence)
560+ let licenceCID = $t02082720896._1
561+ let licenceHash = $t02082720896._2
553562 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
554563 if ((validateArtwork != ""))
555564 then throw("Something went wrong!")
556565 else {
557566 let entryExist = getStringByKey(keyName(caller, txid))
558567 if ((entryExist == ""))
559568 then throw("Entry not found")
560569 else {
561570 let flag = getStringByKey(keyFlag(caller, txid))
562571 if ((flag == "ILLEGAL"))
563572 then throw("Cannot update ILLEGAL artwork")
564573 else if (!(isArtMinted(caller, txid)))
565574 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), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type)]
566575 else throw("Already minted")
567576 }
568577 }
569578 }
570579
571580
572581
573582 @Callable(i)
574583 func flagArtwork (artId,addr,flag) = {
575- let $t02204122074 = idCallerDate(i)
576- let id = $t02204122074._1
577- let caller = $t02204122074._2
584+ let $t02223822271 = idCallerDate(i)
585+ let id = $t02223822271._1
586+ let caller = $t02223822271._2
578587 if (containsElement([chris, joep, toString(this)], caller))
579588 then if ((flag == "CONSENT"))
580589 then [StringEntry(keyFlag(addr, artId), flag)]
581590 else if ((flag == ""))
582591 then [StringEntry(keyFlag(addr, artId), flag)]
583592 else if ((flag == "CHANGE_REQUIRED"))
584593 then [StringEntry(keyFlag(addr, artId), flag)]
585594 else if (if ((flag == "ILLEGAL"))
586595 then containsElement([chris, toString(this)], caller)
587596 else false)
588597 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), "")]
589598 else throw(("Unknow status " + flag))
590599 else throw("You are not allowed")
591600 }
592601
593602
594603
595604 @Callable(i)
596605 func deleteArtwork (artId,addr) = {
597- let $t02309323126 = idCallerDate(i)
598- let id = $t02309323126._1
599- let caller = $t02309323126._2
606+ let $t02329023323 = idCallerDate(i)
607+ let id = $t02329023323._1
608+ let caller = $t02329023323._2
600609 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
601610 then addr
602611 else caller
603612 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
604613 if ((entryExist == ""))
605614 then throw("No art matching for this address")
606615 else {
607616 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
608617 if ((sha256Hash == ""))
609618 then throw("No art hash matching for this address")
610619 else {
611620 let signID = getStringByKey(keySignID(addrToUse, artId))
612621 if ((signID == ""))
613622 then throw("No SIGN ID matching")
614623 else {
615624 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))]
616625 if (!(isArtMinted(addrToUse, artId)))
617626 then if (!(dappRunning))
618627 then throw(maintenanceMSG)
619628 else dataToDelete
620629 else if (containsElement([chris, toString(this)], caller))
621630 then dataToDelete
622631 else throw("Art already minted, you cannot delete it")
623632 }
624633 }
625634 }
626635 }
627636
628637
629638
630639 @Callable(i)
631640 func sellArtwork (artId,price,maxMint,assetId) = {
632- let $t02549225525 = idCallerDate(i)
633- let id = $t02549225525._1
634- let caller = $t02549225525._2
641+ let $t02568925722 = idCallerDate(i)
642+ let id = $t02568925722._1
643+ let caller = $t02568925722._2
635644 let artworkName = getStringByKey(keyName(caller, artId))
636645 if ((artworkName == ""))
637646 then throw("This art doesn't match your account")
638647 else {
639648 let exportCID = getStringByKey(keyExportCid(caller, artId))
640649 if ((size(split(exportCID, "/")[0]) != 59))
641650 then throw("You cannot sell art with no export file")
642651 else {
643652 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
644653 if (!(acceptedAssetIds(assetId)))
645654 then throw("Something went wrong!")
646655 else if (!(validateMinSell(assetId, price)))
647656 then throw("Something went wrong!")
648657 else {
649658 let checkUser = validateUser(caller)
650659 if ((checkUser != ""))
651660 then throw(checkUser)
652661 else {
653662 let amountSold = getIntegerByKey(keyIssued(caller, artId))
654663 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
655664 if ((maxMint > 10))
656665 then throw("10 editions max per artwork")
657666 else if (if ((amountSold != 0))
658667 then (amountSold == maxCanSell)
659668 else false)
660669 then throw("Max edition reached.")
661670 else if (if ((amountSold > 0))
662671 then (maxCanSell != maxMint)
663672 else false)
664673 then throw("Cannot change maximum issuable anymore")
665674 else if (if ((bidNbr > 0))
666675 then (maxCanSell != maxMint)
667676 else false)
668677 then throw("Cannot change maximum issuable with active orders")
669678 else {
670679 let sellStatus = if (if ((price > 0))
671680 then (maxMint > 0)
672681 else false)
673682 then true
674683 else false
675684 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId)]
676685 }
677686 }
678687 }
679688 }
680689 }
681690 }
682691
683692
684693
685694 @Callable(i)
686695 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
687696
688697
689698
690699 @Callable(i)
691700 func setBid (artId,issuer) = {
692- let $t02748727525 = idCallerDate(i)
693- let id = $t02748727525._1
694- let caller = $t02748727525._2
695- let date = $t02748727525._3
696- let $t02753027566 = isPayment(i)
697- let payment = $t02753027566._1
698- let amount = $t02753027566._2
701+ let $t02768427722 = idCallerDate(i)
702+ let id = $t02768427722._1
703+ let caller = $t02768427722._2
704+ let date = $t02768427722._3
705+ let $t02772727763 = isPayment(i)
706+ let payment = $t02772727763._1
707+ let amount = $t02772727763._2
699708 let assetId = if (!(isDefined(payment.assetId)))
700709 then "WAVES"
701710 else toBase58String(value(payment.assetId))
702711 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
703712 if (!(acceptedAssetIds(assetId)))
704713 then throw("asset not accepted")
705714 else if (!(validateMinSell(assetId, amount)))
706715 then throw("Wrong min sell")
707716 else {
708717 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
709718 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
710719 if ((0 >= maxCanSell))
711720 then throw("No max edition set for this artwork")
712721 else if ((amountSold >= maxCanSell))
713722 then throw("Sold out, you cannot bid")
714723 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
715724 }
716725 }
717726
718727
719728
720729 @Callable(i)
721730 func acceptBid (artId,issuer,bidId,bidOwner) = {
722731 let caller = toBase58String(i.caller.bytes)
723732 if ((caller != issuer))
724733 then throw("You cannot do this action")
725734 else buyMint(i, artId, issuer, bidId, bidOwner)
726735 }
727736
728737
729738
730739 @Callable(i)
731740 func cancelBid (artId,issuer,bidId) = {
732- let $t02872028872 = idCallerDate(i)
733- let id = $t02872028872._1
734- let caller = $t02872028872._2
735- let date = $t02872028872._3
741+ let $t02891729069 = idCallerDate(i)
742+ let id = $t02891729069._1
743+ let caller = $t02891729069._2
744+ let date = $t02891729069._3
736745 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
737746 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
738747 let bidData = getStringByKey((bidDataKey + "_OPEN"))
739748 if ((bidData == ""))
740749 then throw("Bid not found")
741750 else {
742751 let bidDataArr = split(bidData, "_")
743752 let assetId = getBidAssetId(bidDataArr[0])
744753 let bidStatus = "CANCELED"
745754 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
746755 }
747756 }
748757
749758
750759
751760 @Callable(i)
752761 func deleteEntry (entry) = {
753762 let caller = toString(addressFromPublicKey(i.callerPublicKey))
754763 if ((caller == chris))
755764 then [DeleteEntry(entry)]
756765 else throw("no")
757766 }
758767
759768

github/deemru/w8io/169f3d6 
102.47 ms