tx · J4hu6oG8ckdoaQuJS7VH15TKgPY8rCqK1Fu2a7tj1gJW

3N8jKcYWjJn5GjrJV94rxzVk42TPk1rPLeu:  -0.01000000 Waves

2022.04.20 12:20 [2016678] smart account 3N8jKcYWjJn5GjrJV94rxzVk42TPk1rPLeu > SELF 0.00000000 Waves

{ "type": 13, "id": "J4hu6oG8ckdoaQuJS7VH15TKgPY8rCqK1Fu2a7tj1gJW", "fee": 1000000, "feeAssetId": null, "timestamp": 1650446454424, "version": 2, "chainId": 84, "sender": "3N8jKcYWjJn5GjrJV94rxzVk42TPk1rPLeu", "senderPublicKey": "914UmzBhcoS4onGGVcBRgb4VPV88m9VCFjsj5WWck5vm", "proofs": [ "3t1JZLNpL8Js6fzXiWDNfC8ThRibGmkK2uvvZAV4J8xecncuXxqtY1vuAkSq6ExK8qAKioMKdw5FqbNQt3xALHXF" ], "script": "base64:AAIFAAAAAAAAAFgIAhIDCgEIEgMKAQgSBQoDAQgIEgwKCggICAgICAgICAgSDgoMCAEBCAgBCAgIAQEBEgQKAggIEgUKAwgICBIDCgEIEgQKAggIEgYKBAgICAgSBQoDCAgIAAAAVAAAAAAIdW5pdFRlc3QHAAAAAAlvcmFjbGVLZXkCAAAACW9yYWNsZUtleQEAAAAGZ2V0U3RyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWICAAAAAAAAAAAGb3JhY2xlCQEAAAAGZ2V0U3RyAAAAAQUAAAAJb3JhY2xlS2V5AAAAAAlvcmFjbGVGZWUJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQUAAAAGb3JhY2xlAAAAAAZvd25lcnMJAARMAAAAAgkABB0AAAACBQAAAAlvcmFjbGVGZWUCAAAABm93bmVyMQkABEwAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAGb3duZXIyBQAAAANuaWwAAAAAD2NvbGxlY3Rpb25zRGFwcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAPY29sbGVjdGlvbnNEYXBwAgAAABhjb2xsZWN0aW9uRGFwcCBub3QgZm91bmQAAAAAC2ZlZVJlY2VpdmVyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAJb3JhY2xlRmVlAgAAAAtmZWVSZWNlaXZlcgIAAAAVZmVlUmVjZWl2ZXIgbm90IGZvdW5kAAAAAAhjZXJ0RGFwcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAIY2VydERhcHACAAAAEmNlcnREYXBwIG5vdCBmb3VuZAAAAAAHZmVlRGFwcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACW9yYWNsZUZlZQIAAAAHZmVlRGFwcAIAAAARZmVlRGFwcCBub3QgZm91bmQAAAAACHVzZXJEYXBwCQEAAAAFdmFsdWUAAAABCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAlvcmFjbGVGZWUCAAAACHVzZXJEYXBwAgAAABJ1c2VyZGFwcCBub3QgZm91bmQAAAAACXN0YWtlRGFwcAkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAJb3JhY2xlRmVlAgAAAAlzdGFrZURhcHACAAAAFHNjb25leERhcHAgbm90IGZvdW5kAAAAAAtVU0ROQXNzZXRJZAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAlvcmFjbGVGZWUCAAAAC1VTRE5Bc3NldElkAAAAAA1TY29uZXhBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAACW9yYWNsZUZlZQIAAAANU2NvbmV4QXNzZXRJZAAAAAAFdHlwZXMJAARMAAAAAgIAAAAFSU1BR0UJAARMAAAAAgIAAAADUERGCQAETAAAAAICAAAABVZJREVPBQAAAANuaWwAAAAADFByZXZpZXd0eXBlcwkABEwAAAACAgAAAANQREYFAAAAA25pbAAAAAALZGFwcFJ1bm5pbmcJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAIdXNlckRhcHACAAAAFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAAAAAObWFpbnRlbmFuY2VNU0cJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAIdXNlckRhcHACAAAAFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAAAAAAAAAADXVzZXJTdXNwZW5kZWQCAAAACVNVU1BFTkRFRAAAAAALdXNlclJlbW92ZWQCAAAAB1JFTU9WRUQAAAAAEHVzZXJVbnJlZ2lzdGVyZWQCAAAADFVOUkVHSVNURVJFRAAAAAAMYXVjdGlvblR5cGUxAgAAAAdCSURUWVBFAAAAAAxhdWN0aW9uVHlwZTICAAAAC1RSQURJVElPTkFMAAAAAAxhdWN0aW9uVHlwZTMCAAAABkRJUkVDVAEAAAAXZ2V0U3RyaW5nQnlLZXlGcm9tVXNlcnMAAAABAAAAA2tleQkBAAAA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ASwAAAACAgAAABNnZXRfaGFzaGJ5dHhpZGFkZHJfBQAAAAR0eGlkAgAAAAFfBQAAAAZjYWxsZXIBAAAADmtleU93bmVyQnlIYXNoAAAAAQAAAApzaGEyNTZIYXNoCQABLAAAAAICAAAAEmdldF9vd25lcl9ieV9oYXNoXwUAAAAKc2hhMjU2SGFzaAEAAAASa2V5VHhpZEJ5SGFzaE93bmVyAAAAAgAAAApzaGEyNTZIYXNoAAAABmNhbGxlcgkAASwAAAACAgAAABdnZXRfdHhpZF9ieV9oYXNoX293bmVyXwkAAlgAAAABCQALVAAAAAEJAAGbAAAAAQkAASwAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIBAAAADWtleUNvbGxlY3Rpb24AAAACAAAABmNhbGxlcgAAAAVhcnRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALY29sbGVjdGlvbl8FAAAABWFydElkAgAAAAFfBQAAAAZjYWxsZXIAAAAADG1pblVTRE5QcmljZQkBAAAAGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUAAAABCQABLAAAAAICAAAABG1pbl8JAAJYAAAAAQUAAAALVVNETkFzc2V0SWQAAAAAEGN1cnJlbnRGZWVTY29uZXgJAQAAABlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAAAAAQkAASwAAAACAgAAAARmZWVfCQACWAAAAAEFAAAADVNjb25leEFzc2V0SWQBAAAAEGdldEFtb3VudEJ5QmlkSWQAAAABAAAABWJpZElkCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAACGtleUJpZElkAAAAAQUAAAAFYmlkSWQAAAAAAAAAAAABAAAAGmdldEFtb3VudEhpZ2hlc3RCaWRCeUFydElkAAAAAQAAAAVhcnRJZAQAAAAFYmlkSWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABJrZXlIaWdoZXN0QmlkQmlkSWQAAAABBQAAAAVhcnRJZAkBAAAAEGdldEFtb3VudEJ5QmlkSWQAAAABBQAAAAViaWRJZAEAAAAOdmFsaWRhdGVTdHJpbmcAAAACAAAAA3N0cgAAAANtYXgDCQAAAAAAAAIJ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BQAAAAdhcnREYXRhAAAAAl8yBAAAAAphbW91bnRTb2xkCAUAAAAHYXJ0RGF0YQAAAAJfMwQAAAAMYXJ0d29ya1ByaWNlCAUAAAAHYXJ0RGF0YQAAAAJfNAQAAAAMcHJpY2VBc3NldElkCAUAAAAHYXJ0RGF0YQAAAAJfNQQAAAAKbWF4Q2FuU2VsbAgFAAAAB2FydERhdGEAAAACXzYEAAAACGlzT25TYWxlCAUAAAAHYXJ0RGF0YQAAAAJfNwQAAAAHYmlkRGF0YQkBAAAACmdldEJpZERhdGEAAAAJBQAAAAFpBQAAAAZjYWxsZXIFAAAABmlzc3VlcgUAAAAFYXJ0SWQFAAAACGJpZE93bmVyBQAAAAViaWRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxhcnR3b3JrUHJpY2UFAAAABWlzQmlkBAAAAApiaWREYXRhS2V5CAUAAAAHYmlkRGF0YQAAAAJfMQQAAAAGYW1vdW50CAUAAAAHYmlkRGF0YQAAAAJfMgQAAAAHYXNzZXRJZAgFAAAAB2JpZERhdGEAAAACXzMEAAAADW5ld0Ftb3VudFNvbGQDCQAAAAAAAAIFAAAACmFtb3VudFNvbGQFAAAACm1heENhblNlbGwJAAACAAAAAQIAAAAOTWF4IGl0ZW1zIHNvbGQJAABkAAAAAgUAAAAKYW1vdW50U29sZAAAAAAAAAAAAQQAAAAKaXNzdWVyRGF0YQkBAAAADGdldElzc3VlRGF0YQAAAAsFAAAABmlzc3VlcgUAAAAFYXJ0SWQFAAAAC2FydHdvcmtOYW1lBQAAAA1uZXdBbW91bnRTb2xkBQAAAAptYXhDYW5TZWxsBQAAAAh0b3RhbE5GVAUAAAAGY2FsbGVyBQAAAAhiaWRPd25lcgUAAAAFYmlkSWQFAAAAAWkFAAAACGlzT25TYWxlBAAAAApzZWxsU3RhdHVzCAUAAAAKaXNzdWVyRGF0YQAAAAJfMQQAAAAKcmVjZWl2ZU5GVAgFAAAACmlzc3VlckRhdGEAAAACXzIEAAAACWlzc3VlTWV0YQgFAAAACmlzc3VlckRhdGEAAAACXzMEAAAAC2lkTkZUSW52b2tlCQAD/AAAAAQFAAAABHRoaXMCAAAAB21pbnROZnQJAARMAAAAAgUAAAAIdG90YWxORlQJAARMAAAAAgUAAAAJ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aWwBAAAAEXNldEJpZFRyYWRpdGlvbmFsAAAAAwAAAAFpAAAABWFydElkAAAABmlzc3VlcgQAAAAJZW5kSGVpZ2h0CQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAADGtleUVuZEhlaWdodAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACmhpZ2hlc3RCaWQJAQAAABpnZXRBbW91bnRIaWdoZXN0QmlkQnlBcnRJZAAAAAEFAAAABWFydElkAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAACWVuZEhlaWdodAkAAAIAAAABAgAAACFUaGlzIGF1Y3Rpb24gaXMgZmluaXNoZWQgYWxyZWFkeSEEAAAAC2NhbGxkZXJEYXRhCQEAAAAMaWRDYWxsZXJEYXRlAAAAAQUAAAABaQQAAAACaWQIBQAAAAtjYWxsZGVyRGF0YQAAAAJfMQQAAAAGY2FsbGVyCAUAAAALY2FsbGRlckRhdGEAAAACXzIEAAAABGRhdGUIBQAAAAtjYWxsZGVyRGF0YQAAAAJfMwQAAAAMaXNQYXltZW50VmFyCQEAAAAJaXNQYXltZW50AAAAAQUAAAABaQQAAAAHcGF5bWVudAgFAAAADGlzUGF5bWVudFZhcgAAAAJfMQQAAAAGYW1vdW50CAUAAAAMaXNQYXltZW50VmFyAAAAAl8yAwkAAGcAAAACBQAAAApoaWdoZXN0QmlkBQAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAACBQbGVhc2UgcGxhY2UgYSBiaWQgaGlnaGVyIHRoYW46IAkAAaQAAAABBQAAAApoaWdoZXN0QmlkBAAAAAdhc3NldElkAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAABZPbmx5IFVTRE4gaXMgYWNjZXB0ZWQhCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQEAAAABmJpZE5icgkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAVhcnRJZAQAAAAPbWluQXJ0d29ya1ByaWNlCQEAAAALdmFsdWVPckVs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AABnAAAAAgUAAAAMb2xkRW5kSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAkUHJldmlvdXMgYXVjdGlvbiBpc24ndCBjb21wbGV0ZWQgeWV0AwkAAAAAAAACBQAAAAphbW91bnRTb2xkBQAAAAptYXhDYW5TZWxsCQAAAgAAAAECAAAAJkNhbid0IHJlc3RhcnQgYXVjdGlvbiwgbWF4IGFtb3VudCBzb2xkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAMa2V5RW5kSGVpZ2h0AAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAUAAAAJZW5kSGVpZ2h0CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABJrZXlIaWdoZXN0QmlkQmlkSWQAAAABBQAAAAVhcnRJZAUAAAADbmlsAQAAABRhY2NlcHRCaWRUcmFkaXRpb25hbAAAAAUAAAABaQAAAAVhcnRJZAAAAAZpc3N1ZXIAAAAFYmlkSWQAAAAIYmlkT3duZXIEAAAACWVuZEhlaWdodAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAxrZXlFbmRIZWlnaHQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxoaWdoZXN0QmlkSWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABJrZXlIaWdoZXN0QmlkQmlkSWQAAAABBQAAAAVhcnRJZAMJAABnAAAAAgUAAAAJZW5kSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAhVGhpcyBhdWN0aW9uIGlzIG5vdCB5ZXQgZmluaXNoZWQhAwkBAAAAAiE9AAAAAgUAAAAFYmlkSWQFAAAADGhpZ2hlc3RCaWRJZAkAAAIAAAABAgAAABxUaGlzIGlzIG5vdCB0aGUgd2lubmluZyBiaWQhBAAAAAtidXlNaW50RGF0YQkBAAAAB2J1eU1pbnQAAAAGBQAAAAFpBQAAAAVhcnRJZAUAAAAGaXNzdWVyBQAAAAViaWRJZAUAAAAIYmlkT3duZXIGBAAAABJyZXN0YXJ0QXVjdGlvbkRhdGEJAQAAAA5yZXN0YXJ0QXVjdGlvbgAAAAIFAAAABWFydElkBQAAAAZpc3N1ZXIJAAROAAAAAgUAAAAScmVz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MgQAAAAEZGF0ZQgFAAAADHQwMTc3NDAxNzc4MQAAAAJfMwMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABXR5cGVzBQAAAAR0eXBlCQAAAgAAAAECAAAADFVua25vd24gdHlwZQQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAUFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAEbmFtZQUAAAALZGVzY3JpcHRpb24FAAAABHRhZ3MDCQEAAAACIT0AAAACBQAAAA92YWxpZGF0ZUFydHdvcmsCAAAAAAkAAAIAAAABAgAAABVTb21ldGhpbmcgd2VudCB3cm9uZyEEAAAADHQwMTgxNzAxODIxMgkBAAAAD3ZhbGlkYXRlUGF5bWVudAAAAAEFAAAAAWkEAAAABmFtb3VudAgFAAAADHQwMTgxNzAxODIxMgAAAAJfMQQAAAAHYXNzZXRJZAgFAAAADHQwMTgxNzAxODIxMgAAAAJfMgMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAABmFtb3VudAkAAAIAAAABAgAAABRTb21ldGhpbmcgd2VudCB3cm9uZwQAAAALcHJldmlld0RhdGEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAMUHJldmlld3R5cGVzBQAAAAR0eXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlQcmV2aWV3Q2lkAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAHcHJldmlldwUAAAADbmlsBQAAAANuaWwEAAAADGFtb3VudFRvU2VuZAkAAGkAAAACCQAAZQAAAAIFAAAABmFtb3VudAAAAAAAAAAAAQAAAAAAAAAAAgQAAAASaW52b2tlVGVhbUZlZVNwbGl0CQAD/AAAAAQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgUAAAAJc3Rha2VEYXBwAgAAABNzdGFrZURhcHAgbm90IGZvdW5kAgAAAAZwYXlGZWUFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAHYXNzZXRJZAUAAAAMYW1vdW50VG9TZW5kBQAAAANuaWwDCQAAAAAAAAIFAAAAEmludm9rZVRlYW1GZWVTcGxpdAUAAAASaW52b2tlVGVhbUZlZVNwbGl0BAAAABZpbnZva2VDb2xsZWN0aW9uQ3JlYXRlCQAD/AAAAAQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAA9jb2xsZWN0aW9uc0RhcHAJAAEsAAAAAgUAAAAPY29sbGVjdGlvbnNEYXBwAgAAAAogbm90IGZvdW5kAgAAABFjb2xsZWN0aW9uUHJvY2VzcwkABEwAAAACBQAAAApjb2xsZWN0aW9uCQAETAAAAAIFAAAADXN1YmNvbGxlY3Rpb24JAARMAAAAAgUAAAAGY2FsbGVyBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAWaW52b2tlQ29sbGVjdGlvbkNyZWF0ZQUAAAAWaW52b2tlQ29sbGVjdGlvbkNyZWF0ZQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEmtleVR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAABRZb3UgYWxyZWFkeSBhZGRlZCBpdAQAAAAJaGFzaEV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAOa2V5T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoAwkBAAAAAiE9AAAAAgUAAAAJaGFzaEV4aXN0AgAAAAAJAAACAAAAAQIAAAAfVGhpcyBoYXNoIGlzIGFscmVhZHkgcmVnaXN0ZXJlZAkABE4AAAACBQAAAAtwcmV2aWV3RGF0YQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleVR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAABmNhbGxlcgUAAAAFYXJ0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRy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bmdFbnRyeQAAAAIJAQAAAAdrZXlUYWdzAAAAAgUAAAAGYXJ0aXN0BQAAAAVhcnRJZAUAAAAEdGFncwUAAAADbmlsAAAAAWkBAAAAC2RlbGV0ZUVudHJ5AAAAAQAAAAVlbnRyeQQAAAAGY2FsbGVyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAABm93bmVycwUAAAAGY2FsbGVyCQAAAgAAAAECAAAAAm5vCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAABWVudHJ5BQAAAANuaWwAAAABaQEAAAAGc2V0QmlkAAAAAgAAAAVhcnRJZAAAAAZpc3N1ZXIEAAAAC2F1Y3Rpb25UeXBlCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAOa2V5QXVjdGlvblR5cGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAAAAAAACBQAAAAthdWN0aW9uVHlwZQUAAAAMYXVjdGlvblR5cGUxCQEAAAAUc2V0QmlkTm9uVHJhZGl0aW9uYWwAAAADBQAAAAFpBQAAAAVhcnRJZAUAAAAGaXNzdWVyAwkAAAAAAAACBQAAAAthdWN0aW9uVHlwZQUAAAAMYXVjdGlvblR5cGUyCQEAAAARc2V0QmlkVHJhZGl0aW9uYWwAAAADBQAAAAFpBQAAAAVhcnRJZAUAAAAGaXNzdWVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABZVbmtub3duIGF1Y3Rpb24gdHlwZSA6BQAAAAthdWN0aW9uVHlwZQIAAAAbLCBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5zAAAAAWkBAAAACWFjY2VwdEJpZAAAAAQAAAAFYXJ0SWQAAAAGaXNzdWVyAAAABWJpZElkAAAACGJpZE93bmVyBAAAAAthdWN0aW9uVHlwZQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADmtleUF1Y3Rpb25UeXBlAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAMJAAAAAAAAAgUAAAALYXVjdGlvblR5cGUFAAAADGF1Y3Rpb25UeXBlMQkBAAAAF2FjY2VwdEJpZE5vblRyYWRpdGlvbmFsAAAABQUAAAABaQUAAAAFYXJ0SWQFAAAABmlzc3VlcgUAAAAFYmlkSWQFAAAACGJpZE93bmVyAwkAAAAAAAACBQAAAAthdWN0aW9uVHlwZQUAAAAMYXVjdGlvblR5cGUyCQEAAAAUYWNjZXB0QmlkVHJhZGl0aW9uYWwAAAAFBQAAAAFpBQAAAAVhcnRJZAUAAAAGaXNzdWVyBQAAAAViaWRJZAUAAAAIYmlkT3duZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAFlVua25vd24gYXVjdGlvbiB0eXBlIDoFAAAAC2F1Y3Rpb25UeXBlAgAAABssIHBsZWFzZSBjb250YWN0IHRoZSBhZG1pbnMAAAABaQEAAAAJY2FuY2VsQmlkAAAAAwAAAAVhcnRJZAAAAAZpc3N1ZXIAAAAFYmlkSWQEAAAAC2F1Y3Rpb25UeXBlCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAOa2V5QXVjdGlvblR5cGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAAAAAAACBQAAAAthdWN0aW9uVHlwZQUAAAAMYXVjdGlvblR5cGUxCQEAAAANY2FuY2VsQmlkSW1wbAAAAAQFAAAAAWkFAAAABWFydElkBQAAAAZpc3N1ZXIFAAAABWJpZElkCQEAAAAYY2FuY2VsQmlkSW1wbFRyYWRpdGlvbmFsAAAABAUAAAABaQUAAAAFYXJ0SWQFAAAABmlzc3VlcgUAAAAFYmlkSWQAAAAAwlmuKg==", "height": 2016678, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C9f4Ed4UEj4hr2tRjbsizvTPFP1YHeGAWgouW8RJygCh Next: 5opGNWBpBwkpoGmhgWy814BFymwrt2HQuH7VTNQxcvdZ Diff:
OldNewDifferences
2828 let feeDapp = valueOrErrorMessage(getString(oracleFee, "feeDapp"), "feeDapp not found")
2929
3030 let userDapp = value(addressFromString(valueOrErrorMessage(getString(oracleFee, "userDapp"), "userdapp not found")))
31+
32+let stakeDapp = addressFromString(valueOrErrorMessage(getString(oracleFee, "stakeDapp"), "sconexDapp not found"))
3133
3234 let USDNAssetId = fromBase58String(getStringValue(oracleFee, "USDNAssetId"))
3335
617619 let previewData = if (containsElement(Previewtypes, type))
618620 then [StringEntry(keyPreviewCid(caller, artId), preview)]
619621 else nil
620- let invokeCollectionCreate = invoke(valueOrErrorMessage(addressFromString(collectionsDapp), (collectionsDapp + " not found")), "collectionProcess", [collection, subcollection, caller], nil)
621- if ((invokeCollectionCreate == invokeCollectionCreate))
622+ let amountToSend = ((amount - 1) / 2)
623+ let invokeTeamFeeSplit = invoke(valueOrErrorMessage(stakeDapp, "stakeDapp not found"), "payFee", nil, [AttachedPayment(assetId, amountToSend)])
624+ if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
622625 then {
623- let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
624- if ((entryExist != ""))
625- then throw("You already added it")
626- else {
627- let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
628- if ((hashExist != ""))
629- then throw("This hash is already registered")
630- 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)])
626+ let invokeCollectionCreate = invoke(valueOrErrorMessage(addressFromString(collectionsDapp), (collectionsDapp + " not found")), "collectionProcess", [collection, subcollection, caller], nil)
627+ if ((invokeCollectionCreate == invokeCollectionCreate))
628+ then {
629+ let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
630+ if ((entryExist != ""))
631+ then throw("You already added it")
632+ else {
633+ let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
634+ if ((hashExist != ""))
635+ then throw("This hash is already registered")
636+ 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)), amountToSend, assetId)])
637+ }
631638 }
639+ else throw("Strict value is not equal to itself.")
632640 }
633641 else throw("Strict value is not equal to itself.")
634642 }
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
2828 let feeDapp = valueOrErrorMessage(getString(oracleFee, "feeDapp"), "feeDapp not found")
2929
3030 let userDapp = value(addressFromString(valueOrErrorMessage(getString(oracleFee, "userDapp"), "userdapp not found")))
31+
32+let stakeDapp = addressFromString(valueOrErrorMessage(getString(oracleFee, "stakeDapp"), "sconexDapp not found"))
3133
3234 let USDNAssetId = fromBase58String(getStringValue(oracleFee, "USDNAssetId"))
3335
3436 let SconexAssetId = fromBase58String(getStringValue(oracleFee, "SconexAssetId"))
3537
3638 let types = ["IMAGE", "PDF", "VIDEO"]
3739
3840 let Previewtypes = ["PDF"]
3941
4042 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
4143
4244 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
4345
4446 let userSuspended = "SUSPENDED"
4547
4648 let userRemoved = "REMOVED"
4749
4850 let userUnregistered = "UNREGISTERED"
4951
5052 let auctionType1 = "BIDTYPE"
5153
5254 let auctionType2 = "TRADITIONAL"
5355
5456 let auctionType3 = "DIRECT"
5557
5658 func getStringByKeyFromUsers (key) = valueOrElse(getString(userDapp, key), "")
5759
5860
5961 func getStringByKey (key) = valueOrElse(getString(this, key), "")
6062
6163
6264 func getStringByKeyOrError (key,error) = valueOrErrorMessage(getString(this, key), error)
6365
6466
6567 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
6668
6769
6870 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
6971
7072
7173 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
7274
7375
7476 func validateHash (hash) = (size(hash) == 64)
7577
7678
7779 func keyUserStatus (caller) = ("user_status_" + caller)
7880
7981
8082 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
8183
8284
8385 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
8486
8587
8688 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
8789
8890
8991 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
9092
9193
9294 func keyPreviewCid (caller,artId) = ((("art_preview_cid_" + artId) + "_") + caller)
9395
9496
9597 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
9698
9799
98100 func keyHighestBidBidId (artId) = ("art_highestBidBidId_" + artId)
99101
100102
101103 func keyBidId (bidId) = ("bid_" + bidId)
102104
103105
104106 func keyDuration (caller,artId) = ((("art_duration_" + artId) + "_") + caller)
105107
106108
107109 func keyEndHeight (caller,artId) = ((("art_endheight_" + artId) + "_") + caller)
108110
109111
110112 func keyAuctionType (caller,artId) = ((("art_auctiontype_" + artId) + "_") + caller)
111113
112114
113115 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
114116
115117
116118 func KeyNftIssuer (nftId) = ("nft_issued_" + nftId)
117119
118120
119121 func KeyNftArtId (nftId) = ("nft_artId_" + nftId)
120122
121123
122124 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
123125
124126
125127 func keyEntitlement (caller,artId) = ((("art_entitlement_" + artId) + "_") + caller)
126128
127129
128130 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
129131
130132
131133 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
132134
133135
134136 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
135137
136138
137139 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
138140
139141
140142 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
141143
142144
143145 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
144146
145147
146148 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
147149
148150
149151 func keyCollection (caller,artId) = ((("collection_" + artId) + "_") + caller)
150152
151153
152154 let minUSDNPrice = getIntegerByKeyFromOracle(("min_" + toBase58String(USDNAssetId)))
153155
154156 let currentFeeSconex = getIntegerByKeyFromOracle(("fee_" + toBase58String(SconexAssetId)))
155157
156158 func getAmountByBidId (bidId) = valueOrElse(getIntegerByKey(keyBidId(bidId)), 0)
157159
158160
159161 func getAmountHighestBidByArtId (artId) = {
160162 let bidId = getStringByKey(keyHighestBidBidId(artId))
161163 getAmountByBidId(bidId)
162164 }
163165
164166
165167 func validateString (str,max) = if ((size(str) == 0))
166168 then throw("Field cannot be is empty")
167169 else if ((size(str) > max))
168170 then throw((str + " is too long"))
169171 else true
170172
171173
172174 func validateUser (caller) = {
173175 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
174176 if ((userStatus == userUnregistered))
175177 then "Register this account first with 'Account' tab"
176178 else if ((userStatus == userSuspended))
177179 then "Account suspended"
178180 else if ((userStatus == userRemoved))
179181 then "Account removed"
180182 else ""
181183 }
182184
183185
184186 func validateArtworkData (caller,cidDisplay,name,description,tags) = {
185187 let checkUser = validateUser(caller)
186188 if ((checkUser != ""))
187189 then throw(checkUser)
188190 else if ((size(cidDisplay) == 0))
189191 then throw("Display CID cannot be empty")
190192 else if ((size(cidDisplay) != 46))
191193 then throw("This doesn't seem a valid CID!")
192194 else if (!(validateString(name, 100)))
193195 then throw("100 Char. max name")
194196 else if (!(validateString(description, 1000)))
195197 then throw("1000 Char. max description")
196198 else if ((size(split(tags, ",")) > 5))
197199 then throw("5 tags max.")
198200 else ""
199201 }
200202
201203
202204 func isPayment (i) = if ((size(i.payments) == 0))
203205 then throw("No payment attached")
204206 else {
205207 let payment = value(i.payments[0])
206208 let amount = value(payment.amount)
207209 $Tuple2(payment, amount)
208210 }
209211
210212
211213 func validatePayment (i) = {
212214 let t089829018 = isPayment(i)
213215 let payment = t089829018._1
214216 let amount = t089829018._2
215217 let assetId = if (if (isDefined(payment.assetId))
216218 then (payment.assetId == SconexAssetId)
217219 else false)
218220 then payment.assetId
219221 else throw((("Only " + toBase58String(SconexAssetId)) + " token accepted as transaction fee"))
220222 if ((amount != currentFeeSconex))
221223 then throw(((("Payment amount should be " + toString(currentFeeSconex)) + " but is: ") + toString(amount)))
222224 else $Tuple2(amount, assetId)
223225 }
224226
225227
226228 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
227229 case b: Int =>
228230 if ((b != 0))
229231 then true
230232 else false
231233 case _ =>
232234 false
233235 }
234236
235237
236238 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
237239 let pData = isPayment(i)
238240 let payment = pData._1
239241 let amount = pData._2
240242 let assetId = if (!(isDefined(payment.assetId)))
241243 then throw("Wrong asset id")
242244 else if (if ((size(priceAssetId) > 0))
243245 then (toBase58String(value(payment.assetId)) == priceAssetId)
244246 else false)
245247 then payment.assetId
246248 else throw("Wrong asset id")
247249 if (if ((assetId == unit))
248250 then true
249251 else (priceAssetId != ""))
250252 then throw("Wrong asset id")
251253 else if ((artworkPrice != amount))
252254 then throw(((("Payment don't match " + toString(artworkPrice)) + " ") + toString(amount)))
253255 else $Tuple2(amount, assetId)
254256 }
255257
256258
257259 func acceptedAssetIds (assetId) = if ((assetId != toBase58String(USDNAssetId)))
258260 then throw("Only USDN accepted")
259261 else true
260262
261263
262264 func validateMinSell (assetId,price) = {
263265 let minSellSconex = minUSDNPrice
264266 if (if ((minSellSconex > price))
265267 then true
266268 else (assetId != toBase58String(USDNAssetId)))
267269 then throw(("Wrong minimum sell price " + toString(minSellSconex)))
268270 else true
269271 }
270272
271273
272274 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
273275 then throw("Only USDN is accepted!")
274276 else fromBase58String(assetId)
275277
276278
277279 func getPriceAssetIdFromBid (bidDataKey) = {
278280 let bidData = getStringByKey((bidDataKey + "_OPEN"))
279281 if ((bidData == ""))
280282 then throw("Bid not found")
281283 else {
282284 let bidDataArr = split(bidData, "_")
283285 let bidAmount = parseIntValue(bidDataArr[1])
284286 let bidAssetId = getBidAssetId(bidDataArr[0])
285287 if ((0 >= bidAmount))
286288 then throw("Wrong amount")
287289 else $Tuple2(bidAmount, bidAssetId)
288290 }
289291 }
290292
291293
292294 func idCallerDate (i) = if (!(dappRunning))
293295 then throw(maintenanceMSG)
294296 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
295297
296298
297299 func getArtData (i,issuer,artId,isBid) = {
298300 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
299301 let totalNFT = getIntegerByKey("total_nft_issued")
300302 let artworkName = getStringByKey(keyName(issuer, artId))
301303 if ((artworkName == ""))
302304 then throw("Art doesn't exist")
303305 else {
304306 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
305307 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
306308 let artworkPrice = valueOrElse(getIntegerByKey(keyPrice(issuer, artId)), minUSDNPrice)
307309 let priceAssetId = if (callerIsIssuer)
308310 then toBase58String(USDNAssetId)
309311 else getStringByKey(keyAssetIdAccepted(issuer, artId))
310312 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
311313 if (if (if (!(isBid))
312314 then !(callerIsIssuer)
313315 else false)
314316 then if (if ((0 >= artworkPrice))
315317 then true
316318 else !(isOnSale))
317319 then true
318320 else (0 >= maxCanSell)
319321 else false)
320322 then throw("Art not for sale")
321323 else if (if (if (!(isBid))
322324 then callerIsIssuer
323325 else false)
324326 then (0 >= maxCanSell)
325327 else false)
326328 then throw("Max issuable not set")
327329 else $Tuple7(totalNFT, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
328330 }
329331 }
330332
331333
332334 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
333335 let checkUser = validateUser(issuer)
334336 if (if (isBid)
335337 then (checkUser != "")
336338 else false)
337339 then throw(checkUser)
338340 else {
339341 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
340342 let t01351913648 = if (isBid)
341343 then getPriceAssetIdFromBid(bidDataKey)
342344 else validatePriceAssetId(i, priceAssetId, artworkPrice)
343345 let amount = t01351913648._1
344346 let assetId = t01351913648._2
345347 $Tuple3(bidDataKey, amount, assetId)
346348 }
347349 }
348350
349351
350352 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
351353 let issueMeta = ((((((((("Creator: " + issuer) + ",ArtID: ") + artId) + ",Artwork name: ") + artworkName) + ",Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
352354 let sellStatus = if (if ((newAmountSold == maxCanSell))
353355 then true
354356 else !(isOnSale))
355357 then false
356358 else true
357359 let receiveNFT = if ((bidOwner != ""))
358360 then addressFromStringValue(bidOwner)
359361 else i.caller
360362 $Tuple3(sellStatus, receiveNFT, issueMeta)
361363 }
362364
363365
364366 func getBidKeyVal (assetId,bidDataKey,date) = {
365367 let assetIdBid = if (!(isDefined(assetId)))
366368 then throw("Only USDN is accepted")
367369 else toBase58String(value(assetId))
368370 let bidData = getStringByKey((bidDataKey + "_OPEN"))
369371 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
370372 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
371373 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
372374 }
373375
374376
375377 func buyMint (i,artId,issuer,bidId,bidOwner,isBid) = {
376378 let callerData = idCallerDate(i)
377379 let id = callerData._1
378380 let caller = callerData._2
379381 let date = callerData._3
380382 let artData = getArtData(i, issuer, artId, isBid)
381383 let totalNFT = artData._1
382384 let artworkName = artData._2
383385 let amountSold = artData._3
384386 let artworkPrice = artData._4
385387 let priceAssetId = artData._5
386388 let maxCanSell = artData._6
387389 let isOnSale = artData._7
388390 let bidData = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
389391 let bidDataKey = bidData._1
390392 let amount = bidData._2
391393 let assetId = bidData._3
392394 let newAmountSold = if ((amountSold == maxCanSell))
393395 then throw("Max items sold")
394396 else (amountSold + 1)
395397 let issuerData = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
396398 let sellStatus = issuerData._1
397399 let receiveNFT = issuerData._2
398400 let issueMeta = issuerData._3
399401 let idNFTInvoke = invoke(this, "mintNft", [totalNFT, issueMeta, toString(receiveNFT)], nil)
400402 if ((idNFTInvoke == idNFTInvoke))
401403 then {
402404 let idNFT = match idNFTInvoke {
403405 case r: String =>
404406 r
405407 case _ =>
406408 throw("Incorrect invoke result")
407409 }
408410 let bidKeyValue = getBidKeyVal(assetId, bidDataKey, date)
409411 let assetIdBid = bidKeyValue._1
410412 let bidDelOld = bidKeyValue._2
411413 let bidUpdate = bidKeyValue._3
412414 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
413415 let soldValue = if (!(isBid))
414416 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + idNFT)
415417 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + idNFT)
416418 let invokeTeamFeeSplit = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "payFee", [artId, issuer], [AttachedPayment(assetId, amount)])
417419 if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
418420 then {
419421 let soldData = StringEntry(soldKey, soldValue)
420422 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)]
421423 let res = invoke(addressFromStringValue(certDapp), "createCert", [toString(receiveNFT), idNFT, issuer], nil)
422424 if ((res == res))
423425 then if (isBid)
424426 then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
425427 else soldData :: buyRes
426428 else throw("Strict value is not equal to itself.")
427429 }
428430 else throw("Strict value is not equal to itself.")
429431 }
430432 else throw("Strict value is not equal to itself.")
431433 }
432434
433435
434436 func setBidNonTraditional (i,artId,issuer) = {
435437 let t02770927747 = idCallerDate(i)
436438 let id = t02770927747._1
437439 let caller = t02770927747._2
438440 let date = t02770927747._3
439441 let t02775227788 = isPayment(i)
440442 let payment = t02775227788._1
441443 let amount = t02775227788._2
442444 let assetId = if (!(isDefined(payment.assetId)))
443445 then throw("Only USDN is accepted!")
444446 else toBase58String(value(payment.assetId))
445447 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
446448 if (!(acceptedAssetIds(assetId)))
447449 then throw("asset not accepted")
448450 else {
449451 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
450452 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
451453 if ((0 >= maxCanSell))
452454 then throw("No max edition set for this artwork")
453455 else if ((amountSold >= maxCanSell))
454456 then throw("Sold out, you cannot bid")
455457 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
456458 }
457459 }
458460
459461
460462 func setBidTraditional (i,artId,issuer) = {
461463 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
462464 let highestBid = getAmountHighestBidByArtId(artId)
463465 if ((height > endHeight))
464466 then throw("This auction is finished already!")
465467 else {
466468 let callderData = idCallerDate(i)
467469 let id = callderData._1
468470 let caller = callderData._2
469471 let date = callderData._3
470472 let isPaymentVar = isPayment(i)
471473 let payment = isPaymentVar._1
472474 let amount = isPaymentVar._2
473475 if ((highestBid >= amount))
474476 then throw(("Please place a bid higher than: " + toString(highestBid)))
475477 else {
476478 let assetId = if (!(isDefined(payment.assetId)))
477479 then throw("Only USDN is accepted!")
478480 else toBase58String(value(payment.assetId))
479481 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
480482 let minArtworkPrice = valueOrElse(getIntegerByKey(keyPrice(issuer, artId)), minUSDNPrice)
481483 if (!(acceptedAssetIds(assetId)))
482484 then throw("asset not accepted")
483485 else if ((minArtworkPrice > amount))
484486 then throw("Bid is below min price!")
485487 else {
486488 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
487489 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
488490 if ((0 >= maxCanSell))
489491 then throw("No max edition set for this artwork")
490492 else if ((amountSold >= maxCanSell))
491493 then throw("Sold out, you cannot bid")
492494 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)]
493495 }
494496 }
495497 }
496498 }
497499
498500
499501 func acceptBidNonTraditional (i,artId,issuer,bidId,bidOwner) = {
500502 let caller = toBase58String(i.caller.bytes)
501503 if ((caller != issuer))
502504 then throw("You cannot do this action")
503505 else buyMint(i, artId, issuer, bidId, bidOwner, true)
504506 }
505507
506508
507509 func restartAuction (artId,issuer) = {
508510 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
509511 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
510512 let oldEndHeight = getIntegerByKey(keyEndHeight(issuer, artId))
511513 let duration = getIntegerByKey(keyDuration(issuer, artId))
512514 let endHeight = (duration + height)
513515 if ((oldEndHeight >= height))
514516 then throw("Previous auction isn't completed yet")
515517 else if ((amountSold == maxCanSell))
516518 then throw("Can't restart auction, max amount sold")
517519 else [IntegerEntry(keyEndHeight(issuer, artId), endHeight), DeleteEntry(keyHighestBidBidId(artId))]
518520 }
519521
520522
521523 func acceptBidTraditional (i,artId,issuer,bidId,bidOwner) = {
522524 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
523525 let highestBidId = getStringByKey(keyHighestBidBidId(artId))
524526 if ((endHeight >= height))
525527 then throw("This auction is not yet finished!")
526528 else if ((bidId != highestBidId))
527529 then throw("This is not the winning bid!")
528530 else {
529531 let buyMintData = buyMint(i, artId, issuer, bidId, bidOwner, true)
530532 let restartAuctionData = restartAuction(artId, issuer)
531533 (restartAuctionData ++ buyMintData)
532534 }
533535 }
534536
535537
536538 func cancelBidImpl (i,artId,issuer,bidId) = {
537539 let t02894229094 = idCallerDate(i)
538540 let id = t02894229094._1
539541 let caller = t02894229094._2
540542 let date = t02894229094._3
541543 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
542544 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
543545 let bidData = getStringByKeyOrError((bidDataKey + "_OPEN"), "Bid not found")
544546 let bidDataArr = split(bidData, "_")
545547 let assetId = getBidAssetId(bidDataArr[0])
546548 let bidStatus = "CANCELED"
547549 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
548550 }
549551
550552
551553 func cancelBidImplTraditional (i,artId,issuer,bidId) = {
552554 let t02894229094 = idCallerDate(i)
553555 let id = t02894229094._1
554556 let caller = t02894229094._2
555557 let date = t02894229094._3
556558 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
557559 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
558560 let bidData = getStringByKeyOrError((bidDataKey + "_OPEN"), "Bid not found")
559561 let bidDataArr = split(bidData, "_")
560562 let assetId = getBidAssetId(bidDataArr[0])
561563 let bidStatus = "CANCELED"
562564 let bidAmount = parseIntValue(bidDataArr[1])
563565 let highestBidId = getStringByKey(keyHighestBidBidId(artId))
564566 if ((bidId == highestBidId))
565567 then throw("You can't cancel the highest bid!")
566568 else [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), bidAmount, assetId)]
567569 }
568570
569571
570572 @Callable(i)
571573 func initDapp (dappKey) = if ((i.caller != this))
572574 then throw("You cannot do this action")
573575 else if ((oracle != ""))
574576 then throw("oracle already set, you can't override!")
575577 else [StringEntry(oracleKey, dappKey)]
576578
577579
578580
579581 @Callable(i)
580582 func restartAuctionManual (artId) = if ((getAmountHighestBidByArtId(artId) != 0))
581583 then throw("Please accept the highest bid!")
582584 else restartAuction(artId, toBase58String(i.caller.bytes))
583585
584586
585587
586588 @Callable(i)
587589 func mintNft (totalNFT,issueMeta,receiveNFT) = if ((i.caller != this))
588590 then throw("Only the dApp can mint NFT's")
589591 else {
590592 let receiveNFTAddy = Address(fromBase58String(receiveNFT))
591593 let issueNFT = Issue(("SCONEX_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
592594 let idNFT = calculateAssetId(issueNFT)
593595 $Tuple2([issueNFT, ScriptTransfer(receiveNFTAddy, 1, idNFT)], toBase58String(idNFT))
594596 }
595597
596598
597599
598600 @Callable(i)
599601 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay,entitlement,preview,collection,subcollection) = {
600602 let t01774017781 = idCallerDate(i)
601603 let artId = t01774017781._1
602604 let caller = t01774017781._2
603605 let date = t01774017781._3
604606 if (!(containsElement(types, type)))
605607 then throw("Unknown type")
606608 else {
607609 let validateArtwork = validateArtworkData(caller, cidDisplay, name, description, tags)
608610 if ((validateArtwork != ""))
609611 then throw("Something went wrong!")
610612 else {
611613 let t01817018212 = validatePayment(i)
612614 let amount = t01817018212._1
613615 let assetId = t01817018212._2
614616 if (!(isDefined(amount)))
615617 then throw("Something went wrong")
616618 else {
617619 let previewData = if (containsElement(Previewtypes, type))
618620 then [StringEntry(keyPreviewCid(caller, artId), preview)]
619621 else nil
620- let invokeCollectionCreate = invoke(valueOrErrorMessage(addressFromString(collectionsDapp), (collectionsDapp + " not found")), "collectionProcess", [collection, subcollection, caller], nil)
621- if ((invokeCollectionCreate == invokeCollectionCreate))
622+ let amountToSend = ((amount - 1) / 2)
623+ let invokeTeamFeeSplit = invoke(valueOrErrorMessage(stakeDapp, "stakeDapp not found"), "payFee", nil, [AttachedPayment(assetId, amountToSend)])
624+ if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
622625 then {
623- let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
624- if ((entryExist != ""))
625- then throw("You already added it")
626- else {
627- let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
628- if ((hashExist != ""))
629- then throw("This hash is already registered")
630- 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)])
626+ let invokeCollectionCreate = invoke(valueOrErrorMessage(addressFromString(collectionsDapp), (collectionsDapp + " not found")), "collectionProcess", [collection, subcollection, caller], nil)
627+ if ((invokeCollectionCreate == invokeCollectionCreate))
628+ then {
629+ let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
630+ if ((entryExist != ""))
631+ then throw("You already added it")
632+ else {
633+ let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
634+ if ((hashExist != ""))
635+ then throw("This hash is already registered")
636+ 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)), amountToSend, assetId)])
637+ }
631638 }
639+ else throw("Strict value is not equal to itself.")
632640 }
633641 else throw("Strict value is not equal to itself.")
634642 }
635643 }
636644 }
637645 }
638646
639647
640648
641649 @Callable(i)
642650 func sellArtwork (artId,price,maxMint,assetId,auctionType,duration,add1,add2,add3,add1Sh,add2Sh,add3Sh) = {
643651 let callData = idCallerDate(i)
644652 let id = callData._1
645653 let caller = callData._2
646654 let amountSold = getIntegerByKey(keyIssued(caller, artId))
647655 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
648656 if (if ((bidNbr > 0))
649657 then true
650658 else (amountSold > 0))
651659 then throw("There are bids or items sold, you can not edit anything!")
652660 else {
653661 let artworkName = getStringByKey(keyName(caller, artId))
654662 if (!(containsElement([auctionType1, auctionType2, auctionType3], auctionType)))
655663 then throw("We don't know this auction type")
656664 else if ((artworkName == ""))
657665 then throw("This art doesn't match your account")
658666 else if (!(acceptedAssetIds(assetId)))
659667 then throw("Something went wrong!")
660668 else if (!(validateMinSell(assetId, price)))
661669 then throw("Something went wrong!")
662670 else {
663671 let checkUser = validateUser(caller)
664672 if ((checkUser != ""))
665673 then throw(checkUser)
666674 else if ((maxMint > 10000))
667675 then throw("10000 editions max per artwork")
668676 else {
669677 let sellStatus = if ((price > 0))
670678 then (maxMint > 0)
671679 else false
672680 let teamFee = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "teamSplitFee", [artId, feeReceiver, "", "", 15, 0, 0], nil)
673681 if ((teamFee == teamFee))
674682 then {
675683 let creatorFee = invoke(valueOrErrorMessage(addressFromString(feeDapp), (feeDapp + " not found")), "creatorSplitFee", [artId, add1, add2, add3, add1Sh, add2Sh, add3Sh], nil)
676684 if ((creatorFee == creatorFee))
677685 then {
678686 let endHeight = (duration + height)
679687 [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)]
680688 }
681689 else throw("Strict value is not equal to itself.")
682690 }
683691 else throw("Strict value is not equal to itself.")
684692 }
685693 }
686694 }
687695 }
688696
689697
690698
691699 @Callable(i)
692700 func buyArtwork (artId,issuer) = {
693701 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
694702 if ((auctionType == auctionType3))
695703 then buyMint(i, artId, issuer, "", "", false)
696704 else throw("Direct buy only allowed when no auction type is set!")
697705 }
698706
699707
700708
701709 @Callable(i)
702710 func updateTags (artist,artId,tags) = {
703711 let caller = toString(addressFromPublicKey(i.callerPublicKey))
704712 if (!(containsElement(owners, caller)))
705713 then throw("no")
706714 else if ((size(split(tags, ",")) > 5))
707715 then throw("5 tags max.")
708716 else {
709717 let tagsOld = getStringByKeyOrError(keyTags(artist, artId), "No tags created with this key, so can't update!")
710718 if ((tags == tagsOld))
711719 then throw("Tags are the same as old tags!")
712720 else [StringEntry(keyTags(artist, artId), tags)]
713721 }
714722 }
715723
716724
717725
718726 @Callable(i)
719727 func deleteEntry (entry) = {
720728 let caller = toString(addressFromPublicKey(i.callerPublicKey))
721729 if (!(containsElement(owners, caller)))
722730 then throw("no")
723731 else [DeleteEntry(entry)]
724732 }
725733
726734
727735
728736 @Callable(i)
729737 func setBid (artId,issuer) = {
730738 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
731739 if ((auctionType == auctionType1))
732740 then setBidNonTraditional(i, artId, issuer)
733741 else if ((auctionType == auctionType2))
734742 then setBidTraditional(i, artId, issuer)
735743 else throw((("Unknown auction type :" + auctionType) + ", please contact the admins"))
736744 }
737745
738746
739747
740748 @Callable(i)
741749 func acceptBid (artId,issuer,bidId,bidOwner) = {
742750 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
743751 if ((auctionType == auctionType1))
744752 then acceptBidNonTraditional(i, artId, issuer, bidId, bidOwner)
745753 else if ((auctionType == auctionType2))
746754 then acceptBidTraditional(i, artId, issuer, bidId, bidOwner)
747755 else throw((("Unknown auction type :" + auctionType) + ", please contact the admins"))
748756 }
749757
750758
751759
752760 @Callable(i)
753761 func cancelBid (artId,issuer,bidId) = {
754762 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
755763 if ((auctionType == auctionType1))
756764 then cancelBidImpl(i, artId, issuer, bidId)
757765 else cancelBidImplTraditional(i, artId, issuer, bidId)
758766 }
759767
760768

github/deemru/w8io/026f985 
89.64 ms