tx · 3gAXb6hX2WoLvT8tt7ua5GSYUpeo6HVkpkMctobp5L4R

3NBcFbWgspcWLZ3dcNz7VsjXju14KZKD6XS:  -0.01000000 Waves

2021.01.05 07:28 [1339614] smart account 3NBcFbWgspcWLZ3dcNz7VsjXju14KZKD6XS > SELF 0.00000000 Waves

{ "type": 13, "id": "3gAXb6hX2WoLvT8tt7ua5GSYUpeo6HVkpkMctobp5L4R", "fee": 1000000, "feeAssetId": null, "timestamp": 1609820950232, "version": 2, "chainId": 84, "sender": "3NBcFbWgspcWLZ3dcNz7VsjXju14KZKD6XS", "senderPublicKey": "2mxaGdu6PBzTkdURryThAc4i2pvLXVSdqzET1NaeFV5Q", "proofs": [ "5dzuCRgq4D8DSULd5dDPrrQRWaq57BZgn6PdLGsfCijDw2CHuoMtHvwJBmT3rSj6zeB8rRJRAkkeP4i1tovkrhT6" ], "script": "base64:AAIEAAAAAAAAADwIAhIOCgwICAgICAgBCAgICAgSDQoLCAgICAgBCAgICAgSBQoDCAgIEgQKAggIEgYKBAgBAQgSBAoCCAgAAAA7AAAAAAh1bml0VGVzdAYAAAAACW9yYWNsZUZlZQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjJzNVJ0YUhQQmVuQ3N4MkVDY29GUmJZSHgzbm9aaFhXMQAAAAAIc2lnbkRhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM05DMjhoU2l2cm1zVFVYYVlEMXg2TDM2Mko0WnBVbm9UZEIAAAAAC2ZlZVJlY2VpdmVyAgAAACMzTjFFNnRYZGRSb1ZhUmZROWRRM3ZnNUxhVzJmc2Q4SEt1YgAAAAAIdXNlckRhcHADBQAAAAh1bml0VGVzdAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjh4WGFZakUyN0FhNzlkNWhIcmhIdTlIYUZvVEJtaERFagAAAAANd2hpdGVsaXN0RGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXQ2amoxV1VZcWQ3RFQ3ZEhFdWJzOWpFVExVWE1jQUI4awAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAt1c2RuQXNzZXRJZAEAAAAgD/IcEqzkxDya7EYaqyWosOy6BytGzG2IcvC14pJJAbQAAAAADHdhdmVzQXNzZXRJZAEAAAAAAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAAdzaWduQ3V0AAAAAAAAAAAHAAAAAAd1c2RuQ3V0AAAAAAAAAAAKAAAAAAh3YXZlc0N1dAAAAAAAAAAACgAAAAAOZGVmYXVsdExpY2VuY2UCAAAAR2JhZnliZWlnaXNmcXR5bzJxZGZzY2VoNWZwY3A3ZWV5bXJwZWdscDZlZGFvMmJteWhpamJheXZhdXN5L2xpY2VuY2UucGRmAAAAABJkZWZhdWx0SGFzaExpY2VuY2UCAAAAQDNkZjc5ZDM0YWJiY2E5OTMwOGU3OWNiOTQ0NjFjMTg5MzU4MjYwNGQ2ODMyOWE0MWZkNGJlYzE4ODVlNmFkYjQAAAAAC2RhcHBSdW5uaW5nBAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX2RhcHBfaXNfcnVubmluZwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQYAAAAADm1haW50ZW5hbmNlTVNHBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX21haW50ZW5hbmNlX21zZwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAAAAAAADXVzZXJTdXNwZW5kZWQCAAAACVNVU1BFTkRFRAAAAAALdXNlclJlbW92ZWQCAAAAB1JFTU9WRUQAAAAAEHVzZXJVbnJlZ2lzdGVyZWQCAAAADFVOUkVHSVNURVJFRAAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQBAAAAF2dldFN0cmluZ0J5S2V5RnJvbVVzZXJzAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAIdXNlckRhcHAFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAACW9yYWNsZUZlZQUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRt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AAABAAAACmNpZExpY2VuY2UDCQAAAAAAAAIJAAExAAAAAQUAAAAKY2lkTGljZW5jZQAAAAAAAAAAAAUAAAAOZGVmYXVsdExpY2VuY2UFAAAACmNpZExpY2VuY2UBAAAADnNldExJY2VuY2VIYXNoAAAAAQAAAA1zaGEyNTZMaWNlbmNlAwkAAAAAAAACCQABMQAAAAEFAAAADXNoYTI1NkxpY2VuY2UAAAAAAAAAAAAFAAAAEmRlZmF1bHRIYXNoTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQAAAAYAAAAGaW52b2tlAQAAAAphZGRBcnR3b3JrAAAADAAAAApzaGEyNTZIYXNoAAAABnNpZ25JRAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAAdtYXhtaW50AAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UDCQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAVhcnRJZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAACXRpbWVzdGFtcAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAEAAAABmNhbGxlcgkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACmxpY2VuY2VDSUQJAQAAAA1zZXRMSWNlbmNlQ0lEAAAAAQUAAAAKY2lkTGljZW5jZQQAAAALbGljZW5jZUhhc2gJAQAAAA5zZXRMSWNlbmNlSGFzaAAAAAEFAAAADXNoYTI1NkxpY2VuY2UEAAAAEHVzZXJJc1JlZ2lzdGVyZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHAJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAGY2FsbGVyBQAAABB1c2VyVW5yZWdpc3RlcmVkBAAAAAljaGVja1VzZXIJAQAAAAx2YWxpZGF0ZVVzZXIAAAABBQAAABB1c2VySXNSZWdpc3RlcmVkAwkBAAAAAiE9AAAAAgUAAAAJY2hlY2tVc2VyAgAAAAAJAAACAAAAAQUAAAAJY2hlY2tVc2VyAwkBAAAAASEAAAABCQEAAAAOdmFsaWRhdGVBbGxDSUQAAAADBQAAAApjaWREaXNwbGF5BQAAAAljaWRFeHBvcnQFAAAACmxpY2VuY2VDSUQJAAACAAAAAQIAAAAQUHJvYmxlbSB3aXRoIENJRAMJAQAAAAEhAAAAAQkBAAAADHZhbGlkYXRlSGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gJAAACAAAAAQIAAAAkSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtAwkBAAAAASEAAAABCQEAAAAPdmFsaWRhdGVBbGxIYXNoAAAAAgUAAAAMc2hhMjU2RXhwb3J0BQAAAAtsaWNlbmNlSGFzaAkAAAIAAAABAgAAABNQcm9ibGVtIHdpdGggSGFzaGVzAwkAAAAAAAACCQABkAAAAAEIBQAAAAZpbnZva2UAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAATTm8gcGF5bWVudCBhdHRhY2hlZAQAAAAHcGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAAGaW52b2tlAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAHYXNzZXRJZAMDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAtzaWduQXNzZXRJZAcIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAArT25seSBTSUdOIHRva2VuIGFjY2VwdGVkIGFzIHRyYW5zYWN0aW9uIGZlZQQAAAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkBAAAAGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUAAAABCQABLAAAAAICAAAAEmNlcnRpZmljYXRpb25fZmVlXwkAAlgAAAABBQAAAAtzaWduQXNzZXRJZAMJAQAAAAIhPQAAAAIFAAAABmFtb3VudAUAAAAZY3VycmVudENlcnRpZmljYXRpb25Qcmlj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dHlwZQAAAAdtYXhtaW50AAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UDCQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAh1cGRhdGVJZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAABmNhbGxlcgkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACmxpY2VuY2VDSUQJAQAAAA1zZXRMSWNlbmNlQ0lEAAAAAQUAAAAKY2lkTGljZW5jZQQAAAALbGljZW5jZUhhc2gJAQAAAA5zZXRMSWNlbmNlSGFzaAAAAAEFAAAADXNoYTI1NkxpY2VuY2UEAAAAEHVzZXJJc1JlZ2lzdGVyZWQJAQAAABdnZXRTdHJpbmdCeUtleUZyb21Vc2VycwAAAAEJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAGY2FsbGVyBAAAAAljaGVja1VzZXIJAQAAAAx2YWxpZGF0ZVVzZXIAAAABBQAAABB1c2VySXNSZWdpc3RlcmVkAwkBAAAAAiE9AAAAAgUAAAAJY2hlY2tVc2VyAgAAAAAJAAACAAAAAQUAAAAJY2hlY2tVc2VyAwkBAAAAASEAAAABCQEAAAAOdmFsaWRhdGVBbGxDSUQAAAADBQAAAApjaWREaXNwbGF5BQAAAAljaWRFeHBvcnQFAAAACmxpY2VuY2VDSUQJAAACAAAAAQIAAAAQUHJvYmxlbSB3aXRoIENJRAMJAQAAAAEhAAAAAQkBAAAAD3ZhbGlkYXRlQWxsSGFzaAAAAAIFAAAADHNoYTI1NkV4cG9ydAUAAAALbGljZW5jZUhhc2gJAAACAAAAAQIAAAATUHJvYmxlbSB3aXRoIEhhc2hlcwQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAACmtleUFydE5hbWUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQDCQAAAAAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAAA9FbnRyeSBub3QgZm91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aGluZwQAAAAMZGF0YVRvRGVsZXRlCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnREYXRlAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydERlc2MAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlBcnREaXNwbGF5Q2lkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAPa2V5QXJ0RXhwb3J0Q2lkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEWtleUFydExpY2VuY2VIYXNoAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydFR5cGUAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnRUYWdzAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydFNpZ25JRAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydElzc3VlZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADGtleUFydE9uU2FsZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydEZsYWcAAAACBQAAAARhZGRyBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAARa2V5QXJ0T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABNrZXlBcnRBcnRpZEJ5U2lnbmlkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAZzaWduSUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAADGFkZHJlc3NUb1VzZQUAAAADbmlsAwkBAAAAASEAAAABBQAAAA1hcnR3b3JrTWludGVkAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwUAAAAMZGF0YVRvRGVsZXRlAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAFY2hyaXMJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzBQAAAANuaWwFAAAABmNhbGxlcgUAAAAMZGF0YVRvRGVsZXRlCQAAAgAAAAECAAAAIUFydCBhbHJlYWR5IG1pbnRlZCwgY2Fubm90IGRlbGV0ZQAAAAFpAQAAAAtzZWxsQXJ0d29yawAAAAQAAAAFYXJ0SWQAAAAFcHJpY2UAAAAHbWF4TWludAAAAAdhc3NldElkAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwQAAAACaWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAGY2FsbGVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACHNlbGxEYXRlCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAQAAAALYXJ0d29ya05hbWUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAprZXlBcnROYW1lAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXJ0d29ya05hbWUCAAAAAAkAAAIAAAABAgAAAClUaGlzIGFydCBkb2Vzbid0IG1hdGNoIG1hdGNoIHlvdXIgYWNjb3VudAQAAAAJZXhwb3J0Q0lECQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAPa2V5QXJ0RXhwb3J0Q2lkAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAMJAQAAAAIhPQAAAAIJAAExAAAAAQkAAZEAAAACCQAEtQAAAAIFAAAACWV4cG9ydENJRAIAAAABLwAAAAAAAAAAAAAAAAAAAAAAOwkAAAIAAAABAgAAACdZb3UgY2Fubm90IHNlbGwgYXJ0IHdpdGggbm8gZXhwb3J0IGZpbGUEAAAACmV4cG9ydEhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAMJAQAAAAIhPQAAAAIJAAExAAAAAQUAAAAKZXhwb3J0SGFzaAAAAAAAAAAAQAkAAAIAAAABAgAAACdZb3UgY2Fubm90IHNlbGwgYXJ0IHdpdGggbm8gZXhwb3J0IGhhc2gDAwMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQJAAJYAAAAAQUAAAALc2lnbkFzc2V0SWQJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQJAAJYAAAAAQUAAAAMd2F2ZXNBc3NldElkBwkBAAAAAiE9AAAAAgUAAAAHYXNzZXRJZAkAAlgAAAABBQAAAAt1c2RuQXNzZXRJZAcJAAACAAAAAQIAAAAhT25seSBTSUdOLCBVU0ROIG9yIFdBVkVTIGFjY2VwdGVkBAAAAAxtaW5TZWxsV2F2ZXMDBQAAAAh1bml0VGVzdAAAAAAAAAAAAQkBAAAAGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUAAAABAgAAAA53YXZlc19taW5fc2VsbAQAAAALbWluU2VsbFVzZG4AAAAAAAAPQkAEAAAAC21pblNlbGxTaWduAwUAAAAIdW5pdFRlc3QAAAAAAAAAAAEJAABoAAAAAgkBAAAAGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUAAAABCQABLAAAAAICAAAAEmNlcnRpZmljYXRpb25fZmVlXwkAAlgAAAABBQAAAAtzaWduQXNzZXRJZAAAAAAAAAAAAgMDAwMDCQAAAAAAAAIFAAAAB2Fzc2V0SWQJAAJYAAAAAQUAAAALdXNkbkFzc2V0SWQJAABmAAAAAgUAAAALbWluU2VsbFVzZG4FAAAABXByaWNlBwkBAAAAAiE9AAAAAgUAAAAFcHJpY2UAAAAAAAAAAAAHBgMDCQAAAAAAAAIFAAAAB2Fzc2V0SWQJAAJYAAAAAQUAAAALc2lnbkFzc2V0SWQJAABmAAAAAgUAAAALbWluU2VsbFNpZ24FAAAABXByaWNlBwkBAAAAAiE9AAAAAgUAAAAFcHJpY2UAAAAAAAAAAAAHBgMDCQAAAAAAAAIFAAAAB2Fzc2V0SWQJAAJYAAAAAQUAAAAMd2F2ZXNBc3NldElkCQAAZgAAAAIFAAAADG1pblNlbGxXYXZlcwUAAAAFcHJpY2UHCQEAAAACIT0AAAACBQAAAAVwcmljZQAAAAAAAAAAAAcJAAACAAAAAQIAAAAYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBAAAABB1c2VySXNSZWdpc3RlcmVkCQEAAAAXZ2V0U3RyaW5nQnlLZXlGcm9tVXNlcnMAAAABCQEAAAANa2V5VXNlclN0YXR1cwAAAAEFAAAABmNhbGxlcgMDCQAAAAAAAAIFAAAAEHVzZXJJc1JlZ2lzdGVyZWQCAAAAAAYJAAAAAAAAAgUAAAAQdXNlcklzUmVnaXN0ZXJlZAUAAAALdXNlckFsbG93ZWQJAAACAAAAAQIAAAAbUmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0AwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAA11c2VyU3VzcGVuZGVkCQAAAgAAAAECAAAAEUFjY291bnQgc3VzcGVuZGVkAwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAAt1c2VyUmVtb3ZlZAkAAAIAAAABAgAAAA9BY2NvdW50IGRlbGV0ZWQEAAAACmFtb3VudFNvbGQJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAMa2V5QXJ0SXNzdWVkAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAQAAAAKbWF4Q2FuU2VsbAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAA1rZXlBcnRNYXhNaW50AAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAMJAABmAAAAAgUAAAAHbWF4TWludAAAAAAAAAAACgkAAAIAAAABAgAAABsxMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAAAAAiE9AAAAAgUAAAAKYW1vdW50U29sZAAAAAAAAAAAAAkAAAAAAAACBQAAAAphbW91bnRTb2xkBQAAAAptYXhDYW5TZWxsBwkAAAIAAAABAgAAABRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQAAZgAAAAIFAAAACmFtb3VudFNvbGQAAAAAAAAAAAAJAQAAAAIhPQAAAAIFAAAACm1heENhblNlbGwFAAAAB21heE1pbnQHCQAAAgAAAAECAAAAJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlBAAAAApzZWxsU3RhdHVzAwMJAABmAAAAAgUAAAAFcHJpY2UAAAAAAAAAAAAJAABmAAAAAgUAAAAHbWF4TWludAAAAAAAAAAAAAcGBwkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAADGtleUFydE9uU2FsZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACnNlbGxTdGF0dXMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAtrZXlBcnRQcmljZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABXByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAAB21heE1pbnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFWtleUFydEFzc2V0SWRBY2NlcHRlZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAAApidXlBcnR3b3JrAAAAAgAAAAVhcnRJZAAAAAZpc3N1ZXIDCQEAAAABIQAAAAEFAAAAC2RhcHBSdW5uaW5nCQAAAgAAAAEFAAAADm1haW50ZW5hbmNlTVNHBAAAAAJpZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAZjYWxsZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAIdG90YWxORlQJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABAgAAABB0b3RhbF9uZnRfaXNzdWVkBAAAAAZzaWduSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAxrZXlBcnRTaWduSUQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAthcnR3b3JrTmFtZQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAACmtleUFydE5hbWUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAAAAAAACBQAAAAthcnR3b3JrTmFtZQIAAAAACQAAAgAAAAECAAAAEUFydCBkb2Vzbid0IGV4aXN0BAAAAApkaXNwbGF5Q0lECQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACWV4cG9ydENJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACmV4cG9ydEhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAAKbGljZW5jZUNJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGtleUFydExpY2VuY2VDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAtsaWNlbmNlSGFzaAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEWtleUFydExpY2VuY2VIYXNoAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALZGVzY3JpcHRpb24JAAEvAAAAAgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAACmtleUFydERlc2MAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAAAAAAAAAAAyBAAAAAhpc09uU2FsZQkBAAAAD2dldEJvb2xlYW5CeUtleQAAAAEJAQAAAAxrZXlBcnRPblNhbGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAphbW91bnRTb2xkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAADGtleUFydElzc3VlZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAADGFydHdvcmtQcmljZQkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAtrZXlBcnRQcmljZQAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAADHByaWNlQXNzZXRJZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAFWtleUFydEFzc2V0SWRBY2NlcHRlZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACnNvdXJjZUhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABRrZXlBcnRIYXNoQnlUeGlkQWRkcgAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACm1heENhblNlbGwJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQDAwMJAABnAAAAAgAAAAAAAAAAAAUAAAAMYXJ0d29ya1ByaWNlBgkBAAAAASEAAAABBQAAAAhpc09uU2FsZQYJAABnAAAAAgAAAAAAAAAAAAUAAAAKbWF4Q2FuU2VsbAkAAAIAAAABAgAAABBBcnQgbm90IGZvciBzYWxlBAAAAAdwYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRz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", "height": 1339614, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let unitTest = true
5+
6+let oracleFee = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
7+
8+let signDapp = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
9+
10+let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
11+
12+let userDapp = if (unitTest)
13+ then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
14+ else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
15+
16+let whitelistDapp = value(addressFromString("3Mt6jj1WUYqd7DT7dHEubs9jETLUXMcAB8k"))
17+
18+let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
19+
20+let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
21+
22+let wavesAssetId = base58''
23+
24+let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
25+
26+let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
27+
28+let signCut = 7
29+
30+let usdnCut = 10
31+
32+let wavesCut = 10
33+
34+let defaultLicence = "bafybeigisfqtyo2qdfsceh5fpcp7eeymrpeglp6edao2bmyhijbayvausy/licence.pdf"
35+
36+let defaultHashLicence = "3df79d34abbca99308e79cb94461c1893582604d68329a41fd4bec1885e6adb4"
37+
38+let dappRunning = match getBoolean(userDapp, "conf_dapp_is_running") {
39+ case a: Boolean =>
40+ a
41+ case _ =>
42+ true
43+}
44+
45+let maintenanceMSG = match getString(userDapp, "conf_maintenance_msg") {
46+ case a: String =>
47+ a
48+ case _ =>
49+ ""
50+}
51+
52+let userSuspended = "SUSPENDED"
53+
54+let userRemoved = "REMOVED"
55+
56+let userUnregistered = "UNREGISTERED"
57+
58+let userAllowed = "ALLOWED"
59+
60+func getStringByKeyFromUsers (key) = match getString(userDapp, key) {
61+ case a: String =>
62+ a
63+ case _ =>
64+ ""
65+}
66+
67+
68+func getStringByKey (key) = match getString(this, key) {
69+ case a: String =>
70+ a
71+ case _ =>
72+ ""
73+}
74+
75+
76+func getIntegerByKeyFromOracle (key) = match getInteger(oracleFee, key) {
77+ case a: Int =>
78+ a
79+ case _ =>
80+ throw("Integer undefine or 0 in oracle")
81+}
82+
83+
84+func getIntegerByKey (key) = match getInteger(this, key) {
85+ case i: Int =>
86+ i
87+ case _ =>
88+ 0
89+}
90+
91+
92+func checkWhitelist (key) = match getInteger(whitelistDapp, key) {
93+ case a: Int =>
94+ if ((a >= height))
95+ then 1
96+ else 0
97+ case _ =>
98+ 0
99+}
100+
101+
102+func getBooleanByKey (key) = match getBoolean(this, key) {
103+ case i: Boolean =>
104+ i
105+ case _ =>
106+ false
107+}
108+
109+
110+func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
111+ case a: String =>
112+ if (contains(a, sha256Hash))
113+ then true
114+ else false
115+ case _ =>
116+ false
117+}
118+
119+
120+func validateCID (cid) = if (contains(cid, "/"))
121+ then if (if ((75 > size(cid)))
122+ then (60 > size(split(cid, "/")[0]))
123+ else false)
124+ then (16 > size(split(cid, "/")[1]))
125+ else false
126+ else false
127+
128+
129+func validateHash (hash) = (65 > size(hash))
130+
131+
132+func keyUserStatus (caller) = ("user_status_" + caller)
133+
134+
135+func keyArtDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
136+
137+
138+func keyArtName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
139+
140+
141+func keyArtDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
142+
143+
144+func keyArtDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
145+
146+
147+func keyArtExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
148+
149+
150+func keyArtExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
151+
152+
153+func keyArtMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
154+
155+
156+func keyArtSignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
157+
158+
159+func keyArtIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
160+
161+
162+func keyArtOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
163+
164+
165+func keyArtLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
166+
167+
168+func keyArtLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
169+
170+
171+func keyArtTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
172+
173+
174+func keyArtType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
175+
176+
177+func keyArtPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
178+
179+
180+func keyArtAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
181+
182+
183+func keyArtFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
184+
185+
186+func keyArtHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
187+
188+
189+func keyArtOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
190+
191+
192+func keyArtArtidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
193+
194+
195+func keyArtTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
196+
197+
198+func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
199+ then throw("Wrong Display CID")
200+ else if (!(validateCID(cidExport)))
201+ then throw("Wrong Export CID")
202+ else if (if ((cidLicence != ""))
203+ then !(validateCID(cidLicence))
204+ else false)
205+ then throw("Wrong Licence CID")
206+ else true
207+
208+
209+func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
210+ then throw("Export Hash 64 char. max")
211+ else if (!(validateHash(sha256Licence)))
212+ then throw("Licence Hash 64 char. max")
213+ else true
214+
215+
216+func validateString (str,max) = if ((size(str) == 0))
217+ then throw("Field cannot be is empty")
218+ else if ((size(str) > max))
219+ then throw((str + " is too long"))
220+ else true
221+
222+
223+func validateUser (userStatus) = if (if ((userStatus == userUnregistered))
224+ then true
225+ else (userStatus == userAllowed))
226+ then "Register this account first with \"Account\" tab"
227+ else if ((userStatus == userSuspended))
228+ then "Account suspended"
229+ else if ((userStatus == userRemoved))
230+ then "Account removed"
231+ else ""
232+
233+
234+func setLIcenceCID (cidLicence) = if ((size(cidLicence) == 0))
235+ then defaultLicence
236+ else cidLicence
237+
238+
239+func setLIcenceHash (sha256Licence) = if ((size(sha256Licence) == 0))
240+ then defaultHashLicence
241+ else sha256Licence
242+
243+
244+@Callable(invoke)
245+func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
246+ then throw(maintenanceMSG)
247+ else {
248+ let artId = toBase58String(invoke.transactionId)
249+ let timestamp = lastBlock.timestamp
250+ let caller = toBase58String(invoke.caller.bytes)
251+ let licenceCID = setLIcenceCID(cidLicence)
252+ let licenceHash = setLIcenceHash(sha256Licence)
253+ let userIsRegistered = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
254+ let checkUser = validateUser(userIsRegistered)
255+ if ((checkUser != ""))
256+ then throw(checkUser)
257+ else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
258+ then throw("Problem with CID")
259+ else if (!(validateHash(sha256Hash)))
260+ then throw("Hash should be 64 characters maximum")
261+ else if (!(validateAllHash(sha256Export, licenceHash)))
262+ then throw("Problem with Hashes")
263+ else if ((size(invoke.payments) == 0))
264+ then throw("No payment attached")
265+ else {
266+ let payment = value(invoke.payments[0])
267+ let amount = value(payment.amount)
268+ let assetId = if (if (isDefined(payment.assetId))
269+ then (payment.assetId == signAssetId)
270+ else false)
271+ then payment.assetId
272+ else throw("Only SIGN token accepted as transaction fee")
273+ let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
274+ if ((amount != currentCertificationPrice))
275+ then throw(("Payment amount should be " + toString(currentCertificationPrice)))
276+ else {
277+ let entryExist = getStringByKey(keyArtTxidByHashOwner(sha256Hash, caller))
278+ if ((entryExist != ""))
279+ then throw("You already added it")
280+ else {
281+ let hashExist = getStringByKey(keyArtOwnerByHash(sha256Hash))
282+ if ((hashExist != ""))
283+ then throw("Hash already registered")
284+ else {
285+ let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
286+ if (!(isSignCertified))
287+ then throw("Sign Certificate not found for this address.")
288+ else if ((size(cidDisplay) == 0))
289+ then throw("Display CID cannot be empty")
290+ else if (!(validateString(name, 100)))
291+ then throw("100 Char. max name")
292+ else if (!(validateString(description, 1000)))
293+ then throw("1000 Char. max description")
294+ else if ((size(split(tags, ",")) > 5))
295+ then throw("5 tags max.")
296+ else if ((maxmint > 10))
297+ then throw("10 editions max")
298+ else [StringEntry(keyArtOwnerByHash(sha256Hash), caller), StringEntry(keyArtTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyArtDate(caller, artId), timestamp), StringEntry(keyArtName(caller, artId), name), StringEntry(keyArtDesc(caller, artId), description), StringEntry(keyArtDisplayCid(caller, artId), cidDisplay), StringEntry(keyArtExportCid(caller, artId), cidExport), StringEntry(keyArtExportHash(caller, artId), sha256Export), StringEntry(keyArtLicenceHash(caller, artId), licenceHash), StringEntry(keyArtLicenceCid(caller, artId), licenceCID), StringEntry(keyArtType(caller, artId), type), StringEntry(keyArtTags(caller, artId), tags), IntegerEntry(keyArtMaxMint(caller, artId), maxmint), StringEntry(keyArtSignID(caller, artId), signID), IntegerEntry(keyArtIssued(caller, artId), 0), BooleanEntry(keyArtOnSale(caller, artId), false), StringEntry(keyArtArtidBySignid(caller, signID), artId), StringEntry(keyArtHashByTxidAddr(caller, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
299+ }
300+ }
301+ }
302+ }
303+ }
304+
305+
306+
307+@Callable(invoke)
308+func updateArtwork (txid,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
309+ then throw(maintenanceMSG)
310+ else {
311+ let updateId = toBase58String(invoke.transactionId)
312+ let caller = toBase58String(invoke.caller.bytes)
313+ let licenceCID = setLIcenceCID(cidLicence)
314+ let licenceHash = setLIcenceHash(sha256Licence)
315+ let userIsRegistered = getStringByKeyFromUsers(keyUserStatus(caller))
316+ let checkUser = validateUser(userIsRegistered)
317+ if ((checkUser != ""))
318+ then throw(checkUser)
319+ else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
320+ then throw("Problem with CID")
321+ else if (!(validateAllHash(sha256Export, licenceHash)))
322+ then throw("Problem with Hashes")
323+ else {
324+ let entryExist = getStringByKey(keyArtName(caller, txid))
325+ if ((entryExist == ""))
326+ then throw("Entry not found")
327+ else if (!(validateString(name, 100)))
328+ then throw("100 Char. max name")
329+ else if (!(validateString(description, 1000)))
330+ then throw("1000 Char. max description")
331+ else {
332+ let flag = getStringByKey(keyArtFlag(caller, txid))
333+ if ((flag == "ILLEGAL"))
334+ then throw("Cannot update ILLEGAL artwork")
335+ else {
336+ let artworkMinted = match getInteger(this, keyArtIssued(caller, txid)) {
337+ case b: Int =>
338+ if ((b == 0))
339+ then false
340+ else true
341+ case _ =>
342+ false
343+ }
344+ if ((size(split(tags, ",")) > 5))
345+ then throw("5 tags max.")
346+ else if ((maxmint > 10))
347+ then throw("10 editions max per artwork")
348+ else if (!(artworkMinted))
349+ then [StringEntry(keyArtName(caller, txid), name), StringEntry(keyArtDesc(caller, txid), description), StringEntry(keyArtDisplayCid(caller, txid), cidDisplay), StringEntry(keyArtExportCid(caller, txid), cidExport), StringEntry(keyArtExportHash(caller, txid), sha256Export), StringEntry(keyArtLicenceCid(caller, txid), licenceCID), StringEntry(keyArtLicenceHash(caller, txid), licenceHash), IntegerEntry(keyArtMaxMint(caller, txid), maxmint), StringEntry(keyArtTags(caller, txid), tags), StringEntry(keyArtType(caller, txid), type)]
350+ else throw("Already minted")
351+ }
352+ }
353+ }
354+ }
355+
356+
357+
358+@Callable(i)
359+func flagArtwork (artId,addr,flag) = {
360+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
361+ let id = toBase58String(i.transactionId)
362+ if (containsElement([chris, joep, toString(this)], caller))
363+ then if ((flag == "CONSENT"))
364+ then [StringEntry(keyArtFlag(addr, artId), flag)]
365+ else if ((flag == ""))
366+ then [StringEntry(keyArtFlag(addr, artId), flag)]
367+ else if ((flag == "ILLEGAL"))
368+ then [StringEntry(keyArtFlag(addr, artId), flag), StringEntry(keyArtName(addr, artId), "ILLEGAL CONTENT"), StringEntry(keyArtDesc(addr, artId), "ILLEGAL CONTENT"), StringEntry(keyArtDisplayCid(addr, artId), ""), StringEntry(keyArtExportCid(addr, artId), ""), StringEntry(keyArtLicenceCid(addr, artId), "")]
369+ else throw(("Unknow status " + flag))
370+ else throw("You are not allowed")
371+ }
372+
373+
374+
375+@Callable(i)
376+func deleteArtwork (artId,addr) = {
377+ let caller = toString(addressFromPublicKey(i.callerPublicKey))
378+ let id = toBase58String(i.transactionId)
379+ let addressToUse = if (containsElement([chris, joep, toString(this)], caller))
380+ then addr
381+ else caller
382+ let entryExist = getStringByKey(keyArtName(addressToUse, artId))
383+ if ((entryExist == ""))
384+ then throw("No art matching for this address")
385+ else {
386+ let artworkMinted = match getInteger(this, keyArtIssued(addressToUse, artId)) {
387+ case b: Int =>
388+ if ((b != 0))
389+ then true
390+ else false
391+ case _ =>
392+ false
393+ }
394+ let sha256Hash = getStringByKey(keyArtHashByTxidAddr(addressToUse, artId))
395+ if ((sha256Hash == ""))
396+ then throw("No art hash matching for this address")
397+ else {
398+ let signID = getStringByKey(keyArtSignID(addressToUse, artId))
399+ if ((signID == ""))
400+ then throw("No SIGN ID matching")
401+ else {
402+ let dataToDelete = [DeleteEntry(keyArtDate(addressToUse, artId)), DeleteEntry(keyArtName(addressToUse, artId)), DeleteEntry(keyArtDesc(addressToUse, artId)), DeleteEntry(keyArtDisplayCid(addressToUse, artId)), DeleteEntry(keyArtExportCid(addressToUse, artId)), DeleteEntry(keyArtExportHash(addressToUse, artId)), DeleteEntry(keyArtLicenceHash(addressToUse, artId)), DeleteEntry(keyArtLicenceCid(addressToUse, artId)), DeleteEntry(keyArtType(addressToUse, artId)), DeleteEntry(keyArtTags(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtSignID(addressToUse, artId)), DeleteEntry(keyArtIssued(addressToUse, artId)), DeleteEntry(keyArtOnSale(addressToUse, artId)), DeleteEntry(keyArtFlag(addr, artId)), DeleteEntry(keyArtOwnerByHash(sha256Hash)), DeleteEntry(keyArtArtidBySignid(addressToUse, signID)), DeleteEntry(keyArtTxidByHashOwner(sha256Hash, addressToUse))]
403+ if (!(artworkMinted))
404+ then if (!(dappRunning))
405+ then throw(maintenanceMSG)
406+ else dataToDelete
407+ else if (containsElement([chris, toString(this)], caller))
408+ then dataToDelete
409+ else throw("Art already minted, cannot delete")
410+ }
411+ }
412+ }
413+ }
414+
415+
416+
417+@Callable(i)
418+func sellArtwork (artId,price,maxMint,assetId) = if (!(dappRunning))
419+ then throw(maintenanceMSG)
420+ else {
421+ let id = toBase58String(i.transactionId)
422+ let caller = toBase58String(i.caller.bytes)
423+ let sellDate = lastBlock.timestamp
424+ let artworkName = getStringByKey(keyArtName(caller, artId))
425+ if ((artworkName == ""))
426+ then throw("This art doesn't match match your account")
427+ else {
428+ let exportCID = getStringByKey(keyArtExportCid(caller, artId))
429+ if ((size(split(exportCID, "/")[0]) != 59))
430+ then throw("You cannot sell art with no export file")
431+ else {
432+ let exportHash = getStringByKey(keyArtExportHash(caller, artId))
433+ if ((size(exportHash) != 64))
434+ then throw("You cannot sell art with no export hash")
435+ else if (if (if ((assetId != toBase58String(signAssetId)))
436+ then (assetId != toBase58String(wavesAssetId))
437+ else false)
438+ then (assetId != toBase58String(usdnAssetId))
439+ else false)
440+ then throw("Only SIGN, USDN or WAVES accepted")
441+ else {
442+ let minSellWaves = if (unitTest)
443+ then 1
444+ else getIntegerByKeyFromOracle("waves_min_sell")
445+ let minSellUsdn = 1000000
446+ let minSellSign = if (unitTest)
447+ then 1
448+ else (getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId))) * 2)
449+ if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
450+ then (minSellUsdn > price)
451+ else false)
452+ then (price != 0)
453+ else false)
454+ then true
455+ else if (if ((assetId == toBase58String(signAssetId)))
456+ then (minSellSign > price)
457+ else false)
458+ then (price != 0)
459+ else false)
460+ then true
461+ else if (if ((assetId == toBase58String(wavesAssetId)))
462+ then (minSellWaves > price)
463+ else false)
464+ then (price != 0)
465+ else false)
466+ then throw("Wrong minimum sell price")
467+ else {
468+ let userIsRegistered = getStringByKeyFromUsers(keyUserStatus(caller))
469+ if (if ((userIsRegistered == ""))
470+ then true
471+ else (userIsRegistered == userAllowed))
472+ then throw("Register this account first")
473+ else if ((userIsRegistered == userSuspended))
474+ then throw("Account suspended")
475+ else if ((userIsRegistered == userRemoved))
476+ then throw("Account deleted")
477+ else {
478+ let amountSold = getIntegerByKey(keyArtIssued(caller, artId))
479+ let maxCanSell = getIntegerByKey(keyArtMaxMint(caller, artId))
480+ if ((maxMint > 10))
481+ then throw("10 editions max per artwork")
482+ else if (if ((amountSold != 0))
483+ then (amountSold == maxCanSell)
484+ else false)
485+ then throw("Max edition reached.")
486+ else if (if ((amountSold > 0))
487+ then (maxCanSell != maxMint)
488+ else false)
489+ then throw("Cannot change maximum issuable anymore")
490+ else {
491+ let sellStatus = if (if ((price > 0))
492+ then (maxMint > 0)
493+ else false)
494+ then true
495+ else false
496+[BooleanEntry(keyArtOnSale(caller, artId), sellStatus), IntegerEntry(keyArtPrice(caller, artId), price), IntegerEntry(keyArtMaxMint(caller, artId), maxMint), StringEntry(keyArtAssetIdAccepted(caller, artId), assetId)]
497+ }
498+ }
499+ }
500+ }
501+ }
502+ }
503+ }
504+
505+
506+
507+@Callable(i)
508+func buyArtwork (artId,issuer) = if (!(dappRunning))
509+ then throw(maintenanceMSG)
510+ else {
511+ let id = toBase58String(i.transactionId)
512+ let caller = toBase58String(i.caller.bytes)
513+ let totalNFT = getIntegerByKey("total_nft_issued")
514+ let signID = getStringByKey(keyArtSignID(issuer, artId))
515+ let artworkName = getStringByKey(keyArtName(issuer, artId))
516+ if ((artworkName == ""))
517+ then throw("Art doesn't exist")
518+ else {
519+ let displayCID = getStringByKey(keyArtDisplayCid(issuer, artId))
520+ let exportCID = getStringByKey(keyArtExportCid(issuer, artId))
521+ let exportHash = getStringByKey(keyArtExportHash(issuer, artId))
522+ let licenceCID = getStringByKey(keyArtLicenceCid(issuer, artId))
523+ let licenceHash = getStringByKey(keyArtLicenceHash(issuer, artId))
524+ let description = take(getStringByKey(keyArtDesc(issuer, artId)), 50)
525+ let isOnSale = getBooleanByKey(keyArtOnSale(issuer, artId))
526+ let amountSold = getIntegerByKey(keyArtIssued(issuer, artId))
527+ let artworkPrice = getIntegerByKey(keyArtPrice(issuer, artId))
528+ let priceAssetId = getStringByKey(keyArtAssetIdAccepted(issuer, artId))
529+ let sourceHash = getStringByKey(keyArtHashByTxidAddr(issuer, artId))
530+ let maxCanSell = getIntegerByKey(keyArtMaxMint(issuer, artId))
531+ if (if (if ((0 >= artworkPrice))
532+ then true
533+ else !(isOnSale))
534+ then true
535+ else (0 >= maxCanSell))
536+ then throw("Art not for sale")
537+ else {
538+ let payment = value(i.payments[0])
539+ let amount = value(payment.amount)
540+ let assetId = if (!(isDefined(payment.assetId)))
541+ then unit
542+ else if (if ((size(priceAssetId) > 0))
543+ then (toBase58String(value(payment.assetId)) == priceAssetId)
544+ else false)
545+ then payment.assetId
546+ else throw("Wrong asset id")
547+ if (if ((assetId == unit))
548+ then (priceAssetId != "")
549+ else false)
550+ then throw("Wrong asset id")
551+ else {
552+ let isWhitelisted = checkWhitelist(issuer)
553+ let cut = if ((isWhitelisted == 1))
554+ then 0
555+ else if ((priceAssetId == toBase58String(signAssetId)))
556+ then 8
557+ else 10
558+ let amountForSign = fraction(amount, cut, 100)
559+ let amountForCreator = (amount - amountForSign)
560+ if ((amountSold == maxCanSell))
561+ then throw("Art sold out")
562+ else if ((artworkPrice != amount))
563+ then throw("Payment don't match")
564+ else {
565+ let newAmountSold = (amountSold + 1)
566+ let entryDate = lastBlock.timestamp
567+ let issueMeta = ((((((((((((((((((((((((((("Creator: " + issuer) + ",
568+ ArtID: ") + artId) + ",
569+ SignID: ") + signID) + ",
570+ Artwork name: ") + artworkName) + ",
571+ Artwork description: ") + description) + ",
572+ Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell)) + ",
573+ Max issuable: ") + toString(maxCanSell)) + ",
574+ Source hash: ") + sourceHash) + ",
575+ Display cid: ") + displayCID) + ",
576+ Export cid: ") + exportCID) + ",
577+ Export hash: ") + exportHash) + ",
578+ Licence cid: ") + licenceCID) + ",
579+ Licence hash: ") + licenceHash)
580+ let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
581+ let idNFT = calculateAssetId(issueNFT)
582+ let sellStatus = if ((newAmountSold == maxCanSell))
583+ then false
584+ else true
585+[IntegerEntry(keyArtIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)), StringEntry(((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer), ((((((((((caller + "_") + toString(entryDate)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyArtOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(i.caller, 1, idNFT)]
586+ }
587+ }
588+ }
589+ }
590+ }
591+
592+

github/deemru/w8io/6500d08 
50.89 ms