tx · HM8FCLojvoP8XzLNo4w3FuMCGUFfgGgrBXug1yqj8K8P

3N1CYgyJqi5s7uHqiAuGnb86PxXAPBEJ2hg:  -0.01400000 Waves

2021.01.05 14:21 [1340024] smart account 3N1CYgyJqi5s7uHqiAuGnb86PxXAPBEJ2hg > SELF 0.00000000 Waves

{ "type": 13, "id": "HM8FCLojvoP8XzLNo4w3FuMCGUFfgGgrBXug1yqj8K8P", "fee": 1400000, "feeAssetId": null, "timestamp": 1609845742823, "version": 2, "chainId": 84, "sender": "3N1CYgyJqi5s7uHqiAuGnb86PxXAPBEJ2hg", "senderPublicKey": "75wzrSTzcF5qMYeuwuLWeziy4CgffobpM7wFcCFcCTkU", "proofs": [ "4mebYLNk7xZx6v7MkDXrr5LyhR4zDjzyef9kY525ACYRiqbyK4ghMhGr7aapiyNpk87NuoDGr5nPUK5Rr6LbBrwJ" ], "script": "base64:AAIEAAAAAAAAADwIAhIOCgwICAgICAgBCAgICAgSDQoLCAgICAgBCAgICAgSBQoDCAgIEgQKAggIEgYKBAgBAQgSBAoCCAgAAABBAAAAAAh1bml0VGVzdAcAAAAACW9yYWNsZUZlZQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjJzNVJ0YUhQQmVuQ3N4MkVDY29GUmJZSHgzbm9aaFhXMQAAAAAIc2lnbkRhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM05DMjhoU2l2cm1zVFVYYVlEMXg2TDM2Mko0WnBVbm9UZEIAAAAAC2ZlZVJlY2VpdmVyAgAAACMzTjFFNnRYZGRSb1ZhUmZROWRRM3ZnNUxhVzJmc2Q4SEt1YgAAAAAIdXNlckRhcHADBQAAAAh1bml0VGVzdAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXg5S1UycVdBZ0hmcDFoM2l5VnNkaUhpejN1dVpGYkJVRwAAAAANd2hpdGVsaXN0RGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXVpZGl6QWNLVUtWelU2QXNERmZxY1pRQzdua1RFTW05NQAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAt1c2RuQXNzZXRJZAEAAAAgD/IcEqzkxDya7EYaqyWosOy6BytGzG2IcvC14pJJAbQAAAAADHdhdmVzQXNzZXRJZAEAAAAAAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAAdzaWduQ3V0AAAAAAAAAAAHAAAAAAt1c2RuV2F2ZUN1dAAAAAAAAAAACgAAAAAOZGVmYXVsdExpY2VuY2UCAAAAR2JhZnliZWlnaXNmcXR5bzJxZGZzY2VoNWZwY3A3ZWV5bXJwZWdscDZlZGFvMmJteWhpamJheXZhdXN5L2xpY2VuY2UucGRmAAAAABJkZWZhdWx0SGFzaExpY2VuY2UCAAAAQDNkZjc5ZDM0YWJiY2E5OTMwOGU3OWNiOTQ0NjFjMTg5MzU4MjYwNGQ2ODMyOWE0MWZkNGJlYzE4ODVlNmFkYjQAAAAAC2RhcHBSdW5uaW5nCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX2RhcHBfaXNfcnVubmluZwYAAAAADm1haW50ZW5hbmNlTVNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX21haW50ZW5hbmNlX21zZwIAAAAAAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAAC3VzZXJBbGxvd2VkAgAAAAdBTExPV0VEAQAAABdnZXRTdHJpbmdCeUtleUZyb21Vc2VycwAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwBQAAAANrZXkCAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkCAAAAAAEAAAAZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAJb3JhY2xlRmVlBQAAAANrZXkCAAAAH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUBAAAAD2dldEludGVnZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAOY2hlY2tXaGl0ZWxpc3QAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA13aGl0ZWxpc3REYXBwBQAAAANrZXkAAAAAAAAAAAABAAAAD2dldEJvb2xlYW5C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dAAAAApjaWREaXNwbGF5AAAADHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwQAAAAFYXJ0SWQJAAJYAAAAAQgFAAAABmludm9rZQAAAA10cmFuc2FjdGlvbklkBAAAAAl0aW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBAAAAAZjYWxsZXIJAAJYAAAAAQgIBQAAAAZpbnZva2UAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAkAAAIAAAABAgAAACRIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0EAAAADSR0MDExNzI3MTE3OTYJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDExNzI3MTE3OTYAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTE3MjcxMTc5NgAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAoFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwUAAAAHbWF4bWludAMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAANJHQwMTIwMjQxMjA3MQkBAAAAD3ZhbGlkYXRlUGF5bWVudAAAAAEFAAAABmludm9rZQQAAAAGYW1vdW50CAUAAAANJHQwMTIwMjQxMjA3MQAAAAJfMQQAAAAHYXNzZXRJZAgFAAAADSR0MDEyMDI0MTIwNzEAAAACXzIDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAZhbW91bnQJAAACAAAAAQIAAAAUU29tZXRoaW5nIHdlbnQgd3JvbmcEAAAACmVudHJ5RXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVrZXlBcnRUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAUWW91IGFscmVhZHkgYWRkZWQgaXQEAAAACWhhc2hFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAMJAQAAAAIhPQAAAAIFAAAACWhhc2hFeGlzdAIAAAAACQAAAgAAAAECAAAAF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBAAAAA9pc1NpZ25DZXJ0aWZpZWQJAQAAABRjaGVja1NpZ25DZXJ0aWZpY2F0ZQAAAAMFAAAABnNpZ25JRAUAAAAGY2FsbGVyBQAAAApzaGEyNTZIYXNoAwkBAAAAASEAAAABBQAAAA9pc1NpZ25DZXJ0aWZpZWQJAAACAAAAAQIAAAAsU2lnbiBDZXJ0aWZpY2F0ZSBub3QgZm91bmQgZm9yIHRoaXMgYWRkcmVzcy4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAUAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABVrZXlBcnRUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIFAAAABWFydElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKa2V5QXJ0RGF0ZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydERlc2MAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmNpZERpc3BsYXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACWNpZEV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAADHNoYTI1NkV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtsaWNlbmNlSGFzaAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmxpY2VuY2VDSUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFR5cGUAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAR0eXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUYWdzAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEdGFncwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAdtYXhtaW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlBcnRTaWduSUQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAZzaWduSUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkAAAAAAAAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleUFydEFydGlkQnlTaWduaWQAAAACBQAAAAZjYWxsZXIFAAAABnNpZ25JRAUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGtleUFydEhhc2hCeVR4aWRBZGRyAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAKc2hhMjU2SGFzaAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZmVlUmVjZWl2ZXIFAAAABmFtb3VudAUAAAAHYXNzZXRJZAUAAAADbmlsAAAABmludm9rZQEAAAANdXBkYXRlQXJ0d29yawAAAAsAAAAEdHhpZAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAAdtYXhtaW50AAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UDCQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAh1cGRhdGVJZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAABmNhbGxlcgkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADSR0MDE0OTI2MTQ5OTUJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDE0OTI2MTQ5OTUAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTQ5MjYxNDk5NQAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAoFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwUAAAAHbWF4bWludAMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAACmtleUFydE5hbWUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQDCQAAAAAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAAA9FbnRyeSBub3QgZm91bmQEAAAABGZsYWcJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAprZXlBcnRGbGFnAAAAAgUAAAAGY2FsbGVyBQAAAAR0eGlkAwkAAAAAAAACBQAAAARmbGFnAgAAAAdJTExFR0FMCQAAAgAAAAECAAAAHUNhbm5vdCB1cGRhdGUgSUxMRUdBTCBhcnR3b3JrAwkBAAAAASEAAAABCQEAAAALaXNBcnRNaW50ZWQAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydE5hbWUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydERlc2MAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnREaXNwbGF5Q2lkAAAAAgUAAAAGY2FsbGVyBQAAAAR0eGlkBQAAAApjaWREaXNwbGF5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAAZjYWxsZXIF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ZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlBcnREaXNwbGF5Q2lkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAPa2V5QXJ0RXhwb3J0Q2lkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEWtleUFydExpY2VuY2VIYXNoAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydFR5cGUAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnRUYWdzAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydFNpZ25JRAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydElzc3VlZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydE9uU2FsZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydEZsYWcAAAACBQAAAARhZGRyBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAARa2V5QXJ0T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABNrZXlBcnRBcnRpZEJ5U2lnbmlkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAZzaWduSUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAADGFkZHJlc3NUb1VzZQUAAAADbmlsAwkBAAAAASEAAAABCQEAAAALaXNBcnRNaW50ZWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwUAAAAMZGF0YVRvRGVsZXRlAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAFY2hyaXMJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzBQAAAANuaWwFAAAABmNhbGxlcgUAAAAMZGF0YVRvRGVsZXRlCQAAAgAAAAECAAAAKEFydCBhbHJlYWR5IG1pbnRlZCwgeW91IGNhbm5vdCBkZWxldGUgaXQAAAAGaW52b2tlAQAAAAtzZWxsQXJ0d29yawAAAAQAAAAFYXJ0SWQAAAAFcHJpY2UAAAAHbWF4TWludAAAAAdhc3NldElkAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwQAAAACaWQJAAJYAAAAAQgFAAAABmludm9rZQAAAA10cmFuc2FjdGlvbklkBAAAAAZjYWxsZXIJAAJYAAAAAQgIBQAAAAZpbnZva2UAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAhzZWxsRGF0ZQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAEAAAAC2FydHdvcmtOYW1lCQEAAAAOZ2V0U3RyaW5n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aW50ZW5hbmNlTVNHBAAAAAJpZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAABmNhbGxlcgkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACHRvdGFsTkZUCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQIAAAAQdG90YWxfbmZ0X2lzc3VlZAQAAAAGc2lnbklECQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALYXJ0d29ya05hbWUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAprZXlBcnROYW1lAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXJ0d29ya05hbWUCAAAAAAkAAAIAAAABAgAAABFBcnQgZG9lc24ndCBleGlzdAQAAAAKZGlzcGxheUNJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGtleUFydERpc3BsYXlDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAlleHBvcnRDSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAApleHBvcnRIYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACmxpY2VuY2VDSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALbGljZW5jZUhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFrZXlBcnRMaWNlbmNlSGFzaAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAAC2Rlc2NyaXB0aW9uCQABLwAAAAIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAprZXlBcnREZXNjAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAAAAAAAAAAAMgQAAAAIaXNPblNhbGUJAQAAAA9nZXRCb29sZWFuQnlLZXkAAAABCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAAKYW1vdW50U29sZAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxhcnR3b3JrUHJpY2UJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAALa2V5QXJ0UHJpY2UAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxwcmljZUFzc2V0SWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVrZXlBcnRBc3NldElkQWNjZXB0ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAApzb3VyY2VIYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAUa2V5QXJ0SGFzaEJ5VHhpZEFkZHIAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAptYXhDYW5TZWxsCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwMDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGFydHdvcmtQcmljZQYJAQAAAAEhAAAAAQUAAAAIaXNPblNhbGUGCQAAZwAAAAIAAAAAAAAAAAAFAAAACm1heENhblNlbGwJAAACAAAAAQIAAAAQQXJ0IG5vdCBmb3Igc2FsZQQAAAANJHQwMjMxMTkyMzE5OQkBAAAAFHZhbGlkYXRlUHJpY2VBc3NldElkAAAAAwUAAAAGaW52b2tlBQAAAAxwcmljZUFzc2V0SWQFAAAADGFydHdvcmtQcmljZQQAAAAGYW1vdW50CAUAAAANJHQwMjMxMTkyMzE5OQAAAAJfMQQAAAAHYXNzZXRJZAgFAAAADSR0MDIzMTE5MjMxOTkAAAACXzIEAAAADWlzV2hpdGVsaXN0ZWQJAQAAAA5jaGVja1doaXRlbGlzdAAAAAEFAAAABmlzc3VlcgQAAAADY3V0AwkAAAAAAAACBQAAAA1pc1doaXRl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", "height": 1340024, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: LeAs6EkKcbnkVbEXbQ2oEJU4yZwr5RWcRSaDAC6UdUf Next: none Diff:
OldNewDifferences
1111
1212 let e = if (a)
1313 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
14- else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
14+ else value(addressFromString("3Mx9KU2qWAgHfp1h3iyVsdiHiz3uuZFbBUG"))
1515
16-let f = value(addressFromString("3Mt6jj1WUYqd7DT7dHEubs9jETLUXMcAB8k"))
16+let f = value(addressFromString("3MuidizAcKUKVzU6AsDFfqcZQC7nkTEMm95"))
1717
1818 let g = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
1919
2929
3030 let m = 10
3131
32-let n = 10
32+let n = "bafybeigisfqtyo2qdfsceh5fpcp7eeymrpeglp6edao2bmyhijbayvausy/licence.pdf"
3333
34-let o = "bafybeigisfqtyo2qdfsceh5fpcp7eeymrpeglp6edao2bmyhijbayvausy/licence.pdf"
34+let o = "3df79d34abbca99308e79cb94461c1893582604d68329a41fd4bec1885e6adb4"
3535
36-let p = "3df79d34abbca99308e79cb94461c1893582604d68329a41fd4bec1885e6adb4"
36+let p = valueOrElse(getBoolean(e, "conf_dapp_is_running"), true)
3737
38-let q = {
39- let r = getBoolean(e, "conf_dapp_is_running")
40- if ($isInstanceOf(r, "Boolean"))
41- then {
42- let s = r
43- s
44- }
45- else true
46- }
38+let q = valueOrElse(getString(e, "conf_maintenance_msg"), "")
4739
48-let t = {
49- let r = getString(e, "conf_maintenance_msg")
50- if ($isInstanceOf(r, "String"))
51- then {
52- let s = r
53- s
54- }
55- else ""
56- }
40+let r = "SUSPENDED"
5741
58-let u = "SUSPENDED"
42+let s = "REMOVED"
5943
60-let v = "REMOVED"
44+let t = "UNREGISTERED"
6145
62-let w = "UNREGISTERED"
46+let u = "ALLOWED"
6347
64-let x = "ALLOWED"
65-
66-func y (z) = {
67- let r = getString(e, z)
68- if ($isInstanceOf(r, "String"))
69- then {
70- let s = r
71- s
72- }
73- else ""
74- }
48+func v (w) = valueOrElse(getString(e, w), "")
7549
7650
77-func A (z) = {
78- let r = getString(this, z)
79- if ($isInstanceOf(r, "String"))
80- then {
81- let s = r
82- s
83- }
84- else ""
85- }
51+func x (w) = valueOrElse(getString(this, w), "")
8652
8753
88-func B (z) = {
89- let r = getInteger(b, z)
90- if ($isInstanceOf(r, "Int"))
91- then {
92- let s = r
93- s
94- }
95- else throw("Integer undefine or 0 in oracle")
96- }
54+func y (w) = valueOrErrorMessage(getInteger(b, w), "Integer undefine or 0 in oracle")
9755
9856
99-func C (z) = {
100- let r = getInteger(this, z)
101- if ($isInstanceOf(r, "Int"))
102- then {
103- let D = r
104- D
105- }
106- else 0
107- }
57+func z (w) = valueOrElse(getInteger(this, w), 0)
10858
10959
110-func E (z) = {
111- let r = getInteger(f, z)
112- if ($isInstanceOf(r, "Int"))
113- then {
114- let s = r
115- if ((s >= height))
116- then 1
117- else 0
118- }
119- else 0
120- }
60+func A (w) = valueOrElse(getInteger(f, w), 0)
12161
12262
123-func F (z) = {
124- let r = getBoolean(this, z)
125- if ($isInstanceOf(r, "Boolean"))
126- then {
127- let D = r
128- D
129- }
130- else false
131- }
63+func B (w) = valueOrElse(getBoolean(this, w), false)
13264
13365
134-func G (H,I,J) = {
135- let r = getString(c, ((("data_fc_" + H) + "_") + I))
136- if ($isInstanceOf(r, "String"))
66+func C (D,E,F) = {
67+ let G = getString(c, ((("data_fc_" + D) + "_") + E))
68+ if ($isInstanceOf(G, "String"))
13769 then {
138- let s = r
139- if (contains(s, J))
70+ let H = G
71+ if (contains(H, F))
14072 then true
14173 else false
14274 }
14476 }
14577
14678
147-func K (L) = if (contains(L, "/"))
148- then if (if ((75 > size(L)))
149- then (60 > size(split(L, "/")[0]))
79+func I (J) = if (contains(J, "/"))
80+ then if (if ((76 > size(J)))
81+ then (size(split(J, "/")[0]) == 59)
15082 else false)
151- then (16 > size(split(L, "/")[1]))
83+ then (16 > size(split(J, "/")[1]))
15284 else false
15385 else false
15486
15587
156-func M (N) = (65 > size(N))
88+func K (L) = (size(L) == 64)
15789
15890
159-func O (P) = ("user_status_" + P)
91+func M (N) = ("user_status_" + N)
16092
16193
162-func Q (P,R) = ((("art_date_" + R) + "_") + P)
94+func O (N,P) = ((("art_date_" + P) + "_") + N)
16395
16496
165-func S (P,R) = ((("art_name_" + R) + "_") + P)
97+func Q (N,P) = ((("art_name_" + P) + "_") + N)
16698
16799
168-func T (P,R) = ((("art_desc_" + R) + "_") + P)
100+func R (N,P) = ((("art_desc_" + P) + "_") + N)
169101
170102
171-func U (P,R) = ((("art_display_cid_" + R) + "_") + P)
103+func S (N,P) = ((("art_display_cid_" + P) + "_") + N)
172104
173105
174-func V (P,R) = ((("art_export_hash_" + R) + "_") + P)
106+func T (N,P) = ((("art_export_hash_" + P) + "_") + N)
175107
176108
177-func W (P,R) = ((("art_export_cid_" + R) + "_") + P)
109+func U (N,P) = ((("art_export_cid_" + P) + "_") + N)
178110
179111
180-func X (P,R) = ((("art_maxmint_" + R) + "_") + P)
112+func V (N,P) = ((("art_maxmint_" + P) + "_") + N)
181113
182114
183-func Y (P,R) = ((("art_signid_" + R) + "_") + P)
115+func W (N,P) = ((("art_signid_" + P) + "_") + N)
184116
185117
186-func Z (P,R) = ((("art_issued_" + R) + "_") + P)
118+func X (N,P) = ((("art_issued_" + P) + "_") + N)
187119
188120
189-func aa (P,R) = ((("art_onsale_" + R) + "_") + P)
121+func Y (N,P) = ((("art_onsale_" + P) + "_") + N)
190122
191123
192-func ab (P,R) = ((("art_licence_hash_" + R) + "_") + P)
124+func Z (N,P) = ((("art_licence_hash_" + P) + "_") + N)
193125
194126
195-func ac (P,R) = ((("art_licence_cid_" + R) + "_") + P)
127+func aa (N,P) = ((("art_licence_cid_" + P) + "_") + N)
196128
197129
198-func ad (P,R) = ((("art_tags_" + R) + "_") + P)
130+func ab (N,P) = ((("art_tags_" + P) + "_") + N)
199131
200132
201-func ae (P,R) = ((("art_type_" + R) + "_") + P)
133+func ac (N,P) = ((("art_type_" + P) + "_") + N)
202134
203135
204-func af (P,R) = ((("art_price_" + R) + "_") + P)
136+func ad (N,P) = ((("art_price_" + P) + "_") + N)
205137
206138
207-func ag (P,R) = ((("art_assetAccepted_" + R) + "_") + P)
139+func ae (N,P) = ((("art_assetAccepted_" + P) + "_") + N)
208140
209141
210-func ah (P,R) = ((("art_flag_" + R) + "_") + P)
142+func af (N,P) = ((("art_flag_" + P) + "_") + N)
211143
212144
213-func ai (P,aj) = ((("get_hashbytxidaddr_" + aj) + "_") + P)
145+func ag (N,ah) = ((("get_hashbytxidaddr_" + ah) + "_") + N)
214146
215147
216-func ak (J) = ("get_owner_by_hash_" + J)
148+func ai (F) = ("get_owner_by_hash_" + F)
217149
218150
219-func al (P,am) = ((("get_artidbysignid_" + am) + "_") + P)
151+func aj (N,ak) = ((("get_artidbysignid_" + ak) + "_") + N)
220152
221153
222-func an (J,P) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((J + P)))))
154+func al (F,N) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((F + N)))))
223155
224156
225-func ao (ap,aq,ar) = if (!(K(ap)))
157+func am (an,ao,ap) = if (!(I(an)))
226158 then throw("Wrong Display CID")
227- else if (!(K(aq)))
159+ else if (!(I(ao)))
228160 then throw("Wrong Export CID")
229- else if (if ((ar != ""))
230- then !(K(ar))
161+ else if (if ((ap != ""))
162+ then !(I(ap))
231163 else false)
232164 then throw("Wrong Licence CID")
233165 else true
234166
235167
236-func as (at,au) = if (!(M(at)))
168+func aq (ar,as) = if (!(K(ar)))
237169 then throw("Export Hash 64 char. max")
238- else if (!(M(au)))
170+ else if (!(K(as)))
239171 then throw("Licence Hash 64 char. max")
240172 else true
241173
242174
243-func av (aw,ax) = if ((size(aw) == 0))
175+func at (au,av) = if ((size(au) == 0))
244176 then throw("Field cannot be is empty")
245- else if ((size(aw) > ax))
246- then throw((aw + " is too long"))
177+ else if ((size(au) > av))
178+ then throw((au + " is too long"))
247179 else true
248180
249181
250-@Callable(ay)
251-func addArtwork (J,H,az,aA,aB,aC,aD,ap,at,aq,au,ar) = if (!(q))
252- then throw(t)
182+func aw (N) = {
183+ let ax = valueOrElse(getString(e, M(N)), t)
184+ if (if ((ax == t))
185+ then true
186+ else (ax == u))
187+ then "Register this account first with \"Account\" tab"
188+ else if ((ax == r))
189+ then "Account suspended"
190+ else if ((ax == s))
191+ then "Account removed"
192+ else ""
193+ }
194+
195+
196+func ay (ap,as) = {
197+ let J = if ((size(ap) == 0))
198+ then n
199+ else ap
200+ let L = if ((size(as) == 0))
201+ then o
202+ else as
203+ $Tuple2(J, L)
204+ }
205+
206+
207+func az (ap) = if ((size(ap) == 0))
208+ then n
209+ else ap
210+
211+
212+func aA (as) = if ((size(as) == 0))
213+ then o
214+ else as
215+
216+
217+func aB (N,an,ao,aC,ar,aD,aE,aF,aG,aH) = {
218+ let aI = aw(N)
219+ if ((aI != ""))
220+ then throw(aI)
221+ else if ((size(an) == 0))
222+ then throw("Display CID cannot be empty")
223+ else if (!(am(an, ao, aC)))
224+ then throw("Problem with CID")
225+ else if (!(aq(ar, aD)))
226+ then throw("Problem with Hashes")
227+ else if (!(at(aE, 100)))
228+ then throw("100 Char. max name")
229+ else if (!(at(aF, 1000)))
230+ then throw("1000 Char. max description")
231+ else if ((size(split(aG, ",")) > 5))
232+ then throw("5 tags max.")
233+ else if ((aH > 10))
234+ then throw("10 editions max per artwork")
235+ else ""
236+ }
237+
238+
239+func aJ (aK) = if ((size(aK.payments) == 0))
240+ then throw("No payment attached")
253241 else {
254- let R = toBase58String(ay.transactionId)
255- let P = toBase58String(ay.caller.bytes)
256- let aE = lastBlock.timestamp
257- let aF = if ((size(ar) == 0))
258- then o
259- else ar
260- let aG = if ((size(au) == 0))
261- then p
262- else au
263- let aH = {
264- let r = getString(e, ("user_status_" + P))
265- if ($isInstanceOf(r, "String"))
266- then {
267- let aI = r
268- aI
269- }
270- else w
242+ let aL = value(aK.payments[0])
243+ let aM = value(aL.amount)
244+ let aN = if (if (isDefined(aL.assetId))
245+ then (aL.assetId == g)
246+ else false)
247+ then aL.assetId
248+ else throw("Only SIGN token accepted as transaction fee")
249+ let aO = y(("certification_fee_" + toBase58String(g)))
250+ if ((aM != aO))
251+ then throw(("Payment amount should be " + toString(aO)))
252+ else $Tuple2(aM, aN)
253+ }
254+
255+
256+func aP (aQ,P) = {
257+ let G = getInteger(this, X(aQ, P))
258+ if ($isInstanceOf(G, "Int"))
259+ then {
260+ let aR = G
261+ if ((aR != 0))
262+ then true
263+ else false
271264 }
272- if (if (isDefined(aH))
273- then if ((aH == w))
274- then true
275- else (aH == x)
265+ else false
266+ }
267+
268+
269+func aS (aK,aT,aU) = {
270+ let aL = value(aK.payments[0])
271+ let aM = value(aL.amount)
272+ let aN = if (!(isDefined(aL.assetId)))
273+ then unit
274+ else if (if ((size(aT) > 0))
275+ then (toBase58String(value(aL.assetId)) == aT)
276276 else false)
277- then throw("Register this account first with \"Account\" tab")
278- else if ((aH == u))
279- then throw("Account suspended")
280- else if ((aH == v))
281- then throw("Account removed")
282- else if (!(ao(ap, aq, aF)))
283- then throw("Problem with CID")
284- else if (!(M(J)))
285- then throw("Hash should be 64 characters maximum")
286- else if (!(as(at, aG)))
287- then throw("Problem with Hashes")
288- else if ((size(ay.payments) == 0))
289- then throw("No payment attached")
277+ then aL.assetId
278+ else throw("Wrong asset id")
279+ if (if ((aN == unit))
280+ then (aT != "")
281+ else false)
282+ then throw("Wrong asset id")
283+ else if ((aU != aM))
284+ then throw("Payment don't match")
285+ else $Tuple2(aM, aN)
286+ }
287+
288+
289+func aV (aN) = if (if (if ((aN != toBase58String(g)))
290+ then (aN != toBase58String(i))
291+ else false)
292+ then (aN != toBase58String(h))
293+ else false)
294+ then throw("Only SIGN, USDN or WAVES accepted")
295+ else true
296+
297+
298+func aW (aN,aX) = {
299+ let aY = if (a)
300+ then 1
301+ else y("waves_min_sell")
302+ let aZ = 1000000
303+ let ba = if (a)
304+ then 1
305+ else (y(("certification_fee_" + toBase58String(g))) * 2)
306+ if (if (if (if (if ((aN == toBase58String(h)))
307+ then (aZ > aX)
308+ else false)
309+ then (aX != 0)
310+ else false)
311+ then true
312+ else if (if ((aN == toBase58String(g)))
313+ then (ba > aX)
314+ else false)
315+ then (aX != 0)
316+ else false)
317+ then true
318+ else if (if ((aN == toBase58String(i)))
319+ then (aY > aX)
320+ else false)
321+ then (aX != 0)
322+ else false)
323+ then throw("Wrong minimum sell price")
324+ else true
325+ }
326+
327+
328+@Callable(aK)
329+func addArtwork (F,D,aE,aF,aG,bb,aH,an,ar,ao,as,ap) = if (!(p))
330+ then throw(q)
331+ else {
332+ let P = toBase58String(aK.transactionId)
333+ let bc = lastBlock.timestamp
334+ let N = toBase58String(aK.caller.bytes)
335+ if (!(K(F)))
336+ then throw("Hash should be 64 characters maximum")
337+ else {
338+ let bd = ay(ap, as)
339+ let aC = bd._1
340+ let aD = bd._2
341+ let be = aB(N, an, ao, aC, ar, aD, aE, aF, aG, aH)
342+ if ((be != ""))
343+ then throw("Something went wrong!")
344+ else {
345+ let bf = aJ(aK)
346+ let aM = bf._1
347+ let aN = bf._2
348+ if (!(isDefined(aM)))
349+ then throw("Something went wrong")
350+ else {
351+ let bg = x(al(F, N))
352+ if ((bg != ""))
353+ then throw("You already added it")
290354 else {
291- let aJ = value(ay.payments[0])
292- let aK = value(aJ.amount)
293- let aL = if (if (isDefined(aJ.assetId))
294- then (aJ.assetId == g)
295- else false)
296- then aJ.assetId
297- else throw("Only SIGN token accepted")
298- let aM = B(("certification_fee_" + toBase58String(g)))
299- if ((aK != aM))
300- then throw(("Payment amount should be " + toString(aM)))
355+ let bh = x(ai(F))
356+ if ((bh != ""))
357+ then throw("Hash already registered")
301358 else {
302- let aN = A(an(J, P))
303- if ((aN != ""))
304- then throw("You already added it")
305- else {
306- let aO = A(ak(J))
307- if ((aO != ""))
308- then throw("Hash already registered")
309- else {
310- let aP = G(H, P, J)
311- if (!(aP))
312- then throw("Sign Certificate not found for this address.")
313- else if ((size(ap) == 0))
314- then throw("Display CID cannot be empty")
315- else if (!(av(az, 100)))
316- then throw("100 Char. max name")
317- else if (!(av(aA, 1000)))
318- then throw("1000 Char. max description")
319- else if ((size(split(aB, ",")) > 5))
320- then throw("5 tags max.")
321- else if ((aD > 10))
322- then throw("10 editions max")
323- else [StringEntry(ak(J), P), StringEntry(an(J, P), R), IntegerEntry(Q(P, R), aE), StringEntry(S(P, R), az), StringEntry(T(P, R), aA), StringEntry(U(P, R), ap), StringEntry(W(P, R), aq), StringEntry(V(P, R), at), StringEntry(ab(P, R), aG), StringEntry(ac(P, R), aF), StringEntry(ae(P, R), aC), StringEntry(ad(P, R), aB), IntegerEntry(X(P, R), aD), StringEntry(Y(P, R), H), IntegerEntry(Z(P, R), 0), BooleanEntry(aa(P, R), false), StringEntry(al(P, H), R), StringEntry(ai(P, R), J), ScriptTransfer(Address(fromBase58String(d)), aK, aL)]
324- }
325- }
359+ let bi = C(D, N, F)
360+ if (!(bi))
361+ then throw("Sign Certificate not found for this address.")
362+ else [StringEntry(ai(F), N), StringEntry(al(F, N), P), IntegerEntry(O(N, P), bc), StringEntry(Q(N, P), aE), StringEntry(R(N, P), aF), StringEntry(S(N, P), an), StringEntry(U(N, P), ao), StringEntry(T(N, P), ar), StringEntry(Z(N, P), aD), StringEntry(aa(N, P), aC), StringEntry(ac(N, P), bb), StringEntry(ab(N, P), aG), IntegerEntry(V(N, P), aH), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(aj(N, D), P), StringEntry(ag(N, P), F), ScriptTransfer(Address(fromBase58String(d)), aM, aN)]
326363 }
327364 }
365+ }
366+ }
367+ }
328368 }
329369
330370
331371
332-@Callable(ay)
333-func updateArtwork (aj,az,aA,aB,aC,aD,ap,at,aq,au,ar) = if (!(q))
334- then throw(t)
372+@Callable(aK)
373+func updateArtwork (ah,aE,aF,aG,bb,aH,an,ar,ao,as,ap) = if (!(p))
374+ then throw(q)
335375 else {
336- let aQ = toBase58String(ay.transactionId)
337- let P = toBase58String(ay.caller.bytes)
338- let aF = if ((size(ar) == 0))
339- then o
340- else ar
341- let aG = if ((size(au) == 0))
342- then p
343- else au
344- let aH = y(O(P))
345- if (if ((aH == ""))
346- then true
347- else (aH == x))
348- then throw("Register first with \"User infos\"")
349- else if ((aH == u))
350- then throw("Account suspended")
351- else if ((aH == v))
352- then throw("Account removed")
353- else if (!(ao(ap, aq, aF)))
354- then throw("Problem with CID")
355- else if (!(as(at, aG)))
356- then throw("Problem with Hashes")
357- else {
358- let aN = A(S(P, aj))
359- if ((aN == ""))
360- then throw("Entry not found")
361- else if (!(av(az, 100)))
362- then throw("100 Char. max name")
363- else if (!(av(aA, 1000)))
364- then throw("1000 Char. max description")
365- else {
366- let aR = A(ah(P, aj))
367- if ((aR == "ILLEGAL"))
368- then throw("Cannot update ILLEGAL artwork")
369- else {
370- let aS = {
371- let r = getInteger(this, Z(P, aj))
372- if ($isInstanceOf(r, "Int"))
373- then {
374- let aT = r
375- if ((aT == 0))
376- then false
377- else true
378- }
379- else false
380- }
381- if ((size(split(aB, ",")) > 5))
382- then throw("5 tags max.")
383- else if ((aD > 10))
384- then throw("10 editions max per artwork")
385- else if (!(aS))
386- then [StringEntry(S(P, aj), az), StringEntry(T(P, aj), aA), StringEntry(U(P, aj), ap), StringEntry(W(P, aj), aq), StringEntry(V(P, aj), at), StringEntry(ac(P, aj), aF), StringEntry(ab(P, aj), aG), IntegerEntry(X(P, aj), aD), StringEntry(ad(P, aj), aB), StringEntry(ae(P, aj), aC)]
387- else throw("Already minted")
388- }
389- }
390- }
376+ let bj = toBase58String(aK.transactionId)
377+ let N = toBase58String(aK.caller.bytes)
378+ let bk = ay(ap, as)
379+ let aC = bk._1
380+ let aD = bk._2
381+ let be = aB(N, an, ao, aC, ar, aD, aE, aF, aG, aH)
382+ if ((be != ""))
383+ then throw("Something went wrong!")
384+ else {
385+ let bg = x(Q(N, ah))
386+ if ((bg == ""))
387+ then throw("Entry not found")
388+ else {
389+ let bl = x(af(N, ah))
390+ if ((bl == "ILLEGAL"))
391+ then throw("Cannot update ILLEGAL artwork")
392+ else if (!(aP(N, ah)))
393+ then [StringEntry(Q(N, ah), aE), StringEntry(R(N, ah), aF), StringEntry(S(N, ah), an), StringEntry(U(N, ah), ao), StringEntry(T(N, ah), ar), StringEntry(aa(N, ah), aC), StringEntry(Z(N, ah), aD), IntegerEntry(V(N, ah), aH), StringEntry(ab(N, ah), aG), StringEntry(ac(N, ah), bb)]
394+ else throw("Already minted")
395+ }
396+ }
391397 }
392398
393399
394400
395-@Callable(D)
396-func flagArtwork (R,aU,aR) = {
397- let P = toString(addressFromPublicKey(D.callerPublicKey))
398- let aV = toBase58String(D.transactionId)
399- if (containsElement([j, k, toString(this)], P))
400- then if ((aR == "CONSENT"))
401- then [StringEntry(ah(aU, R), aR)]
402- else if ((aR == ""))
403- then [StringEntry(ah(aU, R), aR)]
404- else if ((aR == "ILLEGAL"))
405- then [StringEntry(ah(aU, R), aR), StringEntry(S(aU, R), "ILLEGAL CONTENT"), StringEntry(T(aU, R), "ILLEGAL CONTENT"), StringEntry(U(aU, R), ""), StringEntry(W(aU, R), ""), StringEntry(ac(aU, R), "")]
406- else throw(("Unknow status " + aR))
401+@Callable(aK)
402+func flagArtwork (P,bm,bl) = {
403+ let N = toString(addressFromPublicKey(aK.callerPublicKey))
404+ let bn = toBase58String(aK.transactionId)
405+ if (containsElement([j, k, toString(this)], N))
406+ then if ((bl == "CONSENT"))
407+ then [StringEntry(af(bm, P), bl)]
408+ else if ((bl == ""))
409+ then [StringEntry(af(bm, P), bl)]
410+ else if ((bl == "ILLEGAL"))
411+ then [StringEntry(af(bm, P), bl), StringEntry(Q(bm, P), "ILLEGAL CONTENT"), StringEntry(R(bm, P), "ILLEGAL CONTENT"), StringEntry(S(bm, P), ""), StringEntry(U(bm, P), ""), StringEntry(aa(bm, P), "")]
412+ else throw(("Unknow status " + bl))
407413 else throw("You are not allowed")
408414 }
409415
410416
411417
412-@Callable(D)
413-func deleteArtwork (R,aU) = {
414- let P = toString(addressFromPublicKey(D.callerPublicKey))
415- let aV = toBase58String(D.transactionId)
416- let aW = if (containsElement([j, k, toString(this)], P))
417- then aU
418- else P
419- let aN = A(S(aW, R))
420- if ((aN == ""))
418+@Callable(aK)
419+func deleteArtwork (P,bm) = {
420+ let N = toString(addressFromPublicKey(aK.callerPublicKey))
421+ let bn = toBase58String(aK.transactionId)
422+ let aQ = if (containsElement([j, k, toString(this)], N))
423+ then bm
424+ else N
425+ let bg = x(Q(aQ, P))
426+ if ((bg == ""))
421427 then throw("No art matching for this address")
422428 else {
423- let aS = {
424- let r = getInteger(this, Z(aW, R))
425- if ($isInstanceOf(r, "Int"))
426- then {
427- let aT = r
428- if ((aT != 0))
429- then true
430- else false
431- }
432- else false
433- }
434- let aX = C(X(aW, R))
435- let J = A(ai(aW, R))
436- if ((J == ""))
429+ let F = x(ag(aQ, P))
430+ if ((F == ""))
437431 then throw("No art hash matching for this address")
438432 else {
439- let H = A(Y(aW, R))
440- if ((H == ""))
433+ let D = x(W(aQ, P))
434+ if ((D == ""))
441435 then throw("No SIGN ID matching")
442436 else {
443- let aY = [DeleteEntry(Q(aW, R)), DeleteEntry(S(aW, R)), DeleteEntry(T(aW, R)), DeleteEntry(U(aW, R)), DeleteEntry(W(aW, R)), DeleteEntry(V(aW, R)), DeleteEntry(ab(aW, R)), DeleteEntry(ac(aW, R)), DeleteEntry(ae(aW, R)), DeleteEntry(ad(aW, R)), DeleteEntry(X(aW, R)), DeleteEntry(Y(aW, R)), DeleteEntry(Z(aW, R)), DeleteEntry(aa(aW, R)), DeleteEntry(ah(aU, R)), DeleteEntry(ak(J)), DeleteEntry(al(aW, H)), DeleteEntry(an(J, aW))]
444- if (!(aS))
445- then if (!(q))
446- then throw(t)
447- else aY
448- else if (containsElement([j, toString(this)], P))
449- then aY
450- else throw("Art already minted, cannot delete")
437+ let bo = [DeleteEntry(O(aQ, P)), DeleteEntry(Q(aQ, P)), DeleteEntry(R(aQ, P)), DeleteEntry(S(aQ, P)), DeleteEntry(U(aQ, P)), DeleteEntry(T(aQ, P)), DeleteEntry(Z(aQ, P)), DeleteEntry(aa(aQ, P)), DeleteEntry(ac(aQ, P)), DeleteEntry(ab(aQ, P)), DeleteEntry(V(aQ, P)), DeleteEntry(W(aQ, P)), DeleteEntry(X(aQ, P)), DeleteEntry(Y(aQ, P)), DeleteEntry(af(bm, P)), DeleteEntry(ai(F)), DeleteEntry(aj(aQ, D)), DeleteEntry(al(F, aQ))]
438+ if (!(aP(aQ, P)))
439+ then if (!(p))
440+ then throw(q)
441+ else bo
442+ else if (containsElement([j, toString(this)], N))
443+ then bo
444+ else throw("Art already minted, you cannot delete it")
451445 }
452446 }
453447 }
455449
456450
457451
458-@Callable(D)
459-func sellArtwork (R,aZ,aX,aL) = if (!(q))
460- then throw(t)
452+@Callable(aK)
453+func sellArtwork (P,aX,bp,aN) = if (!(p))
454+ then throw(q)
461455 else {
462- let aV = toBase58String(D.transactionId)
463- let P = toBase58String(D.caller.bytes)
464- let ba = lastBlock.timestamp
465- let bb = A(S(P, R))
466- if ((bb == ""))
456+ let bn = toBase58String(aK.transactionId)
457+ let N = toBase58String(aK.caller.bytes)
458+ let bq = lastBlock.timestamp
459+ let br = x(Q(N, P))
460+ if ((br == ""))
467461 then throw("This art doesn't match match your account")
468462 else {
469- let bc = A(W(P, R))
470- if ((size(split(bc, "/")[0]) != 59))
463+ let bs = x(U(N, P))
464+ if ((size(split(bs, "/")[0]) != 59))
471465 then throw("You cannot sell art with no export file")
472466 else {
473- let bd = A(V(P, R))
474- if ((size(bd) != 64))
467+ let bt = x(T(N, P))
468+ if ((size(bt) != 64))
475469 then throw("You cannot sell art with no export hash")
476- else if (if (if ((aL != toBase58String(g)))
477- then (aL != toBase58String(i))
478- else false)
479- then (aL != toBase58String(h))
480- else false)
481- then throw("Only SIGN, USDN or WAVES accepted")
482- else {
483- let be = if (a)
484- then 1
485- else B("waves_min_sell")
486- let bf = 1000000
487- let bg = if (a)
488- then 1
489- else (B(("certification_fee_" + toBase58String(g))) * 2)
490- if (if (if (if (if ((aL == toBase58String(h)))
491- then (bf > aZ)
492- else false)
493- then (aZ != 0)
494- else false)
495- then true
496- else if (if ((aL == toBase58String(g)))
497- then (bg > aZ)
498- else false)
499- then (aZ != 0)
500- else false)
501- then true
502- else if (if ((aL == toBase58String(i)))
503- then (be > aZ)
504- else false)
505- then (aZ != 0)
506- else false)
507- then throw("Wrong minimum sell price")
508- else {
509- let aH = y(O(P))
510- if (if ((aH == ""))
511- then true
512- else (aH == x))
513- then throw("Register this account first")
514- else if ((aH == u))
515- then throw("Account suspended")
516- else if ((aH == v))
517- then throw("Account deleted")
518- else {
519- let bh = C(Z(P, R))
520- let bi = C(X(P, R))
521- if ((aX > 10))
522- then throw("10 editions max per artwork")
523- else if (if ((bh != 0))
524- then (bh == bi)
470+ else if (!(aV(aN)))
471+ then throw("Something wen wrong!")
472+ else if (!(aW(aN, aX)))
473+ then throw("Something wen wrong!")
474+ else {
475+ let aI = aw(N)
476+ if ((aI != ""))
477+ then throw(aI)
478+ else {
479+ let bu = z(X(N, P))
480+ let bv = z(V(N, P))
481+ if ((bp > 10))
482+ then throw("10 editions max per artwork")
483+ else if (if ((bu != 0))
484+ then (bu == bv)
485+ else false)
486+ then throw("Max edition reached.")
487+ else if (if ((bu > 0))
488+ then (bv != bp)
489+ else false)
490+ then throw("Cannot change maximum issuable anymore")
491+ else {
492+ let bw = if (if ((aX > 0))
493+ then (bp > 0)
525494 else false)
526- then throw("Max edition reached.")
527- else if (if ((bh > 0))
528- then (bi != aX)
529- else false)
530- then throw("Cannot change maximum issuable anymore")
531- else {
532- let bj = if (if ((aZ > 0))
533- then (aX > 0)
534- else false)
535- then true
536- else false
537-[BooleanEntry(aa(P, R), bj), IntegerEntry(af(P, R), aZ), IntegerEntry(X(P, R), aX), StringEntry(ag(P, R), aL)]
538- }
539- }
540- }
541- }
495+ then true
496+ else false
497+[BooleanEntry(Y(N, P), bw), IntegerEntry(ad(N, P), aX), IntegerEntry(V(N, P), bp), StringEntry(ae(N, P), aN)]
498+ }
499+ }
500+ }
542501 }
543502 }
544503 }
545504
546505
547506
548-@Callable(D)
549-func buyArtwork (R,bk) = if (!(q))
550- then throw(t)
507+@Callable(aK)
508+func buyArtwork (P,bx) = if (!(p))
509+ then throw(q)
551510 else {
552- let aV = toBase58String(D.transactionId)
553- let P = toBase58String(D.caller.bytes)
554- let bl = C("total_nft_issued")
555- let H = A(Y(bk, R))
556- let bb = A(S(bk, R))
557- if ((bb == ""))
511+ let bn = toBase58String(aK.transactionId)
512+ let N = toBase58String(aK.caller.bytes)
513+ let by = z("total_nft_issued")
514+ let D = x(W(bx, P))
515+ let br = x(Q(bx, P))
516+ if ((br == ""))
558517 then throw("Art doesn't exist")
559518 else {
560- let bm = A(U(bk, R))
561- let bc = A(W(bk, R))
562- let bd = A(V(bk, R))
563- let aF = A(ac(bk, R))
564- let aG = A(ab(bk, R))
565- let aA = take(A(T(bk, R)), 50)
566- let bh = C(Z(bk, R))
567- let bn = C(af(bk, R))
568- let bo = F(aa(bk, R))
569- let bp = A(ag(bk, R))
570- let bq = A(ai(bk, R))
571- let bi = C(X(bk, R))
572- if (if (if ((0 >= bn))
519+ let bz = x(S(bx, P))
520+ let bs = x(U(bx, P))
521+ let bt = x(T(bx, P))
522+ let aC = x(aa(bx, P))
523+ let aD = x(Z(bx, P))
524+ let aF = take(x(R(bx, P)), 50)
525+ let bA = B(Y(bx, P))
526+ let bu = z(X(bx, P))
527+ let aU = z(ad(bx, P))
528+ let aT = x(ae(bx, P))
529+ let bB = x(ag(bx, P))
530+ let bv = z(V(bx, P))
531+ if (if (if ((0 >= aU))
573532 then true
574- else !(bo))
533+ else !(bA))
575534 then true
576- else (0 >= bi))
535+ else (0 >= bv))
577536 then throw("Art not for sale")
578537 else {
579- let aJ = value(D.payments[0])
580- let aK = value(aJ.amount)
581- let aL = if (!(isDefined(aJ.assetId)))
582- then unit
583- else if (if ((size(bp) > 0))
584- then (toBase58String(value(aJ.assetId)) == bp)
585- else false)
586- then aJ.assetId
587- else throw("Wrong asset id")
588- if (if ((aL == unit))
589- then (bp != "")
590- else false)
591- then throw("Wrong asset id")
538+ let bC = aS(aK, aT, aU)
539+ let aM = bC._1
540+ let aN = bC._2
541+ let bD = A(bx)
542+ let bE = if ((bD == 1))
543+ then 0
544+ else if ((aT == toBase58String(g)))
545+ then l
546+ else m
547+ let bF = fraction(aM, bE, 100)
548+ let bG = (aM - bF)
549+ if ((bu == bv))
550+ then throw("Art sold out")
592551 else {
593- let br = E(bk)
594- let bs = if ((br == 1))
595- then 0
596- else if ((bp == toBase58String(g)))
597- then 8
598- else 10
599- let bt = fraction(aK, bs, 100)
600- let bu = (aK - bt)
601- if ((bh == bi))
602- then throw("Art sold out")
603- else if ((bn != aK))
604- then throw("Payment don't match")
605- else {
606- let bv = (bh + 1)
607- let bw = lastBlock.timestamp
608- let bx = ((((((((((((((((((((((((((("Creator: " + bk) + ",
609- ArtID: ") + R) + ",
610- SignID: ") + H) + ",
611- Artwork name: ") + bb) + ",
612- Artwork description: ") + aA) + ",
613- Issue: ") + toString(bv)) + "/") + toString(bi)) + ",
614- Max issuable: ") + toString(bi)) + ",
615- Source hash: ") + bq) + ",
616- Display cid: ") + bm) + ",
617- Export cid: ") + bc) + ",
618- Export hash: ") + bd) + ",
619- Licence cid: ") + aF) + ",
620- Licence hash: ") + aG)
621- let by = Issue(("SA_" + toString((bl + 1))), bx, 1, 0, false)
622- let bz = calculateAssetId(by)
623- let bj = if ((bv == bi))
624- then false
625- else true
626-[IntegerEntry(Z(bk, R), bv), StringEntry(("nft_" + toBase58String(bz)), ((((((("art_sold_" + toString(bv)) + "_of_") + toString(bi)) + "_") + R) + "_") + bk)), StringEntry(((((((("art_sold_" + toString(bv)) + "_of_") + toString(bi)) + "_") + R) + "_") + bk), ((((((((((P + "_") + toString(bw)) + "_") + aV) + "_") + toString(bn)) + "_") + bp) + "_") + toBase58String(bz))), IntegerEntry("total_nft_issued", (bl + 1)), BooleanEntry(aa(bk, R), bj), by, ScriptTransfer(Address(fromBase58String(bk)), bu, aL), ScriptTransfer(Address(fromBase58String(d)), bt, aL), ScriptTransfer(D.caller, 1, bz)]
627- }
552+ let bH = (bu + 1)
553+ let bI = lastBlock.timestamp
554+ let bJ = ((((((((((((((((((((((((((("Creator: " + bx) + ",
555+ ArtID: ") + P) + ",
556+ SignID: ") + D) + ",
557+ Artwork name: ") + br) + ",
558+ Artwork description: ") + aF) + ",
559+ Issue: ") + toString(bH)) + "/") + toString(bv)) + ",
560+ Max issuable: ") + toString(bv)) + ",
561+ Source hash: ") + bB) + ",
562+ Display cid: ") + bz) + ",
563+ Export cid: ") + bs) + ",
564+ Export hash: ") + bt) + ",
565+ Licence cid: ") + aC) + ",
566+ Licence hash: ") + aD)
567+ let bK = Issue(("SA_" + toString((by + 1))), bJ, 1, 0, false)
568+ let bL = calculateAssetId(bK)
569+ let bw = if ((bH == bv))
570+ then false
571+ else true
572+[IntegerEntry(X(bx, P), bH), StringEntry(("nft_" + toBase58String(bL)), ((((((("art_sold_" + toString(bH)) + "_of_") + toString(bv)) + "_") + P) + "_") + bx)), StringEntry(((((((("art_sold_" + toString(bH)) + "_of_") + toString(bv)) + "_") + P) + "_") + bx), ((((((((((N + "_") + toString(bI)) + "_") + bn) + "_") + toString(aU)) + "_") + aT) + "_") + toBase58String(bL))), IntegerEntry("total_nft_issued", (by + 1)), BooleanEntry(Y(bx, P), bw), bK, ScriptTransfer(Address(fromBase58String(bx)), bG, aN), ScriptTransfer(Address(fromBase58String(d)), bF, aN), ScriptTransfer(aK.caller, 1, bL)]
628573 }
629574 }
630575 }
631576 }
632577
633578
634-
635-@Callable(D)
636-func deleteEntry (bA) = {
637- let P = toString(addressFromPublicKey(D.callerPublicKey))
638- if ((P == j))
639- then [DeleteEntry(bA)]
640- else throw("no")
641- }
642-
643-
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = false
55
66 let b = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
77
88 let c = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
99
1010 let d = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
1111
1212 let e = if (a)
1313 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
14- else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
14+ else value(addressFromString("3Mx9KU2qWAgHfp1h3iyVsdiHiz3uuZFbBUG"))
1515
16-let f = value(addressFromString("3Mt6jj1WUYqd7DT7dHEubs9jETLUXMcAB8k"))
16+let f = value(addressFromString("3MuidizAcKUKVzU6AsDFfqcZQC7nkTEMm95"))
1717
1818 let g = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
1919
2020 let h = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
2121
2222 let i = base58''
2323
2424 let j = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
2525
2626 let k = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
2727
2828 let l = 7
2929
3030 let m = 10
3131
32-let n = 10
32+let n = "bafybeigisfqtyo2qdfsceh5fpcp7eeymrpeglp6edao2bmyhijbayvausy/licence.pdf"
3333
34-let o = "bafybeigisfqtyo2qdfsceh5fpcp7eeymrpeglp6edao2bmyhijbayvausy/licence.pdf"
34+let o = "3df79d34abbca99308e79cb94461c1893582604d68329a41fd4bec1885e6adb4"
3535
36-let p = "3df79d34abbca99308e79cb94461c1893582604d68329a41fd4bec1885e6adb4"
36+let p = valueOrElse(getBoolean(e, "conf_dapp_is_running"), true)
3737
38-let q = {
39- let r = getBoolean(e, "conf_dapp_is_running")
40- if ($isInstanceOf(r, "Boolean"))
41- then {
42- let s = r
43- s
44- }
45- else true
46- }
38+let q = valueOrElse(getString(e, "conf_maintenance_msg"), "")
4739
48-let t = {
49- let r = getString(e, "conf_maintenance_msg")
50- if ($isInstanceOf(r, "String"))
51- then {
52- let s = r
53- s
54- }
55- else ""
56- }
40+let r = "SUSPENDED"
5741
58-let u = "SUSPENDED"
42+let s = "REMOVED"
5943
60-let v = "REMOVED"
44+let t = "UNREGISTERED"
6145
62-let w = "UNREGISTERED"
46+let u = "ALLOWED"
6347
64-let x = "ALLOWED"
65-
66-func y (z) = {
67- let r = getString(e, z)
68- if ($isInstanceOf(r, "String"))
69- then {
70- let s = r
71- s
72- }
73- else ""
74- }
48+func v (w) = valueOrElse(getString(e, w), "")
7549
7650
77-func A (z) = {
78- let r = getString(this, z)
79- if ($isInstanceOf(r, "String"))
80- then {
81- let s = r
82- s
83- }
84- else ""
85- }
51+func x (w) = valueOrElse(getString(this, w), "")
8652
8753
88-func B (z) = {
89- let r = getInteger(b, z)
90- if ($isInstanceOf(r, "Int"))
91- then {
92- let s = r
93- s
94- }
95- else throw("Integer undefine or 0 in oracle")
96- }
54+func y (w) = valueOrErrorMessage(getInteger(b, w), "Integer undefine or 0 in oracle")
9755
9856
99-func C (z) = {
100- let r = getInteger(this, z)
101- if ($isInstanceOf(r, "Int"))
102- then {
103- let D = r
104- D
105- }
106- else 0
107- }
57+func z (w) = valueOrElse(getInteger(this, w), 0)
10858
10959
110-func E (z) = {
111- let r = getInteger(f, z)
112- if ($isInstanceOf(r, "Int"))
113- then {
114- let s = r
115- if ((s >= height))
116- then 1
117- else 0
118- }
119- else 0
120- }
60+func A (w) = valueOrElse(getInteger(f, w), 0)
12161
12262
123-func F (z) = {
124- let r = getBoolean(this, z)
125- if ($isInstanceOf(r, "Boolean"))
126- then {
127- let D = r
128- D
129- }
130- else false
131- }
63+func B (w) = valueOrElse(getBoolean(this, w), false)
13264
13365
134-func G (H,I,J) = {
135- let r = getString(c, ((("data_fc_" + H) + "_") + I))
136- if ($isInstanceOf(r, "String"))
66+func C (D,E,F) = {
67+ let G = getString(c, ((("data_fc_" + D) + "_") + E))
68+ if ($isInstanceOf(G, "String"))
13769 then {
138- let s = r
139- if (contains(s, J))
70+ let H = G
71+ if (contains(H, F))
14072 then true
14173 else false
14274 }
14375 else false
14476 }
14577
14678
147-func K (L) = if (contains(L, "/"))
148- then if (if ((75 > size(L)))
149- then (60 > size(split(L, "/")[0]))
79+func I (J) = if (contains(J, "/"))
80+ then if (if ((76 > size(J)))
81+ then (size(split(J, "/")[0]) == 59)
15082 else false)
151- then (16 > size(split(L, "/")[1]))
83+ then (16 > size(split(J, "/")[1]))
15284 else false
15385 else false
15486
15587
156-func M (N) = (65 > size(N))
88+func K (L) = (size(L) == 64)
15789
15890
159-func O (P) = ("user_status_" + P)
91+func M (N) = ("user_status_" + N)
16092
16193
162-func Q (P,R) = ((("art_date_" + R) + "_") + P)
94+func O (N,P) = ((("art_date_" + P) + "_") + N)
16395
16496
165-func S (P,R) = ((("art_name_" + R) + "_") + P)
97+func Q (N,P) = ((("art_name_" + P) + "_") + N)
16698
16799
168-func T (P,R) = ((("art_desc_" + R) + "_") + P)
100+func R (N,P) = ((("art_desc_" + P) + "_") + N)
169101
170102
171-func U (P,R) = ((("art_display_cid_" + R) + "_") + P)
103+func S (N,P) = ((("art_display_cid_" + P) + "_") + N)
172104
173105
174-func V (P,R) = ((("art_export_hash_" + R) + "_") + P)
106+func T (N,P) = ((("art_export_hash_" + P) + "_") + N)
175107
176108
177-func W (P,R) = ((("art_export_cid_" + R) + "_") + P)
109+func U (N,P) = ((("art_export_cid_" + P) + "_") + N)
178110
179111
180-func X (P,R) = ((("art_maxmint_" + R) + "_") + P)
112+func V (N,P) = ((("art_maxmint_" + P) + "_") + N)
181113
182114
183-func Y (P,R) = ((("art_signid_" + R) + "_") + P)
115+func W (N,P) = ((("art_signid_" + P) + "_") + N)
184116
185117
186-func Z (P,R) = ((("art_issued_" + R) + "_") + P)
118+func X (N,P) = ((("art_issued_" + P) + "_") + N)
187119
188120
189-func aa (P,R) = ((("art_onsale_" + R) + "_") + P)
121+func Y (N,P) = ((("art_onsale_" + P) + "_") + N)
190122
191123
192-func ab (P,R) = ((("art_licence_hash_" + R) + "_") + P)
124+func Z (N,P) = ((("art_licence_hash_" + P) + "_") + N)
193125
194126
195-func ac (P,R) = ((("art_licence_cid_" + R) + "_") + P)
127+func aa (N,P) = ((("art_licence_cid_" + P) + "_") + N)
196128
197129
198-func ad (P,R) = ((("art_tags_" + R) + "_") + P)
130+func ab (N,P) = ((("art_tags_" + P) + "_") + N)
199131
200132
201-func ae (P,R) = ((("art_type_" + R) + "_") + P)
133+func ac (N,P) = ((("art_type_" + P) + "_") + N)
202134
203135
204-func af (P,R) = ((("art_price_" + R) + "_") + P)
136+func ad (N,P) = ((("art_price_" + P) + "_") + N)
205137
206138
207-func ag (P,R) = ((("art_assetAccepted_" + R) + "_") + P)
139+func ae (N,P) = ((("art_assetAccepted_" + P) + "_") + N)
208140
209141
210-func ah (P,R) = ((("art_flag_" + R) + "_") + P)
142+func af (N,P) = ((("art_flag_" + P) + "_") + N)
211143
212144
213-func ai (P,aj) = ((("get_hashbytxidaddr_" + aj) + "_") + P)
145+func ag (N,ah) = ((("get_hashbytxidaddr_" + ah) + "_") + N)
214146
215147
216-func ak (J) = ("get_owner_by_hash_" + J)
148+func ai (F) = ("get_owner_by_hash_" + F)
217149
218150
219-func al (P,am) = ((("get_artidbysignid_" + am) + "_") + P)
151+func aj (N,ak) = ((("get_artidbysignid_" + ak) + "_") + N)
220152
221153
222-func an (J,P) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((J + P)))))
154+func al (F,N) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((F + N)))))
223155
224156
225-func ao (ap,aq,ar) = if (!(K(ap)))
157+func am (an,ao,ap) = if (!(I(an)))
226158 then throw("Wrong Display CID")
227- else if (!(K(aq)))
159+ else if (!(I(ao)))
228160 then throw("Wrong Export CID")
229- else if (if ((ar != ""))
230- then !(K(ar))
161+ else if (if ((ap != ""))
162+ then !(I(ap))
231163 else false)
232164 then throw("Wrong Licence CID")
233165 else true
234166
235167
236-func as (at,au) = if (!(M(at)))
168+func aq (ar,as) = if (!(K(ar)))
237169 then throw("Export Hash 64 char. max")
238- else if (!(M(au)))
170+ else if (!(K(as)))
239171 then throw("Licence Hash 64 char. max")
240172 else true
241173
242174
243-func av (aw,ax) = if ((size(aw) == 0))
175+func at (au,av) = if ((size(au) == 0))
244176 then throw("Field cannot be is empty")
245- else if ((size(aw) > ax))
246- then throw((aw + " is too long"))
177+ else if ((size(au) > av))
178+ then throw((au + " is too long"))
247179 else true
248180
249181
250-@Callable(ay)
251-func addArtwork (J,H,az,aA,aB,aC,aD,ap,at,aq,au,ar) = if (!(q))
252- then throw(t)
182+func aw (N) = {
183+ let ax = valueOrElse(getString(e, M(N)), t)
184+ if (if ((ax == t))
185+ then true
186+ else (ax == u))
187+ then "Register this account first with \"Account\" tab"
188+ else if ((ax == r))
189+ then "Account suspended"
190+ else if ((ax == s))
191+ then "Account removed"
192+ else ""
193+ }
194+
195+
196+func ay (ap,as) = {
197+ let J = if ((size(ap) == 0))
198+ then n
199+ else ap
200+ let L = if ((size(as) == 0))
201+ then o
202+ else as
203+ $Tuple2(J, L)
204+ }
205+
206+
207+func az (ap) = if ((size(ap) == 0))
208+ then n
209+ else ap
210+
211+
212+func aA (as) = if ((size(as) == 0))
213+ then o
214+ else as
215+
216+
217+func aB (N,an,ao,aC,ar,aD,aE,aF,aG,aH) = {
218+ let aI = aw(N)
219+ if ((aI != ""))
220+ then throw(aI)
221+ else if ((size(an) == 0))
222+ then throw("Display CID cannot be empty")
223+ else if (!(am(an, ao, aC)))
224+ then throw("Problem with CID")
225+ else if (!(aq(ar, aD)))
226+ then throw("Problem with Hashes")
227+ else if (!(at(aE, 100)))
228+ then throw("100 Char. max name")
229+ else if (!(at(aF, 1000)))
230+ then throw("1000 Char. max description")
231+ else if ((size(split(aG, ",")) > 5))
232+ then throw("5 tags max.")
233+ else if ((aH > 10))
234+ then throw("10 editions max per artwork")
235+ else ""
236+ }
237+
238+
239+func aJ (aK) = if ((size(aK.payments) == 0))
240+ then throw("No payment attached")
253241 else {
254- let R = toBase58String(ay.transactionId)
255- let P = toBase58String(ay.caller.bytes)
256- let aE = lastBlock.timestamp
257- let aF = if ((size(ar) == 0))
258- then o
259- else ar
260- let aG = if ((size(au) == 0))
261- then p
262- else au
263- let aH = {
264- let r = getString(e, ("user_status_" + P))
265- if ($isInstanceOf(r, "String"))
266- then {
267- let aI = r
268- aI
269- }
270- else w
242+ let aL = value(aK.payments[0])
243+ let aM = value(aL.amount)
244+ let aN = if (if (isDefined(aL.assetId))
245+ then (aL.assetId == g)
246+ else false)
247+ then aL.assetId
248+ else throw("Only SIGN token accepted as transaction fee")
249+ let aO = y(("certification_fee_" + toBase58String(g)))
250+ if ((aM != aO))
251+ then throw(("Payment amount should be " + toString(aO)))
252+ else $Tuple2(aM, aN)
253+ }
254+
255+
256+func aP (aQ,P) = {
257+ let G = getInteger(this, X(aQ, P))
258+ if ($isInstanceOf(G, "Int"))
259+ then {
260+ let aR = G
261+ if ((aR != 0))
262+ then true
263+ else false
271264 }
272- if (if (isDefined(aH))
273- then if ((aH == w))
274- then true
275- else (aH == x)
265+ else false
266+ }
267+
268+
269+func aS (aK,aT,aU) = {
270+ let aL = value(aK.payments[0])
271+ let aM = value(aL.amount)
272+ let aN = if (!(isDefined(aL.assetId)))
273+ then unit
274+ else if (if ((size(aT) > 0))
275+ then (toBase58String(value(aL.assetId)) == aT)
276276 else false)
277- then throw("Register this account first with \"Account\" tab")
278- else if ((aH == u))
279- then throw("Account suspended")
280- else if ((aH == v))
281- then throw("Account removed")
282- else if (!(ao(ap, aq, aF)))
283- then throw("Problem with CID")
284- else if (!(M(J)))
285- then throw("Hash should be 64 characters maximum")
286- else if (!(as(at, aG)))
287- then throw("Problem with Hashes")
288- else if ((size(ay.payments) == 0))
289- then throw("No payment attached")
277+ then aL.assetId
278+ else throw("Wrong asset id")
279+ if (if ((aN == unit))
280+ then (aT != "")
281+ else false)
282+ then throw("Wrong asset id")
283+ else if ((aU != aM))
284+ then throw("Payment don't match")
285+ else $Tuple2(aM, aN)
286+ }
287+
288+
289+func aV (aN) = if (if (if ((aN != toBase58String(g)))
290+ then (aN != toBase58String(i))
291+ else false)
292+ then (aN != toBase58String(h))
293+ else false)
294+ then throw("Only SIGN, USDN or WAVES accepted")
295+ else true
296+
297+
298+func aW (aN,aX) = {
299+ let aY = if (a)
300+ then 1
301+ else y("waves_min_sell")
302+ let aZ = 1000000
303+ let ba = if (a)
304+ then 1
305+ else (y(("certification_fee_" + toBase58String(g))) * 2)
306+ if (if (if (if (if ((aN == toBase58String(h)))
307+ then (aZ > aX)
308+ else false)
309+ then (aX != 0)
310+ else false)
311+ then true
312+ else if (if ((aN == toBase58String(g)))
313+ then (ba > aX)
314+ else false)
315+ then (aX != 0)
316+ else false)
317+ then true
318+ else if (if ((aN == toBase58String(i)))
319+ then (aY > aX)
320+ else false)
321+ then (aX != 0)
322+ else false)
323+ then throw("Wrong minimum sell price")
324+ else true
325+ }
326+
327+
328+@Callable(aK)
329+func addArtwork (F,D,aE,aF,aG,bb,aH,an,ar,ao,as,ap) = if (!(p))
330+ then throw(q)
331+ else {
332+ let P = toBase58String(aK.transactionId)
333+ let bc = lastBlock.timestamp
334+ let N = toBase58String(aK.caller.bytes)
335+ if (!(K(F)))
336+ then throw("Hash should be 64 characters maximum")
337+ else {
338+ let bd = ay(ap, as)
339+ let aC = bd._1
340+ let aD = bd._2
341+ let be = aB(N, an, ao, aC, ar, aD, aE, aF, aG, aH)
342+ if ((be != ""))
343+ then throw("Something went wrong!")
344+ else {
345+ let bf = aJ(aK)
346+ let aM = bf._1
347+ let aN = bf._2
348+ if (!(isDefined(aM)))
349+ then throw("Something went wrong")
350+ else {
351+ let bg = x(al(F, N))
352+ if ((bg != ""))
353+ then throw("You already added it")
290354 else {
291- let aJ = value(ay.payments[0])
292- let aK = value(aJ.amount)
293- let aL = if (if (isDefined(aJ.assetId))
294- then (aJ.assetId == g)
295- else false)
296- then aJ.assetId
297- else throw("Only SIGN token accepted")
298- let aM = B(("certification_fee_" + toBase58String(g)))
299- if ((aK != aM))
300- then throw(("Payment amount should be " + toString(aM)))
355+ let bh = x(ai(F))
356+ if ((bh != ""))
357+ then throw("Hash already registered")
301358 else {
302- let aN = A(an(J, P))
303- if ((aN != ""))
304- then throw("You already added it")
305- else {
306- let aO = A(ak(J))
307- if ((aO != ""))
308- then throw("Hash already registered")
309- else {
310- let aP = G(H, P, J)
311- if (!(aP))
312- then throw("Sign Certificate not found for this address.")
313- else if ((size(ap) == 0))
314- then throw("Display CID cannot be empty")
315- else if (!(av(az, 100)))
316- then throw("100 Char. max name")
317- else if (!(av(aA, 1000)))
318- then throw("1000 Char. max description")
319- else if ((size(split(aB, ",")) > 5))
320- then throw("5 tags max.")
321- else if ((aD > 10))
322- then throw("10 editions max")
323- else [StringEntry(ak(J), P), StringEntry(an(J, P), R), IntegerEntry(Q(P, R), aE), StringEntry(S(P, R), az), StringEntry(T(P, R), aA), StringEntry(U(P, R), ap), StringEntry(W(P, R), aq), StringEntry(V(P, R), at), StringEntry(ab(P, R), aG), StringEntry(ac(P, R), aF), StringEntry(ae(P, R), aC), StringEntry(ad(P, R), aB), IntegerEntry(X(P, R), aD), StringEntry(Y(P, R), H), IntegerEntry(Z(P, R), 0), BooleanEntry(aa(P, R), false), StringEntry(al(P, H), R), StringEntry(ai(P, R), J), ScriptTransfer(Address(fromBase58String(d)), aK, aL)]
324- }
325- }
359+ let bi = C(D, N, F)
360+ if (!(bi))
361+ then throw("Sign Certificate not found for this address.")
362+ else [StringEntry(ai(F), N), StringEntry(al(F, N), P), IntegerEntry(O(N, P), bc), StringEntry(Q(N, P), aE), StringEntry(R(N, P), aF), StringEntry(S(N, P), an), StringEntry(U(N, P), ao), StringEntry(T(N, P), ar), StringEntry(Z(N, P), aD), StringEntry(aa(N, P), aC), StringEntry(ac(N, P), bb), StringEntry(ab(N, P), aG), IntegerEntry(V(N, P), aH), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(aj(N, D), P), StringEntry(ag(N, P), F), ScriptTransfer(Address(fromBase58String(d)), aM, aN)]
326363 }
327364 }
365+ }
366+ }
367+ }
328368 }
329369
330370
331371
332-@Callable(ay)
333-func updateArtwork (aj,az,aA,aB,aC,aD,ap,at,aq,au,ar) = if (!(q))
334- then throw(t)
372+@Callable(aK)
373+func updateArtwork (ah,aE,aF,aG,bb,aH,an,ar,ao,as,ap) = if (!(p))
374+ then throw(q)
335375 else {
336- let aQ = toBase58String(ay.transactionId)
337- let P = toBase58String(ay.caller.bytes)
338- let aF = if ((size(ar) == 0))
339- then o
340- else ar
341- let aG = if ((size(au) == 0))
342- then p
343- else au
344- let aH = y(O(P))
345- if (if ((aH == ""))
346- then true
347- else (aH == x))
348- then throw("Register first with \"User infos\"")
349- else if ((aH == u))
350- then throw("Account suspended")
351- else if ((aH == v))
352- then throw("Account removed")
353- else if (!(ao(ap, aq, aF)))
354- then throw("Problem with CID")
355- else if (!(as(at, aG)))
356- then throw("Problem with Hashes")
357- else {
358- let aN = A(S(P, aj))
359- if ((aN == ""))
360- then throw("Entry not found")
361- else if (!(av(az, 100)))
362- then throw("100 Char. max name")
363- else if (!(av(aA, 1000)))
364- then throw("1000 Char. max description")
365- else {
366- let aR = A(ah(P, aj))
367- if ((aR == "ILLEGAL"))
368- then throw("Cannot update ILLEGAL artwork")
369- else {
370- let aS = {
371- let r = getInteger(this, Z(P, aj))
372- if ($isInstanceOf(r, "Int"))
373- then {
374- let aT = r
375- if ((aT == 0))
376- then false
377- else true
378- }
379- else false
380- }
381- if ((size(split(aB, ",")) > 5))
382- then throw("5 tags max.")
383- else if ((aD > 10))
384- then throw("10 editions max per artwork")
385- else if (!(aS))
386- then [StringEntry(S(P, aj), az), StringEntry(T(P, aj), aA), StringEntry(U(P, aj), ap), StringEntry(W(P, aj), aq), StringEntry(V(P, aj), at), StringEntry(ac(P, aj), aF), StringEntry(ab(P, aj), aG), IntegerEntry(X(P, aj), aD), StringEntry(ad(P, aj), aB), StringEntry(ae(P, aj), aC)]
387- else throw("Already minted")
388- }
389- }
390- }
376+ let bj = toBase58String(aK.transactionId)
377+ let N = toBase58String(aK.caller.bytes)
378+ let bk = ay(ap, as)
379+ let aC = bk._1
380+ let aD = bk._2
381+ let be = aB(N, an, ao, aC, ar, aD, aE, aF, aG, aH)
382+ if ((be != ""))
383+ then throw("Something went wrong!")
384+ else {
385+ let bg = x(Q(N, ah))
386+ if ((bg == ""))
387+ then throw("Entry not found")
388+ else {
389+ let bl = x(af(N, ah))
390+ if ((bl == "ILLEGAL"))
391+ then throw("Cannot update ILLEGAL artwork")
392+ else if (!(aP(N, ah)))
393+ then [StringEntry(Q(N, ah), aE), StringEntry(R(N, ah), aF), StringEntry(S(N, ah), an), StringEntry(U(N, ah), ao), StringEntry(T(N, ah), ar), StringEntry(aa(N, ah), aC), StringEntry(Z(N, ah), aD), IntegerEntry(V(N, ah), aH), StringEntry(ab(N, ah), aG), StringEntry(ac(N, ah), bb)]
394+ else throw("Already minted")
395+ }
396+ }
391397 }
392398
393399
394400
395-@Callable(D)
396-func flagArtwork (R,aU,aR) = {
397- let P = toString(addressFromPublicKey(D.callerPublicKey))
398- let aV = toBase58String(D.transactionId)
399- if (containsElement([j, k, toString(this)], P))
400- then if ((aR == "CONSENT"))
401- then [StringEntry(ah(aU, R), aR)]
402- else if ((aR == ""))
403- then [StringEntry(ah(aU, R), aR)]
404- else if ((aR == "ILLEGAL"))
405- then [StringEntry(ah(aU, R), aR), StringEntry(S(aU, R), "ILLEGAL CONTENT"), StringEntry(T(aU, R), "ILLEGAL CONTENT"), StringEntry(U(aU, R), ""), StringEntry(W(aU, R), ""), StringEntry(ac(aU, R), "")]
406- else throw(("Unknow status " + aR))
401+@Callable(aK)
402+func flagArtwork (P,bm,bl) = {
403+ let N = toString(addressFromPublicKey(aK.callerPublicKey))
404+ let bn = toBase58String(aK.transactionId)
405+ if (containsElement([j, k, toString(this)], N))
406+ then if ((bl == "CONSENT"))
407+ then [StringEntry(af(bm, P), bl)]
408+ else if ((bl == ""))
409+ then [StringEntry(af(bm, P), bl)]
410+ else if ((bl == "ILLEGAL"))
411+ then [StringEntry(af(bm, P), bl), StringEntry(Q(bm, P), "ILLEGAL CONTENT"), StringEntry(R(bm, P), "ILLEGAL CONTENT"), StringEntry(S(bm, P), ""), StringEntry(U(bm, P), ""), StringEntry(aa(bm, P), "")]
412+ else throw(("Unknow status " + bl))
407413 else throw("You are not allowed")
408414 }
409415
410416
411417
412-@Callable(D)
413-func deleteArtwork (R,aU) = {
414- let P = toString(addressFromPublicKey(D.callerPublicKey))
415- let aV = toBase58String(D.transactionId)
416- let aW = if (containsElement([j, k, toString(this)], P))
417- then aU
418- else P
419- let aN = A(S(aW, R))
420- if ((aN == ""))
418+@Callable(aK)
419+func deleteArtwork (P,bm) = {
420+ let N = toString(addressFromPublicKey(aK.callerPublicKey))
421+ let bn = toBase58String(aK.transactionId)
422+ let aQ = if (containsElement([j, k, toString(this)], N))
423+ then bm
424+ else N
425+ let bg = x(Q(aQ, P))
426+ if ((bg == ""))
421427 then throw("No art matching for this address")
422428 else {
423- let aS = {
424- let r = getInteger(this, Z(aW, R))
425- if ($isInstanceOf(r, "Int"))
426- then {
427- let aT = r
428- if ((aT != 0))
429- then true
430- else false
431- }
432- else false
433- }
434- let aX = C(X(aW, R))
435- let J = A(ai(aW, R))
436- if ((J == ""))
429+ let F = x(ag(aQ, P))
430+ if ((F == ""))
437431 then throw("No art hash matching for this address")
438432 else {
439- let H = A(Y(aW, R))
440- if ((H == ""))
433+ let D = x(W(aQ, P))
434+ if ((D == ""))
441435 then throw("No SIGN ID matching")
442436 else {
443- let aY = [DeleteEntry(Q(aW, R)), DeleteEntry(S(aW, R)), DeleteEntry(T(aW, R)), DeleteEntry(U(aW, R)), DeleteEntry(W(aW, R)), DeleteEntry(V(aW, R)), DeleteEntry(ab(aW, R)), DeleteEntry(ac(aW, R)), DeleteEntry(ae(aW, R)), DeleteEntry(ad(aW, R)), DeleteEntry(X(aW, R)), DeleteEntry(Y(aW, R)), DeleteEntry(Z(aW, R)), DeleteEntry(aa(aW, R)), DeleteEntry(ah(aU, R)), DeleteEntry(ak(J)), DeleteEntry(al(aW, H)), DeleteEntry(an(J, aW))]
444- if (!(aS))
445- then if (!(q))
446- then throw(t)
447- else aY
448- else if (containsElement([j, toString(this)], P))
449- then aY
450- else throw("Art already minted, cannot delete")
437+ let bo = [DeleteEntry(O(aQ, P)), DeleteEntry(Q(aQ, P)), DeleteEntry(R(aQ, P)), DeleteEntry(S(aQ, P)), DeleteEntry(U(aQ, P)), DeleteEntry(T(aQ, P)), DeleteEntry(Z(aQ, P)), DeleteEntry(aa(aQ, P)), DeleteEntry(ac(aQ, P)), DeleteEntry(ab(aQ, P)), DeleteEntry(V(aQ, P)), DeleteEntry(W(aQ, P)), DeleteEntry(X(aQ, P)), DeleteEntry(Y(aQ, P)), DeleteEntry(af(bm, P)), DeleteEntry(ai(F)), DeleteEntry(aj(aQ, D)), DeleteEntry(al(F, aQ))]
438+ if (!(aP(aQ, P)))
439+ then if (!(p))
440+ then throw(q)
441+ else bo
442+ else if (containsElement([j, toString(this)], N))
443+ then bo
444+ else throw("Art already minted, you cannot delete it")
451445 }
452446 }
453447 }
454448 }
455449
456450
457451
458-@Callable(D)
459-func sellArtwork (R,aZ,aX,aL) = if (!(q))
460- then throw(t)
452+@Callable(aK)
453+func sellArtwork (P,aX,bp,aN) = if (!(p))
454+ then throw(q)
461455 else {
462- let aV = toBase58String(D.transactionId)
463- let P = toBase58String(D.caller.bytes)
464- let ba = lastBlock.timestamp
465- let bb = A(S(P, R))
466- if ((bb == ""))
456+ let bn = toBase58String(aK.transactionId)
457+ let N = toBase58String(aK.caller.bytes)
458+ let bq = lastBlock.timestamp
459+ let br = x(Q(N, P))
460+ if ((br == ""))
467461 then throw("This art doesn't match match your account")
468462 else {
469- let bc = A(W(P, R))
470- if ((size(split(bc, "/")[0]) != 59))
463+ let bs = x(U(N, P))
464+ if ((size(split(bs, "/")[0]) != 59))
471465 then throw("You cannot sell art with no export file")
472466 else {
473- let bd = A(V(P, R))
474- if ((size(bd) != 64))
467+ let bt = x(T(N, P))
468+ if ((size(bt) != 64))
475469 then throw("You cannot sell art with no export hash")
476- else if (if (if ((aL != toBase58String(g)))
477- then (aL != toBase58String(i))
478- else false)
479- then (aL != toBase58String(h))
480- else false)
481- then throw("Only SIGN, USDN or WAVES accepted")
482- else {
483- let be = if (a)
484- then 1
485- else B("waves_min_sell")
486- let bf = 1000000
487- let bg = if (a)
488- then 1
489- else (B(("certification_fee_" + toBase58String(g))) * 2)
490- if (if (if (if (if ((aL == toBase58String(h)))
491- then (bf > aZ)
492- else false)
493- then (aZ != 0)
494- else false)
495- then true
496- else if (if ((aL == toBase58String(g)))
497- then (bg > aZ)
498- else false)
499- then (aZ != 0)
500- else false)
501- then true
502- else if (if ((aL == toBase58String(i)))
503- then (be > aZ)
504- else false)
505- then (aZ != 0)
506- else false)
507- then throw("Wrong minimum sell price")
508- else {
509- let aH = y(O(P))
510- if (if ((aH == ""))
511- then true
512- else (aH == x))
513- then throw("Register this account first")
514- else if ((aH == u))
515- then throw("Account suspended")
516- else if ((aH == v))
517- then throw("Account deleted")
518- else {
519- let bh = C(Z(P, R))
520- let bi = C(X(P, R))
521- if ((aX > 10))
522- then throw("10 editions max per artwork")
523- else if (if ((bh != 0))
524- then (bh == bi)
470+ else if (!(aV(aN)))
471+ then throw("Something wen wrong!")
472+ else if (!(aW(aN, aX)))
473+ then throw("Something wen wrong!")
474+ else {
475+ let aI = aw(N)
476+ if ((aI != ""))
477+ then throw(aI)
478+ else {
479+ let bu = z(X(N, P))
480+ let bv = z(V(N, P))
481+ if ((bp > 10))
482+ then throw("10 editions max per artwork")
483+ else if (if ((bu != 0))
484+ then (bu == bv)
485+ else false)
486+ then throw("Max edition reached.")
487+ else if (if ((bu > 0))
488+ then (bv != bp)
489+ else false)
490+ then throw("Cannot change maximum issuable anymore")
491+ else {
492+ let bw = if (if ((aX > 0))
493+ then (bp > 0)
525494 else false)
526- then throw("Max edition reached.")
527- else if (if ((bh > 0))
528- then (bi != aX)
529- else false)
530- then throw("Cannot change maximum issuable anymore")
531- else {
532- let bj = if (if ((aZ > 0))
533- then (aX > 0)
534- else false)
535- then true
536- else false
537-[BooleanEntry(aa(P, R), bj), IntegerEntry(af(P, R), aZ), IntegerEntry(X(P, R), aX), StringEntry(ag(P, R), aL)]
538- }
539- }
540- }
541- }
495+ then true
496+ else false
497+[BooleanEntry(Y(N, P), bw), IntegerEntry(ad(N, P), aX), IntegerEntry(V(N, P), bp), StringEntry(ae(N, P), aN)]
498+ }
499+ }
500+ }
542501 }
543502 }
544503 }
545504
546505
547506
548-@Callable(D)
549-func buyArtwork (R,bk) = if (!(q))
550- then throw(t)
507+@Callable(aK)
508+func buyArtwork (P,bx) = if (!(p))
509+ then throw(q)
551510 else {
552- let aV = toBase58String(D.transactionId)
553- let P = toBase58String(D.caller.bytes)
554- let bl = C("total_nft_issued")
555- let H = A(Y(bk, R))
556- let bb = A(S(bk, R))
557- if ((bb == ""))
511+ let bn = toBase58String(aK.transactionId)
512+ let N = toBase58String(aK.caller.bytes)
513+ let by = z("total_nft_issued")
514+ let D = x(W(bx, P))
515+ let br = x(Q(bx, P))
516+ if ((br == ""))
558517 then throw("Art doesn't exist")
559518 else {
560- let bm = A(U(bk, R))
561- let bc = A(W(bk, R))
562- let bd = A(V(bk, R))
563- let aF = A(ac(bk, R))
564- let aG = A(ab(bk, R))
565- let aA = take(A(T(bk, R)), 50)
566- let bh = C(Z(bk, R))
567- let bn = C(af(bk, R))
568- let bo = F(aa(bk, R))
569- let bp = A(ag(bk, R))
570- let bq = A(ai(bk, R))
571- let bi = C(X(bk, R))
572- if (if (if ((0 >= bn))
519+ let bz = x(S(bx, P))
520+ let bs = x(U(bx, P))
521+ let bt = x(T(bx, P))
522+ let aC = x(aa(bx, P))
523+ let aD = x(Z(bx, P))
524+ let aF = take(x(R(bx, P)), 50)
525+ let bA = B(Y(bx, P))
526+ let bu = z(X(bx, P))
527+ let aU = z(ad(bx, P))
528+ let aT = x(ae(bx, P))
529+ let bB = x(ag(bx, P))
530+ let bv = z(V(bx, P))
531+ if (if (if ((0 >= aU))
573532 then true
574- else !(bo))
533+ else !(bA))
575534 then true
576- else (0 >= bi))
535+ else (0 >= bv))
577536 then throw("Art not for sale")
578537 else {
579- let aJ = value(D.payments[0])
580- let aK = value(aJ.amount)
581- let aL = if (!(isDefined(aJ.assetId)))
582- then unit
583- else if (if ((size(bp) > 0))
584- then (toBase58String(value(aJ.assetId)) == bp)
585- else false)
586- then aJ.assetId
587- else throw("Wrong asset id")
588- if (if ((aL == unit))
589- then (bp != "")
590- else false)
591- then throw("Wrong asset id")
538+ let bC = aS(aK, aT, aU)
539+ let aM = bC._1
540+ let aN = bC._2
541+ let bD = A(bx)
542+ let bE = if ((bD == 1))
543+ then 0
544+ else if ((aT == toBase58String(g)))
545+ then l
546+ else m
547+ let bF = fraction(aM, bE, 100)
548+ let bG = (aM - bF)
549+ if ((bu == bv))
550+ then throw("Art sold out")
592551 else {
593- let br = E(bk)
594- let bs = if ((br == 1))
595- then 0
596- else if ((bp == toBase58String(g)))
597- then 8
598- else 10
599- let bt = fraction(aK, bs, 100)
600- let bu = (aK - bt)
601- if ((bh == bi))
602- then throw("Art sold out")
603- else if ((bn != aK))
604- then throw("Payment don't match")
605- else {
606- let bv = (bh + 1)
607- let bw = lastBlock.timestamp
608- let bx = ((((((((((((((((((((((((((("Creator: " + bk) + ",
609- ArtID: ") + R) + ",
610- SignID: ") + H) + ",
611- Artwork name: ") + bb) + ",
612- Artwork description: ") + aA) + ",
613- Issue: ") + toString(bv)) + "/") + toString(bi)) + ",
614- Max issuable: ") + toString(bi)) + ",
615- Source hash: ") + bq) + ",
616- Display cid: ") + bm) + ",
617- Export cid: ") + bc) + ",
618- Export hash: ") + bd) + ",
619- Licence cid: ") + aF) + ",
620- Licence hash: ") + aG)
621- let by = Issue(("SA_" + toString((bl + 1))), bx, 1, 0, false)
622- let bz = calculateAssetId(by)
623- let bj = if ((bv == bi))
624- then false
625- else true
626-[IntegerEntry(Z(bk, R), bv), StringEntry(("nft_" + toBase58String(bz)), ((((((("art_sold_" + toString(bv)) + "_of_") + toString(bi)) + "_") + R) + "_") + bk)), StringEntry(((((((("art_sold_" + toString(bv)) + "_of_") + toString(bi)) + "_") + R) + "_") + bk), ((((((((((P + "_") + toString(bw)) + "_") + aV) + "_") + toString(bn)) + "_") + bp) + "_") + toBase58String(bz))), IntegerEntry("total_nft_issued", (bl + 1)), BooleanEntry(aa(bk, R), bj), by, ScriptTransfer(Address(fromBase58String(bk)), bu, aL), ScriptTransfer(Address(fromBase58String(d)), bt, aL), ScriptTransfer(D.caller, 1, bz)]
627- }
552+ let bH = (bu + 1)
553+ let bI = lastBlock.timestamp
554+ let bJ = ((((((((((((((((((((((((((("Creator: " + bx) + ",
555+ ArtID: ") + P) + ",
556+ SignID: ") + D) + ",
557+ Artwork name: ") + br) + ",
558+ Artwork description: ") + aF) + ",
559+ Issue: ") + toString(bH)) + "/") + toString(bv)) + ",
560+ Max issuable: ") + toString(bv)) + ",
561+ Source hash: ") + bB) + ",
562+ Display cid: ") + bz) + ",
563+ Export cid: ") + bs) + ",
564+ Export hash: ") + bt) + ",
565+ Licence cid: ") + aC) + ",
566+ Licence hash: ") + aD)
567+ let bK = Issue(("SA_" + toString((by + 1))), bJ, 1, 0, false)
568+ let bL = calculateAssetId(bK)
569+ let bw = if ((bH == bv))
570+ then false
571+ else true
572+[IntegerEntry(X(bx, P), bH), StringEntry(("nft_" + toBase58String(bL)), ((((((("art_sold_" + toString(bH)) + "_of_") + toString(bv)) + "_") + P) + "_") + bx)), StringEntry(((((((("art_sold_" + toString(bH)) + "_of_") + toString(bv)) + "_") + P) + "_") + bx), ((((((((((N + "_") + toString(bI)) + "_") + bn) + "_") + toString(aU)) + "_") + aT) + "_") + toBase58String(bL))), IntegerEntry("total_nft_issued", (by + 1)), BooleanEntry(Y(bx, P), bw), bK, ScriptTransfer(Address(fromBase58String(bx)), bG, aN), ScriptTransfer(Address(fromBase58String(d)), bF, aN), ScriptTransfer(aK.caller, 1, bL)]
628573 }
629574 }
630575 }
631576 }
632577
633578
634-
635-@Callable(D)
636-func deleteEntry (bA) = {
637- let P = toString(addressFromPublicKey(D.callerPublicKey))
638- if ((P == j))
639- then [DeleteEntry(bA)]
640- else throw("no")
641- }
642-
643-

github/deemru/w8io/c3f4982 
149.61 ms