tx · 6AKhpr5UPdSYNvjSUnPRvS8TgJuxGTPd6QitKuyJVjey

3PH83bJCZraJoEzFefz4p8UXZD9YazNnj1n:  -0.01400000 Waves

2022.03.24 17:08 [3043290] smart account 3PH83bJCZraJoEzFefz4p8UXZD9YazNnj1n > SELF 0.00000000 Waves

{ "type": 13, "id": "6AKhpr5UPdSYNvjSUnPRvS8TgJuxGTPd6QitKuyJVjey", "fee": 1400000, "feeAssetId": null, "timestamp": 1648130873871, "version": 1, "sender": "3PH83bJCZraJoEzFefz4p8UXZD9YazNnj1n", "senderPublicKey": "4Uv4fNGxmwhwHRipWuYvZe87BazB9H19nVEac9pguorM", "proofs": [ "aaRa96F4P7de7EptXVa4Q11boaDKfSG9dYQXPyuCRL8RSXpj9vEJ3umfqvSQdXA9z3iKLTqjrcasVd34LzVfPq5" ], "script": "base64:AAIFAAAAAAAAAF8IAhIHCgUCAQEBARIAEgASCAoGAgEBAQEBEgASAwoBCBIDCgEIEgMKAQgSAwoBCBIFCgMBAQESBQoDAQEBEgYKBAgICAESAwoBCBIDCgEIEgASAwoBCBIHCgUICAgICAAAADUAAAAAC3JldmlzaW9uTnVtAgAAAAAAAAAAA1NFUAIAAAACX18AAAAACE1BWERFUFRIAAAAAAAAAAARAAAAAAlVU0VSREVQVEgAAAAAAAAAABoAAAAABVNDQUxFAAAAAAAAAAPoAAAAAAVNVUxUOAAAAAAABfXhAAAAAAAKemVyb0JpZ0ludAkAATYAAAABAAAAAAAAAAAAAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAPZ2V0TnVtYmVyT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACAgAAAA9tYW5kYXRvcnkgdGhpcy4FAAAAA2tleQIAAAAPIGlzIG5vdCBkZWZpbmVkAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAA2FicwAAAAEAAAADdmFsAwkAAT8AAAACBQAAAAp6ZXJvQmlnSW50BQAAAAN2YWwJAAE+AAAAAQUAAAADdmFsBQAAAAN2YWwBAAAAEWtleUZhY3RvcnlBZGRyZXNzAAAAAAIAAAAcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwAAAAARZmFjdG9yeUFkZHJlc3NTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAAAAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEWZhY3RvcnlBZGRyZXNzU3RyAQAAABJrZXlFbWlzc2lvbkFkZHJlc3MAAAAAAgAAAB0lcyVzX19jb25maWdfX2VtaXNzaW9uQWRkcmVzcwAAAAASZW1pc3Npb25BZGRyZXNzU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEmtleUVtaXNzaW9uQWRkcmVzcwAAAAAAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEmVtaXNzaW9uQWRkcmVzc1N0cgAAAAANSWR4Q2ZnQXNzZXRJZAAAAAAAAAAAAQAAAAAWSWR4Q2ZnUGFjZW1ha2VyQWRkcmVzcwAAAAAAAAAAAgAAAAAWSWR4Q2ZnQm9vc3RpbmdDb250cmFjdAAAAAAAAAAAAwAAAAAOSWR4Q2ZnTWF4RGVwdGgAAAAAAAAAAAQBAAAACWtleUNvbmZpZwAAAAACAAAACiVzX19jb25maWcBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAADGZvcm1hdENvbmZpZwAAAAQAAAAMd3hBc3NldElkU3RyAAAAGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyAAAAGmJvb3N0aW5nQ29udHJhY3RBZGRyZXNzU3RyAAAACG1heERlcHRoCQAEuQAAAAIJAARMAAAAAgIAAAAIJXMlcyVzJWQJAARMAAAAAgUAAAAMd3hBc3NldElkU3RyCQAETAAAAAIFAAAAGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyCQAETAAAAAIFAAAAGmJvb3N0aW5nQ29udHJhY3RBZGRyZXNzU3RyCQAETAAAAAIJAAGkAAAAAQUAAAAIbWF4RGVwdGgFAAAAA25pbAUAAAADU0VQAQAAAB9rZXlHd3hSZXdhcmRFbWlzc2lvblN0YXJ0SGVpZ2h0AAAAAAIAAAAoJXMlc19fZ3d4UmV3YXJkRW1pc3Npb25QYXJ0X19zdGFydEhlaWdodAEAAAANa2V5VXNlcnNDb3VudAAAAAACAAAADyVzX19uZXh0VXNlck51bQEAAAAWa2V5UmF0ZVBlckJsb2NrQ3VycmVudAAAAAACAAAAGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAEAAAAUa2V5UG9vbFdlaWdodFZpcnR1YWwAAAAAAgAAACAlcyVzX19wb29sV2VpZ2h0X19HV1h2aXJ0dWFsUE9PTAEAAAAUa2V5TmV4dFByb2Nlc3NlZFVzZXIAAAAAAgAAABUlc19fbmV4dFByb2Nlc3NlZFVzZXIBAAAAD2tleUxhdGVzdFBlcmlvZAAAAAACAAAAECVzX19sYXRlc3RQZXJpb2QBAAAADWtleU5leHRQZXJpb2QAAAAAAgAAAA4lc19fbmV4dFBlcmlvZAEAAAAWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZAAAAAACAAAAFyVzX19uZXh0UHJvY2Vzc2VkUGVyaW9kAQAAABtrZXlOZXh0VW5sYWltZWRQZXJpb2RPZlVzZXIAAAABAAAACXVzZXJJbmRleAkABLkAAAACCQAETAAAAAICAAAAFyVzJWRfX25leHRDbGFpbWVkUGVyaW9kCQAETAAAAAIJAAGkAAAAAQUAAAAJdXNlckluZGV4BQAAAANuaWwFAAAAA1NFUAEAAAAca2V5TGFzdFByb2Nlc3NlZFBlcmlvZE9mVXNlcgAAAAEAAAAJdXNlckluZGV4CQAEuQAAAAIJAARMAAAAAgIAAAAZJXMlZF9fbGFzdFByb2Nlc3NlZFBlcmlvZAkABEwAAAACCQABpAAAAAEFAAAACXVzZXJJbmRleAUAAAADbmlsBQAAAANTRVABAAAAEmtleUhlaWdodEZvclBlcmlvZAAAAAEAAAAGcGVyaW9kCQAEuQAAAAIJAARMAAAAAgIAAAAaJXMlZF9fc3RhcnRIZWlnaHRGb3JQZXJpb2QJAARMAAAAAgkAAaQAAAABBQAAAAZwZXJpb2QFAAAAA25pbAUAAAADU0VQAQAAAB1rZXlBdXhFbWlzc2lvblJld2FyZEZvclBlcmlvZAAAAAEAAAAGcGVyaW9kCQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlZF9fYXV4RW1pc3Npb25SZXdhcmQJAARMAAAA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bWF0Y2gwBQAAAAZyZXN1bHQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAADyhJbnQsIEludCwgSW50KQQAAAABcgUAAAAHJG1hdGNoMAUAAAABcgkAAAIAAAABAgAAABdJbmNvcnJlY3QgaW52b2tlIHJlc3VsdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAAGHByb2Nlc3NOZXh0QmF0Y2hJbnRlcm5hbAAAAAUAAAAQYm9vc3RpbmdDb250cmFjdAAAAA1jdXJyZW50UGVyaW9kAAAAC2N1cnJlbnRVc2VyAAAABWRlcHRoAAAAC3RvdGFsV2VpZ2h0BAAAABdib29zdGluZ0NvbnRyYWN0QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABBQAAABBib29zdGluZ0NvbnRyYWN0BAAAAAxsYXRlc3RQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9rZXlMYXRlc3RQZXJpb2QAAAAABAAAAAp1c2Vyc0NvdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzCQEAAAANa2V5VXNlcnNDb3VudAAAAAAAAAAAAAAAAAAEAAAADnRvdGFsV2VpZ2h0S2V5CQEAAAAXa2V5VG90YWxXZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kBAAAAA9oZWlnaHRGb3JQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJrZXlIZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kAwMJAABmAAAAAgUAAAAFZGVwdGgAAAAAAAAAAAAJAABnAAAAAgUAAAAMbGF0ZXN0UGVyaW9kBQAAAA1jdXJyZW50UGVyaW9kBwQAAAACdDAJAQAAAA5jYWxjVXNlcldlaWdodAAAAAQFAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzBQAAAA9oZWlnaHRGb3JQZXJpb2QFAAAADWN1cnJlbnRQZXJpb2QFAAAAC2N1cnJlbnRVc2VyBAAAAAd3ZWlnaHQwCQAAZAAAAAIFAAAAC3RvdGFsV2VpZ2h0CAUAAAAC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FnVzZXJBY2N1bXVsYXRlZE1hdGNoZXIAAAAXdXNlckFjY3VtdWxhdGVkRW1pc3Npb24EAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEFAAAAEGJvb3N0aW5nQ29udHJhY3QEAAAADGxhdGVzdFBlcmlvZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmtleU5leHRQcm9jZXNzZWRQZXJpb2QAAAAABAAAAAt0b3RhbFdlaWdodAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAF2tleVRvdGFsV2VpZ2h0Rm9yUGVyaW9kAAAAAQUAAAANY3VycmVudFBlcmlvZAQAAAAPaGVpZ2h0Rm9yUGVyaW9kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASa2V5SGVpZ2h0Rm9yUGVyaW9kAAAAAQUAAAANY3VycmVudFBlcmlvZAQAAAANJHQwMTE3MjQxMTgzNgkBAAAADmNhbGNVc2VyV2VpZ2h0AAAABAUAAAAXYm9vc3RpbmdDb250cmFjdEFkZHJlc3MFAAAAD2hlaWdodEZvclBlcmlvZAUAAAANY3VycmVudFBlcmlvZAUAAAALY3VycmVudFVzZXIEAAAACnVzZXJXZWlnaHQIBQAAAA0kdDAxMTcyNDExODM2AAAAAl8xBAAAAAdpZ25vcmVkCAUAAAANJHQwMTE3MjQxMTgzNgAAAAJfMgQAAAAadXNlckFtb3VudE1hdGNoZXJGb3JQZXJpb2QJAABrAAAAAwkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAF2tleVRvdGFsQW1vdW50Rm9yUGVyaW9kAAAAAQUAAAANY3VycmVudFBlcmlvZAUAAAAKdXNlcldlaWdodAUAAAALdG90YWxXZWlnaHQEAAAAG3VzZXJBbW91bnRFbWlzc2lvbkZvclBlcmlvZAkAAGsAAAADCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAda2V5QXV4RW1pc3Npb25SZXdhcmRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kBQAAAAp1c2VyV2VpZ2h0BQAAAAt0b3RhbFdlaWdodAMDCQAAZwAAAAIAAAAAAAAAAAAFAAAABWRlcHRoBgkAAGcAAAACCQAAZAAAAAIFAAAADWN1cnJlbnRQZXJpb2QAAAAAAAAAAAEFAAAADGxhdGVzdFBlcmlvZAkABRUAAAADCQAAZAAAAAIFAAAADWN1cnJlbnRQZXJpb2QAAAAAAAAAAAEJAABkAAAAAgUAAAAWdXNlckFjY3VtdWxhdGVkTWF0Y2hlcgUAAAAadXNlckFtb3VudE1hdGNoZXJGb3JQZXJpb2QJAABkAAAAAgUAAAAXdXNlckFjY3VtdWxhdGVkRW1pc3Npb24FAAAAG3VzZXJBbW91bnRFbWlzc2lvbkZvclBlcmlvZAkBAAAAC2ludm9rZUNsYWltAAAABgUAAAAQYm9vc3RpbmdDb250cmFjdAkAAGQAAAACBQAAAA1jdXJyZW50UGVyaW9kAAAAAAAAAAABBQAAAAtjdXJyZW50VXNlcgkAAGUAAAACBQAAAAVkZXB0aAAAAAAAAAAAAQkAAGQAAAACBQAAABZ1c2VyQWNjdW11bGF0ZWRNYXRjaGVyBQAAABp1c2VyQW1vdW50TWF0Y2hlckZvclBlcmlvZAkAAGQAAAACBQAAABd1c2VyQWNjdW11bGF0ZWRFbWlzc2lvbgUAAAAbdXNlckFtb3VudEVtaXNzaW9uRm9yUGVyaW9kAQAAABFjb21tb25DbGFpbVJld2FyZAAAAAEAAAALdXNlckFkZHJlc3MEAAAACGNmZ0FycmF5CQEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAQAAAAHdXNlcklkeAkBAAAAFWdldFVzZXJJbmRleEJ5QWRkcmVzcwAAAAIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFklkeENmZ0Jvb3N0aW5nQ29udHJhY3QFAAAAC3VzZXJBZGRyZXNzBAAAAA1jdXJyZW50UGVyaW9kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAba2V5TmV4dFVubGFpbWVkUGVyaW9kT2ZVc2VyAAAAAQUAAAAHdXNlcklkeAQAAAATbmV4dFByb2Nlc3NlZFBlcmlvZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmtleU5leHRQcm9jZXNzZWRQZXJpb2QAAAAAAwkAAGcAAAACBQAAAA1jdXJyZW50UGVyaW9kBQAAABNuZXh0UHJvY2Vzc2VkUGVyaW9kCQAAAgAAAAECAAAAEE5vdGhpbmcgdG8gY2xhaW0EAAAAEGJvb3N0aW5nQ29udHJhY3QJAAJZAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAWSWR4Q2ZnQm9vc3RpbmdDb250cmFjdAQAAAANJHQwMTMwNDgxMzE3NAkBAAAADWNsYWltSW50ZXJuYWwAAAAGBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAd1c2VySWR4BQAAAAlVU0VSREVQVEgAAAAAAAAAAAAAAAAAAAAAAAAEAAAABnBlcmlvZAgFAAAADSR0MDEzMDQ4MTMxNzQAAAACXzEEAAAAEWFtb3VudEZyb21NYXRjaGVyCAUAAAANJHQwMTMwNDgxMzE3NAAAAAJfMgQAAAASYW1vdW50RnJvbUVtaXNzaW9uCAUAAAANJHQwMTMwNDgxMzE3NAAAAAJfMwkABRgAAAAGBQAAAAZwZXJpb2QFAAAAEWFtb3VudEZyb21NYXRjaGVyBQAAABJhbW91bnRGcm9tRW1pc3Npb24FAAAAB3VzZXJJZHgFAAAACGNmZ0FycmF5BQAAABNuZXh0UHJvY2Vzc2VkUGVyaW9kAAAAEQAAAAFpAQAAABBwcm9jZXNzTmV4dEJhdGNoAAAABQAAABBib29zdGluZ0NvbnRyYWN0AAAADWN1cnJlbnRQZXJpb2QAAAALY3VycmVudFVzZXIAAAAFZGVwdGgAAAALdG90YWxXZWlnaHQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAkU2hvdWxkIGJlIGNhbGxlZCBieSB0aGlzIHNjcmlwdCBvbmx5BAAAAAN0cGwJAQAAABhwcm9jZXNzTmV4dEJhdGNoSW50ZXJuYWwAAAAFBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAtjdXJyZW50VXNlcgUAAAAFZGVwdGgFAAAAC3RvdGFsV2VpZ2h0CQAFFAAAAAIIBQAAAAN0cGwAAAACXzEJAAUVAAAAAwgFAAAAA3RwbAAAAAJfMggFAAAAA3RwbAAAAAJfMwgFAAAAA3RwbAAAAAJfNAAAAAFpAQAAAB1wcm9jZXNzUGVuZGluZ1BlcmlvZHNBbmRVc2VycwAAAAAEAAAADWN1cnJlbnRQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZrZXlOZXh0UHJvY2Vzc2VkUGVyaW9kAAAAAAMJAABmAAAAAgUAAAANY3VycmVudFBlcmlvZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2tleUxhdGVzdFBlcmlvZAAAAAAJAAACAAAAAQIAAAASTm90aGluZyB0byBwcm9jZXNzBAAAAAhjZmdBcnJheQkBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAEAAAABWRlcHRoCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADklkeENmZ01heERlcHRoAwkAAGYAAAACBQAAAAVkZXB0aAUAAAAITUFYREVQVEgJAAACAAAAAQIAAAAWRGVwdGggZXhjZWVkcyBNQVhERVBUSAQAAAAQYm9vc3RpbmdDb250cmFjdAkAAlkAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABZJZHhDZmdCb29zdGluZ0NvbnRyYWN0BAAAAAtjdXJyZW50VXNlcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFGtleU5leHRQcm9jZXNzZWRVc2VyAAAAAAQAAAALdG90YWxXZWlnaHQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABdrZXlUb3RhbFdlaWdodEZvclBlcmlvZAAAAAEFAAAADWN1cnJlbnRQZXJpb2QEAAAAAXIJAQAAABhwcm9jZXNzTmV4dEJhdGNoSW50ZXJuYWwAAAAFBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAtjdXJyZW50VXNlcgUAAAAFZGVwdGgFAAAAC3RvdGFsV2VpZ2h0CQAETQAAAAIJAARNAAAAAggFAAAAAXIAAAACXzEJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZAAAAAAIBQAAAAFyAAAAAl8yCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFGtleU5leHRQcm9jZXNzZWRVc2VyAAAAAAgFAAAAAXIAAAACXzMAAAABaQEAAAAHZGVwb3NpdAAAAAAEAAAACGNmZ0FycmF5CQEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFklkeENmZ1BhY2VtYWtlckFkZHJlc3MJAAACAAAAAQIAAAAUV3JvbmcgY2FsbGVyIGFkZHJlc3MEAAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEICQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQDCQEAAAACIT0AAAACBQAAAAdhc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADUlkeENmZ0Fzc2V0SWQJAAACAAAAAQIAAAATV3JvbmcgcGF5bWVudCBhc3NldAQAAAAGcGVyaW9kCQEAAAAKbmV4dFBlcmlvZAAAAAAEAAAABmRlbHRhSAkAAGUAAAACBQAAAAZoZWlnaHQJAQAAAA9nZXROdW1iZXJPckZhaWwAAAABCQEAAAAfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodAAAAAAEAAAADGVtaXNzaW9uUmF0ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABZrZXlSYXRlUGVyQmxvY2tDdXJyZW50AAAAAAkAASwAAAACCQABLAAAAAICAAAAHG1hbmRhdG9yeSBlbWlzc2lvbl9jb250cmFjdC4JAQAAABZrZXlSYXRlUGVyQmxvY2tDdXJyZW50AAAAAAIAAAAPIGlzIG5vdCBkZWZpbmVkBAAAAAZ3ZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABRrZXlQb29sV2VpZ2h0VmlydHVhbAAAAAAJAAEsAAAAAgkAASwAAAACAgAAABttYW5kYXRvcnkgZmFjdG9yeV9jb250cmFjdC4JAQAAABRrZXlQb29sV2VpZ2h0VmlydHVhbAAAAAACAAAADyBpcyBub3QgZGVmaW5lZAQAAAAJYXV4QW1vdW50CQAAawAAAAMJAABoAAAAAgUAAAAGZGVsdGFIBQAAAAZ3ZWlnaHQFAAAADGVtaXNzaW9uUmF0ZQUAAAAFTVVMVDgEAAAAAmVtCQAD/AAAAAQFAAAAEGVtaXNzaW9uQ29udHJhY3QCAAAABGVtaXQJAARMAAAAAgUAAAAJYXV4QW1vdW50BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAACZW0FAAAAAmVtBAAAAAttYXRjaGVyUGFydAgJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAAApwYXlvdXRJbmZvCQEAAAAQUGVyaW9kUGF5b3V0SW5mbwAAAAMFAAAABnBlcmlvZAUAAAALbWF0Y2hlclBhcnQFAAAACWF1eEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleUxhdGVzdFBlcmlvZAAAAAAFAAAABnBlcmlvZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEmtleUhlaWdodEZvclBlcmlvZAAAAAEFAAAABnBlcmlvZAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAda2V5QXV4RW1pc3Npb25SZXdhcmRGb3JQZXJpb2QAAAABBQAAAAZwZXJpb2QFAAAACWF1eEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQAAAAABQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdrZXlUb3RhbEFtb3VudEZvclBlcmlvZAAAAAEFAAAABnBlcmlvZAUAAAALbWF0Y2hlclBhcnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA1rZXlOZXh0UGVyaW9kAAAAAAkAAGQAAAACBQAAAAZwZXJpb2QAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUxhc3RQYXlvdXRJbmZvAAAAAAUAAAAKcGF5b3V0SW5mbwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUa2V5UGF5b3V0SGlzdG9yeUluZm8AAAABBQAAAAZwZXJpb2QFAAAACnBheW91dEluZm8FAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY2xhaW1OZXh0QmF0Y2gAAAAGAAAAEGJvb3N0aW5nQ29udHJhY3QAAAANY3VycmVudFBlcmlvZAAAAAtjdXJyZW50VXNlcgAAAAVkZXB0aAAAABB0b3RhbEZyb21NYXRjaGVyAAAAEXRvdGFsRnJvbUVtaXNzaW9uAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAJFNob3VsZCBiZSBjYWxsZWQgYnkgdGhpcyBzY3JpcHQgb25seQQAAAAPcGVyaW9kQW5kVG90YWxzCQEAAAANY2xhaW1JbnRlcm5hbAAAAAYFAAAAEGJvb3N0aW5nQ29udHJhY3QFAAAADWN1cnJlbnRQZXJpb2QFAAAAC2N1cnJlbnRVc2VyBQAAAAVkZXB0aAUAAAAQdG90YWxGcm9tTWF0Y2hlcgUAAAARdG90YWxGcm9tRW1pc3Npb24JAAUUAAAAAgUAAAADbmlsBQAAAA9wZXJpb2RBbmRUb3RhbHMAAAABaQEAAAALY2xhaW1SZXdhcmQAAAAABAAAAAdhZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAANJHQwMTc0NjAxNzU4MAkBAAAAEWNvbW1vbkNsYWltUmV3YXJkAAAAAQUAAAAHYWRkcmVzcwQAAAAGcGVyaW9kCAUAAAANJHQwMTc0NjAxNzU4MAAAAAJfMQQAAAARYW1vdW50RnJvbU1hdGNoZXIIBQAAAA0kdDAxNzQ2MDE3NTgwAAAAAl8yBAAAABJhbW91bnRGcm9tRW1pc3Npb24IBQAAAA0kdDAxNzQ2MDE3NTgwAAAAAl8zBAAAAAd1c2VySWR4CAUAAAANJHQwMTc0NjAxNzU4MAAAAAJfNAQAAAAIY2ZnQXJyYXkIBQAAAA0kdDAxNzQ2MDE3NTgwAAAAAl81BAAAABNuZXh0UHJvY2Vzc2VkUGVyaW9kCAUAAAANJHQwMTc0NjAxNzU4MAAAAAJfNgkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAba2V5TmV4dFVubGFpbWVkUGVyaW9kT2ZVc2VyAAAAAQUAAAAHdXNlcklkeAUAAAAGcGVyaW9kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgkAAGQAAAACBQAAABFhbW91bnRGcm9tTWF0Y2hlcgUAAAASYW1vdW50RnJvbUVtaXNzaW9uCQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADUlkeENmZ0Fzc2V0SWQJAARMAAAAAgkBAAAADEhpc3RvcnlFbnRyeQAAAAcCAAAABWNsYWltBQAAAAdhZGRyZXNzBQAAABFhbW91bnRGcm9tTWF0Y2hlcgUAAAASYW1vdW50RnJvbUVtaXNzaW9uBQAAAAZwZXJpb2QFAAAAE25leHRQcm9jZXNzZWRQZXJpb2QFAAAAAWkFAAAAA25pbAkABEwAAAACBQAAABFhbW91bnRGcm9tTWF0Y2hlcgkABEwAAAACBQAAABJhbW91bnRGcm9tRW1pc3Npb24FAAAAA25pbAAAAAFpAQAAABNjbGFpbVJld2FyZFJFQURPTkxZAAAAAQAAAAdhZGRyZXNzBAAAAAxjbGFpbVJlc3VsdHMJAQAAABFjb21tb25DbGFpbVJld2FyZAAAAAEFAAAAB2FkZHJlc3MEAAAABmFtb3VudAkAAGQAAAACCAUAAAAMY2xhaW1SZXN1bHRzAAAAAl8yCAUAAAAMY2xhaW1SZXN1bHRzAAAAAl8zCQAFFAAAAAIFAAAAA25pbAUAAAAGYW1vdW50AAAAAWkBAAAAG2NsYWltUmV3YXJkRGV0YWlsZWRSRUFET05MWQAAAAEAAAAHYWRkcmVzcwQAAAANJHQwMTgzMjIxODM5MQkBAAAAEWNvbW1vbkNsYWltUmV3YXJkAAAAAQUAAAAHYWRkcmVzcwQAAAAHaWdub3JlZAgFAAAADSR0MDE4MzIyMTgzOTEAAAACXzEEAAAAC2Zyb21NYXRjaGVyCAUAAAANJHQwMTgzMjIxODM5MQAAAAJfMgQAAAAMZnJvbUVtaXNzaW9uCAUAAAANJHQwMTgzMjIxODM5MQAAAAJfMwkABRQAAAACBQAAAANuaWwJAAS5AAAAAgkABEwAAAACAgAAAAYlZCVkJWQJAARMAAAAAgkAAaQAAAABCQAAZAAAAAIFAAAAC2Zyb21NYXRjaGVyBQAAAAxmcm9tRW1pc3Npb24JAARMAAAAAgkAAaQAAAABBQAAAAtmcm9tTWF0Y2hlcgkABEwAAAACCQABpAAAAAEFAAAADGZyb21FbWlzc2lvbgUAAAADbmlsBQAAAANTRVAAAAABaQEAAAAdbGF0ZXN0RmluYWxpemVkUGVyaW9kUkVBRE9OTFkAAAABAAAAB2FkZHJlc3MJAAUUAAAAAgUAAAADbmlsCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAA9rZXlMYXRlc3RQZXJpb2QAAAAAAP//////////AAAAAWkBAAAAIWxhdGVzdEZpbmFsaXplZFBlcmlvZEluZm9SRUFET05MWQAAAAEAAAAHYWRkcmVzcwkABRQAAAACBQAAAANuaWwJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFrZXlMYXN0UGF5b3V0SW5mbwAAAAAAAAABaQEAAAAVY2FsY0d3eFBhcmFtc1JFQURPTkxZAAAAAwAAAA5nd3hBbW91bnRTdGFydAAAAA9sb2NrU3RhcnRIZWlnaHQAAAASbG9ja0R1cmF0aW9uQmxvY2tzBAAAAA1sb2NrRW5kSGVpZ2h0CQAAZAAAAAIFAAAAD2xvY2tTdGFydEhlaWdodAUAAAASbG9ja0R1cmF0aW9uQmxvY2tzBAAAAAxzY2FsZThQYXJhbUsJAQAAAAEtAAAAAQkAAGsAAAADBQAAAA5nd3hBbW91bnRTdGFydAUAAAAFU0NBTEUFAAAAEmxvY2tEdXJhdGlvbkJsb2NrcwQAAAAMc2NhbGU4UGFyYW1CCQAAaAAAAAIJAABrAAAAAwUAAAAOZ3d4QW1vdW50U3RhcnQFAAAABVNDQUxFBQAAABJsb2NrRHVyYXRpb25CbG9ja3MFAAAADWxvY2tFbmRIZWlnaHQJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIFAAAADHNjYWxlOFBhcmFtSwkABEwAAAACBQAAAAxzY2FsZThQYXJhbUIJAARMAAAAAgkBAAAACm5leHRQZXJpb2QAAAAABQAAAANuaWwAAAABaQEAAAAaY2FsY0d3eEFtb3VudFN0YXJ0UkVBRE9OTFkAAAADAAAADHd4TG9ja0Ftb3VudAAAAAxsb2NrRHVyYXRpb24AAAAPbWF4TG9ja0R1cmF0aW9uBAAAAAdjb2VmZlg4CQAAawAAAAMFAAAADGxvY2tEdXJhdGlvbgUAAAAFTVVMVDgFAAAAD21heExvY2tEdXJhdGlvbgQAAAAOZ1d4QW1vdW50U3RhcnQJAABrAAAAAwUAAAAMd3hMb2NrQW1vdW50BQAAAAdjb2VmZlg4BQAAAAVNVUxUOAkABRQAAAACBQAAAANuaWwJAARMAAAAAgUAAAAOZ1d4QW1vdW50U3RhcnQFAAAAA25pbAAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAQAAAAMd3hBc3NldElkU3RyAAAAGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyAAAAGmJvb3N0aW5nQ29udHJhY3RBZGRyZXNzU3RyAAAACG1heERlcHRoAwkBAAAAAiE9AAAAAgUAAAAEdGhpcwgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAADm5vdCBhdXRob3JpemVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlDb25maWcAAAAACQEAAAAMZm9ybWF0Q29uZmlnAAAABAUAAAAMd3hBc3NldElkU3RyBQAAABptYXRjaGVyUGFjZW1ha2VyQWRkcmVzc1N0cgUAAAAaYm9vc3RpbmdDb250cmFjdEFkZHJlc3NTdHIFAAAACG1heERlcHRoBQAAAANuaWwAAAABaQEAAAANY29uc3RydWN0b3JWMgAAAAEAAAAOZmFjdG9yeUFkZHJlc3MDCQEAAAACIT0AAAACBQAAAAR0aGlzCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUZhY3RvcnlBZGRyZXNzAAAAAAUAAAAOZmFjdG9yeUFkZHJlc3MFAAAAA25pbAAAAAFpAQAAAA1jb25zdHJ1Y3RvclYzAAAAAQAAAA9lbWlzc2lvbkFkZHJlc3MDCQEAAAACIT0AAAACBQAAAAR0aGlzCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQEAAAAEGluaXRMYXRlc3RQZXJpb2QDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzCQEAAAAPa2V5TGF0ZXN0UGVyaW9kAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPa2V5TGF0ZXN0UGVyaW9kAAAAAAD//////////wUAAAADbmlsCQAETQAAAAIFAAAAEGluaXRMYXRlc3RQZXJpb2QJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlFbWlzc2lvbkFkZHJlc3MAAAAABQAAAA9lbWlzc2lvbkFkZHJlc3MAAAABaQEAAAAVb25FbWlzc2lvbkZvckd3eFN0YXJ0AAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAPZmFjdG9yeUNvbnRyYWN0CQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQAAAAABQAAAAZoZWlnaHQFAAAAA25pbAAAAAFpAQAAACNsYXRlc3RQZXJpb2RFbWlzc2lvblJld2FyZHNSRUFET05MWQAAAAEAAAAHYWRkcmVzcwQAAAAGcGVyaW9kCQEAAAAKbmV4dFBlcmlvZAAAAAAJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAB1rZXlBdXhFbWlzc2lvblJld2FyZEZvclBlcmlvZAAAAAEFAAAABnBlcmlvZAUAAAADbmlsAAAAAWkBAAAABWNhbGNEAAAABQAAAAt4MUJpZ0ludFN0cgAAAAt4MkJpZ0ludFN0cgAAAAxhbXBCaWdJbnRTdHIAAAATYVByZWNpc2lvbkJpZ0ludFN0cgAAABh0YXJnZXRQcmVjaXNpb25CaWdJbnRTdHIEAAAABm5Db2lucwkAATYAAAABAAAAAAAAAAACBAAAAAphUHJlY2lzaW9u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", "chainId": 87, "height": 3043290, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FdpaCMKSMBH2yvjmNZS1RaRqRp5AzVWJAK8jKu3WimY2 Next: AVaGqeAaF12zuvCnNX1KUMBVaRgWZcnFPjacBsdjhAz Diff:
OldNewDifferences
142142 }
143143 else {
144144 let p = getInteger(this, kLast)
145- if (isDefined(p))
145+ if (if (isDefined(p))
146+ then (period >= value(p))
147+ else false)
146148 then {
147149 let pv = value(p)
148150 let k = value(getInteger(boostingContractAddress, keyUserKValueForPeriod(pv, userIndex)))
252254 let latestPeriod = getNumberByKey(keyNextProcessedPeriod())
253255 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
254256 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
255- let $t01170111813 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
256- let userWeight = $t01170111813._1
257- let ignored = $t01170111813._2
257+ let $t01172411836 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
258+ let userWeight = $t01172411836._1
259+ let ignored = $t01172411836._2
258260 let userAmountMatcherForPeriod = fraction(getNumberByKey(keyTotalAmountForPeriod(currentPeriod)), userWeight, totalWeight)
259261 let userAmountEmissionForPeriod = fraction(getNumberByKey(keyAuxEmissionRewardForPeriod(currentPeriod)), userWeight, totalWeight)
260262 if (if ((0 >= depth))
274276 then throw("Nothing to claim")
275277 else {
276278 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
277- let $t01302513151 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0, 0)
278- let period = $t01302513151._1
279- let amountFromMatcher = $t01302513151._2
280- let amountFromEmission = $t01302513151._3
279+ let $t01304813174 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0, 0)
280+ let period = $t01304813174._1
281+ let amountFromMatcher = $t01304813174._2
282+ let amountFromEmission = $t01304813174._3
281283 $Tuple6(period, amountFromMatcher, amountFromEmission, userIdx, cfgArray, nextProcessedPeriod)
282284 }
283285 }
357359 @Callable(i)
358360 func claimReward () = {
359361 let address = toString(i.caller)
360- let $t01743717557 = commonClaimReward(address)
361- let period = $t01743717557._1
362- let amountFromMatcher = $t01743717557._2
363- let amountFromEmission = $t01743717557._3
364- let userIdx = $t01743717557._4
365- let cfgArray = $t01743717557._5
366- let nextProcessedPeriod = $t01743717557._6
362+ let $t01746017580 = commonClaimReward(address)
363+ let period = $t01746017580._1
364+ let amountFromMatcher = $t01746017580._2
365+ let amountFromEmission = $t01746017580._3
366+ let userIdx = $t01746017580._4
367+ let cfgArray = $t01746017580._5
368+ let nextProcessedPeriod = $t01746017580._6
367369 $Tuple2([IntegerEntry(keyNextUnlaimedPeriodOfUser(userIdx), period), ScriptTransfer(i.caller, (amountFromMatcher + amountFromEmission), fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amountFromMatcher, amountFromEmission, period, nextProcessedPeriod, i)], [amountFromMatcher, amountFromEmission])
368370 }
369371
380382
381383 @Callable(i)
382384 func claimRewardDetailedREADONLY (address) = {
383- let $t01829918368 = commonClaimReward(address)
384- let ignored = $t01829918368._1
385- let fromMatcher = $t01829918368._2
386- let fromEmission = $t01829918368._3
385+ let $t01832218391 = commonClaimReward(address)
386+ let ignored = $t01832218391._1
387+ let fromMatcher = $t01832218391._2
388+ let fromEmission = $t01832218391._3
387389 $Tuple2(nil, makeString(["%d%d%d", toString((fromMatcher + fromEmission)), toString(fromMatcher), toString(fromEmission)], SEP))
388390 }
389391
474476 let ann = (amp * nCoins)
475477 let arr = [1, 2, 3, 4, 5, 6, 7]
476478 func calc (acc,cur) = {
477- let $t02184722036 = acc
478- let d = $t02184722036._1
479- let dPrev = $t02184722036._2
479+ let $t02187022059 = acc
480+ let d = $t02187022059._1
481+ let dPrev = $t02187022059._2
480482 let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
481483 let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
482484 $Tuple2(dNext, d)
483485 }
484486
485- let $t02224922299 = {
487+ let $t02227222322 = {
486488 let $l = arr
487489 let $s = size($l)
488490 let $acc0 = $Tuple2(s, unit)
496498
497499 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
498500 }
499- let dNext = $t02224922299._1
500- let dPrev = $t02224922299._2
501+ let dNext = $t02227222322._1
502+ let dPrev = $t02227222322._2
501503 let dDiff = abs((dNext - value(dPrev)))
502504 if ((targetPrecision >= dDiff))
503505 then $Tuple2(nil, toString(dNext))
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 let zeroBigInt = toBigInt(0)
1717
1818 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
1919
2020
2121 func getNumberOrFail (key) = valueOrErrorMessage(getInteger(this, key), (("mandatory this." + key) + " is not defined"))
2222
2323
2424 func getStringByKey (key) = valueOrElse(getString(this, key), "")
2525
2626
2727 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
2828
2929
3030 func abs (val) = if ((zeroBigInt > val))
3131 then -(val)
3232 else val
3333
3434
3535 func keyFactoryAddress () = "%s%s__config__factoryAddress"
3636
3737
3838 let factoryAddressStr = getStringOrFail(keyFactoryAddress())
3939
4040 let factoryContract = addressFromStringValue(factoryAddressStr)
4141
4242 func keyEmissionAddress () = "%s%s__config__emissionAddress"
4343
4444
4545 let emissionAddressStr = getStringOrFail(keyEmissionAddress())
4646
4747 let emissionContract = addressFromStringValue(emissionAddressStr)
4848
4949 let IdxCfgAssetId = 1
5050
5151 let IdxCfgPacemakerAddress = 2
5252
5353 let IdxCfgBoostingContract = 3
5454
5555 let IdxCfgMaxDepth = 4
5656
5757 func keyConfig () = "%s__config"
5858
5959
6060 func readConfigArrayOrFail () = split(getStringOrFail(keyConfig()), SEP)
6161
6262
6363 func formatConfig (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = makeString(["%s%s%s%d", wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, toString(maxDepth)], SEP)
6464
6565
6666 func keyGwxRewardEmissionStartHeight () = "%s%s__gwxRewardEmissionPart__startHeight"
6767
6868
6969 func keyUsersCount () = "%s__nextUserNum"
7070
7171
7272 func keyRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
7373
7474
7575 func keyPoolWeightVirtual () = "%s%s__poolWeight__GWXvirtualPOOL"
7676
7777
7878 func keyNextProcessedUser () = "%s__nextProcessedUser"
7979
8080
8181 func keyLatestPeriod () = "%s__latestPeriod"
8282
8383
8484 func keyNextPeriod () = "%s__nextPeriod"
8585
8686
8787 func keyNextProcessedPeriod () = "%s__nextProcessedPeriod"
8888
8989
9090 func keyNextUnlaimedPeriodOfUser (userIndex) = makeString(["%s%d__nextClaimedPeriod", toString(userIndex)], SEP)
9191
9292
9393 func keyLastProcessedPeriodOfUser (userIndex) = makeString(["%s%d__lastProcessedPeriod", toString(userIndex)], SEP)
9494
9595
9696 func keyHeightForPeriod (period) = makeString(["%s%d__startHeightForPeriod", toString(period)], SEP)
9797
9898
9999 func keyAuxEmissionRewardForPeriod (period) = makeString(["%s%d__auxEmissionReward", toString(period)], SEP)
100100
101101
102102 func keyTotalAmountForPeriod (period) = makeString(["%s%d__totalAmountForPeriod", toString(period)], SEP)
103103
104104
105105 func keyLastPayoutInfo () = "%s__lastPayoutInfo"
106106
107107
108108 func PeriodPayoutInfo (period,matcherReward,emissionReward) = makeString(["%d%d%d", toString(period), toString(matcherReward), toString(emissionReward)], SEP)
109109
110110
111111 func keyPayoutHistoryInfo (period) = makeString(["%s%s%d__payouts__history", toString(period)], SEP)
112112
113113
114114 func keyTotalWeightForPeriod (period) = makeString(["%s%d__totalWeightForPeriod", toString(period)], SEP)
115115
116116
117117 func keyUserKValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "k", toString(period)], SEP)
118118
119119
120120 func keyUserBValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "b", toString(period)], SEP)
121121
122122
123123 func HistoryEntry (type,user,amountFromMatcher,amountFromEmission,currentPeriod,latestPeriod,i) = {
124124 let historyKEY = makeString(["%s%s%s%s__history", type, user, toBase58String(i.transactionId)], SEP)
125125 let historyDATA = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amountFromMatcher), toString(amountFromEmission), toString(currentPeriod), toString(latestPeriod)], SEP)
126126 StringEntry(historyKEY, historyDATA)
127127 }
128128
129129
130130 func calcUserWeight (boostingContractAddress,heightForPeriod,period,userIndex) = {
131131 let kLast = keyLastProcessedPeriodOfUser(userIndex)
132132 let kKey = keyUserKValueForPeriod(period, userIndex)
133133 let kRaw = getInteger(boostingContractAddress, kKey)
134134 if (isDefined(kRaw))
135135 then {
136136 let k = value(kRaw)
137137 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(period, userIndex)))
138138 let w = ((k * heightForPeriod) + b)
139139 if ((w > 0))
140140 then $Tuple2((w / SCALE), [IntegerEntry(kLast, period)])
141141 else $Tuple2(0, nil)
142142 }
143143 else {
144144 let p = getInteger(this, kLast)
145- if (isDefined(p))
145+ if (if (isDefined(p))
146+ then (period >= value(p))
147+ else false)
146148 then {
147149 let pv = value(p)
148150 let k = value(getInteger(boostingContractAddress, keyUserKValueForPeriod(pv, userIndex)))
149151 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(pv, userIndex)))
150152 let w = ((k * heightForPeriod) + b)
151153 if ((w > 0))
152154 then $Tuple2((w / SCALE), nil)
153155 else $Tuple2(0, nil)
154156 }
155157 else $Tuple2(0, nil)
156158 }
157159 }
158160
159161
160162 func getUserIndexByAddress (boostingContractAddressStr,userAddress) = {
161163 let key = makeString(["%s%s%s", "mapping", "user2num", userAddress], SEP)
162164 parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String(boostingContractAddressStr)), key), ((("User address " + userAddress) + " is not found in boosting contract data, key=") + key)))
163165 }
164166
165167
166168 func nextPeriod () = getNumberByKey(keyNextPeriod())
167169
168170
169171 func invokeProcess (boostingContract,period,user,depth,weight) = {
170172 let result = invoke(this, "processNextBatch", [boostingContract, period, user, depth, weight], nil)
171173 if ((result == result))
172174 then match result {
173175 case r: (Int, Int, Int) =>
174176 r
175177 case _ =>
176178 throw("Incorrect invoke result")
177179 }
178180 else throw("Strict value is not equal to itself.")
179181 }
180182
181183
182184 func processNextBatchInternal (boostingContract,currentPeriod,currentUser,depth,totalWeight) = {
183185 let boostingContractAddress = Address(boostingContract)
184186 let latestPeriod = getNumberByKey(keyLatestPeriod())
185187 let usersCount = valueOrElse(getInteger(boostingContractAddress, keyUsersCount()), 0)
186188 let totalWeightKey = keyTotalWeightForPeriod(currentPeriod)
187189 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
188190 if (if ((depth > 0))
189191 then (latestPeriod >= currentPeriod)
190192 else false)
191193 then {
192194 let t0 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
193195 let weight0 = (totalWeight + t0._1)
194196 if ((usersCount > (currentUser + 1)))
195197 then {
196198 let t1 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 1))
197199 let weight1 = (weight0 + t1._1)
198200 if ((usersCount > (currentUser + 2)))
199201 then {
200202 let t2 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 2))
201203 let weight2 = (weight1 + t2._1)
202204 if ((usersCount > (currentUser + 3)))
203205 then {
204206 let t3 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 3))
205207 let weight3 = (weight2 + t3._1)
206208 if ((usersCount > (currentUser + 4)))
207209 then {
208210 let t4 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 4))
209211 let weight4 = (weight3 + t4._1)
210212 if ((usersCount > (currentUser + 5)))
211213 then {
212214 let t5 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 5))
213215 let weight5 = (weight4 + t5._1)
214216 if ((usersCount > (currentUser + 6)))
215217 then {
216218 let r5 = invokeProcess(boostingContract, currentPeriod, (currentUser + 6), (depth - 1), weight5)
217219 $Tuple4((((((t0._2 ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2) ++ t5._2), r5._1, r5._2, r5._3)
218220 }
219221 else $Tuple4((((((([IntegerEntry(totalWeightKey, weight5)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2) ++ t5._2), (currentPeriod + 1), 0, 0)
220222 }
221223 else $Tuple4(((((([IntegerEntry(totalWeightKey, weight4)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2), (currentPeriod + 1), 0, 0)
222224 }
223225 else $Tuple4((((([IntegerEntry(totalWeightKey, weight3)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2), (currentPeriod + 1), 0, 0)
224226 }
225227 else $Tuple4(((([IntegerEntry(totalWeightKey, weight2)] ++ t0._2) ++ t1._2) ++ t2._2), (currentPeriod + 1), 0, 0)
226228 }
227229 else $Tuple4((([IntegerEntry(totalWeightKey, weight1)] ++ t0._2) ++ t1._2), (currentPeriod + 1), 0, 0)
228230 }
229231 else $Tuple4(([IntegerEntry(totalWeightKey, weight0)] ++ t0._2), (currentPeriod + 1), 0, 0)
230232 }
231233 else if ((currentUser == 0))
232234 then $Tuple4(nil, currentPeriod, 0, 0)
233235 else $Tuple4([IntegerEntry(totalWeightKey, totalWeight)], currentPeriod, currentUser, 0)
234236 }
235237
236238
237239 func invokeClaim (boostingContract,period,user,depth,totalFromMatcher,totalFromEmission) = {
238240 let result = invoke(this, "claimNextBatch", [boostingContract, period, user, depth, totalFromMatcher, totalFromEmission], nil)
239241 if ((result == result))
240242 then match result {
241243 case r: (Int, Int, Int) =>
242244 r
243245 case _ =>
244246 throw("Incorrect invoke result")
245247 }
246248 else throw("Strict value is not equal to itself.")
247249 }
248250
249251
250252 func claimInternal (boostingContract,currentPeriod,currentUser,depth,userAccumulatedMatcher,userAccumulatedEmission) = {
251253 let boostingContractAddress = Address(boostingContract)
252254 let latestPeriod = getNumberByKey(keyNextProcessedPeriod())
253255 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
254256 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
255- let $t01170111813 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
256- let userWeight = $t01170111813._1
257- let ignored = $t01170111813._2
257+ let $t01172411836 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
258+ let userWeight = $t01172411836._1
259+ let ignored = $t01172411836._2
258260 let userAmountMatcherForPeriod = fraction(getNumberByKey(keyTotalAmountForPeriod(currentPeriod)), userWeight, totalWeight)
259261 let userAmountEmissionForPeriod = fraction(getNumberByKey(keyAuxEmissionRewardForPeriod(currentPeriod)), userWeight, totalWeight)
260262 if (if ((0 >= depth))
261263 then true
262264 else ((currentPeriod + 1) >= latestPeriod))
263265 then $Tuple3((currentPeriod + 1), (userAccumulatedMatcher + userAmountMatcherForPeriod), (userAccumulatedEmission + userAmountEmissionForPeriod))
264266 else invokeClaim(boostingContract, (currentPeriod + 1), currentUser, (depth - 1), (userAccumulatedMatcher + userAmountMatcherForPeriod), (userAccumulatedEmission + userAmountEmissionForPeriod))
265267 }
266268
267269
268270 func commonClaimReward (userAddress) = {
269271 let cfgArray = readConfigArrayOrFail()
270272 let userIdx = getUserIndexByAddress(cfgArray[IdxCfgBoostingContract], userAddress)
271273 let currentPeriod = getNumberByKey(keyNextUnlaimedPeriodOfUser(userIdx))
272274 let nextProcessedPeriod = getNumberByKey(keyNextProcessedPeriod())
273275 if ((currentPeriod >= nextProcessedPeriod))
274276 then throw("Nothing to claim")
275277 else {
276278 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
277- let $t01302513151 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0, 0)
278- let period = $t01302513151._1
279- let amountFromMatcher = $t01302513151._2
280- let amountFromEmission = $t01302513151._3
279+ let $t01304813174 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0, 0)
280+ let period = $t01304813174._1
281+ let amountFromMatcher = $t01304813174._2
282+ let amountFromEmission = $t01304813174._3
281283 $Tuple6(period, amountFromMatcher, amountFromEmission, userIdx, cfgArray, nextProcessedPeriod)
282284 }
283285 }
284286
285287
286288 @Callable(i)
287289 func processNextBatch (boostingContract,currentPeriod,currentUser,depth,totalWeight) = if ((i.caller != this))
288290 then throw("Should be called by this script only")
289291 else {
290292 let tpl = processNextBatchInternal(boostingContract, currentPeriod, currentUser, depth, totalWeight)
291293 $Tuple2(tpl._1, $Tuple3(tpl._2, tpl._3, tpl._4))
292294 }
293295
294296
295297
296298 @Callable(i)
297299 func processPendingPeriodsAndUsers () = {
298300 let currentPeriod = getNumberByKey(keyNextProcessedPeriod())
299301 if ((currentPeriod > getNumberByKey(keyLatestPeriod())))
300302 then throw("Nothing to process")
301303 else {
302304 let cfgArray = readConfigArrayOrFail()
303305 let depth = parseIntValue(cfgArray[IdxCfgMaxDepth])
304306 if ((depth > MAXDEPTH))
305307 then throw("Depth exceeds MAXDEPTH")
306308 else {
307309 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
308310 let currentUser = getNumberByKey(keyNextProcessedUser())
309311 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
310312 let r = processNextBatchInternal(boostingContract, currentPeriod, currentUser, depth, totalWeight)
311313 ((r._1 :+ IntegerEntry(keyNextProcessedPeriod(), r._2)) :+ IntegerEntry(keyNextProcessedUser(), r._3))
312314 }
313315 }
314316 }
315317
316318
317319
318320 @Callable(i)
319321 func deposit () = {
320322 let cfgArray = readConfigArrayOrFail()
321323 if ((i.caller != Address(fromBase58String(cfgArray[IdxCfgPacemakerAddress]))))
322324 then throw("Wrong caller address")
323325 else {
324326 let assetId = value(value(i.payments[0]).assetId)
325327 if ((assetId != fromBase58String(cfgArray[IdxCfgAssetId])))
326328 then throw("Wrong payment asset")
327329 else {
328330 let period = nextPeriod()
329331 let deltaH = (height - getNumberOrFail(keyGwxRewardEmissionStartHeight()))
330332 let emissionRate = valueOrErrorMessage(getInteger(emissionContract, keyRatePerBlockCurrent()), (("mandatory emission_contract." + keyRatePerBlockCurrent()) + " is not defined"))
331333 let weight = valueOrErrorMessage(getInteger(factoryContract, keyPoolWeightVirtual()), (("mandatory factory_contract." + keyPoolWeightVirtual()) + " is not defined"))
332334 let auxAmount = fraction((deltaH * weight), emissionRate, MULT8)
333335 let em = invoke(emissionContract, "emit", [auxAmount], nil)
334336 if ((em == em))
335337 then {
336338 let matcherPart = value(i.payments[0]).amount
337339 let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
338340 [IntegerEntry(keyLatestPeriod(), period), IntegerEntry(keyHeightForPeriod(period), height), IntegerEntry(keyAuxEmissionRewardForPeriod(period), auxAmount), IntegerEntry(keyGwxRewardEmissionStartHeight(), height), IntegerEntry(keyTotalAmountForPeriod(period), matcherPart), IntegerEntry(keyNextPeriod(), (period + 1)), StringEntry(keyLastPayoutInfo(), payoutInfo), StringEntry(keyPayoutHistoryInfo(period), payoutInfo)]
339341 }
340342 else throw("Strict value is not equal to itself.")
341343 }
342344 }
343345 }
344346
345347
346348
347349 @Callable(i)
348350 func claimNextBatch (boostingContract,currentPeriod,currentUser,depth,totalFromMatcher,totalFromEmission) = if ((i.caller != this))
349351 then throw("Should be called by this script only")
350352 else {
351353 let periodAndTotals = claimInternal(boostingContract, currentPeriod, currentUser, depth, totalFromMatcher, totalFromEmission)
352354 $Tuple2(nil, periodAndTotals)
353355 }
354356
355357
356358
357359 @Callable(i)
358360 func claimReward () = {
359361 let address = toString(i.caller)
360- let $t01743717557 = commonClaimReward(address)
361- let period = $t01743717557._1
362- let amountFromMatcher = $t01743717557._2
363- let amountFromEmission = $t01743717557._3
364- let userIdx = $t01743717557._4
365- let cfgArray = $t01743717557._5
366- let nextProcessedPeriod = $t01743717557._6
362+ let $t01746017580 = commonClaimReward(address)
363+ let period = $t01746017580._1
364+ let amountFromMatcher = $t01746017580._2
365+ let amountFromEmission = $t01746017580._3
366+ let userIdx = $t01746017580._4
367+ let cfgArray = $t01746017580._5
368+ let nextProcessedPeriod = $t01746017580._6
367369 $Tuple2([IntegerEntry(keyNextUnlaimedPeriodOfUser(userIdx), period), ScriptTransfer(i.caller, (amountFromMatcher + amountFromEmission), fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amountFromMatcher, amountFromEmission, period, nextProcessedPeriod, i)], [amountFromMatcher, amountFromEmission])
368370 }
369371
370372
371373
372374 @Callable(i)
373375 func claimRewardREADONLY (address) = {
374376 let claimResults = commonClaimReward(address)
375377 let amount = (claimResults._2 + claimResults._3)
376378 $Tuple2(nil, amount)
377379 }
378380
379381
380382
381383 @Callable(i)
382384 func claimRewardDetailedREADONLY (address) = {
383- let $t01829918368 = commonClaimReward(address)
384- let ignored = $t01829918368._1
385- let fromMatcher = $t01829918368._2
386- let fromEmission = $t01829918368._3
385+ let $t01832218391 = commonClaimReward(address)
386+ let ignored = $t01832218391._1
387+ let fromMatcher = $t01832218391._2
388+ let fromEmission = $t01832218391._3
387389 $Tuple2(nil, makeString(["%d%d%d", toString((fromMatcher + fromEmission)), toString(fromMatcher), toString(fromEmission)], SEP))
388390 }
389391
390392
391393
392394 @Callable(i)
393395 func latestFinalizedPeriodREADONLY (address) = $Tuple2(nil, valueOrElse(getInteger(this, keyLatestPeriod()), -1))
394396
395397
396398
397399 @Callable(i)
398400 func latestFinalizedPeriodInfoREADONLY (address) = $Tuple2(nil, getStringByKey(keyLastPayoutInfo()))
399401
400402
401403
402404 @Callable(i)
403405 func calcGwxParamsREADONLY (gwxAmountStart,lockStartHeight,lockDurationBlocks) = {
404406 let lockEndHeight = (lockStartHeight + lockDurationBlocks)
405407 let scale8ParamK = -(fraction(gwxAmountStart, SCALE, lockDurationBlocks))
406408 let scale8ParamB = (fraction(gwxAmountStart, SCALE, lockDurationBlocks) * lockEndHeight)
407409 $Tuple2(nil, [scale8ParamK, scale8ParamB, nextPeriod()])
408410 }
409411
410412
411413
412414 @Callable(i)
413415 func calcGwxAmountStartREADONLY (wxLockAmount,lockDuration,maxLockDuration) = {
414416 let coeffX8 = fraction(lockDuration, MULT8, maxLockDuration)
415417 let gWxAmountStart = fraction(wxLockAmount, coeffX8, MULT8)
416418 $Tuple2(nil, [gWxAmountStart])
417419 }
418420
419421
420422
421423 @Callable(i)
422424 func constructor (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = if ((this != i.caller))
423425 then throw("not authorized")
424426 else [StringEntry(keyConfig(), formatConfig(wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, maxDepth))]
425427
426428
427429
428430 @Callable(i)
429431 func constructorV2 (factoryAddress) = if ((this != i.caller))
430432 then throw("not authorized")
431433 else [StringEntry(keyFactoryAddress(), factoryAddress)]
432434
433435
434436
435437 @Callable(i)
436438 func constructorV3 (emissionAddress) = if ((this != i.caller))
437439 then throw("not authorized")
438440 else {
439441 let initLatestPeriod = if (isDefined(getInteger(this, keyLatestPeriod())))
440442 then nil
441443 else [IntegerEntry(keyLatestPeriod(), -1)]
442444 (initLatestPeriod :+ StringEntry(keyEmissionAddress(), emissionAddress))
443445 }
444446
445447
446448
447449 @Callable(i)
448450 func onEmissionForGwxStart () = if ((i.caller != factoryContract))
449451 then throw("permissions denied")
450452 else [IntegerEntry(keyGwxRewardEmissionStartHeight(), height)]
451453
452454
453455
454456 @Callable(i)
455457 func latestPeriodEmissionRewardsREADONLY (address) = {
456458 let period = nextPeriod()
457459 $Tuple2(nil, [getNumberByKey(keyAuxEmissionRewardForPeriod(period))])
458460 }
459461
460462
461463
462464 @Callable(i)
463465 func calcD (x1BigIntStr,x2BigIntStr,ampBigIntStr,aPrecisionBigIntStr,targetPrecisionBigIntStr) = {
464466 let nCoins = toBigInt(2)
465467 let aPrecision = parseBigIntValue(aPrecisionBigIntStr)
466468 let targetPrecision = parseBigIntValue(targetPrecisionBigIntStr)
467469 let x1 = parseBigIntValue(x1BigIntStr)
468470 let x2 = parseBigIntValue(x2BigIntStr)
469471 let amp = (parseBigIntValue(ampBigIntStr) * aPrecision)
470472 let s = (x1 + x2)
471473 if ((s == zeroBigInt))
472474 then $Tuple2(nil, toString(zeroBigInt))
473475 else {
474476 let ann = (amp * nCoins)
475477 let arr = [1, 2, 3, 4, 5, 6, 7]
476478 func calc (acc,cur) = {
477- let $t02184722036 = acc
478- let d = $t02184722036._1
479- let dPrev = $t02184722036._2
479+ let $t02187022059 = acc
480+ let d = $t02187022059._1
481+ let dPrev = $t02187022059._2
480482 let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
481483 let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
482484 $Tuple2(dNext, d)
483485 }
484486
485- let $t02224922299 = {
487+ let $t02227222322 = {
486488 let $l = arr
487489 let $s = size($l)
488490 let $acc0 = $Tuple2(s, unit)
489491 func $f0_1 ($a,$i) = if (($i >= $s))
490492 then $a
491493 else calc($a, $l[$i])
492494
493495 func $f0_2 ($a,$i) = if (($i >= $s))
494496 then $a
495497 else throw("List size exceeds 7")
496498
497499 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
498500 }
499- let dNext = $t02224922299._1
500- let dPrev = $t02224922299._2
501+ let dNext = $t02227222322._1
502+ let dPrev = $t02227222322._2
501503 let dDiff = abs((dNext - value(dPrev)))
502504 if ((targetPrecision >= dDiff))
503505 then $Tuple2(nil, toString(dNext))
504506 else throw(("D calculation error, dDiff = " + toString(dDiff)))
505507 }
506508 }
507509
508510

github/deemru/w8io/3ef1775 
82.55 ms