tx · HuArHuEcWy6Mim6Jn1QLWNPEr6HFVyWQHNsqookFduKX

3NBquYd5fTq8HRDkagrtNLQ3HmWd7wcZoeL:  -0.01400000 Waves

2021.01.27 13:24 [1371790] smart account 3NBquYd5fTq8HRDkagrtNLQ3HmWd7wcZoeL > SELF 0.00000000 Waves

{ "type": 13, "id": "HuArHuEcWy6Mim6Jn1QLWNPEr6HFVyWQHNsqookFduKX", "fee": 1400000, "feeAssetId": null, "timestamp": 1611743068815, "version": 2, "chainId": 84, "sender": "3NBquYd5fTq8HRDkagrtNLQ3HmWd7wcZoeL", "senderPublicKey": "7irc2VpK5czoyVdwrCuQqr2JU9ZaZnEZn8RPChnfi3yL", "proofs": [ "2dAAcbMGC33An9Eben9DRnTLwMSgE86Gav3SsasdaP1mopzL3zt54NgDVSKYqoHc4b22hFAgw2jjri4RMfmpu6pQ" ], "script": "base64:AAIEAAAAAAAAAEEIAhIOCgwICAgICAgBCAgICAgSDQoLCAgICAgBCAgICAgSBQoDCAgIEgQKAggIEgYKBAgBAQgSBAoCCAgSAwoBCAAAAD8AAAAACHVuaXRUZXN0BwAAAAAJb3JhY2xlRmVlCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOMnM1UnRhSFBCZW5Dc3gyRUNjb0ZSYllIeDNub1poWFcxAAAAAAhzaWduRGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkMyOGhTaXZybXNUVVhhWUQxeDZMMzYySjRacFVub1RkQgAAAAALZmVlUmVjZWl2ZXICAAAAIzNOMUU2dFhkZFJvVmFSZlE5ZFEzdmc1TGFXMmZzZDhIS3ViAAAAAAh1c2VyRGFwcAMFAAAACHVuaXRUZXN0CQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNd0RaYWdvWUVpTmZRTGMzMWNHcFlvYUU1NE1HTXdvRnJaAAAAAA13aGl0ZWxpc3REYXBwCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNONkJhVjFkQ0I0emc0M2dvTk5IYUN0dlIxM0JjeUo1R3NxAAAAAAtzaWduQXNzZXRJZAEAAAAg6KVqvMp3QvJwYTI1Sk9Fg7m5HuWZZxfDcerZC6EEresAAAAAC3VzZG5Bc3NldElkAQAAACAP8hwSrOTEPJrsRhqrJaiw7LoHK0bMbYhy8LXikkkBtAAAAAAMd2F2ZXNBc3NldElkAQAAAAAAAAAABWNocmlzAgAAACMzTXNHNmpQTkNyVkpVdFlCN1hKQnhTN3V0V3NYQWY0bjlWcAAAAAAEam9lcAIAAAAjM016bTRWTHdzTjl1WndiVE16UGozWHV4VjZrRWZBUjhVRE4AAAAAB3NpZ25DdXQAAAAAAAAAAAcAAAAAC3VzZG5XYXZlQ3V0AAAAAAAAAAAKAAAAAA5kZWZhdWx0TGljZW5jZQIAAABHYmFmeWJlaWZ1eW80cHF1NTRpc21xZ3RiNmU0aDZra3ZneDd6ZzR1M3ppYmgycjd5Nm1iNjRpN2J6emEvbGljZW5jZS5wZGYAAAAAEmRlZmF1bHRIYXNoTGljZW5jZQIAAABAYTg3NzU4YzM1NGUzMGE5ZTc4ZmI4NGZhM2EwMDEwYTUwOTBhYjIwZGYwYmUxMWFkNDViNTcyMGNjMTg3ZTYzOQAAAAALZGFwcFJ1bm5pbmcJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAIdXNlckRhcHACAAAAFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAAAAAObWFpbnRlbmFuY2VNU0cJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHACAAAAFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAAAAAAAAAADXVzZXJTdXNwZW5kZWQCAAAACVNVU1BFTkRFRAAAAAALdXNlclJlbW92ZWQCAAAAB1JFTU9WRUQAAAAAEHVzZXJVbnJlZ2lzdGVyZWQCAAAADFVOUkVHSVNURVJFRAAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQBAAAAF2dldFN0cmluZ0J5S2V5RnJvbVVzZXJzAAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHAFAAAAA2tleQIAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAABlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAlvcmFjbGVGZWUFAAAAA2tleQIAAAAfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAAAQAAAA5jaGVja1doaXRlbGlzdAAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAADXdoaXRlbGlzdERhcHAFAAAAA2tleQAAAAAAAAAAAAEAAAAPZ2V0Qm9v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YXltZW50IGF0dGFjaGVkBAAAAAdwYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAZpbnZva2UAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAABmFtb3VudAkBAAAABXZhbHVlAAAAAQgFAAAAB3BheW1lbnQAAAAGYW1vdW50BAAAAAdhc3NldElkAwMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAHcGF5bWVudAAAAAdhc3NldElkCQAAAAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAC3NpZ25Bc3NldElkBwgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAACtPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlBAAAABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQEAAAAZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQAAAAEJAAEsAAAAAgIAAAASY2VydGlmaWNhdGlvbl9mZWVfCQACWAAAAAEFAAAAC3NpZ25Bc3NldElkAwkBAAAAAiE9AAAAAgUAAAAGYW1vdW50BQAAABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQAAAgAAAAEJAAEsAAAAAgIAAAAZUGF5bWVudCBhbW91bnQgc2hvdWxkIGJlIAkAAaQAAAABBQAAABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQAFFAAAAAIFAAAABmFtb3VudAUAAAAHYXNzZXRJZAEAAAALaXNBcnRNaW50ZWQAAAACAAAADGFkZHJlc3NUb1VzZQAAAAVhcnRJZAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQEAAAAMa2V5QXJ0SXNzdWVkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwAwkBAAAAAiE9AAAAAgUAAAABYgAAAAAAAAAAAAYHBwEAAAAUdmFsaWRhdGVQcmljZUFzc2V0SWQAAAADAAAABmludm9rZQAAAAxwcmljZUFzc2V0SWQAAAAMYXJ0d29ya1ByaWNlBAAAAAdwYXltZW50CQEAAAAFdmFs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AAJYAAAAAQgIBQAAAAZpbnZva2UAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAkAAAIAAAABAgAAACRIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0EAAAADSR0MDExNTE0MTE1ODMJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDExNTE0MTE1ODMAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTE1MTQxMTU4MwAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAoFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwUAAAAHbWF4bWludAMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAANJHQwMTE4MTExMTg1OAkBAAAAD3ZhbGlkYXRlUGF5bWVudAAAAAEFAAAABmludm9rZQQAAAAGYW1vdW50CAUAAAANJHQwMTE4MTExMTg1OAAAAAJfMQQAAAAHYXNzZXRJZAgFAAAADSR0MDExODExMTE4NTgAAAACXzIDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAZhbW91bnQJAAACAAAAAQIAAAAUU29tZXRoaW5nIHdlbnQgd3JvbmcEAAAACmVudHJ5RXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVrZXlBcnRUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAUWW91IGFscmVhZHkgYWRkZWQgaXQEAAAACWhhc2hFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAMJAQAAAAIhPQAAAAIFAAAACWhhc2hFeGlzdAIAAAAACQAAAgAAAAECAAAAF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBAAAAA9pc1NpZ25DZXJ0aWZpZWQJAQAAABRjaGVja1NpZ25DZXJ0aWZpY2F0ZQAAAAMFAAAABnNpZ25JRAUAAAAGY2FsbGVyBQAAAApzaGEyNTZIYXNoAwkBAAAAASEAAAABBQAAAA9pc1NpZ25DZXJ0aWZpZWQJAAACAAAAAQIAAAAsU2lnbiBDZXJ0aWZpY2F0ZSBub3QgZm91bmQgZm9yIHRoaXMgYWRkcmVzcy4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAUAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABVrZXlBcnRUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIFAAAABWFydElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKa2V5QXJ0RGF0ZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydERlc2MAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmNpZERpc3BsYXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACWNpZEV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAADHNoYTI1NkV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAtsaWNlbmNlSGFzaAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmxpY2VuY2VDSUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFR5cGUAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAR0eXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUYWdzAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEdGFncwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAdtYXhtaW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlBcnRTaWduSUQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAZzaWduSUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkAAAAAAAAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleUFydEFydGlkQnlTaWduaWQAAAACBQAAAAZjYWxsZXIFAAAABnNpZ25JRAUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGtleUFydEhhc2hCeVR4aWRBZGRyAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAKc2hhMjU2SGFzaAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZmVlUmVjZWl2ZXIFAAAABmFtb3VudAUAAAAHYXNzZXRJZAUAAAADbmlsAAAABmludm9rZQEAAAANdXBkYXRlQXJ0d29yawAAAAsAAAAEdHhpZAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAAdtYXhtaW50AAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UDCQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAh1cGRhdGVJZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAABmNhbGxlcgkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADSR0MDE0NzEzMTQ3ODIJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDE0NzEzMTQ3ODIAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTQ3MTMxNDc4MgAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAoFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwUAAAAHbWF4bWludAMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0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CQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAPa2V5QXJ0RXhwb3J0Q2lkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEWtleUFydExpY2VuY2VIYXNoAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydFR5cGUAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnRUYWdzAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydFNpZ25JRAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydElzc3VlZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydE9uU2FsZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydEZsYWcAAAACBQAAAARhZGRyBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAALa2V5QXJ0UHJpY2UA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CQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAJpZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAABmNhbGxlcgkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACHRvdGFsTkZUCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQIAAAAQdG90YWxfbmZ0X2lzc3VlZAQAAAAGc2lnbklECQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALYXJ0d29ya05hbWUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAprZXlBcnROYW1lAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXJ0d29ya05hbWUCAAAAAAkAAAIAAAABAgAAABFBcnQgZG9lc24ndCBleGlzdAQAAAAKZGlzcGxheUNJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGtleUFydERpc3BsYXlDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAlleHBvcnRDSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAApleHBvcnRIYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACmxpY2VuY2VDSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALbGljZW5jZUhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFrZXlBcnRMaWNlbmNlSGFzaAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAAC2Rlc2NyaXB0aW9uCQABLwAAAAIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAprZXlBcnREZXNjAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAAAAAAAAAAAMgQAAAAIaXNPblNhbGUJAQAAAA9nZXRCb29sZWFuQnlLZXkAAAABCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAAKYW1vdW50U29sZAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxhcnR3b3JrUHJpY2UJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAALa2V5QXJ0UHJpY2UAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxwcmljZUFzc2V0SWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVrZXlBcnRBc3NldElkQWNjZXB0ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAApzb3VyY2VIYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAUa2V5QXJ0SGFzaEJ5VHhpZEFkZHIAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAptYXhDYW5TZWxsCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwMDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGFydHdvcmtQcmljZQYJAQAAAAEhAAAAAQUAAAAIaXNPblNhbGUGCQAAZwAAAAIAAAAAAAAAAAAFAAAACm1heENhblNlbGwJAAACAAAAAQIAAAAQQXJ0IG5vdCBmb3Igc2FsZQQAAAANJHQwMjMxNzUyMzI1NQkBAAAAFHZhbGlkYXRlUHJpY2VBc3NldElkAAAAAwUAAAAGaW52b2tlBQAAAAxwcmljZUFzc2V0SWQFAAAADGFydHdvcmtQcmljZQQAAAAGYW1vdW50CAUAAAANJHQwMjMxNzUyMzI1NQAAAAJfMQQAAAAHYXNzZXRJZAgFAAAADSR0MDIzMTc1MjMyNTUAAAACXzIEAAAADWlzV2hpdGVsaXN0ZWQJAQAAAA5jaGVja1doaXRlbGlzdAAA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", "height": 1371790, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2tuuSoS9eFHCMqh9zhj9k9YpcLknNx7FcWHLSPQSAWfk Next: 7fKG7vgPsYDfKNmWV8BVAzzrUFzJXvZUif2G6jT5JFZY Diff:
OldNewDifferences
231231 else {
232232 let aJ = value(aI.payments[0])
233233 let aK = value(aJ.amount)
234- $Tuple2(aJ, aK)
234+ let aL = if (if (isDefined(aJ.assetId))
235+ then (aJ.assetId == g)
236+ else false)
237+ then aJ.assetId
238+ else throw("Only SIGN token accepted as transaction fee")
239+ let aM = y(("certification_fee_" + toBase58String(g)))
240+ if ((aK != aM))
241+ then throw(("Payment amount should be " + toString(aM)))
242+ else $Tuple2(aK, aL)
235243 }
236244
237245
238-func aL (aI) = {
239- let aM = aH(aI)
240- let aJ = aM._1
241- let aK = aM._2
242- let aN = if (if (isDefined(aJ.assetId))
243- then (aJ.assetId == g)
244- else false)
245- then aJ.assetId
246- else throw("Only SIGN token accepted as transaction fee")
247- let aO = y(("certification_fee_" + toBase58String(g)))
248- if ((aK != aO))
249- then throw(("Payment amount should be " + toString(aO)))
250- else $Tuple2(aK, aN)
251- }
252-
253-
254-func aP (aQ,P) = {
255- let G = getInteger(this, X(aQ, P))
246+func aN (aO,P) = {
247+ let G = getInteger(this, X(aO, P))
256248 if ($isInstanceOf(G, "Int"))
257249 then {
258- let aR = G
259- if ((aR != 0))
250+ let aP = G
251+ if ((aP != 0))
260252 then true
261253 else false
262254 }
264256 }
265257
266258
267-func aS (aI,aT,aU) = {
268- let aV = aH(aI)
269- let aJ = aV._1
270- let aK = aV._2
271- let aN = if (!(isDefined(aJ.assetId)))
259+func aQ (aI,aR,aS) = {
260+ let aJ = value(aI.payments[0])
261+ let aK = value(aJ.amount)
262+ let aL = if (!(isDefined(aJ.assetId)))
272263 then unit
273- else if (if ((size(aT) > 0))
274- then (toBase58String(value(aJ.assetId)) == aT)
264+ else if (if ((size(aR) > 0))
265+ then (toBase58String(value(aJ.assetId)) == aR)
275266 else false)
276267 then aJ.assetId
277268 else throw("Wrong asset id")
278- if (if ((aN == unit))
279- then (aT != "")
269+ if (if ((aL == unit))
270+ then (aR != "")
280271 else false)
281272 then throw("Wrong asset id")
282- else if ((aU != aK))
273+ else if ((aS != aK))
283274 then throw("Payment don't match")
284- else $Tuple2(aK, aN)
275+ else $Tuple2(aK, aL)
285276 }
286277
287278
288-func aW (aN) = if (if (if (if ((aN != toBase58String(g)))
289- then (aN != toBase58String(i))
279+func aT (aL) = if (if (if ((aL != toBase58String(g)))
280+ then (aL != toBase58String(i))
290281 else false)
291- then (aN != "WAVES")
292- else false)
293- then (aN != toBase58String(h))
282+ then (aL != toBase58String(h))
294283 else false)
295284 then throw("Only SIGN, USDN or WAVES accepted")
296285 else true
297286
298287
299-func aX (aN,aY) = {
300- let aZ = if (a)
288+func aU (aL,aV) = {
289+ let aW = if (a)
301290 then 1
302291 else y("waves_min_sell")
303- let ba = 1000000
304- let bb = if (a)
292+ let aX = 1000000
293+ let aY = if (a)
305294 then 1
306295 else (y(("certification_fee_" + toBase58String(g))) * 2)
307- if (if (if (if (if ((aN == toBase58String(h)))
308- then (ba > aY)
296+ if (if (if (if (if ((aL == toBase58String(h)))
297+ then (aX > aV)
309298 else false)
310- then (aY != 0)
299+ then (aV != 0)
311300 else false)
312301 then true
313- else if (if ((aN == toBase58String(g)))
314- then (bb > aY)
302+ else if (if ((aL == toBase58String(g)))
303+ then (aY > aV)
315304 else false)
316- then (aY != 0)
305+ then (aV != 0)
317306 else false)
318307 then true
319- else if (if ((aN == toBase58String(i)))
320- then (aZ > aY)
308+ else if (if ((aL == toBase58String(i)))
309+ then (aW > aV)
321310 else false)
322- then (aY != 0)
311+ then (aV != 0)
323312 else false)
324313 then throw("Wrong minimum sell price")
325314 else true
326315 }
327316
328317
329-func bc (bd) = {
330- let be = x((bd + "_OPEN"))
331- if ((be == ""))
332- then throw("Bid not found")
333- else {
334- let bf = split(be, "_")
335- let bg = parseIntValue(bf[1])
336- let bh = if ((bf[0] == "WAVES"))
337- then unit
338- else fromBase58String(bf[0])
339- if ((0 >= bg))
340- then throw("Wrong amount")
341- else $Tuple2(bg, bh)
342- }
343- }
344-
345-
346-func bi (aI) = if (!(p))
318+@Callable(aI)
319+func addArtwork (F,D,aC,aD,aE,aZ,aF,an,ar,ao,as,ap) = if (!(p))
347320 then throw(q)
348- else $Tuple3(toBase58String(aI.transactionId), toBase58String(aI.caller.bytes), lastBlock.timestamp)
349-
350-
351-func bj (aI,P,bk,bl,bm) = {
352- let bn = bi(aI)
353- let bo = bn._1
354- let N = bn._2
355- let bp = bn._3
356- let bq = z("total_nft_issued")
357- let D = x(W(bk, P))
358- let br = x(Q(bk, P))
359- if ((br == ""))
360- then throw("Art doesn't exist")
361- else {
362- let bs = B(Y(bk, P))
363- let bt = z(X(bk, P))
364- let aU = z(ad(bk, P))
365- let aT = x(ae(bk, P))
366- let bu = z(V(bk, P))
367- let bv = if (if (if ((N == bk))
368- then (bm != "")
369- else false)
370- then (bl != "")
371- else false)
372- then true
373- else false
374- let bd = ((((((("bid_" + P) + "_") + bk) + "_") + bm) + "_") + bl)
375- if (if (if ((0 >= aU))
376- then true
377- else !(bs))
378- then true
379- else (0 >= bu))
380- then throw("Art not for sale")
381- else {
382- let bw = if (bv)
383- then bc(bd)
384- else aS(aI, aT, aU)
385- let aK = bw._1
386- let aN = bw._2
387- let bx = A(bk)
388- let by = if ((bx > height))
389- then 0
390- else if ((aT == toBase58String(g)))
391- then l
392- else m
393- let bz = fraction(aK, by, 100)
394- let bA = (aK - bz)
395- if ((bt == bu))
396- then throw("Art sold out")
397- else {
398- let bB = (bt + 1)
399- let bC = ((((((((((("Creator: " + bk) + ",
400- ArtID: ") + P) + ",
401- SignID: ") + D) + ",
402- Artwork name: ") + br) + ",
403- Issue: ") + toString(bB)) + "/") + toString(bu))
404- let bD = Issue(("SA_" + toString((bq + 1))), bC, 1, 0, false)
405- let bE = calculateAssetId(bD)
406- let bF = if ((bB == bu))
407- then false
408- else true
409- let bG = if (if (if ((N == bk))
410- then (bm != "")
411- else false)
412- then (bl != "")
413- else false)
414- then addressFromStringValue(bm)
415- else aI.caller
416- let bH = [IntegerEntry(X(bk, P), bB), StringEntry(("nft_" + toBase58String(bE)), ((((((("art_sold_" + toString(bB)) + "_of_") + toString(bu)) + "_") + P) + "_") + bk)), IntegerEntry("total_nft_issued", (bq + 1)), BooleanEntry(Y(bk, P), bF), bD, ScriptTransfer(Address(fromBase58String(bk)), bA, aN), ScriptTransfer(Address(fromBase58String(d)), bz, aN), ScriptTransfer(bG, 1, bE)]
417- let bI = if (!(isDefined(aN)))
418- then "WAVES"
419- else toBase58String(value(aN))
420- let bJ = x((bd + "_OPEN"))
421- let bK = DeleteEntry((bd + "_OPEN"))
422- let bL = StringEntry((bd + "_CLOSED"), ((bJ + "_") + toString(bp)))
423- let bM = if (!(bv))
424- then ((((((((((N + "_") + toString(bp)) + "_") + bo) + "_") + toString(aU)) + "_") + aT) + "_") + toBase58String(bE))
425- else ((((((((((toString(bG) + "_") + toString(bp)) + "_") + bo) + "_") + toString(aK)) + "_") + bI) + "_") + toBase58String(bE))
426- let bN = StringEntry(((((((("art_sold_" + toString(bB)) + "_of_") + toString(bu)) + "_") + P) + "_") + bk), bM)
427- if (bv)
428- then [bN, bL, bK] :: bH
429- else bN :: bH
430- }
431- }
432- }
433- }
434-
435-
436-@Callable(aI)
437-func addArtwork (F,D,aC,aD,aE,bO,aF,an,ar,ao,as,ap) = {
438- let bP = bi(aI)
439- let P = bP._1
440- let N = bP._2
441- let bp = bP._3
442- if (!(K(F)))
443- then throw("Hash should be 64 characters maximum")
444- else {
445- let bQ = ay(ap, as)
446- let aA = bQ._1
447- let aB = bQ._2
448- let bR = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
449- if ((bR != ""))
450- then throw("Something went wrong!")
451- else {
452- let bS = aL(aI)
453- let aK = bS._1
454- let aN = bS._2
455- if (!(isDefined(aK)))
456- then throw("Something went wrong")
457- else {
458- let bT = x(al(F, N))
459- if ((bT != ""))
460- then throw("You already added it")
461- else {
462- let bU = x(ai(F))
463- if ((bU != ""))
464- then throw("Hash already registered")
465- else {
466- let bV = C(D, N, F)
467- if (!(bV))
468- then throw("Sign Certificate not found for this address.")
469- else [StringEntry(ai(F), N), StringEntry(al(F, N), P), IntegerEntry(O(N, P), bp), StringEntry(Q(N, P), aC), StringEntry(R(N, P), aD), StringEntry(S(N, P), an), StringEntry(U(N, P), ao), StringEntry(T(N, P), ar), StringEntry(Z(N, P), aB), StringEntry(aa(N, P), aA), StringEntry(ac(N, P), bO), StringEntry(ab(N, P), aE), IntegerEntry(V(N, P), aF), 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)), aK, aN)]
470- }
471- }
472- }
473- }
474- }
475- }
321+ else {
322+ let P = toBase58String(aI.transactionId)
323+ let ba = lastBlock.timestamp
324+ let N = toBase58String(aI.caller.bytes)
325+ if (!(K(F)))
326+ then throw("Hash should be 64 characters maximum")
327+ else {
328+ let bb = ay(ap, as)
329+ let aA = bb._1
330+ let aB = bb._2
331+ let bc = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
332+ if ((bc != ""))
333+ then throw("Something went wrong!")
334+ else {
335+ let bd = aH(aI)
336+ let aK = bd._1
337+ let aL = bd._2
338+ if (!(isDefined(aK)))
339+ then throw("Something went wrong")
340+ else {
341+ let be = x(al(F, N))
342+ if ((be != ""))
343+ then throw("You already added it")
344+ else {
345+ let bf = x(ai(F))
346+ if ((bf != ""))
347+ then throw("Hash already registered")
348+ else {
349+ let bg = C(D, N, F)
350+ if (!(bg))
351+ then throw("Sign Certificate not found for this address.")
352+ else [StringEntry(ai(F), N), StringEntry(al(F, N), P), IntegerEntry(O(N, P), ba), StringEntry(Q(N, P), aC), StringEntry(R(N, P), aD), StringEntry(S(N, P), an), StringEntry(U(N, P), ao), StringEntry(T(N, P), ar), StringEntry(Z(N, P), aB), StringEntry(aa(N, P), aA), StringEntry(ac(N, P), aZ), StringEntry(ab(N, P), aE), IntegerEntry(V(N, P), aF), 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)), aK, aL)]
353+ }
354+ }
355+ }
356+ }
357+ }
358+ }
476359
477360
478361
479362 @Callable(aI)
480-func updateArtwork (ah,aC,aD,aE,bO,aF,an,ar,ao,as,ap) = if (!(p))
363+func updateArtwork (ah,aC,aD,aE,aZ,aF,an,ar,ao,as,ap) = if (!(p))
481364 then throw(q)
482365 else {
366+ let bh = toBase58String(aI.transactionId)
483367 let N = toBase58String(aI.caller.bytes)
484- let bW = ay(ap, as)
485- let aA = bW._1
486- let aB = bW._2
487- let bR = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
488- if ((bR != ""))
368+ let bi = ay(ap, as)
369+ let aA = bi._1
370+ let aB = bi._2
371+ let bc = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
372+ if ((bc != ""))
489373 then throw("Something went wrong!")
490374 else {
491- let bT = x(Q(N, ah))
492- if ((bT == ""))
375+ let be = x(Q(N, ah))
376+ if ((be == ""))
493377 then throw("Entry not found")
494378 else {
495- let bX = x(af(N, ah))
496- if ((bX == "ILLEGAL"))
379+ let bj = x(af(N, ah))
380+ if ((bj == "ILLEGAL"))
497381 then throw("Cannot update ILLEGAL artwork")
498- else if (!(aP(N, ah)))
499- then [StringEntry(Q(N, ah), aC), StringEntry(R(N, ah), aD), StringEntry(S(N, ah), an), StringEntry(U(N, ah), ao), StringEntry(T(N, ah), ar), StringEntry(aa(N, ah), aA), StringEntry(Z(N, ah), aB), IntegerEntry(V(N, ah), aF), StringEntry(ab(N, ah), aE), StringEntry(ac(N, ah), bO)]
382+ else if (!(aN(N, ah)))
383+ then [StringEntry(Q(N, ah), aC), StringEntry(R(N, ah), aD), StringEntry(S(N, ah), an), StringEntry(U(N, ah), ao), StringEntry(T(N, ah), ar), StringEntry(aa(N, ah), aA), StringEntry(Z(N, ah), aB), IntegerEntry(V(N, ah), aF), StringEntry(ab(N, ah), aE), StringEntry(ac(N, ah), aZ)]
500384 else throw("Already minted")
501385 }
502386 }
505389
506390
507391 @Callable(aI)
508-func flagArtwork (P,bY,bX) = {
509- let bZ = bi(aI)
510- let bo = bZ._1
511- let N = bZ._2
392+func flagArtwork (P,bk,bj) = {
393+ let N = toString(addressFromPublicKey(aI.callerPublicKey))
394+ let bl = toBase58String(aI.transactionId)
512395 if (containsElement([j, k, toString(this)], N))
513- then if ((bX == "CONSENT"))
514- then [StringEntry(af(bY, P), bX)]
515- else if ((bX == ""))
516- then [StringEntry(af(bY, P), bX)]
517- else if ((bX == "ILLEGAL"))
518- then [StringEntry(af(bY, P), bX), StringEntry(Q(bY, P), "ILLEGAL CONTENT"), StringEntry(R(bY, P), "ILLEGAL CONTENT"), StringEntry(S(bY, P), ""), StringEntry(U(bY, P), ""), StringEntry(aa(bY, P), "")]
519- else throw(("Unknow status " + bX))
396+ then if ((bj == "CONSENT"))
397+ then [StringEntry(af(bk, P), bj)]
398+ else if ((bj == ""))
399+ then [StringEntry(af(bk, P), bj)]
400+ else if ((bj == "CHANGE_REQUIRED"))
401+ then [StringEntry(af(bk, P), bj)]
402+ else if ((bj == "ILLEGAL"))
403+ then [StringEntry(af(bk, P), bj), StringEntry(Q(bk, P), "ILLEGAL CONTENT"), StringEntry(R(bk, P), "ILLEGAL CONTENT"), StringEntry(S(bk, P), ""), StringEntry(U(bk, P), ""), StringEntry(aa(bk, P), "")]
404+ else throw(("Unknow status " + bj))
520405 else throw("You are not allowed")
521406 }
522407
523408
524409
525410 @Callable(aI)
526-func deleteArtwork (P,bY) = {
527- let ca = bi(aI)
528- let bo = ca._1
529- let N = ca._2
530- let aQ = if (containsElement([j, k, toString(this)], N))
531- then bY
411+func deleteArtwork (P,bk) = {
412+ let N = toString(addressFromPublicKey(aI.callerPublicKey))
413+ let bl = toBase58String(aI.transactionId)
414+ let aO = if (containsElement([j, k, toString(this)], N))
415+ then bk
532416 else N
533- let bT = valueOrErrorMessage(x(Q(aQ, P)), "No art matching for this address")
534- if ((bT == ""))
417+ let be = x(Q(aO, P))
418+ if ((be == ""))
535419 then throw("No art matching for this address")
536420 else {
537- let F = x(ag(aQ, P))
421+ let F = x(ag(aO, P))
538422 if ((F == ""))
539423 then throw("No art hash matching for this address")
540424 else {
541- let D = x(W(aQ, P))
425+ let D = x(W(aO, P))
542426 if ((D == ""))
543427 then throw("No SIGN ID matching")
544428 else {
545- let cb = [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(bY, P)), DeleteEntry(ad(bY, P)), DeleteEntry(ae(bY, P)), DeleteEntry(ai(F)), DeleteEntry(aj(aQ, D)), DeleteEntry(al(F, aQ))]
546- if (!(aP(aQ, P)))
429+ let bm = [DeleteEntry(O(aO, P)), DeleteEntry(Q(aO, P)), DeleteEntry(R(aO, P)), DeleteEntry(S(aO, P)), DeleteEntry(U(aO, P)), DeleteEntry(T(aO, P)), DeleteEntry(Z(aO, P)), DeleteEntry(aa(aO, P)), DeleteEntry(ac(aO, P)), DeleteEntry(ab(aO, P)), DeleteEntry(V(aO, P)), DeleteEntry(W(aO, P)), DeleteEntry(X(aO, P)), DeleteEntry(Y(aO, P)), DeleteEntry(af(bk, P)), DeleteEntry(ad(bk, P)), DeleteEntry(ae(bk, P)), DeleteEntry(ai(F)), DeleteEntry(aj(aO, D)), DeleteEntry(al(F, aO))]
430+ if (!(aN(aO, P)))
547431 then if (!(p))
548432 then throw(q)
549- else cb
433+ else bm
550434 else if (containsElement([j, toString(this)], N))
551- then cb
435+ then bm
552436 else throw("Art already minted, you cannot delete it")
553437 }
554438 }
558442
559443
560444 @Callable(aI)
561-func sellArtwork (P,aY,cc,aN) = {
562- let cd = bi(aI)
563- let bo = cd._1
564- let N = cd._2
565- let br = x(Q(N, P))
566- if ((br == ""))
567- then throw("This art doesn't match your account")
568- else {
569- let ce = x(U(N, P))
570- if ((size(split(ce, "/")[0]) != 59))
571- then throw("You cannot sell art with no export file")
572- else if (!(aW(aN)))
573- then throw("Something went wrong!")
574- else if (!(aX(aN, aY)))
575- then throw("Something went wrong!")
576- else {
577- let aG = aw(N)
578- if ((aG != ""))
579- then throw(aG)
580- else {
581- let bt = z(X(N, P))
582- let bu = z(V(N, P))
583- if ((cc > 10))
584- then throw("10 editions max per artwork")
585- else if (if ((bt != 0))
586- then (bt == bu)
587- else false)
588- then throw("Max edition reached.")
589- else if (if ((bt > 0))
590- then (bu != cc)
591- else false)
592- then throw("Cannot change maximum issuable anymore")
593- else {
594- let bF = if (if ((aY > 0))
595- then (cc > 0)
445+func sellArtwork (P,aV,bn,aL) = if (!(p))
446+ then throw(q)
447+ else {
448+ let bl = toBase58String(aI.transactionId)
449+ let N = toBase58String(aI.caller.bytes)
450+ let bo = lastBlock.timestamp
451+ let bp = x(Q(N, P))
452+ if ((bp == ""))
453+ then throw("This art doesn't match match your account")
454+ else {
455+ let bq = x(U(N, P))
456+ if ((size(split(bq, "/")[0]) != 59))
457+ then throw("You cannot sell art with no export file")
458+ else {
459+ let br = x(T(N, P))
460+ if ((size(br) != 64))
461+ then throw("You cannot sell art with no export hash")
462+ else if (!(aT(aL)))
463+ then throw("Something went wrong!")
464+ else if (!(aU(aL, aV)))
465+ then throw("Something went wrong!")
466+ else {
467+ let aG = aw(N)
468+ if ((aG != ""))
469+ then throw(aG)
470+ else {
471+ let bs = z(X(N, P))
472+ let bt = z(V(N, P))
473+ if ((bn > 10))
474+ then throw("10 editions max per artwork")
475+ else if (if ((bs != 0))
476+ then (bs == bt)
596477 else false)
597- then true
598- else false
599-[BooleanEntry(Y(N, P), bF), IntegerEntry(ad(N, P), aY), IntegerEntry(V(N, P), cc), StringEntry(ae(N, P), aN)]
600- }
601- }
602- }
603- }
604- }
478+ then throw("Max edition reached.")
479+ else if (if ((bs > 0))
480+ then (bt != bn)
481+ else false)
482+ then throw("Cannot change maximum issuable anymore")
483+ else {
484+ let bu = if (if ((aV > 0))
485+ then (bn > 0)
486+ else false)
487+ then true
488+ else false
489+[BooleanEntry(Y(N, P), bu), IntegerEntry(ad(N, P), aV), IntegerEntry(V(N, P), bn), StringEntry(ae(N, P), aL)]
490+ }
491+ }
492+ }
493+ }
494+ }
495+ }
605496
606497
607498
608499 @Callable(aI)
609-func buyArtwork (P,bk) = bj(aI, P, bk, "", "")
500+func buyArtwork (P,bv) = if (!(p))
501+ then throw(q)
502+ else {
503+ let bl = toBase58String(aI.transactionId)
504+ let N = toBase58String(aI.caller.bytes)
505+ let bw = z("total_nft_issued")
506+ let D = x(W(bv, P))
507+ let bp = x(Q(bv, P))
508+ if ((bp == ""))
509+ then throw("Art doesn't exist")
510+ else {
511+ let bx = x(S(bv, P))
512+ let bq = x(U(bv, P))
513+ let br = x(T(bv, P))
514+ let aA = x(aa(bv, P))
515+ let aB = x(Z(bv, P))
516+ let aD = take(x(R(bv, P)), 50)
517+ let by = B(Y(bv, P))
518+ let bs = z(X(bv, P))
519+ let aS = z(ad(bv, P))
520+ let aR = x(ae(bv, P))
521+ let bz = x(ag(bv, P))
522+ let bt = z(V(bv, P))
523+ if (if (if ((0 >= aS))
524+ then true
525+ else !(by))
526+ then true
527+ else (0 >= bt))
528+ then throw("Art not for sale")
529+ else {
530+ let bA = aQ(aI, aR, aS)
531+ let aK = bA._1
532+ let aL = bA._2
533+ let bB = A(bv)
534+ let bC = if ((bB > height))
535+ then 0
536+ else if ((aR == toBase58String(g)))
537+ then l
538+ else m
539+ let bD = fraction(aK, bC, 100)
540+ let bE = (aK - bD)
541+ if ((bs == bt))
542+ then throw("Art sold out")
543+ else {
544+ let bF = (bs + 1)
545+ let bG = lastBlock.timestamp
546+ let bH = ((((((((((((((((((((((((((("Creator: " + bv) + ",
547+ ArtID: ") + P) + ",
548+ SignID: ") + D) + ",
549+ Artwork name: ") + bp) + ",
550+ Artwork description: ") + aD) + ",
551+ Issue: ") + toString(bF)) + "/") + toString(bt)) + ",
552+ Max issuable: ") + toString(bt)) + ",
553+ Source hash: ") + bz) + ",
554+ Display cid: ") + bx) + ",
555+ Export cid: ") + bq) + ",
556+ Export hash: ") + br) + ",
557+ Licence cid: ") + aA) + ",
558+ Licence hash: ") + aB)
559+ let bI = Issue(("SA_" + toString((bw + 1))), bH, 1, 0, false)
560+ let bJ = calculateAssetId(bI)
561+ let bu = if ((bF == bt))
562+ then false
563+ else true
564+[IntegerEntry(X(bv, P), bF), StringEntry(("nft_" + toBase58String(bJ)), ((((((("art_sold_" + toString(bF)) + "_of_") + toString(bt)) + "_") + P) + "_") + bv)), StringEntry(((((((("art_sold_" + toString(bF)) + "_of_") + toString(bt)) + "_") + P) + "_") + bv), ((((((((((N + "_") + toString(bG)) + "_") + bl) + "_") + toString(aS)) + "_") + aR) + "_") + toBase58String(bJ))), IntegerEntry("total_nft_issued", (bw + 1)), BooleanEntry(Y(bv, P), bu), bI, ScriptTransfer(Address(fromBase58String(bv)), bE, aL), ScriptTransfer(Address(fromBase58String(d)), bD, aL), ScriptTransfer(aI.caller, 1, bJ)]
565+ }
566+ }
567+ }
568+ }
610569
611570
612571
613-@Callable(aI)
614-func setBid (P,bk) = {
615- let cf = bi(aI)
616- let bo = cf._1
617- let N = cf._2
618- let bp = cf._3
619- let cg = aH(aI)
620- let aJ = cg._1
621- let aK = cg._2
622- let aN = if (!(isDefined(aJ.assetId)))
623- then "WAVES"
624- else toBase58String(value(aJ.assetId))
625- if (!(aW(aN)))
626- then throw("Something went wrong!")
627- else if (!(aX(aN, aK)))
628- then throw("Something went wrong!")
629- else {
630- let bt = z(X(bk, P))
631- let bu = z(V(bk, P))
632- if ((bt >= bu))
633- then throw("Sold out, you cannot bid")
634- else [StringEntry((((((((("bid_" + P) + "_") + bk) + "_") + N) + "_") + bo) + "_OPEN"), ((((aN + "_") + toString(aK)) + "_") + toString(bp)))]
635- }
636- }
637-
638-
639-
640-@Callable(aI)
641-func acceptBid (P,bk,bl,bm) = {
642- let N = toBase58String(aI.caller.bytes)
643- if ((N != bk))
644- then throw("You cannot do this action")
645- else bj(aI, P, bk, bl, bm)
646- }
647-
648-
649-
650-@Callable(aI)
651-func cancelBid (P,bk,bl,bm) = {
652- let ch = bi(aI)
653- let bo = ch._1
654- let N = ch._2
655- let bp = ch._3
656- if (if ((N != bm))
657- then (N != bk)
658- else false)
659- then throw("You cannot do this action")
660- else {
661- let bd = ((((((("bid_" + P) + "_") + bk) + "_") + bm) + "_") + bl)
662- let be = x((bd + "_OPEN"))
663- if ((be == ""))
664- then throw("Bid not found")
665- else {
666- let bf = split(be, "_")
667- let aN = if ((bf[0] == "WAVES"))
668- then unit
669- else fromBase58String(bf[0])
670- let ci = if ((N == bm))
671- then "CANCELED"
672- else "REJECTED"
673-[DeleteEntry((bd + "_OPEN")), StringEntry(((bd + "_") + ci), ((be + "_") + toString(bp))), ScriptTransfer(Address(fromBase58String(bm)), parseIntValue(bf[1]), aN)]
674- }
675- }
676- }
677-
678-
679-
680-@Callable(aI)
681-func deleteEntry (cj) = {
682- let N = toString(addressFromPublicKey(aI.callerPublicKey))
572+@Callable(bK)
573+func deleteEntry (bL) = {
574+ let N = toString(addressFromPublicKey(bK.callerPublicKey))
683575 if ((N == j))
684- then [DeleteEntry(cj)]
576+ then [DeleteEntry(bL)]
685577 else throw("no")
686578 }
687579
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"))
1414 else value(addressFromString("3MwDZagoYEiNfQLc31cGpYoaE54MGMwoFrZ"))
1515
1616 let f = value(addressFromString("3N6BaV1dCB4zg43goNNHaCtvR13BcyJ5Gsq"))
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
3232 let n = "bafybeifuyo4pqu54ismqgtb6e4h6kkvgx7zg4u3zibh2r7y6mb64i7bzza/licence.pdf"
3333
3434 let o = "a87758c354e30a9e78fb84fa3a0010a5090ab20df0be11ad45b5720cc187e639"
3535
3636 let p = valueOrElse(getBoolean(e, "conf_dapp_is_running"), true)
3737
3838 let q = valueOrElse(getString(e, "conf_maintenance_msg"), "")
3939
4040 let r = "SUSPENDED"
4141
4242 let s = "REMOVED"
4343
4444 let t = "UNREGISTERED"
4545
4646 let u = "ALLOWED"
4747
4848 func v (w) = valueOrElse(getString(e, w), "")
4949
5050
5151 func x (w) = valueOrElse(getString(this, w), "")
5252
5353
5454 func y (w) = valueOrErrorMessage(getInteger(b, w), "Integer undefine or 0 in oracle")
5555
5656
5757 func z (w) = valueOrElse(getInteger(this, w), 0)
5858
5959
6060 func A (w) = valueOrElse(getInteger(f, w), 0)
6161
6262
6363 func B (w) = valueOrElse(getBoolean(this, w), false)
6464
6565
6666 func C (D,E,F) = {
6767 let G = getString(c, ((("data_fc_" + D) + "_") + E))
6868 if ($isInstanceOf(G, "String"))
6969 then {
7070 let H = G
7171 if (contains(H, F))
7272 then true
7373 else false
7474 }
7575 else false
7676 }
7777
7878
7979 func I (J) = if (contains(J, "/"))
8080 then if (if ((76 > size(J)))
8181 then (size(split(J, "/")[0]) == 59)
8282 else false)
8383 then (16 > size(split(J, "/")[1]))
8484 else false
8585 else false
8686
8787
8888 func K (L) = (size(L) == 64)
8989
9090
9191 func M (N) = ("user_status_" + N)
9292
9393
9494 func O (N,P) = ((("art_date_" + P) + "_") + N)
9595
9696
9797 func Q (N,P) = ((("art_name_" + P) + "_") + N)
9898
9999
100100 func R (N,P) = ((("art_desc_" + P) + "_") + N)
101101
102102
103103 func S (N,P) = ((("art_display_cid_" + P) + "_") + N)
104104
105105
106106 func T (N,P) = ((("art_export_hash_" + P) + "_") + N)
107107
108108
109109 func U (N,P) = ((("art_export_cid_" + P) + "_") + N)
110110
111111
112112 func V (N,P) = ((("art_maxmint_" + P) + "_") + N)
113113
114114
115115 func W (N,P) = ((("art_signid_" + P) + "_") + N)
116116
117117
118118 func X (N,P) = ((("art_issued_" + P) + "_") + N)
119119
120120
121121 func Y (N,P) = ((("art_onsale_" + P) + "_") + N)
122122
123123
124124 func Z (N,P) = ((("art_licence_hash_" + P) + "_") + N)
125125
126126
127127 func aa (N,P) = ((("art_licence_cid_" + P) + "_") + N)
128128
129129
130130 func ab (N,P) = ((("art_tags_" + P) + "_") + N)
131131
132132
133133 func ac (N,P) = ((("art_type_" + P) + "_") + N)
134134
135135
136136 func ad (N,P) = ((("art_price_" + P) + "_") + N)
137137
138138
139139 func ae (N,P) = ((("art_assetAccepted_" + P) + "_") + N)
140140
141141
142142 func af (N,P) = ((("art_flag_" + P) + "_") + N)
143143
144144
145145 func ag (N,ah) = ((("get_hashbytxidaddr_" + ah) + "_") + N)
146146
147147
148148 func ai (F) = ("get_owner_by_hash_" + F)
149149
150150
151151 func aj (N,ak) = ((("get_artidbysignid_" + ak) + "_") + N)
152152
153153
154154 func al (F,N) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((F + N)))))
155155
156156
157157 func am (an,ao,ap) = if (!(I(an)))
158158 then throw("Wrong Display CID")
159159 else if (!(I(ao)))
160160 then throw("Wrong Export CID")
161161 else if (if ((ap != ""))
162162 then !(I(ap))
163163 else false)
164164 then throw("Wrong Licence CID")
165165 else true
166166
167167
168168 func aq (ar,as) = if (!(K(ar)))
169169 then throw("Export Hash 64 char. max")
170170 else if (!(K(as)))
171171 then throw("Licence Hash 64 char. max")
172172 else true
173173
174174
175175 func at (au,av) = if ((size(au) == 0))
176176 then throw("Field cannot be is empty")
177177 else if ((size(au) > av))
178178 then throw((au + " is too long"))
179179 else true
180180
181181
182182 func aw (N) = {
183183 let ax = valueOrElse(getString(e, M(N)), t)
184184 if (if ((ax == t))
185185 then true
186186 else (ax == u))
187187 then "Register this account first with \"Account\" tab"
188188 else if ((ax == r))
189189 then "Account suspended"
190190 else if ((ax == s))
191191 then "Account removed"
192192 else ""
193193 }
194194
195195
196196 func ay (ap,as) = {
197197 let J = if ((size(ap) == 0))
198198 then n
199199 else ap
200200 let L = if ((size(as) == 0))
201201 then o
202202 else as
203203 $Tuple2(J, L)
204204 }
205205
206206
207207 func az (N,an,ao,aA,ar,aB,aC,aD,aE,aF) = {
208208 let aG = aw(N)
209209 if ((aG != ""))
210210 then throw(aG)
211211 else if ((size(an) == 0))
212212 then throw("Display CID cannot be empty")
213213 else if (!(am(an, ao, aA)))
214214 then throw("Problem with CID")
215215 else if (!(aq(ar, aB)))
216216 then throw("Problem with Hashes")
217217 else if (!(at(aC, 100)))
218218 then throw("100 Char. max name")
219219 else if (!(at(aD, 1000)))
220220 then throw("1000 Char. max description")
221221 else if ((size(split(aE, ",")) > 5))
222222 then throw("5 tags max.")
223223 else if ((aF > 10))
224224 then throw("10 editions max per artwork")
225225 else ""
226226 }
227227
228228
229229 func aH (aI) = if ((size(aI.payments) == 0))
230230 then throw("No payment attached")
231231 else {
232232 let aJ = value(aI.payments[0])
233233 let aK = value(aJ.amount)
234- $Tuple2(aJ, aK)
234+ let aL = if (if (isDefined(aJ.assetId))
235+ then (aJ.assetId == g)
236+ else false)
237+ then aJ.assetId
238+ else throw("Only SIGN token accepted as transaction fee")
239+ let aM = y(("certification_fee_" + toBase58String(g)))
240+ if ((aK != aM))
241+ then throw(("Payment amount should be " + toString(aM)))
242+ else $Tuple2(aK, aL)
235243 }
236244
237245
238-func aL (aI) = {
239- let aM = aH(aI)
240- let aJ = aM._1
241- let aK = aM._2
242- let aN = if (if (isDefined(aJ.assetId))
243- then (aJ.assetId == g)
244- else false)
245- then aJ.assetId
246- else throw("Only SIGN token accepted as transaction fee")
247- let aO = y(("certification_fee_" + toBase58String(g)))
248- if ((aK != aO))
249- then throw(("Payment amount should be " + toString(aO)))
250- else $Tuple2(aK, aN)
251- }
252-
253-
254-func aP (aQ,P) = {
255- let G = getInteger(this, X(aQ, P))
246+func aN (aO,P) = {
247+ let G = getInteger(this, X(aO, P))
256248 if ($isInstanceOf(G, "Int"))
257249 then {
258- let aR = G
259- if ((aR != 0))
250+ let aP = G
251+ if ((aP != 0))
260252 then true
261253 else false
262254 }
263255 else false
264256 }
265257
266258
267-func aS (aI,aT,aU) = {
268- let aV = aH(aI)
269- let aJ = aV._1
270- let aK = aV._2
271- let aN = if (!(isDefined(aJ.assetId)))
259+func aQ (aI,aR,aS) = {
260+ let aJ = value(aI.payments[0])
261+ let aK = value(aJ.amount)
262+ let aL = if (!(isDefined(aJ.assetId)))
272263 then unit
273- else if (if ((size(aT) > 0))
274- then (toBase58String(value(aJ.assetId)) == aT)
264+ else if (if ((size(aR) > 0))
265+ then (toBase58String(value(aJ.assetId)) == aR)
275266 else false)
276267 then aJ.assetId
277268 else throw("Wrong asset id")
278- if (if ((aN == unit))
279- then (aT != "")
269+ if (if ((aL == unit))
270+ then (aR != "")
280271 else false)
281272 then throw("Wrong asset id")
282- else if ((aU != aK))
273+ else if ((aS != aK))
283274 then throw("Payment don't match")
284- else $Tuple2(aK, aN)
275+ else $Tuple2(aK, aL)
285276 }
286277
287278
288-func aW (aN) = if (if (if (if ((aN != toBase58String(g)))
289- then (aN != toBase58String(i))
279+func aT (aL) = if (if (if ((aL != toBase58String(g)))
280+ then (aL != toBase58String(i))
290281 else false)
291- then (aN != "WAVES")
292- else false)
293- then (aN != toBase58String(h))
282+ then (aL != toBase58String(h))
294283 else false)
295284 then throw("Only SIGN, USDN or WAVES accepted")
296285 else true
297286
298287
299-func aX (aN,aY) = {
300- let aZ = if (a)
288+func aU (aL,aV) = {
289+ let aW = if (a)
301290 then 1
302291 else y("waves_min_sell")
303- let ba = 1000000
304- let bb = if (a)
292+ let aX = 1000000
293+ let aY = if (a)
305294 then 1
306295 else (y(("certification_fee_" + toBase58String(g))) * 2)
307- if (if (if (if (if ((aN == toBase58String(h)))
308- then (ba > aY)
296+ if (if (if (if (if ((aL == toBase58String(h)))
297+ then (aX > aV)
309298 else false)
310- then (aY != 0)
299+ then (aV != 0)
311300 else false)
312301 then true
313- else if (if ((aN == toBase58String(g)))
314- then (bb > aY)
302+ else if (if ((aL == toBase58String(g)))
303+ then (aY > aV)
315304 else false)
316- then (aY != 0)
305+ then (aV != 0)
317306 else false)
318307 then true
319- else if (if ((aN == toBase58String(i)))
320- then (aZ > aY)
308+ else if (if ((aL == toBase58String(i)))
309+ then (aW > aV)
321310 else false)
322- then (aY != 0)
311+ then (aV != 0)
323312 else false)
324313 then throw("Wrong minimum sell price")
325314 else true
326315 }
327316
328317
329-func bc (bd) = {
330- let be = x((bd + "_OPEN"))
331- if ((be == ""))
332- then throw("Bid not found")
333- else {
334- let bf = split(be, "_")
335- let bg = parseIntValue(bf[1])
336- let bh = if ((bf[0] == "WAVES"))
337- then unit
338- else fromBase58String(bf[0])
339- if ((0 >= bg))
340- then throw("Wrong amount")
341- else $Tuple2(bg, bh)
342- }
343- }
344-
345-
346-func bi (aI) = if (!(p))
318+@Callable(aI)
319+func addArtwork (F,D,aC,aD,aE,aZ,aF,an,ar,ao,as,ap) = if (!(p))
347320 then throw(q)
348- else $Tuple3(toBase58String(aI.transactionId), toBase58String(aI.caller.bytes), lastBlock.timestamp)
349-
350-
351-func bj (aI,P,bk,bl,bm) = {
352- let bn = bi(aI)
353- let bo = bn._1
354- let N = bn._2
355- let bp = bn._3
356- let bq = z("total_nft_issued")
357- let D = x(W(bk, P))
358- let br = x(Q(bk, P))
359- if ((br == ""))
360- then throw("Art doesn't exist")
361- else {
362- let bs = B(Y(bk, P))
363- let bt = z(X(bk, P))
364- let aU = z(ad(bk, P))
365- let aT = x(ae(bk, P))
366- let bu = z(V(bk, P))
367- let bv = if (if (if ((N == bk))
368- then (bm != "")
369- else false)
370- then (bl != "")
371- else false)
372- then true
373- else false
374- let bd = ((((((("bid_" + P) + "_") + bk) + "_") + bm) + "_") + bl)
375- if (if (if ((0 >= aU))
376- then true
377- else !(bs))
378- then true
379- else (0 >= bu))
380- then throw("Art not for sale")
381- else {
382- let bw = if (bv)
383- then bc(bd)
384- else aS(aI, aT, aU)
385- let aK = bw._1
386- let aN = bw._2
387- let bx = A(bk)
388- let by = if ((bx > height))
389- then 0
390- else if ((aT == toBase58String(g)))
391- then l
392- else m
393- let bz = fraction(aK, by, 100)
394- let bA = (aK - bz)
395- if ((bt == bu))
396- then throw("Art sold out")
397- else {
398- let bB = (bt + 1)
399- let bC = ((((((((((("Creator: " + bk) + ",
400- ArtID: ") + P) + ",
401- SignID: ") + D) + ",
402- Artwork name: ") + br) + ",
403- Issue: ") + toString(bB)) + "/") + toString(bu))
404- let bD = Issue(("SA_" + toString((bq + 1))), bC, 1, 0, false)
405- let bE = calculateAssetId(bD)
406- let bF = if ((bB == bu))
407- then false
408- else true
409- let bG = if (if (if ((N == bk))
410- then (bm != "")
411- else false)
412- then (bl != "")
413- else false)
414- then addressFromStringValue(bm)
415- else aI.caller
416- let bH = [IntegerEntry(X(bk, P), bB), StringEntry(("nft_" + toBase58String(bE)), ((((((("art_sold_" + toString(bB)) + "_of_") + toString(bu)) + "_") + P) + "_") + bk)), IntegerEntry("total_nft_issued", (bq + 1)), BooleanEntry(Y(bk, P), bF), bD, ScriptTransfer(Address(fromBase58String(bk)), bA, aN), ScriptTransfer(Address(fromBase58String(d)), bz, aN), ScriptTransfer(bG, 1, bE)]
417- let bI = if (!(isDefined(aN)))
418- then "WAVES"
419- else toBase58String(value(aN))
420- let bJ = x((bd + "_OPEN"))
421- let bK = DeleteEntry((bd + "_OPEN"))
422- let bL = StringEntry((bd + "_CLOSED"), ((bJ + "_") + toString(bp)))
423- let bM = if (!(bv))
424- then ((((((((((N + "_") + toString(bp)) + "_") + bo) + "_") + toString(aU)) + "_") + aT) + "_") + toBase58String(bE))
425- else ((((((((((toString(bG) + "_") + toString(bp)) + "_") + bo) + "_") + toString(aK)) + "_") + bI) + "_") + toBase58String(bE))
426- let bN = StringEntry(((((((("art_sold_" + toString(bB)) + "_of_") + toString(bu)) + "_") + P) + "_") + bk), bM)
427- if (bv)
428- then [bN, bL, bK] :: bH
429- else bN :: bH
430- }
431- }
432- }
433- }
434-
435-
436-@Callable(aI)
437-func addArtwork (F,D,aC,aD,aE,bO,aF,an,ar,ao,as,ap) = {
438- let bP = bi(aI)
439- let P = bP._1
440- let N = bP._2
441- let bp = bP._3
442- if (!(K(F)))
443- then throw("Hash should be 64 characters maximum")
444- else {
445- let bQ = ay(ap, as)
446- let aA = bQ._1
447- let aB = bQ._2
448- let bR = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
449- if ((bR != ""))
450- then throw("Something went wrong!")
451- else {
452- let bS = aL(aI)
453- let aK = bS._1
454- let aN = bS._2
455- if (!(isDefined(aK)))
456- then throw("Something went wrong")
457- else {
458- let bT = x(al(F, N))
459- if ((bT != ""))
460- then throw("You already added it")
461- else {
462- let bU = x(ai(F))
463- if ((bU != ""))
464- then throw("Hash already registered")
465- else {
466- let bV = C(D, N, F)
467- if (!(bV))
468- then throw("Sign Certificate not found for this address.")
469- else [StringEntry(ai(F), N), StringEntry(al(F, N), P), IntegerEntry(O(N, P), bp), StringEntry(Q(N, P), aC), StringEntry(R(N, P), aD), StringEntry(S(N, P), an), StringEntry(U(N, P), ao), StringEntry(T(N, P), ar), StringEntry(Z(N, P), aB), StringEntry(aa(N, P), aA), StringEntry(ac(N, P), bO), StringEntry(ab(N, P), aE), IntegerEntry(V(N, P), aF), 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)), aK, aN)]
470- }
471- }
472- }
473- }
474- }
475- }
321+ else {
322+ let P = toBase58String(aI.transactionId)
323+ let ba = lastBlock.timestamp
324+ let N = toBase58String(aI.caller.bytes)
325+ if (!(K(F)))
326+ then throw("Hash should be 64 characters maximum")
327+ else {
328+ let bb = ay(ap, as)
329+ let aA = bb._1
330+ let aB = bb._2
331+ let bc = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
332+ if ((bc != ""))
333+ then throw("Something went wrong!")
334+ else {
335+ let bd = aH(aI)
336+ let aK = bd._1
337+ let aL = bd._2
338+ if (!(isDefined(aK)))
339+ then throw("Something went wrong")
340+ else {
341+ let be = x(al(F, N))
342+ if ((be != ""))
343+ then throw("You already added it")
344+ else {
345+ let bf = x(ai(F))
346+ if ((bf != ""))
347+ then throw("Hash already registered")
348+ else {
349+ let bg = C(D, N, F)
350+ if (!(bg))
351+ then throw("Sign Certificate not found for this address.")
352+ else [StringEntry(ai(F), N), StringEntry(al(F, N), P), IntegerEntry(O(N, P), ba), StringEntry(Q(N, P), aC), StringEntry(R(N, P), aD), StringEntry(S(N, P), an), StringEntry(U(N, P), ao), StringEntry(T(N, P), ar), StringEntry(Z(N, P), aB), StringEntry(aa(N, P), aA), StringEntry(ac(N, P), aZ), StringEntry(ab(N, P), aE), IntegerEntry(V(N, P), aF), 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)), aK, aL)]
353+ }
354+ }
355+ }
356+ }
357+ }
358+ }
476359
477360
478361
479362 @Callable(aI)
480-func updateArtwork (ah,aC,aD,aE,bO,aF,an,ar,ao,as,ap) = if (!(p))
363+func updateArtwork (ah,aC,aD,aE,aZ,aF,an,ar,ao,as,ap) = if (!(p))
481364 then throw(q)
482365 else {
366+ let bh = toBase58String(aI.transactionId)
483367 let N = toBase58String(aI.caller.bytes)
484- let bW = ay(ap, as)
485- let aA = bW._1
486- let aB = bW._2
487- let bR = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
488- if ((bR != ""))
368+ let bi = ay(ap, as)
369+ let aA = bi._1
370+ let aB = bi._2
371+ let bc = az(N, an, ao, aA, ar, aB, aC, aD, aE, aF)
372+ if ((bc != ""))
489373 then throw("Something went wrong!")
490374 else {
491- let bT = x(Q(N, ah))
492- if ((bT == ""))
375+ let be = x(Q(N, ah))
376+ if ((be == ""))
493377 then throw("Entry not found")
494378 else {
495- let bX = x(af(N, ah))
496- if ((bX == "ILLEGAL"))
379+ let bj = x(af(N, ah))
380+ if ((bj == "ILLEGAL"))
497381 then throw("Cannot update ILLEGAL artwork")
498- else if (!(aP(N, ah)))
499- then [StringEntry(Q(N, ah), aC), StringEntry(R(N, ah), aD), StringEntry(S(N, ah), an), StringEntry(U(N, ah), ao), StringEntry(T(N, ah), ar), StringEntry(aa(N, ah), aA), StringEntry(Z(N, ah), aB), IntegerEntry(V(N, ah), aF), StringEntry(ab(N, ah), aE), StringEntry(ac(N, ah), bO)]
382+ else if (!(aN(N, ah)))
383+ then [StringEntry(Q(N, ah), aC), StringEntry(R(N, ah), aD), StringEntry(S(N, ah), an), StringEntry(U(N, ah), ao), StringEntry(T(N, ah), ar), StringEntry(aa(N, ah), aA), StringEntry(Z(N, ah), aB), IntegerEntry(V(N, ah), aF), StringEntry(ab(N, ah), aE), StringEntry(ac(N, ah), aZ)]
500384 else throw("Already minted")
501385 }
502386 }
503387 }
504388
505389
506390
507391 @Callable(aI)
508-func flagArtwork (P,bY,bX) = {
509- let bZ = bi(aI)
510- let bo = bZ._1
511- let N = bZ._2
392+func flagArtwork (P,bk,bj) = {
393+ let N = toString(addressFromPublicKey(aI.callerPublicKey))
394+ let bl = toBase58String(aI.transactionId)
512395 if (containsElement([j, k, toString(this)], N))
513- then if ((bX == "CONSENT"))
514- then [StringEntry(af(bY, P), bX)]
515- else if ((bX == ""))
516- then [StringEntry(af(bY, P), bX)]
517- else if ((bX == "ILLEGAL"))
518- then [StringEntry(af(bY, P), bX), StringEntry(Q(bY, P), "ILLEGAL CONTENT"), StringEntry(R(bY, P), "ILLEGAL CONTENT"), StringEntry(S(bY, P), ""), StringEntry(U(bY, P), ""), StringEntry(aa(bY, P), "")]
519- else throw(("Unknow status " + bX))
396+ then if ((bj == "CONSENT"))
397+ then [StringEntry(af(bk, P), bj)]
398+ else if ((bj == ""))
399+ then [StringEntry(af(bk, P), bj)]
400+ else if ((bj == "CHANGE_REQUIRED"))
401+ then [StringEntry(af(bk, P), bj)]
402+ else if ((bj == "ILLEGAL"))
403+ then [StringEntry(af(bk, P), bj), StringEntry(Q(bk, P), "ILLEGAL CONTENT"), StringEntry(R(bk, P), "ILLEGAL CONTENT"), StringEntry(S(bk, P), ""), StringEntry(U(bk, P), ""), StringEntry(aa(bk, P), "")]
404+ else throw(("Unknow status " + bj))
520405 else throw("You are not allowed")
521406 }
522407
523408
524409
525410 @Callable(aI)
526-func deleteArtwork (P,bY) = {
527- let ca = bi(aI)
528- let bo = ca._1
529- let N = ca._2
530- let aQ = if (containsElement([j, k, toString(this)], N))
531- then bY
411+func deleteArtwork (P,bk) = {
412+ let N = toString(addressFromPublicKey(aI.callerPublicKey))
413+ let bl = toBase58String(aI.transactionId)
414+ let aO = if (containsElement([j, k, toString(this)], N))
415+ then bk
532416 else N
533- let bT = valueOrErrorMessage(x(Q(aQ, P)), "No art matching for this address")
534- if ((bT == ""))
417+ let be = x(Q(aO, P))
418+ if ((be == ""))
535419 then throw("No art matching for this address")
536420 else {
537- let F = x(ag(aQ, P))
421+ let F = x(ag(aO, P))
538422 if ((F == ""))
539423 then throw("No art hash matching for this address")
540424 else {
541- let D = x(W(aQ, P))
425+ let D = x(W(aO, P))
542426 if ((D == ""))
543427 then throw("No SIGN ID matching")
544428 else {
545- let cb = [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(bY, P)), DeleteEntry(ad(bY, P)), DeleteEntry(ae(bY, P)), DeleteEntry(ai(F)), DeleteEntry(aj(aQ, D)), DeleteEntry(al(F, aQ))]
546- if (!(aP(aQ, P)))
429+ let bm = [DeleteEntry(O(aO, P)), DeleteEntry(Q(aO, P)), DeleteEntry(R(aO, P)), DeleteEntry(S(aO, P)), DeleteEntry(U(aO, P)), DeleteEntry(T(aO, P)), DeleteEntry(Z(aO, P)), DeleteEntry(aa(aO, P)), DeleteEntry(ac(aO, P)), DeleteEntry(ab(aO, P)), DeleteEntry(V(aO, P)), DeleteEntry(W(aO, P)), DeleteEntry(X(aO, P)), DeleteEntry(Y(aO, P)), DeleteEntry(af(bk, P)), DeleteEntry(ad(bk, P)), DeleteEntry(ae(bk, P)), DeleteEntry(ai(F)), DeleteEntry(aj(aO, D)), DeleteEntry(al(F, aO))]
430+ if (!(aN(aO, P)))
547431 then if (!(p))
548432 then throw(q)
549- else cb
433+ else bm
550434 else if (containsElement([j, toString(this)], N))
551- then cb
435+ then bm
552436 else throw("Art already minted, you cannot delete it")
553437 }
554438 }
555439 }
556440 }
557441
558442
559443
560444 @Callable(aI)
561-func sellArtwork (P,aY,cc,aN) = {
562- let cd = bi(aI)
563- let bo = cd._1
564- let N = cd._2
565- let br = x(Q(N, P))
566- if ((br == ""))
567- then throw("This art doesn't match your account")
568- else {
569- let ce = x(U(N, P))
570- if ((size(split(ce, "/")[0]) != 59))
571- then throw("You cannot sell art with no export file")
572- else if (!(aW(aN)))
573- then throw("Something went wrong!")
574- else if (!(aX(aN, aY)))
575- then throw("Something went wrong!")
576- else {
577- let aG = aw(N)
578- if ((aG != ""))
579- then throw(aG)
580- else {
581- let bt = z(X(N, P))
582- let bu = z(V(N, P))
583- if ((cc > 10))
584- then throw("10 editions max per artwork")
585- else if (if ((bt != 0))
586- then (bt == bu)
587- else false)
588- then throw("Max edition reached.")
589- else if (if ((bt > 0))
590- then (bu != cc)
591- else false)
592- then throw("Cannot change maximum issuable anymore")
593- else {
594- let bF = if (if ((aY > 0))
595- then (cc > 0)
445+func sellArtwork (P,aV,bn,aL) = if (!(p))
446+ then throw(q)
447+ else {
448+ let bl = toBase58String(aI.transactionId)
449+ let N = toBase58String(aI.caller.bytes)
450+ let bo = lastBlock.timestamp
451+ let bp = x(Q(N, P))
452+ if ((bp == ""))
453+ then throw("This art doesn't match match your account")
454+ else {
455+ let bq = x(U(N, P))
456+ if ((size(split(bq, "/")[0]) != 59))
457+ then throw("You cannot sell art with no export file")
458+ else {
459+ let br = x(T(N, P))
460+ if ((size(br) != 64))
461+ then throw("You cannot sell art with no export hash")
462+ else if (!(aT(aL)))
463+ then throw("Something went wrong!")
464+ else if (!(aU(aL, aV)))
465+ then throw("Something went wrong!")
466+ else {
467+ let aG = aw(N)
468+ if ((aG != ""))
469+ then throw(aG)
470+ else {
471+ let bs = z(X(N, P))
472+ let bt = z(V(N, P))
473+ if ((bn > 10))
474+ then throw("10 editions max per artwork")
475+ else if (if ((bs != 0))
476+ then (bs == bt)
596477 else false)
597- then true
598- else false
599-[BooleanEntry(Y(N, P), bF), IntegerEntry(ad(N, P), aY), IntegerEntry(V(N, P), cc), StringEntry(ae(N, P), aN)]
600- }
601- }
602- }
603- }
604- }
478+ then throw("Max edition reached.")
479+ else if (if ((bs > 0))
480+ then (bt != bn)
481+ else false)
482+ then throw("Cannot change maximum issuable anymore")
483+ else {
484+ let bu = if (if ((aV > 0))
485+ then (bn > 0)
486+ else false)
487+ then true
488+ else false
489+[BooleanEntry(Y(N, P), bu), IntegerEntry(ad(N, P), aV), IntegerEntry(V(N, P), bn), StringEntry(ae(N, P), aL)]
490+ }
491+ }
492+ }
493+ }
494+ }
495+ }
605496
606497
607498
608499 @Callable(aI)
609-func buyArtwork (P,bk) = bj(aI, P, bk, "", "")
500+func buyArtwork (P,bv) = if (!(p))
501+ then throw(q)
502+ else {
503+ let bl = toBase58String(aI.transactionId)
504+ let N = toBase58String(aI.caller.bytes)
505+ let bw = z("total_nft_issued")
506+ let D = x(W(bv, P))
507+ let bp = x(Q(bv, P))
508+ if ((bp == ""))
509+ then throw("Art doesn't exist")
510+ else {
511+ let bx = x(S(bv, P))
512+ let bq = x(U(bv, P))
513+ let br = x(T(bv, P))
514+ let aA = x(aa(bv, P))
515+ let aB = x(Z(bv, P))
516+ let aD = take(x(R(bv, P)), 50)
517+ let by = B(Y(bv, P))
518+ let bs = z(X(bv, P))
519+ let aS = z(ad(bv, P))
520+ let aR = x(ae(bv, P))
521+ let bz = x(ag(bv, P))
522+ let bt = z(V(bv, P))
523+ if (if (if ((0 >= aS))
524+ then true
525+ else !(by))
526+ then true
527+ else (0 >= bt))
528+ then throw("Art not for sale")
529+ else {
530+ let bA = aQ(aI, aR, aS)
531+ let aK = bA._1
532+ let aL = bA._2
533+ let bB = A(bv)
534+ let bC = if ((bB > height))
535+ then 0
536+ else if ((aR == toBase58String(g)))
537+ then l
538+ else m
539+ let bD = fraction(aK, bC, 100)
540+ let bE = (aK - bD)
541+ if ((bs == bt))
542+ then throw("Art sold out")
543+ else {
544+ let bF = (bs + 1)
545+ let bG = lastBlock.timestamp
546+ let bH = ((((((((((((((((((((((((((("Creator: " + bv) + ",
547+ ArtID: ") + P) + ",
548+ SignID: ") + D) + ",
549+ Artwork name: ") + bp) + ",
550+ Artwork description: ") + aD) + ",
551+ Issue: ") + toString(bF)) + "/") + toString(bt)) + ",
552+ Max issuable: ") + toString(bt)) + ",
553+ Source hash: ") + bz) + ",
554+ Display cid: ") + bx) + ",
555+ Export cid: ") + bq) + ",
556+ Export hash: ") + br) + ",
557+ Licence cid: ") + aA) + ",
558+ Licence hash: ") + aB)
559+ let bI = Issue(("SA_" + toString((bw + 1))), bH, 1, 0, false)
560+ let bJ = calculateAssetId(bI)
561+ let bu = if ((bF == bt))
562+ then false
563+ else true
564+[IntegerEntry(X(bv, P), bF), StringEntry(("nft_" + toBase58String(bJ)), ((((((("art_sold_" + toString(bF)) + "_of_") + toString(bt)) + "_") + P) + "_") + bv)), StringEntry(((((((("art_sold_" + toString(bF)) + "_of_") + toString(bt)) + "_") + P) + "_") + bv), ((((((((((N + "_") + toString(bG)) + "_") + bl) + "_") + toString(aS)) + "_") + aR) + "_") + toBase58String(bJ))), IntegerEntry("total_nft_issued", (bw + 1)), BooleanEntry(Y(bv, P), bu), bI, ScriptTransfer(Address(fromBase58String(bv)), bE, aL), ScriptTransfer(Address(fromBase58String(d)), bD, aL), ScriptTransfer(aI.caller, 1, bJ)]
565+ }
566+ }
567+ }
568+ }
610569
611570
612571
613-@Callable(aI)
614-func setBid (P,bk) = {
615- let cf = bi(aI)
616- let bo = cf._1
617- let N = cf._2
618- let bp = cf._3
619- let cg = aH(aI)
620- let aJ = cg._1
621- let aK = cg._2
622- let aN = if (!(isDefined(aJ.assetId)))
623- then "WAVES"
624- else toBase58String(value(aJ.assetId))
625- if (!(aW(aN)))
626- then throw("Something went wrong!")
627- else if (!(aX(aN, aK)))
628- then throw("Something went wrong!")
629- else {
630- let bt = z(X(bk, P))
631- let bu = z(V(bk, P))
632- if ((bt >= bu))
633- then throw("Sold out, you cannot bid")
634- else [StringEntry((((((((("bid_" + P) + "_") + bk) + "_") + N) + "_") + bo) + "_OPEN"), ((((aN + "_") + toString(aK)) + "_") + toString(bp)))]
635- }
636- }
637-
638-
639-
640-@Callable(aI)
641-func acceptBid (P,bk,bl,bm) = {
642- let N = toBase58String(aI.caller.bytes)
643- if ((N != bk))
644- then throw("You cannot do this action")
645- else bj(aI, P, bk, bl, bm)
646- }
647-
648-
649-
650-@Callable(aI)
651-func cancelBid (P,bk,bl,bm) = {
652- let ch = bi(aI)
653- let bo = ch._1
654- let N = ch._2
655- let bp = ch._3
656- if (if ((N != bm))
657- then (N != bk)
658- else false)
659- then throw("You cannot do this action")
660- else {
661- let bd = ((((((("bid_" + P) + "_") + bk) + "_") + bm) + "_") + bl)
662- let be = x((bd + "_OPEN"))
663- if ((be == ""))
664- then throw("Bid not found")
665- else {
666- let bf = split(be, "_")
667- let aN = if ((bf[0] == "WAVES"))
668- then unit
669- else fromBase58String(bf[0])
670- let ci = if ((N == bm))
671- then "CANCELED"
672- else "REJECTED"
673-[DeleteEntry((bd + "_OPEN")), StringEntry(((bd + "_") + ci), ((be + "_") + toString(bp))), ScriptTransfer(Address(fromBase58String(bm)), parseIntValue(bf[1]), aN)]
674- }
675- }
676- }
677-
678-
679-
680-@Callable(aI)
681-func deleteEntry (cj) = {
682- let N = toString(addressFromPublicKey(aI.callerPublicKey))
572+@Callable(bK)
573+func deleteEntry (bL) = {
574+ let N = toString(addressFromPublicKey(bK.callerPublicKey))
683575 if ((N == j))
684- then [DeleteEntry(cj)]
576+ then [DeleteEntry(bL)]
685577 else throw("no")
686578 }
687579
688580

github/deemru/w8io/873ac7e 
124.94 ms