tx · GrLmd7bKQYGCb8yZmXvR7LpSZhDYTzKhApTdEmqdk2Ar

3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE:  -0.01800000 Waves

2022.10.27 10:21 [2290523] smart account 3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE > SELF 0.00000000 Waves

{ "type": 13, "id": "GrLmd7bKQYGCb8yZmXvR7LpSZhDYTzKhApTdEmqdk2Ar", "fee": 1800000, "feeAssetId": null, "timestamp": 1666855346034, "version": 1, "sender": "3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE", "senderPublicKey": "G349Uq3FTox7dRNLeAfAQeoACvwZ9iEnVSaHcEYn6j8J", "proofs": [ "2A9xXnqMUPbeKoUSuWR4acMgNJJJMWwCMM7V9o9f99CJEmAqQsT2FwDCezAQr6eujN5pAKkudverCZvTKWhAVNe6" ], "script": "base64:BgL9GAgCEgQKAggBEgASAwoBARIAEgASABIDCgEIEgMKAQgSAwoBCBIFCgMBAQESBQoDAQEBEgASAwoBCBIHCgUICAgICBIDCgEIEgAiA1NFUCIFU0NBTEUiBU1VTFQ4Igp6ZXJvQmlnSW50IhRwcm9jZXNzaW5nU3RhZ2VUb3RhbCIVcHJvY2Vzc2luZ1N0YWdlU2hhcmVzIg5nZXROdW1iZXJCeUtleSIDa2V5Ig9nZXROdW1iZXJPckZhaWwiDmdldFN0cmluZ0J5S2V5Ig9nZXRTdHJpbmdPckZhaWwiA2FicyIDdmFsIgtrZXlNYXhEZXB0aCIPbWF4RGVwdGhEZWZhdWx0IghtYXhEZXB0aCIRa2V5RmFjdG9yeUFkZHJlc3MiEWZhY3RvcnlBZGRyZXNzU3RyIg9mYWN0b3J5Q29udHJhY3QiEmtleUVtaXNzaW9uQWRkcmVzcyITa2V5TnVtVG9Vc2VyTWFwcGluZyIDbnVtIhZrZXlSZWZlcnJhbFByb2dyYW1OYW1lIhpyZWZlcnJhbFByb2dyYW1OYW1lRGVmYXVsdCITcmVmZXJyYWxQcm9ncmFtTmFtZSIXa2V5UmVmZXJyYWxNaW5HV3hBbW91bnQiG3JlZmVycmFsTWluR1d4QW1vdW50RGVmYXVsdCIUcmVmZXJyYWxNaW5HV3hBbW91bnQiGWtleVJlZmVycmVyUmV3YXJkUGVybWlsbGUiHXJlZmVycmVyUmV3YXJkUGVybWlsbGVEZWZhdWx0IhZyZWZlcnJlclJld2FyZFBlcm1pbGxlIhlrZXlSZWZlcnJhbFJld2FyZFBlcm1pbGxlIh1yZWZlcnJhbFJld2FyZFBlcm1pbGxlRGVmYXVsdCIWcmVmZXJyYWxSZXdhcmRQZXJtaWxsZSILa2V5UmVmZXJyZXIiD3JlZmVycmFsQWRkcmVzcyIUa2V5VW5jbGFpbWVkUmVmZXJyYWwiC3Byb2dyYW1OYW1lIg5jbGFpbWVyQWRkcmVzcyISZW1pc3Npb25BZGRyZXNzU3RyIhBlbWlzc2lvbkNvbnRyYWN0Ig1JZHhDZmdBc3NldElkIhZJZHhDZmdQYWNlbWFrZXJBZGRyZXNzIhZJZHhDZmdCb29zdGluZ0NvbnRyYWN0Ig5JZHhDZmdNYXhEZXB0aCIJa2V5Q29uZmlnIhVyZWFkQ29uZmlnQXJyYXlPckZhaWwiDGZvcm1hdENvbmZpZyIMd3hBc3NldElkU3RyIhptYXRjaGVyUGFjZW1ha2VyQWRkcmVzc1N0ciIaYm9vc3RpbmdDb250cmFjdEFkZHJlc3NTdHIiFmJvb3N0aW5nQ29udHJhY3RPckZhaWwiCGNmZ0FycmF5Ih9rZXlHd3hSZXdhcmRFbWlzc2lvblN0YXJ0SGVpZ2h0Ig1rZXlVc2Vyc0NvdW50IhZrZXlSYXRlUGVyQmxvY2tDdXJyZW50IhRrZXlQb29sV2VpZ2h0VmlydHVhbCIUa2V5TmV4dFByb2Nlc3NlZFVzZXIiD2tleUxhdGVzdFBlcmlvZCINa2V5TmV4dFBlcmlvZCISa2V5UHJvY2Vzc2luZ1N0YWdlIhZrZXlOZXh0UHJvY2Vzc2VkUGVyaW9kIhBrZXlVc2VyVW5jbGFpbWVkIgl1c2VySW5kZXgiG2tleU5leHRVbmxhaW1lZFBlcmlvZE9mVXNlciIca2V5TGFzdFByb2Nlc3NlZFBlcmlvZE9mVXNlciISa2V5SGVpZ2h0Rm9yUGVyaW9kIgZwZXJpb2QiHWtleUF1eEVtaXNzaW9uUmV3YXJkRm9yUGVyaW9kIhdrZXlUb3RhbEFtb3VudEZvclBlcmlvZCIRa2V5TGFzdFBheW91dEluZm8iEFBlcmlvZFBheW91dEluZm8iDW1hdGNoZXJSZXdhcmQiDmVtaXNzaW9uUmV3YXJkIhRrZXlQYXlvdXRIaXN0b3J5SW5mbyIXa2V5VG90YWxXZWlnaHRGb3JQZXJpb2QiFmtleVVzZXJLVmFsdWVGb3JQZXJpb2QiFmtleVVzZXJCVmFsdWVGb3JQZXJpb2QiFmtleVVzZXJXZWlnaHRGb3JQZXJpb2QiG2tleVJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcyIecmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzT3JGYWlsIgxIaXN0b3J5RW50cnkiBHR5cGUiBHVzZXIiBmFtb3VudCIBaSIKaGlzdG9yeUtFWSILaGlzdG9yeURBVEEiE2tleU1hbmFnZXJQdWJsaWNLZXkiGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgckbWF0Y2gwIgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAnBkIgJwayIOY2FsY1VzZXJXZWlnaHQiF2Jvb3N0aW5nQ29udHJhY3RBZGRyZXNzIg9oZWlnaHRGb3JQZXJpb2QiBWtMYXN0IgRrS2V5IgRrUmF3IgtrVXNlcldlaWdodCIBayIBYiIBdyIBcCICcHYiFmNhbGNVc2VyV2VpZ2h0Rm9yQ2xhaW0iEHVzZXJXZWlnaHRPclVuaXQiFWdldFVzZXJJbmRleEJ5QWRkcmVzcyILdXNlckFkZHJlc3MiCm5leHRQZXJpb2QiEWNvbW1vbkNsYWltUmV3YXJkIgd1c2VySWR4IhN1c2VyVW5jbGFpbWVkT3B0aW9uIgF1Ig5nV3hBbW91bnRTdGFydCIIcmVmZXJyZXIiEWFjdGl2ZVJlZmVycmFsSW52Ig9wcm9jZXNzaW5nU3RhZ2UiDWN1cnJlbnRQZXJpb2QiC2N1cnJlbnRVc2VyIgxsYXRlc3RQZXJpb2QiCnVzZXJzQ291bnQiDnRvdGFsV2VpZ2h0S2V5Igt0b3RhbFdlaWdodCINJHQwMTIwMjMxMjEzOSIKdXNlcldlaWdodCILdXNlckFjdGlvbnMiDnRvdGFsV2VpZ2h0TmV3IhFwcm9jZXNzaW5nQWN0aW9ucyIadXNlckFtb3VudE1hdGNoZXJGb3JQZXJpb2QiG3VzZXJBbW91bnRFbWlzc2lvbkZvclBlcmlvZCIPdXNlclRvdGFsQW1vdW50IgtyZWZlcnJhbEludiIOcmVmZXJyZXJSZXdhcmQiDnJlZmVycmFsUmV3YXJkIhB1bmNsYWltZWRBY3Rpb25zIgdjb3VudGVyIgZyZXN1bHQiAUAiB2Fzc2V0SWQiBmRlbHRhSCIMZW1pc3Npb25SYXRlIgZ3ZWlnaHQiCWF1eEFtb3VudCICZW0iC21hdGNoZXJQYXJ0IgpwYXlvdXRJbmZvIgdhZGRyZXNzIg0kdDAxNzQ4MTE3NTMxIgdhY3Rpb25zIgtjaGVja0Ftb3VudCISYW1vdW50RnJvbUVtaXNzaW9uIg9jbGFpbWVkUmVmZXJyYWwiC3RvdGFsQW1vdW50Ig0kdDAxODEwNDE4MTU0IhFyZWZlcnJhbFVuY2xhaW1lZCIOZ3d4QW1vdW50U3RhcnQiD2xvY2tTdGFydEhlaWdodCISbG9ja0R1cmF0aW9uQmxvY2tzIg1sb2NrRW5kSGVpZ2h0IgxzY2FsZThQYXJhbUsiDHNjYWxlOFBhcmFtQiIMd3hMb2NrQW1vdW50Igxsb2NrRHVyYXRpb24iD21heExvY2tEdXJhdGlvbiIHY29lZmZYOCILeDFCaWdJbnRTdHIiC3gyQmlnSW50U3RyIgxhbXBCaWdJbnRTdHIiE2FQcmVjaXNpb25CaWdJbnRTdHIiGHRhcmdldFByZWNpc2lvbkJpZ0ludFN0ciIGbkNvaW5zIgphUHJlY2lzaW9uIg90YXJnZXRQcmVjaXNpb24iAngxIgJ4MiIDYW1wIgNhbm4iA2FyciIEY2FsYyIDYWNjIgNjdXIiDSR0MDIwNzc3MjA5NjYiAWQiBWRQcmV2IgJkcCIFZE5leHQiDSR0MDIxMTc5MjEyMjkiAiRsIgIkcyIFJGFjYzAiBSRmMF8xIgIkYSICJGkiBSRmMF8yIgVkRGlmZiIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVja01hbmFnZXJQdWJsaWNLZXkiAnBtIgVoYXNQTSIHY2hlY2tQTSICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5TgABYQICX18AAWIA6AcAAWMAgMLXLwABZAkAtgIBAAAAAWUAAAABZgABAQFnAQFoCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWgAAAEBaQEBaAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFAWgJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FAWgCDyBpcyBub3QgZGVmaW5lZAEBagEBaAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQFoAgABAWsBAWgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQFoCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQFoAg8gaXMgbm90IGRlZmluZWQBAWwBAW0DCQC/AgIFAWQFAW0JAL4CAQUBbQUBbQABbgIMJXNfX21heERlcHRoAAFvAB4AAXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBbgUBbwEBcQACHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MAAXIJAQFrAQkBAXEAAAFzCQERQGV4dHJOYXRpdmUoMTA2MikBBQFyAQF0AAIdJXMlc19fY29uZmlnX19lbWlzc2lvbkFkZHJlc3MBAXUBAXYJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIHbWFwcGluZwkAzAgCAghudW0ydXNlcgkAzAgCCQCkAwEFAXYFA25pbAUBYQABdwkAuQkCCQDMCAICBCVzJXMJAMwIAgIIcmVmZXJyYWwJAMwIAgILcHJvZ3JhbU5hbWUFA25pbAUBYQABeAIGd3hsb2NrAAF5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAXcFAXgAAXoJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICDG1pbkdXeEFtb3VudAUDbmlsBQFhAAFBCQBoAgD0AwUBYwABQgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQF6BQFBAAFDCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAhZyZWZlcnJlclJld2FyZFBlcm1pbGxlBQNuaWwFAWEAAUQAMgABRQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFDBQFEAAFGCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAhZyZWZlcnJhbFJld2FyZFBlcm1pbGxlBQNuaWwFAWEAAUcAMgABSAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFGBQFHAQFJAQFKCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICCHJlZmVycmVyCQDMCAIFAXkJAMwIAgUBSgUDbmlsBQFhAQFLAgFMAU0JALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIRdW5jbGFpbWVkUmVmZXJyYWwJAMwIAgUBTAkAzAgCBQFNBQNuaWwFAWEAAU4JAQFrAQkBAXQAAAFPCQERQGV4dHJOYXRpdmUoMTA2MikBBQFOAAFQAAEAAVEAAgABUgADAAFTAAQBAVQAAgolc19fY29uZmlnAQFVAAkAtQkCCQEBawEJAQFUAAUBYQEBVgQBVwFYAVkBcAkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAIFAVcJAMwIAgUBWAkAzAgCBQFZCQDMCAIJAKQDAQUBcAUDbmlsBQFhAQFaAAQCYWEJAQFVAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCYWEFAVICKGJvb3N0aW5nIGNvbnRyYWN0IGFkZHJlc3MgaXMgbm90IGRlZmluZWQBAmFiAAIoJXMlc19fZ3d4UmV3YXJkRW1pc3Npb25QYXJ0X19zdGFydEhlaWdodAECYWMAAg8lc19fbmV4dFVzZXJOdW0BAmFkAAIbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQJhZQACICVzJXNfX3Bvb2xXZWlnaHRfX0dXWHZpcnR1YWxQT09MAQJhZgACFSVzX19uZXh0UHJvY2Vzc2VkVXNlcgECYWcAAhAlc19fbGF0ZXN0UGVyaW9kAQJhaAACDiVzX19uZXh0UGVyaW9kAQJhaQACEyVzX19wcm9jZXNzaW5nU3RhZ2UBAmFqAAIXJXNfX25leHRQcm9jZXNzZWRQZXJpb2QBAmFrAQJhbAkAuQkCCQDMCAICBCVzJWQJAMwIAgINdXNlclVuY2xhaW1lZAkAzAgCCQCkAwEFAmFsBQNuaWwFAWEBAmFtAQJhbAkAuQkCCQDMCAICFyVzJWRfX25leHRDbGFpbWVkUGVyaW9kCQDMCAIJAKQDAQUCYWwFA25pbAUBYQECYW4BAmFsCQC5CQIJAMwIAgIZJXMlZF9fbGFzdFByb2Nlc3NlZFBlcmlvZAkAzAgCCQCkAwEFAmFsBQNuaWwFAWEBAmFvAQJhcAkAuQkCCQDMCAICGiVzJWRfX3N0YXJ0SGVpZ2h0Rm9yUGVyaW9kCQDMCAIJAKQDAQUCYXAFA25pbAUBYQECYXEBAmFwCQC5CQIJAMwIAgIXJXMlZF9fYXV4RW1pc3Npb25SZXdhcmQJAMwIAgkApAMBBQJhcAUDbmlsBQFhAQJhcgECYXAJALkJAgkAzAgCAholcyVkX190b3RhbEFtb3VudEZvclBlcmlvZAkAzAgCCQCkAwEFAmFwBQNuaWwFAWEBAmFzAAISJXNfX2xhc3RQYXlvdXRJbmZvAQJhdAMCYXACYXUCYXYJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgkApAMBBQJhcAkAzAgCCQCkAwEFAmF1CQDMCAIJAKQDAQUCYXYFA25pbAUBYQECYXcBAmFwCQC5CQIJAMwIAgIYJXMlcyVkX19wYXlvdXRzX19oaXN0b3J5CQDMCAIJAKQDAQUCYXAFA25pbAUBYQECYXgBAmFwCQC5CQIJAMwIAgIaJXMlZF9fdG90YWxXZWlnaHRGb3JQZXJpb2QJAMwIAgkApAMBBQJhcAUDbmlsBQFhAQJheQICYXACYWwJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCCQCkAwEFAmFsCQDMCAICAWsJAMwIAgkApAMBBQJhcAUDbmlsBQFhAQJhegICYXACYWwJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCCQCkAwEFAmFsCQDMCAICAWIJAMwIAgkApAMBBQJhcAUDbmlsBQFhAQJhQQICYXACYWwJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCCQCkAwEFAmFsCQDMCAICBndlaWdodAkAzAgCCQCkAwEFAmFwBQNuaWwFAWEBAmFCAAkAuQkCCQDMCAICBCVzJXMJAMwIAgIGY29uZmlnCQDMCAICGHJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcwUDbmlsBQFhAAJhQwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAWsBCQECYUIAAQJhRAQCYUUCYUYCYUcCYUgEAmFJCQC5CQIJAMwIAgIRJXMlcyVzJXNfX2hpc3RvcnkJAMwIAgUCYUUJAMwIAgUCYUYJAMwIAgkA2AQBCAUCYUgNdHJhbnNhY3Rpb25JZAUDbmlsBQFhBAJhSgkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQJhRwUDbmlsBQFhCQELU3RyaW5nRW50cnkCBQJhSQUCYUoBAmFLAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAmFMAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQJhTQAEAmFOCQCiCAEJAQJhSwADCQABAgUCYU4CBlN0cmluZwQCYU8FAmFOCQDZBAEFAmFPAwkAAQIFAmFOAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmFQAAQCYU4JAKIIAQkBAmFMAAMJAAECBQJhTgIGU3RyaW5nBAJhTwUCYU4JANkEAQUCYU8DCQABAgUCYU4CBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYVEBAmFIBAJhUgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJhTgkBAmFNAAMJAAECBQJhTgIKQnl0ZVZlY3RvcgQCYVMFAmFOAwkAAAIIBQJhSA9jYWxsZXJQdWJsaWNLZXkFAmFTBgUCYVIDCQABAgUCYU4CBFVuaXQDCQAAAggFAmFIBmNhbGxlcgUEdGhpcwYFAmFSCQACAQILTWF0Y2ggZXJyb3IBAmFUBAJhVQJhVgJhcAJhbAQCYVcJAQJhbgEFAmFsBAJhWAkBAmF5AgUCYXAFAmFsBAJhWQkAmggCBQJhVQUCYVgEAmFaCQECYUECBQJhcAUCYWwDCQEJaXNEZWZpbmVkAQUCYVkEAmJhCQEFdmFsdWUBBQJhWQQCYmIJAQV2YWx1ZQEJAJoIAgUCYVUJAQJhegIFAmFwBQJhbAQCYmMJAGQCCQBoAgUCYmEFAmFWBQJiYgMJAGYCBQJiYwAACQCUCgIJAGkCBQJiYwUBYgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYVcFAmFwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhWgUCYmMFA25pbAkAlAoCAAAFA25pbAQCYmQJAJoIAgUEdGhpcwUCYVcDAwkBCWlzRGVmaW5lZAEFAmJkCQBnAgUCYXAJAQV2YWx1ZQEFAmJkBwQCYmUJAQV2YWx1ZQEFAmJkBAJiYQkBBXZhbHVlAQkAmggCBQJhVQkBAmF5AgUCYmUFAmFsBAJiYgkBBXZhbHVlAQkAmggCBQJhVQkBAmF6AgUCYmUFAmFsBAJiYwkAZAIJAGgCBQJiYQUCYVYFAmJiAwkAZgIFAmJjAAAJAJQKAgkAaQIFAmJjBQFiCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhWgUCYmMFA25pbAkAlAoCAAAFA25pbAkAlAoCAAAFA25pbAECYmYEAmFVAmFWAmFwAmFsBAJhWgkBAmFBAgUCYXAFAmFsBAJiZwkAnwgBBQJhWgQCYU4FAmJnAwkAAQIFAmFOAgRVbml0AAADCQABAgUCYU4CA0ludAQCYmMFAmFOCQBpAgUCYmMFAWIJAAIBAgtNYXRjaCBlcnJvcgECYmgCAVkCYmkEAWgJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIHbWFwcGluZwkAzAgCAgh1c2VyMm51bQkAzAgCBQJiaQUDbmlsBQFhCQENcGFyc2VJbnRWYWx1ZQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQEHQWRkcmVzcwEJANkEAQUBWQUBaAkArAICCQCsAgIJAKwCAgINVXNlciBhZGRyZXNzIAUCYmkCLSBpcyBub3QgZm91bmQgaW4gYm9vc3RpbmcgY29udHJhY3QgZGF0YSwga2V5PQUBaAECYmoACQEBZwEJAQJhaAABAmJrAQJiaQQCYWEJAQFVAAQCYmwJAQJiaAIJAJEDAgUCYWEFAVIFAmJpBAJibQkAnwgBCQECYWsBBQJibAQCYU4FAmJtAwkAAQIFAmFOAgRVbml0CQCUCgIAAAUDbmlsAwkAAQIFAmFOAgNJbnQEAmJuBQJhTgkAlAoCBQJibgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFrAQUCYmwAAAUDbmlsCQACAQILTWF0Y2ggZXJyb3IQAmFIARZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5AgJiaQJibwQCYnAJAJ0IAgUCYUMJAQFJAQUCYmkEAmJxAwkAAAIFAmJwBQR1bml0BQR1bml0CQD8BwQFAmFDAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIFAXkJAMwIAgUCYmkJAMwIAgkAZwIFAmJvBQFCBQNuaWwFA25pbAMJAAACBQJicQUCYnEJAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFIAQ5maW5hbGl6ZUhlbHBlcgAEAmJyCQELdmFsdWVPckVsc2UCCQCfCAEJAQJhaQAFAWUEAmJzCQEBZwEJAQJhagAEAmJ0CQEBZwEJAQJhZgAEAmJ1CQEBZwEJAQJhZwAEAmJ2CQELdmFsdWVPckVsc2UCCQCaCAIJAQFaAAkBAmFjAAAABAJidwkBAmF4AQUCYnMEAmJ4CQEBZwEJAQJheAEFAmJzBAJhVgkBAWcBCQECYW8BBQJicwMJAGYCBQJicwUCYnUJAJQKAgUDbmlsBwMJAAACBQJicgUBZQQCYnkJAQJhVAQJAQFaAAUCYVYFAmJzBQJidAQCYnoIBQJieQJfMQQCYkEIBQJieQJfMgQCYkIJAGQCBQJieAUCYnoEAmJDAwkAZgIJAGUCBQJidgABBQJidAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFmAAkAZAIFAmJ0AAEFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFpAAUBZgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFmAAAABQNuaWwJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmJ3BQJiQgUDbmlsBQJiQwUCYkEGAwkAAAIFAmJyBQFmBAJiegkBAmJmBAkBAVoABQJhVgUCYnMFAmJ0BAJiRAkAawMJAQFnAQkBAmFyAQUCYnMFAmJ6BQJieAQCYkUJAGsDCQEBZwEJAQJhcQEFAmJzBQJiegUCYngEAmJGCQBkAgUCYkUFAmJEBAJibQkAnwgBCQECYWsBBQJidAQCYmkJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQFaAAkBAXUBBQJidAQCYnAJAJ0IAgUCYUMJAQFJAQUCYmkEAmJxAwkAAAIFAmJwBQR1bml0BQR1bml0CQD8BwQFAmFDAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIFAXkJAMwIAgUCYmkJAMwIAgkAZwIFAmJ6BQFCBQNuaWwFA25pbAMJAAACBQJicQUCYnEEAmJHAwMJAAACBQJicAUEdW5pdAYJAGYCBQFCBQJiegUEdW5pdAQCYkgJAGsDBQJiRgUBRQUBYgQCYkkJAGsDBQJiRgUBSAUBYgkA/AcEBQJhQwIMaW5jVW5jbGFpbWVkCQDMCAIFAXkJAMwIAgUCYmkJAMwIAgUCYkgJAMwIAgUCYkkFA25pbAUDbmlsAwkAAAIFAmJHBQJiRwQCYkoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhawEFAmJ0CQBkAgkBC3ZhbHVlT3JFbHNlAgUCYm0AAAUCYkYFA25pbAQCYkMDCQBmAgkAZQIFAmJ2AAEFAmJ0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWYACQBkAgUCYnQAAQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWoACQBkAgUCYnMAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFmAAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhaQAFA25pbAkAlAoCCQDOCAIFAmJKBQJiQwYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAhhpbnZhbGlkIHByb2Nlc3Npbmcgc3RhZ2UCYUgBD2ZpbmFsaXplV3JhcHBlcgECYksEAmJMCgACYk0JAPwHBAUEdGhpcwIOZmluYWxpemVIZWxwZXIFA25pbAUDbmlsAwkAAQIFAmJNAgdCb29sZWFuBQJiTQkAAgEJAKwCAgkAAwEFAmJNAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuAwkAAAIFAmJMBQJiTAMJAQEhAQUCYkwDCQAAAgUCYksFAXAJAAIBAhJOb3RoaW5nIHRvIHByb2Nlc3MJAJQKAgUDbmlsBQR1bml0AwkAZgIFAmJLAAAJAJQKAgUDbmlsCQD8BwQFBHRoaXMCD2ZpbmFsaXplV3JhcHBlcgkAzAgCCQBlAgUCYksAAQUDbmlsBQNuaWwJAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFIAR1wcm9jZXNzUGVuZGluZ1BlcmlvZHNBbmRVc2VycwAJAJQKAgUDbmlsCQD8BwQFBHRoaXMCD2ZpbmFsaXplV3JhcHBlcgkAzAgCBQFwBQNuaWwFA25pbAJhSAEHZGVwb3NpdAAEAmFhCQEBVQADCQECIT0CCAUCYUgGY2FsbGVyCQEHQWRkcmVzcwEJANkEAQkAkQMCBQJhYQUBUQkAAgECFFdyb25nIGNhbGxlciBhZGRyZXNzBAJiTgkBBXZhbHVlAQgJAQV2YWx1ZQEJAJEDAggFAmFICHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFAmJOCQDZBAEJAJEDAgUCYWEFAVAJAAIBAhNXcm9uZyBwYXltZW50IGFzc2V0BAJhcAkBAmJqAAQCYk8JAGUCBQZoZWlnaHQJAQFpAQkBAmFiAAQCYlAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQFPCQECYWQACQCsAgIJAKwCAgIcbWFuZGF0b3J5IGVtaXNzaW9uX2NvbnRyYWN0LgkBAmFkAAIPIGlzIG5vdCBkZWZpbmVkBAJiUQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAXMJAQJhZQAJAKwCAgkArAICAhttYW5kYXRvcnkgZmFjdG9yeV9jb250cmFjdC4JAQJhZQACDyBpcyBub3QgZGVmaW5lZAQCYlIJAGsDCQBoAgUCYk8FAmJRBQJiUAUBYwQCYlMJAPwHBAUBTwIEZW1pdAkAzAgCBQJiUgUDbmlsBQNuaWwDCQAAAgUCYlMFAmJTBAJiVAgJAQV2YWx1ZQEJAJEDAggFAmFICHBheW1lbnRzAAAGYW1vdW50BAJiVQkBAmF0AwUCYXAFAmJUBQJiUgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFnAAUCYXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbwEFAmFwBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcQEFAmFwBQJiUgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFiAAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXIBBQJhcAUCYlQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhaAAJAGQCBQJhcAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcwAFAmJVCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhdwEFAmFwBQJiVQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFIAQtjbGFpbVJld2FyZAAEAmFhCQEBVQAEAmJWCQClCAEIBQJhSAZjYWxsZXIEAmJXCQECYmsBBQJiVgQCYUcIBQJiVwJfMQQCYlgIBQJiVwJfMgQCYlkDCQBmAgUCYUcAAAYJAAIBAhBOb3RoaW5nIHRvIGNsYWltAwkAAAIFAmJZBQJiWQQCYloAAAQCY2EKAAJiTQkA/AcEBQJhQwIFY2xhaW0JAMwIAgUBeQUDbmlsBQNuaWwDCQABAgUCYk0CA0ludAUCYk0JAAIBCQCsAgIJAAMBBQJiTQIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAJjYgkAZAIFAmFHBQJjYQkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmFIBmNhbGxlcgUCY2IJANkEAQkAkQMCBQJhYQUBUAkAzAgCCQECYUQEAgVjbGFpbQUCYlYFAmFHBQJhSAUDbmlsBQJiWAkAzAgCBQJjYgkAzAgCBQJiWgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFIARNjbGFpbVJld2FyZFJFQURPTkxZAQJiVgQCY2MJAQJiawEFAmJWBAJhRwgFAmNjAl8xBAJiWAgFAmNjAl8yBAJjZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQJhQwkBAUsCBQF5BQJiVgAABAJjYgkAZAIFAmFHBQJjZAkAlAoCBQNuaWwFAmNiAmFIAR1sYXRlc3RGaW5hbGl6ZWRQZXJpb2RSRUFET05MWQECYlYJAJQKAgUDbmlsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhZwAA////////////AQJhSAEhbGF0ZXN0RmluYWxpemVkUGVyaW9kSW5mb1JFQURPTkxZAQJiVgkAlAoCBQNuaWwJAQFqAQkBAmFzAAJhSAEVY2FsY0d3eFBhcmFtc1JFQURPTkxZAwJjZQJjZgJjZwQCY2gJAGQCBQJjZgUCY2cEAmNpCQEBLQEJAGsDBQJjZQUBYgUCY2cEAmNqCQBoAgkAawMFAmNlBQFiBQJjZwUCY2gJAJQKAgUDbmlsCQDMCAIFAmNpCQDMCAIFAmNqCQDMCAIJAQJiagAFA25pbAJhSAEaY2FsY0d3eEFtb3VudFN0YXJ0UkVBRE9OTFkDAmNrAmNsAmNtBAJjbgkAawMFAmNsBQFjBQJjbQQCYm8JAGsDBQJjawUCY24FAWMJAJQKAgUDbmlsCQDMCAIFAmJvBQNuaWwCYUgBFW9uRW1pc3Npb25Gb3JHd3hTdGFydAADCQECIT0CCAUCYUgGY2FsbGVyBQFzCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWIABQZoZWlnaHQFA25pbAJhSAEjbGF0ZXN0UGVyaW9kRW1pc3Npb25SZXdhcmRzUkVBRE9OTFkBAmJWBAJhcAkBAmJqAAkAlAoCBQNuaWwJAMwIAgkBAWcBCQECYXEBBQJhcAUDbmlsAmFIAQVjYWxjRAUCY28CY3ACY3ECY3ICY3MEAmN0CQC2AgEAAgQCY3UJAKcDAQUCY3IEAmN2CQCnAwEFAmNzBAJjdwkApwMBBQJjbwQCY3gJAKcDAQUCY3AEAmN5CQC5AgIJAKcDAQUCY3EFAmN1BAJhTwkAtwICBQJjdwUCY3gDCQAAAgUCYU8FAWQJAJQKAgUDbmlsCQCmAwEFAWQEAmN6CQC5AgIFAmN5BQJjdAQCY0EJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHBQNuaWwKAQJjQgICY0MCY0QEAmNFBQJjQwQCY0YIBQJjRQJfMQQCY0cIBQJjRQJfMgQCY0gJALoCAgkAuQICCQC5AgIFAmNGBQJjRgUCY0YJALkCAgkAuQICCQC5AgIFAmN3BQJjeAUCY3QFAmN0BAJjSQkAugICCQC5AgIJALcCAgkAugICCQC5AgIFAmN6BQJhTwUCY3UJALkCAgUCY0gFAmN0BQJjRgkAtwICCQC6AgIJALkCAgkAuAICBQJjegUCY3UFAmNGBQJjdQkAuQICCQC3AgIFAmN0CQC2AgEAAQUCY0gJAJQKAgUCY0kFAmNGBAJjSgoAAmNLBQJjQQoAAmNMCQCQAwEFAmNLCgACY00JAJQKAgUCYU8FBHVuaXQKAQJjTgICY08CY1ADCQBnAgUCY1AFAmNMBQJjTwkBAmNCAgUCY08JAJEDAgUCY0sFAmNQCgECY1ECAmNPAmNQAwkAZwIFAmNQBQJjTAUCY08JAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA3CQECY1ECCQECY04CCQECY04CCQECY04CCQECY04CCQECY04CCQECY04CCQECY04CBQJjTQAAAAEAAgADAAQABQAGAAcEAmNJCAUCY0oCXzEEAmNHCAUCY0oCXzIEAmNSCQEBbAEJALgCAgUCY0kJAQV2YWx1ZQEFAmNHAwkAwAICBQJjdgUCY1IJAJQKAgUDbmlsCQCmAwEFAmNJCQACAQkArAICAh1EIGNhbGN1bGF0aW9uIGVycm9yLCBkRGlmZiA9IAkApgMBBQJjUgJhSAEKc2V0TWFuYWdlcgECY1MEAmNUCQECYVEBBQJhSAMJAAACBQJjVAUCY1QEAmNVCQDZBAEFAmNTAwkAAAIFAmNVBQJjVQkAzAgCCQELU3RyaW5nRW50cnkCCQECYUwABQJjUwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFIAQ5jb25maXJtTWFuYWdlcgAEAmNWCQECYVAABAJjVwMJAQlpc0RlZmluZWQBBQJjVgYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCY1cFAmNXBAJjWAMJAAACCAUCYUgPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJjVgYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCY1gFAmNYCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhSwAJANgEAQkBBXZhbHVlAQUCY1YJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFMAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJjWQECY1oABAJkYQQCYU4JAQJhTQADCQABAgUCYU4CCkJ5dGVWZWN0b3IEAmFTBQJhTgUCYVMDCQABAgUCYU4CBFVuaXQIBQJjWQ9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCY1kJYm9keUJ5dGVzCQCRAwIIBQJjWQZwcm9vZnMAAAUCZGFMzoPX", "chainId": 84, "height": 2290523, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Ha8gkjLQSaFB585kYqrsFA4mUQoL5bcEt4LwpvXLJ6tX Next: HysWtk6dUsvdzxkuVcGbWUjnrSxBno7eeyrT6GxNJx4E Diff:
OldNewDifferences
2525 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (("mandatory this." + key) + " is not defined"))
2626
2727
28-func abs (val) = if ((0 > val))
29- then -(val)
30- else val
31-
32-
33-func absBigInt (val) = if ((zeroBigInt > val))
28+func abs (val) = if ((zeroBigInt > val))
3429 then -(val)
3530 else val
3631
8176 func keyReferrer (referralAddress) = makeString(["%s%s%s", "referrer", referralProgramName, referralAddress], SEP)
8277
8378
84-func keyUnclaimedReferral (programName,claimerAddress) = makeString(["%s%s%s%s", "unclaimedReferral", programName, claimerAddress], SEP)
79+func keyUnclaimedReferral (programName,claimerAddress) = makeString(["%s%s%s", "unclaimedReferral", programName, claimerAddress], SEP)
8580
8681
8782 let emissionAddressStr = getStringOrFail(keyEmissionAddress())
330325 then $Tuple2(nil, false)
331326 else if ((processingStage == processingStageTotal))
332327 then {
333- let $t01208412200 = calcUserWeight(boostingContractOrFail(), heightForPeriod, currentPeriod, currentUser)
334- let userWeight = $t01208412200._1
335- let userActions = $t01208412200._2
328+ let $t01202312139 = calcUserWeight(boostingContractOrFail(), heightForPeriod, currentPeriod, currentUser)
329+ let userWeight = $t01202312139._1
330+ let userActions = $t01202312139._2
336331 let totalWeightNew = (totalWeight + userWeight)
337332 let processingActions = if (((usersCount - 1) > currentUser))
338333 then [IntegerEntry(keyNextProcessedUser(), (currentUser + 1))]
438433 func claimReward () = {
439434 let cfgArray = readConfigArrayOrFail()
440435 let address = toString(i.caller)
441- let $t01754217592 = commonClaimReward(address)
442- let amount = $t01754217592._1
443- let actions = $t01754217592._2
436+ let $t01748117531 = commonClaimReward(address)
437+ let amount = $t01748117531._1
438+ let actions = $t01748117531._2
444439 let checkAmount = if ((amount > 0))
445440 then true
446441 else throw("Nothing to claim")
463458
464459 @Callable(i)
465460 func claimRewardREADONLY (address) = {
466- let $t01816518215 = commonClaimReward(address)
467- let amount = $t01816518215._1
468- let actions = $t01816518215._2
461+ let $t01810418154 = commonClaimReward(address)
462+ let amount = $t01810418154._1
463+ let actions = $t01810418154._2
469464 let referralUnclaimed = valueOrElse(getInteger(referralsContractAddressOrFail, keyUnclaimedReferral(referralProgramName, address)), 0)
470465 let totalAmount = (amount + referralUnclaimed)
471466 $Tuple2(nil, totalAmount)
530525 then $Tuple2(nil, toString(zeroBigInt))
531526 else {
532527 let ann = (amp * nCoins)
533- let arr = [0, 1, 2, 3, 4, 5, 6]
528+ let arr = [1, 2, 3, 4, 5, 6, 7]
534529 func calc (acc,cur) = {
535- let $t02084820875 = acc
536- let d = $t02084820875._1
537- let dPrev = $t02084820875._2
538- let found = $t02084820875._3
539- if ((found != unit))
540- then acc
541- else {
542- let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
543- let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
544- let dDiff = absBigInt((dNext - value(d)))
545- if ((targetPrecision >= dDiff))
546- then $Tuple3(dNext, d, cur)
547- else $Tuple3(dNext, d, unit)
548- }
530+ let $t02077720966 = acc
531+ let d = $t02077720966._1
532+ let dPrev = $t02077720966._2
533+ let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
534+ let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
535+ $Tuple2(dNext, d)
549536 }
550537
551- let $t02147321536 = {
538+ let $t02117921229 = {
552539 let $l = arr
553540 let $s = size($l)
554- let $acc0 = $Tuple3(s, unit, unit)
541+ let $acc0 = $Tuple2(s, unit)
555542 func $f0_1 ($a,$i) = if (($i >= $s))
556543 then $a
557544 else calc($a, $l[$i])
562549
563550 $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)
564551 }
565- let dNext = $t02147321536._1
566- let dPrev = $t02147321536._2
567- let found = $t02147321536._3
568- if ((found != unit))
552+ let dNext = $t02117921229._1
553+ let dPrev = $t02117921229._2
554+ let dDiff = abs((dNext - value(dPrev)))
555+ if ((targetPrecision >= dDiff))
569556 then $Tuple2(nil, toString(dNext))
570- else {
571- let dDiff = absBigInt((dNext - value(dPrev)))
572- throw(("D calculation error, dDiff = " + toString(dDiff)))
573- }
557+ else throw(("D calculation error, dDiff = " + toString(dDiff)))
574558 }
575559 }
576560
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let SCALE = 1000
77
88 let MULT8 = 100000000
99
1010 let zeroBigInt = toBigInt(0)
1111
1212 let processingStageTotal = 0
1313
1414 let processingStageShares = 1
1515
1616 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
1717
1818
1919 func getNumberOrFail (key) = valueOrErrorMessage(getInteger(this, key), (("mandatory this." + key) + " is not defined"))
2020
2121
2222 func getStringByKey (key) = valueOrElse(getString(this, key), "")
2323
2424
2525 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (("mandatory this." + key) + " is not defined"))
2626
2727
28-func abs (val) = if ((0 > val))
29- then -(val)
30- else val
31-
32-
33-func absBigInt (val) = if ((zeroBigInt > val))
28+func abs (val) = if ((zeroBigInt > val))
3429 then -(val)
3530 else val
3631
3732
3833 let keyMaxDepth = "%s__maxDepth"
3934
4035 let maxDepthDefault = 30
4136
4237 let maxDepth = valueOrElse(getInteger(this, keyMaxDepth), maxDepthDefault)
4338
4439 func keyFactoryAddress () = "%s%s__config__factoryAddress"
4540
4641
4742 let factoryAddressStr = getStringOrFail(keyFactoryAddress())
4843
4944 let factoryContract = addressFromStringValue(factoryAddressStr)
5045
5146 func keyEmissionAddress () = "%s%s__config__emissionAddress"
5247
5348
5449 func keyNumToUserMapping (num) = makeString(["%s%s%s", "mapping", "num2user", toString(num)], SEP)
5550
5651
5752 let keyReferralProgramName = makeString(["%s%s", "referral", "programName"], SEP)
5853
5954 let referralProgramNameDefault = "wxlock"
6055
6156 let referralProgramName = valueOrElse(getString(this, keyReferralProgramName), referralProgramNameDefault)
6257
6358 let keyReferralMinGWxAmount = makeString(["%s%s", "referral", "minGWxAmount"], SEP)
6459
6560 let referralMinGWxAmountDefault = (500 * MULT8)
6661
6762 let referralMinGWxAmount = valueOrElse(getInteger(this, keyReferralMinGWxAmount), referralMinGWxAmountDefault)
6863
6964 let keyReferrerRewardPermille = makeString(["%s%s", "referral", "referrerRewardPermille"], SEP)
7065
7166 let referrerRewardPermilleDefault = 50
7267
7368 let referrerRewardPermille = valueOrElse(getInteger(this, keyReferrerRewardPermille), referrerRewardPermilleDefault)
7469
7570 let keyReferralRewardPermille = makeString(["%s%s", "referral", "referralRewardPermille"], SEP)
7671
7772 let referralRewardPermilleDefault = 50
7873
7974 let referralRewardPermille = valueOrElse(getInteger(this, keyReferralRewardPermille), referralRewardPermilleDefault)
8075
8176 func keyReferrer (referralAddress) = makeString(["%s%s%s", "referrer", referralProgramName, referralAddress], SEP)
8277
8378
84-func keyUnclaimedReferral (programName,claimerAddress) = makeString(["%s%s%s%s", "unclaimedReferral", programName, claimerAddress], SEP)
79+func keyUnclaimedReferral (programName,claimerAddress) = makeString(["%s%s%s", "unclaimedReferral", programName, claimerAddress], SEP)
8580
8681
8782 let emissionAddressStr = getStringOrFail(keyEmissionAddress())
8883
8984 let emissionContract = addressFromStringValue(emissionAddressStr)
9085
9186 let IdxCfgAssetId = 1
9287
9388 let IdxCfgPacemakerAddress = 2
9489
9590 let IdxCfgBoostingContract = 3
9691
9792 let IdxCfgMaxDepth = 4
9893
9994 func keyConfig () = "%s__config"
10095
10196
10297 func readConfigArrayOrFail () = split(getStringOrFail(keyConfig()), SEP)
10398
10499
105100 func formatConfig (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = makeString(["%s%s%s%d", wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, toString(maxDepth)], SEP)
106101
107102
108103 func boostingContractOrFail () = {
109104 let cfgArray = readConfigArrayOrFail()
110105 valueOrErrorMessage(addressFromString(cfgArray[IdxCfgBoostingContract]), "boosting contract address is not defined")
111106 }
112107
113108
114109 func keyGwxRewardEmissionStartHeight () = "%s%s__gwxRewardEmissionPart__startHeight"
115110
116111
117112 func keyUsersCount () = "%s__nextUserNum"
118113
119114
120115 func keyRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
121116
122117
123118 func keyPoolWeightVirtual () = "%s%s__poolWeight__GWXvirtualPOOL"
124119
125120
126121 func keyNextProcessedUser () = "%s__nextProcessedUser"
127122
128123
129124 func keyLatestPeriod () = "%s__latestPeriod"
130125
131126
132127 func keyNextPeriod () = "%s__nextPeriod"
133128
134129
135130 func keyProcessingStage () = "%s__processingStage"
136131
137132
138133 func keyNextProcessedPeriod () = "%s__nextProcessedPeriod"
139134
140135
141136 func keyUserUnclaimed (userIndex) = makeString(["%s%d", "userUnclaimed", toString(userIndex)], SEP)
142137
143138
144139 func keyNextUnlaimedPeriodOfUser (userIndex) = makeString(["%s%d__nextClaimedPeriod", toString(userIndex)], SEP)
145140
146141
147142 func keyLastProcessedPeriodOfUser (userIndex) = makeString(["%s%d__lastProcessedPeriod", toString(userIndex)], SEP)
148143
149144
150145 func keyHeightForPeriod (period) = makeString(["%s%d__startHeightForPeriod", toString(period)], SEP)
151146
152147
153148 func keyAuxEmissionRewardForPeriod (period) = makeString(["%s%d__auxEmissionReward", toString(period)], SEP)
154149
155150
156151 func keyTotalAmountForPeriod (period) = makeString(["%s%d__totalAmountForPeriod", toString(period)], SEP)
157152
158153
159154 func keyLastPayoutInfo () = "%s__lastPayoutInfo"
160155
161156
162157 func PeriodPayoutInfo (period,matcherReward,emissionReward) = makeString(["%d%d%d", toString(period), toString(matcherReward), toString(emissionReward)], SEP)
163158
164159
165160 func keyPayoutHistoryInfo (period) = makeString(["%s%s%d__payouts__history", toString(period)], SEP)
166161
167162
168163 func keyTotalWeightForPeriod (period) = makeString(["%s%d__totalWeightForPeriod", toString(period)], SEP)
169164
170165
171166 func keyUserKValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "k", toString(period)], SEP)
172167
173168
174169 func keyUserBValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "b", toString(period)], SEP)
175170
176171
177172 func keyUserWeightForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "weight", toString(period)], SEP)
178173
179174
180175 func keyReferralsContractAddress () = makeString(["%s%s", "config", "referralsContractAddress"], SEP)
181176
182177
183178 let referralsContractAddressOrFail = addressFromStringValue(getStringOrFail(keyReferralsContractAddress()))
184179
185180 func HistoryEntry (type,user,amount,i) = {
186181 let historyKEY = makeString(["%s%s%s%s__history", type, user, toBase58String(i.transactionId)], SEP)
187182 let historyDATA = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amount)], SEP)
188183 StringEntry(historyKEY, historyDATA)
189184 }
190185
191186
192187 func keyManagerPublicKey () = "%s__managerPublicKey"
193188
194189
195190 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
196191
197192
198193 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
199194 case s: String =>
200195 fromBase58String(s)
201196 case _: Unit =>
202197 unit
203198 case _ =>
204199 throw("Match error")
205200 }
206201
207202
208203 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
209204 case s: String =>
210205 fromBase58String(s)
211206 case _: Unit =>
212207 unit
213208 case _ =>
214209 throw("Match error")
215210 }
216211
217212
218213 func mustManager (i) = {
219214 let pd = throw("Permission denied")
220215 match managerPublicKeyOrUnit() {
221216 case pk: ByteVector =>
222217 if ((i.callerPublicKey == pk))
223218 then true
224219 else pd
225220 case _: Unit =>
226221 if ((i.caller == this))
227222 then true
228223 else pd
229224 case _ =>
230225 throw("Match error")
231226 }
232227 }
233228
234229
235230 func calcUserWeight (boostingContractAddress,heightForPeriod,period,userIndex) = {
236231 let kLast = keyLastProcessedPeriodOfUser(userIndex)
237232 let kKey = keyUserKValueForPeriod(period, userIndex)
238233 let kRaw = getInteger(boostingContractAddress, kKey)
239234 let kUserWeight = keyUserWeightForPeriod(period, userIndex)
240235 if (isDefined(kRaw))
241236 then {
242237 let k = value(kRaw)
243238 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(period, userIndex)))
244239 let w = ((k * heightForPeriod) + b)
245240 if ((w > 0))
246241 then $Tuple2((w / SCALE), [IntegerEntry(kLast, period), IntegerEntry(kUserWeight, w)])
247242 else $Tuple2(0, nil)
248243 }
249244 else {
250245 let p = getInteger(this, kLast)
251246 if (if (isDefined(p))
252247 then (period >= value(p))
253248 else false)
254249 then {
255250 let pv = value(p)
256251 let k = value(getInteger(boostingContractAddress, keyUserKValueForPeriod(pv, userIndex)))
257252 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(pv, userIndex)))
258253 let w = ((k * heightForPeriod) + b)
259254 if ((w > 0))
260255 then $Tuple2((w / SCALE), [IntegerEntry(kUserWeight, w)])
261256 else $Tuple2(0, nil)
262257 }
263258 else $Tuple2(0, nil)
264259 }
265260 }
266261
267262
268263 func calcUserWeightForClaim (boostingContractAddress,heightForPeriod,period,userIndex) = {
269264 let kUserWeight = keyUserWeightForPeriod(period, userIndex)
270265 let userWeightOrUnit = getInteger(kUserWeight)
271266 match userWeightOrUnit {
272267 case _: Unit =>
273268 0
274269 case w: Int =>
275270 (w / SCALE)
276271 case _ =>
277272 throw("Match error")
278273 }
279274 }
280275
281276
282277 func getUserIndexByAddress (boostingContractAddressStr,userAddress) = {
283278 let key = makeString(["%s%s%s", "mapping", "user2num", userAddress], SEP)
284279 parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String(boostingContractAddressStr)), key), ((("User address " + userAddress) + " is not found in boosting contract data, key=") + key)))
285280 }
286281
287282
288283 func nextPeriod () = getNumberByKey(keyNextPeriod())
289284
290285
291286 func commonClaimReward (userAddress) = {
292287 let cfgArray = readConfigArrayOrFail()
293288 let userIdx = getUserIndexByAddress(cfgArray[IdxCfgBoostingContract], userAddress)
294289 let userUnclaimedOption = getInteger(keyUserUnclaimed(userIdx))
295290 match userUnclaimedOption {
296291 case _: Unit =>
297292 $Tuple2(0, nil)
298293 case u: Int =>
299294 $Tuple2(u, [IntegerEntry(keyUserUnclaimed(userIdx), 0)])
300295 case _ =>
301296 throw("Match error")
302297 }
303298 }
304299
305300
306301 @Callable(i)
307302 func updateReferralActivity (userAddress,gWxAmountStart) = {
308303 let referrer = getString(referralsContractAddressOrFail, keyReferrer(userAddress))
309304 let activeReferralInv = if ((referrer == unit))
310305 then unit
311306 else invoke(referralsContractAddressOrFail, "updateReferralActivity", [referralProgramName, userAddress, (gWxAmountStart >= referralMinGWxAmount)], nil)
312307 if ((activeReferralInv == activeReferralInv))
313308 then $Tuple2(nil, unit)
314309 else throw("Strict value is not equal to itself.")
315310 }
316311
317312
318313
319314 @Callable(i)
320315 func finalizeHelper () = {
321316 let processingStage = valueOrElse(getInteger(keyProcessingStage()), processingStageTotal)
322317 let currentPeriod = getNumberByKey(keyNextProcessedPeriod())
323318 let currentUser = getNumberByKey(keyNextProcessedUser())
324319 let latestPeriod = getNumberByKey(keyLatestPeriod())
325320 let usersCount = valueOrElse(getInteger(boostingContractOrFail(), keyUsersCount()), 0)
326321 let totalWeightKey = keyTotalWeightForPeriod(currentPeriod)
327322 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
328323 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
329324 if ((currentPeriod > latestPeriod))
330325 then $Tuple2(nil, false)
331326 else if ((processingStage == processingStageTotal))
332327 then {
333- let $t01208412200 = calcUserWeight(boostingContractOrFail(), heightForPeriod, currentPeriod, currentUser)
334- let userWeight = $t01208412200._1
335- let userActions = $t01208412200._2
328+ let $t01202312139 = calcUserWeight(boostingContractOrFail(), heightForPeriod, currentPeriod, currentUser)
329+ let userWeight = $t01202312139._1
330+ let userActions = $t01202312139._2
336331 let totalWeightNew = (totalWeight + userWeight)
337332 let processingActions = if (((usersCount - 1) > currentUser))
338333 then [IntegerEntry(keyNextProcessedUser(), (currentUser + 1))]
339334 else [IntegerEntry(keyProcessingStage(), processingStageShares), IntegerEntry(keyNextProcessedUser(), 0)]
340335 $Tuple2((([IntegerEntry(totalWeightKey, totalWeightNew)] ++ processingActions) ++ userActions), true)
341336 }
342337 else if ((processingStage == processingStageShares))
343338 then {
344339 let userWeight = calcUserWeightForClaim(boostingContractOrFail(), heightForPeriod, currentPeriod, currentUser)
345340 let userAmountMatcherForPeriod = fraction(getNumberByKey(keyTotalAmountForPeriod(currentPeriod)), userWeight, totalWeight)
346341 let userAmountEmissionForPeriod = fraction(getNumberByKey(keyAuxEmissionRewardForPeriod(currentPeriod)), userWeight, totalWeight)
347342 let userTotalAmount = (userAmountEmissionForPeriod + userAmountMatcherForPeriod)
348343 let userUnclaimedOption = getInteger(keyUserUnclaimed(currentUser))
349344 let userAddress = getStringValue(boostingContractOrFail(), keyNumToUserMapping(currentUser))
350345 let referrer = getString(referralsContractAddressOrFail, keyReferrer(userAddress))
351346 let activeReferralInv = if ((referrer == unit))
352347 then unit
353348 else invoke(referralsContractAddressOrFail, "updateReferralActivity", [referralProgramName, userAddress, (userWeight >= referralMinGWxAmount)], nil)
354349 if ((activeReferralInv == activeReferralInv))
355350 then {
356351 let referralInv = if (if ((referrer == unit))
357352 then true
358353 else (referralMinGWxAmount > userWeight))
359354 then unit
360355 else {
361356 let referrerReward = fraction(userTotalAmount, referrerRewardPermille, SCALE)
362357 let referralReward = fraction(userTotalAmount, referralRewardPermille, SCALE)
363358 invoke(referralsContractAddressOrFail, "incUnclaimed", [referralProgramName, userAddress, referrerReward, referralReward], nil)
364359 }
365360 if ((referralInv == referralInv))
366361 then {
367362 let unclaimedActions = [IntegerEntry(keyUserUnclaimed(currentUser), (valueOrElse(userUnclaimedOption, 0) + userTotalAmount))]
368363 let processingActions = if (((usersCount - 1) > currentUser))
369364 then [IntegerEntry(keyNextProcessedUser(), (currentUser + 1))]
370365 else [IntegerEntry(keyNextProcessedPeriod(), (currentPeriod + 1)), IntegerEntry(keyNextProcessedUser(), 0), DeleteEntry(keyProcessingStage())]
371366 $Tuple2((unclaimedActions ++ processingActions), true)
372367 }
373368 else throw("Strict value is not equal to itself.")
374369 }
375370 else throw("Strict value is not equal to itself.")
376371 }
377372 else throw("invalid processing stage")
378373 }
379374
380375
381376
382377 @Callable(i)
383378 func finalizeWrapper (counter) = {
384379 let result = {
385380 let @ = invoke(this, "finalizeHelper", nil, nil)
386381 if ($isInstanceOf(@, "Boolean"))
387382 then @
388383 else throw(($getType(@) + " couldn't be cast to Boolean"))
389384 }
390385 if ((result == result))
391386 then if (!(result))
392387 then if ((counter == maxDepth))
393388 then throw("Nothing to process")
394389 else $Tuple2(nil, unit)
395390 else if ((counter > 0))
396391 then $Tuple2(nil, invoke(this, "finalizeWrapper", [(counter - 1)], nil))
397392 else $Tuple2(nil, unit)
398393 else throw("Strict value is not equal to itself.")
399394 }
400395
401396
402397
403398 @Callable(i)
404399 func processPendingPeriodsAndUsers () = $Tuple2(nil, invoke(this, "finalizeWrapper", [maxDepth], nil))
405400
406401
407402
408403 @Callable(i)
409404 func deposit () = {
410405 let cfgArray = readConfigArrayOrFail()
411406 if ((i.caller != Address(fromBase58String(cfgArray[IdxCfgPacemakerAddress]))))
412407 then throw("Wrong caller address")
413408 else {
414409 let assetId = value(value(i.payments[0]).assetId)
415410 if ((assetId != fromBase58String(cfgArray[IdxCfgAssetId])))
416411 then throw("Wrong payment asset")
417412 else {
418413 let period = nextPeriod()
419414 let deltaH = (height - getNumberOrFail(keyGwxRewardEmissionStartHeight()))
420415 let emissionRate = valueOrErrorMessage(getInteger(emissionContract, keyRatePerBlockCurrent()), (("mandatory emission_contract." + keyRatePerBlockCurrent()) + " is not defined"))
421416 let weight = valueOrErrorMessage(getInteger(factoryContract, keyPoolWeightVirtual()), (("mandatory factory_contract." + keyPoolWeightVirtual()) + " is not defined"))
422417 let auxAmount = fraction((deltaH * weight), emissionRate, MULT8)
423418 let em = invoke(emissionContract, "emit", [auxAmount], nil)
424419 if ((em == em))
425420 then {
426421 let matcherPart = value(i.payments[0]).amount
427422 let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
428423 [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)]
429424 }
430425 else throw("Strict value is not equal to itself.")
431426 }
432427 }
433428 }
434429
435430
436431
437432 @Callable(i)
438433 func claimReward () = {
439434 let cfgArray = readConfigArrayOrFail()
440435 let address = toString(i.caller)
441- let $t01754217592 = commonClaimReward(address)
442- let amount = $t01754217592._1
443- let actions = $t01754217592._2
436+ let $t01748117531 = commonClaimReward(address)
437+ let amount = $t01748117531._1
438+ let actions = $t01748117531._2
444439 let checkAmount = if ((amount > 0))
445440 then true
446441 else throw("Nothing to claim")
447442 if ((checkAmount == checkAmount))
448443 then {
449444 let amountFromEmission = 0
450445 let claimedReferral = {
451446 let @ = invoke(referralsContractAddressOrFail, "claim", [referralProgramName], nil)
452447 if ($isInstanceOf(@, "Int"))
453448 then @
454449 else throw(($getType(@) + " couldn't be cast to Int"))
455450 }
456451 let totalAmount = (amount + claimedReferral)
457452 $Tuple2(([ScriptTransfer(i.caller, totalAmount, fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amount, i)] ++ actions), [totalAmount, amountFromEmission])
458453 }
459454 else throw("Strict value is not equal to itself.")
460455 }
461456
462457
463458
464459 @Callable(i)
465460 func claimRewardREADONLY (address) = {
466- let $t01816518215 = commonClaimReward(address)
467- let amount = $t01816518215._1
468- let actions = $t01816518215._2
461+ let $t01810418154 = commonClaimReward(address)
462+ let amount = $t01810418154._1
463+ let actions = $t01810418154._2
469464 let referralUnclaimed = valueOrElse(getInteger(referralsContractAddressOrFail, keyUnclaimedReferral(referralProgramName, address)), 0)
470465 let totalAmount = (amount + referralUnclaimed)
471466 $Tuple2(nil, totalAmount)
472467 }
473468
474469
475470
476471 @Callable(i)
477472 func latestFinalizedPeriodREADONLY (address) = $Tuple2(nil, valueOrElse(getInteger(this, keyLatestPeriod()), -1))
478473
479474
480475
481476 @Callable(i)
482477 func latestFinalizedPeriodInfoREADONLY (address) = $Tuple2(nil, getStringByKey(keyLastPayoutInfo()))
483478
484479
485480
486481 @Callable(i)
487482 func calcGwxParamsREADONLY (gwxAmountStart,lockStartHeight,lockDurationBlocks) = {
488483 let lockEndHeight = (lockStartHeight + lockDurationBlocks)
489484 let scale8ParamK = -(fraction(gwxAmountStart, SCALE, lockDurationBlocks))
490485 let scale8ParamB = (fraction(gwxAmountStart, SCALE, lockDurationBlocks) * lockEndHeight)
491486 $Tuple2(nil, [scale8ParamK, scale8ParamB, nextPeriod()])
492487 }
493488
494489
495490
496491 @Callable(i)
497492 func calcGwxAmountStartREADONLY (wxLockAmount,lockDuration,maxLockDuration) = {
498493 let coeffX8 = fraction(lockDuration, MULT8, maxLockDuration)
499494 let gWxAmountStart = fraction(wxLockAmount, coeffX8, MULT8)
500495 $Tuple2(nil, [gWxAmountStart])
501496 }
502497
503498
504499
505500 @Callable(i)
506501 func onEmissionForGwxStart () = if ((i.caller != factoryContract))
507502 then throw("permissions denied")
508503 else [IntegerEntry(keyGwxRewardEmissionStartHeight(), height)]
509504
510505
511506
512507 @Callable(i)
513508 func latestPeriodEmissionRewardsREADONLY (address) = {
514509 let period = nextPeriod()
515510 $Tuple2(nil, [getNumberByKey(keyAuxEmissionRewardForPeriod(period))])
516511 }
517512
518513
519514
520515 @Callable(i)
521516 func calcD (x1BigIntStr,x2BigIntStr,ampBigIntStr,aPrecisionBigIntStr,targetPrecisionBigIntStr) = {
522517 let nCoins = toBigInt(2)
523518 let aPrecision = parseBigIntValue(aPrecisionBigIntStr)
524519 let targetPrecision = parseBigIntValue(targetPrecisionBigIntStr)
525520 let x1 = parseBigIntValue(x1BigIntStr)
526521 let x2 = parseBigIntValue(x2BigIntStr)
527522 let amp = (parseBigIntValue(ampBigIntStr) * aPrecision)
528523 let s = (x1 + x2)
529524 if ((s == zeroBigInt))
530525 then $Tuple2(nil, toString(zeroBigInt))
531526 else {
532527 let ann = (amp * nCoins)
533- let arr = [0, 1, 2, 3, 4, 5, 6]
528+ let arr = [1, 2, 3, 4, 5, 6, 7]
534529 func calc (acc,cur) = {
535- let $t02084820875 = acc
536- let d = $t02084820875._1
537- let dPrev = $t02084820875._2
538- let found = $t02084820875._3
539- if ((found != unit))
540- then acc
541- else {
542- let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
543- let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
544- let dDiff = absBigInt((dNext - value(d)))
545- if ((targetPrecision >= dDiff))
546- then $Tuple3(dNext, d, cur)
547- else $Tuple3(dNext, d, unit)
548- }
530+ let $t02077720966 = acc
531+ let d = $t02077720966._1
532+ let dPrev = $t02077720966._2
533+ let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
534+ let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
535+ $Tuple2(dNext, d)
549536 }
550537
551- let $t02147321536 = {
538+ let $t02117921229 = {
552539 let $l = arr
553540 let $s = size($l)
554- let $acc0 = $Tuple3(s, unit, unit)
541+ let $acc0 = $Tuple2(s, unit)
555542 func $f0_1 ($a,$i) = if (($i >= $s))
556543 then $a
557544 else calc($a, $l[$i])
558545
559546 func $f0_2 ($a,$i) = if (($i >= $s))
560547 then $a
561548 else throw("List size exceeds 7")
562549
563550 $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)
564551 }
565- let dNext = $t02147321536._1
566- let dPrev = $t02147321536._2
567- let found = $t02147321536._3
568- if ((found != unit))
552+ let dNext = $t02117921229._1
553+ let dPrev = $t02117921229._2
554+ let dDiff = abs((dNext - value(dPrev)))
555+ if ((targetPrecision >= dDiff))
569556 then $Tuple2(nil, toString(dNext))
570- else {
571- let dDiff = absBigInt((dNext - value(dPrev)))
572- throw(("D calculation error, dDiff = " + toString(dDiff)))
573- }
557+ else throw(("D calculation error, dDiff = " + toString(dDiff)))
574558 }
575559 }
576560
577561
578562
579563 @Callable(i)
580564 func setManager (pendingManagerPublicKey) = {
581565 let checkCaller = mustManager(i)
582566 if ((checkCaller == checkCaller))
583567 then {
584568 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
585569 if ((checkManagerPublicKey == checkManagerPublicKey))
586570 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
587571 else throw("Strict value is not equal to itself.")
588572 }
589573 else throw("Strict value is not equal to itself.")
590574 }
591575
592576
593577
594578 @Callable(i)
595579 func confirmManager () = {
596580 let pm = pendingManagerPublicKeyOrUnit()
597581 let hasPM = if (isDefined(pm))
598582 then true
599583 else throw("No pending manager")
600584 if ((hasPM == hasPM))
601585 then {
602586 let checkPM = if ((i.callerPublicKey == value(pm)))
603587 then true
604588 else throw("You are not pending manager")
605589 if ((checkPM == checkPM))
606590 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
607591 else throw("Strict value is not equal to itself.")
608592 }
609593 else throw("Strict value is not equal to itself.")
610594 }
611595
612596
613597 @Verifier(tx)
614598 func verify () = {
615599 let targetPublicKey = match managerPublicKeyOrUnit() {
616600 case pk: ByteVector =>
617601 pk
618602 case _: Unit =>
619603 tx.senderPublicKey
620604 case _ =>
621605 throw("Match error")
622606 }
623607 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
624608 }
625609

github/deemru/w8io/169f3d6 
75.87 ms