tx · 6Rves9b77nNNdiPQadB7YZUBaVVqckYwnNSPXR6Sm3fs

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01400000 Waves

2021.12.13 14:18 [1832412] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "6Rves9b77nNNdiPQadB7YZUBaVVqckYwnNSPXR6Sm3fs", "fee": 1400000, "feeAssetId": null, "timestamp": 1639394318818, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "2JCd8ezx3gWaeA39MU84kbzoD2r3LwPaYXPmEkicBbhhZ3ZrWmQKDyi9tfhtAj5JQ57t4NyoDk36QugjnGmMFkyQ" ], "script": "base64:AAIFAAAAAAAAAFQIAhIOCgwICAgICAgICAgICAgSDQoLCAgICAgICAgICAgSBgoECAgICBIECgIICBIHCgUIAQEIARIECgIICBIECgIICBIGCgQICAgIEgYKBAgICAgAAABHAAAAAAh1bml0VGVzdAcAAAAACW9yYWNsZUZlZQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjJzNVJ0YUhQQmVuQ3N4MkVDY29GUmJZSHgzbm9aaFhXMQAAAAAIc2lnbkRhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM05DMjhoU2l2cm1zVFVYYVlEMXg2TDM2Mko0WnBVbm9UZEIAAAAAC2ZlZVJlY2VpdmVyAgAAACMzTjFFNnRYZGRSb1ZhUmZROWRRM3ZnNUxhVzJmc2Q4SEt1YgAAAAAIdXNlckRhcHADBQAAAAh1bml0VGVzdAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjh4WGFZakUyN0FhNzlkNWhIcmhIdTlIYUZvVEJtaERFagAAAAANd2hpdGVsaXN0RGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjZCYVYxZENCNHpnNDNnb05OSGFDdHZSMTNCY3lKNUdzcQAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAt1c2RuQXNzZXRJZAEAAAAgD/IcEqzkxDya7EYaqyWosOy6BytGzG2IcvC14pJJAbQAAAAADHdhdmVzQXNzZXRJZAEAAAAAAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABGpvZXACAAAAIzNNem00Vkx3c045dVp3YlRNelBqM1h1eFY2a0VmQVI4VUROAAAAAAdzaWduQ3V0AAAAAAAAAAAHAAAAAAt1c2RuV2F2ZUN1dAAAAAAAAAAACgAAAAAOZGVmYXVsdExpY2VuY2UCAAAAR2JhZnliZWlmdXlvNHBxdTU0aXNtcWd0YjZlNGg2a2t2Z3g3emc0dTN6aWJoMnI3eTZtYjY0aTdienphL2xpY2VuY2UucGRmAAAAABJkZWZhdWx0SGFzaExpY2VuY2UCAAAAQGE4Nzc1OGMzNTRlMzBhOWU3OGZiODRmYTNhMDAxMGE1MDkwYWIyMGRmMGJlMTFhZDQ1YjU3MjBjYzE4N2U2MzkAAAAAC2RhcHBSdW5uaW5nCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX2RhcHBfaXNfcnVubmluZwYAAAAADm1haW50ZW5hbmNlTVNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX21haW50ZW5hbmNlX21zZwIAAAAAAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAAC3VzZXJBbGxvd2VkAgAAAAdBTExPV0VEAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAABlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAlvcmFjbGVGZWUFAAAAA2tleQIAAAAfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAAAQAAAA5jaGVja1doaXRlbGlzdAAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAADXdoaXRlbGlzdERhcHAFAAAAA2tleQAAAAAAAAAAAAEAAAAPZ2V0Qm9vbGVhbkJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5BwAAAAAZY3Vy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YW1vdW50Rm9yQ3JlYXRvcgUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZmVlUmVjZWl2ZXIFAAAADWFtb3VudEZvclNpZ24FAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAKcmVjZWl2ZU5GVAAAAAAAAAAAAQUAAAAFaWRORlQFAAAAA25pbAMFAAAABWlzQmlkCQAETAAAAAIFAAAACHNvbGREYXRhCQAETAAAAAIFAAAACWJpZFVwZGF0ZQkABEwAAAACBQAAAAliaWREZWxPbGQFAAAABmJ1eVJlcwkABEwAAAACBQAAAAhzb2xkRGF0YQUAAAAGYnV5UmVzAAAACQAAAAFpAQAAAAphZGRBcnR3b3JrAAAADAAAAApzaGEyNTZIYXNoAAAABnNpZ25JRAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAApjaWREaXNwbGF5AAAADHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlAAAAB2NyYXdsZXIEAAAADSR0MDE2Njc1MTY3MTYJAQAAAAxpZENhbGxlckRhdGUAAAABBQAAAAFpBAAAAAVhcnRJZAgFAAAADSR0MDE2Njc1MTY3MTYAAAACXzEEAAAABmNhbGxlcggFAAAADSR0MDE2Njc1MTY3MTYAAAACXzIEAAAABGRhdGUIBQAAAA0kdDAxNjY3NTE2NzE2AAAAAl8zAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAkAAAIAAAABAgAAACRIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0EAAAADSR0MDE2ODE3MTY4ODYJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDE2ODE3MTY4ODYAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTY4MTcxNjg4NgAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAkFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAANJHQwMTcxMDUxNzE0NwkBAAAAD3ZhbGlkYXRlUGF5bWVudAAAAAEFAAAAAWkEAAAABmFtb3VudAgFAAAADSR0MDE3MTA1MTcxNDcAAAACXzEEAAAAB2Fzc2V0SWQIBQAAAA0kdDAxNzEwNTE3MTQ3AAAAAl8yAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAGYW1vdW50CQAAAgAAAAECAAAAFFNvbWV0aGluZyB3ZW50IHdyb25nBAAAAAplbnRyeUV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAASa2V5VHhpZEJ5SGFzaE93bmVyAAAAAgUAAAAKc2hhMjU2SGFzaAUAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAKZW50cnlFeGlzdAIAAAAACQAAAgAAAAECAAAAFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAAAAAloYXNoRXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA5rZXlPd25lckJ5SGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gDCQEAAAACIT0AAAACBQAAAAloYXNoRXhpc3QCAAAAAAkAAAIAAAABAgAAABdIYXNoIGFscmVhZHkgcmVnaXN0ZXJlZAQAAAAPaXNTaWduQ2VydGlmaWVkCQEAAAAUY2hlY2tTaWduQ2VydGlmaWNhdGUAAAADBQAAAAZzaWduSUQFAAAABmNhbGxlcgUAAAAKc2hhMjU2SGFzaAMJAQAAAAEhAAAAAQUAAAAPaXNTaWduQ2VydGlmaWVkCQAAAgAAAAECAAAALFNpZ24gQ2VydGlmaWNhdGUgbm90IGZv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AAAJY2lkRXhwb3J0AAAADXNoYTI1NkxpY2VuY2UAAAAKY2lkTGljZW5jZQAAAAdjcmF3bGVyAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwQAAAAGY2FsbGVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADSR0MDE5ODc5MTk5NDgJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDE5ODc5MTk5NDgAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTk4NzkxOTk0OAAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAkFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAB2tleU5hbWUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQDCQAAAAAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAAA9FbnRyeSBub3QgZm91bmQEAAAABGZsYWcJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAdrZXlGbGFnAAAAAgUAAAAGY2FsbGVyBQAAAAR0eGlkAwkAAAAAAAACBQAAAARmbGFnAgAAAAdJTExFR0FMCQAAAgAAAAECAAAAHUNhbm5vdCB1cGRhdGUgSUxMRUdBTCBhcnR3b3JrAwkBAAAAASEAAAABCQEAAAALaXNBcnRNaW50ZWQAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleU5hbWUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleURlc2MAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlEaXNwbGF5Q2lkAAAAAgUAAAAGY2FsbGVyBQAAAAR0eGlkBQAAAApjaWREaXNwbGF5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlFeHBvcnRDaWQAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAACWNpZEV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5RXhwb3J0SGFzaAAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAUAAAAMc2hhMjU2RXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlMaWNlbmNlQ2lkAAAAAgUAAAAGY2FsbGVyBQAAAAR0eGlkBQAAAApsaWNlbmNlQ0lECQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5rZXlMaWNlbmNlSGFzaAAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAUAAAALbGljZW5jZUhhc2gJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleVRhZ3MAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAABHRhZ3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleVR5cGUAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAABHR5cGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUNyYXdsZXIAAAACBQAAAAZjYWxsZXIFAAAABHR4aWQFAAAAB2NyYXdsZXIFAAAAA25pbAkAAAIAAAABAgAAAA5BbHJlYWR5IG1pbnRlZAAAAAFpAQAAAAtmbGFnQXJ0d29yawAAAAQAAAAFYXJ0SWQAAAAEYWRkcgAAAARmbGFnAAAABG5vdGUEAAAADSR0MDIxMzczMjE0MDYJAQAAAAxpZENhbGxlckRhdGUAAAABBQAAAAFpBAAAAAJpZAgFAAAADSR0MDIxMzczMjE0MDYAAAACXzEEAAAABmNhbGxlcggFAAAADSR0MDIxMzczMjE0MDYAAAACXzIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAVjaHJpcwkABEwAAAACCQAEJQAAAAEFAAAABHRoaXMFAAAAA25pbAUAAAAGY2FsbGVyAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgIAAAAHQ09OU0VOVAkABEwAAAACAgAAAAAJAARMAAAAAgIAAAAPQ0hBTkdFX1JFUVVJUkVECQAETAAAAAICAAAAB0ZMQUdHRUQJAARMAAAAAgIAAAAHSUxMRUdBTAUAAAADbmlsBQAAAARmbGFnCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlGbGFnAAAAAgUAAAAEYWRkcgUAAAAFYXJ0SWQFAAAABGZsYWcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB2tleU5vdGUAAAACBQAAAARhZGRyBQAAAAVhcnRJZAUAAAAEbm90ZQUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAOVW5rbm93IHN0YXR1cyAFAAAABGZsYWcJAAACAAAAAQIAAAATWW91IGFyZSBub3QgYWxsb3dlZAAAAAFpAQAAAA1kZWxldGVBcnR3b3JrAAAAAgAAAAVhcnRJZAAAAARhZGRyBAAAAA0kdDAyMTg0MjIxODc1CQEAAAAMaWRDYWxsZXJEYXRlAAAAAQUAAAABaQQAAAACaWQIBQAAAA0kdDAyMTg0MjIxODc1AAAAAl8xBAAAAAZjYWxsZXIIBQAAAA0kdDAyMTg0MjIxODc1AAAAAl8yBAAAAAlhZGRyVG9Vc2UDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAVjaHJpcwkABEwAAAACBQAAAARqb2VwCQAETAAAAAIJAAQlAAAAAQUAAAAEdGhpcwUAAAADbmlsBQAAAAZjYWxsZXIFAAAABGFkZHIFAAAABmNhbGxlcgQAAAAKZW50cnlFeGlzdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAHa2V5TmFtZQAAAAIFAAAACWFkZHJUb1VzZQUAAAAFYXJ0SWQCAAAAIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzAwkAAAAAAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MEAAAACnNoYTI1Nkhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFrZXlIYXNoQnlUeGlkQWRkcgAAAAIFAAAACWFkZHJUb1VzZQUAAAAFYXJ0SWQDCQAAAAAAAAIFAAAACnNoYTI1Nkhhc2gCAAAAAAkAAAIAAAABAgAAACVObyBhcnQgaGFzaCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAAAAAZzaWduSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAlrZXlTaWduSUQAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkAwkAAAAAAAACBQAAAAZzaWduSUQCAAAAAAkAAAIAAAABAgAAABNObyBTSUdOIElEIG1hdGNoaW5nBAAAAAxkYXRhVG9EZWxldGUJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAB2tleURhdGUAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAdrZXlOYW1lAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5RGVzYwAAAAIFAAAACWFkZHJUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADWtleURpc3BsYXlDaWQAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAxrZXlFeHBvcnRDaWQAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA1rZXlFeHBvcnRIYXNoAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAOa2V5TGljZW5jZUhhc2gAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA1rZXlMaWNlbmNlQ2lkAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5VHlwZQAAAAIFAAAACWFkZHJUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAB2tleVRhZ3MAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlNYXhNaW50AAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAJa2V5U2lnbklEAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAJa2V5SXNzdWVkAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAJa2V5T25TYWxlAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5RmxhZwAAAAIFAAAACWFkZHJUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACGtleVByaWNlAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAASa2V5QXNzZXRJZEFjY2VwdGVkAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAOa2V5T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA1rZXlpZEJ5U2lnbmlkAAAAAgUAAAAJYWRkclRvVXNlBQAAAAZzaWduSUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEmtleVR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAACWFkZHJUb1VzZQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5RW5kU2FsZQAAAAIFAAAACWFkZHJUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAB2tleU5vdGUAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlDcmF3bGVyAAAAAgUAAAAJYWRkclRvVXNlBQAAAAVhcnRJZAUAAAADbmlsAwkBAAAAASEAAAABCQEAAAALaXNBcnRNaW50ZWQAAAACBQAAAAlhZGRyVG9Vc2UFAAAABWFydElkAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwUAAAAMZGF0YVRvRGVsZXRlAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAFY2hyaXMJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzBQAAAANuaWwFAAAABmNhbGxlcgUAAAAMZGF0YVRvRGVsZXRlCQAAAgAAAAECAAAAKEFydCBhbHJlYWR5IG1pbnRlZCwgeW91IGNhbm5vdCBkZWxldGUgaXQAAAABaQEAAAALc2VsbEFydHdvcmsAAAAFAAAABWFydElkAAAABXByaWNlAAAAB21heE1pbnQAAAAHYXNzZXRJZAAAAAhibG9ja0VuZAQAAAANJHQwMjQ2NDgyNDY4MQkBAAAADGlkQ2FsbGVyRGF0ZQAAAAEFAAAAAWkEAAAAAmlkCAUAAAANJHQwMjQ2NDgyNDY4MQAAAAJfMQQAAAAGY2FsbGVyCAUAAAANJHQwMjQ2NDgyNDY4MQAAAAJfMgQAAAALYXJ0d29ya05hbWUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAdrZXlOYW1lAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXJ0d29ya05hbWUCAAAAAAkAAAIAAAABAgAAACNUaGlzIGFydCBkb2Vzbid0IG1hdGNoIHlvdXIgYWNjb3VudAQAAAAEZmxhZwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAB2tleUZsYWcAAAACBQAAAAZjYWxsZXIFAAAABWFydElkAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgIAAAAPQ0hBTkdFX1JFUVVJUkVECQAETAAAAAICAAAAB0ZMQUdHRUQJAARMAAAAAgIAAAAHSUxMRUdBTAUAAAADbmlsBQAAAARmbGFnCQAAAgAAAAECAAAAD0ZsYWdnZWQgYXJ0d29yawQAAAAGYmlkTmJyCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAABWFydElkAwkAAGYAAAACAAAAAAAAAAAABQAAAAhibG9ja0VuZAkAAAIAAAABAgAAAAxOZWdhdGl2ZSBlbmQDAwkAAGYAAAACBQAAAAhibG9ja0VuZAAAAAAAAAAAAAMJAQAAAAIhPQAAAAIFAAAAB21heE1pbnQAAAAAAAAAAAEGCQEAAAACIT0AAAACBQAAAAVwcmljZQAAAAAAAAAAAAcJAAACAAAAAQIAAAA6VGltZWQgb2ZmZXIgb25seSBhbGxvd2VkIGZvciB1bmlxdWUgZWRpdGlvbiBhbmQgb2ZmZXIgb25seQQAAAAKYmFzZUhlaWdodAMJAAAAAAAAAgUAAAAIYmxvY2tFbmQAAAAAAAAAAAAAAAAAAAAAAAAFAAAABmhlaWdodAMJAQAAAAEhAAAAAQkBAAAAEGFjY2VwdGVkQXNzZXRJZHMAAAABBQAAAAdhc3NldElkCQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQMJAQAAAAEhAAAAAQkBAAAAD3ZhbGlkYXRlTWluU2VsbAAAAAIFAAAAB2Fzc2V0SWQFAAAABXByaWNlCQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAAJY2hlY2tVc2VyCQEAAAAMdmFsaWRhdGVVc2VyAAAAAQUAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAJY2hlY2tVc2VyAgAAAAAJAAACAAAAAQUAAAAJY2hlY2tVc2VyBAAAAAphbW91bnRTb2xkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAACWtleUlzc3VlZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQEAAAACm1heENhblNlbGwJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAKa2V5TWF4TWludAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQDCQAAZgAAAAIFAAAAB21heE1pbnQAAAAAAAAAAGQJAAACAAAAAQIAAAAcMTAwIGVkaXRpb25zIG1heCBwZXIgYXJ0d29yawMDCQEAAAACIT0AAAACBQAAAAphbW91bnRTb2xkAAAAAAAAAAAACQAAAAAAAAIFAAAACmFtb3VudFNvbGQFAAAACm1heENhblNlbGwHCQAAAgAAAAECAAAAFE1heCBlZGl0aW9uIHJlYWNoZWQuAwMJAABmAAAAAgUAAAAKYW1vdW50U29sZAAAAAAAAAAAAAkBAAAAAiE9AAAAAgUAAAAKbWF4Q2FuU2VsbAUAAAAHbWF4TWludAcJAAACAAAAAQIAAAAmQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIGFueW1vcmUDAwkAAGYAAAACBQAAAAZiaWROYnIAAAAAAAAAAAAJAQAAAAIhPQAAAAIFAAAACm1heENhblNlbGwFAAAAB21heE1pbnQHCQAAAgAAAAECAAAAMUNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSB3aXRoIGFjdGl2ZSBvcmRlcnMEAAAACnNlbGxTdGF0dXMDAwkAAGYAAAACBQAAAAVwcmljZQAAAAAAAAAAAAkAAGYAAAACBQAAAAdtYXhNaW50AAAAAAAAAAAABwYHCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAJa2V5T25TYWxlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAKc2VsbFN0YXR1cwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAACGtleVByaWNlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAFcHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAprZXlNYXhNaW50AAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAHbWF4TWludAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5QXNzZXRJZEFjY2VwdGVkAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAACmtleUVuZFNhbGUAAAACBQAAAAZjYWxsZXIFAAAABWFydElkCQAAZAAAAAIFAAAACmJhc2VIZWlnaHQFAAAACGJsb2NrRW5kBQAAAANuaWwAAAABaQEAAAAKYnV5QXJ0d29yawAAAAIAAAAFYXJ0SWQAAAAGaXNzdWVyCQEAAAAHYnV5TWludAAAAAUFAAAAAWkFAAAABWFydElkBQAAAAZpc3N1ZXICAAAAAAIAAAAAAAAAAWkBAAAABnNldEJpZAAAAAIAAAAFYXJ0SWQAAAAGaXNzdWVyBAAAAA0kdDAyNjkzODI2OTc2CQEAAAAMaWRDYWxsZXJEYXRlAAAAAQUAAAABaQQAAAACaWQIBQAAAA0kdDAyNjkzODI2OTc2AAAAAl8xBAAAAAZjYWxsZXIIBQAAAA0kdDAyNjkzODI2OTc2AAAAAl8yBAAAAARkYXRlCAUAAAANJHQwMjY5MzgyNjk3NgAAAAJfMwQAAAANJHQwMjY5ODEyNzAxNwkBAAAACWlzUGF5bWVudAAAAAEFAAAAAWkEAAAAB3BheW1lbnQIBQAAAA0kdDAyNjk4MTI3MDE3AAAAAl8xBAAAAAZhbW91bnQIBQAAAA0kdDAyNjk4MTI3MDE3AAAAAl8yBAAAAAdhc3NldElkAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAIAAAAFV0FWRVMJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAQAAAAIYmxvY2tFbmQJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAKa2V5RW5kU2FsZQAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQDAwkBAAAAAiE9AAAAAgUAAAAIYmxvY2tFbmQAAAAAAAAAAAAJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAAhibG9ja0VuZAcJAAACAAAAAQIAAAALU2FsZSBlbmRlZC4EAAAABmJpZE5icgkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAVhcnRJZAMJAQAAAAEhAAAAAQkBAAAAEGFjY2VwdGVkQXNzZXRJZHMAAAABBQAAAAdhc3NldElkCQAAAgAAAAECAAAAEmFzc2V0IG5vdCBhY2NlcHRlZAMJAQAAAAEhAAAAAQkBAAAAD3ZhbGlkYXRlTWluU2VsbAAAAAIFAAAAB2Fzc2V0SWQFAAAABmFtb3VudAkAAAIAAAABAgAAAA5Xcm9uZyBtaW4gc2VsbAQAAAAKYW1vdW50U29sZAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAlrZXlJc3N1ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAptYXhDYW5TZWxsCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAACmtleU1heE1pbnQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAGcAAAACAAAAAAAAAAAABQAAAAptYXhDYW5TZWxsCQAAAgAAAAECAAAAI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAAGcAAAACBQAAAAphbW91bnRTb2xkBQAAAAptYXhDYW5TZWxsCQAAAgAAAAECAAAAGFNvbGQgb3V0LCB5b3UgY2Fubm90IGJpZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEYmlkXwUAAAAFYXJ0SWQCAAAAAV8FAAAABmlzc3VlcgIAAAABXwUAAAAGY2FsbGVyAgAAAAFfBQAAAAJpZAIAAAAFX09QRU4JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAHYXNzZXRJZAIAAAABXwkAAaQAAAABBQAAAAZhbW91bnQCAAAAAV8JAAGkAAAAAQUAAAAEZGF0ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAABWFydElkCQAAZAAAAAIFAAAABmJpZE5icgAAAAAAAAAAAQUAAAADbmlsAAAAAWkBAAAACWFjY2VwdEJpZAAAAAQAAAAFYXJ0SWQAAAAGaXNzdWVyAAAABWJpZElkAAAACGJpZE93bmVyBAAAAAZjYWxsZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAIhPQAAAAIFAAAABmNhbGxlcgUAAAAGaXNzdWVyCQAAAgAAAAECAAAAGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24JAQAAAAdidXlNaW50AAAABQUAAAABaQUAAAAFYXJ0SWQFAAAABmlzc3VlcgUAAAAFYmlkSWQFAAAACGJpZE93bmVyAAAAAWkBAAAACWNhbmNlbEJpZAAAAAQAAAAFYXJ0SWQAAAAGaXNzdWVyAAAABWJpZElkAAAACGJpZE93bmVyBAAAAA0kdDAyODQ0NDI4NTAzCQEAAAAMaWRDYWxsZXJEYXRlAAAAAQUAAAABaQQAAAACaWQIBQAAAA0kdDAyODQ0NDI4NTAzAAAAAl8xBAAAAAZjYWxsZXIIBQAAAA0kdDAyODQ0NDI4NTAzAAAAAl8yBAAAAARkYXRlCAUAAAANJHQwMjg0NDQyODUwMwAAAAJfMwMDCQEAAAACIT0AAAACBQAAAAZjYWxsZXIFAAAACGJpZE93bmVyCQEAAAACIT0AAAACBQAAAAZjYWxsZXIFAAAABmlzc3VlcgcJAAACAAAAAQIAAAAZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgQAAAANcmV0dXJuTW9uZXlUbwMJAAAAAAAAAgUAAAAGY2FsbGVyBQAAAAZpc3N1ZXIFAAAACGJpZE93bmVyBQAAAAZjYWxsZXIEAAAABmJpZE5icgkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAVhcnRJZAQAAAAKYmlkRGF0YUtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARiaWRfBQAAAAVhcnRJZAIAAAABXwUAAAAGaXNzdWVyAgAAAAFfBQAAAAhiaWRPd25lcgIAAAABXwUAAAAFYmlkSWQEAAAAB2JpZERhdGEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAAEsAAAAAgUAAAAKYmlkRGF0YUtleQIAAAAFX09QRU4DCQAAAAAAAAIFAAAAB2JpZERhdGECAAAAAAkAAAIAAAABAgAAAA1CaWQgbm90IGZvdW5kBAAAAApiaWREYXRhQXJyCQAEtQAAAAIFAAAAB2JpZERhdGECAAAAAV8EAAAAB2Fzc2V0SWQJAQAAAA1nZXRCaWRBc3NldElkAAAAAQkAAZEAAAACBQAAAApiaWREYXRhQXJyAAAAAAAAAAAABAAAAAliaWRTdGF0dXMCAAAACENBTkNFTEVECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgUAAAAKYmlkRGF0YUtleQIAAAAFX09QRU4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAACmJpZERhdGFLZXkCAAAAAV8FAAAACWJpZFN0YXR1cwkAASwAAAACCQABLAAAAAIFAAAAB2JpZERhdGECAAAAAV8JAAGkAAAAAQUAAAAEZGF0ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAABWFydElkCQAAZQAAAAIFAAAABmJpZE5icgAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAANcmV0dXJuTW9uZXlUbwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACmJpZERhdGFBcnIAAAAAAAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAADij7Kv", "height": 1832412, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CH9pLBHaZidKNNdTU4VZrcyQAUWvuVehNE6NpoNArzfn Next: GNsKB5a6Aon6bv6eCFXUTNx8sNBzXEWes2DFMkRyRRKi Diff:
OldNewDifferences
129129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
130130
131131
132+func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
133+
134+
135+func keyCrawler (caller,artId) = ((("art_crawler_" + artId) + "_") + caller)
136+
137+
132138 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
133139
134140
233239
234240
235241 func validatePayment (i) = {
236- let $t091289164 = isPayment(i)
237- let payment = $t091289164._1
238- let amount = $t091289164._2
242+ let $t091939229 = isPayment(i)
243+ let payment = $t091939229._1
244+ let amount = $t091939229._2
239245 let assetId = if (if (isDefined(payment.assetId))
240246 then (payment.assetId == signAssetId)
241247 else false)
258264
259265
260266 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
261- let $t097579793 = isPayment(i)
262- let payment = $t097579793._1
263- let amount = $t097579793._2
267+ let $t098229858 = isPayment(i)
268+ let payment = $t098229858._1
269+ let amount = $t098229858._2
264270 let assetId = if (!(isDefined(payment.assetId)))
265271 then unit
266272 else if (if ((size(priceAssetId) > 0))
347353
348354
349355 func buyMint (i,artId,issuer,bidId,bidOwner) = {
350- let $t01201812075 = idCallerDate(i)
351- let id = $t01201812075._1
352- let caller = $t01201812075._2
353- let date = $t01201812075._3
356+ let $t01208312140 = idCallerDate(i)
357+ let id = $t01208312140._1
358+ let caller = $t01208312140._2
359+ let date = $t01208312140._3
354360 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
355361 then (bidOwner != "")
356362 else false)
406412 then throw(checkUser)
407413 else {
408414 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
409- let $t01382613982 = if (isBid)
415+ let $t01389114047 = if (isBid)
410416 then getPriceAssetIdFromBid(bidDataKey)
411417 else validatePriceAssetId(i, priceAssetId, artworkPrice)
412- let amount = $t01382613982._1
413- let assetId = $t01382613982._2
418+ let amount = $t01389114047._1
419+ let assetId = $t01389114047._2
414420 let isWhitelisted = checkWhitelist(issuer)
415421 let cut = if ((isWhitelisted > height))
416422 then 0
466472
467473
468474 @Callable(i)
469-func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
470- let $t01659316634 = idCallerDate(i)
471- let artId = $t01659316634._1
472- let caller = $t01659316634._2
473- let date = $t01659316634._3
475+func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
476+ let $t01667516716 = idCallerDate(i)
477+ let artId = $t01667516716._1
478+ let caller = $t01667516716._2
479+ let date = $t01667516716._3
474480 if (!(validateHash(sha256Hash)))
475481 then throw("Hash should be 64 characters maximum")
476482 else {
477- let $t01673516804 = setLIcence(cidLicence, sha256Licence)
478- let licenceCID = $t01673516804._1
479- let licenceHash = $t01673516804._2
483+ let $t01681716886 = setLIcence(cidLicence, sha256Licence)
484+ let licenceCID = $t01681716886._1
485+ let licenceHash = $t01681716886._2
480486 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
481487 if ((validateArtwork != ""))
482488 then throw("Something went wrong!")
483489 else {
484- let $t01702317065 = validatePayment(i)
485- let amount = $t01702317065._1
486- let assetId = $t01702317065._2
490+ let $t01710517147 = validatePayment(i)
491+ let amount = $t01710517147._1
492+ let assetId = $t01710517147._2
487493 if (!(isDefined(amount)))
488494 then throw("Something went wrong")
489495 else {
498504 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
499505 if (!(isSignCertified))
500506 then throw("Sign Certificate not found for this address.")
501- else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
507+ else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
502508 }
503509 }
504510 }
509515
510516
511517 @Callable(i)
512-func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
518+func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = if (!(dappRunning))
513519 then throw(maintenanceMSG)
514520 else {
515521 let caller = toBase58String(i.caller.bytes)
516- let $t01970519774 = setLIcence(cidLicence, sha256Licence)
517- let licenceCID = $t01970519774._1
518- let licenceHash = $t01970519774._2
522+ let $t01987919948 = setLIcence(cidLicence, sha256Licence)
523+ let licenceCID = $t01987919948._1
524+ let licenceHash = $t01987919948._2
519525 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
520526 if ((validateArtwork != ""))
521527 then throw("Something went wrong!")
528534 if ((flag == "ILLEGAL"))
529535 then throw("Cannot update ILLEGAL artwork")
530536 else if (!(isArtMinted(caller, txid)))
531- then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type)]
537+ then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler)]
532538 else throw("Already minted")
533539 }
534540 }
538544
539545 @Callable(i)
540546 func flagArtwork (artId,addr,flag,note) = {
541- let $t02112521158 = idCallerDate(i)
542- let id = $t02112521158._1
543- let caller = $t02112521158._2
547+ let $t02137321406 = idCallerDate(i)
548+ let id = $t02137321406._1
549+ let caller = $t02137321406._2
544550 if (containsElement([chris, toString(this)], caller))
545- then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "SUSPENDED", "FLAGGED", "ILLEGAL"], flag))
546- then [StringEntry(keyFlag(addr, artId), flag), StringEntry(((("art_note_" + artId) + "_") + addr), note)]
551+ then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
552+ then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
547553 else throw(("Unknow status " + flag))
548554 else throw("You are not allowed")
549555 }
552558
553559 @Callable(i)
554560 func deleteArtwork (artId,addr) = {
555- let $t02161321646 = idCallerDate(i)
556- let id = $t02161321646._1
557- let caller = $t02161321646._2
561+ let $t02184221875 = idCallerDate(i)
562+ let id = $t02184221875._1
563+ let caller = $t02184221875._2
558564 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
559565 then addr
560566 else caller
570576 if ((signID == ""))
571577 then throw("No SIGN ID matching")
572578 else {
573- let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addr, artId)), DeleteEntry(keyPrice(addr, artId)), DeleteEntry(keyAssetIdAccepted(addr, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId))]
579+ let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId))]
574580 if (!(isArtMinted(addrToUse, artId)))
575581 then if (!(dappRunning))
576582 then throw(maintenanceMSG)
587593
588594 @Callable(i)
589595 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
590- let $t02430524338 = idCallerDate(i)
591- let id = $t02430524338._1
592- let caller = $t02430524338._2
596+ let $t02464824681 = idCallerDate(i)
597+ let id = $t02464824681._1
598+ let caller = $t02464824681._2
593599 let artworkName = getStringByKey(keyName(caller, artId))
594600 if ((artworkName == ""))
595601 then throw("This art doesn't match your account")
596602 else {
597603 let flag = getStringByKey(keyFlag(caller, artId))
598- if (containsElement(["CHANGE_REQUIRED", "SUSPENDED", "FLAGGED", "ILLEGAL"], flag))
604+ if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
599605 then throw("Flagged artwork")
600606 else {
601607 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
660666
661667 @Callable(i)
662668 func setBid (artId,issuer) = {
663- let $t02660826646 = idCallerDate(i)
664- let id = $t02660826646._1
665- let caller = $t02660826646._2
666- let date = $t02660826646._3
667- let $t02665126687 = isPayment(i)
668- let payment = $t02665126687._1
669- let amount = $t02665126687._2
669+ let $t02693826976 = idCallerDate(i)
670+ let id = $t02693826976._1
671+ let caller = $t02693826976._2
672+ let date = $t02693826976._3
673+ let $t02698127017 = isPayment(i)
674+ let payment = $t02698127017._1
675+ let amount = $t02698127017._2
670676 let assetId = if (!(isDefined(payment.assetId)))
671677 then "WAVES"
672678 else toBase58String(value(payment.assetId))
707713
708714 @Callable(i)
709715 func cancelBid (artId,issuer,bidId,bidOwner) = {
710- let $t02811428340 = idCallerDate(i)
711- let id = $t02811428340._1
712- let caller = $t02811428340._2
713- let date = $t02811428340._3
716+ let $t02844428503 = idCallerDate(i)
717+ let id = $t02844428503._1
718+ let caller = $t02844428503._2
719+ let date = $t02844428503._3
714720 if (if ((caller != bidOwner))
715721 then (caller != issuer)
716722 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let unitTest = false
55
66 let oracleFee = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
77
88 let signDapp = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
99
1010 let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
1111
1212 let userDapp = if (unitTest)
1313 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1414 else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
1515
1616 let whitelistDapp = value(addressFromString("3N6BaV1dCB4zg43goNNHaCtvR13BcyJ5Gsq"))
1717
1818 let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
1919
2020 let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
2121
2222 let wavesAssetId = base58''
2323
2424 let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
2525
2626 let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
2727
2828 let signCut = 7
2929
3030 let usdnWaveCut = 10
3131
3232 let defaultLicence = "bafybeifuyo4pqu54ismqgtb6e4h6kkvgx7zg4u3zibh2r7y6mb64i7bzza/licence.pdf"
3333
3434 let defaultHashLicence = "a87758c354e30a9e78fb84fa3a0010a5090ab20df0be11ad45b5720cc187e639"
3535
3636 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3737
3838 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
3939
4040 let userSuspended = "SUSPENDED"
4141
4242 let userRemoved = "REMOVED"
4343
4444 let userUnregistered = "UNREGISTERED"
4545
4646 let userAllowed = "ALLOWED"
4747
4848 func getStringByKey (key) = valueOrElse(getString(this, key), "")
4949
5050
5151 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
5252
5353
5454 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
5555
5656
5757 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
5858
5959
6060 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
6161
6262
6363 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6464
6565 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6666 case a: String =>
6767 if (contains(a, sha256Hash))
6868 then true
6969 else false
7070 case _ =>
7171 false
7272 }
7373
7474
7575 func validateCID (cid) = if (contains(cid, "/"))
7676 then if (if ((76 > size(cid)))
7777 then (size(split(cid, "/")[0]) == 59)
7878 else false)
7979 then (16 > size(split(cid, "/")[1]))
8080 else false
8181 else false
8282
8383
8484 func validateHash (hash) = (size(hash) == 64)
8585
8686
8787 func keyUserStatus (caller) = ("user_status_" + caller)
8888
8989
9090 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9191
9292
9393 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9494
9595
9696 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9797
9898
9999 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
100100
101101
102102 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
103103
104104
105105 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
106106
107107
108108 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
109109
110110
111111 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
112112
113113
114114 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
115115
116116
117117 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
118118
119119
120120 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
121121
122122
123123 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
124124
125125
126126 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
127127
128128
129129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
130130
131131
132+func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
133+
134+
135+func keyCrawler (caller,artId) = ((("art_crawler_" + artId) + "_") + caller)
136+
137+
132138 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
133139
134140
135141 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
136142
137143
138144 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
139145
140146
141147 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
142148
143149
144150 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
145151
146152
147153 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
148154
149155
150156 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
151157
152158
153159 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
154160
155161
156162 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
157163 then throw("Wrong Display CID")
158164 else if (!(validateCID(cidExport)))
159165 then throw("Wrong Export CID")
160166 else if (if ((cidLicence != ""))
161167 then !(validateCID(cidLicence))
162168 else false)
163169 then throw("Wrong Licence CID")
164170 else true
165171
166172
167173 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
168174 then throw("Export Hash 64 char. max")
169175 else if (!(validateHash(sha256Licence)))
170176 then throw("Licence Hash 64 char. max")
171177 else true
172178
173179
174180 func validateString (str,max) = if ((size(str) == 0))
175181 then throw("Field cannot be is empty")
176182 else if ((size(str) > max))
177183 then throw((str + " is too long"))
178184 else true
179185
180186
181187 func validateUser (caller) = {
182188 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
183189 if (if ((userStatus == userUnregistered))
184190 then true
185191 else (userStatus == userAllowed))
186192 then "Register this account first with \"Account\" tab"
187193 else if ((userStatus == userSuspended))
188194 then "Account suspended"
189195 else if ((userStatus == userRemoved))
190196 then "Account removed"
191197 else ""
192198 }
193199
194200
195201 func setLIcence (cidLicence,sha256Licence) = {
196202 let cid = if ((size(cidLicence) == 0))
197203 then defaultLicence
198204 else cidLicence
199205 let hash = if ((size(sha256Licence) == 0))
200206 then defaultHashLicence
201207 else sha256Licence
202208 $Tuple2(cid, hash)
203209 }
204210
205211
206212 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags) = {
207213 let checkUser = validateUser(caller)
208214 if ((checkUser != ""))
209215 then throw(checkUser)
210216 else if ((size(cidDisplay) == 0))
211217 then throw("Display CID cannot be empty")
212218 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
213219 then throw("Problem with CID")
214220 else if (!(validateAllHash(sha256Export, licenceHash)))
215221 then throw("Problem with Hashes")
216222 else if (!(validateString(name, 100)))
217223 then throw("100 Char. max name")
218224 else if (!(validateString(description, 1000)))
219225 then throw("1000 Char. max description")
220226 else if ((size(split(tags, ",")) > 5))
221227 then throw("5 tags max.")
222228 else ""
223229 }
224230
225231
226232 func isPayment (i) = if ((size(i.payments) == 0))
227233 then throw("No payment attached")
228234 else {
229235 let payment = value(i.payments[0])
230236 let amount = value(payment.amount)
231237 $Tuple2(payment, amount)
232238 }
233239
234240
235241 func validatePayment (i) = {
236- let $t091289164 = isPayment(i)
237- let payment = $t091289164._1
238- let amount = $t091289164._2
242+ let $t091939229 = isPayment(i)
243+ let payment = $t091939229._1
244+ let amount = $t091939229._2
239245 let assetId = if (if (isDefined(payment.assetId))
240246 then (payment.assetId == signAssetId)
241247 else false)
242248 then payment.assetId
243249 else throw("Only SIGN token accepted as transaction fee")
244250 if ((amount != currentCertificationPrice))
245251 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
246252 else $Tuple2(amount, assetId)
247253 }
248254
249255
250256 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
251257 case b: Int =>
252258 if ((b != 0))
253259 then true
254260 else false
255261 case _ =>
256262 false
257263 }
258264
259265
260266 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
261- let $t097579793 = isPayment(i)
262- let payment = $t097579793._1
263- let amount = $t097579793._2
267+ let $t098229858 = isPayment(i)
268+ let payment = $t098229858._1
269+ let amount = $t098229858._2
264270 let assetId = if (!(isDefined(payment.assetId)))
265271 then unit
266272 else if (if ((size(priceAssetId) > 0))
267273 then (toBase58String(value(payment.assetId)) == priceAssetId)
268274 else false)
269275 then payment.assetId
270276 else throw("Wrong asset id")
271277 if (if ((assetId == unit))
272278 then (priceAssetId != "")
273279 else false)
274280 then throw("Wrong asset id")
275281 else if ((artworkPrice != amount))
276282 then throw("Payment don't match")
277283 else $Tuple2(amount, assetId)
278284 }
279285
280286
281287 func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
282288 then (assetId != toBase58String(wavesAssetId))
283289 else false)
284290 then (assetId != "WAVES")
285291 else false)
286292 then (assetId != toBase58String(usdnAssetId))
287293 else false)
288294 then throw("Only SIGN, USDN or WAVES accepted")
289295 else true
290296
291297
292298 func validateMinSell (assetId,price) = {
293299 let minSellWaves = if (unitTest)
294300 then 10
295301 else getIntegerByKeyFromOracle("waves_min_sell")
296302 let minSellUsdn = 1000000
297303 let minSellSign = if (unitTest)
298304 then 1
299305 else (currentCertificationPrice * 2)
300306 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
301307 then (minSellUsdn > price)
302308 else false)
303309 then (price != 0)
304310 else false)
305311 then true
306312 else if (if ((assetId == toBase58String(signAssetId)))
307313 then (minSellSign > price)
308314 else false)
309315 then (price != 0)
310316 else false)
311317 then true
312318 else if (if (if ((assetId == toBase58String(wavesAssetId)))
313319 then true
314320 else (assetId == "WAVES"))
315321 then (minSellWaves > price)
316322 else false)
317323 then (price != 0)
318324 else false)
319325 then throw("Wrong minimum sell price")
320326 else true
321327 }
322328
323329
324330 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
325331 then unit
326332 else fromBase58String(assetId)
327333
328334
329335 func getPriceAssetIdFromBid (bidDataKey) = {
330336 let bidData = getStringByKey((bidDataKey + "_OPEN"))
331337 if ((bidData == ""))
332338 then throw("Bid not found")
333339 else {
334340 let bidDataArr = split(bidData, "_")
335341 let bidAmount = parseIntValue(bidDataArr[1])
336342 let bidAssetId = getBidAssetId(bidDataArr[0])
337343 if ((0 >= bidAmount))
338344 then throw("Wrong amount")
339345 else $Tuple2(bidAmount, bidAssetId)
340346 }
341347 }
342348
343349
344350 func idCallerDate (i) = if (!(dappRunning))
345351 then throw(maintenanceMSG)
346352 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
347353
348354
349355 func buyMint (i,artId,issuer,bidId,bidOwner) = {
350- let $t01201812075 = idCallerDate(i)
351- let id = $t01201812075._1
352- let caller = $t01201812075._2
353- let date = $t01201812075._3
356+ let $t01208312140 = idCallerDate(i)
357+ let id = $t01208312140._1
358+ let caller = $t01208312140._2
359+ let date = $t01208312140._3
354360 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
355361 then (bidOwner != "")
356362 else false)
357363 then (bidId != "")
358364 else false)
359365 then true
360366 else false
361367 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
362368 if (if (if ((blockEnd != 0))
363369 then (height >= blockEnd)
364370 else false)
365371 then !(isBid)
366372 else false)
367373 then throw("Sale ended.")
368374 else {
369375 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
370376 let totalNFT = getIntegerByKey("total_nft_issued")
371377 let signID = getStringByKey(keySignID(issuer, artId))
372378 let artworkName = getStringByKey(keyName(issuer, artId))
373379 if ((artworkName == ""))
374380 then throw("Art doesn't exist")
375381 else {
376382 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
377383 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
378384 let artworkPrice = if (callerIsIssuer)
379385 then (currentCertificationPrice * 2)
380386 else getIntegerByKey(keyPrice(issuer, artId))
381387 let priceAssetId = if (callerIsIssuer)
382388 then toBase58String(signAssetId)
383389 else getStringByKey(keyAssetIdAccepted(issuer, artId))
384390 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
385391 if (if (if (!(isBid))
386392 then !(callerIsIssuer)
387393 else false)
388394 then if (if ((0 >= artworkPrice))
389395 then true
390396 else !(isOnSale))
391397 then true
392398 else (0 >= maxCanSell)
393399 else false)
394400 then throw("Art not for sale")
395401 else if (if (if (!(isBid))
396402 then callerIsIssuer
397403 else false)
398404 then (0 >= maxCanSell)
399405 else false)
400406 then throw("Max issuable not set")
401407 else {
402408 let checkUser = validateUser(issuer)
403409 if (if (isBid)
404410 then (checkUser != "")
405411 else false)
406412 then throw(checkUser)
407413 else {
408414 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
409- let $t01382613982 = if (isBid)
415+ let $t01389114047 = if (isBid)
410416 then getPriceAssetIdFromBid(bidDataKey)
411417 else validatePriceAssetId(i, priceAssetId, artworkPrice)
412- let amount = $t01382613982._1
413- let assetId = $t01382613982._2
418+ let amount = $t01389114047._1
419+ let assetId = $t01389114047._2
414420 let isWhitelisted = checkWhitelist(issuer)
415421 let cut = if ((isWhitelisted > height))
416422 then 0
417423 else if ((assetId == signAssetId))
418424 then signCut
419425 else usdnWaveCut
420426 let amountForSign = fraction(amount, cut, 100)
421427 let amountForCreator = (amount - amountForSign)
422428 if ((amountSold == maxCanSell))
423429 then throw("Art sold out")
424430 else {
425431 let newAmountSold = (amountSold + 1)
426432 let issueMeta = ((((((((((("Creator: " + issuer) + ",
427433 ArtID: ") + artId) + ",
428434 SignID: ") + signID) + ",
429435 Artwork name: ") + artworkName) + ",
430436 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
431437 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
432438 let idNFT = calculateAssetId(issueNFT)
433439 let sellStatus = if (if ((newAmountSold == maxCanSell))
434440 then true
435441 else !(isOnSale))
436442 then false
437443 else true
438444 let receiveNFT = if (if (if ((caller == issuer))
439445 then (bidOwner != "")
440446 else false)
441447 then (bidId != "")
442448 else false)
443449 then addressFromStringValue(bidOwner)
444450 else i.caller
445451 let assetIdBid = if (!(isDefined(assetId)))
446452 then "WAVES"
447453 else toBase58String(value(assetId))
448454 let bidData = getStringByKey((bidDataKey + "_OPEN"))
449455 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
450456 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
451457 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
452458 let soldValue = if (!(isBid))
453459 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
454460 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
455461 let soldData = StringEntry(soldKey, soldValue)
456462 let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(receiveNFT, 1, idNFT)]
457463 if (isBid)
458464 then [soldData, bidUpdate, bidDelOld] :: buyRes
459465 else soldData :: buyRes
460466 }
461467 }
462468 }
463469 }
464470 }
465471 }
466472
467473
468474 @Callable(i)
469-func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
470- let $t01659316634 = idCallerDate(i)
471- let artId = $t01659316634._1
472- let caller = $t01659316634._2
473- let date = $t01659316634._3
475+func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
476+ let $t01667516716 = idCallerDate(i)
477+ let artId = $t01667516716._1
478+ let caller = $t01667516716._2
479+ let date = $t01667516716._3
474480 if (!(validateHash(sha256Hash)))
475481 then throw("Hash should be 64 characters maximum")
476482 else {
477- let $t01673516804 = setLIcence(cidLicence, sha256Licence)
478- let licenceCID = $t01673516804._1
479- let licenceHash = $t01673516804._2
483+ let $t01681716886 = setLIcence(cidLicence, sha256Licence)
484+ let licenceCID = $t01681716886._1
485+ let licenceHash = $t01681716886._2
480486 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
481487 if ((validateArtwork != ""))
482488 then throw("Something went wrong!")
483489 else {
484- let $t01702317065 = validatePayment(i)
485- let amount = $t01702317065._1
486- let assetId = $t01702317065._2
490+ let $t01710517147 = validatePayment(i)
491+ let amount = $t01710517147._1
492+ let assetId = $t01710517147._2
487493 if (!(isDefined(amount)))
488494 then throw("Something went wrong")
489495 else {
490496 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
491497 if ((entryExist != ""))
492498 then throw("You already added it")
493499 else {
494500 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
495501 if ((hashExist != ""))
496502 then throw("Hash already registered")
497503 else {
498504 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
499505 if (!(isSignCertified))
500506 then throw("Sign Certificate not found for this address.")
501- else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
507+ else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
502508 }
503509 }
504510 }
505511 }
506512 }
507513 }
508514
509515
510516
511517 @Callable(i)
512-func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
518+func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = if (!(dappRunning))
513519 then throw(maintenanceMSG)
514520 else {
515521 let caller = toBase58String(i.caller.bytes)
516- let $t01970519774 = setLIcence(cidLicence, sha256Licence)
517- let licenceCID = $t01970519774._1
518- let licenceHash = $t01970519774._2
522+ let $t01987919948 = setLIcence(cidLicence, sha256Licence)
523+ let licenceCID = $t01987919948._1
524+ let licenceHash = $t01987919948._2
519525 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
520526 if ((validateArtwork != ""))
521527 then throw("Something went wrong!")
522528 else {
523529 let entryExist = getStringByKey(keyName(caller, txid))
524530 if ((entryExist == ""))
525531 then throw("Entry not found")
526532 else {
527533 let flag = getStringByKey(keyFlag(caller, txid))
528534 if ((flag == "ILLEGAL"))
529535 then throw("Cannot update ILLEGAL artwork")
530536 else if (!(isArtMinted(caller, txid)))
531- then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type)]
537+ then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler)]
532538 else throw("Already minted")
533539 }
534540 }
535541 }
536542
537543
538544
539545 @Callable(i)
540546 func flagArtwork (artId,addr,flag,note) = {
541- let $t02112521158 = idCallerDate(i)
542- let id = $t02112521158._1
543- let caller = $t02112521158._2
547+ let $t02137321406 = idCallerDate(i)
548+ let id = $t02137321406._1
549+ let caller = $t02137321406._2
544550 if (containsElement([chris, toString(this)], caller))
545- then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "SUSPENDED", "FLAGGED", "ILLEGAL"], flag))
546- then [StringEntry(keyFlag(addr, artId), flag), StringEntry(((("art_note_" + artId) + "_") + addr), note)]
551+ then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
552+ then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
547553 else throw(("Unknow status " + flag))
548554 else throw("You are not allowed")
549555 }
550556
551557
552558
553559 @Callable(i)
554560 func deleteArtwork (artId,addr) = {
555- let $t02161321646 = idCallerDate(i)
556- let id = $t02161321646._1
557- let caller = $t02161321646._2
561+ let $t02184221875 = idCallerDate(i)
562+ let id = $t02184221875._1
563+ let caller = $t02184221875._2
558564 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
559565 then addr
560566 else caller
561567 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
562568 if ((entryExist == ""))
563569 then throw("No art matching for this address")
564570 else {
565571 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
566572 if ((sha256Hash == ""))
567573 then throw("No art hash matching for this address")
568574 else {
569575 let signID = getStringByKey(keySignID(addrToUse, artId))
570576 if ((signID == ""))
571577 then throw("No SIGN ID matching")
572578 else {
573- let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addr, artId)), DeleteEntry(keyPrice(addr, artId)), DeleteEntry(keyAssetIdAccepted(addr, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId))]
579+ let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId))]
574580 if (!(isArtMinted(addrToUse, artId)))
575581 then if (!(dappRunning))
576582 then throw(maintenanceMSG)
577583 else dataToDelete
578584 else if (containsElement([chris, toString(this)], caller))
579585 then dataToDelete
580586 else throw("Art already minted, you cannot delete it")
581587 }
582588 }
583589 }
584590 }
585591
586592
587593
588594 @Callable(i)
589595 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
590- let $t02430524338 = idCallerDate(i)
591- let id = $t02430524338._1
592- let caller = $t02430524338._2
596+ let $t02464824681 = idCallerDate(i)
597+ let id = $t02464824681._1
598+ let caller = $t02464824681._2
593599 let artworkName = getStringByKey(keyName(caller, artId))
594600 if ((artworkName == ""))
595601 then throw("This art doesn't match your account")
596602 else {
597603 let flag = getStringByKey(keyFlag(caller, artId))
598- if (containsElement(["CHANGE_REQUIRED", "SUSPENDED", "FLAGGED", "ILLEGAL"], flag))
604+ if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
599605 then throw("Flagged artwork")
600606 else {
601607 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
602608 if ((0 > blockEnd))
603609 then throw("Negative end")
604610 else if (if ((blockEnd > 0))
605611 then if ((maxMint != 1))
606612 then true
607613 else (price != 0)
608614 else false)
609615 then throw("Timed offer only allowed for unique edition and offer only")
610616 else {
611617 let baseHeight = if ((blockEnd == 0))
612618 then 0
613619 else height
614620 if (!(acceptedAssetIds(assetId)))
615621 then throw("Something went wrong!")
616622 else if (!(validateMinSell(assetId, price)))
617623 then throw("Something went wrong!")
618624 else {
619625 let checkUser = validateUser(caller)
620626 if ((checkUser != ""))
621627 then throw(checkUser)
622628 else {
623629 let amountSold = getIntegerByKey(keyIssued(caller, artId))
624630 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
625631 if ((maxMint > 100))
626632 then throw("100 editions max per artwork")
627633 else if (if ((amountSold != 0))
628634 then (amountSold == maxCanSell)
629635 else false)
630636 then throw("Max edition reached.")
631637 else if (if ((amountSold > 0))
632638 then (maxCanSell != maxMint)
633639 else false)
634640 then throw("Cannot change maximum issuable anymore")
635641 else if (if ((bidNbr > 0))
636642 then (maxCanSell != maxMint)
637643 else false)
638644 then throw("Cannot change maximum issuable with active orders")
639645 else {
640646 let sellStatus = if (if ((price > 0))
641647 then (maxMint > 0)
642648 else false)
643649 then true
644650 else false
645651 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId), IntegerEntry(keyEndSale(caller, artId), (baseHeight + blockEnd))]
646652 }
647653 }
648654 }
649655 }
650656 }
651657 }
652658 }
653659
654660
655661
656662 @Callable(i)
657663 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
658664
659665
660666
661667 @Callable(i)
662668 func setBid (artId,issuer) = {
663- let $t02660826646 = idCallerDate(i)
664- let id = $t02660826646._1
665- let caller = $t02660826646._2
666- let date = $t02660826646._3
667- let $t02665126687 = isPayment(i)
668- let payment = $t02665126687._1
669- let amount = $t02665126687._2
669+ let $t02693826976 = idCallerDate(i)
670+ let id = $t02693826976._1
671+ let caller = $t02693826976._2
672+ let date = $t02693826976._3
673+ let $t02698127017 = isPayment(i)
674+ let payment = $t02698127017._1
675+ let amount = $t02698127017._2
670676 let assetId = if (!(isDefined(payment.assetId)))
671677 then "WAVES"
672678 else toBase58String(value(payment.assetId))
673679 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
674680 if (if ((blockEnd != 0))
675681 then (height >= blockEnd)
676682 else false)
677683 then throw("Sale ended.")
678684 else {
679685 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
680686 if (!(acceptedAssetIds(assetId)))
681687 then throw("asset not accepted")
682688 else if (!(validateMinSell(assetId, amount)))
683689 then throw("Wrong min sell")
684690 else {
685691 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
686692 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
687693 if ((0 >= maxCanSell))
688694 then throw("No max edition set for this artwork")
689695 else if ((amountSold >= maxCanSell))
690696 then throw("Sold out, you cannot bid")
691697 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
692698 }
693699 }
694700 }
695701
696702
697703
698704 @Callable(i)
699705 func acceptBid (artId,issuer,bidId,bidOwner) = {
700706 let caller = toBase58String(i.caller.bytes)
701707 if ((caller != issuer))
702708 then throw("You cannot do this action")
703709 else buyMint(i, artId, issuer, bidId, bidOwner)
704710 }
705711
706712
707713
708714 @Callable(i)
709715 func cancelBid (artId,issuer,bidId,bidOwner) = {
710- let $t02811428340 = idCallerDate(i)
711- let id = $t02811428340._1
712- let caller = $t02811428340._2
713- let date = $t02811428340._3
716+ let $t02844428503 = idCallerDate(i)
717+ let id = $t02844428503._1
718+ let caller = $t02844428503._2
719+ let date = $t02844428503._3
714720 if (if ((caller != bidOwner))
715721 then (caller != issuer)
716722 else false)
717723 then throw("You cannot do this action")
718724 else {
719725 let returnMoneyTo = if ((caller == issuer))
720726 then bidOwner
721727 else caller
722728 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
723729 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
724730 let bidData = getStringByKey((bidDataKey + "_OPEN"))
725731 if ((bidData == ""))
726732 then throw("Bid not found")
727733 else {
728734 let bidDataArr = split(bidData, "_")
729735 let assetId = getBidAssetId(bidDataArr[0])
730736 let bidStatus = "CANCELED"
731737 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
732738 }
733739 }
734740 }
735741
736742

github/deemru/w8io/026f985 
118.48 ms