tx · Arn68vHvMSQscvu8Ynssct8BipoNnn9Fst3wBtnSqqFo

3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE:  -0.01400000 Waves

2022.01.28 10:33 [1898512] smart account 3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE > SELF 0.00000000 Waves

{ "type": 13, "id": "Arn68vHvMSQscvu8Ynssct8BipoNnn9Fst3wBtnSqqFo", "fee": 1400000, "feeAssetId": null, "timestamp": 1643355188403, "version": 1, "sender": "3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE", "senderPublicKey": "G349Uq3FTox7dRNLeAfAQeoACvwZ9iEnVSaHcEYn6j8J", "proofs": [ "4HSiKRhn4Y8qUzNeXhZhqvariBjJ8z6gmq5ybeSVC6vnXKgZoAU7no7HxuLFMbQ7Rkwm3WkiX7fLDb44AVfokgUT" ], "script": "base64:AAIFAAAAAAAAAF8IAhIHCgUCAQEBARIAEgASCAoGAgEBAQEBEgASAwoBCBIDCgEIEgMKAQgSAwoBCBIFCgMBAQESBQoDAQEBEgYKBAgICAESAwoBCBIDCgEIEgASAwoBCBIHCgUICAgICAAAADUAAAAAC3JldmlzaW9uTnVtAgAAAAAAAAAAA1NFUAIAAAACX18AAAAACE1BWERFUFRIAAAAAAAAAAARAAAAAAlVU0VSREVQVEgAAAAAAAAAABoAAAAABVNDQUxFAAAAAAAAAAPoAAAAAAVNVUxUOAAAAAAABfXhAAAAAAAKemVyb0JpZ0ludAkAATYAAAABAAAAAAAAAAAAAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAPZ2V0TnVtYmVyT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACAgAAAA9tYW5kYXRvcnkgdGhpcy4FAAAAA2tleQIAAAAPIGlzIG5vdCBkZWZpbmVkAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEFAAAAA2tleQkAASwAAAACCQABLAAAAAICAAAAD21hbmRhdG9yeSB0aGlzLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAA2FicwAAAAEAAAADdmFsAwkAAT8AAAACBQAAAAp6ZXJvQmlnSW50BQAAAAN2YWwJAAE+AAAAAQUAAAADdmFsBQAAAAN2YWwBAAAAEWtleUZhY3RvcnlBZGRyZXNzAAAAAAIAAAAcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwAAAAARZmFjdG9yeUFkZHJlc3NTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAAAAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEWZhY3RvcnlBZGRyZXNzU3RyAQAAABJrZXlFbWlzc2lvbkFkZHJlc3MAAAAAAgAAAB0lcyVzX19jb25maWdfX2VtaXNzaW9uQWRkcmVzcwAAAAASZW1pc3Npb25BZGRyZXNzU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEmtleUVtaXNzaW9uQWRkcmVzcwAAAAAAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEmVtaXNzaW9uQWRkcmVzc1N0cgAAAAANSWR4Q2ZnQXNzZXRJZAAAAAAAAAAAAQAAAAAWSWR4Q2ZnUGFjZW1ha2VyQWRkcmVzcwAAAAAAAAAAAgAAAAAWSWR4Q2ZnQm9vc3RpbmdDb250cmFjdAAAAAAAAAAAAwAAAAAOSWR4Q2ZnTWF4RGVwdGgAAAAAAAAAAAQBAAAACWtleUNvbmZpZwAAAAACAAAACiVzX19jb25maWcBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAADGZvcm1hdENvbmZpZwAAAAQAAAAMd3hBc3NldElkU3RyAAAAGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyAAAAGmJvb3N0aW5nQ29udHJhY3RBZGRyZXNzU3RyAAAACG1heERlcHRoCQAEuQAAAAIJAARMAAAAAgIAAAAIJXMlcyVzJWQJAARMAAAAAgUAAAAMd3hBc3NldElkU3RyCQAETAAAAAIFAAAAGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyCQAETAAAAAIFAAAAGmJvb3N0aW5nQ29udHJhY3RBZGRyZXNzU3RyCQAETAAAAAIJAAGkAAAAAQUAAAAIbWF4RGVwdGgFAAAAA25pbAUAAAADU0VQAQAAAB9rZXlHd3hSZXdhcmRFbWlzc2lvblN0YXJ0SGVpZ2h0AAAAAAIAAAAoJXMlc19fZ3d4UmV3YXJkRW1pc3Npb25QYXJ0X19zdGFydEhlaWdodAEAAAANa2V5VXNlcnNDb3VudAAAAAACAAAADyVzX19uZXh0VXNlck51bQEAAAAWa2V5UmF0ZVBlckJsb2NrQ3VycmVudAAAAAACAAAAGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAEAAAAUa2V5UG9vbFdlaWdodFZpcnR1YWwAAAAAAgAAACAlcyVzX19wb29sV2VpZ2h0X19HV1h2aXJ0dWFsUE9PTAEAAAAUa2V5TmV4dFByb2Nlc3NlZFVzZXIAAAAAAgAAABUlc19fbmV4dFByb2Nlc3NlZFVzZXIBAAAAD2tleUxhdGVzdFBlcmlvZAAAAAACAAAAECVzX19sYXRlc3RQZXJpb2QBAAAADWtleU5leHRQZXJpb2QAAAAAAgAAAA4lc19fbmV4dFBlcmlvZAEAAAAWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZAAAAAACAAAAFyVzX19uZXh0UHJvY2Vzc2VkUGVyaW9kAQAAABtrZXlOZXh0VW5sYWltZWRQZXJpb2RPZlVzZXIAAAABAAAACXVzZXJJbmRleAkABLkAAAACCQAETAAAAAICAAAAFyVzJWRfX25leHRDbGFpbWVkUGVyaW9kCQAETAAAAAIJAAGkAAAAAQUAAAAJdXNlckluZGV4BQAAAANuaWwFAAAAA1NFUAEAAAAca2V5TGFzdFByb2Nlc3NlZFBlcmlvZE9mVXNlcgAAAAEAAAAJdXNlckluZGV4CQAEuQAAAAIJAARMAAAAAgIAAAAZJXMlZF9fbGFzdFByb2Nlc3NlZFBlcmlvZAkABEwAAAACCQABpAAAAAEFAAAACXVzZXJJbmRleAUAAAADbmlsBQAAAANTRVABAAAAEmtleUhlaWdodEZvclBlcmlvZAAAAAEAAAAGcGVyaW9kCQAEuQAAAAIJAARMAAAAAgIAAAAaJXMlZF9fc3RhcnRIZWlnaHRGb3JQZXJpb2QJAARMAAAAAgkAAaQAAAABBQAAAAZwZXJpb2QFAAAAA25pbAUAAAADU0VQAQAAAB1rZXlBdXhFbWlzc2lvblJld2FyZEZvclBlcmlvZAAAAAEAAAAGcGVyaW9kCQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlZF9fYXV4RW1pc3Npb25SZXdhcmQJAARMAAAA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DyhJbnQsIEludCwgSW50KQQAAAABcgUAAAAHJG1hdGNoMAUAAAABcgkAAAIAAAABAgAAABdJbmNvcnJlY3QgaW52b2tlIHJlc3VsdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAAGHByb2Nlc3NOZXh0QmF0Y2hJbnRlcm5hbAAAAAUAAAAQYm9vc3RpbmdDb250cmFjdAAAAA1jdXJyZW50UGVyaW9kAAAAC2N1cnJlbnRVc2VyAAAABWRlcHRoAAAAC3RvdGFsV2VpZ2h0BAAAABdib29zdGluZ0NvbnRyYWN0QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABBQAAABBib29zdGluZ0NvbnRyYWN0BAAAAAxsYXRlc3RQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9rZXlMYXRlc3RQZXJpb2QAAAAABAAAAAp1c2Vyc0NvdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzCQEAAAANa2V5VXNlcnNDb3VudAAAAAAAAAAAAAAAAAAEAAAADnRvdGFsV2VpZ2h0S2V5CQEAAAAXa2V5VG90YWxXZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kBAAAAA9oZWlnaHRGb3JQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJrZXlIZWlnaHRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kAwMJAABmAAAAAgUAAAAFZGVwdGgAAAAAAAAAAAAJAABnAAAAAgUAAAAMbGF0ZXN0UGVyaW9kBQAAAA1jdXJyZW50UGVyaW9kBwQAAAACdDAJAQAAAA5jYWxjVXNlcldlaWdodAAAAAQFAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzBQAAAA9oZWlnaHRGb3JQZXJpb2QFAAAADWN1cnJlbnRQZXJpb2QFAAAAC2N1cnJlbnRVc2VyBAAAAAd3ZWlnaHQwCQAAZAAAAAIFAAAAC3RvdGFsV2VpZ2h0CAUAAAACdDAAAAACXzEDCQAAZgAAAAIFAAAACnVzZXJzQ291bnQJAABkAAAAAgUA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RW1pc3Npb24EAAAAF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEFAAAAEGJvb3N0aW5nQ29udHJhY3QEAAAADGxhdGVzdFBlcmlvZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmtleU5leHRQcm9jZXNzZWRQZXJpb2QAAAAABAAAAAt0b3RhbFdlaWdodAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAF2tleVRvdGFsV2VpZ2h0Rm9yUGVyaW9kAAAAAQUAAAANY3VycmVudFBlcmlvZAQAAAAPaGVpZ2h0Rm9yUGVyaW9kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASa2V5SGVpZ2h0Rm9yUGVyaW9kAAAAAQUAAAANY3VycmVudFBlcmlvZAQAAAANJHQwMTE3MDExMTgxMwkBAAAADmNhbGNVc2VyV2VpZ2h0AAAABAUAAAAXYm9vc3RpbmdDb250cmFjdEFkZHJlc3MFAAAAD2hlaWdodEZvclBlcmlvZAUAAAANY3VycmVudFBlcmlvZAUAAAALY3VycmVudFVzZXIEAAAACnVzZXJXZWlnaHQIBQAAAA0kdDAxMTcwMTExODEzAAAAAl8xBAAAAAdpZ25vcmVkCAUAAAANJHQwMTE3MDExMTgxMwAAAAJfMgQAAAAadXNlckFtb3VudE1hdGNoZXJGb3JQZXJpb2QJAABrAAAAAwkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAF2tleVRvdGFsQW1vdW50Rm9yUGVyaW9kAAAAAQUAAAANY3VycmVudFBlcmlvZAUAAAAKdXNlcldlaWdodAUAAAALdG90YWxXZWlnaHQEAAAAG3VzZXJBbW91bnRFbWlzc2lvbkZvclBlcmlvZAkAAGsAAAADCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAda2V5QXV4RW1pc3Npb25SZXdhcmRGb3JQZXJpb2QAAAABBQAAAA1jdXJyZW50UGVyaW9kBQAAAAp1c2VyV2VpZ2h0BQAAAAt0b3RhbFdlaWdodAMDCQAAZwAAAAIAAAAAAAAAAAAFAAAABWRlcHRoBgkAAGcAAAACCQAAZAAAAAIFAAAADWN1cnJlbnRQZXJpb2QAAAAAAAAAAAEFAAAADGxhdGVzdFBlcmlvZAkABRUAAAADCQAAZAAAAAIFAAAADWN1cnJlbnRQZXJpb2QAAAAAAAAAAAEJAABkAAAAAgUAAAAWdXNlckFjY3VtdWxhdGVkTWF0Y2hlcgUAAAAadXNlckFtb3VudE1hdGNoZXJGb3JQZXJpb2QJAABkAAAAAgUAAAAXdXNlckFjY3VtdWxhdGVkRW1pc3Npb24FAAAAG3VzZXJBbW91bnRFbWlzc2lvbkZvclBlcmlvZAkBAAAAC2ludm9rZUNsYWltAAAABgUAAAAQYm9vc3RpbmdDb250cmFjdAkAAGQAAAACBQAAAA1jdXJyZW50UGVyaW9kAAAAAAAAAAABBQAAAAtjdXJyZW50VXNlcgkAAGUAAAACBQAAAAVkZXB0aAAAAAAAAAAAAQkAAGQAAAACBQAAABZ1c2VyQWNjdW11bGF0ZWRNYXRjaGVyBQAAABp1c2VyQW1vdW50TWF0Y2hlckZvclBlcmlvZAkAAGQAAAACBQAAABd1c2VyQWNjdW11bGF0ZWRFbWlzc2lvbgUAAAAbdXNlckFtb3VudEVtaXNzaW9uRm9yUGVyaW9kAQAAABFjb21tb25DbGFpbVJld2FyZAAAAAEAAAALdXNlckFkZHJlc3MEAAAACGNmZ0FycmF5CQEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAQAAAAHdXNlcklkeAkBAAAAFWdldFVzZXJJbmRleEJ5QWRkcmVzcwAAAAIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFklkeENmZ0Jvb3N0aW5nQ29udHJhY3QFAAAAC3VzZXJBZGRyZXNzBAAAAA1jdXJyZW50UGVyaW9kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAba2V5TmV4dFVubGFpbWVkUGVyaW9kT2ZVc2VyAAAAAQUAAAAHdXNlcklkeAQAAAATbmV4dFByb2Nlc3NlZFBlcmlvZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmtleU5leHRQcm9jZXNzZWRQZXJpb2QAAAAAAwkAAGcAAAACBQAAAA1jdXJyZW50UGVyaW9kBQAAABNuZXh0UHJvY2Vzc2VkUGVyaW9kCQAAAgAAAAECAAAAEE5vdGhpbmcgdG8gY2xhaW0EAAAAEGJvb3N0aW5nQ29udHJhY3QJAAJZAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAWSWR4Q2ZnQm9vc3RpbmdDb250cmFjdAQAAAANJHQwMTMwMjUxMzE1MQkBAAAADWNsYWltSW50ZXJuYWwAAAAGBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAd1c2VySWR4BQAAAAlVU0VSREVQVEgAAAAAAAAAAAAAAAAAAAAAAAAEAAAABnBlcmlvZAgFAAAADSR0MDEzMDI1MTMxNTEAAAACXzEEAAAAEWFtb3VudEZyb21NYXRjaGVyCAUAAAANJHQwMTMwMjUxMzE1MQAAAAJfMgQAAAASYW1vdW50RnJvbUVtaXNzaW9uCAUAAAANJHQwMTMwMjUxMzE1MQAAAAJfMwkABRgAAAAGBQAAAAZwZXJpb2QFAAAAEWFtb3VudEZyb21NYXRjaGVyBQAAABJhbW91bnRGcm9tRW1pc3Npb24FAAAAB3VzZXJJZHgFAAAACGNmZ0FycmF5BQAAABNuZXh0UHJvY2Vzc2VkUGVyaW9kAAAAEQAAAAFpAQAAABBwcm9jZXNzTmV4dEJhdGNoAAAABQAAABBib29zdGluZ0NvbnRyYWN0AAAADWN1cnJlbnRQZXJpb2QAAAALY3VycmVudFVzZXIAAAAFZGVwdGgAAAALdG90YWxXZWlnaHQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAkU2hvdWxkIGJlIGNhbGxlZCBieSB0aGlzIHNjcmlwdCBvbmx5BAAAAAN0cGwJAQAAABhwcm9jZXNzTmV4dEJhdGNoSW50ZXJuYWwAAAAFBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAtjdXJyZW50VXNlcgUAAAAFZGVwdGgFAAAAC3RvdGFsV2VpZ2h0CQAFFAAAAAIIBQAAAAN0cGwAAAACXzEJAAUVAAAAAwgFAAAAA3RwbAAAAAJfMggFAAAAA3RwbAAAAAJfMwgFAAAAA3RwbAAAAAJfNAAAAAFpAQAAAB1wcm9jZXNzUGVuZGluZ1BlcmlvZHNBbmRVc2VycwAAAAAEAAAADWN1cnJlbnRQZXJpb2QJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZrZXlOZXh0UHJvY2Vzc2VkUGVyaW9kAAAAAAMJAABmAAAAAgUAAAANY3VycmVudFBlcmlvZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2tleUxhdGVzdFBlcmlvZAAAAAAJAAACAAAAAQIAAAASTm90aGluZyB0byBwcm9jZXNzBAAAAAhjZmdBcnJheQkBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAEAAAABWRlcHRoCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADklkeENmZ01heERlcHRoAwkAAGYAAAACBQAAAAVkZXB0aAUAAAAITUFYREVQVEgJAAACAAAAAQIAAAAWRGVwdGggZXhjZWVkcyBNQVhERVBUSAQAAAAQYm9vc3RpbmdDb250cmFjdAkAAlkAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABZJZHhDZmdCb29zdGluZ0NvbnRyYWN0BAAAAAtjdXJyZW50VXNlcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFGtleU5leHRQcm9jZXNzZWRVc2VyAAAAAAQAAAALdG90YWxXZWlnaHQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABdrZXlUb3RhbFdlaWdodEZvclBlcmlvZAAAAAEFAAAADWN1cnJlbnRQZXJpb2QEAAAAAXIJAQAAABhwcm9jZXNzTmV4dEJhdGNoSW50ZXJuYWwAAAAFBQAAABBib29zdGluZ0NvbnRyYWN0BQAAAA1jdXJyZW50UGVyaW9kBQAAAAtjdXJyZW50VXNlcgUAAAAFZGVwdGgFAAAAC3RvdGFsV2VpZ2h0CQAETQAAAAIJAARNAAAAAggFAAAAAXIAAAACXzEJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZAAAAAAIBQAAAAFyAAAAAl8yCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFGtleU5leHRQcm9jZXNzZWRVc2VyAAAAAAgFAAAAAXIAAAACXzMAAAABaQEAAAAHZGVwb3NpdAAAAAAEAAAACGNmZ0FycmF5CQEAAAAVcmVhZENvbmZpZ0FycmF5T3JGYWlsAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFklkeENmZ1BhY2VtYWtlckFkZHJlc3MJAAACAAAAAQIAAAAUV3JvbmcgY2FsbGVyIGFkZHJlc3MEAAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEICQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQDCQEAAAACIT0AAAACBQAAAAdhc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADUlkeENmZ0Fzc2V0SWQJAAACAAAAAQIAAAATV3JvbmcgcGF5bWVudCBhc3NldAQAAAAGcGVyaW9kCQEAAAAKbmV4dFBlcmlvZAAAAAAEAAAABmRlbHRhSAkAAGUAAAACBQAAAAZoZWlnaHQJAQAAAA9nZXROdW1iZXJPckZhaWwAAAABCQEAAAAfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodAAAAAAEAAAADGVtaXNzaW9uUmF0ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABZrZXlSYXRlUGVyQmxvY2tDdXJyZW50AAAAAAkAASwAAAACCQABLAAAAAICAAAAHG1hbmRhdG9yeSBlbWlzc2lvbl9jb250cmFjdC4JAQAAABZrZXlSYXRlUGVyQmxvY2tDdXJyZW50AAAAAAIAAAAPIGlzIG5vdCBkZWZpbmVkBAAAAAZ3ZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABRrZXlQb29sV2VpZ2h0VmlydHVhbAAAAAAJAAEsAAAAAgkAASwAAAACAgAAABttYW5kYXRvcnkgZmFjdG9yeV9jb250cmFjdC4JAQAAABRrZXlQb29sV2VpZ2h0VmlydHVhbAAAAAACAAAADyBpcyBub3QgZGVmaW5lZAQAAAAJYXV4QW1vdW50CQAAawAAAAMJAABoAAAAAgUAAAAGZGVsdGFIBQAAAAxlbWlzc2lvblJhdGUFAAAABndlaWdodAUAAAAFTVVMVDgDBgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADjUlIGVtaXNzaW9uID0gCQABpAAAAAEFAAAACWF1eEFtb3VudAIAAAABIAkAAaQAAAABBQAAAAxlbWlzc2lvblJhdGUCAAAAASAJAAGkAAAAAQUAAAAGZGVsdGFIAgAAAAEgCQABpAAAAAEFAAAABndlaWdodAQAAAACZW0JAAP8AAAABAUAAAAQZW1pc3Npb25Db250cmFjdAIAAAAEZW1pdAkABEwAAAACBQAAAAlhdXhBbW91bnQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAJlbQUAAAACZW0EAAAAC21hdGNoZXJQYXJ0CAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAACnBheW91dEluZm8JAQAAABBQZXJpb2RQYXlvdXRJbmZvAAAAAwUAAAAGcGVyaW9kBQAAAAttYXRjaGVyUGFydAUAAAAJYXV4QW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPa2V5TGF0ZXN0UGVyaW9kAAAAAAUAAAAGcGVyaW9kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5SGVpZ2h0Rm9yUGVyaW9kAAAAAQUAAAAGcGVyaW9kBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAB1rZXlBdXhFbWlzc2lvblJld2FyZEZvclBlcmlvZAAAAAEFAAAABnBlcmlvZAUAAAAJYXV4QW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodAAAAAAFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF2tleVRvdGFsQW1vdW50Rm9yUGVyaW9kAAAAAQUAAAAGcGVyaW9kBQAAAAttYXRjaGVyUGFydAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWtleU5leHRQZXJpb2QAAAAACQAAZAAAAAIFAAAABnBlcmlvZAAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5TGFzdFBheW91dEluZm8AAAAABQAAAApwYXlvdXRJbmZvCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRrZXlQYXlvdXRIaXN0b3J5SW5mbwAAAAEFAAAABnBlcmlvZAUAAAAKcGF5b3V0SW5mbwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jbGFpbU5leHRCYXRjaAAAAAYAAAAQYm9vc3RpbmdDb250cmFjdAAAAA1jdXJyZW50UGVyaW9kAAAAC2N1cnJlbnRVc2VyAAAABWRlcHRoAAAAEHRvdGFsRnJvbU1hdGNoZXIAAAARdG90YWxGcm9tRW1pc3Npb24DCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAkU2hvdWxkIGJlIGNhbGxlZCBieSB0aGlzIHNjcmlwdCBvbmx5BAAAAA9wZXJpb2RBbmRUb3RhbHMJAQAAAA1jbGFpbUludGVybmFsAAAABgUAAAAQYm9vc3RpbmdDb250cmFjdAUAAAANY3VycmVudFBlcmlvZAUAAAALY3VycmVudFVzZXIFAAAABWRlcHRoBQAAABB0b3RhbEZyb21NYXRjaGVyBQAAABF0b3RhbEZyb21FbWlzc2lvbgkABRQAAAACBQAAAANuaWwFAAAAD3BlcmlvZEFuZFRvdGFscwAAAAFpAQAAAAtjbGFpbVJld2FyZAAAAAAEAAAAB2FkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA0kdDAxNzU4OTE3NzA5CQEAAAARY29tbW9uQ2xhaW1SZXdhcmQAAAABBQAAAAdhZGRyZXNzBAAAAAZwZXJpb2QIBQAAAA0kdDAxNzU4OTE3NzA5AAAAAl8xBAAAABFhbW91bnRGcm9tTWF0Y2hlcggFAAAADSR0MDE3NTg5MTc3MDkAAAACXzIEAAAAEmFtb3VudEZyb21FbWlzc2lvbggFAAAADSR0MDE3NTg5MTc3MDkAAAACXzMEAAAAB3VzZXJJZHgIBQAAAA0kdDAxNzU4OTE3NzA5AAAAAl80BAAAAAhjZmdBcnJheQgFAAAADSR0MDE3NTg5MTc3MDkAAAACXzUEAAAAE25leHRQcm9jZXNzZWRQZXJpb2QIBQAAAA0kdDAxNzU4OTE3NzA5AAAAAl82CQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtrZXlOZXh0VW5sYWltZWRQZXJpb2RPZlVzZXIAAAABBQAAAAd1c2VySWR4BQAAAAZwZXJpb2QJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQAAZAAAAAIFAAAAEWFtb3VudEZyb21NYXRjaGVyBQAAABJhbW91bnRGcm9tRW1pc3Npb24JAAJZAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAANSWR4Q2ZnQXNzZXRJZAkABEwAAAACCQEAAAAMSGlzdG9yeUVudHJ5AAAABwIAAAAFY2xhaW0FAAAAB2FkZHJlc3MFAAAAEWFtb3VudEZyb21NYXRjaGVyBQAAABJhbW91bnRGcm9tRW1pc3Npb24FAAAABnBlcmlvZAUAAAATbmV4dFByb2Nlc3NlZFBlcmlvZAUAAAABaQUAAAADbmlsCQAETAAAAAIFAAAAEWFtb3VudEZyb21NYXRjaGVyCQAETAAAAAIFAAAAEmFtb3VudEZyb21FbWlzc2lvbgUAAAADbmlsAAAAAWkBAAAAE2NsYWltUmV3YXJkUkVBRE9OTFkAAAABAAAAB2FkZHJlc3MEAAAADGNsYWltUmVzdWx0cwkBAAAAEWNvbW1vbkNsYWltUmV3YXJkAAAAAQUAAAAHYWRkcmVzcwQAAAAGYW1vdW50CQAAZAAAAAIIBQAAAAxjbGFpbVJlc3VsdHMAAAACXzIIBQAAAAxjbGFpbVJlc3VsdHMAAAACXzMJAAUUAAAAAgUAAAADbmlsBQAAAAZhbW91bnQAAAABaQEAAAAbY2xhaW1SZXdhcmREZXRhaWxlZFJFQURPTkxZAAAAAQAAAAdhZGRyZXNzBAAAAA0kdDAxODQ1MTE4NTIwCQEAAAARY29tbW9uQ2xhaW1SZXdhcmQAAAABBQAAAAdhZGRyZXNzBAAAAAdpZ25vcmVkCAUAAAANJHQwMTg0NTExODUyMAAAAAJfMQQAAAALZnJvbU1hdGNoZXIIBQAAAA0kdDAxODQ1MTE4NTIwAAAAAl8yBAAAAAxmcm9tRW1pc3Npb24IBQAAAA0kdDAxODQ1MTE4NTIwAAAAAl8zCQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAABiVkJWQlZAkABEwAAAACCQABpAAAAAEJAABkAAAAAgUAAAALZnJvbU1hdGNoZXIFAAAADGZyb21FbWlzc2lvbgkABEwAAAACCQABpAAAAAEFAAAAC2Zyb21NYXRjaGVyCQAETAAAAAIJAAGkAAAAAQUAAAAMZnJvbUVtaXNzaW9uBQAAAANuaWwFAAAAA1NFUAAAAAFpAQAAAB1sYXRlc3RGaW5hbGl6ZWRQZXJpb2RSRUFET05MWQAAAAEAAAAHYWRkcmVzcwkABRQAAAACBQAAAANuaWwJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAD2tleUxhdGVzdFBlcmlvZAAAAAAA//////////8AAAABaQEAAAAhbGF0ZXN0RmluYWxpemVkUGVyaW9kSW5mb1JFQURPTkxZAAAAAQAAAAdhZGRyZXNzCQAFFAAAAAIFAAAAA25pbAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEWtleUxhc3RQYXlvdXRJbmZvAAAAAAAAAAFpAQAAABVjYWxjR3d4UGFyYW1zUkVBRE9OTFkAAAADAAAADmd3eEFtb3VudFN0YXJ0AAAAD2xvY2tTdGFydEhlaWdodAAAABJsb2NrRHVyYXRpb25CbG9ja3MEAAAADWxvY2tFbmRIZWlnaHQJAABkAAAAAgUAAAAPbG9ja1N0YXJ0SGVpZ2h0BQAAABJsb2NrRHVyYXRpb25CbG9ja3MEAAAADHNjYWxlOFBhcmFtSwkBAAAAAS0AAAABCQAAawAAAAMFAAAADmd3eEFtb3VudFN0YXJ0BQAAAAVTQ0FMRQUAAAASbG9ja0R1cmF0aW9uQmxvY2tzBAAAAAxzY2FsZThQYXJhbUIJAABoAAAAAgkAAGsAAAADBQAAAA5nd3hBbW91bnRTdGFydAUAAAAFU0NBTEUFAAAAEmxvY2tEdXJhdGlvbkJsb2NrcwUAAAANbG9ja0VuZEhlaWdodAkABRQAAAACBQAAAANuaWwJAARMAAAAAgUAAAAMc2NhbGU4UGFyYW1LCQAETAAAAAIFAAAADHNjYWxlOFBhcmFtQgkABEwAAAACCQEAAAAKbmV4dFBlcmlvZAAAAAAFAAAAA25pbAAAAAFpAQAAABpjYWxjR3d4QW1vdW50U3RhcnRSRUFET05MWQAAAAMAAAAMd3hMb2NrQW1vdW50AAAADGxvY2tEdXJhdGlvbgAAAA9tYXhMb2NrRHVyYXRpb24EAAAAB2NvZWZmWDgJAABrAAAAAwUAAAAMbG9ja0R1cmF0aW9uBQAAAAVNVUxUOAUAAAAPbWF4TG9ja0R1cmF0aW9uBAAAAA5nV3hBbW91bnRTdGFydAkAAGsAAAADBQAAAAx3eExvY2tBbW91bnQFAAAAB2NvZWZmWDgFAAAABU1VTFQ4CQAFFAAAAAIFAAAAA25pbAkABEwAAAACBQAAAA5nV3hBbW91bnRTdGFydAUAAAADbmlsAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAABAAAAAx3eEFzc2V0SWRTdHIAAAAabWF0Y2hlclBhY2VtYWtlckFkZHJlc3NTdHIAAAAaYm9vc3RpbmdDb250cmFjdEFkZHJlc3NTdHIAAAAIbWF4RGVwdGgDCQEAAAACIT0AAAACBQAAAAR0aGlzCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACWtleUNvbmZpZwAAAAAJAQAAAAxmb3JtYXRDb25maWcAAAAEBQAAAAx3eEFzc2V0SWRTdHIFAAAAGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyBQAAABpib29zdGluZ0NvbnRyYWN0QWRkcmVzc1N0cgUAAAAIbWF4RGVwdGgFAAAAA25pbAAAAAFpAQAAAA1jb25zdHJ1Y3RvclYyAAAAAQAAAA5mYWN0b3J5QWRkcmVzcwMJAQAAAAIhPQAAAAIFAAAABHRoaXMIBQAAAAFpAAAABmNhbGxl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", "chainId": 84, "height": 1898512, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6AKKah7Wue8t9tFhZEnTp7CFgfYk8ChNDazJt444Yg3t Next: EE7FEd2mEEHCgA9ZANsVsP6fPfoLENBrR6VJ5HeaLAuV Diff:
OldNewDifferences
329329 let deltaH = (height - getNumberOrFail(keyGwxRewardEmissionStartHeight()))
330330 let emissionRate = valueOrErrorMessage(getInteger(emissionContract, keyRatePerBlockCurrent()), (("mandatory emission_contract." + keyRatePerBlockCurrent()) + " is not defined"))
331331 let weight = valueOrErrorMessage(getInteger(factoryContract, keyPoolWeightVirtual()), (("mandatory factory_contract." + keyPoolWeightVirtual()) + " is not defined"))
332- let auxAmount = fraction(fraction(deltaH, emissionRate, MULT8), weight, MULT8)
332+ let auxAmount = fraction((deltaH * emissionRate), weight, MULT8)
333333 if (true)
334334 then throw(((((((("5% emission = " + toString(auxAmount)) + " ") + toString(emissionRate)) + " ") + toString(deltaH)) + " ") + toString(weight)))
335335 else {
361361 @Callable(i)
362362 func claimReward () = {
363363 let address = toString(i.caller)
364- let $t01760517725 = commonClaimReward(address)
365- let period = $t01760517725._1
366- let amountFromMatcher = $t01760517725._2
367- let amountFromEmission = $t01760517725._3
368- let userIdx = $t01760517725._4
369- let cfgArray = $t01760517725._5
370- let nextProcessedPeriod = $t01760517725._6
364+ let $t01758917709 = commonClaimReward(address)
365+ let period = $t01758917709._1
366+ let amountFromMatcher = $t01758917709._2
367+ let amountFromEmission = $t01758917709._3
368+ let userIdx = $t01758917709._4
369+ let cfgArray = $t01758917709._5
370+ let nextProcessedPeriod = $t01758917709._6
371371 $Tuple2([IntegerEntry(keyNextUnlaimedPeriodOfUser(userIdx), period), ScriptTransfer(i.caller, (amountFromMatcher + amountFromEmission), fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amountFromMatcher, amountFromEmission, period, nextProcessedPeriod, i)], [amountFromMatcher, amountFromEmission])
372372 }
373373
384384
385385 @Callable(i)
386386 func claimRewardDetailedREADONLY (address) = {
387- let $t01846718536 = commonClaimReward(address)
388- let ignored = $t01846718536._1
389- let fromMatcher = $t01846718536._2
390- let fromEmission = $t01846718536._3
387+ let $t01845118520 = commonClaimReward(address)
388+ let ignored = $t01845118520._1
389+ let fromMatcher = $t01845118520._2
390+ let fromEmission = $t01845118520._3
391391 $Tuple2(nil, makeString(["%d%d%d", toString((fromMatcher + fromEmission)), toString(fromMatcher), toString(fromEmission)], SEP))
392392 }
393393
478478 let ann = (amp * nCoins)
479479 let arr = [1, 2, 3, 4, 5, 6, 7]
480480 func calc (acc,cur) = {
481- let $t02201522204 = acc
482- let d = $t02201522204._1
483- let dPrev = $t02201522204._2
481+ let $t02199922188 = acc
482+ let d = $t02199922188._1
483+ let dPrev = $t02199922188._2
484484 let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
485485 let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
486486 $Tuple2(dNext, d)
487487 }
488488
489- let $t02241722467 = {
489+ let $t02240122451 = {
490490 let $l = arr
491491 let $s = size($l)
492492 let $acc0 = $Tuple2(s, unit)
500500
501501 $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)
502502 }
503- let dNext = $t02241722467._1
504- let dPrev = $t02241722467._2
503+ let dNext = $t02240122451._1
504+ let dPrev = $t02240122451._2
505505 let dDiff = abs((dNext - value(dPrev)))
506506 if ((targetPrecision >= dDiff))
507507 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)
145145 if (isDefined(p))
146146 then {
147147 let pv = value(p)
148148 let k = value(getInteger(boostingContractAddress, keyUserKValueForPeriod(pv, userIndex)))
149149 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(pv, userIndex)))
150150 let w = ((k * heightForPeriod) + b)
151151 if ((w > 0))
152152 then $Tuple2((w / SCALE), nil)
153153 else $Tuple2(0, nil)
154154 }
155155 else $Tuple2(0, nil)
156156 }
157157 }
158158
159159
160160 func getUserIndexByAddress (boostingContractAddressStr,userAddress) = {
161161 let key = makeString(["%s%s%s", "mapping", "user2num", userAddress], SEP)
162162 parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String(boostingContractAddressStr)), key), ((("User address " + userAddress) + " is not found in boosting contract data, key=") + key)))
163163 }
164164
165165
166166 func nextPeriod () = getNumberByKey(keyNextPeriod())
167167
168168
169169 func invokeProcess (boostingContract,period,user,depth,weight) = {
170170 let result = invoke(this, "processNextBatch", [boostingContract, period, user, depth, weight], nil)
171171 if ((result == result))
172172 then match result {
173173 case r: (Int, Int, Int) =>
174174 r
175175 case _ =>
176176 throw("Incorrect invoke result")
177177 }
178178 else throw("Strict value is not equal to itself.")
179179 }
180180
181181
182182 func processNextBatchInternal (boostingContract,currentPeriod,currentUser,depth,totalWeight) = {
183183 let boostingContractAddress = Address(boostingContract)
184184 let latestPeriod = getNumberByKey(keyLatestPeriod())
185185 let usersCount = valueOrElse(getInteger(boostingContractAddress, keyUsersCount()), 0)
186186 let totalWeightKey = keyTotalWeightForPeriod(currentPeriod)
187187 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
188188 if (if ((depth > 0))
189189 then (latestPeriod >= currentPeriod)
190190 else false)
191191 then {
192192 let t0 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
193193 let weight0 = (totalWeight + t0._1)
194194 if ((usersCount > (currentUser + 1)))
195195 then {
196196 let t1 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 1))
197197 let weight1 = (weight0 + t1._1)
198198 if ((usersCount > (currentUser + 2)))
199199 then {
200200 let t2 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 2))
201201 let weight2 = (weight1 + t2._1)
202202 if ((usersCount > (currentUser + 3)))
203203 then {
204204 let t3 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 3))
205205 let weight3 = (weight2 + t3._1)
206206 if ((usersCount > (currentUser + 4)))
207207 then {
208208 let t4 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 4))
209209 let weight4 = (weight3 + t4._1)
210210 if ((usersCount > (currentUser + 5)))
211211 then {
212212 let t5 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, (currentUser + 5))
213213 let weight5 = (weight4 + t5._1)
214214 if ((usersCount > (currentUser + 6)))
215215 then {
216216 let r5 = invokeProcess(boostingContract, currentPeriod, (currentUser + 6), (depth - 1), weight5)
217217 $Tuple4((((((t0._2 ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2) ++ t5._2), r5._1, r5._2, r5._3)
218218 }
219219 else $Tuple4((((((([IntegerEntry(totalWeightKey, weight5)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2) ++ t5._2), (currentPeriod + 1), 0, 0)
220220 }
221221 else $Tuple4(((((([IntegerEntry(totalWeightKey, weight4)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2) ++ t4._2), (currentPeriod + 1), 0, 0)
222222 }
223223 else $Tuple4((((([IntegerEntry(totalWeightKey, weight3)] ++ t0._2) ++ t1._2) ++ t2._2) ++ t3._2), (currentPeriod + 1), 0, 0)
224224 }
225225 else $Tuple4(((([IntegerEntry(totalWeightKey, weight2)] ++ t0._2) ++ t1._2) ++ t2._2), (currentPeriod + 1), 0, 0)
226226 }
227227 else $Tuple4((([IntegerEntry(totalWeightKey, weight1)] ++ t0._2) ++ t1._2), (currentPeriod + 1), 0, 0)
228228 }
229229 else $Tuple4(([IntegerEntry(totalWeightKey, weight0)] ++ t0._2), (currentPeriod + 1), 0, 0)
230230 }
231231 else if ((currentUser == 0))
232232 then $Tuple4(nil, currentPeriod, 0, 0)
233233 else $Tuple4([IntegerEntry(totalWeightKey, totalWeight)], currentPeriod, currentUser, 0)
234234 }
235235
236236
237237 func invokeClaim (boostingContract,period,user,depth,totalFromMatcher,totalFromEmission) = {
238238 let result = invoke(this, "claimNextBatch", [boostingContract, period, user, depth, totalFromMatcher, totalFromEmission], nil)
239239 if ((result == result))
240240 then match result {
241241 case r: (Int, Int, Int) =>
242242 r
243243 case _ =>
244244 throw("Incorrect invoke result")
245245 }
246246 else throw("Strict value is not equal to itself.")
247247 }
248248
249249
250250 func claimInternal (boostingContract,currentPeriod,currentUser,depth,userAccumulatedMatcher,userAccumulatedEmission) = {
251251 let boostingContractAddress = Address(boostingContract)
252252 let latestPeriod = getNumberByKey(keyNextProcessedPeriod())
253253 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
254254 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
255255 let $t01170111813 = calcUserWeight(boostingContractAddress, heightForPeriod, currentPeriod, currentUser)
256256 let userWeight = $t01170111813._1
257257 let ignored = $t01170111813._2
258258 let userAmountMatcherForPeriod = fraction(getNumberByKey(keyTotalAmountForPeriod(currentPeriod)), userWeight, totalWeight)
259259 let userAmountEmissionForPeriod = fraction(getNumberByKey(keyAuxEmissionRewardForPeriod(currentPeriod)), userWeight, totalWeight)
260260 if (if ((0 >= depth))
261261 then true
262262 else ((currentPeriod + 1) >= latestPeriod))
263263 then $Tuple3((currentPeriod + 1), (userAccumulatedMatcher + userAmountMatcherForPeriod), (userAccumulatedEmission + userAmountEmissionForPeriod))
264264 else invokeClaim(boostingContract, (currentPeriod + 1), currentUser, (depth - 1), (userAccumulatedMatcher + userAmountMatcherForPeriod), (userAccumulatedEmission + userAmountEmissionForPeriod))
265265 }
266266
267267
268268 func commonClaimReward (userAddress) = {
269269 let cfgArray = readConfigArrayOrFail()
270270 let userIdx = getUserIndexByAddress(cfgArray[IdxCfgBoostingContract], userAddress)
271271 let currentPeriod = getNumberByKey(keyNextUnlaimedPeriodOfUser(userIdx))
272272 let nextProcessedPeriod = getNumberByKey(keyNextProcessedPeriod())
273273 if ((currentPeriod >= nextProcessedPeriod))
274274 then throw("Nothing to claim")
275275 else {
276276 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
277277 let $t01302513151 = claimInternal(boostingContract, currentPeriod, userIdx, USERDEPTH, 0, 0)
278278 let period = $t01302513151._1
279279 let amountFromMatcher = $t01302513151._2
280280 let amountFromEmission = $t01302513151._3
281281 $Tuple6(period, amountFromMatcher, amountFromEmission, userIdx, cfgArray, nextProcessedPeriod)
282282 }
283283 }
284284
285285
286286 @Callable(i)
287287 func processNextBatch (boostingContract,currentPeriod,currentUser,depth,totalWeight) = if ((i.caller != this))
288288 then throw("Should be called by this script only")
289289 else {
290290 let tpl = processNextBatchInternal(boostingContract, currentPeriod, currentUser, depth, totalWeight)
291291 $Tuple2(tpl._1, $Tuple3(tpl._2, tpl._3, tpl._4))
292292 }
293293
294294
295295
296296 @Callable(i)
297297 func processPendingPeriodsAndUsers () = {
298298 let currentPeriod = getNumberByKey(keyNextProcessedPeriod())
299299 if ((currentPeriod > getNumberByKey(keyLatestPeriod())))
300300 then throw("Nothing to process")
301301 else {
302302 let cfgArray = readConfigArrayOrFail()
303303 let depth = parseIntValue(cfgArray[IdxCfgMaxDepth])
304304 if ((depth > MAXDEPTH))
305305 then throw("Depth exceeds MAXDEPTH")
306306 else {
307307 let boostingContract = fromBase58String(cfgArray[IdxCfgBoostingContract])
308308 let currentUser = getNumberByKey(keyNextProcessedUser())
309309 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
310310 let r = processNextBatchInternal(boostingContract, currentPeriod, currentUser, depth, totalWeight)
311311 ((r._1 :+ IntegerEntry(keyNextProcessedPeriod(), r._2)) :+ IntegerEntry(keyNextProcessedUser(), r._3))
312312 }
313313 }
314314 }
315315
316316
317317
318318 @Callable(i)
319319 func deposit () = {
320320 let cfgArray = readConfigArrayOrFail()
321321 if ((i.caller != Address(fromBase58String(cfgArray[IdxCfgPacemakerAddress]))))
322322 then throw("Wrong caller address")
323323 else {
324324 let assetId = value(value(i.payments[0]).assetId)
325325 if ((assetId != fromBase58String(cfgArray[IdxCfgAssetId])))
326326 then throw("Wrong payment asset")
327327 else {
328328 let period = nextPeriod()
329329 let deltaH = (height - getNumberOrFail(keyGwxRewardEmissionStartHeight()))
330330 let emissionRate = valueOrErrorMessage(getInteger(emissionContract, keyRatePerBlockCurrent()), (("mandatory emission_contract." + keyRatePerBlockCurrent()) + " is not defined"))
331331 let weight = valueOrErrorMessage(getInteger(factoryContract, keyPoolWeightVirtual()), (("mandatory factory_contract." + keyPoolWeightVirtual()) + " is not defined"))
332- let auxAmount = fraction(fraction(deltaH, emissionRate, MULT8), weight, MULT8)
332+ let auxAmount = fraction((deltaH * emissionRate), weight, MULT8)
333333 if (true)
334334 then throw(((((((("5% emission = " + toString(auxAmount)) + " ") + toString(emissionRate)) + " ") + toString(deltaH)) + " ") + toString(weight)))
335335 else {
336336 let em = invoke(emissionContract, "emit", [auxAmount], nil)
337337 if ((em == em))
338338 then {
339339 let matcherPart = value(i.payments[0]).amount
340340 let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
341341 [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)]
342342 }
343343 else throw("Strict value is not equal to itself.")
344344 }
345345 }
346346 }
347347 }
348348
349349
350350
351351 @Callable(i)
352352 func claimNextBatch (boostingContract,currentPeriod,currentUser,depth,totalFromMatcher,totalFromEmission) = if ((i.caller != this))
353353 then throw("Should be called by this script only")
354354 else {
355355 let periodAndTotals = claimInternal(boostingContract, currentPeriod, currentUser, depth, totalFromMatcher, totalFromEmission)
356356 $Tuple2(nil, periodAndTotals)
357357 }
358358
359359
360360
361361 @Callable(i)
362362 func claimReward () = {
363363 let address = toString(i.caller)
364- let $t01760517725 = commonClaimReward(address)
365- let period = $t01760517725._1
366- let amountFromMatcher = $t01760517725._2
367- let amountFromEmission = $t01760517725._3
368- let userIdx = $t01760517725._4
369- let cfgArray = $t01760517725._5
370- let nextProcessedPeriod = $t01760517725._6
364+ let $t01758917709 = commonClaimReward(address)
365+ let period = $t01758917709._1
366+ let amountFromMatcher = $t01758917709._2
367+ let amountFromEmission = $t01758917709._3
368+ let userIdx = $t01758917709._4
369+ let cfgArray = $t01758917709._5
370+ let nextProcessedPeriod = $t01758917709._6
371371 $Tuple2([IntegerEntry(keyNextUnlaimedPeriodOfUser(userIdx), period), ScriptTransfer(i.caller, (amountFromMatcher + amountFromEmission), fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amountFromMatcher, amountFromEmission, period, nextProcessedPeriod, i)], [amountFromMatcher, amountFromEmission])
372372 }
373373
374374
375375
376376 @Callable(i)
377377 func claimRewardREADONLY (address) = {
378378 let claimResults = commonClaimReward(address)
379379 let amount = (claimResults._2 + claimResults._3)
380380 $Tuple2(nil, amount)
381381 }
382382
383383
384384
385385 @Callable(i)
386386 func claimRewardDetailedREADONLY (address) = {
387- let $t01846718536 = commonClaimReward(address)
388- let ignored = $t01846718536._1
389- let fromMatcher = $t01846718536._2
390- let fromEmission = $t01846718536._3
387+ let $t01845118520 = commonClaimReward(address)
388+ let ignored = $t01845118520._1
389+ let fromMatcher = $t01845118520._2
390+ let fromEmission = $t01845118520._3
391391 $Tuple2(nil, makeString(["%d%d%d", toString((fromMatcher + fromEmission)), toString(fromMatcher), toString(fromEmission)], SEP))
392392 }
393393
394394
395395
396396 @Callable(i)
397397 func latestFinalizedPeriodREADONLY (address) = $Tuple2(nil, valueOrElse(getInteger(this, keyLatestPeriod()), -1))
398398
399399
400400
401401 @Callable(i)
402402 func latestFinalizedPeriodInfoREADONLY (address) = $Tuple2(nil, getStringByKey(keyLastPayoutInfo()))
403403
404404
405405
406406 @Callable(i)
407407 func calcGwxParamsREADONLY (gwxAmountStart,lockStartHeight,lockDurationBlocks) = {
408408 let lockEndHeight = (lockStartHeight + lockDurationBlocks)
409409 let scale8ParamK = -(fraction(gwxAmountStart, SCALE, lockDurationBlocks))
410410 let scale8ParamB = (fraction(gwxAmountStart, SCALE, lockDurationBlocks) * lockEndHeight)
411411 $Tuple2(nil, [scale8ParamK, scale8ParamB, nextPeriod()])
412412 }
413413
414414
415415
416416 @Callable(i)
417417 func calcGwxAmountStartREADONLY (wxLockAmount,lockDuration,maxLockDuration) = {
418418 let coeffX8 = fraction(lockDuration, MULT8, maxLockDuration)
419419 let gWxAmountStart = fraction(wxLockAmount, coeffX8, MULT8)
420420 $Tuple2(nil, [gWxAmountStart])
421421 }
422422
423423
424424
425425 @Callable(i)
426426 func constructor (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = if ((this != i.caller))
427427 then throw("not authorized")
428428 else [StringEntry(keyConfig(), formatConfig(wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, maxDepth))]
429429
430430
431431
432432 @Callable(i)
433433 func constructorV2 (factoryAddress) = if ((this != i.caller))
434434 then throw("not authorized")
435435 else [StringEntry(keyFactoryAddress(), factoryAddress)]
436436
437437
438438
439439 @Callable(i)
440440 func constructorV3 (emissionAddress) = if ((this != i.caller))
441441 then throw("not authorized")
442442 else {
443443 let initLatestPeriod = if (isDefined(getInteger(this, keyLatestPeriod())))
444444 then nil
445445 else [IntegerEntry(keyLatestPeriod(), -1)]
446446 (initLatestPeriod :+ StringEntry(keyEmissionAddress(), emissionAddress))
447447 }
448448
449449
450450
451451 @Callable(i)
452452 func onEmissionForGwxStart () = if ((i.caller != factoryContract))
453453 then throw("permissions denied")
454454 else [IntegerEntry(keyGwxRewardEmissionStartHeight(), height)]
455455
456456
457457
458458 @Callable(i)
459459 func latestPeriodEmissionRewardsREADONLY (address) = {
460460 let period = nextPeriod()
461461 $Tuple2(nil, [getNumberByKey(keyAuxEmissionRewardForPeriod(period))])
462462 }
463463
464464
465465
466466 @Callable(i)
467467 func calcD (x1BigIntStr,x2BigIntStr,ampBigIntStr,aPrecisionBigIntStr,targetPrecisionBigIntStr) = {
468468 let nCoins = toBigInt(2)
469469 let aPrecision = parseBigIntValue(aPrecisionBigIntStr)
470470 let targetPrecision = parseBigIntValue(targetPrecisionBigIntStr)
471471 let x1 = parseBigIntValue(x1BigIntStr)
472472 let x2 = parseBigIntValue(x2BigIntStr)
473473 let amp = (parseBigIntValue(ampBigIntStr) * aPrecision)
474474 let s = (x1 + x2)
475475 if ((s == zeroBigInt))
476476 then $Tuple2(nil, toString(zeroBigInt))
477477 else {
478478 let ann = (amp * nCoins)
479479 let arr = [1, 2, 3, 4, 5, 6, 7]
480480 func calc (acc,cur) = {
481- let $t02201522204 = acc
482- let d = $t02201522204._1
483- let dPrev = $t02201522204._2
481+ let $t02199922188 = acc
482+ let d = $t02199922188._1
483+ let dPrev = $t02199922188._2
484484 let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
485485 let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
486486 $Tuple2(dNext, d)
487487 }
488488
489- let $t02241722467 = {
489+ let $t02240122451 = {
490490 let $l = arr
491491 let $s = size($l)
492492 let $acc0 = $Tuple2(s, unit)
493493 func $f0_1 ($a,$i) = if (($i >= $s))
494494 then $a
495495 else calc($a, $l[$i])
496496
497497 func $f0_2 ($a,$i) = if (($i >= $s))
498498 then $a
499499 else throw("List size exceeds 7")
500500
501501 $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)
502502 }
503- let dNext = $t02241722467._1
504- let dPrev = $t02241722467._2
503+ let dNext = $t02240122451._1
504+ let dPrev = $t02240122451._2
505505 let dDiff = abs((dNext - value(dPrev)))
506506 if ((targetPrecision >= dDiff))
507507 then $Tuple2(nil, toString(dNext))
508508 else throw(("D calculation error, dDiff = " + toString(dDiff)))
509509 }
510510 }
511511
512512

github/deemru/w8io/03bedc9 
139.46 ms