2021.02.25 13:02 [2477337] smart account 3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV > SELF 0.00000000 Waves

{ "type": 13, "id": "CrSStV4RGdaobc3U2xRjXTXaF8ZvKCq9hNynm2TBcGiA", "fee": 1400000, "feeAssetId": null, "timestamp": 1614247337005, "version": 2, "chainId": 87, "sender": "3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV", "senderPublicKey": "FJN1qxUehh3hhFX9NAXWBFbSKT2sTzc2pjTJ1JxjQdBh", "proofs": [ "5B4d6a5Q4zxLLmKUf2ygUXqyBuAkkBoYdTg1pgZsSFNbnGxZwTvbWTw5meBDF6pxREvZ9FLocccVUP1sDmz5AR4q" ], "script": "base64:AAIEAAAAAAAAAFYIAhIOCgwICAgICAgBCAgICAgSDQoLCAgICAgBCAgICAgSBQoDCAgIEgQKAggIEgYKBAgBAQgSBAoCCAgSBAoCCAgSBgoECAgICBIFCgMICAgSAwoBCAAAAEsAAAAACHVuaXRUZXN0BwAAAAAJb3JhY2xlRmVlCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNQQWpyVHFZTGdGRzI0a1J3aXlVMzRub3VtejRwejJrWFBLAAAAAAhzaWduRGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzUDlmTk43d1Q2dTJCcEtKM3QyRWRRaTJwWTlvcFVFNmV0dAAAAAALZmVlUmVjZWl2ZXICAAAAIzNQRmFjc3Z1VTlzbjJac3RhTENXS1duNDh5VDF2ZkFSUlJVAAAAAAh1c2VyRGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzUEdTV0RnYWQ0UnRjZVFZWEJwcTJ4NzNtWExSSllMUnFSUAAAAAANd2hpdGVsaXN0RGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzUFJGVFBtNGhiVWh4aGpRZEU4Y0dhWEdBZnpHTHE0dmE4SAAAAAALc2lnbkFzc2V0SWQBAAAAIIPHkq+4VK8OAjXLmW+XWyWkxkt+QINXbtevPAOr6hEdAAAAAAt1c2RuQXNzZXRJZAEAAAAgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEAAAAADHdhdmVzQXNzZXRJZAEAAAAAAAAAAAVjaHJpcwIAAAAjM1A0SnV0QktXNnBBRG05MUZ4TWZHTDNFWXhLSnRXWXNXZlgAAAAABGpvZXACAAAAIzNQTEtYUEppZ1pKNGFWcXBNR3g1YWp5UFltQTRaY3J5OVRiAAAAAAdzaWduQ3V0AAAAAAAAAAAHAAAAAAt1c2RuV2F2ZUN1dAAAAAAAAAAACgAAAAAOZGVmYXVsdExpY2VuY2UCAAAAR2JhZnliZWlmdXlvNHBxdTU0aXNtcWd0YjZlNGg2a2t2Z3g3emc0dTN6aWJoMnI3eTZtYjY0aTdienphL2xpY2VuY2UucGRmAAAAABJkZWZhdWx0SGFzaExpY2VuY2UCAAAAQGE4Nzc1OGMzNTRlMzBhOWU3OGZiODRmYTNhMDAxMGE1MDkwYWIyMGRmMGJlMTFhZDQ1YjU3MjBjYzE4N2U2MzkAAAAAC2RhcHBSdW5uaW5nCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX2RhcHBfaXNfcnVubmluZwYAAAAADm1haW50ZW5hbmNlTVNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX21haW50ZW5hbmNlX21zZwIAAAAAAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAAC3VzZXJBbGxvd2VkAgAAAAdBTExPV0VEAQAAABdnZXRTdHJpbmdCeUtleUZyb21Vc2VycwAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwBQAAAANrZXkCAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkCAAAAAAEAAAAZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAJb3JhY2xlRmVlBQAAAANrZXkCAAAAH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUBAAAAD2dldEludGVnZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAOY2hlY2tXaGl0ZWxpc3QAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA13aGl0ZWxpc3REYXBwBQAAAANrZXkAAAAAAAAAAAABAAAAD2dldEJvb2xlYW5CeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABHRo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c2lnbklEBQAAAAthcnR3b3JrTmFtZQUAAAAKYW1vdW50U29sZAUAAAAMYXJ0d29ya1ByaWNlBQAAAAxwcmljZUFzc2V0SWQFAAAACm1heENhblNlbGwFAAAACGlzT25TYWxlAQAAAApnZXRCaWREYXRhAAAACQAAAAFpAAAABmNhbGxlcgAAAAZpc3N1ZXIAAAAFYXJ0SWQAAAAIYmlkT3duZXIAAAAFYmlkSWQAAAAMcHJpY2VBc3NldElkAAAADGFydHdvcmtQcmljZQAAAAVpc0JpZAQAAAAJY2hlY2tVc2VyCQEAAAAMdmFsaWRhdGVVc2VyAAAAAQUAAAAGaXNzdWVyAwMFAAAABWlzQmlkCQEAAAACIT0AAAACBQAAAAljaGVja1VzZXICAAAAAAcJAAACAAAAAQUAAAAJY2hlY2tVc2VyBAAAAApiaWREYXRhS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGJpZF8FAAAABWFydElkAgAAAAFfBQAAAAZpc3N1ZXICAAAAAV8FAAAACGJpZE93bmVyAgAAAAFfBQAAAAViaWRJZAQAAAANJHQwMTM1NTcxMzY4NgMFAAAABWlzQmlkCQEAAAAWZ2V0UHJpY2VBc3NldElkRnJvbUJpZAAAAAEFAAAACmJpZERhdGFLZXkJAQAAABR2YWxpZGF0ZVByaWNlQXNzZXRJZAAAAAMFAAAAAWkFAAAADHByaWNlQXNzZXRJZAUAAAAMYXJ0d29ya1ByaWNlBAAAAAZhbW91bnQIBQAAAA0kdDAxMzU1NzEzNjg2AAAAAl8xBAAAAAdhc3NldElkCAUAAAANJHQwMTM1NTcxMzY4NgAAAAJfMgkABRUAAAADBQAAAApiaWREYXRhS2V5BQAAAAZhbW91bnQFAAAAB2Fzc2V0SWQBAAAAEWdldENvbW1pc3Npb25EYXRhAAAABQAAAAZpc3N1ZXIAAAAMcHJpY2VBc3NldElkAAAABmFtb3VudAAAAAphbW91bnRTb2xkAAAACm1heENhblNlbGwEAAAADWlzV2hpdGVsaXN0ZWQJAQAAAA5jaGVja1doaXRlbGlzdAAAAAEFAAAABmlzc3VlcgQAAAADY3V0AwkAAGYAAAACBQAAAA1p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AAAFYmlkSWQAAAAIYmlkT3duZXIEAAAADSR0MDE1NTcxMTU2MjEJAQAAAAxpZENhbGxlckRhdGUAAAABBQAAAAFpBAAAAAJpZAgFAAAADSR0MDE1NTcxMTU2MjEAAAACXzEEAAAABmNhbGxlcggFAAAADSR0MDE1NTcxMTU2MjEAAAACXzIEAAAABGRhdGUIBQAAAA0kdDAxNTU3MTE1NjIxAAAAAl8zBAAAAAVpc0JpZAkBAAAACmlzQmlkQ2hlY2sAAAAEBQAAAAFpBQAAAAZpc3N1ZXIFAAAACGJpZE93bmVyBQAAAAViaWRJZAQAAAANJHQwMTU3MDExNTg1MgkBAAAACmdldEFydERhdGEAAAAEBQAAAAFpBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAAVpc0JpZAQAAAAIdG90YWxORlQIBQAAAA0kdDAxNTcwMTE1ODUyAAAAAl8xBAAAAAZzaWduSUQIBQAAAA0kdDAxNTcwMTE1ODUyAAAAAl8yBAAAAAthcnR3b3JrTmFtZQgFAAAADSR0MDE1NzAxMTU4NTIAAAACXzMEAAAACmFtb3VudFNvbGQIBQAAAA0kdDAxNTcwMTE1ODUyAAAAAl80BAAAAAxhcnR3b3JrUHJpY2UIBQAAAA0kdDAxNTcwMTE1ODUyAAAAAl81BAAAAAxwcmljZUFzc2V0SWQIBQAAAA0kdDAxNTcwMTE1ODUyAAAAAl82BAAAAAptYXhDYW5TZWxsCAUAAAANJHQwMTU3MDExNTg1MgAAAAJfNwQAAAAIaXNPblNhbGUIBQAAAA0kdDAxNTcwMTE1ODUyAAAAAl84BAAAAA0kdDAxNTg1NzE2MDAzCQEAAAAKZ2V0QmlkRGF0YQAAAAkFAAAAAWkFAAAABmNhbGxlcgUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAAIYmlkT3duZXIFAAAABWJpZElkBQAAAAxwcmljZUFzc2V0SWQFAAAADGFydHdvcmtQcmljZQUAAAAFaXNCaWQEAAAACmJpZERhdGFLZXkIBQAAAA0kdDAxNTg1NzE2MDAzAAAAAl8xBAAAAAZhbW91bnQIBQAAAA0kdDAxNTg1NzE2MDAzAAAAAl8yBAAAAAdhc3NldElkCAUAAAANJHQwMTU4NTcxNjAwMwAAAAJfMwQAAAANJHQwMTYwMDgxNjE1NQkBAAAAEWdldENvbW1pc3Npb25EYXRhAAAABQUAAAAGaXNzdWVyBQAAAAxwcmljZUFzc2V0SWQFAAAABmFtb3VudAUAAAAKYW1vdW50U29sZAUAAAAKbWF4Q2FuU2VsbAQAAAANYW1vdW50Rm9yU2lnbggFAAAADSR0MDE2MDA4MTYxNTUAAAACXzEEAAAAEGFtb3VudEZvckNyZWF0b3IIBQAAAA0kdDAxNjAwODE2MTU1AAAAAl8yBAAAAA1uZXdBbW91bnRTb2xkCAUAAAANJHQwMTYwMDgxNjE1NQAAAAJfMwQAAAANJHQwMTYxNjAxNjM1MAkBAAAADGdldElzc3VlRGF0YQAAAAwFAAAABmlzc3VlcgUAAAAFYXJ0SWQFAAAABnNpZ25JRAUAAAALYXJ0d29ya05hbWUFAAAADW5ld0Ftb3VudFNvbGQFAAAACm1heENhblNlbGwFAAAACHRvdGFsTkZUBQAAAAZjYWxsZXIFAAAACGJpZE93bmVyBQAAAAViaWRJZAUAAAABaQUAAAAIaXNPblNhbGUEAAAACGlzc3VlTkZUCAUAAAANJHQwMTYxNjAxNjM1MAAAAAJfMQQAAAAFaWRORlQIBQAAAA0kdDAxNjE2MDE2MzUwAAAAAl8yBAAAAApzZWxsU3RhdHVzCAUAAAANJHQwMTYxNjAxNjM1MAAAAAJfMwQAAAAKcmVjZWl2ZU5GVAgFAAAADSR0MDE2MTYwMTYzNTAAAAACXzQEAAAADSR0MDE2MzU1MTY0NTQJAQAAAAxnZXRCaWRLZXlWYWwAAAADBQAAAAdhc3NldElkBQAAAApiaWREYXRhS2V5BQAAAARkYXRlBAAAAAphc3NldElkQmlkCAUAAAANJHQwMTYzNTUxNjQ1NAAAAAJfMQQAAAAJYmlkRGVsT2xkCAUAAAANJHQwMTYzNTUxNjQ1NAAAAAJfMgQAAAAJYmlkVXBkYXRlCAUAAAANJHQwMTYzNTUxNjQ1NAAAAAJfMwQAAAAHc29sZEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAlhcnRfc29sZF8JAAGkAAAAAQUAAAANbmV3QW1vdW50U29sZAIAAAAEX29mXwkAAaQAAAABBQAAAAptYXhDYW5TZWxsAgAAAAFfBQAAAAVhcnRJZAIAAAABXwUAAAAGaXNzdWVyBAAAAAlzb2xkVmFsdWUDCQEAAAABIQAAAAEFAAAABWlzQmlkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAARkYXRlAgAAAAFfBQAAAAJpZAIAAAABXwkAAaQAAAABBQAAAAxhcnR3b3JrUHJpY2UCAAAAAV8FAAAADHByaWNlQXNzZXRJZAIAAAABXwkAAlgAAAABBQAAAAVpZE5GVAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEFAAAACnJlY2VpdmVORlQCAAAAAV8JAAGkAAAAAQUAAAAEZGF0ZQIAAAABXwUAAAACaWQCAAAAAV8JAAGkAAAAAQUAAAAGYW1vdW50AgAAAAFfBQAAAAphc3NldElkQmlkAgAAAAFfCQACWAAAAAEFAAAABWlkTkZUBAAAAAhzb2xkRGF0YQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAHc29sZEtleQUAAAAJc29sZFZhbHVlBAAAAAZidXlSZXMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAlrZXlJc3N1ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAA1uZXdBbW91bnRTb2xkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgIAAAAEbmZ0XwkAAlgAAAABBQAAAAVpZE5GVAUAAAAHc29sZEtleQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQdG90YWxfbmZ0X2lzc3VlZAkAAGQAAAACBQAAAAh0b3RhbE5GVAAAAAAAAAAAAQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAACWtleU9uU2FsZQAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQFAAAACnNlbGxTdGF0dXMJAARMAAAAAgUAAAAIaXNzdWVORlQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAABmlzc3VlcgUAAAAQYW1vdW50Rm9yQ3JlYXRvcgUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZmVlUmVjZWl2ZXIFAAAADWFtb3VudEZvclNpZ24FAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAKcmVjZWl2ZU5GVAAAAAAAAAAAAQUAAAAFaWRORlQFAAAAA25pbAMFAAAABWlzQmlkCQAETAAAAAIFAAAACHNvbGREYXRhCQAETAAAAAIFAAAACWJpZFVwZGF0ZQkABEwAAAACBQAAAAliaWREZWxPbGQFAAAABmJ1eVJlcwkABEwAAAACBQAAAAhzb2xkRGF0YQUAAAAGYnV5UmVzAAAACgAAAAFpAQAAAAphZGRBcnR3b3JrAAAADAAAAApzaGEyNTZIYXNoAAAABnNpZ25JRAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAAdtYXhtaW50AAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UEAAAADSR0MDE3ODE0MTc4NTUJAQAAAAxpZENhbGxlckRhdGUAAAABBQAAAAFpBAAAAAVhcnRJZAgFAAAADSR0MDE3ODE0MTc4NTUAAAACXzEEAAAABmNhbGxlcggFAAAADSR0MDE3ODE0MTc4NTUAAAACXzIEAAAABGRhdGUIBQAAAA0kdDAxNzgxNDE3ODU1AAAAAl8zAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAkAAAIAAAABAgAAACRIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0EAAAADSR0MDE3OTU2MTgwMjUJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDE3OTU2MTgwMjUAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTc5NTYxODAyNQAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAoFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwUAAAAHbWF4bWludAMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAANJHQwMTgyNTMxODI5NQkBAAAAD3ZhbGlkYXRlUGF5bWVudAAAAAEFAAAAAWkEAAAABmFtb3VudAgFAAAADSR0MDE4MjUzMTgyOTUAAAACXzEEAAAAB2Fzc2V0SWQIBQAAAA0kdDAxODI1MzE4Mjk1AAAAAl8yAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAGYW1vdW50CQAAAgAAAAECAAAAFFNvbWV0aGluZyB3ZW50IHdyb25nBAAAAAplbnRyeUV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAASa2V5VHhpZEJ5SGFzaE93bmVyAAAAAgUAAAAKc2hhMjU2SGFzaAUAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAKZW50cnlFeGlzdAIAAAAACQAAAgAAAAECAAAAFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAAAAAloYXNoRXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA5rZXlPd25lckJ5SGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gDCQEAAAACIT0AAAACBQAAAAloYXNoRXhpc3QCAAAAAAkAAAIAAAABAgAAABdIYXNoIGFscmVhZHkgcmVnaXN0ZXJlZAQAAAAPaXNTaWduQ2VydGlmaWVkCQEAAAAUY2hlY2tTaWduQ2VydGlmaWNhdGUAAAADBQAAAAZzaWdu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CmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UDCQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAZjYWxsZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAANJHQwMjEwMTYyMTA4NQkBAAAACnNldExJY2VuY2UAAAACBQAAAApjaWRMaWNlbmNlBQAAAA1zaGEyNTZMaWNlbmNlBAAAAApsaWNlbmNlQ0lECAUAAAANJHQwMjEwMTYyMTA4NQAAAAJfMQQAAAALbGljZW5jZUhhc2gIBQAAAA0kdDAyMTAxNjIxMDg1AAAAAl8yBAAAAA92YWxpZGF0ZUFydHdvcmsJAQAAABN2YWxpZGF0ZUFydHdvcmtEYXRhAAAACgUAAAAGY2FsbGVyBQAAAApjaWREaXNwbGF5BQAAAAljaWRFeHBvcnQFAAAACmxpY2VuY2VDSUQFAAAADHNoYTI1NkV4cG9ydAUAAAALbGljZW5jZUhhc2gFAAAABG5hbWUFAAAAC2Rlc2NyaXB0aW9uBQAAAAR0YWdzBQAAAAdtYXhtaW50AwkBAAAAAiE9AAAAAgUAAAAPdmFsaWRhdGVBcnR3b3JrAgAAAAAJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmchBAAAAAplbnRyeUV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAHa2V5TmFtZQAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAMJAAAAAAAAAgUAAAAKZW50cnlFeGlzdAIAAAAACQAAAgAAAAECAAAAD0VudHJ5IG5vdCBmb3VuZAQAAAAEZmxhZwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAB2tleUZsYWcAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQDCQAAAAAAAAIFAAAABGZsYWcCAAAAB0lMTEVHQUwJAAACAAAAAQIAAAAdQ2Fubm90IHVwZGF0ZSBJTExFR0FMIGFydHdvcmsDCQEAAAABIQAAAAEJAQAAAAtpc0FydE1pbnRlZAAAAAIFAAAABmNhbGxlcgUA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", "height": 2477337, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4cub36p8u6dk9caYio1rkYt4GeACg3XYj274U8JuxvYV Next: xZbruVd8C4JLpMopwLahMfTV5GdDZ3B7LwD5NAu85LA Diff:
OldNewDifferences
6060
6161 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
6262
63+
64+let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6365
6466 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6567 case a: String =>
231233
232234
233235 func validatePayment (i) = {
234- let $t089098945 = isPayment(i)
235- let payment = $t089098945._1
236- let amount = $t089098945._2
236+ let $t090209056 = isPayment(i)
237+ let payment = $t090209056._1
238+ let amount = $t090209056._2
237239 let assetId = if (if (isDefined(payment.assetId))
238240 then (payment.assetId == signAssetId)
239241 else false)
240242 then payment.assetId
241243 else throw("Only SIGN token accepted as transaction fee")
242- let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
243244 if ((amount != currentCertificationPrice))
244245 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
245246 else $Tuple2(amount, assetId)
257258
258259
259260 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
260- let $t096459681 = isPayment(i)
261- let payment = $t096459681._1
262- let amount = $t096459681._2
261+ let $t096499685 = isPayment(i)
262+ let payment = $t096499685._1
263+ let amount = $t096499685._2
263264 let assetId = if (!(isDefined(payment.assetId)))
264265 then unit
265266 else if (if ((size(priceAssetId) > 0))
295296 let minSellUsdn = 1000000
296297 let minSellSign = if (unitTest)
297298 then 1
298- else (getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId))) * 2)
299+ else (currentCertificationPrice * 2)
299300 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
300301 then (minSellUsdn > price)
301302 else false)
354355 else false
355356
356357
357-func getArtData (issuer,artId,isBid) = {
358+func getArtData (i,issuer,artId,isBid) = {
359+ let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
358360 let totalNFT = getIntegerByKey("total_nft_issued")
359361 let signID = getStringByKey(keySignID(issuer, artId))
360362 let artworkName = getStringByKey(keyName(issuer, artId))
363365 else {
364366 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
365367 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
366- let artworkPrice = getIntegerByKey(keyPrice(issuer, artId))
367- 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))
368374 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
369- if (if (if (if (!(isBid))
370- then (0 >= artworkPrice)
375+ if (if (if (!(isBid))
376+ then !(callerIsIssuer)
371377 else false)
372- then true
373- else !(isOnSale))
374- then true
375- else (0 >= maxCanSell))
378+ then if (if ((0 >= artworkPrice))
379+ then true
380+ else !(isOnSale))
381+ then true
382+ else (0 >= maxCanSell)
383+ else false)
376384 then throw("Art not for sale")
377- else if (if (isBid)
385+ else if (if (if (!(isBid))
386+ then callerIsIssuer
387+ else false)
378388 then (0 >= maxCanSell)
379389 else false)
380- then throw("Art not open for Offer")
381- else $Tuple7(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell)
390+ then throw("Max issuable not set")
391+ else $Tuple8(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
382392 }
383393 }
384394
391401 then throw(checkUser)
392402 else {
393403 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
394- let $t01335313482 = if (isBid)
404+ let $t01355713686 = if (isBid)
395405 then getPriceAssetIdFromBid(bidDataKey)
396406 else validatePriceAssetId(i, priceAssetId, artworkPrice)
397- let amount = $t01335313482._1
398- let assetId = $t01335313482._2
407+ let amount = $t01355713686._1
408+ let assetId = $t01355713686._2
399409 $Tuple3(bidDataKey, amount, assetId)
400410 }
401411 }
419429 }
420430
421431
422-func getIssueData (issuer,artId,signID,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i) = {
432+func getIssueData (issuer,artId,signID,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
423433 let issueMeta = ((((((((((("Creator: " + issuer) + ",
424434 ArtID: ") + artId) + ",
425435 SignID: ") + signID) + ",
427437 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
428438 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
429439 let idNFT = calculateAssetId(issueNFT)
430- let sellStatus = if ((newAmountSold == maxCanSell))
440+ let sellStatus = if (if ((newAmountSold == maxCanSell))
441+ then true
442+ else !(isOnSale))
431443 then false
432444 else true
433445 let receiveNFT = if (if (if ((caller == issuer))
453465
454466
455467 func buyMint (i,artId,issuer,bidId,bidOwner) = {
456- let $t01533515385 = idCallerDate(i)
457- let id = $t01533515385._1
458- let caller = $t01533515385._2
459- let date = $t01533515385._3
468+ let $t01557115621 = idCallerDate(i)
469+ let id = $t01557115621._1
470+ let caller = $t01557115621._2
471+ let date = $t01557115621._3
460472 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
461- let $t01546515603 = getArtData(issuer, artId, isBid)
462- let totalNFT = $t01546515603._1
463- let signID = $t01546515603._2
464- let artworkName = $t01546515603._3
465- let amountSold = $t01546515603._4
466- let artworkPrice = $t01546515603._5
467- let priceAssetId = $t01546515603._6
468- let maxCanSell = $t01546515603._7
469- let $t01560815754 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
470- let bidDataKey = $t01560815754._1
471- let amount = $t01560815754._2
472- let assetId = $t01560815754._3
473- let $t01575915906 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
474- let amountForSign = $t01575915906._1
475- let amountForCreator = $t01575915906._2
476- let newAmountSold = $t01575915906._3
477- let $t01591116091 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i)
478- let issueNFT = $t01591116091._1
479- let idNFT = $t01591116091._2
480- let sellStatus = $t01591116091._3
481- let receiveNFT = $t01591116091._4
482- let $t01609616195 = getBidKeyVal(assetId, bidDataKey, date)
483- let assetIdBid = $t01609616195._1
484- let bidDelOld = $t01609616195._2
485- let bidUpdate = $t01609616195._3
473+ let $t01570115852 = getArtData(i, issuer, artId, isBid)
474+ let totalNFT = $t01570115852._1
475+ let signID = $t01570115852._2
476+ let artworkName = $t01570115852._3
477+ let amountSold = $t01570115852._4
478+ let artworkPrice = $t01570115852._5
479+ let priceAssetId = $t01570115852._6
480+ let maxCanSell = $t01570115852._7
481+ let isOnSale = $t01570115852._8
482+ let $t01585716003 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
483+ let bidDataKey = $t01585716003._1
484+ let amount = $t01585716003._2
485+ let assetId = $t01585716003._3
486+ let $t01600816155 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
487+ let amountForSign = $t01600816155._1
488+ let amountForCreator = $t01600816155._2
489+ let newAmountSold = $t01600816155._3
490+ let $t01616016350 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
491+ let issueNFT = $t01616016350._1
492+ let idNFT = $t01616016350._2
493+ let sellStatus = $t01616016350._3
494+ let receiveNFT = $t01616016350._4
495+ let $t01635516454 = getBidKeyVal(assetId, bidDataKey, date)
496+ let assetIdBid = $t01635516454._1
497+ let bidDelOld = $t01635516454._2
498+ let bidUpdate = $t01635516454._3
486499 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
487500 let soldValue = if (!(isBid))
488501 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
497510
498511 @Callable(i)
499512 func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
500- let $t01755517596 = idCallerDate(i)
501- let artId = $t01755517596._1
502- let caller = $t01755517596._2
503- let date = $t01755517596._3
513+ let $t01781417855 = idCallerDate(i)
514+ let artId = $t01781417855._1
515+ let caller = $t01781417855._2
516+ let date = $t01781417855._3
504517 if (!(validateHash(sha256Hash)))
505518 then throw("Hash should be 64 characters maximum")
506519 else {
507- let $t01769717766 = setLIcence(cidLicence, sha256Licence)
508- let licenceCID = $t01769717766._1
509- let licenceHash = $t01769717766._2
520+ let $t01795618025 = setLIcence(cidLicence, sha256Licence)
521+ let licenceCID = $t01795618025._1
522+ let licenceHash = $t01795618025._2
510523 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
511524 if ((validateArtwork != ""))
512525 then throw("Something went wrong!")
513526 else {
514- let $t01799418036 = validatePayment(i)
515- let amount = $t01799418036._1
516- let assetId = $t01799418036._2
527+ let $t01825318295 = validatePayment(i)
528+ let amount = $t01825318295._1
529+ let assetId = $t01825318295._2
517530 if (!(isDefined(amount)))
518531 then throw("Something went wrong")
519532 else {
543556 then throw(maintenanceMSG)
544557 else {
545558 let caller = toBase58String(i.caller.bytes)
546- let $t02075720826 = setLIcence(cidLicence, sha256Licence)
547- let licenceCID = $t02075720826._1
548- let licenceHash = $t02075720826._2
559+ let $t02101621085 = setLIcence(cidLicence, sha256Licence)
560+ let licenceCID = $t02101621085._1
561+ let licenceHash = $t02101621085._2
549562 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
550563 if ((validateArtwork != ""))
551564 then throw("Something went wrong!")
568581
569582 @Callable(i)
570583 func flagArtwork (artId,addr,flag) = {
571- let $t02229922332 = idCallerDate(i)
572- let id = $t02229922332._1
573- let caller = $t02229922332._2
584+ let $t02255822591 = idCallerDate(i)
585+ let id = $t02255822591._1
586+ let caller = $t02255822591._2
574587 if (containsElement([chris, joep, toString(this)], caller))
575588 then if ((flag == "CONSENT"))
576589 then [StringEntry(keyFlag(addr, artId), flag)]
590603
591604 @Callable(i)
592605 func deleteArtwork (artId,addr) = {
593- let $t02335123384 = idCallerDate(i)
594- let id = $t02335123384._1
595- let caller = $t02335123384._2
606+ let $t02361023643 = idCallerDate(i)
607+ let id = $t02361023643._1
608+ let caller = $t02361023643._2
596609 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
597610 then addr
598611 else caller
625638
626639 @Callable(i)
627640 func sellArtwork (artId,price,maxMint,assetId) = {
628- let $t02575025783 = idCallerDate(i)
629- let id = $t02575025783._1
630- let caller = $t02575025783._2
641+ let $t02600926042 = idCallerDate(i)
642+ let id = $t02600926042._1
643+ let caller = $t02600926042._2
631644 let artworkName = getStringByKey(keyName(caller, artId))
632645 if ((artworkName == ""))
633646 then throw("This art doesn't match your account")
678691
679692 @Callable(i)
680693 func setBid (artId,issuer) = {
681- let $t02757927617 = idCallerDate(i)
682- let id = $t02757927617._1
683- let caller = $t02757927617._2
684- let date = $t02757927617._3
685- let $t02762227658 = isPayment(i)
686- let payment = $t02762227658._1
687- let amount = $t02762227658._2
694+ let $t02783827876 = idCallerDate(i)
695+ let id = $t02783827876._1
696+ let caller = $t02783827876._2
697+ let date = $t02783827876._3
698+ let $t02788127917 = isPayment(i)
699+ let payment = $t02788127917._1
700+ let amount = $t02788127917._2
688701 let assetId = if (!(isDefined(payment.assetId)))
689702 then "WAVES"
690703 else toBase58String(value(payment.assetId))
717730
718731 @Callable(i)
719732 func cancelBid (artId,issuer,bidId) = {
720- let $t02869028842 = idCallerDate(i)
721- let id = $t02869028842._1
722- let caller = $t02869028842._2
723- let date = $t02869028842._3
733+ let $t02894929101 = idCallerDate(i)
734+ let id = $t02894929101._1
735+ let caller = $t02894929101._2
736+ let date = $t02894929101._3
724737 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
725738 let bidData = getStringByKey((bidDataKey + "_OPEN"))
726739 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("3PAjrTqYLgFG24kRwiyU34noumz4pz2kXPK"))
77
88 let signDapp = value(addressFromString("3P9fNN7wT6u2BpKJ3t2EdQi2pY9opUE6ett"))
99
1010 let feeReceiver = "3PFacsvuU9sn2ZstaLCWKWn48yT1vfARRRU"
1111
1212 let userDapp = value(addressFromString("3PGSWDgad4RtceQYXBpq2x73mXLRJYLRqRP"))
1313
1414 let whitelistDapp = value(addressFromString("3PRFTPm4hbUhxhjQdE8cGaXGAfzGLq4va8H"))
1515
1616 let signAssetId = base58'9sQutD5HnRvjM1uui5cVC4w9xkMPAfYEV8ymug3Mon2Y'
1717
1818 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
1919
2020 let wavesAssetId = base58''
2121
2222 let chris = "3P4JutBKW6pADm91FxMfGL3EYxKJtWYsWfX"
2323
2424 let joep = "3PLKXPJigZJ4aVqpMGx5ajyPYmA4Zcry9Tb"
2525
2626 let signCut = 7
2727
2828 let usdnWaveCut = 10
2929
3030 let defaultLicence = "bafybeifuyo4pqu54ismqgtb6e4h6kkvgx7zg4u3zibh2r7y6mb64i7bzza/licence.pdf"
3131
3232 let defaultHashLicence = "a87758c354e30a9e78fb84fa3a0010a5090ab20df0be11ad45b5720cc187e639"
3333
3434 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3535
3636 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
3737
3838 let userSuspended = "SUSPENDED"
3939
4040 let userRemoved = "REMOVED"
4141
4242 let userUnregistered = "UNREGISTERED"
4343
4444 let userAllowed = "ALLOWED"
4545
4646 func getStringByKeyFromUsers (key) = valueOrElse(getString(userDapp, key), "")
4747
4848
4949 func getStringByKey (key) = valueOrElse(getString(this, key), "")
5050
5151
5252 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
5353
5454
5555 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
5656
5757
5858 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
5959
6060
6161 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
6262
63+
64+let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6365
6466 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6567 case a: String =>
6668 if (contains(a, sha256Hash))
6769 then true
6870 else false
6971 case _ =>
7072 false
7173 }
7274
7375
7476 func validateCID (cid) = if (contains(cid, "/"))
7577 then if (if ((76 > size(cid)))
7678 then (size(split(cid, "/")[0]) == 59)
7779 else false)
7880 then (16 > size(split(cid, "/")[1]))
7981 else false
8082 else false
8183
8284
8385 func validateHash (hash) = (size(hash) == 64)
8486
8587
8688 func keyUserStatus (caller) = ("user_status_" + caller)
8789
8890
8991 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9092
9193
9294 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9395
9496
9597 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9698
9799
98100 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
99101
100102
101103 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
102104
103105
104106 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
105107
106108
107109 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
108110
109111
110112 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
111113
112114
113115 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
114116
115117
116118 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
117119
118120
119121 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
120122
121123
122124 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
123125
124126
125127 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
126128
127129
128130 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
129131
130132
131133 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
132134
133135
134136 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
135137
136138
137139 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
138140
139141
140142 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
141143
142144
143145 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
144146
145147
146148 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
147149
148150
149151 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
150152
151153
152154 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
153155 then throw("Wrong Display CID")
154156 else if (!(validateCID(cidExport)))
155157 then throw("Wrong Export CID")
156158 else if (if ((cidLicence != ""))
157159 then !(validateCID(cidLicence))
158160 else false)
159161 then throw("Wrong Licence CID")
160162 else true
161163
162164
163165 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
164166 then throw("Export Hash 64 char. max")
165167 else if (!(validateHash(sha256Licence)))
166168 then throw("Licence Hash 64 char. max")
167169 else true
168170
169171
170172 func validateString (str,max) = if ((size(str) == 0))
171173 then throw("Field cannot be is empty")
172174 else if ((size(str) > max))
173175 then throw((str + " is too long"))
174176 else true
175177
176178
177179 func validateUser (caller) = {
178180 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
179181 if (if ((userStatus == userUnregistered))
180182 then true
181183 else (userStatus == userAllowed))
182184 then "Register this account first with \"Account\" tab"
183185 else if ((userStatus == userSuspended))
184186 then "Account suspended"
185187 else if ((userStatus == userRemoved))
186188 then "Account removed"
187189 else ""
188190 }
189191
190192
191193 func setLIcence (cidLicence,sha256Licence) = {
192194 let cid = if ((size(cidLicence) == 0))
193195 then defaultLicence
194196 else cidLicence
195197 let hash = if ((size(sha256Licence) == 0))
196198 then defaultHashLicence
197199 else sha256Licence
198200 $Tuple2(cid, hash)
199201 }
200202
201203
202204 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,maxmint) = {
203205 let checkUser = validateUser(caller)
204206 if ((checkUser != ""))
205207 then throw(checkUser)
206208 else if ((size(cidDisplay) == 0))
207209 then throw("Display CID cannot be empty")
208210 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
209211 then throw("Problem with CID")
210212 else if (!(validateAllHash(sha256Export, licenceHash)))
211213 then throw("Problem with Hashes")
212214 else if (!(validateString(name, 100)))
213215 then throw("100 Char. max name")
214216 else if (!(validateString(description, 1000)))
215217 then throw("1000 Char. max description")
216218 else if ((size(split(tags, ",")) > 5))
217219 then throw("5 tags max.")
218220 else if ((maxmint > 10))
219221 then throw("10 editions max per artwork")
220222 else ""
221223 }
222224
223225
224226 func isPayment (i) = if ((size(i.payments) == 0))
225227 then throw("No payment attached")
226228 else {
227229 let payment = value(i.payments[0])
228230 let amount = value(payment.amount)
229231 $Tuple2(payment, amount)
230232 }
231233
232234
233235 func validatePayment (i) = {
234- let $t089098945 = isPayment(i)
235- let payment = $t089098945._1
236- let amount = $t089098945._2
236+ let $t090209056 = isPayment(i)
237+ let payment = $t090209056._1
238+ let amount = $t090209056._2
237239 let assetId = if (if (isDefined(payment.assetId))
238240 then (payment.assetId == signAssetId)
239241 else false)
240242 then payment.assetId
241243 else throw("Only SIGN token accepted as transaction fee")
242- let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
243244 if ((amount != currentCertificationPrice))
244245 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
245246 else $Tuple2(amount, assetId)
246247 }
247248
248249
249250 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
250251 case b: Int =>
251252 if ((b != 0))
252253 then true
253254 else false
254255 case _ =>
255256 false
256257 }
257258
258259
259260 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
260- let $t096459681 = isPayment(i)
261- let payment = $t096459681._1
262- let amount = $t096459681._2
261+ let $t096499685 = isPayment(i)
262+ let payment = $t096499685._1
263+ let amount = $t096499685._2
263264 let assetId = if (!(isDefined(payment.assetId)))
264265 then unit
265266 else if (if ((size(priceAssetId) > 0))
266267 then (toBase58String(value(payment.assetId)) == priceAssetId)
267268 else false)
268269 then payment.assetId
269270 else throw("Wrong asset id")
270271 if (if ((assetId == unit))
271272 then (priceAssetId != "")
272273 else false)
273274 then throw("Wrong asset id")
274275 else if ((artworkPrice != amount))
275276 then throw("Payment don't match")
276277 else $Tuple2(amount, assetId)
277278 }
278279
279280
280281 func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
281282 then (assetId != toBase58String(wavesAssetId))
282283 else false)
283284 then (assetId != "WAVES")
284285 else false)
285286 then (assetId != toBase58String(usdnAssetId))
286287 else false)
287288 then throw("Only SIGN, USDN or WAVES accepted")
288289 else true
289290
290291
291292 func validateMinSell (assetId,price) = {
292293 let minSellWaves = if (unitTest)
293294 then 10
294295 else getIntegerByKeyFromOracle("waves_min_sell")
295296 let minSellUsdn = 1000000
296297 let minSellSign = if (unitTest)
297298 then 1
298- else (getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId))) * 2)
299+ else (currentCertificationPrice * 2)
299300 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
300301 then (minSellUsdn > price)
301302 else false)
302303 then (price != 0)
303304 else false)
304305 then true
305306 else if (if ((assetId == toBase58String(signAssetId)))
306307 then (minSellSign > price)
307308 else false)
308309 then (price != 0)
309310 else false)
310311 then true
311312 else if (if (if ((assetId == toBase58String(wavesAssetId)))
312313 then true
313314 else (assetId == "WAVES"))
314315 then (minSellWaves > price)
315316 else false)
316317 then (price != 0)
317318 else false)
318319 then throw("Wrong minimum sell price")
319320 else true
320321 }
321322
322323
323324 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
324325 then unit
325326 else fromBase58String(assetId)
326327
327328
328329 func getPriceAssetIdFromBid (bidDataKey) = {
329330 let bidData = getStringByKey((bidDataKey + "_OPEN"))
330331 if ((bidData == ""))
331332 then throw("Bid not found")
332333 else {
333334 let bidDataArr = split(bidData, "_")
334335 let bidAmount = parseIntValue(bidDataArr[1])
335336 let bidAssetId = getBidAssetId(bidDataArr[0])
336337 if ((0 >= bidAmount))
337338 then throw("Wrong amount")
338339 else $Tuple2(bidAmount, bidAssetId)
339340 }
340341 }
341342
342343
343344 func idCallerDate (i) = if (!(dappRunning))
344345 then throw(maintenanceMSG)
345346 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
346347
347348
348349 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
349350 then (bidOwner != "")
350351 else false)
351352 then (bidId != "")
352353 else false)
353354 then true
354355 else false
355356
356357
357-func getArtData (issuer,artId,isBid) = {
358+func getArtData (i,issuer,artId,isBid) = {
359+ let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
358360 let totalNFT = getIntegerByKey("total_nft_issued")
359361 let signID = getStringByKey(keySignID(issuer, artId))
360362 let artworkName = getStringByKey(keyName(issuer, artId))
361363 if ((artworkName == ""))
362364 then throw("Art doesn't exist")
363365 else {
364366 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
365367 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
366- let artworkPrice = getIntegerByKey(keyPrice(issuer, artId))
367- 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))
368374 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
369- if (if (if (if (!(isBid))
370- then (0 >= artworkPrice)
375+ if (if (if (!(isBid))
376+ then !(callerIsIssuer)
371377 else false)
372- then true
373- else !(isOnSale))
374- then true
375- else (0 >= maxCanSell))
378+ then if (if ((0 >= artworkPrice))
379+ then true
380+ else !(isOnSale))
381+ then true
382+ else (0 >= maxCanSell)
383+ else false)
376384 then throw("Art not for sale")
377- else if (if (isBid)
385+ else if (if (if (!(isBid))
386+ then callerIsIssuer
387+ else false)
378388 then (0 >= maxCanSell)
379389 else false)
380- then throw("Art not open for Offer")
381- else $Tuple7(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell)
390+ then throw("Max issuable not set")
391+ else $Tuple8(totalNFT, signID, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
382392 }
383393 }
384394
385395
386396 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
387397 let checkUser = validateUser(issuer)
388398 if (if (isBid)
389399 then (checkUser != "")
390400 else false)
391401 then throw(checkUser)
392402 else {
393403 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
394- let $t01335313482 = if (isBid)
404+ let $t01355713686 = if (isBid)
395405 then getPriceAssetIdFromBid(bidDataKey)
396406 else validatePriceAssetId(i, priceAssetId, artworkPrice)
397- let amount = $t01335313482._1
398- let assetId = $t01335313482._2
407+ let amount = $t01355713686._1
408+ let assetId = $t01355713686._2
399409 $Tuple3(bidDataKey, amount, assetId)
400410 }
401411 }
402412
403413
404414 func getCommissionData (issuer,priceAssetId,amount,amountSold,maxCanSell) = {
405415 let isWhitelisted = checkWhitelist(issuer)
406416 let cut = if ((isWhitelisted > height))
407417 then 0
408418 else if ((priceAssetId == toBase58String(signAssetId)))
409419 then signCut
410420 else usdnWaveCut
411421 let amountForSign = fraction(amount, cut, 100)
412422 let amountForCreator = (amount - amountForSign)
413423 if ((amountSold == maxCanSell))
414424 then throw("Art sold out")
415425 else {
416426 let newAmountSold = (amountSold + 1)
417427 $Tuple3(amountForSign, amountForCreator, newAmountSold)
418428 }
419429 }
420430
421431
422-func getIssueData (issuer,artId,signID,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i) = {
432+func getIssueData (issuer,artId,signID,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
423433 let issueMeta = ((((((((((("Creator: " + issuer) + ",
424434 ArtID: ") + artId) + ",
425435 SignID: ") + signID) + ",
426436 Artwork name: ") + artworkName) + ",
427437 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
428438 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
429439 let idNFT = calculateAssetId(issueNFT)
430- let sellStatus = if ((newAmountSold == maxCanSell))
440+ let sellStatus = if (if ((newAmountSold == maxCanSell))
441+ then true
442+ else !(isOnSale))
431443 then false
432444 else true
433445 let receiveNFT = if (if (if ((caller == issuer))
434446 then (bidOwner != "")
435447 else false)
436448 then (bidId != "")
437449 else false)
438450 then addressFromStringValue(bidOwner)
439451 else i.caller
440452 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
441453 }
442454
443455
444456 func getBidKeyVal (assetId,bidDataKey,date) = {
445457 let assetIdBid = if (!(isDefined(assetId)))
446458 then "WAVES"
447459 else toBase58String(value(assetId))
448460 let bidData = getStringByKey((bidDataKey + "_OPEN"))
449461 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
450462 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
451463 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
452464 }
453465
454466
455467 func buyMint (i,artId,issuer,bidId,bidOwner) = {
456- let $t01533515385 = idCallerDate(i)
457- let id = $t01533515385._1
458- let caller = $t01533515385._2
459- let date = $t01533515385._3
468+ let $t01557115621 = idCallerDate(i)
469+ let id = $t01557115621._1
470+ let caller = $t01557115621._2
471+ let date = $t01557115621._3
460472 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
461- let $t01546515603 = getArtData(issuer, artId, isBid)
462- let totalNFT = $t01546515603._1
463- let signID = $t01546515603._2
464- let artworkName = $t01546515603._3
465- let amountSold = $t01546515603._4
466- let artworkPrice = $t01546515603._5
467- let priceAssetId = $t01546515603._6
468- let maxCanSell = $t01546515603._7
469- let $t01560815754 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
470- let bidDataKey = $t01560815754._1
471- let amount = $t01560815754._2
472- let assetId = $t01560815754._3
473- let $t01575915906 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
474- let amountForSign = $t01575915906._1
475- let amountForCreator = $t01575915906._2
476- let newAmountSold = $t01575915906._3
477- let $t01591116091 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i)
478- let issueNFT = $t01591116091._1
479- let idNFT = $t01591116091._2
480- let sellStatus = $t01591116091._3
481- let receiveNFT = $t01591116091._4
482- let $t01609616195 = getBidKeyVal(assetId, bidDataKey, date)
483- let assetIdBid = $t01609616195._1
484- let bidDelOld = $t01609616195._2
485- let bidUpdate = $t01609616195._3
473+ let $t01570115852 = getArtData(i, issuer, artId, isBid)
474+ let totalNFT = $t01570115852._1
475+ let signID = $t01570115852._2
476+ let artworkName = $t01570115852._3
477+ let amountSold = $t01570115852._4
478+ let artworkPrice = $t01570115852._5
479+ let priceAssetId = $t01570115852._6
480+ let maxCanSell = $t01570115852._7
481+ let isOnSale = $t01570115852._8
482+ let $t01585716003 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
483+ let bidDataKey = $t01585716003._1
484+ let amount = $t01585716003._2
485+ let assetId = $t01585716003._3
486+ let $t01600816155 = getCommissionData(issuer, priceAssetId, amount, amountSold, maxCanSell)
487+ let amountForSign = $t01600816155._1
488+ let amountForCreator = $t01600816155._2
489+ let newAmountSold = $t01600816155._3
490+ let $t01616016350 = getIssueData(issuer, artId, signID, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
491+ let issueNFT = $t01616016350._1
492+ let idNFT = $t01616016350._2
493+ let sellStatus = $t01616016350._3
494+ let receiveNFT = $t01616016350._4
495+ let $t01635516454 = getBidKeyVal(assetId, bidDataKey, date)
496+ let assetIdBid = $t01635516454._1
497+ let bidDelOld = $t01635516454._2
498+ let bidUpdate = $t01635516454._3
486499 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
487500 let soldValue = if (!(isBid))
488501 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
489502 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
490503 let soldData = StringEntry(soldKey, soldValue)
491504 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)]
492505 if (isBid)
493506 then [soldData, bidUpdate, bidDelOld] :: buyRes
494507 else soldData :: buyRes
495508 }
496509
497510
498511 @Callable(i)
499512 func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
500- let $t01755517596 = idCallerDate(i)
501- let artId = $t01755517596._1
502- let caller = $t01755517596._2
503- let date = $t01755517596._3
513+ let $t01781417855 = idCallerDate(i)
514+ let artId = $t01781417855._1
515+ let caller = $t01781417855._2
516+ let date = $t01781417855._3
504517 if (!(validateHash(sha256Hash)))
505518 then throw("Hash should be 64 characters maximum")
506519 else {
507- let $t01769717766 = setLIcence(cidLicence, sha256Licence)
508- let licenceCID = $t01769717766._1
509- let licenceHash = $t01769717766._2
520+ let $t01795618025 = setLIcence(cidLicence, sha256Licence)
521+ let licenceCID = $t01795618025._1
522+ let licenceHash = $t01795618025._2
510523 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
511524 if ((validateArtwork != ""))
512525 then throw("Something went wrong!")
513526 else {
514- let $t01799418036 = validatePayment(i)
515- let amount = $t01799418036._1
516- let assetId = $t01799418036._2
527+ let $t01825318295 = validatePayment(i)
528+ let amount = $t01825318295._1
529+ let assetId = $t01825318295._2
517530 if (!(isDefined(amount)))
518531 then throw("Something went wrong")
519532 else {
520533 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
521534 if ((entryExist != ""))
522535 then throw("You already added it")
523536 else {
524537 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
525538 if ((hashExist != ""))
526539 then throw("Hash already registered")
527540 else {
528541 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
529542 if (!(isSignCertified))
530543 then throw("Sign Certificate not found for this address.")
531544 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)]
532545 }
533546 }
534547 }
535548 }
536549 }
537550 }
538551
539552
540553
541554 @Callable(i)
542555 func updateArtwork (txid,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
543556 then throw(maintenanceMSG)
544557 else {
545558 let caller = toBase58String(i.caller.bytes)
546- let $t02075720826 = setLIcence(cidLicence, sha256Licence)
547- let licenceCID = $t02075720826._1
548- let licenceHash = $t02075720826._2
559+ let $t02101621085 = setLIcence(cidLicence, sha256Licence)
560+ let licenceCID = $t02101621085._1
561+ let licenceHash = $t02101621085._2
549562 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, maxmint)
550563 if ((validateArtwork != ""))
551564 then throw("Something went wrong!")
552565 else {
553566 let entryExist = getStringByKey(keyName(caller, txid))
554567 if ((entryExist == ""))
555568 then throw("Entry not found")
556569 else {
557570 let flag = getStringByKey(keyFlag(caller, txid))
558571 if ((flag == "ILLEGAL"))
559572 then throw("Cannot update ILLEGAL artwork")
560573 else if (!(isArtMinted(caller, txid)))
561574 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)]
562575 else throw("Already minted")
563576 }
564577 }
565578 }
566579
567580
568581
569582 @Callable(i)
570583 func flagArtwork (artId,addr,flag) = {
571- let $t02229922332 = idCallerDate(i)
572- let id = $t02229922332._1
573- let caller = $t02229922332._2
584+ let $t02255822591 = idCallerDate(i)
585+ let id = $t02255822591._1
586+ let caller = $t02255822591._2
574587 if (containsElement([chris, joep, toString(this)], caller))
575588 then if ((flag == "CONSENT"))
576589 then [StringEntry(keyFlag(addr, artId), flag)]
577590 else if ((flag == ""))
578591 then [StringEntry(keyFlag(addr, artId), flag)]
579592 else if ((flag == "CHANGE_REQUIRED"))
580593 then [StringEntry(keyFlag(addr, artId), flag)]
581594 else if (if ((flag == "ILLEGAL"))
582595 then containsElement([chris, toString(this)], caller)
583596 else false)
584597 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), "")]
585598 else throw(("Unknow status " + flag))
586599 else throw("You are not allowed")
587600 }
588601
589602
590603
591604 @Callable(i)
592605 func deleteArtwork (artId,addr) = {
593- let $t02335123384 = idCallerDate(i)
594- let id = $t02335123384._1
595- let caller = $t02335123384._2
606+ let $t02361023643 = idCallerDate(i)
607+ let id = $t02361023643._1
608+ let caller = $t02361023643._2
596609 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
597610 then addr
598611 else caller
599612 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
600613 if ((entryExist == ""))
601614 then throw("No art matching for this address")
602615 else {
603616 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
604617 if ((sha256Hash == ""))
605618 then throw("No art hash matching for this address")
606619 else {
607620 let signID = getStringByKey(keySignID(addrToUse, artId))
608621 if ((signID == ""))
609622 then throw("No SIGN ID matching")
610623 else {
611624 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))]
612625 if (!(isArtMinted(addrToUse, artId)))
613626 then if (!(dappRunning))
614627 then throw(maintenanceMSG)
615628 else dataToDelete
616629 else if (containsElement([chris, toString(this)], caller))
617630 then dataToDelete
618631 else throw("Art already minted, you cannot delete it")
619632 }
620633 }
621634 }
622635 }
623636
624637
625638
626639 @Callable(i)
627640 func sellArtwork (artId,price,maxMint,assetId) = {
628- let $t02575025783 = idCallerDate(i)
629- let id = $t02575025783._1
630- let caller = $t02575025783._2
641+ let $t02600926042 = idCallerDate(i)
642+ let id = $t02600926042._1
643+ let caller = $t02600926042._2
631644 let artworkName = getStringByKey(keyName(caller, artId))
632645 if ((artworkName == ""))
633646 then throw("This art doesn't match your account")
634647 else {
635648 let exportCID = getStringByKey(keyExportCid(caller, artId))
636649 if ((size(split(exportCID, "/")[0]) != 59))
637650 then throw("You cannot sell art with no export file")
638651 else if (!(acceptedAssetIds(assetId)))
639652 then throw("Something went wrong!")
640653 else if (!(validateMinSell(assetId, price)))
641654 then throw("Something went wrong!")
642655 else {
643656 let checkUser = validateUser(caller)
644657 if ((checkUser != ""))
645658 then throw(checkUser)
646659 else {
647660 let amountSold = getIntegerByKey(keyIssued(caller, artId))
648661 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
649662 if ((maxMint > 10))
650663 then throw("10 editions max per artwork")
651664 else if (if ((amountSold != 0))
652665 then (amountSold == maxCanSell)
653666 else false)
654667 then throw("Max edition reached.")
655668 else if (if ((amountSold > 0))
656669 then (maxCanSell != maxMint)
657670 else false)
658671 then throw("Cannot change maximum issuable anymore")
659672 else {
660673 let sellStatus = if (if ((price > 0))
661674 then (maxMint > 0)
662675 else false)
663676 then true
664677 else false
665678 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId)]
666679 }
667680 }
668681 }
669682 }
670683 }
671684
672685
673686
674687 @Callable(i)
675688 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
676689
677690
678691
679692 @Callable(i)
680693 func setBid (artId,issuer) = {
681- let $t02757927617 = idCallerDate(i)
682- let id = $t02757927617._1
683- let caller = $t02757927617._2
684- let date = $t02757927617._3
685- let $t02762227658 = isPayment(i)
686- let payment = $t02762227658._1
687- let amount = $t02762227658._2
694+ let $t02783827876 = idCallerDate(i)
695+ let id = $t02783827876._1
696+ let caller = $t02783827876._2
697+ let date = $t02783827876._3
698+ let $t02788127917 = isPayment(i)
699+ let payment = $t02788127917._1
700+ let amount = $t02788127917._2
688701 let assetId = if (!(isDefined(payment.assetId)))
689702 then "WAVES"
690703 else toBase58String(value(payment.assetId))
691704 if (!(acceptedAssetIds(assetId)))
692705 then throw("asset not accepted")
693706 else if (!(validateMinSell(assetId, amount)))
694707 then throw("Wrong min sell")
695708 else {
696709 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
697710 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
698711 if ((0 >= maxCanSell))
699712 then throw("No max edition set for this artwork")
700713 else if ((amountSold >= maxCanSell))
701714 then throw("Sold out, you cannot bid")
702715 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date)))]
703716 }
704717 }
705718
706719
707720
708721 @Callable(i)
709722 func acceptBid (artId,issuer,bidId,bidOwner) = {
710723 let caller = toBase58String(i.caller.bytes)
711724 if ((caller != issuer))
712725 then throw("You cannot do this action")
713726 else buyMint(i, artId, issuer, bidId, bidOwner)
714727 }
715728
716729
717730
718731 @Callable(i)
719732 func cancelBid (artId,issuer,bidId) = {
720- let $t02869028842 = idCallerDate(i)
721- let id = $t02869028842._1
722- let caller = $t02869028842._2
723- let date = $t02869028842._3
733+ let $t02894929101 = idCallerDate(i)
734+ let id = $t02894929101._1
735+ let caller = $t02894929101._2
736+ let date = $t02894929101._3
724737 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
725738 let bidData = getStringByKey((bidDataKey + "_OPEN"))
726739 if ((bidData == ""))
727740 then throw("Bid not found")
728741 else {
729742 let bidDataArr = split(bidData, "_")
730743 let assetId = getBidAssetId(bidDataArr[0])
731744 let bidStatus = "CANCELED"
732745 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
733746 }
734747 }
735748
736749
737750
738751 @Callable(i)
739752 func deleteEntry (entry) = {
740753 let caller = toString(addressFromPublicKey(i.callerPublicKey))
741754 if ((caller == chris))
742755 then [DeleteEntry(entry)]
743756 else throw("no")
744757 }
745758
746759

github/deemru/w8io/786bc32 
108.14 ms