tx · Fm6QjPp4aeGD2s8svM4jBeFrW7DDn5hbLjL1r1fhaAHP

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01400000 Waves

2021.02.25 07:52 [1413164] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "Fm6QjPp4aeGD2s8svM4jBeFrW7DDn5hbLjL1r1fhaAHP", "fee": 1400000, "feeAssetId": null, "timestamp": 1614228753946, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "4yBToKdyBMbVqxwBwtBmCgCZibucY8RaPrnwxJm3oPDbRTWodpFuyNpmBYEabQT1JhWYQo6P9L5k7nfSVCMFbZu" ], "script": "base64:AAIEAAAAAAAAAFYIAhIOCgwICAgICAgBCAgICAgSDQoLCAgICAgBCAgICAgSBQoDCAgIEgQKAggIEgYKBAgBAQgSBAoCCAgSBAoCCAgSBgoECAgICBIFCgMICAgSAwoBCAAAAEoAAAAACHVuaXRUZXN0BwAAAAAJb3JhY2xlRmVlCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOMnM1UnRhSFBCZW5Dc3gyRUNjb0ZSYllIeDNub1poWFcxAAAAAAhzaWduRGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkMyOGhTaXZybXNUVVhhWUQxeDZMMzYySjRacFVub1RkQgAAAAALZmVlUmVjZWl2ZXICAAAAIzNOMUU2dFhkZFJvVmFSZlE5ZFEzdmc1TGFXMmZzZDhIS3ViAAAAAAh1c2VyRGFwcAMFAAAACHVuaXRUZXN0CQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNd0RaYWdvWUVpTmZRTGMzMWNHcFlvYUU1NE1HTXdvRnJaAAAAAA13aGl0ZWxpc3REYXBwCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNONkJhVjFkQ0I0emc0M2dvTk5IYUN0dlIxM0JjeUo1R3NxAAAAAAtzaWduQXNzZXRJZAEAAAAg6KVqvMp3QvJwYTI1Sk9Fg7m5HuWZZxfDcerZC6EEresAAAAAC3VzZG5Bc3NldElkAQAAACAP8hwSrOTEPJrsRhqrJaiw7LoHK0bMbYhy8LXikkkBtAAAAAAMd2F2ZXNBc3NldElkAQAAAAAAAAAABWNocmlzAgAAACMzTXNHNmpQTkNyVkpVdFlCN1hKQnhTN3V0V3NYQWY0bjlWcAAAAAAEam9lcAIAAAAjM016bTRWTHdzTjl1WndiVE16UGozWHV4VjZrRWZBUjhVRE4AAAAAB3NpZ25DdXQAAAAAAAAAAAcAAAAAC3VzZG5XYXZlQ3V0AAAAAAAAAAAKAAAAAA5kZWZhdWx0TGljZW5jZQIAAABHYmFmeWJlaWZ1eW80cHF1NTRpc21xZ3RiNmU0aDZra3ZneDd6ZzR1M3ppYmgycjd5Nm1iNjRpN2J6emEvbGljZW5jZS5wZGYAAAAAEmRlZmF1bHRIYXNoTGljZW5jZQIAAABAYTg3NzU4YzM1NGUzMGE5ZTc4ZmI4NGZhM2EwMDEwYTUwOTBhYjIwZGYwYmUxMWFkNDViNTcyMGNjMTg3ZTYzOQAAAAALZGFwcFJ1bm5pbmcJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAIdXNlckRhcHACAAAAFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAAAAAObWFpbnRlbmFuY2VNU0cJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHACAAAAFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAAAAAAAAAADXVzZXJTdXNwZW5kZWQCAAAACVNVU1BFTkRFRAAAAAALdXNlclJlbW92ZWQCAAAAB1JFTU9WRUQAAAAAEHVzZXJVbnJlZ2lzdGVyZWQCAAAADFVOUkVHSVNURVJFRAAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQBAAAAF2dldFN0cmluZ0J5S2V5RnJvbVVzZXJzAAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHAFAAAAA2tleQIAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAABlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAlvcmFjbGVGZWUFAAAAA2tleQIAAAAfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAAAQAAAA5jaGVja1doaXRlbGlzdAAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAADXdoaXRlbGlzdERhcHAFAAAAA2tl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AAAACQAAAgAAAAECAAAAGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAABmAAAAAgkAATEAAAABBQAAAANzdHIFAAAAA21heAkAAAIAAAABCQABLAAAAAIFAAAAA3N0cgIAAAAMIGlzIHRvbyBsb25nBgEAAAAMdmFsaWRhdGVVc2VyAAAAAQAAAAZjYWxsZXIEAAAACnVzZXJTdGF0dXMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHAJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAGY2FsbGVyBQAAABB1c2VyVW5yZWdpc3RlcmVkAwMJAAAAAAAAAgUAAAAKdXNlclN0YXR1cwUAAAAQdXNlclVucmVnaXN0ZXJlZAYJAAAAAAAAAgUAAAAKdXNlclN0YXR1cwUAAAALdXNlckFsbG93ZWQCAAAALlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAAAAAAIFAAAACnVzZXJTdGF0dXMFAAAADXVzZXJTdXNwZW5kZWQCAAAAEUFjY291bnQgc3VzcGVuZGVkAwkAAAAAAAACBQAAAAp1c2VyU3RhdHVzBQAAAAt1c2VyUmVtb3ZlZAIAAAAPQWNjb3VudCByZW1vdmVkAgAAAAABAAAACnNldExJY2VuY2UAAAACAAAACmNpZExpY2VuY2UAAAANc2hhMjU2TGljZW5jZQQAAAADY2lkAwkAAAAAAAACCQABMQAAAAEFAAAACmNpZExpY2VuY2UAAAAAAAAAAAAFAAAADmRlZmF1bHRMaWNlbmNlBQAAAApjaWRMaWNlbmNlBAAAAARoYXNoAwkAAAAAAAACCQABMQAAAAEFAAAADXNoYTI1NkxpY2VuY2UAAAAAAAAAAAAFAAAAEmRlZmF1bHRIYXNoTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQkABRQAAAACBQAAAANjaWQFAAAABGhhc2gBAAAAE3ZhbGlkYXRlQXJ0d29ya0RhdGEAAAAKAAAABmNhbGxlcgAAAApjaWREaXNwbGF5AAAACWNpZEV4cG9ydAAAAApsaWNlbmNlQ0lEAAAADHNoYTI1NkV4cG9ydAAAAAtsaWNlbmNlSGFzaAAAAARuYW1lAAAAC2Rl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AQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAlrZXlTaWduSUQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAthcnR3b3JrTmFtZQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAB2tleU5hbWUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAAAAAAACBQAAAAthcnR3b3JrTmFtZQIAAAAACQAAAgAAAAECAAAAEUFydCBkb2Vzbid0IGV4aXN0BAAAAAhpc09uU2FsZQkBAAAAD2dldEJvb2xlYW5CeUtleQAAAAEJAQAAAAlrZXlPblNhbGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAphbW91bnRTb2xkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAACWtleUlzc3VlZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAADGFydHdvcmtQcmljZQMFAAAADmNhbGxlcklzSXNzdWVyCQEAAAAZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQAAAAEJAAEsAAAAAgIAAAASY2VydGlmaWNhdGlvbl9mZWVfCQACWAAAAAEFAAAAC3NpZ25Bc3NldElkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAACGtleVByaWNlAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAAMcHJpY2VBc3NldElkAwUAAAAOY2FsbGVySXNJc3N1ZXIJAAJYAAAAAQUAAAALc2lnbkFzc2V0SWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABJrZXlBc3NldElkQWNjZXB0ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAptYXhDYW5TZWxsCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAACmtleU1heE1pbnQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwMDCQEAAAABIQAAAAEFAAAABWlzQmlkCQEAAAABIQAAAAEFAAAADmNhbGxlcklzSXNzdWVyBwMDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGFydHdvcmtQcmljZQYJAQAAAAEhAAAAAQUAAAAIaXNPblNhbGUGCQAAZwAAAAIAAAAAAAAAAAAF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aWREYXRhAgAAAAFfCQABpAAAAAEFAAAABGRhdGUJAAUVAAAAAwUAAAAKYXNzZXRJZEJpZAUAAAAJYmlkRGVsT2xkBQAAAAliaWRVcGRhdGUBAAAAB2J1eU1pbnQAAAAFAAAAAWkAAAAFYXJ0SWQAAAAGaXNzdWVyAAAABWJpZElkAAAACGJpZE93bmVyBAAAAA0kdDAxNTYxMzE1NjYzCQEAAAAMaWRDYWxsZXJEYXRlAAAAAQUAAAABaQQAAAACaWQIBQAAAA0kdDAxNTYxMzE1NjYzAAAAAl8xBAAAAAZjYWxsZXIIBQAAAA0kdDAxNTYxMzE1NjYzAAAAAl8yBAAAAARkYXRlCAUAAAANJHQwMTU2MTMxNTY2MwAAAAJfMwQAAAAFaXNCaWQJAQAAAAppc0JpZENoZWNrAAAABAUAAAABaQUAAAAGaXNzdWVyBQAAAAhiaWRPd25lcgUAAAAFYmlkSWQEAAAADSR0MDE1NzQzMTU4ODQJAQAAAApnZXRBcnREYXRhAAAABAUAAAABaQUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAAFaXNCaWQEAAAACHRvdGFsTkZUCAUAAAANJHQwMTU3NDMxNTg4NAAAAAJfMQQAAAAGc2lnbklECAUAAAANJHQwMTU3NDMxNTg4NAAAAAJfMgQAAAALYXJ0d29ya05hbWUIBQAAAA0kdDAxNTc0MzE1ODg0AAAAAl8zBAAAAAphbW91bnRTb2xkCAUAAAANJHQwMTU3NDMxNTg4NAAAAAJfNAQAAAAMYXJ0d29ya1ByaWNlCAUAAAANJHQwMTU3NDMxNTg4NAAAAAJfNQQAAAAMcHJpY2VBc3NldElkCAUAAAANJHQwMTU3NDMxNTg4NAAAAAJfNgQAAAAKbWF4Q2FuU2VsbAgFAAAADSR0MDE1NzQzMTU4ODQAAAACXzcEAAAADSR0MDE1ODg5MTYwMzUJAQAAAApnZXRCaWREYXRhAAAACQUAAAABaQUAAAAGY2FsbGVyBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAAhiaWRPd25lcgUAAAAFYmlkSWQFAAAADHByaWNlQXNzZXRJZAUAAAAMYXJ0d29ya1ByaWNlBQAAAAVpc0JpZAQAAAAKYmlkRGF0YUtleQgFAAAADSR0MDE1ODg5MTYwMzUAAAACXzEEAAAABmFtb3VudAgFAAAADSR0MDE1ODg5MTYwMzUAAAACXzIEAAAAB2Fzc2V0SWQIBQAAAA0kdDAxNTg4OTE2MDM1AAAAAl8zBAAAAA0kdDAxNjA0MDE2MTg3CQEAAAARZ2V0Q29tbWlzc2lvbkRhdGEAAAAFBQAAAAZpc3N1ZXIFAAAADHByaWNlQXNzZXRJZAUAAAAGYW1vdW50BQAAAAphbW91bnRTb2xkBQAAAAptYXhDYW5TZWxsBAAAAA1hbW91bnRGb3JTaWduCAUAAAANJHQwMTYwNDAxNjE4NwAAAAJfMQQAAAAQYW1vdW50Rm9yQ3JlYXRvcggFAAAADSR0MDE2MDQwMTYxODcAAAACXzIEAAAADW5ld0Ftb3VudFNvbGQIBQAAAA0kdDAxNjA0MDE2MTg3AAAAAl8zBAAAAA0kdDAxNjE5MjE2MzcyCQEAAAAMZ2V0SXNzdWVEYXRhAAAACwUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAAGc2lnbklEBQAAAAthcnR3b3JrTmFtZQUAAAANbmV3QW1vdW50U29sZAUAAAAKbWF4Q2FuU2VsbAUAAAAIdG90YWxORlQFAAAABmNhbGxlcgUAAAAIYmlkT3duZXIFAAAABWJpZElkBQAAAAFpBAAAAAhpc3N1ZU5GVAgFAAAADSR0MDE2MTkyMTYzNzIAAAACXzEEAAAABWlkTkZUCAUAAAANJHQwMTYxOTIxNjM3MgAAAAJfMgQAAAAKc2VsbFN0YXR1cwgFAAAADSR0MDE2MTkyMTYzNzIAAAACXzMEAAAACnJlY2VpdmVORlQIBQAAAA0kdDAxNjE5MjE2MzcyAAAAAl80BAAAAA0kdDAxNjM3NzE2NDc2CQEAAAAMZ2V0QmlkS2V5VmFsAAAAAwUAAAAHYXNzZXRJZAUAAAAKYmlkRGF0YUtleQUAAAAEZGF0ZQQAAAAKYXNzZXRJZEJpZAgFAAAADSR0MDE2Mzc3MTY0NzYAAAACXzEEAAAACWJpZERlbE9sZAgFAAAADSR0MDE2Mzc3MTY0NzYAAAACXzIEAAAACWJpZFVwZGF0ZQgFAAAADSR0MDE2Mzc3MTY0NzYAAAACXzMEAAAAB3NvbGRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0X3NvbGRfCQABpAAAAAEFAAAADW5ld0Ftb3VudFNvbGQCAAAABF9vZl8JAAGkAAAAAQUAAAAKbWF4Q2FuU2VsbAIAAAABXwUAAAAFYXJ0SWQCAAAAAV8FAAAABmlzc3VlcgQAAAAJc29sZFZhbHVlAwkBAAAAASEAAAABBQAAAAVpc0JpZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAAEZGF0ZQIAAAABXwUAAAACaWQCAAAAAV8JAAGkAAAAAQUAAAAMYXJ0d29ya1ByaWNlAgAAAAFfBQAAAAxwcmljZUFzc2V0SWQCAAAAAV8JAAJYAAAAAQUAAAAFaWRORlQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABBQAAAApyZWNlaXZlTkZUAgAAAAFfCQABpAAAAAEFAAAABGRhdGUCAAAAAV8FAAAAAmlkAgAAAAFfCQABpAAAAAEFAAAABmFtb3VudAIAAAABXwUAAAAKYXNzZXRJZEJpZAIAAAABXwkAAlgAAAABBQAAAAVpZE5GVAQAAAAIc29sZERhdGEJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAB3NvbGRLZXkFAAAACXNvbGRWYWx1ZQQAAAAGYnV5UmVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAJa2V5SXNzdWVkAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAANbmV3QW1vdW50U29sZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAABG5mdF8JAAJYAAAAAQUAAAAFaWRORlQFAAAAB3NvbGRLZXkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEHRvdGFsX25mdF9pc3N1ZWQJAABkAAAAAgUAAAAIdG90YWxORlQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAlrZXlPblNhbGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAApzZWxsU3RhdHVzCQAETAAAAAIFAAAACGlzc3VlTkZUCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAZpc3N1ZXIFAAAAEGFtb3VudEZvckNyZWF0b3IFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAC2ZlZVJlY2VpdmVyBQAAAA1hbW91bnRGb3JTaWduBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACnJlY2VpdmVORlQAAAAAAAAAAAEFAAAABWlkTkZUBQAAAANuaWwDBQAAAAVpc0JpZAkABEwAAAACBQAAAAhzb2xkRGF0YQkABEwAAAACBQAAAAliaWRVcGRhdGUJAARMAAAAAgUAAAAJYmlkRGVsT2xkBQAAAAZidXlSZXMJAARMAAAAAgUAAAAIc29sZERhdGEFAAAABmJ1eVJlcwAAAAoAAAABaQEAAAAKYWRkQXJ0d29yawAAAAwAAAAKc2hhMjU2SGFzaAAAAAZzaWduSUQAAAAEbmFtZQAAAAtkZXNjcmlwdGlvbgAAAAR0YWdzAAAABHR5cGUAAAAHbWF4bWludAAAAApjaWREaXNwbGF5AAAADHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlBAAAAA0kdDAxNzgzNjE3ODc3CQEAAAAMaWRDYWxsZXJEYXRlAAAAAQUAAAABaQQAAAAFYXJ0SWQIBQAAAA0kdDAxNzgzNjE3ODc3AAAAAl8xBAAAAAZjYWxsZXIIBQAAAA0kdDAxNzgzNjE3ODc3AAAAAl8yBAAAAARkYXRlCAUAAAANJHQwMTc4MzYxNzg3NwAAAAJfMwMJAQAAAAEhAAAAAQkBAAAADHZhbGlkYXRlSGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gJAAACAAAAAQIAAAAkSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtBAAAAA0kdDAxNzk3ODE4MDQ3CQEAAAAKc2V0TEljZW5jZQAAAAIFAAAACmNpZExpY2VuY2UFAAAADXNoYTI1NkxpY2VuY2UEAAAACmxpY2VuY2VDSUQIBQAAAA0kdDAxNzk3ODE4MDQ3AAAAAl8xBAAAAAtsaWNlbmNlSGFzaAgFAAAADSR0MDE3OTc4MTgwNDcAAAACXzIEAAAAD3ZhbGlkYXRlQXJ0d29yawkBAAAAE3ZhbGlkYXRlQXJ0d29ya0RhdGEAAAAKBQAAAAZjYWxsZXIFAAAACmNpZERpc3BsYXkFAAAACWNpZEV4cG9ydAUAAAAKbGljZW5jZUNJRAUAAAAMc2hhMjU2RXhwb3J0BQAAAAtsaWNlbmNlSGFzaAUAAAAEbmFtZQUAAAALZGVzY3JpcHRpb24FAAAABHRhZ3MFAAAAB21heG1pbnQDCQEAAAACIT0AAAACBQAAAA92YWxpZGF0ZUFydHdvcmsCAAAAAAkAAAIAAAABAgAAABVTb21ldGhpbmcgd2VudCB3cm9uZyEEAAAADSR0MDE4Mjc1MTgzMTcJAQAAAA92YWxpZGF0ZVBheW1lbnQAAAABBQAAAAFpBAAAAAZhbW91bnQIBQAAAA0kdDAxODI3NTE4MzE3AAAAAl8xBAAAAAdhc3NldElkCAUAAAANJHQwMTgyNzUxODMxNwAAAAJfMgMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAABmFtb3VudAkAAAIAAAABAgAAABRTb21ldGhpbmcgd2VudCB3cm9uZwQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEmtleVR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAABRZb3UgYWxyZWFkeSBhZGRlZCBpdAQAAAAJaGFzaEV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAOa2V5T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoAwkBAAAAAiE9AAAAAgUAAAAJaGFzaEV4aXN0AgAAAAAJAAACAAAAAQIAAAAXSGFzaCBhbHJlYWR5IHJlZ2lzdGVyZWQEAAAAD2lzU2lnbkNlcnRpZmllZAkBAAAAFGNoZWNrU2lnbkNlcnRpZmljYXRlAAAAAwUAAAAGc2lnbklEBQAAAAZjYWxsZXIFAAAACnNoYTI1Nkhhc2gDCQEAAAABIQAAAAEFAAAAD2lzU2lnbkNlcnRpZmllZAkAAAIAAAABAgAAACxTaWduIENlcnRpZmljYXRlIG5vdCBmb3VuZCBmb3IgdGhpcyBhZGRyZXNzLgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleVR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAABmNhbGxlcgUAAAAFYXJ0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAdrZXlEYXRlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEZGF0ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAHa2V5TmFtZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleURlc2MAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5RGlzcGxheUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmNpZERpc3BsYXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleUV4cG9ydENpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACWNpZEV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5RXhwb3J0SGFzaAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAADHNoYTI1NkV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5TGljZW5jZUhhc2gAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtsaWNlbmNlSGFzaAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5TGljZW5jZUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmxpY2VuY2VDSUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleVR5cGUAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAR0eXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlUYWdzAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEdGFncwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAACmtleU1heE1pbnQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAdtYXhtaW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlTaWduSUQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAZzaWduSUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAlrZXlJc3N1ZWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkAAAAAAAAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAJa2V5T25TYWxlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleWlkQnlTaWduaWQAAAACBQAAAAZjYWxsZXIFAAAABnNpZ25JRAUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUhhc2hCeVR4aWRBZGRyAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAKc2hhMjU2SGFzaAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZmVlUmVjZWl2ZXIFAAAABmFtb3VudAUAAAAHYXNzZXRJZAUAAAADbmlsAAAAAWkBAAAADXVwZGF0ZUFydHdvcmsAAAALAAAABHR4aWQAAAAEbmFtZQAAAAtkZXNjcmlwdGlvbgAAAAR0YWdzAAAABHR5cGUAAAAHbWF4bWludAAAAApjaWREaXNwbGF5AAAADHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwQAAAAGY2FsbGVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADSR0MDIxMDM4MjExMDcJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDIxMDM4MjExMDcAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMjEwMzgyMTEwNwAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAoFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwUAAAAHbWF4bWludAMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAB2tleU5hbWUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQDCQAAAAAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAAA9FbnRyeSBub3QgZm91bmQEAAAABGZsYWcJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAdrZXlGbGFnAAAAAgUAAAAGY2FsbGVyBQAAAAR0eGlkAwkAAAAAAAACBQAAAARmbGFnAgAAAAdJTExFR0FMCQAAAgAAAAECAAAAHUNhbm5v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", "height": 1413164, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BY59S6AR92CV1svicUmvDnPwaNjLs8sjicgzXcMiVWvi Next: AfV4MxfWoXrjs1iETDZYeXTCRwBe1jqP2SFdxLmqr54Z Diff:
OldNewDifferences
358358
359359 func getArtData (i,issuer,artId,isBid) = {
360360 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
361- if (true)
362- then throw(("Is caller? = " + toString(callerIsIssuer)))
361+ let totalNFT = getIntegerByKey("total_nft_issued")
362+ let signID = getStringByKey(keySignID(issuer, artId))
363+ let artworkName = getStringByKey(keyName(issuer, artId))
364+ if ((artworkName == ""))
365+ then throw("Art doesn't exist")
363366 else {
364- let totalNFT = getIntegerByKey("total_nft_issued")
365- let signID = getStringByKey(keySignID(issuer, artId))
366- let artworkName = getStringByKey(keyName(issuer, artId))
367- if ((artworkName == ""))
368- then throw("Art doesn't exist")
369- else {
370- let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
371- let amountSold = getIntegerByKey(keyIssued(issuer, artId))
372- let artworkPrice = if (callerIsIssuer)
373- then getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
374- else getIntegerByKey(keyPrice(issuer, artId))
375- let priceAssetId = if (callerIsIssuer)
376- then toBase58String(signAssetId)
377- else getStringByKey(keyAssetIdAccepted(issuer, artId))
378- let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
379- if (if (if (if (if (!(isBid))
380- then !(callerIsIssuer)
381- else false)
382- then (0 >= artworkPrice)
383- else false)
384- then true
385- else !(isOnSale))
386- then true
387- else (0 >= maxCanSell))
388- then throw("Art not for sale")
389- else if (if (if (!(isBid))
390- then callerIsIssuer
391- else false)
392- then (0 >= maxCanSell)
393- else false)
394- then throw("Max issuable")
395- else $Tuple7(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell)
396- }
367+ let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
368+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
369+ let artworkPrice = if (callerIsIssuer)
370+ then getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
371+ else getIntegerByKey(keyPrice(issuer, artId))
372+ let priceAssetId = if (callerIsIssuer)
373+ then toBase58String(signAssetId)
374+ else getStringByKey(keyAssetIdAccepted(issuer, artId))
375+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
376+ if (if (if (!(isBid))
377+ then !(callerIsIssuer)
378+ else false)
379+ then if (if ((0 >= artworkPrice))
380+ then true
381+ else !(isOnSale))
382+ then true
383+ else (0 >= maxCanSell)
384+ else false)
385+ then throw("Art not for sale")
386+ else if (if (if (!(isBid))
387+ then callerIsIssuer
388+ else false)
389+ then (0 >= maxCanSell)
390+ else false)
391+ then throw("Max issuable")
392+ else $Tuple7(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell)
397393 }
398394 }
399395
406402 then throw(checkUser)
407403 else {
408404 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
409- let $t01370113830 = if (isBid)
405+ let $t01363113760 = if (isBid)
410406 then getPriceAssetIdFromBid(bidDataKey)
411407 else validatePriceAssetId(i, priceAssetId, artworkPrice)
412- let amount = $t01370113830._1
413- let assetId = $t01370113830._2
408+ let amount = $t01363113760._1
409+ let assetId = $t01363113760._2
414410 $Tuple3(bidDataKey, amount, assetId)
415411 }
416412 }
468464
469465
470466 func buyMint (i,artId,issuer,bidId,bidOwner) = {
471- let $t01568315733 = idCallerDate(i)
472- let id = $t01568315733._1
473- let caller = $t01568315733._2
474- let date = $t01568315733._3
467+ let $t01561315663 = idCallerDate(i)
468+ let id = $t01561315663._1
469+ let caller = $t01561315663._2
470+ let date = $t01561315663._3
475471 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
476- let $t01581315954 = getArtData(i, issuer, artId, isBid)
477- let totalNFT = $t01581315954._1
478- let signID = $t01581315954._2
479- let artworkName = $t01581315954._3
480- let amountSold = $t01581315954._4
481- let artworkPrice = $t01581315954._5
482- let priceAssetId = $t01581315954._6
483- let maxCanSell = $t01581315954._7
484- let $t01595916105 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
485- let bidDataKey = $t01595916105._1
486- let amount = $t01595916105._2
487- let assetId = $t01595916105._3
488- let $t01611016257 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
489- let amountForSign = $t01611016257._1
490- let amountForCreator = $t01611016257._2
491- let newAmountSold = $t01611016257._3
492- let $t01626216442 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i)
493- let issueNFT = $t01626216442._1
494- let idNFT = $t01626216442._2
495- let sellStatus = $t01626216442._3
496- let receiveNFT = $t01626216442._4
497- let $t01644716546 = getBidKeyVal(assetId, bidDataKey, date)
498- let assetIdBid = $t01644716546._1
499- let bidDelOld = $t01644716546._2
500- let bidUpdate = $t01644716546._3
472+ let $t01574315884 = getArtData(i, issuer, artId, isBid)
473+ let totalNFT = $t01574315884._1
474+ let signID = $t01574315884._2
475+ let artworkName = $t01574315884._3
476+ let amountSold = $t01574315884._4
477+ let artworkPrice = $t01574315884._5
478+ let priceAssetId = $t01574315884._6
479+ let maxCanSell = $t01574315884._7
480+ let $t01588916035 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
481+ let bidDataKey = $t01588916035._1
482+ let amount = $t01588916035._2
483+ let assetId = $t01588916035._3
484+ let $t01604016187 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
485+ let amountForSign = $t01604016187._1
486+ let amountForCreator = $t01604016187._2
487+ let newAmountSold = $t01604016187._3
488+ let $t01619216372 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i)
489+ let issueNFT = $t01619216372._1
490+ let idNFT = $t01619216372._2
491+ let sellStatus = $t01619216372._3
492+ let receiveNFT = $t01619216372._4
493+ let $t01637716476 = getBidKeyVal(assetId, bidDataKey, date)
494+ let assetIdBid = $t01637716476._1
495+ let bidDelOld = $t01637716476._2
496+ let bidUpdate = $t01637716476._3
501497 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
502498 let soldValue = if (!(isBid))
503499 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
512508
513509 @Callable(i)
514510 func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
515- let $t01790617947 = idCallerDate(i)
516- let artId = $t01790617947._1
517- let caller = $t01790617947._2
518- let date = $t01790617947._3
511+ let $t01783617877 = idCallerDate(i)
512+ let artId = $t01783617877._1
513+ let caller = $t01783617877._2
514+ let date = $t01783617877._3
519515 if (!(validateHash(sha256Hash)))
520516 then throw("Hash should be 64 characters maximum")
521517 else {
522- let $t01804818117 = setLIcence(cidLicence, sha256Licence)
523- let licenceCID = $t01804818117._1
524- let licenceHash = $t01804818117._2
518+ let $t01797818047 = setLIcence(cidLicence, sha256Licence)
519+ let licenceCID = $t01797818047._1
520+ let licenceHash = $t01797818047._2
525521 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
526522 if ((validateArtwork != ""))
527523 then throw("Something went wrong!")
528524 else {
529- let $t01834518387 = validatePayment(i)
530- let amount = $t01834518387._1
531- let assetId = $t01834518387._2
525+ let $t01827518317 = validatePayment(i)
526+ let amount = $t01827518317._1
527+ let assetId = $t01827518317._2
532528 if (!(isDefined(amount)))
533529 then throw("Something went wrong")
534530 else {
558554 then throw(maintenanceMSG)
559555 else {
560556 let caller = toBase58String(i.caller.bytes)
561- let $t02110821177 = setLIcence(cidLicence, sha256Licence)
562- let licenceCID = $t02110821177._1
563- let licenceHash = $t02110821177._2
557+ let $t02103821107 = setLIcence(cidLicence, sha256Licence)
558+ let licenceCID = $t02103821107._1
559+ let licenceHash = $t02103821107._2
564560 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
565561 if ((validateArtwork != ""))
566562 then throw("Something went wrong!")
583579
584580 @Callable(i)
585581 func flagArtwork (artId,addr,flag) = {
586- let $t02265022683 = idCallerDate(i)
587- let id = $t02265022683._1
588- let caller = $t02265022683._2
582+ let $t02258022613 = idCallerDate(i)
583+ let id = $t02258022613._1
584+ let caller = $t02258022613._2
589585 if (containsElement([chris, joep, toString(this)], caller))
590586 then if ((flag == "CONSENT"))
591587 then [StringEntry(keyFlag(addr, artId), flag)]
605601
606602 @Callable(i)
607603 func deleteArtwork (artId,addr) = {
608- let $t02370223735 = idCallerDate(i)
609- let id = $t02370223735._1
610- let caller = $t02370223735._2
604+ let $t02363223665 = idCallerDate(i)
605+ let id = $t02363223665._1
606+ let caller = $t02363223665._2
611607 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
612608 then addr
613609 else caller
640636
641637 @Callable(i)
642638 func sellArtwork (artId,price,maxMint,assetId) = {
643- let $t02610126134 = idCallerDate(i)
644- let id = $t02610126134._1
645- let caller = $t02610126134._2
639+ let $t02603126064 = idCallerDate(i)
640+ let id = $t02603126064._1
641+ let caller = $t02603126064._2
646642 let artworkName = getStringByKey(keyName(caller, artId))
647643 if ((artworkName == ""))
648644 then throw("This art doesn't match your account")
693689
694690 @Callable(i)
695691 func setBid (artId,issuer) = {
696- let $t02793027968 = idCallerDate(i)
697- let id = $t02793027968._1
698- let caller = $t02793027968._2
699- let date = $t02793027968._3
700- let $t02797328009 = isPayment(i)
701- let payment = $t02797328009._1
702- let amount = $t02797328009._2
692+ let $t02786027898 = idCallerDate(i)
693+ let id = $t02786027898._1
694+ let caller = $t02786027898._2
695+ let date = $t02786027898._3
696+ let $t02790327939 = isPayment(i)
697+ let payment = $t02790327939._1
698+ let amount = $t02790327939._2
703699 let assetId = if (!(isDefined(payment.assetId)))
704700 then "WAVES"
705701 else toBase58String(value(payment.assetId))
732728
733729 @Callable(i)
734730 func cancelBid (artId,issuer,bidId) = {
735- let $t02904129193 = idCallerDate(i)
736- let id = $t02904129193._1
737- let caller = $t02904129193._2
738- let date = $t02904129193._3
731+ let $t02897129123 = idCallerDate(i)
732+ let id = $t02897129123._1
733+ let caller = $t02897129123._2
734+ let date = $t02897129123._3
739735 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
740736 let bidData = getStringByKey((bidDataKey + "_OPEN"))
741737 if ((bidData == ""))
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 $t089098945 = isPayment(i)
237237 let payment = $t089098945._1
238238 let amount = $t089098945._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 $t096459681 = isPayment(i)
263263 let payment = $t096459681._1
264264 let amount = $t096459681._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 (if ((assetId != toBase58String(signAssetId)))
283283 then (assetId != toBase58String(wavesAssetId))
284284 else false)
285285 then (assetId != "WAVES")
286286 else false)
287287 then (assetId != toBase58String(usdnAssetId))
288288 else false)
289289 then throw("Only SIGN, USDN or WAVES accepted")
290290 else true
291291
292292
293293 func validateMinSell (assetId,price) = {
294294 let minSellWaves = if (unitTest)
295295 then 10
296296 else getIntegerByKeyFromOracle("waves_min_sell")
297297 let minSellUsdn = 1000000
298298 let minSellSign = if (unitTest)
299299 then 1
300300 else (getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId))) * 2)
301301 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
302302 then (minSellUsdn > price)
303303 else false)
304304 then (price != 0)
305305 else false)
306306 then true
307307 else if (if ((assetId == toBase58String(signAssetId)))
308308 then (minSellSign > price)
309309 else false)
310310 then (price != 0)
311311 else false)
312312 then true
313313 else if (if (if ((assetId == toBase58String(wavesAssetId)))
314314 then true
315315 else (assetId == "WAVES"))
316316 then (minSellWaves > price)
317317 else false)
318318 then (price != 0)
319319 else false)
320320 then throw("Wrong minimum sell price")
321321 else true
322322 }
323323
324324
325325 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
326326 then unit
327327 else fromBase58String(assetId)
328328
329329
330330 func getPriceAssetIdFromBid (bidDataKey) = {
331331 let bidData = getStringByKey((bidDataKey + "_OPEN"))
332332 if ((bidData == ""))
333333 then throw("Bid not found")
334334 else {
335335 let bidDataArr = split(bidData, "_")
336336 let bidAmount = parseIntValue(bidDataArr[1])
337337 let bidAssetId = getBidAssetId(bidDataArr[0])
338338 if ((0 >= bidAmount))
339339 then throw("Wrong amount")
340340 else $Tuple2(bidAmount, bidAssetId)
341341 }
342342 }
343343
344344
345345 func idCallerDate (i) = if (!(dappRunning))
346346 then throw(maintenanceMSG)
347347 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
348348
349349
350350 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
351351 then (bidOwner != "")
352352 else false)
353353 then (bidId != "")
354354 else false)
355355 then true
356356 else false
357357
358358
359359 func getArtData (i,issuer,artId,isBid) = {
360360 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
361- if (true)
362- then throw(("Is caller? = " + toString(callerIsIssuer)))
361+ let totalNFT = getIntegerByKey("total_nft_issued")
362+ let signID = getStringByKey(keySignID(issuer, artId))
363+ let artworkName = getStringByKey(keyName(issuer, artId))
364+ if ((artworkName == ""))
365+ then throw("Art doesn't exist")
363366 else {
364- let totalNFT = getIntegerByKey("total_nft_issued")
365- let signID = getStringByKey(keySignID(issuer, artId))
366- let artworkName = getStringByKey(keyName(issuer, artId))
367- if ((artworkName == ""))
368- then throw("Art doesn't exist")
369- else {
370- let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
371- let amountSold = getIntegerByKey(keyIssued(issuer, artId))
372- let artworkPrice = if (callerIsIssuer)
373- then getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
374- else getIntegerByKey(keyPrice(issuer, artId))
375- let priceAssetId = if (callerIsIssuer)
376- then toBase58String(signAssetId)
377- else getStringByKey(keyAssetIdAccepted(issuer, artId))
378- let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
379- if (if (if (if (if (!(isBid))
380- then !(callerIsIssuer)
381- else false)
382- then (0 >= artworkPrice)
383- else false)
384- then true
385- else !(isOnSale))
386- then true
387- else (0 >= maxCanSell))
388- then throw("Art not for sale")
389- else if (if (if (!(isBid))
390- then callerIsIssuer
391- else false)
392- then (0 >= maxCanSell)
393- else false)
394- then throw("Max issuable")
395- else $Tuple7(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell)
396- }
367+ let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
368+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
369+ let artworkPrice = if (callerIsIssuer)
370+ then getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
371+ else getIntegerByKey(keyPrice(issuer, artId))
372+ let priceAssetId = if (callerIsIssuer)
373+ then toBase58String(signAssetId)
374+ else getStringByKey(keyAssetIdAccepted(issuer, artId))
375+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
376+ if (if (if (!(isBid))
377+ then !(callerIsIssuer)
378+ else false)
379+ then if (if ((0 >= artworkPrice))
380+ then true
381+ else !(isOnSale))
382+ then true
383+ else (0 >= maxCanSell)
384+ else false)
385+ then throw("Art not for sale")
386+ else if (if (if (!(isBid))
387+ then callerIsIssuer
388+ else false)
389+ then (0 >= maxCanSell)
390+ else false)
391+ then throw("Max issuable")
392+ else $Tuple7(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell)
397393 }
398394 }
399395
400396
401397 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
402398 let checkUser = validateUser(issuer)
403399 if (if (isBid)
404400 then (checkUser != "")
405401 else false)
406402 then throw(checkUser)
407403 else {
408404 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
409- let $t01370113830 = if (isBid)
405+ let $t01363113760 = if (isBid)
410406 then getPriceAssetIdFromBid(bidDataKey)
411407 else validatePriceAssetId(i, priceAssetId, artworkPrice)
412- let amount = $t01370113830._1
413- let assetId = $t01370113830._2
408+ let amount = $t01363113760._1
409+ let assetId = $t01363113760._2
414410 $Tuple3(bidDataKey, amount, assetId)
415411 }
416412 }
417413
418414
419415 func getCommissionData (issuer,priceAssetId,amount,amountSold,maxCanSell) = {
420416 let isWhitelisted = checkWhitelist(issuer)
421417 let cut = if ((isWhitelisted > height))
422418 then 0
423419 else if ((priceAssetId == toBase58String(signAssetId)))
424420 then signCut
425421 else usdnWaveCut
426422 let amountForSign = fraction(amount, cut, 100)
427423 let amountForCreator = (amount - amountForSign)
428424 if ((amountSold == maxCanSell))
429425 then throw("Art sold out")
430426 else {
431427 let newAmountSold = (amountSold + 1)
432428 $Tuple3(amountForSign, amountForCreator, newAmountSold)
433429 }
434430 }
435431
436432
437433 func getIssueData (issuer,artId,signID,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i) = {
438434 let issueMeta = ((((((((((("Creator: " + issuer) + ",
439435 ArtID: ") + artId) + ",
440436 SignID: ") + signID) + ",
441437 Artwork name: ") + artworkName) + ",
442438 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
443439 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
444440 let idNFT = calculateAssetId(issueNFT)
445441 let sellStatus = if ((newAmountSold == maxCanSell))
446442 then false
447443 else true
448444 let receiveNFT = if (if (if ((caller == issuer))
449445 then (bidOwner != "")
450446 else false)
451447 then (bidId != "")
452448 else false)
453449 then addressFromStringValue(bidOwner)
454450 else i.caller
455451 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
456452 }
457453
458454
459455 func getBidKeyVal (assetId,bidDataKey,date) = {
460456 let assetIdBid = if (!(isDefined(assetId)))
461457 then "WAVES"
462458 else toBase58String(value(assetId))
463459 let bidData = getStringByKey((bidDataKey + "_OPEN"))
464460 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
465461 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
466462 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
467463 }
468464
469465
470466 func buyMint (i,artId,issuer,bidId,bidOwner) = {
471- let $t01568315733 = idCallerDate(i)
472- let id = $t01568315733._1
473- let caller = $t01568315733._2
474- let date = $t01568315733._3
467+ let $t01561315663 = idCallerDate(i)
468+ let id = $t01561315663._1
469+ let caller = $t01561315663._2
470+ let date = $t01561315663._3
475471 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
476- let $t01581315954 = getArtData(i, issuer, artId, isBid)
477- let totalNFT = $t01581315954._1
478- let signID = $t01581315954._2
479- let artworkName = $t01581315954._3
480- let amountSold = $t01581315954._4
481- let artworkPrice = $t01581315954._5
482- let priceAssetId = $t01581315954._6
483- let maxCanSell = $t01581315954._7
484- let $t01595916105 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
485- let bidDataKey = $t01595916105._1
486- let amount = $t01595916105._2
487- let assetId = $t01595916105._3
488- let $t01611016257 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
489- let amountForSign = $t01611016257._1
490- let amountForCreator = $t01611016257._2
491- let newAmountSold = $t01611016257._3
492- let $t01626216442 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i)
493- let issueNFT = $t01626216442._1
494- let idNFT = $t01626216442._2
495- let sellStatus = $t01626216442._3
496- let receiveNFT = $t01626216442._4
497- let $t01644716546 = getBidKeyVal(assetId, bidDataKey, date)
498- let assetIdBid = $t01644716546._1
499- let bidDelOld = $t01644716546._2
500- let bidUpdate = $t01644716546._3
472+ let $t01574315884 = getArtData(i, issuer, artId, isBid)
473+ let totalNFT = $t01574315884._1
474+ let signID = $t01574315884._2
475+ let artworkName = $t01574315884._3
476+ let amountSold = $t01574315884._4
477+ let artworkPrice = $t01574315884._5
478+ let priceAssetId = $t01574315884._6
479+ let maxCanSell = $t01574315884._7
480+ let $t01588916035 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
481+ let bidDataKey = $t01588916035._1
482+ let amount = $t01588916035._2
483+ let assetId = $t01588916035._3
484+ let $t01604016187 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
485+ let amountForSign = $t01604016187._1
486+ let amountForCreator = $t01604016187._2
487+ let newAmountSold = $t01604016187._3
488+ let $t01619216372 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i)
489+ let issueNFT = $t01619216372._1
490+ let idNFT = $t01619216372._2
491+ let sellStatus = $t01619216372._3
492+ let receiveNFT = $t01619216372._4
493+ let $t01637716476 = getBidKeyVal(assetId, bidDataKey, date)
494+ let assetIdBid = $t01637716476._1
495+ let bidDelOld = $t01637716476._2
496+ let bidUpdate = $t01637716476._3
501497 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
502498 let soldValue = if (!(isBid))
503499 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
504500 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
505501 let soldData = StringEntry(soldKey, soldValue)
506502 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)]
507503 if (isBid)
508504 then [soldData, bidUpdate, bidDelOld] :: buyRes
509505 else soldData :: buyRes
510506 }
511507
512508
513509 @Callable(i)
514510 func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
515- let $t01790617947 = idCallerDate(i)
516- let artId = $t01790617947._1
517- let caller = $t01790617947._2
518- let date = $t01790617947._3
511+ let $t01783617877 = idCallerDate(i)
512+ let artId = $t01783617877._1
513+ let caller = $t01783617877._2
514+ let date = $t01783617877._3
519515 if (!(validateHash(sha256Hash)))
520516 then throw("Hash should be 64 characters maximum")
521517 else {
522- let $t01804818117 = setLIcence(cidLicence, sha256Licence)
523- let licenceCID = $t01804818117._1
524- let licenceHash = $t01804818117._2
518+ let $t01797818047 = setLIcence(cidLicence, sha256Licence)
519+ let licenceCID = $t01797818047._1
520+ let licenceHash = $t01797818047._2
525521 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
526522 if ((validateArtwork != ""))
527523 then throw("Something went wrong!")
528524 else {
529- let $t01834518387 = validatePayment(i)
530- let amount = $t01834518387._1
531- let assetId = $t01834518387._2
525+ let $t01827518317 = validatePayment(i)
526+ let amount = $t01827518317._1
527+ let assetId = $t01827518317._2
532528 if (!(isDefined(amount)))
533529 then throw("Something went wrong")
534530 else {
535531 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
536532 if ((entryExist != ""))
537533 then throw("You already added it")
538534 else {
539535 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
540536 if ((hashExist != ""))
541537 then throw("Hash already registered")
542538 else {
543539 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
544540 if (!(isSignCertified))
545541 then throw("Sign Certificate not found for this address.")
546542 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)]
547543 }
548544 }
549545 }
550546 }
551547 }
552548 }
553549
554550
555551
556552 @Callable(i)
557553 func updateArtwork (txid,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
558554 then throw(maintenanceMSG)
559555 else {
560556 let caller = toBase58String(i.caller.bytes)
561- let $t02110821177 = setLIcence(cidLicence, sha256Licence)
562- let licenceCID = $t02110821177._1
563- let licenceHash = $t02110821177._2
557+ let $t02103821107 = setLIcence(cidLicence, sha256Licence)
558+ let licenceCID = $t02103821107._1
559+ let licenceHash = $t02103821107._2
564560 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
565561 if ((validateArtwork != ""))
566562 then throw("Something went wrong!")
567563 else {
568564 let entryExist = getStringByKey(keyName(caller, txid))
569565 if ((entryExist == ""))
570566 then throw("Entry not found")
571567 else {
572568 let flag = getStringByKey(keyFlag(caller, txid))
573569 if ((flag == "ILLEGAL"))
574570 then throw("Cannot update ILLEGAL artwork")
575571 else if (!(isArtMinted(caller, txid)))
576572 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)]
577573 else throw("Already minted")
578574 }
579575 }
580576 }
581577
582578
583579
584580 @Callable(i)
585581 func flagArtwork (artId,addr,flag) = {
586- let $t02265022683 = idCallerDate(i)
587- let id = $t02265022683._1
588- let caller = $t02265022683._2
582+ let $t02258022613 = idCallerDate(i)
583+ let id = $t02258022613._1
584+ let caller = $t02258022613._2
589585 if (containsElement([chris, joep, toString(this)], caller))
590586 then if ((flag == "CONSENT"))
591587 then [StringEntry(keyFlag(addr, artId), flag)]
592588 else if ((flag == ""))
593589 then [StringEntry(keyFlag(addr, artId), flag)]
594590 else if ((flag == "CHANGE_REQUIRED"))
595591 then [StringEntry(keyFlag(addr, artId), flag)]
596592 else if (if ((flag == "ILLEGAL"))
597593 then containsElement([chris, toString(this)], caller)
598594 else false)
599595 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), "")]
600596 else throw(("Unknow status " + flag))
601597 else throw("You are not allowed")
602598 }
603599
604600
605601
606602 @Callable(i)
607603 func deleteArtwork (artId,addr) = {
608- let $t02370223735 = idCallerDate(i)
609- let id = $t02370223735._1
610- let caller = $t02370223735._2
604+ let $t02363223665 = idCallerDate(i)
605+ let id = $t02363223665._1
606+ let caller = $t02363223665._2
611607 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
612608 then addr
613609 else caller
614610 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
615611 if ((entryExist == ""))
616612 then throw("No art matching for this address")
617613 else {
618614 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
619615 if ((sha256Hash == ""))
620616 then throw("No art hash matching for this address")
621617 else {
622618 let signID = getStringByKey(keySignID(addrToUse, artId))
623619 if ((signID == ""))
624620 then throw("No SIGN ID matching")
625621 else {
626622 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))]
627623 if (!(isArtMinted(addrToUse, artId)))
628624 then if (!(dappRunning))
629625 then throw(maintenanceMSG)
630626 else dataToDelete
631627 else if (containsElement([chris, toString(this)], caller))
632628 then dataToDelete
633629 else throw("Art already minted, you cannot delete it")
634630 }
635631 }
636632 }
637633 }
638634
639635
640636
641637 @Callable(i)
642638 func sellArtwork (artId,price,maxMint,assetId) = {
643- let $t02610126134 = idCallerDate(i)
644- let id = $t02610126134._1
645- let caller = $t02610126134._2
639+ let $t02603126064 = idCallerDate(i)
640+ let id = $t02603126064._1
641+ let caller = $t02603126064._2
646642 let artworkName = getStringByKey(keyName(caller, artId))
647643 if ((artworkName == ""))
648644 then throw("This art doesn't match your account")
649645 else {
650646 let exportCID = getStringByKey(keyExportCid(caller, artId))
651647 if ((size(split(exportCID, "/")[0]) != 59))
652648 then throw("You cannot sell art with no export file")
653649 else if (!(acceptedAssetIds(assetId)))
654650 then throw("Something went wrong!")
655651 else if (!(validateMinSell(assetId, price)))
656652 then throw("Something went wrong!")
657653 else {
658654 let checkUser = validateUser(caller)
659655 if ((checkUser != ""))
660656 then throw(checkUser)
661657 else {
662658 let amountSold = getIntegerByKey(keyIssued(caller, artId))
663659 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
664660 if ((maxMint > 10))
665661 then throw("10 editions max per artwork")
666662 else if (if ((amountSold != 0))
667663 then (amountSold == maxCanSell)
668664 else false)
669665 then throw("Max edition reached.")
670666 else if (if ((amountSold > 0))
671667 then (maxCanSell != maxMint)
672668 else false)
673669 then throw("Cannot change maximum issuable anymore")
674670 else {
675671 let sellStatus = if (if ((price > 0))
676672 then (maxMint > 0)
677673 else false)
678674 then true
679675 else false
680676 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId)]
681677 }
682678 }
683679 }
684680 }
685681 }
686682
687683
688684
689685 @Callable(i)
690686 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
691687
692688
693689
694690 @Callable(i)
695691 func setBid (artId,issuer) = {
696- let $t02793027968 = idCallerDate(i)
697- let id = $t02793027968._1
698- let caller = $t02793027968._2
699- let date = $t02793027968._3
700- let $t02797328009 = isPayment(i)
701- let payment = $t02797328009._1
702- let amount = $t02797328009._2
692+ let $t02786027898 = idCallerDate(i)
693+ let id = $t02786027898._1
694+ let caller = $t02786027898._2
695+ let date = $t02786027898._3
696+ let $t02790327939 = isPayment(i)
697+ let payment = $t02790327939._1
698+ let amount = $t02790327939._2
703699 let assetId = if (!(isDefined(payment.assetId)))
704700 then "WAVES"
705701 else toBase58String(value(payment.assetId))
706702 if (!(acceptedAssetIds(assetId)))
707703 then throw("asset not accepted")
708704 else if (!(validateMinSell(assetId, amount)))
709705 then throw("Wrong min sell")
710706 else {
711707 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
712708 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
713709 if ((0 >= maxCanSell))
714710 then throw("No max edition set for this artwork")
715711 else if ((amountSold >= maxCanSell))
716712 then throw("Sold out, you cannot bid")
717713 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date)))]
718714 }
719715 }
720716
721717
722718
723719 @Callable(i)
724720 func acceptBid (artId,issuer,bidId,bidOwner) = {
725721 let caller = toBase58String(i.caller.bytes)
726722 if ((caller != issuer))
727723 then throw("You cannot do this action")
728724 else buyMint(i, artId, issuer, bidId, bidOwner)
729725 }
730726
731727
732728
733729 @Callable(i)
734730 func cancelBid (artId,issuer,bidId) = {
735- let $t02904129193 = idCallerDate(i)
736- let id = $t02904129193._1
737- let caller = $t02904129193._2
738- let date = $t02904129193._3
731+ let $t02897129123 = idCallerDate(i)
732+ let id = $t02897129123._1
733+ let caller = $t02897129123._2
734+ let date = $t02897129123._3
739735 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
740736 let bidData = getStringByKey((bidDataKey + "_OPEN"))
741737 if ((bidData == ""))
742738 then throw("Bid not found")
743739 else {
744740 let bidDataArr = split(bidData, "_")
745741 let assetId = getBidAssetId(bidDataArr[0])
746742 let bidStatus = "CANCELED"
747743 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
748744 }
749745 }
750746
751747
752748
753749 @Callable(i)
754750 func deleteEntry (entry) = {
755751 let caller = toString(addressFromPublicKey(i.callerPublicKey))
756752 if ((caller == chris))
757753 then [DeleteEntry(entry)]
758754 else throw("no")
759755 }
760756
761757

github/deemru/w8io/169f3d6 
104.51 ms