tx · 9U1BrvMcfzZY2mTbNvYVAvLZc93n5EGrTkjMygeNmnWE

3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE:  -0.01400000 Waves

2021.12.15 15:08 [1835357] smart account 3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE > SELF 0.00000000 Waves

{ "type": 13, "id": "9U1BrvMcfzZY2mTbNvYVAvLZc93n5EGrTkjMygeNmnWE", "fee": 1400000, "feeAssetId": null, "timestamp": 1639570178064, "version": 1, "sender": "3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE", "senderPublicKey": "G349Uq3FTox7dRNLeAfAQeoACvwZ9iEnVSaHcEYn6j8J", "proofs": [ "67k9Q97PLMGNtcUs9azkSxnqJ8aCRKAvfVS1HNkPgWxgdicQsBso3yPCFSLgeGqr2APCNvRPHHz7SwtCSZPNFZ6f" ], "script": "base64:AAIFAAAAAAAAADwIAhIHCgUCAQEBARIAEgASBwoFAgEBAQESABIDCgEIEgUKAwEBARIFCgMBAQESBgoECAgIARIDCgEIEgAAAAAqAAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAANTRVACAAAAAl9fAAAAAAhNQVhERVBUSAAAAAAAAAAAEQAAAAAJVVNFUkRFUFRIAAAAAAAAAAAaAAAAAAVTQ0FMRQAAAAAAAAAD6AAAAAAFTVVMVDgAAAAAAAX14QABAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAEWtleUZhY3RvcnlBZGRyZXNzAAAAAAIAAAAcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwAAAAARZmFjdG9yeUFkZHJlc3NTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAAAAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEWZhY3RvcnlBZGRyZXNzU3RyAAAAAA1JZHhDZmdBc3NldElkAAAAAAAAAAABAAAAABZJZHhDZmdQYWNlbWFrZXJBZGRyZXNzAAAAAAAAAAACAAAAABZJZHhDZmdCb29zdGluZ0NvbnRyYWN0AAAAAAAAAAADAAAAAA5JZHhDZmdNYXhEZXB0aAAAAAAAAAAABAEAAAAJa2V5Q29uZmlnAAAAAAIAAAAKJXNfX2NvbmZpZwEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAACWtleUNvbmZpZwAAAAAFAAAAA1NFUAEAAAAMZm9ybWF0Q29uZmlnAAAABAAAAAx3eEFzc2V0SWRTdHIAAAAabWF0Y2hlclBhY2VtYWtlckFkZHJlc3NTdHIAAAAaYm9vc3RpbmdDb250cmFjdEFkZHJlc3NTdHIAAAAIbWF4RGVwdGgJAAS5AAAAAgkABEwAAAACAgAAAAglcyVzJXMlZAkABEwAAAACBQAAAAx3eEFzc2V0SWRTdHIJAARMAAAAAgUAAAAabWF0Y2hlclBhY2VtYWtlckFkZHJlc3NTdHIJAARMAAAAAgUAAAAaYm9vc3RpbmdDb250cmFjdEFkZHJlc3NTdHIJAARMAAAAAgkAAaQAAAABBQAAAAhtYXhEZXB0aAUAAAADbmlsBQAAAANTRVABAAAAH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQAAAAAAgAAACglcyVzX19nd3hSZXdhcmRFbWlzc2lvblBhcnRfX3N0YXJ0SGVpZ2h0AQAAAA1rZXlVc2Vyc0NvdW50AAAAAAIAAAAPJXNfX25leHRVc2VyTnVtAQAAABRrZXlOZXh0UHJvY2Vzc2VkVXNlcgAAAAACAAAAFSVzX19uZXh0UHJvY2Vzc2VkVXNlcgEAAAAPa2V5TGF0ZXN0UGVyaW9kAAAAAAIAAAAQJXNfX2xhdGVzdFBlcmlvZAEAAAANa2V5TmV4dFBlcmlvZAAAAAACAAAADiVzX19uZXh0UGVyaW9kAQAAABZrZXlOZXh0UHJvY2Vzc2VkUGVyaW9kAAAAAAIAAAAXJXNfX25leHRQcm9jZXNzZWRQZXJpb2QBAAAAG2tleU5leHRVbmxhaW1lZFBlcmlvZE9mVXNlcgAAAAEAAAAJdXNlckluZGV4CQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlZF9fbmV4dENsYWltZWRQZXJpb2QJAARMAAAAAgkAAaQAAAABBQAAAAl1c2VySW5kZXgFAAAAA25pbAUAAAADU0VQAQAAABxrZXlMYXN0UHJvY2Vzc2VkUGVyaW9kT2ZVc2VyAAAAAQAAAAl1c2VySW5kZXgJAAS5AAAAAgkABEwAAAACAgAAABklcyVkX19sYXN0UHJvY2Vzc2VkUGVyaW9k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EGJvb3N0aW5nQ29udHJhY3QJAABkAAAAAgUAAAANY3VycmVudFBlcmlvZAAAAAAAAAAAAQAAAAAAAAAAAAkAAGUAAAACBQAAAAVkZXB0aAAAAAAAAAAAAQAAAAAAAAAAAAkABRUAAAADCQAAZAAAAAIFAAAADWN1cnJlbnRQZXJpb2QAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAGHByb2Nlc3NOZXh0QmF0Y2hJbnRlcm5hbAAAAAUAAAAQYm9vc3RpbmdDb250cmFjdAAAAA1jdXJyZW50UGVyaW9kAAAAC2N1cnJlbnRVc2VyAAAABWRlcHRoAAAAC3RvdGFsV2VpZ2h0BAAAABdib29zdGluZ0NvbnRyYWN0QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABBQAAABBib29zdGluZ0NvbnRyYWN0BAAAAAxsYXRlc3RQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9rZXlMYXRlc3RQZXJpb2QAAAAABAAAAAp1c2Vyc0NvdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzCQEAAAANa2V5VXNlcnNDb3VudAAAAAAAAAAAAAAAAAAEAAAADnRvdGFsV2VpZ2h0S2V5CQEAAAAXa2V5VG90YWxXZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kBAAAAA9oZWlnaHRGb3JQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJrZXlIZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kAwMJAABmAAAAAgUAAAAFZGVwdGgAAAAAAAAAAAAJAABnAAAAAgUAAAAMbGF0ZXN0UGVyaW9kBQAAAA1jdXJyZW50UGVyaW9kBwQAAAACdDAJAQAAAA5jYWxjVXNlcldlaWdodAAAAAQFAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzBQAAAA9oZWlnaHRGb3JQZXJpb2QFAAAADWN1cnJlbnRQZXJpb2QFAAAAC2N1cnJlbnRVc2VyBAAAAAd3ZWlnaHQwCQAAZAAAAAIFAAAAC3RvdGFsV2VpZ2h0CAUAAAACdDAAAAACXzED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AAAAAAAAAAAJAAUWAAAABAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOdG90YWxXZWlnaHRLZXkFAAAAC3RvdGFsV2VpZ2h0BQAAAANuaWwFAAAADWN1cnJlbnRQZXJpb2QFAAAAC2N1cnJlbnRVc2VyAAAAAAAAAAAAAQAAAAtpbnZva2VDbGFpbQAAAAUAAAAQYm9vc3RpbmdDb250cmFjdAAAAAZwZXJpb2QAAAAEdXNlcgAAAAVkZXB0aAAAAAV0b3RhbAQAAAAGcmVzdWx0CQAD/AAAAAQFAAAABHRoaXMCAAAADmNsYWltTmV4dEJhdGNoCQAETAAAAAIFAAAAEGJvb3N0aW5nQ29udHJhY3QJAARMAAAAAgUAAAAGcGVyaW9kCQAETAAAAAIFAAAABHVzZXIJAARMAAAAAgUAAAAFZGVwdGgJAARMAAAAAgUAAAAFdG90YWwFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAZyZXN1bHQFAAAABnJlc3VsdAQAAAAHJG1hdGNoMAUAAAAGcmVzdWx0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAooSW50LCBJbnQpBAAAAAFyBQAAAAckbWF0Y2gwBQAAAAFyCQAAAgAAAAECAAAAF0luY29ycmVjdCBpbnZva2UgcmVzdWx0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAANY2xhaW1JbnRlcm5hbAAAAAUAAAAQYm9vc3RpbmdDb250cmFjdAAAAA1jdXJyZW50UGVyaW9kAAAAC2N1cnJlbnRVc2VyAAAABWRlcHRoAAAAD3VzZXJBY2N1bXVsYXRlZAQAAAAXYm9vc3RpbmdDb250cmFjdEFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQUAAAAQYm9vc3RpbmdDb250cmFjdAQAAAAMbGF0ZXN0UGVyaW9kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZAAAAAAEAAAAC3RvdGFsV2VpZ2h0CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAXa2V5VG90YWxXZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kBAAAAA9oZWlnaHRGb3JQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJrZXlIZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kBAAAAA0kdDAxMTEyNDExMjM2CQEAAAAOY2FsY1VzZXJXZWlnaHQAAAAEBQAAABdib29zdGluZ0NvbnRyYWN0QWRkcmVzcwUAAAAPaGVpZ2h0Rm9yUGVyaW9kBQAAAA1jdXJyZW50UGVyaW9kBQAAAAtjdXJyZW50VXNlcgQAAAAKdXNlcldlaWdodAgFAAAADSR0MDExMTI0MTEyMzYAAAACXzEEAAAAB2lnbm9yZWQIBQAAAA0kdDAxMTEyNDExMjM2AAAAAl8yBAAAABN1c2VyQW1vdW50Rm9yUGVyaW9kCQAAawAAAAMJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABdrZXlUb3RhbEFtb3VudEZvclBlcmlvZAAAAAEFAAAADWN1cnJlbnRQZXJpb2QFAAAACnVzZXJXZWlnaHQFAAAAC3RvdGFsV2VpZ2h0AwMJAABnAAAAAgAAAAAAAAAAAAUAAAAFZGVwdGgGCQAAZwAAAAIJAABkAAAAAgUAAAANY3VycmVudFBlcmlvZAAAAAAAAAAAAQUAAAAMbGF0ZXN0UGVyaW9kCQAFFAAAAAIJAABkAAAAAgUAAAANY3VycmVudFBlcmlvZAAAAAAAAAAAAQkAAGQAAAACBQAAAA91c2VyQWNjdW11bGF0ZWQFAAAAE3VzZXJBbW91bnRGb3JQZXJpb2QJAQAAAAtpbnZva2VDbGFpbQAAAAUFAAAAEGJvb3N0aW5nQ29udHJhY3QJAABkAAAAAgUAAAANY3VycmVudFBlcmlvZAAAAAAAAAAAAQUAAAALY3VycmVudFVzZXIJAABlAAAAAgUAAAAFZGVwdGgAAAAAAAAAAAEJAABkAAAAAgUAAAAPdXNlckFjY3VtdWxhdGVkBQAAABN1c2VyQW1vdW50Rm9yUGVyaW9kAQAAABFjb21tb25DbGFpbVJld2FyZAAAAAEAAAALdXNlckFkZHJlc3MEAAAACGNmZ0FycmF5CQEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAQAAAAHdXNlcklkeAkBAAAAFWdldFVzZXJJbmRleEJ5QWRkcmVzcwAAAAIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFklkeENmZ0Jvb3N0aW5nQ29udHJhY3QFAAAAC3VzZXJBZGRyZXNzBAAAAA1jdXJyZW50UGVyaW9kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAba2V5TmV4dFVubGFpbWVkUGVyaW9kT2ZVc2VyAAAAAQUAAAAHdXNlcklkeAQAAAAMbGF0ZXN0UGVyaW9kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZAAAAAADCQAAZwAAAAIFAAAADWN1cnJlbnRQZXJpb2QFAAAADGxhdGVzdFBlcmlvZAkAAAIAAAABAgAAABBOb3RoaW5nIHRvIGNsYWltBAAAABBib29zdGluZ0NvbnRyYWN0CQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFklkeENmZ0Jvb3N0aW5nQ29udHJhY3QEAAAADSR0MDEyMTU3MTIyNDkJAQAAAA1jbGFpbUludGVybmFsAAAABQUAAAAQYm9vc3RpbmdDb250cmFjdAUAAAANY3VycmVudFBlcmlvZAUAAAAHdXNlcklkeAUAAAAJVVNFUkRFUFRIAAAAAAAAAAAABAAAAAZwZXJpb2QIBQAAAA0kdDAxMjE1NzEyMjQ5AAAAAl8xBAAAAAZhbW91bnQIBQAAAA0kdDAxMjE1NzEyMjQ5AAAAAl8yCQAFFwAAAAUFAAAABnBlcmlvZAUAAAAGYW1vdW50BQAAAAd1c2VySWR4BQAAAAhjZmdBcnJheQUAAAAMbGF0ZXN0UGVyaW9kAAAACwAAAAFpAQAAABBwcm9jZXNzTmV4dEJhdGNoAAAABQAAABBib29zdGluZ0NvbnRyYWN0AAAADWN1cnJlbnRQZXJpb2QAAAALY3VycmVudFVzZXIAAAAFZGVwdGgAAAALdG90YWxXZWlnaHQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAkU2hvdWxkIGJlIGNhbGxlZCBieSB0aGlzIHNjcmlwdCBvbmx5BAAAAAN0cGwJAQAAABhwcm9jZXNzTmV4dEJhdGNoSW50ZXJuYWwAAAAFBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAtjdXJyZW50VXNlcgUAAAAFZGVwdGgFAAAAC3RvdGFsV2VpZ2h0CQAFFAAAAAIIBQAAAAN0cGwAAAACXzEJAAUVAAAAAwgFAAAAA3RwbAAAAAJfMggFAAAAA3RwbAAAAAJfMwgFAAAAA3RwbAAAAAJfNAAAAAFpAQAAAB1wcm9jZXNzUGVuZGluZ1BlcmlvZHNBbmRVc2VycwAAAAAEAAAADWN1cnJlbnRQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZrZXlOZXh0UHJvY2Vzc2VkUGVyaW9kAAAAAAMJAABmAAAAAgUAAAANY3VycmVudFBlcmlvZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2tleUxhdGVzdFBlcmlvZAAAAAAJAAACAAAAAQIAAAASTm90aGluZyB0byBwcm9jZXNzBAAAAAhjZmdBcnJheQkBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAEAAAABWRlcHRoCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADklkeENmZ01heERlcHRoAwkAAGYAAAACBQAAAAVkZXB0aAUAAAAITUFYREVQVEgJAAACAAAAAQIAAAAWRGVwdGggZXhjZWVkcyBNQVhERVBUSAQAAAAQYm9vc3RpbmdDb250cmFjdAkAAlkAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABZJZHhDZmdCb29zdGluZ0NvbnRyYWN0BAAAAAtjdXJyZW50VXNlcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFGtleU5leHRQcm9jZXNzZWRVc2VyAAAAAAQAAAALdG90YWxXZWlnaHQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABdrZXlUb3RhbFdlaWdodEZvclBlcmlvZAAAAAEFAAAADWN1cnJlbnRQZXJpb2QEAAAAAXIJAQAAABhwcm9jZXNzTmV4dEJhdGNoSW50ZXJuYWwAAAAFBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAtjdXJyZW50VXNlcgUAAAAFZGVwdGgFAAAAC3RvdGFsV2VpZ2h0CQAETQAAAAIJAARNAAAAAggFAAAAAXIAAAACXzEJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZAAAAAAIBQAAAAFyAAAAAl8yCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFGtleU5leHRQcm9jZXNzZWRVc2VyAAAAAAgFAAAAAXIAAAACXzMAAAABaQEAAAAHZGVwb3NpdAAAAAAEAAAACGNmZ0FycmF5CQEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFklkeENmZ1BhY2VtYWtlckFkZHJlc3MJAAACAAAAAQIAAAAUV3JvbmcgY2FsbGVyIGFkZHJlc3MEAAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEICQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQDCQEAAAACIT0AAAACBQAAAAdhc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADUlkeENmZ0Fzc2V0SWQJAAACAAAAAQIAAAATV3JvbmcgcGF5bWVudCBhc3NldAQAAAAGcGVyaW9kCQEAAAAKbmV4dFBlcmlvZAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlMYXRlc3RQZXJpb2QAAAAABQAAAAZwZXJpb2QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJrZXlIZWlnaHRGb3JQZXJpb2QAAAABBQAAAAZwZXJpb2QFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF2tleVRvdGFsQW1vdW50Rm9yUGVyaW9kAAAAAQUAAAAGcGVyaW9kCAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA1rZXlOZXh0UGVyaW9kAAAAAAkAAGQAAAACBQAAAAZwZXJpb2QAAAAAAAAAAAEFAAAAA25pbAAAAAFpAQAAAA5jbGFpbU5leHRCYXRjaAAAAAUAAAAQYm9vc3RpbmdDb250cmFjdAAAAA1jdXJyZW50UGVyaW9kAAAAC2N1cnJlbnRVc2VyAAAABWRlcHRoAAAAC3RvdGFsV2VpZ2h0AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAJFNob3VsZCBiZSBjYWxsZWQgYnkgdGhpcyBzY3JpcHQgb25seQQAAAAOcGVyaW9kQW5kVG90YWwJAQAAAA1jbGFpbUludGVybmFsAAAABQUAAAAQYm9vc3RpbmdDb250cmFjdAUAAAANY3VycmVudFBlcmlvZAUAAAALY3VycmVudFVzZXIFAAAABWRlcHRoBQAAAAt0b3RhbFdlaWdodAkABRQAAAACBQAAAANuaWwFAAAADnBlcmlvZEFuZFRvdGFsAAAAAWkBAAAAC2NsYWltUmV3YXJkAAAAAAQAAAAHYWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADSR0MDE1MTg5MTUyNzEJAQAAABFjb21tb25DbGFpbVJld2FyZAAAAAEFAAAAB2FkZHJlc3MEAAAABnBlcmlvZAgFAAAADSR0MDE1MTg5MTUyNzEAAAACXzEEAAAABmFtb3VudAgFAAAADSR0MDE1MTg5MTUyNzEAAAACXzIEAAAAB3VzZXJJZHgIBQAAAA0kdDAxNTE4OTE1MjcxAAAAAl8zBAAAAAhjZmdBcnJheQgFAAAADSR0MDE1MTg5MTUyNzEAAAACXzQEAAAADGxhdGVzdFBlcmlvZAgFAAAADSR0MDE1MTg5MTUyNzEAAAACXzUJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAG2tleU5leHRVbmxhaW1lZFBlcmlvZE9mVXNlcgAAAAEFAAAAB3VzZXJJZHgFAAAABnBlcmlvZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAkAAlkAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAAA1JZHhDZmdBc3NldElkCQAETAAAAAIJAQAAAAxIaXN0b3J5RW50cnkAAAAGAgAAAAVjbGFpbQUAAAAHYWRkcmVzcwUAAAAGYW1vdW50BQAAAAZwZXJpb2QFAAAADGxhdGVzdFBlcmlvZAUAAAABaQUAAAADbmlsBQAAAAZhbW91bnQAAAABaQEAAAATY2xhaW1SZXdhcmRSRUFET05MWQAAAAEAAAAHYWRkcmVzcwQAAAAMY2xhaW1SZXN1bHRzCQEAAAARY29tbW9uQ2xhaW1SZXdhcmQAAAABBQAAAAdhZGRyZXNzBAAAAAZhbW91bnQIBQAAAAxjbGFpbVJlc3VsdHMAAAACXzIJAAUUAAAAAgUAAAADbmlsBQAAAAZhbW91bnQAAAABaQEAAAAVY2FsY0d3eFBhcmFtc1JFQURPTkxZAAAAAwAAAAh3eEFtb3VudAAAAA9sb2NrU3RhcnRIZWlnaHQAAAASbG9ja0R1cmF0aW9uQmxvY2tzBAAAAA1sb2NrRW5kSGVpZ2h0CQAAZAAAAAIFAAAAD2xvY2tTdGFydEhlaWdodAUAAAASbG9ja0R1cmF0aW9uQmxvY2tzBAAAAAxzY2FsZThQYXJhbUsJAQAAAAEtAAAAAQkAAGsAAAADBQAAAAh3eEFtb3VudAUAAAAFU0NBTEUFAAAAEmxvY2tEdXJhdGlvbkJsb2NrcwQAAAAMc2NhbGU4UGFyYW1CCQAAaAAAAAIJAABrAAAAAwUAAAAId3hBbW91bnQFAAAABVNDQUxFBQAAABJsb2NrRHVyYXRpb25CbG9ja3MFAAAADWxvY2tFbmRIZWlnaHQJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIFAAAADHNjYWxlOFBhcmFtSwkABEwAAAACBQAAAAxzY2FsZThQYXJhbUIJAARMAAAAAgkBAAAACm5leHRQZXJpb2QAAAAABQAAAANuaWwAAAABaQEAAAAaY2FsY0d3eEFtb3VudFN0YXJ0UkVBRE9OTFkAAAADAAAACmxvY2tBbW91bnQAAAAMbG9ja0R1cmF0aW9uAAAAD21heExvY2tEdXJhdGlvbgQAAAAHY29lZmZYOAkAAGsAAAADBQAAAAxsb2NrRHVyYXRpb24FAAAABU1VTFQ4BQAAAA9tYXhMb2NrRHVyYXRpb24EAAAADmdXeEFtb3VudFN0YXJ0CQAAawAAAAMFAAAACmxvY2tBbW91bnQFAAAAB2NvZWZmWDgFAAAABU1VTFQ4CQAFFAAAAAIFAAAAA25pbAkABEwAAAACBQAAAA5nV3hBbW91bnRTdGFydAUAAAADbmlsAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAABAAAAAx3eEFzc2V0SWRTdHIAAAAabWF0Y2hlclBhY2VtYWtlckFkZHJlc3NTdHIAAAAaYm9vc3RpbmdDb250cmFjdEFkZHJlc3NTdHIAAAAIbWF4RGVwdGgDCQEAAAACIT0AAAACBQAAAAR0aGlzCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACWtleUNvbmZpZwAAAAAJAQAAAAxmb3JtYXRDb25maWcAAAAEBQAAAAx3eEFzc2V0SWRTdHIFAAAAGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyBQAAABpib29zdGluZ0NvbnRyYWN0QWRkcmVzc1N0cgUAAAAIbWF4RGVwdGgFAAAAA25pbAAAAAFpAQAAAA1jb25zdHJ1Y3RvclYyAAAAAQAAAA5mYWN0b3J5QWRkcmVzcwMJAQAAAAIhPQAAAAIFAAAABHRoaXMIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAAA5ub3QgYXV0aG9yaXplZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAABQAAAA5mYWN0b3J5QWRkcmVzcwUAAAADbmlsAAAAAWkBAAAAFW9uRW1pc3Npb25Gb3JHd3hTdGFydAAAAAADCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAAD2ZhY3RvcnlDb250cmFjdAkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAB9rZXlHd3hSZXdhcmRFbWlzc2lvblN0YXJ0SGVpZ2h0AAAAAAUAAAAGaGVpZ2h0BQAAAANuaWwAAAAA7Dg4PQ==", "chainId": 84, "height": 1835357, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Bd97XfqCjXkdwgEN6zEz38he466iZ9NoiPUwRovUANVN Next: BcM2YkLT9CAJtvtavJSGYTDTzgapKXtVXN4tB7D29onc Diff:
OldNewDifferences
4444
4545
4646 func formatConfig (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = makeString(["%s%s%s%d", wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, toString(maxDepth)], SEP)
47+
48+
49+func keyGwxRewardEmissionStartHeight () = "%s%s__gwxRewardEmissionPart__startHeight"
4750
4851
4952 func keyUsersCount () = "%s__nextUserNum"
237240 let latestPeriod = getNumberByKey(keyNextProcessedPeriod())
238241 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
239242 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
240- let $t01103911151 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
241- let userWeight = $t01103911151._1
242- let ignored = $t01103911151._2
243+ let $t01112411236 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
244+ let userWeight = $t01112411236._1
245+ let ignored = $t01112411236._2
243246 let userAmountForPeriod = fraction(getNumberByKey(keyTotalAmountForPeriod(currentPeriod)), userWeight, totalWeight)
244247 if (if ((0 >= depth))
245248 then true
258261 then throw("Nothing to claim")
259262 else {
260263 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
261- let $t01207212164 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0)
262- let period = $t01207212164._1
263- let amount = $t01207212164._2
264+ let $t01215712249 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0)
265+ let period = $t01215712249._1
266+ let amount = $t01215712249._2
264267 $Tuple5(period, amount, userIdx, cfgArray, latestPeriod)
265268 }
266269 }
329332 @Callable(i)
330333 func claimReward () = {
331334 let address = toString(i.caller)
332- let $t01510415186 = commonClaimReward(address)
333- let period = $t01510415186._1
334- let amount = $t01510415186._2
335- let userIdx = $t01510415186._3
336- let cfgArray = $t01510415186._4
337- let latestPeriod = $t01510415186._5
335+ let $t01518915271 = commonClaimReward(address)
336+ let period = $t01518915271._1
337+ let amount = $t01518915271._2
338+ let userIdx = $t01518915271._3
339+ let cfgArray = $t01518915271._4
340+ let latestPeriod = $t01518915271._5
338341 $Tuple2([IntegerEntry(keyNextUnlaimedPeriodOfUser(userIdx), period), ScriptTransfer(i.caller, amount, fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amount, period, latestPeriod, i)], amount)
339342 }
340343
385388 @Callable(i)
386389 func onEmissionForGwxStart () = if ((i.caller != factoryContract))
387390 then throw("permissions denied")
388- else [IntegerEntry("%s%s__gwxRewardEmissionPart__startHeight", height)]
391+ else [IntegerEntry(keyGwxRewardEmissionStartHeight(), height)]
389392
390393
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let revisionNum = ""
55
66 let SEP = "__"
77
88 let MAXDEPTH = 17
99
1010 let USERDEPTH = 26
1111
1212 let SCALE = 1000
1313
1414 let MULT8 = 100000000
1515
1616 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
1717
1818
1919 func getStringByKey (key) = valueOrElse(getString(this, key), "")
2020
2121
2222 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
2323
2424
2525 func keyFactoryAddress () = "%s%s__config__factoryAddress"
2626
2727
2828 let factoryAddressStr = getStringOrFail(keyFactoryAddress())
2929
3030 let factoryContract = addressFromStringValue(factoryAddressStr)
3131
3232 let IdxCfgAssetId = 1
3333
3434 let IdxCfgPacemakerAddress = 2
3535
3636 let IdxCfgBoostingContract = 3
3737
3838 let IdxCfgMaxDepth = 4
3939
4040 func keyConfig () = "%s__config"
4141
4242
4343 func readConfigArrayOrFail () = split(getStringOrFail(keyConfig()), SEP)
4444
4545
4646 func formatConfig (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = makeString(["%s%s%s%d", wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, toString(maxDepth)], SEP)
47+
48+
49+func keyGwxRewardEmissionStartHeight () = "%s%s__gwxRewardEmissionPart__startHeight"
4750
4851
4952 func keyUsersCount () = "%s__nextUserNum"
5053
5154
5255 func keyNextProcessedUser () = "%s__nextProcessedUser"
5356
5457
5558 func keyLatestPeriod () = "%s__latestPeriod"
5659
5760
5861 func keyNextPeriod () = "%s__nextPeriod"
5962
6063
6164 func keyNextProcessedPeriod () = "%s__nextProcessedPeriod"
6265
6366
6467 func keyNextUnlaimedPeriodOfUser (userIndex) = makeString(["%s%d__nextClaimedPeriod", toString(userIndex)], SEP)
6568
6669
6770 func keyLastProcessedPeriodOfUser (userIndex) = makeString(["%s%d__lastProcessedPeriod", toString(userIndex)], SEP)
6871
6972
7073 func keyHeightForPeriod (period) = makeString(["%s%d__startHeightForPeriod", toString(period)], SEP)
7174
7275
7376 func keyTotalAmountForPeriod (period) = makeString(["%s%d__totalAmountForPeriod", toString(period)], SEP)
7477
7578
7679 func keyTotalWeightForPeriod (period) = makeString(["%s%d__totalWeightForPeriod", toString(period)], SEP)
7780
7881
7982 func keyUserKValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "k", toString(period)], SEP)
8083
8184
8285 func keyUserBValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "b", toString(period)], SEP)
8386
8487
8588 func HistoryEntry (type,user,amount,currentPeriod,latestPeriod,i) = {
8689 let historyKEY = makeString(["%s%s%s%s__history", type, user, toBase58String(i.transactionId)], SEP)
8790 let historyDATA = makeString(["%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amount), toString(currentPeriod), toString(latestPeriod)], SEP)
8891 StringEntry(historyKEY, historyDATA)
8992 }
9093
9194
9295 func calcUserWeight (boostingContractAddress,heightForPeriod,period,userIndex) = {
9396 let kLast = keyLastProcessedPeriodOfUser(userIndex)
9497 let kKey = keyUserKValueForPeriod(period, userIndex)
9598 let kRaw = getInteger(boostingContractAddress, kKey)
9699 if (isDefined(kRaw))
97100 then {
98101 let k = value(kRaw)
99102 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(period, userIndex)))
100103 let w = ((k * heightForPeriod) + b)
101104 if ((w > 0))
102105 then $Tuple2((w / SCALE), [IntegerEntry(kLast, period)])
103106 else $Tuple2(0, nil)
104107 }
105108 else {
106109 let p = getInteger(this, kLast)
107110 if (isDefined(p))
108111 then {
109112 let pv = value(p)
110113 let k = value(getInteger(boostingContractAddress, keyUserKValueForPeriod(pv, userIndex)))
111114 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(pv, userIndex)))
112115 let w = ((k * heightForPeriod) + b)
113116 if ((w > 0))
114117 then $Tuple2((w / SCALE), nil)
115118 else $Tuple2(0, nil)
116119 }
117120 else $Tuple2(0, nil)
118121 }
119122 }
120123
121124
122125 func getUserIndexByAddress (boostingContractAddressStr,userAddress) = {
123126 let key = makeString(["%s%s%s", "mapping", "user2num", userAddress], SEP)
124127 parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String(boostingContractAddressStr)), key), ((("User address " + userAddress) + " is not found in boosting contract data, key=") + key)))
125128 }
126129
127130
128131 func nextPeriod () = getNumberByKey(keyNextPeriod())
129132
130133
131134 func invokeProcess (boostingContract,period,user,depth,weight) = {
132135 let result = invoke(this, "processNextBatch", [boostingContract, period, user, depth, weight], nil)
133136 if ((result == result))
134137 then match result {
135138 case r: (Int, Int, Int) =>
136139 r
137140 case _ =>
138141 throw("Incorrect invoke result")
139142 }
140143 else throw("Strict value is not equal to itself.")
141144 }
142145
143146
144147 func checkLastPartOfPeriod (boostingContract,currentPeriod,latestPeriod,depth,totalWeightKey,weight) = if ((latestPeriod >= (currentPeriod + 1)))
145148 then invokeProcess(boostingContract, (currentPeriod + 1), 0, (depth - 1), 0)
146149 else $Tuple3((currentPeriod + 1), 0, 0)
147150
148151
149152 func processNextBatchInternal (boostingContract,currentPeriod,currentUser,depth,totalWeight) = {
150153 let boostingContractAddress = Address(boostingContract)
151154 let latestPeriod = getNumberByKey(keyLatestPeriod())
152155 let usersCount = valueOrElse(getInteger(boostingContractAddress, keyUsersCount()), 0)
153156 let totalWeightKey = keyTotalWeightForPeriod(currentPeriod)
154157 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
155158 if (if ((depth > 0))
156159 then (latestPeriod >= currentPeriod)
157160 else false)
158161 then {
159162 let t0 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
160163 let weight0 = (totalWeight + t0._1)
161164 if ((usersCount > (currentUser + 1)))
162165 then {
163166 let t1 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 1))
164167 let weight1 = (weight0 + t1._1)
165168 if ((usersCount > (currentUser + 2)))
166169 then {
167170 let t2 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 2))
168171 let weight2 = (weight1 + t2._1)
169172 if ((usersCount > (currentUser + 3)))
170173 then {
171174 let t3 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 3))
172175 let weight3 = (weight2 + t3._1)
173176 if ((usersCount > (currentUser + 4)))
174177 then {
175178 let t4 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 4))
176179 let weight4 = (weight3 + t4._1)
177180 if ((usersCount > (currentUser + 5)))
178181 then {
179182 let t5 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 5))
180183 let weight5 = (weight4 + t5._1)
181184 if ((usersCount > (currentUser + 6)))
182185 then {
183186 let r5 = invokeProcess(boostingContract, currentPeriod, (currentUser + 6), (depth - 1), weight5)
184187 $Tuple4((((((t0._2 ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2) ++ t5._2), r5._1, r5._2, r5._3)
185188 }
186189 else {
187190 let r5 = checkLastPartOfPeriod(boostingContract, currentPeriod, latestPeriod, depth, totalWeightKey, weight5)
188191 $Tuple4((((((([IntegerEntry(totalWeightKey, weight5)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2) ++ t5._2), r5._1, r5._2, r5._3)
189192 }
190193 }
191194 else {
192195 let r4 = checkLastPartOfPeriod(boostingContract, currentPeriod, latestPeriod, depth, totalWeightKey, weight4)
193196 $Tuple4(((((([IntegerEntry(totalWeightKey, weight4)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2), r4._1, r4._2, r4._3)
194197 }
195198 }
196199 else {
197200 let r3 = checkLastPartOfPeriod(boostingContract, currentPeriod, latestPeriod, depth, totalWeightKey, weight3)
198201 $Tuple4((((([IntegerEntry(totalWeightKey, weight3)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2), r3._1, r3._2, r3._3)
199202 }
200203 }
201204 else {
202205 let r2 = checkLastPartOfPeriod(boostingContract, currentPeriod, latestPeriod, depth, totalWeightKey, weight2)
203206 $Tuple4(((([IntegerEntry(totalWeightKey, weight2)] ++ t0._2) ++ t1._2) ++ t2._2), r2._1, r2._2, r2._3)
204207 }
205208 }
206209 else {
207210 let r1 = checkLastPartOfPeriod(boostingContract, currentPeriod, latestPeriod, depth, totalWeightKey, weight1)
208211 $Tuple4((([IntegerEntry(totalWeightKey, weight1)] ++ t0._2) ++ t1._2), r1._1, r1._2, r1._3)
209212 }
210213 }
211214 else {
212215 let r0 = checkLastPartOfPeriod(boostingContract, currentPeriod, latestPeriod, depth, totalWeightKey, weight0)
213216 $Tuple4(([IntegerEntry(totalWeightKey, weight0)] ++ t0._2), r0._1, r0._2, r0._3)
214217 }
215218 }
216219 else if ((currentUser == 0))
217220 then $Tuple4(nil, currentPeriod, 0, 0)
218221 else $Tuple4([IntegerEntry(totalWeightKey, totalWeight)], currentPeriod, currentUser, 0)
219222 }
220223
221224
222225 func invokeClaim (boostingContract,period,user,depth,total) = {
223226 let result = invoke(this, "claimNextBatch", [boostingContract, period, user, depth, total], nil)
224227 if ((result == result))
225228 then match result {
226229 case r: (Int, Int) =>
227230 r
228231 case _ =>
229232 throw("Incorrect invoke result")
230233 }
231234 else throw("Strict value is not equal to itself.")
232235 }
233236
234237
235238 func claimInternal (boostingContract,currentPeriod,currentUser,depth,userAccumulated) = {
236239 let boostingContractAddress = Address(boostingContract)
237240 let latestPeriod = getNumberByKey(keyNextProcessedPeriod())
238241 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
239242 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
240- let $t01103911151 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
241- let userWeight = $t01103911151._1
242- let ignored = $t01103911151._2
243+ let $t01112411236 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
244+ let userWeight = $t01112411236._1
245+ let ignored = $t01112411236._2
243246 let userAmountForPeriod = fraction(getNumberByKey(keyTotalAmountForPeriod(currentPeriod)), userWeight, totalWeight)
244247 if (if ((0 >= depth))
245248 then true
246249 else ((currentPeriod + 1) >= latestPeriod))
247250 then $Tuple2((currentPeriod + 1), (userAccumulated + userAmountForPeriod))
248251 else invokeClaim(boostingContract, (currentPeriod + 1), currentUser, (depth - 1), (userAccumulated + userAmountForPeriod))
249252 }
250253
251254
252255 func commonClaimReward (userAddress) = {
253256 let cfgArray = readConfigArrayOrFail()
254257 let userIdx = getUserIndexByAddress(cfgArray[IdxCfgBoostingContract], userAddress)
255258 let currentPeriod = getNumberByKey(keyNextUnlaimedPeriodOfUser(userIdx))
256259 let latestPeriod = getNumberByKey(keyNextProcessedPeriod())
257260 if ((currentPeriod >= latestPeriod))
258261 then throw("Nothing to claim")
259262 else {
260263 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
261- let $t01207212164 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0)
262- let period = $t01207212164._1
263- let amount = $t01207212164._2
264+ let $t01215712249 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0)
265+ let period = $t01215712249._1
266+ let amount = $t01215712249._2
264267 $Tuple5(period, amount, userIdx, cfgArray, latestPeriod)
265268 }
266269 }
267270
268271
269272 @Callable(i)
270273 func processNextBatch (boostingContract,currentPeriod,currentUser,depth,totalWeight) = if ((i.caller != this))
271274 then throw("Should be called by this script only")
272275 else {
273276 let tpl = processNextBatchInternal(boostingContract, currentPeriod, currentUser, depth, totalWeight)
274277 $Tuple2(tpl._1, $Tuple3(tpl._2, tpl._3, tpl._4))
275278 }
276279
277280
278281
279282 @Callable(i)
280283 func processPendingPeriodsAndUsers () = {
281284 let currentPeriod = getNumberByKey(keyNextProcessedPeriod())
282285 if ((currentPeriod > getNumberByKey(keyLatestPeriod())))
283286 then throw("Nothing to process")
284287 else {
285288 let cfgArray = readConfigArrayOrFail()
286289 let depth = parseIntValue(cfgArray[IdxCfgMaxDepth])
287290 if ((depth > MAXDEPTH))
288291 then throw("Depth exceeds MAXDEPTH")
289292 else {
290293 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
291294 let currentUser = getNumberByKey(keyNextProcessedUser())
292295 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
293296 let r = processNextBatchInternal(boostingContract, currentPeriod, currentUser, depth, totalWeight)
294297 ((r._1 :+ IntegerEntry(keyNextProcessedPeriod(), r._2)) :+ IntegerEntry(keyNextProcessedUser(), r._3))
295298 }
296299 }
297300 }
298301
299302
300303
301304 @Callable(i)
302305 func deposit () = {
303306 let cfgArray = readConfigArrayOrFail()
304307 if ((i.caller != Address(fromBase58String(cfgArray[IdxCfgPacemakerAddress]))))
305308 then throw("Wrong caller address")
306309 else {
307310 let assetId = value(value(i.payments[0]).assetId)
308311 if ((assetId != fromBase58String(cfgArray[IdxCfgAssetId])))
309312 then throw("Wrong payment asset")
310313 else {
311314 let period = nextPeriod()
312315 [IntegerEntry(keyLatestPeriod(), period), IntegerEntry(keyHeightForPeriod(period), height), IntegerEntry(keyTotalAmountForPeriod(period), value(i.payments[0]).amount), IntegerEntry(keyNextPeriod(), (period + 1))]
313316 }
314317 }
315318 }
316319
317320
318321
319322 @Callable(i)
320323 func claimNextBatch (boostingContract,currentPeriod,currentUser,depth,totalWeight) = if ((i.caller != this))
321324 then throw("Should be called by this script only")
322325 else {
323326 let periodAndTotal = claimInternal(boostingContract, currentPeriod, currentUser, depth, totalWeight)
324327 $Tuple2(nil, periodAndTotal)
325328 }
326329
327330
328331
329332 @Callable(i)
330333 func claimReward () = {
331334 let address = toString(i.caller)
332- let $t01510415186 = commonClaimReward(address)
333- let period = $t01510415186._1
334- let amount = $t01510415186._2
335- let userIdx = $t01510415186._3
336- let cfgArray = $t01510415186._4
337- let latestPeriod = $t01510415186._5
335+ let $t01518915271 = commonClaimReward(address)
336+ let period = $t01518915271._1
337+ let amount = $t01518915271._2
338+ let userIdx = $t01518915271._3
339+ let cfgArray = $t01518915271._4
340+ let latestPeriod = $t01518915271._5
338341 $Tuple2([IntegerEntry(keyNextUnlaimedPeriodOfUser(userIdx), period), ScriptTransfer(i.caller, amount, fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amount, period, latestPeriod, i)], amount)
339342 }
340343
341344
342345
343346 @Callable(i)
344347 func claimRewardREADONLY (address) = {
345348 let claimResults = commonClaimReward(address)
346349 let amount = claimResults._2
347350 $Tuple2(nil, amount)
348351 }
349352
350353
351354
352355 @Callable(i)
353356 func calcGwxParamsREADONLY (wxAmount,lockStartHeight,lockDurationBlocks) = {
354357 let lockEndHeight = (lockStartHeight + lockDurationBlocks)
355358 let scale8ParamK = -(fraction(wxAmount, SCALE, lockDurationBlocks))
356359 let scale8ParamB = (fraction(wxAmount, SCALE, lockDurationBlocks) * lockEndHeight)
357360 $Tuple2(nil, [scale8ParamK, scale8ParamB, nextPeriod()])
358361 }
359362
360363
361364
362365 @Callable(i)
363366 func calcGwxAmountStartREADONLY (lockAmount,lockDuration,maxLockDuration) = {
364367 let coeffX8 = fraction(lockDuration, MULT8, maxLockDuration)
365368 let gWxAmountStart = fraction(lockAmount, coeffX8, MULT8)
366369 $Tuple2(nil, [gWxAmountStart])
367370 }
368371
369372
370373
371374 @Callable(i)
372375 func constructor (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = if ((this != i.caller))
373376 then throw("not authorized")
374377 else [StringEntry(keyConfig(), formatConfig(wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, maxDepth))]
375378
376379
377380
378381 @Callable(i)
379382 func constructorV2 (factoryAddress) = if ((this != i.caller))
380383 then throw("not authorized")
381384 else [StringEntry(keyFactoryAddress(), factoryAddress)]
382385
383386
384387
385388 @Callable(i)
386389 func onEmissionForGwxStart () = if ((i.caller != factoryContract))
387390 then throw("permissions denied")
388- else [IntegerEntry("%s%s__gwxRewardEmissionPart__startHeight", height)]
391+ else [IntegerEntry(keyGwxRewardEmissionStartHeight(), height)]
389392
390393

github/deemru/w8io/169f3d6 
56.03 ms