tx · GXEcYHsnmxEefG8eydHmSXQGaTVUhNvwSUafJ2a741x5

3N8jKcYWjJn5GjrJV94rxzVk42TPk1rPLeu:  -0.01000000 Waves

2022.03.13 16:43 [1962261] smart account 3N8jKcYWjJn5GjrJV94rxzVk42TPk1rPLeu > SELF 0.00000000 Waves

{ "type": 13, "id": "GXEcYHsnmxEefG8eydHmSXQGaTVUhNvwSUafJ2a741x5", "fee": 1000000, "feeAssetId": null, "timestamp": 1647179014027, "version": 2, "chainId": 84, "sender": "3N8jKcYWjJn5GjrJV94rxzVk42TPk1rPLeu", "senderPublicKey": "914UmzBhcoS4onGGVcBRgb4VPV88m9VCFjsj5WWck5vm", "proofs": [ "8PnGaxNq97HmcjHXcKdsL4eJLAsy96WC5W8WrDB77HvYv3BUKBwQka7WEFsPSQMa8gkT4RvHHmbnrfkd63CeCj6" ], "script": "base64:AAIFAAAAAAAAAFgIAhIDCgEIEgMKAQgSBQoDAQgIEgwKCggICAgICAgICAgSDgoMCAEBCAgBCAgIAQEBEgQKAggIEgUKAwgICBIDCgEIEgQKAggIEgYKBAgICAgSBQoDCAgIAAAAUgAAAAAIdW5pdFRlc3QHAAAAAAlvcmFjbGVLZXkCAAAACW9yYWNsZUtleQEAAAAGZ2V0U3RyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWICAAAAAAAAAAAGb3JhY2xlCQEAAAAGZ2V0U3RyAAAAAQUAAAAJb3JhY2xlS2V5AAAAAAlvcmFjbGVGZWUJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQUAAAAGb3JhY2xlAAAAAAZvd25lcnMJAARMAAAAAgkABB0AAAACBQAAAAlvcmFjbGVGZWUCAAAABm93bmVyMQkABEwAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAGb3duZXIyBQAAAANuaWwAAAAAD2NvbGxlY3Rpb25zRGFwcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAPY29sbGVjdGlvbnNEYXBwAgAAABhjb2xsZWN0aW9uRGFwcCBub3QgZm91bmQAAAAAC2ZlZVJlY2VpdmVyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAJb3JhY2xlRmVlAgAAAAtmZWVSZWNlaXZlcgIAAAAVZmVlUmVjZWl2ZXIgbm90IGZvdW5kAAAAAAhjZXJ0RGFwcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAIY2VydERhcHACAAAAEmNlcnREYXBwIG5vdCBmb3VuZAAAAAAHZmVlRGFwcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAHZmVlRGFwcAIAAAARZmVlRGFwcCBub3QgZm91bmQAAAAACHVzZXJEYXBwCQEAAAAFdmFsdWUAAAABCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAlvcmFjbGVGZWUCAAAACHVzZXJEYXBwAgAAABJ1c2VyZGFwcCBub3QgZm91bmQAAAAAC1VTRE5Bc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAACW9yYWNsZUZlZQIAAAALVVNETkFzc2V0SWQAAAAABXR5cGVzCQAETAAAAAICAAAABUlNQUdFCQAETAAAAAICAAAAA1BERgkABEwAAAACAgAAAAVWSURFTwUAAAADbmlsAAAAAAxQcmV2aWV3dHlwZXMJAARMAAAAAgIAAAADUERGBQAAAANuaWwAAAAAC2RhcHBSdW5uaW5nCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX2RhcHBfaXNfcnVubmluZwYAAAAADm1haW50ZW5hbmNlTVNHCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwAgAAABRjb25mX21haW50ZW5hbmNlX21zZwIAAAAAAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAADGF1Y3Rpb25UeXBlMQIAAAAHQklEVFlQRQAAAAAMYXVjdGlvblR5cGUyAgAAAAtUUkFESVRJT05BTAAAAAAMYXVjdGlvblR5cGUzAgAAAAZESVJFQ1QBAAAAF2dldFN0cmluZ0J5S2V5RnJvbVVzZXJzAAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHAFAAAAA2tleQIAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAABVnZXRTdHJpbmdCeUtleU9yRXJyb3IAAAACAAAAA2tleQAAAAVlcnJvcgkBAAAAE3ZhbHVlT3JFcnJvck1l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AQUAAAALZGFwcFJ1bm5pbmcJAAACAAAAAQUAAAAObWFpbnRlbmFuY2VNU0cJAAUVAAAAAwkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAQAAAApnZXRBcnREYXRhAAAABAAAAAFpAAAABmlzc3VlcgAAAAVhcnRJZAAAAAVpc0JpZAQAAAAOY2FsbGVySXNJc3N1ZXIJAAAAAAAAAgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBQAAAAZpc3N1ZXIEAAAACHRvdGFsTkZUCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQIAAAAQdG90YWxfbmZ0X2lzc3VlZAQAAAALYXJ0d29ya05hbWUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAdrZXlOYW1lAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXJ0d29ya05hbWUCAAAAAAkAAAIAAAABAgAAABFBcnQgZG9lc24ndCBleGlzdAQAAAAIaXNPblNhbGUJAQAAAA9nZXRCb29sZWFuQnlLZXkAAAABCQEAAAAJa2V5T25TYWxlAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAAKYW1vdW50U29sZAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAlrZXlJc3N1ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxhcnR3b3JrUHJpY2UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAIa2V5UHJpY2UAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkCQAAaAAAAAIFAAAAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAAAAAAAAAAIEAAAADHByaWNlQXNzZXRJZAMFAAAADmNhbGxlcklzSXNzdWVyCQACWAAAAAEFAAAAC1VTRE5Bc3NldElkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAASa2V5QXNzZXRJZEFjY2VwdGVkAAAAAgUAAAAGaXNzdWVy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XzIEAAAACmFtb3VudFNvbGQIBQAAAAdhcnREYXRhAAAAAl8zBAAAAAxhcnR3b3JrUHJpY2UIBQAAAAdhcnREYXRhAAAAAl80BAAAAAxwcmljZUFzc2V0SWQIBQAAAAdhcnREYXRhAAAAAl81BAAAAAptYXhDYW5TZWxsCAUAAAAHYXJ0RGF0YQAAAAJfNgQAAAAIaXNPblNhbGUIBQAAAAdhcnREYXRhAAAAAl83BAAAAAdiaWREYXRhCQEAAAAKZ2V0QmlkRGF0YQAAAAkFAAAAAWkFAAAABmNhbGxlcgUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAAIYmlkT3duZXIFAAAABWJpZElkBQAAAAxwcmljZUFzc2V0SWQFAAAADGFydHdvcmtQcmljZQUAAAAFaXNCaWQEAAAACmJpZERhdGFLZXkIBQAAAAdiaWREYXRhAAAAAl8xBAAAAAZhbW91bnQIBQAAAAdiaWREYXRhAAAAAl8yBAAAAAdhc3NldElkCAUAAAAHYmlkRGF0YQAAAAJfMwQAAAANbmV3QW1vdW50U29sZAMJAAAAAAAAAgUAAAAKYW1vdW50U29sZAUAAAAKbWF4Q2FuU2VsbAkAAAIAAAABAgAAAA5NYXggaXRlbXMgc29sZAkAAGQAAAACBQAAAAphbW91bnRTb2xkAAAAAAAAAAABBAAAAAppc3N1ZXJEYXRhCQEAAAAMZ2V0SXNzdWVEYXRhAAAACwUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAALYXJ0d29ya05hbWUFAAAADW5ld0Ftb3VudFNvbGQFAAAACm1heENhblNlbGwFAAAACHRvdGFsTkZUBQAAAAZjYWxsZXIFAAAACGJpZE93bmVyBQAAAAViaWRJZAUAAAABaQUAAAAIaXNPblNhbGUEAAAACnNlbGxTdGF0dXMIBQAAAAppc3N1ZXJEYXRhAAAAAl8xBAAAAApyZWNlaXZlTkZUCAUAAAAKaXNzdWVyRGF0YQAAAAJfMgQAAAAJaXNzdWVNZXRhCAUAAAAKaXNzdWVyRGF0YQAAAAJfMwQAAAALaWRORlRJbnZva2UJAAP8AAAABAUAAAAEdGhpcwIAAAAHbWludE5mdAkABEwAAAACBQAAAAh0b3RhbE5GVAkABEwAAAACBQAAAAlpc3N1ZU1ldGEJAARMAAAA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AAAGaXNzdWVyBQAAAAVhcnRJZAQAAAAIZHVyYXRpb24JAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAALa2V5RHVyYXRpb24AAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAllbmRIZWlnaHQJAABkAAAAAgUAAAAIZHVyYXRpb24FAAAABmhlaWdodAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAxvbGRFbmRIZWlnaHQDCQAAAAAAAAIFAAAACmFtb3VudFNvbGQFAAAACm1heENhblNlbGwJAAACAAAAAQIAAAAmQ2FuJ3QgcmVzdGFydCBhdWN0aW9uLCBtYXggYW1vdW50IHNvbGQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlFbmRIZWlnaHQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBQAAAAllbmRIZWlnaHQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEmtleUhpZ2hlc3RCaWRCaWRJZAAAAAEFAAAABWFydElkBQAAAANuaWwJAAACAAAAAQIAAAAkUHJldmlvdXMgYXVjdGlvbiBpc24ndCBjb21wbGV0ZWQgeWV0AQAAABRhY2NlcHRCaWRUcmFkaXRpb25hbAAAAAUAAAABaQAAAAVhcnRJZAAAAAZpc3N1ZXIAAAAFYmlkSWQAAAAIYmlkT3duZXIEAAAACWVuZEhlaWdodAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAxrZXlFbmRIZWlnaHQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxoaWdoZXN0QmlkSWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABJrZXlIaWdoZXN0QmlkQmlkSWQAAAABBQAAAAVhcnRJZAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAllbmRIZWlnaHQDCQAAAAAAAAIFAAAABWJpZElkBQAAAAxoaWdoZXN0QmlkSWQEAAAAC2J1eU1pbnREYXRhCQEAAAAHYnV5TWludAAAAAYFAAAAAWkFAAAABWFydElkBQAAAAZpc3N1ZXIFAAAABWJpZElkBQAAAAhiaWRPd25lcgYEAAAAEnJlc3RhcnRBdWN0aW9uRGF0YQkBAAAA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b2xsZWN0aW9uAAAADXN1YmNvbGxlY3Rpb24EAAAADHQwMTc3NDAxNzc4MQkBAAAADGlkQ2FsbGVyRGF0ZQAAAAEFAAAAAWkEAAAABWFydElkCAUAAAAMdDAxNzc0MDE3NzgxAAAAAl8xBAAAAAZjYWxsZXIIBQAAAAx0MDE3NzQwMTc3ODEAAAACXzIEAAAABGRhdGUIBQAAAAx0MDE3NzQwMTc3ODEAAAACXzMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAFdHlwZXMFAAAABHR5cGUEAAAAD3ZhbGlkYXRlQXJ0d29yawkBAAAAE3ZhbGlkYXRlQXJ0d29ya0RhdGEAAAAFBQAAAAZjYWxsZXIFAAAACmNpZERpc3BsYXkFAAAABG5hbWUFAAAAC2Rlc2NyaXB0aW9uBQAAAAR0YWdzAwkBAAAAAiE9AAAAAgUAAAAPdmFsaWRhdGVBcnR3b3JrAgAAAAAJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmchBAAAAAx0MDE4MTcwMTgyMTIJAQAAAA92YWxpZGF0ZVBheW1lbnQAAAABBQAAAAFpBAAAAAZhbW91bnQIBQAAAAx0MDE4MTcwMTgyMTIAAAACXzEEAAAAB2Fzc2V0SWQIBQAAAAx0MDE4MTcwMTgyMTIAAAACXzIDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAZhbW91bnQJAAACAAAAAQIAAAAUU29tZXRoaW5nIHdlbnQgd3JvbmcEAAAAC3ByZXZpZXdEYXRhAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADFByZXZpZXd0eXBlcwUAAAAEdHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5UHJldmlld0NpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAAB3ByZXZpZXcFAAAAA25pbAUAAAADbmlsBAAAABZpbnZva2VDb2xsZWN0aW9uQ3JlYXRlCQAD/AAAAAQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAA9jb2xsZWN0aW9uc0RhcHAJAAEsAAAAAgUAAAAPY29sbGVjdGlvbnNEYXBwAgAAAAogbm90IGZvdW5kAgAAABFjb2xsZWN0aW9uUHJvY2VzcwkABEwAAAACBQAAAApjb2xsZWN0aW9uCQAETAAAAAIFAAAADXN1YmNvbGxlY3Rpb24JAARMAAAAAgUAAAAGY2FsbGVyBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAWaW52b2tlQ29sbGVjdGlvbkNyZWF0ZQUAAAAWaW52b2tlQ29sbGVjdGlvbkNyZWF0ZQQAAAAMaWRDb2xsZWN0aW9uBAAAAAckbWF0Y2gwBQAAABZpbnZva2VDb2xsZWN0aW9uQ3JlYXRlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXIFAAAAByRtYXRjaDAFAAAAAXIJAAACAAAAAQIAAAAXSW5jb3JyZWN0IGludm9rZSByZXN1bHQEAAAACmVudHJ5RXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABJrZXlUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAUWW91IGFscmVhZHkgYWRkZWQgaXQEAAAACWhhc2hFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADmtleU93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAMJAQAAAAIhPQAAAAIFAAAACWhhc2hFeGlzdAIAAAAACQAAAgAAAAECAAAAH1RoaXMgaGFzaCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQJAAROAAAAAgUAAAALcHJldmlld0RhdGEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleU93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAUAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIFAAAABWFydElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAHa2V5RGF0ZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABGRhdGUJ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AQAAAAtrZXlEdXJhdGlvbgAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACGR1cmF0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAMa2V5RW5kSGVpZ2h0AAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAJZW5kSGVpZ2h0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlBc3NldElkQWNjZXB0ZWQAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5rZXlBdWN0aW9uVHlwZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAAC2F1Y3Rpb25UeXBlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApidXlBcnR3b3JrAAAAAgAAAAVhcnRJZAAAAAZpc3N1ZXIEAAAAC2F1Y3Rpb25UeXBlCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAOa2V5QXVjdGlvblR5cGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAAAAAAACBQAAAAthdWN0aW9uVHlwZQUAAAAMYXVjdGlvblR5cGUzCQEAAAAHYnV5TWludAAAAAYFAAAAAWkFAAAABWFydElkBQAAAAZpc3N1ZXICAAAAAAIAAAAABwkAAAIAAAABAgAAADREaXJlY3QgYnV5IG9ubHkgYWxsb3dlZCB3aGVuIG5vIGF1Y3Rpb24gdHlwZSBpcyBzZXQhAAAAAWkBAAAACnVwZGF0ZVRhZ3MAAAADAAAABmFydGlzdAAAAAVhcnRJZAAAAAR0YWdzBAAAAAZjYWxsZXIJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5AwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABm93bmVycwUAAAAGY2FsbGVyAwkAAGYAAAACCQABkAAAAAEJAAS1AAAAAgUAAAAEdGFncwIAAAABLAAAAAAAAAAABQkAAAIAAAABAgAAAAs1IHRhZ3MgbWF4LgQAAAAHdGFnc09sZAkBAAAAFWdldFN0cmluZ0J5S2V5T3JFcnJvcgAAAAIJAQAAAAdrZXlUYWdzAAAAAgUAAAAGYXJ0aXN0BQAAAAVhcnRJZAIAAAAvTm8gdGFncyBjcmVhdGVkIHdpdGggdGhpcyBrZXksIHNvIGNhbid0IHVwZGF0ZSEDCQAAAAAAAAIFAAAABHRhZ3MFAAAAB3RhZ3NPbGQJAAACAAAAAQIAAAAeVGFncyBhcmUgdGhlIHNhbWUgYXMgb2xkIHRhZ3MhCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdrZXlUYWdzAAAAAgUAAAAGYXJ0aXN0BQAAAAVhcnRJZAUAAAAEdGFncwUAAAADbmlsCQAAAgAAAAECAAAAAm5vAAAAAWkBAAAAC2RlbGV0ZUVudHJ5AAAAAQAAAAVlbnRyeQQAAAAGY2FsbGVyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAZvd25lcnMFAAAABmNhbGxlcgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAVlbnRyeQUAAAADbmlsCQAAAgAAAAECAAAAAm5vAAAAAWkBAAAABnNldEJpZAAAAAIAAAAFYXJ0SWQAAAAGaXNzdWVyBAAAAAthdWN0aW9uVHlwZQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADmtleUF1Y3Rpb25UeXBlAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXVjdGlvblR5cGUFAAAADGF1Y3Rpb25UeXBlMQkBAAAAFHNldEJpZE5vblRyYWRpdGlvbmFsAAAAAwUAAAABaQUAAAAFYXJ0SWQFAAAABmlzc3VlcgMJAAAAAAAAAgUAAAALYXVjdGlvblR5cGUFAAAADGF1Y3Rpb25UeXBlMgkBAAAAEXNldEJpZFRyYWRpdGlvbmFsAAAAAwUAAAABaQUAAAAFYXJ0SWQFAAAABmlzc3VlcgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAWVW5rbm93biBhdWN0aW9uIHR5cGUgOgUAAAALYXVjdGlvblR5cGUCAAAAGywgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWlucwAAAAFpAQAAAAlhY2NlcHRCaWQAAAAEAAAABWFydElkAAAABmlzc3VlcgAAAAViaWRJZAAAAAhiaWRPd25lcgQAAAALYXVjdGlvblR5cGUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA5rZXlBdWN0aW9uVHlwZQAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQDCQAAAAAAAAIFAAAAC2F1Y3Rpb25UeXBlBQAAAAxhdWN0aW9uVHlwZTEJAQAAABdhY2NlcHRCaWROb25UcmFkaXRpb25hbAAAAAUFAAAAAWkFAAAABWFydElkBQAAAAZpc3N1ZXIFAAAABWJpZElkBQAAAAhiaWRPd25lcgMJAAAAAAAAAgUAAAALYXVjdGlvblR5cGUFAAAADGF1Y3Rpb25UeXBlMgkBAAAAFGFjY2VwdEJpZFRyYWRpdGlvbmFsAAAABQUAAAABaQUAAAAFYXJ0SWQFAAAABmlzc3VlcgUAAAAFYmlkSWQFAAAACGJpZE93bmVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABZVbmtub3duIGF1Y3Rpb24gdHlwZSA6BQAAAAthdWN0aW9uVHlwZQIAAAAbLCBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5zAAAAAWkBAAAACWNhbmNlbEJpZAAAAAMAAAAFYXJ0SWQAAAAGaXNzdWVyAAAABWJpZElkBAAAAAthdWN0aW9uVHlwZQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADmtleUF1Y3Rpb25UeXBlAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXVjdGlvblR5cGUFAAAADGF1Y3Rpb25UeXBlMQkBAAAADWNhbmNlbEJpZEltcGwAAAAEBQAAAAFpBQAAAAVhcnRJZAUAAAAGaXNzdWVyBQAAAAViaWRJZAkBAAAAGGNhbmNlbEJpZEltcGxUcmFkaXRpb25hbAAAAAQFAAAAAWkFAAAABWFydElkBQAAAAZpc3N1ZXIFAAAABWJpZElkAAAAAE6ghHw=", "height": 1962261, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6mv1jBfZBjEMnbh8cRuRTr8gwX5Y9tun2rhF1ro9DbL2 Next: 9Bu8f8iQDrnm6ba3bXKHCPs4eFfmjCoox6gmCHqrv28x Diff:
OldNewDifferences
2525
2626 let certDapp = valueOrErrorMessage(getString(oracleFee, "certDapp"), "certDapp not found")
2727
28+let feeDapp = valueOrErrorMessage(getString(oracleFee, "feeDapp"), "feeDapp not found")
29+
2830 let userDapp = value(addressFromString(valueOrErrorMessage(getString(oracleFee, "userDapp"), "userdapp not found")))
2931
3032 let USDNAssetId = fromBase58String(getStringValue(oracleFee, "USDNAssetId"))
3234 let types = ["IMAGE", "PDF", "VIDEO"]
3335
3436 let Previewtypes = ["PDF"]
35-
36-let USDNFirstSellCut = 150
3737
3838 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3939
115115
116116
117117 func KeyNftArtId (nftId) = ("nft_artId_" + nftId)
118-
119-
120-func keyRoyalty (caller,artId) = ((("art_royalty_" + artId) + "_") + caller)
121118
122119
123120 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
352349 }
353350
354351
355-func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
356- let cut = if ((assetId == USDNAssetId))
357- then USDNFirstSellCut
358- else throw("Only USDN is accepted!")
359- let amountForSconex = fraction(amount, cut, 1000)
360- let amountForCreator = (amount - amountForSconex)
361- if ((amountSold == maxCanSell))
362- then throw("Art sold out")
363- else {
364- let newAmountSold = (amountSold + 1)
365- $Tuple3(amountForSconex, amountForCreator, newAmountSold)
366- }
367- }
352+func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = $Tuple3(0, 0, 0)
368353
369354
370355 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
379364 else i.caller
380365 $Tuple3(sellStatus, receiveNFT, issueMeta)
381366 }
382-
383-
384-func calculateRarity (mintIndex) = if ((4 > mintIndex))
385- then "SSR"
386- else if ((11 > mintIndex))
387- then "SR"
388- else if ((101 > mintIndex))
389- then "R"
390- else "N"
391367
392368
393369 func getBidKeyVal (assetId,bidDataKey,date) = {
418394 let bidDataKey = bidData._1
419395 let amount = bidData._2
420396 let assetId = bidData._3
421- let commisionData = getCommissionData(issuer, value(assetId), amount, amountSold, maxCanSell)
422- let amountForSconex = commisionData._1
423- let amountForCreator = commisionData._2
424- let newAmountSold = commisionData._3
397+ let newAmountSold = if ((amountSold == maxCanSell))
398+ then throw("Max items sold")
399+ else (amountSold + 1)
425400 let issuerData = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
426401 let sellStatus = issuerData._1
427402 let receiveNFT = issuerData._2
440415 let bidDelOld = bidKeyValue._2
441416 let bidUpdate = bidKeyValue._3
442417 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
443- let rarity = calculateRarity(newAmountSold)
444418 let soldValue = if (!(isBid))
445419 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + idNFT)
446420 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + idNFT)
447- let soldData = StringEntry(soldKey, soldValue)
448- let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + idNFT), soldKey), StringEntry(("nft_rarity_" + idNFT), rarity), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSconex, assetId), StringEntry(KeyNftIssuer(idNFT), issuer), StringEntry(KeyNftArtId(idNFT), artId)]
449- let res = invoke(addressFromStringValue(certDapp), "createCert", [toString(receiveNFT), idNFT, issuer], nil)
450- if ((res == res))
451- then if (isBid)
452- then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
453- else soldData :: buyRes
421+ let invokeTeamFeeSplit = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "payFee", [artId], [AttachedPayment(assetId, amount)])
422+ if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
423+ then {
424+ let soldData = StringEntry(soldKey, soldValue)
425+ let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + idNFT), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), StringEntry(KeyNftIssuer(idNFT), issuer), StringEntry(KeyNftArtId(idNFT), artId)]
426+ let res = invoke(addressFromStringValue(certDapp), "createCert", [toString(receiveNFT), idNFT, issuer], nil)
427+ if ((res == res))
428+ then if (isBid)
429+ then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
430+ else soldData :: buyRes
431+ else throw("Strict value is not equal to itself.")
432+ }
454433 else throw("Strict value is not equal to itself.")
455434 }
456435 else throw("Strict value is not equal to itself.")
672651
673652
674653 @Callable(i)
675-func sellArtwork (artId,price,maxMint,assetId,auctionType,duration,royalty) = {
676- let t02571425747 = idCallerDate(i)
677- let id = t02571425747._1
678- let caller = t02571425747._2
679- let artworkName = getStringByKey(keyName(caller, artId))
680- if ((0 > royalty))
681- then throw("Royalty percentage should be above 0")
682- else if ((royalty > 85))
683- then throw("Royalty percentage should be below 85")
684- else if (!(containsElement([auctionType1, auctionType2, auctionType3], auctionType)))
685- then throw("We don't know this auction type")
686- else if ((artworkName == ""))
687- then throw("This art doesn't match your account")
688- else {
689- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
690- if (!(acceptedAssetIds(assetId)))
691- then throw("Something went wrong!")
692- else if (!(validateMinSell(assetId, price)))
693- then throw("Something went wrong!")
694- else {
695- let checkUser = validateUser(caller)
696- if ((checkUser != ""))
697- then throw(checkUser)
654+func sellArtwork (artId,price,maxMint,assetId,auctionType,duration,add1,add2,add3,add1Sh,add2Sh,add3Sh) = {
655+ let invokeTeamFeeSplit = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "teamSplitFee", [artId, feeReceiver, "", "", 15, 0, 0], nil)
656+ if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
657+ then {
658+ let invokeCreatorFeeSplit = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "creatorSplitFee", [artId, add1, add2, add3, add1Sh, add2Sh, add3Sh], nil)
659+ if ((invokeCreatorFeeSplit == invokeCreatorFeeSplit))
660+ then {
661+ let t02571425747 = idCallerDate(i)
662+ let id = t02571425747._1
663+ let caller = t02571425747._2
664+ let artworkName = getStringByKey(keyName(caller, artId))
665+ if (!(containsElement([auctionType1, auctionType2, auctionType3], auctionType)))
666+ then throw("We don't know this auction type")
667+ else if ((artworkName == ""))
668+ then throw("This art doesn't match your account")
669+ else {
670+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
671+ if (!(acceptedAssetIds(assetId)))
672+ then throw("Something went wrong!")
673+ else if (!(validateMinSell(assetId, price)))
674+ then throw("Something went wrong!")
698675 else {
699- let amountSold = getIntegerByKey(keyIssued(caller, artId))
700- let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
701- if ((maxMint > 10000))
702- then throw("10000 editions max per artwork")
703- else if (if ((amountSold != 0))
704- then (amountSold == maxCanSell)
705- else false)
706- then throw("Max edition reached.")
707- else if (if ((amountSold > 0))
708- then (maxCanSell != maxMint)
709- else false)
710- then throw("Cannot change maximum issuable anymore")
711- else if (if ((bidNbr > 0))
712- then (maxCanSell != maxMint)
676+ let checkUser = validateUser(caller)
677+ if ((checkUser != ""))
678+ then throw(checkUser)
679+ else {
680+ let amountSold = getIntegerByKey(keyIssued(caller, artId))
681+ let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
682+ if ((maxMint > 10000))
683+ then throw("10000 editions max per artwork")
684+ else if (if ((amountSold != 0))
685+ then (amountSold == maxCanSell)
713686 else false)
714- then throw("Cannot change maximum issuable with active orders")
715- else {
716- let sellStatus = if (if ((price > 0))
717- then (maxMint > 0)
687+ then throw("Max edition reached.")
688+ else if (if ((amountSold > 0))
689+ then (maxCanSell != maxMint)
690+ else false)
691+ then throw("Cannot change maximum issuable anymore")
692+ else if (if ((bidNbr > 0))
693+ then (maxCanSell != maxMint)
718694 else false)
719- then true
720- else false
721- let endHeight = (duration + height)
722-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType), IntegerEntry(keyRoyalty(caller, artId), royalty)]
723- }
695+ then throw("Cannot change maximum issuable with active orders")
696+ else {
697+ let sellStatus = if (if ((price > 0))
698+ then (maxMint > 0)
699+ else false)
700+ then true
701+ else false
702+ let endHeight = (duration + height)
703+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
704+ }
705+ }
724706 }
725- }
726- }
707+ }
708+ }
709+ else throw("Strict value is not equal to itself.")
710+ }
711+ else throw("Strict value is not equal to itself.")
727712 }
728713
729714
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let unitTest = false
55
66 let oracleKey = "oracleKey"
77
88 func getStr (key) = match getString(this, key) {
99 case b: String =>
1010 b
1111 case _ =>
1212 ""
1313 }
1414
1515
1616 let oracle = getStr(oracleKey)
1717
1818 let oracleFee = value(addressFromString(oracle))
1919
2020 let owners = [getString(oracleFee, "owner1"), getString(oracleFee, "owner2")]
2121
2222 let collectionsDapp = valueOrErrorMessage(getString(oracleFee, "collectionsDapp"), "collectionDapp not found")
2323
2424 let feeReceiver = valueOrErrorMessage(getString(oracleFee, "feeReceiver"), "feeReceiver not found")
2525
2626 let certDapp = valueOrErrorMessage(getString(oracleFee, "certDapp"), "certDapp not found")
2727
28+let feeDapp = valueOrErrorMessage(getString(oracleFee, "feeDapp"), "feeDapp not found")
29+
2830 let userDapp = value(addressFromString(valueOrErrorMessage(getString(oracleFee, "userDapp"), "userdapp not found")))
2931
3032 let USDNAssetId = fromBase58String(getStringValue(oracleFee, "USDNAssetId"))
3133
3234 let types = ["IMAGE", "PDF", "VIDEO"]
3335
3436 let Previewtypes = ["PDF"]
35-
36-let USDNFirstSellCut = 150
3737
3838 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
3939
4040 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
4141
4242 let userSuspended = "SUSPENDED"
4343
4444 let userRemoved = "REMOVED"
4545
4646 let userUnregistered = "UNREGISTERED"
4747
4848 let auctionType1 = "BIDTYPE"
4949
5050 let auctionType2 = "TRADITIONAL"
5151
5252 let auctionType3 = "DIRECT"
5353
5454 func getStringByKeyFromUsers (key) = valueOrElse(getString(userDapp, key), "")
5555
5656
5757 func getStringByKey (key) = valueOrElse(getString(this, key), "")
5858
5959
6060 func getStringByKeyOrError (key,error) = valueOrErrorMessage(getString(this, key), error)
6161
6262
6363 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
6464
6565
6666 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
6767
6868
6969 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
7070
7171
7272 func validateHash (hash) = (size(hash) == 64)
7373
7474
7575 func keyUserStatus (caller) = ("user_status_" + caller)
7676
7777
7878 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
7979
8080
8181 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
8282
8383
8484 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
8585
8686
8787 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
8888
8989
9090 func keyPreviewCid (caller,artId) = ((("art_preview_cid_" + artId) + "_") + caller)
9191
9292
9393 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
9494
9595
9696 func keyHighestBidBidId (artId) = ("art_highestBidBidId_" + artId)
9797
9898
9999 func keyBidId (bidId) = ("bid_" + bidId)
100100
101101
102102 func keyDuration (caller,artId) = ((("art_duration_" + artId) + "_") + caller)
103103
104104
105105 func keyEndHeight (caller,artId) = ((("art_endheight_" + artId) + "_") + caller)
106106
107107
108108 func keyAuctionType (caller,artId) = ((("art_auctiontype_" + artId) + "_") + caller)
109109
110110
111111 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
112112
113113
114114 func KeyNftIssuer (nftId) = ("nft_issued_" + nftId)
115115
116116
117117 func KeyNftArtId (nftId) = ("nft_artId_" + nftId)
118-
119-
120-func keyRoyalty (caller,artId) = ((("art_royalty_" + artId) + "_") + caller)
121118
122119
123120 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
124121
125122
126123 func keyEntitlement (caller,artId) = ((("art_entitlement_" + artId) + "_") + caller)
127124
128125
129126 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
130127
131128
132129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
133130
134131
135132 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
136133
137134
138135 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
139136
140137
141138 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
142139
143140
144141 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
145142
146143
147144 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
148145
149146
150147 func keyCollection (caller,artId) = ((("collection_" + artId) + "_") + caller)
151148
152149
153150 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(USDNAssetId)))
154151
155152 func getAmountByBidId (bidId) = valueOrElse(getIntegerByKey(keyBidId(bidId)), 0)
156153
157154
158155 func getAmountHighestBidByArtId (artId) = {
159156 let bidId = getStringByKey(keyHighestBidBidId(artId))
160157 if ((bidId == ""))
161158 then 0
162159 else getAmountByBidId(bidId)
163160 }
164161
165162
166163 func validateString (str,max) = if ((size(str) == 0))
167164 then throw("Field cannot be is empty")
168165 else if ((size(str) > max))
169166 then throw((str + " is too long"))
170167 else true
171168
172169
173170 func validateUser (caller) = {
174171 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
175172 if ((userStatus == userUnregistered))
176173 then "Register this account first with 'Account' tab"
177174 else if ((userStatus == userSuspended))
178175 then "Account suspended"
179176 else if ((userStatus == userRemoved))
180177 then "Account removed"
181178 else ""
182179 }
183180
184181
185182 func validateArtworkData (caller,cidDisplay,name,description,tags) = {
186183 let checkUser = validateUser(caller)
187184 if ((checkUser != ""))
188185 then throw(checkUser)
189186 else if ((size(cidDisplay) == 0))
190187 then throw("Display CID cannot be empty")
191188 else if ((size(cidDisplay) != 46))
192189 then throw("This doesn't seem a valid CID!")
193190 else if (!(validateString(name, 100)))
194191 then throw("100 Char. max name")
195192 else if (!(validateString(description, 1000)))
196193 then throw("1000 Char. max description")
197194 else if ((size(split(tags, ",")) > 5))
198195 then throw("5 tags max.")
199196 else ""
200197 }
201198
202199
203200 func isPayment (i) = if ((size(i.payments) == 0))
204201 then throw("No payment attached")
205202 else {
206203 let payment = value(i.payments[0])
207204 let amount = value(payment.amount)
208205 $Tuple2(payment, amount)
209206 }
210207
211208
212209 func validatePayment (i) = {
213210 let t089829018 = isPayment(i)
214211 let payment = t089829018._1
215212 let amount = t089829018._2
216213 let assetId = if (if (isDefined(payment.assetId))
217214 then (payment.assetId == USDNAssetId)
218215 else false)
219216 then payment.assetId
220217 else throw("Only USDN token accepted as transaction fee")
221218 if ((amount != currentCertificationPrice))
222219 then throw(((("Payment amount should be " + toString(currentCertificationPrice)) + " but is: ") + toString(amount)))
223220 else $Tuple2(amount, assetId)
224221 }
225222
226223
227224 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
228225 case b: Int =>
229226 if ((b != 0))
230227 then true
231228 else false
232229 case _ =>
233230 false
234231 }
235232
236233
237234 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
238235 let t096119647 = isPayment(i)
239236 let payment = t096119647._1
240237 let amount = t096119647._2
241238 let assetId = if (!(isDefined(payment.assetId)))
242239 then throw("Wrong asset id")
243240 else if (if ((size(priceAssetId) > 0))
244241 then (toBase58String(value(payment.assetId)) == priceAssetId)
245242 else false)
246243 then payment.assetId
247244 else throw("Wrong asset id")
248245 if (if ((assetId == unit))
249246 then (priceAssetId != "")
250247 else false)
251248 then throw("Wrong asset id")
252249 else if ((artworkPrice != amount))
253250 then throw(((("Payment don't match " + toString(artworkPrice)) + " ") + toString(amount)))
254251 else $Tuple2(amount, assetId)
255252 }
256253
257254
258255 func acceptedAssetIds (assetId) = if ((assetId != toBase58String(USDNAssetId)))
259256 then throw("Only USDN accepted")
260257 else true
261258
262259
263260 func validateMinSell (assetId,price) = {
264261 let minSellSconex = if (unitTest)
265262 then 1
266263 else (currentCertificationPrice * 2)
267264 if (if (if ((assetId == toBase58String(USDNAssetId)))
268265 then (minSellSconex > price)
269266 else false)
270267 then (price != 0)
271268 else false)
272269 then throw(("Wrong minimum sell price " + toString(minSellSconex)))
273270 else true
274271 }
275272
276273
277274 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
278275 then throw("Only USDN is accepted!")
279276 else fromBase58String(assetId)
280277
281278
282279 func getPriceAssetIdFromBid (bidDataKey) = {
283280 let bidData = getStringByKey((bidDataKey + "_OPEN"))
284281 if ((bidData == ""))
285282 then throw("Bid not found")
286283 else {
287284 let bidDataArr = split(bidData, "_")
288285 let bidAmount = parseIntValue(bidDataArr[1])
289286 let bidAssetId = getBidAssetId(bidDataArr[0])
290287 if ((0 >= bidAmount))
291288 then throw("Wrong amount")
292289 else $Tuple2(bidAmount, bidAssetId)
293290 }
294291 }
295292
296293
297294 func idCallerDate (i) = if (!(dappRunning))
298295 then throw(maintenanceMSG)
299296 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
300297
301298
302299 func getArtData (i,issuer,artId,isBid) = {
303300 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
304301 let totalNFT = getIntegerByKey("total_nft_issued")
305302 let artworkName = getStringByKey(keyName(issuer, artId))
306303 if ((artworkName == ""))
307304 then throw("Art doesn't exist")
308305 else {
309306 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
310307 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
311308 let artworkPrice = valueOrElse(getIntegerByKey(keyPrice(issuer, artId)), (currentCertificationPrice * 2))
312309 let priceAssetId = if (callerIsIssuer)
313310 then toBase58String(USDNAssetId)
314311 else getStringByKey(keyAssetIdAccepted(issuer, artId))
315312 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
316313 if (if (if (!(isBid))
317314 then !(callerIsIssuer)
318315 else false)
319316 then if (if ((0 >= artworkPrice))
320317 then true
321318 else !(isOnSale))
322319 then true
323320 else (0 >= maxCanSell)
324321 else false)
325322 then throw("Art not for sale")
326323 else if (if (if (!(isBid))
327324 then callerIsIssuer
328325 else false)
329326 then (0 >= maxCanSell)
330327 else false)
331328 then throw("Max issuable not set")
332329 else $Tuple7(totalNFT, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
333330 }
334331 }
335332
336333
337334 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
338335 let checkUser = validateUser(issuer)
339336 if (if (isBid)
340337 then (checkUser != "")
341338 else false)
342339 then throw(checkUser)
343340 else {
344341 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
345342 let t01351913648 = if (isBid)
346343 then getPriceAssetIdFromBid(bidDataKey)
347344 else validatePriceAssetId(i, priceAssetId, artworkPrice)
348345 let amount = t01351913648._1
349346 let assetId = t01351913648._2
350347 $Tuple3(bidDataKey, amount, assetId)
351348 }
352349 }
353350
354351
355-func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
356- let cut = if ((assetId == USDNAssetId))
357- then USDNFirstSellCut
358- else throw("Only USDN is accepted!")
359- let amountForSconex = fraction(amount, cut, 1000)
360- let amountForCreator = (amount - amountForSconex)
361- if ((amountSold == maxCanSell))
362- then throw("Art sold out")
363- else {
364- let newAmountSold = (amountSold + 1)
365- $Tuple3(amountForSconex, amountForCreator, newAmountSold)
366- }
367- }
352+func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = $Tuple3(0, 0, 0)
368353
369354
370355 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
371356 let issueMeta = ((((((((("Creator: " + issuer) + ",ArtID: ") + artId) + ",Artwork name: ") + artworkName) + ",Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
372357 let sellStatus = if (if ((newAmountSold == maxCanSell))
373358 then true
374359 else !(isOnSale))
375360 then false
376361 else true
377362 let receiveNFT = if ((bidOwner != ""))
378363 then addressFromStringValue(bidOwner)
379364 else i.caller
380365 $Tuple3(sellStatus, receiveNFT, issueMeta)
381366 }
382-
383-
384-func calculateRarity (mintIndex) = if ((4 > mintIndex))
385- then "SSR"
386- else if ((11 > mintIndex))
387- then "SR"
388- else if ((101 > mintIndex))
389- then "R"
390- else "N"
391367
392368
393369 func getBidKeyVal (assetId,bidDataKey,date) = {
394370 let assetIdBid = if (!(isDefined(assetId)))
395371 then throw("Only USDN is accepted")
396372 else toBase58String(value(assetId))
397373 let bidData = getStringByKey((bidDataKey + "_OPEN"))
398374 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
399375 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
400376 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
401377 }
402378
403379
404380 func buyMint (i,artId,issuer,bidId,bidOwner,isBid) = {
405381 let callerData = idCallerDate(i)
406382 let id = callerData._1
407383 let caller = callerData._2
408384 let date = callerData._3
409385 let artData = getArtData(i, issuer, artId, isBid)
410386 let totalNFT = artData._1
411387 let artworkName = artData._2
412388 let amountSold = artData._3
413389 let artworkPrice = artData._4
414390 let priceAssetId = artData._5
415391 let maxCanSell = artData._6
416392 let isOnSale = artData._7
417393 let bidData = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
418394 let bidDataKey = bidData._1
419395 let amount = bidData._2
420396 let assetId = bidData._3
421- let commisionData = getCommissionData(issuer, value(assetId), amount, amountSold, maxCanSell)
422- let amountForSconex = commisionData._1
423- let amountForCreator = commisionData._2
424- let newAmountSold = commisionData._3
397+ let newAmountSold = if ((amountSold == maxCanSell))
398+ then throw("Max items sold")
399+ else (amountSold + 1)
425400 let issuerData = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
426401 let sellStatus = issuerData._1
427402 let receiveNFT = issuerData._2
428403 let issueMeta = issuerData._3
429404 let idNFTInvoke = invoke(this, "mintNft", [totalNFT, issueMeta, toString(receiveNFT)], nil)
430405 if ((idNFTInvoke == idNFTInvoke))
431406 then {
432407 let idNFT = match idNFTInvoke {
433408 case r: String =>
434409 r
435410 case _ =>
436411 throw("Incorrect invoke result")
437412 }
438413 let bidKeyValue = getBidKeyVal(assetId, bidDataKey, date)
439414 let assetIdBid = bidKeyValue._1
440415 let bidDelOld = bidKeyValue._2
441416 let bidUpdate = bidKeyValue._3
442417 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
443- let rarity = calculateRarity(newAmountSold)
444418 let soldValue = if (!(isBid))
445419 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + idNFT)
446420 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + idNFT)
447- let soldData = StringEntry(soldKey, soldValue)
448- let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + idNFT), soldKey), StringEntry(("nft_rarity_" + idNFT), rarity), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSconex, assetId), StringEntry(KeyNftIssuer(idNFT), issuer), StringEntry(KeyNftArtId(idNFT), artId)]
449- let res = invoke(addressFromStringValue(certDapp), "createCert", [toString(receiveNFT), idNFT, issuer], nil)
450- if ((res == res))
451- then if (isBid)
452- then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
453- else soldData :: buyRes
421+ let invokeTeamFeeSplit = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "payFee", [artId], [AttachedPayment(assetId, amount)])
422+ if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
423+ then {
424+ let soldData = StringEntry(soldKey, soldValue)
425+ let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + idNFT), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), StringEntry(KeyNftIssuer(idNFT), issuer), StringEntry(KeyNftArtId(idNFT), artId)]
426+ let res = invoke(addressFromStringValue(certDapp), "createCert", [toString(receiveNFT), idNFT, issuer], nil)
427+ if ((res == res))
428+ then if (isBid)
429+ then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
430+ else soldData :: buyRes
431+ else throw("Strict value is not equal to itself.")
432+ }
454433 else throw("Strict value is not equal to itself.")
455434 }
456435 else throw("Strict value is not equal to itself.")
457436 }
458437
459438
460439 func setBidNonTraditional (i,artId,issuer) = {
461440 let t02770927747 = idCallerDate(i)
462441 let id = t02770927747._1
463442 let caller = t02770927747._2
464443 let date = t02770927747._3
465444 let t02775227788 = isPayment(i)
466445 let payment = t02775227788._1
467446 let amount = t02775227788._2
468447 let assetId = if (!(isDefined(payment.assetId)))
469448 then throw("Only USDN is accepted!")
470449 else toBase58String(value(payment.assetId))
471450 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
472451 let minArtworkPrice = valueOrElse(getIntegerByKey(keyPrice(issuer, artId)), (currentCertificationPrice * 2))
473452 if (!(acceptedAssetIds(assetId)))
474453 then throw("asset not accepted")
475454 else {
476455 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
477456 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
478457 if ((0 >= maxCanSell))
479458 then throw("No max edition set for this artwork")
480459 else if ((amountSold >= maxCanSell))
481460 then throw("Sold out, you cannot bid")
482461 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
483462 }
484463 }
485464
486465
487466 func setBidTraditional (i,artId,issuer) = {
488467 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
489468 let highestBid = getAmountHighestBidByArtId(artId)
490469 if ((height > endHeight))
491470 then throw("This auction is finished already!")
492471 else {
493472 let callderData = idCallerDate(i)
494473 let id = callderData._1
495474 let caller = callderData._2
496475 let date = callderData._3
497476 let isPaymentVar = isPayment(i)
498477 let payment = isPaymentVar._1
499478 let amount = isPaymentVar._2
500479 if ((highestBid >= amount))
501480 then throw(("Please place a bid higher than: " + toString(highestBid)))
502481 else {
503482 let assetId = if (!(isDefined(payment.assetId)))
504483 then throw("Only USDN is accepted!")
505484 else toBase58String(value(payment.assetId))
506485 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
507486 let minArtworkPrice = valueOrElse(getIntegerByKey(keyPrice(issuer, artId)), (currentCertificationPrice * 2))
508487 if (!(acceptedAssetIds(assetId)))
509488 then throw("asset not accepted")
510489 else if ((minArtworkPrice > amount))
511490 then throw("Bid is below min price!")
512491 else {
513492 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
514493 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
515494 if ((0 >= maxCanSell))
516495 then throw("No max edition set for this artwork")
517496 else if ((amountSold >= maxCanSell))
518497 then throw("Sold out, you cannot bid")
519498 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1)), StringEntry(keyHighestBidBidId(artId), toBase58String(i.transactionId)), IntegerEntry(keyBidId(toBase58String(i.transactionId)), amount)]
520499 }
521500 }
522501 }
523502 }
524503
525504
526505 func acceptBidNonTraditional (i,artId,issuer,bidId,bidOwner) = {
527506 let caller = toBase58String(i.caller.bytes)
528507 if ((caller != issuer))
529508 then throw("You cannot do this action")
530509 else buyMint(i, artId, issuer, bidId, bidOwner, true)
531510 }
532511
533512
534513 func restartAuction (artId,issuer) = {
535514 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
536515 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
537516 let oldEndHeight = getIntegerByKey(keyEndHeight(issuer, artId))
538517 let duration = getIntegerByKey(keyDuration(issuer, artId))
539518 let endHeight = (duration + height)
540519 if ((height > oldEndHeight))
541520 then if ((amountSold == maxCanSell))
542521 then throw("Can't restart auction, max amount sold")
543522 else [IntegerEntry(keyEndHeight(issuer, artId), endHeight), DeleteEntry(keyHighestBidBidId(artId))]
544523 else throw("Previous auction isn't completed yet")
545524 }
546525
547526
548527 func acceptBidTraditional (i,artId,issuer,bidId,bidOwner) = {
549528 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
550529 let highestBidId = getStringByKey(keyHighestBidBidId(artId))
551530 if ((height > endHeight))
552531 then if ((bidId == highestBidId))
553532 then {
554533 let buyMintData = buyMint(i, artId, issuer, bidId, bidOwner, true)
555534 let restartAuctionData = restartAuction(artId, issuer)
556535 (restartAuctionData ++ buyMintData)
557536 }
558537 else throw("This is not the winning bid!")
559538 else throw("This auction is not yet finished!")
560539 }
561540
562541
563542 func cancelBidImpl (i,artId,issuer,bidId) = {
564543 let t02894229094 = idCallerDate(i)
565544 let id = t02894229094._1
566545 let caller = t02894229094._2
567546 let date = t02894229094._3
568547 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
569548 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
570549 let bidData = getStringByKeyOrError((bidDataKey + "_OPEN"), "Bid not found")
571550 let bidDataArr = split(bidData, "_")
572551 let assetId = getBidAssetId(bidDataArr[0])
573552 let bidStatus = "CANCELED"
574553 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
575554 }
576555
577556
578557 func cancelBidImplTraditional (i,artId,issuer,bidId) = {
579558 let t02894229094 = idCallerDate(i)
580559 let id = t02894229094._1
581560 let caller = t02894229094._2
582561 let date = t02894229094._3
583562 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
584563 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
585564 let bidData = getStringByKeyOrError((bidDataKey + "_OPEN"), "Bid not found")
586565 let bidDataArr = split(bidData, "_")
587566 let assetId = getBidAssetId(bidDataArr[0])
588567 let bidStatus = "CANCELED"
589568 let bidAmount = parseIntValue(bidDataArr[1])
590569 let highestBidId = getStringByKey(keyHighestBidBidId(artId))
591570 if ((bidId == highestBidId))
592571 then throw("You can't cancel the highest bid!")
593572 else [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), bidAmount, assetId)]
594573 }
595574
596575
597576 @Callable(i)
598577 func initDapp (dappKey) = if ((i.caller != this))
599578 then throw("You cannot do this action")
600579 else if ((oracle != ""))
601580 then throw("oracle already set, you can't override!")
602581 else [StringEntry(oracleKey, dappKey)]
603582
604583
605584
606585 @Callable(i)
607586 func restartAuctionManual (artId) = if ((getAmountHighestBidByArtId(artId) != 0))
608587 then throw("Please accept the highest bid!")
609588 else restartAuction(artId, toBase58String(i.caller.bytes))
610589
611590
612591
613592 @Callable(i)
614593 func mintNft (totalNFT,issueMeta,receiveNFT) = if ((i.caller == this))
615594 then {
616595 let receiveNFTAddy = Address(fromBase58String(receiveNFT))
617596 let issueNFT = Issue(("SCONEX_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
618597 let idNFT = calculateAssetId(issueNFT)
619598 $Tuple2([issueNFT, ScriptTransfer(receiveNFTAddy, 1, idNFT)], toBase58String(idNFT))
620599 }
621600 else throw("Only the dApp can mint NFT's")
622601
623602
624603
625604 @Callable(i)
626605 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay,entitlement,preview,collection,subcollection) = {
627606 let t01774017781 = idCallerDate(i)
628607 let artId = t01774017781._1
629608 let caller = t01774017781._2
630609 let date = t01774017781._3
631610 if (containsElement(types, type))
632611 then {
633612 let validateArtwork = validateArtworkData(caller, cidDisplay, name, description, tags)
634613 if ((validateArtwork != ""))
635614 then throw("Something went wrong!")
636615 else {
637616 let t01817018212 = validatePayment(i)
638617 let amount = t01817018212._1
639618 let assetId = t01817018212._2
640619 if (!(isDefined(amount)))
641620 then throw("Something went wrong")
642621 else {
643622 let previewData = if (containsElement(Previewtypes, type))
644623 then [StringEntry(keyPreviewCid(caller, artId), preview)]
645624 else nil
646625 let invokeCollectionCreate = invoke(valueOrErrorMessage(addressFromString(collectionsDapp), (collectionsDapp + " not found")), "collectionProcess", [collection, subcollection, caller], nil)
647626 if ((invokeCollectionCreate == invokeCollectionCreate))
648627 then {
649628 let idCollection = match invokeCollectionCreate {
650629 case r: String =>
651630 r
652631 case _ =>
653632 throw("Incorrect invoke result")
654633 }
655634 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
656635 if ((entryExist != ""))
657636 then throw("You already added it")
658637 else {
659638 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
660639 if ((hashExist != ""))
661640 then throw("This hash is already registered")
662641 else (previewData ++ [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(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyEntitlement(caller, artId), entitlement), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)])
663642 }
664643 }
665644 else throw("Strict value is not equal to itself.")
666645 }
667646 }
668647 }
669648 else throw("Unknown type")
670649 }
671650
672651
673652
674653 @Callable(i)
675-func sellArtwork (artId,price,maxMint,assetId,auctionType,duration,royalty) = {
676- let t02571425747 = idCallerDate(i)
677- let id = t02571425747._1
678- let caller = t02571425747._2
679- let artworkName = getStringByKey(keyName(caller, artId))
680- if ((0 > royalty))
681- then throw("Royalty percentage should be above 0")
682- else if ((royalty > 85))
683- then throw("Royalty percentage should be below 85")
684- else if (!(containsElement([auctionType1, auctionType2, auctionType3], auctionType)))
685- then throw("We don't know this auction type")
686- else if ((artworkName == ""))
687- then throw("This art doesn't match your account")
688- else {
689- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
690- if (!(acceptedAssetIds(assetId)))
691- then throw("Something went wrong!")
692- else if (!(validateMinSell(assetId, price)))
693- then throw("Something went wrong!")
694- else {
695- let checkUser = validateUser(caller)
696- if ((checkUser != ""))
697- then throw(checkUser)
654+func sellArtwork (artId,price,maxMint,assetId,auctionType,duration,add1,add2,add3,add1Sh,add2Sh,add3Sh) = {
655+ let invokeTeamFeeSplit = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "teamSplitFee", [artId, feeReceiver, "", "", 15, 0, 0], nil)
656+ if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
657+ then {
658+ let invokeCreatorFeeSplit = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "creatorSplitFee", [artId, add1, add2, add3, add1Sh, add2Sh, add3Sh], nil)
659+ if ((invokeCreatorFeeSplit == invokeCreatorFeeSplit))
660+ then {
661+ let t02571425747 = idCallerDate(i)
662+ let id = t02571425747._1
663+ let caller = t02571425747._2
664+ let artworkName = getStringByKey(keyName(caller, artId))
665+ if (!(containsElement([auctionType1, auctionType2, auctionType3], auctionType)))
666+ then throw("We don't know this auction type")
667+ else if ((artworkName == ""))
668+ then throw("This art doesn't match your account")
669+ else {
670+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
671+ if (!(acceptedAssetIds(assetId)))
672+ then throw("Something went wrong!")
673+ else if (!(validateMinSell(assetId, price)))
674+ then throw("Something went wrong!")
698675 else {
699- let amountSold = getIntegerByKey(keyIssued(caller, artId))
700- let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
701- if ((maxMint > 10000))
702- then throw("10000 editions max per artwork")
703- else if (if ((amountSold != 0))
704- then (amountSold == maxCanSell)
705- else false)
706- then throw("Max edition reached.")
707- else if (if ((amountSold > 0))
708- then (maxCanSell != maxMint)
709- else false)
710- then throw("Cannot change maximum issuable anymore")
711- else if (if ((bidNbr > 0))
712- then (maxCanSell != maxMint)
676+ let checkUser = validateUser(caller)
677+ if ((checkUser != ""))
678+ then throw(checkUser)
679+ else {
680+ let amountSold = getIntegerByKey(keyIssued(caller, artId))
681+ let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
682+ if ((maxMint > 10000))
683+ then throw("10000 editions max per artwork")
684+ else if (if ((amountSold != 0))
685+ then (amountSold == maxCanSell)
713686 else false)
714- then throw("Cannot change maximum issuable with active orders")
715- else {
716- let sellStatus = if (if ((price > 0))
717- then (maxMint > 0)
687+ then throw("Max edition reached.")
688+ else if (if ((amountSold > 0))
689+ then (maxCanSell != maxMint)
690+ else false)
691+ then throw("Cannot change maximum issuable anymore")
692+ else if (if ((bidNbr > 0))
693+ then (maxCanSell != maxMint)
718694 else false)
719- then true
720- else false
721- let endHeight = (duration + height)
722-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType), IntegerEntry(keyRoyalty(caller, artId), royalty)]
723- }
695+ then throw("Cannot change maximum issuable with active orders")
696+ else {
697+ let sellStatus = if (if ((price > 0))
698+ then (maxMint > 0)
699+ else false)
700+ then true
701+ else false
702+ let endHeight = (duration + height)
703+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
704+ }
705+ }
724706 }
725- }
726- }
707+ }
708+ }
709+ else throw("Strict value is not equal to itself.")
710+ }
711+ else throw("Strict value is not equal to itself.")
727712 }
728713
729714
730715
731716 @Callable(i)
732717 func buyArtwork (artId,issuer) = {
733718 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
734719 if ((auctionType == auctionType3))
735720 then buyMint(i, artId, issuer, "", "", false)
736721 else throw("Direct buy only allowed when no auction type is set!")
737722 }
738723
739724
740725
741726 @Callable(i)
742727 func updateTags (artist,artId,tags) = {
743728 let caller = toString(addressFromPublicKey(i.callerPublicKey))
744729 if (containsElement(owners, caller))
745730 then if ((size(split(tags, ",")) > 5))
746731 then throw("5 tags max.")
747732 else {
748733 let tagsOld = getStringByKeyOrError(keyTags(artist, artId), "No tags created with this key, so can't update!")
749734 if ((tags == tagsOld))
750735 then throw("Tags are the same as old tags!")
751736 else [StringEntry(keyTags(artist, artId), tags)]
752737 }
753738 else throw("no")
754739 }
755740
756741
757742
758743 @Callable(i)
759744 func deleteEntry (entry) = {
760745 let caller = toString(addressFromPublicKey(i.callerPublicKey))
761746 if (containsElement(owners, caller))
762747 then [DeleteEntry(entry)]
763748 else throw("no")
764749 }
765750
766751
767752
768753 @Callable(i)
769754 func setBid (artId,issuer) = {
770755 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
771756 if ((auctionType == auctionType1))
772757 then setBidNonTraditional(i, artId, issuer)
773758 else if ((auctionType == auctionType2))
774759 then setBidTraditional(i, artId, issuer)
775760 else throw((("Unknown auction type :" + auctionType) + ", please contact the admins"))
776761 }
777762
778763
779764
780765 @Callable(i)
781766 func acceptBid (artId,issuer,bidId,bidOwner) = {
782767 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
783768 if ((auctionType == auctionType1))
784769 then acceptBidNonTraditional(i, artId, issuer, bidId, bidOwner)
785770 else if ((auctionType == auctionType2))
786771 then acceptBidTraditional(i, artId, issuer, bidId, bidOwner)
787772 else throw((("Unknown auction type :" + auctionType) + ", please contact the admins"))
788773 }
789774
790775
791776
792777 @Callable(i)
793778 func cancelBid (artId,issuer,bidId) = {
794779 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
795780 if ((auctionType == auctionType1))
796781 then cancelBidImpl(i, artId, issuer, bidId)
797782 else cancelBidImplTraditional(i, artId, issuer, bidId)
798783 }
799784
800785

github/deemru/w8io/873ac7e 
110.56 ms