tx · F516ifH69vbUfArmqfamwC4mzKgmuM16xxxsC7EzrMJ6

3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE:  -0.01800000 Waves

2023.04.18 13:16 [2539861] smart account 3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE > SELF 0.00000000 Waves

{ "type": 13, "id": "F516ifH69vbUfArmqfamwC4mzKgmuM16xxxsC7EzrMJ6", "fee": 1800000, "feeAssetId": null, "timestamp": 1681813001433, "version": 2, "chainId": 84, "sender": "3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE", "senderPublicKey": "G349Uq3FTox7dRNLeAfAQeoACvwZ9iEnVSaHcEYn6j8J", "proofs": [ "4tksTr4RSft2Uk8Gc5gxymEtFxTXUBLxhSoekWXZJnDbBuNg9b317jzqP1P1A8rpc7cwkQHcvF2TvaUku7JekPN8" ], "script": "base64:BgKlGggCEgQKAggBEgASAwoBARIAEgASABIDCgEIEgMKAQgSAwoBCBIFCgMBAQESBQoDAQEBEgASAwoBCBIHCgUICAgICBIDCgEIEgAiA1NFUCIFU0NBTEUiBU1VTFQ4Igp6ZXJvQmlnSW50IhRwcm9jZXNzaW5nU3RhZ2VUb3RhbCIVcHJvY2Vzc2luZ1N0YWdlU2hhcmVzIg5nZXROdW1iZXJCeUtleSIDa2V5Ig9nZXROdW1iZXJPckZhaWwiDmdldFN0cmluZ0J5S2V5Ig9nZXRTdHJpbmdPckZhaWwiA2FicyIDdmFsIglhYnNCaWdJbnQiC2tleU1heERlcHRoIg9tYXhEZXB0aERlZmF1bHQiCG1heERlcHRoIhFrZXlGYWN0b3J5QWRkcmVzcyIRZmFjdG9yeUFkZHJlc3NTdHIiD2ZhY3RvcnlDb250cmFjdCISa2V5RW1pc3Npb25BZGRyZXNzIhlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0IhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0IhNrZXlOdW1Ub1VzZXJNYXBwaW5nIgNudW0iFmtleVJlZmVycmFsUHJvZ3JhbU5hbWUiGnJlZmVycmFsUHJvZ3JhbU5hbWVEZWZhdWx0IhNyZWZlcnJhbFByb2dyYW1OYW1lIhdrZXlSZWZlcnJhbE1pbkdXeEFtb3VudCIbcmVmZXJyYWxNaW5HV3hBbW91bnREZWZhdWx0IhRyZWZlcnJhbE1pbkdXeEFtb3VudCIZa2V5UmVmZXJyZXJSZXdhcmRQZXJtaWxsZSIdcmVmZXJyZXJSZXdhcmRQZXJtaWxsZURlZmF1bHQiFnJlZmVycmVyUmV3YXJkUGVybWlsbGUiGWtleVJlZmVycmFsUmV3YXJkUGVybWlsbGUiHXJlZmVycmFsUmV3YXJkUGVybWlsbGVEZWZhdWx0IhZyZWZlcnJhbFJld2FyZFBlcm1pbGxlIgtrZXlSZWZlcnJlciIPcmVmZXJyYWxBZGRyZXNzIhRrZXlVbmNsYWltZWRSZWZlcnJhbCILcHJvZ3JhbU5hbWUiDmNsYWltZXJBZGRyZXNzIhJlbWlzc2lvbkFkZHJlc3NTdHIiEGVtaXNzaW9uQ29udHJhY3QiDUlkeENmZ0Fzc2V0SWQiFklkeENmZ1BhY2VtYWtlckFkZHJlc3MiFklkeENmZ0Jvb3N0aW5nQ29udHJhY3QiDklkeENmZ01heERlcHRoIglrZXlDb25maWciFXJlYWRDb25maWdBcnJheU9yRmFpbCIMZm9ybWF0Q29uZmlnIgx3eEFzc2V0SWRTdHIiGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyIhpib29zdGluZ0NvbnRyYWN0QWRkcmVzc1N0ciIWYm9vc3RpbmdDb250cmFjdE9yRmFpbCIIY2ZnQXJyYXkiH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQiDWtleVVzZXJzQ291bnQiFmtleVJhdGVQZXJCbG9ja0N1cnJlbnQiGmtleUd3eEhvbGRlcnNSZXdhcmRDdXJyZW50IhdrZXlHd3hIb2xkZXJzUmV3YXJkTmV4dCIUa2V5UG9vbFdlaWdodFZpcnR1YWwiFGtleU5leHRQcm9jZXNzZWRVc2VyIg9rZXlMYXRlc3RQZXJpb2QiDWtleU5leHRQZXJpb2QiEmtleVByb2Nlc3NpbmdTdGFnZSIWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZCIQa2V5VXNlclVuY2xhaW1lZCIJdXNlckluZGV4IhtrZXlOZXh0VW5sYWltZWRQZXJpb2RPZlVzZXIiHGtleUxhc3RQcm9jZXNzZWRQZXJpb2RPZlVzZXIiEmtleUhlaWdodEZvclBlcmlvZCIGcGVyaW9kIh1rZXlBdXhFbWlzc2lvblJld2FyZEZvclBlcmlvZCIXa2V5VG90YWxBbW91bnRGb3JQZXJpb2QiEWtleUxhc3RQYXlvdXRJbmZvIhBQZXJpb2RQYXlvdXRJbmZvIg1tYXRjaGVyUmV3YXJkIg5lbWlzc2lvblJld2FyZCIUa2V5UGF5b3V0SGlzdG9yeUluZm8iF2tleVRvdGFsV2VpZ2h0Rm9yUGVyaW9kIhZrZXlVc2VyS1ZhbHVlRm9yUGVyaW9kIhZrZXlVc2VyQlZhbHVlRm9yUGVyaW9kIhZrZXlVc2VyV2VpZ2h0Rm9yUGVyaW9kIhtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MiHnJlZmVycmFsc0NvbnRyYWN0QWRkcmVzc09yRmFpbCIMSGlzdG9yeUVudHJ5IgR0eXBlIgR1c2VyIgZhbW91bnQiAWkiCmhpc3RvcnlLRVkiC2hpc3RvcnlEQVRBIhNrZXlNYW5hZ2VyUHVibGljS2V5IhprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleSIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIHJG1hdGNoMCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgJwZCICcGsiDmNhbGNVc2VyV2VpZ2h0Ihdib29zdGluZ0NvbnRyYWN0QWRkcmVzcyIPaGVpZ2h0Rm9yUGVyaW9kIgVrTGFzdCIEa0tleSIEa1JhdyILa1VzZXJXZWlnaHQiAWsiAWIiAXciAXAiAnB2IhZjYWxjVXNlcldlaWdodEZvckNsYWltIhB1c2VyV2VpZ2h0T3JVbml0IhVnZXRVc2VySW5kZXhCeUFkZHJlc3MiC3VzZXJBZGRyZXNzIgpuZXh0UGVyaW9kIhFjb21tb25DbGFpbVJld2FyZCIHdXNlcklkeCITdXNlclVuY2xhaW1lZE9wdGlvbiIBdSIOZ1d4QW1vdW50U3RhcnQiCHJlZmVycmVyIhFhY3RpdmVSZWZlcnJhbEludiIPcHJvY2Vzc2luZ1N0YWdlIg1jdXJyZW50UGVyaW9kIgtjdXJyZW50VXNlciIMbGF0ZXN0UGVyaW9kIgp1c2Vyc0NvdW50Ig50b3RhbFdlaWdodEtleSILdG90YWxXZWlnaHQiDSR0MDEyNDE1MTI1MzEiCnVzZXJXZWlnaHQiC3VzZXJBY3Rpb25zIg50b3RhbFdlaWdodE5ldyIRcHJvY2Vzc2luZ0FjdGlvbnMiGnVzZXJBbW91bnRNYXRjaGVyRm9yUGVyaW9kIht1c2VyQW1vdW50RW1pc3Npb25Gb3JQZXJpb2QiD3VzZXJUb3RhbEFtb3VudCILcmVmZXJyYWxJbnYiDnJlZmVycmVyUmV3YXJkIg5yZWZlcnJhbFJld2FyZCIQdW5jbGFpbWVkQWN0aW9ucyIHY291bnRlciIGcmVzdWx0IgFAIgtjaGVja0NhbGxlciIGZGVsdGFIIgxlbWlzc2lvblJhdGUiF2d3eEhvbGRlcnNSZXdhcmRDdXJyZW50IglhdXhBbW91bnQiAmVtIgttYXRjaGVyUGFydCIKcGF5b3V0SW5mbyIXZ3d4SG9sZGVyc1Jld2FyZFVwZGF0ZWQiC3RvdGFsUmV3YXJkIgdhY3Rpb25zIgdhZGRyZXNzIg0kdDAxNzcyMDE3NzcwIgtjaGVja0Ftb3VudCISYW1vdW50RnJvbUVtaXNzaW9uIg9jbGFpbWVkUmVmZXJyYWwiC3RvdGFsQW1vdW50Ig0kdDAxODM0MzE4MzkzIhFyZWZlcnJhbFVuY2xhaW1lZCIOZ3d4QW1vdW50U3RhcnQiD2xvY2tTdGFydEhlaWdodCISbG9ja0R1cmF0aW9uQmxvY2tzIg1sb2NrRW5kSGVpZ2h0IgxzY2FsZThQYXJhbUsiDHNjYWxlOFBhcmFtQiIMd3hMb2NrQW1vdW50Igxsb2NrRHVyYXRpb24iD21heExvY2tEdXJhdGlvbiIHY29lZmZYOCILeDFCaWdJbnRTdHIiC3gyQmlnSW50U3RyIgxhbXBCaWdJbnRTdHIiE2FQcmVjaXNpb25CaWdJbnRTdHIiGHRhcmdldFByZWNpc2lvbkJpZ0ludFN0ciIGbkNvaW5zIgphUHJlY2lzaW9uIg90YXJnZXRQcmVjaXNpb24iAngxIgJ4MiIDYW1wIgNhbm4iA2FyciIEY2FsYyIDYWNjIgNjdXIiDSR0MDIxMDI2MjEwNTMiAWQiBWRQcmV2IgVmb3VuZCICZHAiBWROZXh0IgVkRGlmZiINJHQwMjE2NTEyMTcxNCICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IhVjaGVja01hbmFnZXJQdWJsaWNLZXkiAnBtIgVoYXNQTSIHY2hlY2tQTSICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5UwABYQICX18AAWIA6AcAAWMAgMLXLwABZAkAtgIBAAAAAWUAAAABZgABAQFnAQFoCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWgAAAEBaQEBaAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFAWgJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FAWgCDyBpcyBub3QgZGVmaW5lZAEBagEBaAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQFoAgABAWsBAWgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQFoCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQFoAg8gaXMgbm90IGRlZmluZWQBAWwBAW0DCQBmAgAABQFtCQEBLQEFAW0FAW0BAW4BAW0DCQC/AgIFAWQFAW0JAL4CAQUBbQUBbQABbwIMJXNfX21heERlcHRoAAFwAB4AAXEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBbwUBcAEBcgACHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MAAXMJAQFrAQkBAXIAAAF0CQERQGV4dHJOYXRpdmUoMTA2MikBBQFzAQF1AAIdJXMlc19fY29uZmlnX19lbWlzc2lvbkFkZHJlc3MBAXYACQC5CQIJAMwIAgICJXMJAMwIAgIWdm90aW5nRW1pc3Npb25Db250cmFjdAUDbmlsBQFhAAF3CQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQF0CQEBdgABAXgBAXkJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIHbWFwcGluZwkAzAgCAghudW0ydXNlcgkAzAgCCQCkAwEFAXkFA25pbAUBYQABegkAuQkCCQDMCAICBCVzJXMJAMwIAgIIcmVmZXJyYWwJAMwIAgILcHJvZ3JhbU5hbWUFA25pbAUBYQABQQIGd3hsb2NrAAFCCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAXoFAUEAAUMJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICDG1pbkdXeEFtb3VudAUDbmlsBQFhAAFECQBoAgD0AwUBYwABRQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFDBQFEAAFGCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAhZyZWZlcnJlclJld2FyZFBlcm1pbGxlBQNuaWwFAWEAAUcAMgABSAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFGBQFHAAFJCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAhZyZWZlcnJhbFJld2FyZFBlcm1pbGxlBQNuaWwFAWEAAUoAMgABSwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFJBQFKAQFMAQFNCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICCHJlZmVycmVyCQDMCAIFAUIJAMwIAgUBTQUDbmlsBQFhAQFOAgFPAVAJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIRdW5jbGFpbWVkUmVmZXJyYWwJAMwIAgUBTwkAzAgCBQFQBQNuaWwFAWEAAVEJAQFrAQkBAXUAAAFSCQERQGV4dHJOYXRpdmUoMTA2MikBBQFRAAFTAAEAAVQAAgABVQADAAFWAAQBAVcAAgolc19fY29uZmlnAQFYAAkAtQkCCQEBawEJAQFXAAUBYQEBWQQBWgJhYQJhYgFxCQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgUBWgkAzAgCBQJhYQkAzAgCBQJhYgkAzAgCCQCkAwEFAXEFA25pbAUBYQECYWMABAJhZAkBAVgACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJhZAUBVQIoYm9vc3RpbmcgY29udHJhY3QgYWRkcmVzcyBpcyBub3QgZGVmaW5lZAECYWUAAiglcyVzX19nd3hSZXdhcmRFbWlzc2lvblBhcnRfX3N0YXJ0SGVpZ2h0AQJhZgACDyVzX19uZXh0VXNlck51bQECYWcAAhslcyVzX19yYXRlUGVyQmxvY2tfX2N1cnJlbnQBAmFoAAIfJXMlc19fZ3d4SG9sZGVyc1Jld2FyZF9fY3VycmVudAECYWkAAhwlcyVzX19nd3hIb2xkZXJzUmV3YXJkX19uZXh0AQJhagACICVzJXNfX3Bvb2xXZWlnaHRfX0dXWHZpcnR1YWxQT09MAQJhawACFSVzX19uZXh0UHJvY2Vzc2VkVXNlcgECYWwAAhAlc19fbGF0ZXN0UGVyaW9kAQJhbQACDiVzX19uZXh0UGVyaW9kAQJhbgACEyVzX19wcm9jZXNzaW5nU3RhZ2UBAmFvAAIXJXNfX25leHRQcm9jZXNzZWRQZXJpb2QBAmFwAQJhcQkAuQkCCQDMCAICBCVzJWQJAMwIAgINdXNlclVuY2xhaW1lZAkAzAgCCQCkAwEFAmFxBQNuaWwFAWEBAmFyAQJhcQkAuQkCCQDMCAICFyVzJWRfX25leHRDbGFpbWVkUGVyaW9kCQDMCAIJAKQDAQUCYXEFA25pbAUBYQECYXMBAmFxCQC5CQIJAMwIAgIZJXMlZF9fbGFzdFByb2Nlc3NlZFBlcmlvZAkAzAgCCQCkAwEFAmFxBQNuaWwFAWEBAmF0AQJhdQkAuQkCCQDMCAICGiVzJWRfX3N0YXJ0SGVpZ2h0Rm9yUGVyaW9kCQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYXYBAmF1CQC5CQIJAMwIAgIXJXMlZF9fYXV4RW1pc3Npb25SZXdhcmQJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJhdwECYXUJALkJAgkAzAgCAholcyVkX190b3RhbEFtb3VudEZvclBlcmlvZAkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmF4AAISJXNfX2xhc3RQYXlvdXRJbmZvAQJheQMCYXUCYXoCYUEJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgkApAMBBQJhdQkAzAgCCQCkAwEFAmF6CQDMCAIJAKQDAQUCYUEFA25pbAUBYQECYUIBAmF1CQC5CQIJAMwIAgIYJXMlcyVkX19wYXlvdXRzX19oaXN0b3J5CQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYUMBAmF1CQC5CQIJAMwIAgIaJXMlZF9fdG90YWxXZWlnaHRGb3JQZXJpb2QJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJhRAICYXUCYXEJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCCQCkAwEFAmFxCQDMCAICAWsJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJhRQICYXUCYXEJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCCQCkAwEFAmFxCQDMCAICAWIJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJhRgICYXUCYXEJALkJAgkAzAgCAhclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkAzAgCCQCkAwEFAmFxCQDMCAICBndlaWdodAkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmFHAAkAuQkCCQDMCAICBCVzJXMJAMwIAgIGY29uZmlnCQDMCAICGHJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcwUDbmlsBQFhAAJhSAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAWsBCQECYUcAAQJhSQQCYUoCYUsCYUwCYU0EAmFOCQC5CQIJAMwIAgIRJXMlcyVzJXNfX2hpc3RvcnkJAMwIAgUCYUoJAMwIAgUCYUsJAMwIAgkA2AQBCAUCYU0NdHJhbnNhY3Rpb25JZAUDbmlsBQFhBAJhTwkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQJhTAUDbmlsBQFhCQELU3RyaW5nRW50cnkCBQJhTgUCYU8BAmFQAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAmFRAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQJhUgAEAmFTCQCiCAEJAQJhUAADCQABAgUCYVMCBlN0cmluZwQCYVQFAmFTCQDZBAEFAmFUAwkAAQIFAmFTAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmFVAAQCYVMJAKIIAQkBAmFRAAMJAAECBQJhUwIGU3RyaW5nBAJhVAUCYVMJANkEAQUCYVQDCQABAgUCYVMCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYVYBAmFNBAJhVwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJhUwkBAmFSAAMJAAECBQJhUwIKQnl0ZVZlY3RvcgQCYVgFAmFTAwkAAAIIBQJhTQ9jYWxsZXJQdWJsaWNLZXkFAmFYBgUCYVcDCQABAgUCYVMCBFVuaXQDCQAAAggFAmFNBmNhbGxlcgUEdGhpcwYFAmFXCQACAQILTWF0Y2ggZXJyb3IBAmFZBAJhWgJiYQJhdQJhcQQCYmIJAQJhcwEFAmFxBAJiYwkBAmFEAgUCYXUFAmFxBAJiZAkAmggCBQJhWgUCYmMEAmJlCQECYUYCBQJhdQUCYXEDCQEJaXNEZWZpbmVkAQUCYmQEAmJmCQEFdmFsdWUBBQJiZAQCYmcJAQV2YWx1ZQEJAJoIAgUCYVoJAQJhRQIFAmF1BQJhcQQCYmgJAGQCCQBoAgUCYmYFAmJhBQJiZwMJAGYCBQJiaAAACQCUCgIJAGkCBQJiaAUBYgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYmIFAmF1CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJiZQUCYmgFA25pbAkAlAoCAAAFA25pbAQCYmkJAJoIAgUEdGhpcwUCYmIDAwkBCWlzRGVmaW5lZAEFAmJpCQBnAgUCYXUJAQV2YWx1ZQEFAmJpBwQCYmoJAQV2YWx1ZQEFAmJpBAJiZgkBBXZhbHVlAQkAmggCBQJhWgkBAmFEAgUCYmoFAmFxBAJiZwkBBXZhbHVlAQkAmggCBQJhWgkBAmFFAgUCYmoFAmFxBAJiaAkAZAIJAGgCBQJiZgUCYmEFAmJnAwkAZgIFAmJoAAAJAJQKAgkAaQIFAmJoBQFiCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJiZQUCYmgFA25pbAkAlAoCAAAFA25pbAkAlAoCAAAFA25pbAECYmsEAmFaAmJhAmF1AmFxBAJiZQkBAmFGAgUCYXUFAmFxBAJibAkAnwgBBQJiZQQCYVMFAmJsAwkAAQIFAmFTAgRVbml0AAADCQABAgUCYVMCA0ludAQCYmgFAmFTCQBpAgUCYmgFAWIJAAIBAgtNYXRjaCBlcnJvcgECYm0CAmFiAmJuBAFoCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICB21hcHBpbmcJAMwIAgIIdXNlcjJudW0JAMwIAgUCYm4FA25pbAUBYQkBDXBhcnNlSW50VmFsdWUBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBB0FkZHJlc3MBCQDZBAEFAmFiBQFoCQCsAgIJAKwCAgkArAICAg1Vc2VyIGFkZHJlc3MgBQJibgItIGlzIG5vdCBmb3VuZCBpbiBib29zdGluZyBjb250cmFjdCBkYXRhLCBrZXk9BQFoAQJibwAJAQFnAQkBAmFtAAECYnABAmJuBAJhZAkBAVgABAJicQkBAmJtAgkAkQMCBQJhZAUBVQUCYm4EAmJyCQCfCAEJAQJhcAEFAmJxBAJhUwUCYnIDCQABAgUCYVMCBFVuaXQJAJQKAgAABQNuaWwDCQABAgUCYVMCA0ludAQCYnMFAmFTCQCUCgIFAmJzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXABBQJicQAABQNuaWwJAAIBAgtNYXRjaCBlcnJvchACYU0BFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkCAmJuAmJ0BAJidQkAnQgCBQJhSAkBAUwBBQJibgQCYnYDCQAAAgUCYnUFBHVuaXQFBHVuaXQJAPwHBAUCYUgCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgUBQgkAzAgCBQJibgkAzAgCCQBnAgUCYnQFAUUFA25pbAUDbmlsAwkAAAIFAmJ2BQJidgkAlAoCBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU0BDmZpbmFsaXplSGVscGVyAAQCYncJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAmFuAAUBZQQCYngJAQFnAQkBAmFvAAQCYnkJAQFnAQkBAmFrAAQCYnoJAQFnAQkBAmFsAAQCYkEJAQt2YWx1ZU9yRWxzZQIJAJoIAgkBAmFjAAkBAmFmAAAABAJiQgkBAmFDAQUCYngEAmJDCQEBZwEJAQJhQwEFAmJ4BAJiYQkBAWcBCQECYXQBBQJieAMJAGYCBQJieAUCYnoJAJQKAgUDbmlsBwMJAAACBQJidwUBZQQCYkQJAQJhWQQJAQJhYwAFAmJhBQJieAUCYnkEAmJFCAUCYkQCXzEEAmJGCAUCYkQCXzIEAmJHCQBkAgUCYkMFAmJFBAJiSAMJAGYCCQBlAgUCYkEAAQUCYnkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhawAJAGQCBQJieQABBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbgAFAWYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhawAAAAUDbmlsCQCUCgIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJiQgUCYkcFA25pbAUCYkgFAmJGBgMJAAACBQJidwUBZgQCYkUJAQJiawQJAQJhYwAFAmJhBQJieAUCYnkEAmJJCQBrAwkBAWcBCQECYXcBBQJieAUCYkUFAmJDBAJiSgkAawMJAQFnAQkBAmF2AQUCYngFAmJFBQJiQwQCYksJAGQCBQJiSgUCYkkEAmJyCQCfCAEJAQJhcAEFAmJ5BAJibgkBEUBleHRyTmF0aXZlKDEwNTMpAgkBAmFjAAkBAXgBBQJieQQCYnUJAJ0IAgUCYUgJAQFMAQUCYm4EAmJ2AwkAAAIFAmJ1BQR1bml0BQR1bml0CQD8BwQFAmFIAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIFAUIJAMwIAgUCYm4JAMwIAgkAZwIFAmJFBQFFBQNuaWwFA25pbAMJAAACBQJidgUCYnYEAmJMAwMJAAACBQJidQUEdW5pdAYJAGYCBQFFBQJiRQUEdW5pdAQCYk0JAGsDBQJiSwUBSAUBYgQCYk4JAGsDBQJiSwUBSwUBYgkA/AcEBQJhSAIMaW5jVW5jbGFpbWVkCQDMCAIFAUIJAMwIAgUCYm4JAMwIAgUCYk0JAMwIAgUCYk4FA25pbAUDbmlsAwkAAAIFAmJMBQJiTAQCYk8JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcAEFAmJ5CQBkAgkBC3ZhbHVlT3JFbHNlAgUCYnIAAAUCYksFA25pbAQCYkgDCQBmAgkAZQIFAmJBAAEFAmJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWsACQBkAgUCYnkAAQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYW8ACQBkAgUCYngAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFrAAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhbgAFA25pbAkAlAoCCQDOCAIFAmJPBQJiSAYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAhhpbnZhbGlkIHByb2Nlc3Npbmcgc3RhZ2UCYU0BD2ZpbmFsaXplV3JhcHBlcgECYlAEAmJRCgACYlIJAPwHBAUEdGhpcwIOZmluYWxpemVIZWxwZXIFA25pbAUDbmlsAwkAAQIFAmJSAgdCb29sZWFuBQJiUgkAAgEJAKwCAgkAAwEFAmJSAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuAwkAAAIFAmJRBQJiUQMJAQEhAQUCYlEDCQAAAgUCYlAFAXEJAAIBAhJOb3RoaW5nIHRvIHByb2Nlc3MJAJQKAgUDbmlsBQR1bml0AwkAZgIFAmJQAAAJAJQKAgUDbmlsCQD8BwQFBHRoaXMCD2ZpbmFsaXplV3JhcHBlcgkAzAgCCQBlAgUCYlAAAQUDbmlsBQNuaWwJAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNAR1wcm9jZXNzUGVuZGluZ1BlcmlvZHNBbmRVc2VycwAJAJQKAgUDbmlsCQD8BwQFBHRoaXMCD2ZpbmFsaXplV3JhcHBlcgkAzAgCBQFxBQNuaWwFA25pbAJhTQEHZGVwb3NpdAAEAmJTAwkAAAIIBQJhTQZjYWxsZXIFAXcGCQECYVYBBQJhTQMJAAACBQJiUwUCYlMEAmF1CQECYm8ABAJiVAkAZQIFBmhlaWdodAkBAWkBCQECYWUABAJiVQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAVIJAQJhZwAJAKwCAgkArAICAhxtYW5kYXRvcnkgZW1pc3Npb25fY29udHJhY3QuCQECYWcAAg8gaXMgbm90IGRlZmluZWQEAmJWCQELdmFsdWVPckVsc2UCCQCaCAIFAVIJAQJhaAAAAAMJAAACBQJiVgUCYlYEAmJXCQBrAwkAaAIFAmJUBQJiVgUCYlUFAWMEAmJYAwkAZgIFAmJXAAAJAPwHBAUBUgIEZW1pdAkAzAgCBQJiVwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCYlgFAmJYBAJiWQAABAJiWgkBAmF5AwUCYXUFAmJZBQJiVwQCY2EKAAJiUgkA/AcEBQFSAhZnd3hIb2xkZXJzUmV3YXJkVXBkYXRlBQNuaWwFA25pbAMJAAECBQJiUgIHQm9vbGVhbgUCYlIJAAIBCQCsAgIJAAMBBQJiUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgMJAAACBQJjYQUCY2EEAmNiCQBkAgUCYlkFAmJXBAJjYwMDCQAAAgUCY2IAAAkBASEBBQJjYQcFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFsAAUCYXUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhdAEFAmF1BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhdgEFAmF1BQJiVwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFlAAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXcBBQJhdQUCYlkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbQAJAGQCBQJhdQABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJheAAFAmJaCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhQgEFAmF1BQJiWgUDbmlsCQCUCgIFAmNjBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNAQtjbGFpbVJld2FyZAAEAmFkCQEBWAAEAmNkCQClCAEIBQJhTQZjYWxsZXIEAmNlCQECYnABBQJjZAQCYUwIBQJjZQJfMQQCY2MIBQJjZQJfMgQCY2YDCQBmAgUCYUwAAAYJAAIBAhBOb3RoaW5nIHRvIGNsYWltAwkAAAIFAmNmBQJjZgQCY2cAAAQCY2gKAAJiUgkA/AcEBQJhSAIFY2xhaW0JAMwIAgUBQgUDbmlsBQNuaWwDCQABAgUCYlICA0ludAUCYlIJAAIBCQCsAgIJAAMBBQJiUgIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAJjaQkAZAIFAmFMBQJjaAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmFNBmNhbGxlcgUCY2kJANkEAQkAkQMCBQJhZAUBUwkAzAgCCQECYUkEAgVjbGFpbQUCY2QFAmFMBQJhTQUDbmlsBQJjYwkAzAgCBQJjaQkAzAgCBQJjZwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNARNjbGFpbVJld2FyZFJFQURPTkxZAQJjZAQCY2oJAQJicAEFAmNkBAJhTAgFAmNqAl8xBAJjYwgFAmNqAl8yBAJjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQJhSAkBAU4CBQFCBQJjZAAABAJjaQkAZAIFAmFMBQJjawkAlAoCBQNuaWwFAmNpAmFNAR1sYXRlc3RGaW5hbGl6ZWRQZXJpb2RSRUFET05MWQECY2QJAJQKAgUDbmlsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhbAAA////////////AQJhTQEhbGF0ZXN0RmluYWxpemVkUGVyaW9kSW5mb1JFQURPTkxZAQJjZAkAlAoCBQNuaWwJAQFqAQkBAmF4AAJhTQEVY2FsY0d3eFBhcmFtc1JFQURPTkxZAwJjbAJjbQJjbgQCY28JAGQCBQJjbQUCY24EAmNwCQEBLQEJAGsDBQJjbAUBYgUCY24EAmNxCQBoAgkAawMFAmNsBQFiBQJjbgUCY28JAJQKAgUDbmlsCQDMCAIFAmNwCQDMCAIFAmNxCQDMCAIJAQJibwAFA25pbAJhTQEaY2FsY0d3eEFtb3VudFN0YXJ0UkVBRE9OTFkDAmNyAmNzAmN0BAJjdQkAawMFAmNzBQFjBQJjdAQCYnQJAGsDBQJjcgUCY3UFAWMJAJQKAgUDbmlsCQDMCAIFAmJ0BQNuaWwCYU0BFW9uRW1pc3Npb25Gb3JHd3hTdGFydAADCQECIT0CCAUCYU0GY2FsbGVyBQF0CQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWUABQZoZWlnaHQFA25pbAJhTQEjbGF0ZXN0UGVyaW9kRW1pc3Npb25SZXdhcmRzUkVBRE9OTFkBAmNkBAJhdQkBAmJvAAkAlAoCBQNuaWwJAMwIAgkBAWcBCQECYXYBBQJhdQUDbmlsAmFNAQVjYWxjRAUCY3YCY3cCY3gCY3kCY3oEAmNBCQC2AgEAAgQCY0IJAKcDAQUCY3kEAmNDCQCnAwEFAmN6BAJjRAkApwMBBQJjdgQCY0UJAKcDAQUCY3cEAmNGCQC5AgIJAKcDAQUCY3gFAmNCBAJhVAkAtwICBQJjRAUCY0UDCQAAAgUCYVQFAWQJAJQKAgUDbmlsCQCmAwEFAWQEAmNHCQC5AgIFAmNGBQJjQQQCY0gJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGBQNuaWwKAQJjSQICY0oCY0sEAmNMBQJjSgQCY00IBQJjTAJfMQQCY04IBQJjTAJfMgQCY08IBQJjTAJfMwMJAQIhPQIFAmNPBQR1bml0BQJjSgQCY1AJALoCAgkAuQICCQC5AgIFAmNNBQJjTQUCY00JALkCAgkAuQICCQC5AgIFAmNEBQJjRQUCY0EFAmNBBAJjUQkAugICCQC5AgIJALcCAgkAugICCQC5AgIFAmNHBQJhVAUCY0IJALkCAgUCY1AFAmNBBQJjTQkAtwICCQC6AgIJALkCAgkAuAICBQJjRwUCY0IFAmNNBQJjQgkAuQICCQC3AgIFAmNBCQC2AgEAAQUCY1AEAmNSCQEBbgEJALgCAgUCY1EJAQV2YWx1ZQEFAmNNAwkAwAICBQJjQwUCY1IJAJUKAwUCY1EFAmNNBQJjSwkAlQoDBQJjUQUCY00FBHVuaXQEAmNTCgACY1QFAmNICgACY1UJAJADAQUCY1QKAAJjVgkAlQoDBQJhVAUEdW5pdAUEdW5pdAoBAmNXAgJjWAJjWQMJAGcCBQJjWQUCY1UFAmNYCQECY0kCBQJjWAkAkQMCBQJjVAUCY1kKAQJjWgICY1gCY1kDCQBnAgUCY1kFAmNVBQJjWAkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDcJAQJjWgIJAQJjVwIJAQJjVwIJAQJjVwIJAQJjVwIJAQJjVwIJAQJjVwIJAQJjVwIFAmNWAAAAAQACAAMABAAFAAYABwQCY1EIBQJjUwJfMQQCY04IBQJjUwJfMgQCY08IBQJjUwJfMwMJAQIhPQIFAmNPBQR1bml0CQCUCgIFA25pbAkApgMBBQJjUQQCY1IJAQFuAQkAuAICBQJjUQkBBXZhbHVlAQUCY04JAAIBCQCsAgICHUQgY2FsY3VsYXRpb24gZXJyb3IsIGREaWZmID0gCQCmAwEFAmNSAmFNAQpzZXRNYW5hZ2VyAQJkYQQCYlMJAQJhVgEFAmFNAwkAAAIFAmJTBQJiUwQCZGIJANkEAQUCZGEDCQAAAgUCZGIFAmRiCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhUQAFAmRhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU0BDmNvbmZpcm1NYW5hZ2VyAAQCZGMJAQJhVQAEAmRkAwkBCWlzRGVmaW5lZAEFAmRjBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJkZAUCZGQEAmRlAwkAAAIIBQJhTQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmRjBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJkZQUCZGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFQAAkA2AQBCQEFdmFsdWUBBQJkYwkAzAgCCQELRGVsZXRlRW50cnkBCQECYVEABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmRmAQJkZwAEAmRoBAJhUwkBAmFSAAMJAAECBQJhUwIKQnl0ZVZlY3RvcgQCYVgFAmFTBQJhWAMJAAECBQJhUwIEVW5pdAgFAmRmD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJkZglib2R5Qnl0ZXMJAJEDAggFAmRmBnByb29mcwAABQJkaN5vt30=", "height": 2539861, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fjy5zC31WL1bKgvRC7dEx4yMMbErWjVvPvHDaNynFMmx Next: 7XZdzfB3UDxSNaT5fGVgffHP3ZCa4PhVm4ErnowPNAaP Diff:
OldNewDifferences
427427 let deltaH = (height - getNumberOrFail(keyGwxRewardEmissionStartHeight()))
428428 let emissionRate = valueOrErrorMessage(getInteger(emissionContract, keyRatePerBlockCurrent()), (("mandatory emission_contract." + keyRatePerBlockCurrent()) + " is not defined"))
429429 let gwxHoldersRewardCurrent = valueOrElse(getInteger(emissionContract, keyGwxHoldersRewardCurrent()), 0)
430- let auxAmount = fraction((deltaH * gwxHoldersRewardCurrent), emissionRate, MULT8)
431- let em = if ((auxAmount > 0))
432- then invoke(emissionContract, "emit", [auxAmount], nil)
433- else unit
434- if ((em == em))
430+ if ((gwxHoldersRewardCurrent == gwxHoldersRewardCurrent))
435431 then {
436- let matcherPart = 0
437- let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
438- let gwxHoldersRewardUpdate = invoke(emissionContract, "gwxHoldersRewardUpdate", nil, nil)
439- if ((gwxHoldersRewardUpdate == gwxHoldersRewardUpdate))
432+ let auxAmount = fraction((deltaH * gwxHoldersRewardCurrent), emissionRate, MULT8)
433+ let em = if ((auxAmount > 0))
434+ then invoke(emissionContract, "emit", [auxAmount], nil)
435+ else unit
436+ if ((em == em))
440437 then {
441- let totalReward = (matcherPart + auxAmount)
442- let actions = if ((totalReward == 0))
443- then nil
444- else [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)]
445- $Tuple2(actions, unit)
438+ let matcherPart = 0
439+ let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
440+ let gwxHoldersRewardUpdated = {
441+ let @ = invoke(emissionContract, "gwxHoldersRewardUpdate", nil, nil)
442+ if ($isInstanceOf(@, "Boolean"))
443+ then @
444+ else throw(($getType(@) + " couldn't be cast to Boolean"))
445+ }
446+ if ((gwxHoldersRewardUpdated == gwxHoldersRewardUpdated))
447+ then {
448+ let totalReward = (matcherPart + auxAmount)
449+ let actions = if (if ((totalReward == 0))
450+ then !(gwxHoldersRewardUpdated)
451+ else false)
452+ then nil
453+ else [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)]
454+ $Tuple2(actions, unit)
455+ }
456+ else throw("Strict value is not equal to itself.")
446457 }
447458 else throw("Strict value is not equal to itself.")
448459 }
457468 func claimReward () = {
458469 let cfgArray = readConfigArrayOrFail()
459470 let address = toString(i.caller)
460- let $t01767117721 = commonClaimReward(address)
461- let amount = $t01767117721._1
462- let actions = $t01767117721._2
471+ let $t01772017770 = commonClaimReward(address)
472+ let amount = $t01772017770._1
473+ let actions = $t01772017770._2
463474 let checkAmount = if ((amount > 0))
464475 then true
465476 else throw("Nothing to claim")
482493
483494 @Callable(i)
484495 func claimRewardREADONLY (address) = {
485- let $t01829418344 = commonClaimReward(address)
486- let amount = $t01829418344._1
487- let actions = $t01829418344._2
496+ let $t01834318393 = commonClaimReward(address)
497+ let amount = $t01834318393._1
498+ let actions = $t01834318393._2
488499 let referralUnclaimed = valueOrElse(getInteger(referralsContractAddressOrFail, keyUnclaimedReferral(referralProgramName, address)), 0)
489500 let totalAmount = (amount + referralUnclaimed)
490501 $Tuple2(nil, totalAmount)
551562 let ann = (amp * nCoins)
552563 let arr = [0, 1, 2, 3, 4, 5, 6]
553564 func calc (acc,cur) = {
554- let $t02097721004 = acc
555- let d = $t02097721004._1
556- let dPrev = $t02097721004._2
557- let found = $t02097721004._3
565+ let $t02102621053 = acc
566+ let d = $t02102621053._1
567+ let dPrev = $t02102621053._2
568+ let found = $t02102621053._3
558569 if ((found != unit))
559570 then acc
560571 else {
567578 }
568579 }
569580
570- let $t02160221665 = {
581+ let $t02165121714 = {
571582 let $l = arr
572583 let $s = size($l)
573584 let $acc0 = $Tuple3(s, unit, unit)
581592
582593 $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)
583594 }
584- let dNext = $t02160221665._1
585- let dPrev = $t02160221665._2
586- let found = $t02160221665._3
595+ let dNext = $t02165121714._1
596+ let dPrev = $t02165121714._2
597+ let found = $t02165121714._3
587598 if ((found != unit))
588599 then $Tuple2(nil, toString(dNext))
589600 else {
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
2828 func abs (val) = if ((0 > val))
2929 then -(val)
3030 else val
3131
3232
3333 func absBigInt (val) = if ((zeroBigInt > val))
3434 then -(val)
3535 else val
3636
3737
3838 let keyMaxDepth = "%s__maxDepth"
3939
4040 let maxDepthDefault = 30
4141
4242 let maxDepth = valueOrElse(getInteger(this, keyMaxDepth), maxDepthDefault)
4343
4444 func keyFactoryAddress () = "%s%s__config__factoryAddress"
4545
4646
4747 let factoryAddressStr = getStringOrFail(keyFactoryAddress())
4848
4949 let factoryContract = addressFromStringValue(factoryAddressStr)
5050
5151 func keyEmissionAddress () = "%s%s__config__emissionAddress"
5252
5353
5454 func keyVotingEmissionContract () = makeString(["%s", "votingEmissionContract"], SEP)
5555
5656
5757 let votingEmissionContract = addressFromStringValue(getStringValue(factoryContract, keyVotingEmissionContract()))
5858
5959 func keyNumToUserMapping (num) = makeString(["%s%s%s", "mapping", "num2user", toString(num)], SEP)
6060
6161
6262 let keyReferralProgramName = makeString(["%s%s", "referral", "programName"], SEP)
6363
6464 let referralProgramNameDefault = "wxlock"
6565
6666 let referralProgramName = valueOrElse(getString(this, keyReferralProgramName), referralProgramNameDefault)
6767
6868 let keyReferralMinGWxAmount = makeString(["%s%s", "referral", "minGWxAmount"], SEP)
6969
7070 let referralMinGWxAmountDefault = (500 * MULT8)
7171
7272 let referralMinGWxAmount = valueOrElse(getInteger(this, keyReferralMinGWxAmount), referralMinGWxAmountDefault)
7373
7474 let keyReferrerRewardPermille = makeString(["%s%s", "referral", "referrerRewardPermille"], SEP)
7575
7676 let referrerRewardPermilleDefault = 50
7777
7878 let referrerRewardPermille = valueOrElse(getInteger(this, keyReferrerRewardPermille), referrerRewardPermilleDefault)
7979
8080 let keyReferralRewardPermille = makeString(["%s%s", "referral", "referralRewardPermille"], SEP)
8181
8282 let referralRewardPermilleDefault = 50
8383
8484 let referralRewardPermille = valueOrElse(getInteger(this, keyReferralRewardPermille), referralRewardPermilleDefault)
8585
8686 func keyReferrer (referralAddress) = makeString(["%s%s%s", "referrer", referralProgramName, referralAddress], SEP)
8787
8888
8989 func keyUnclaimedReferral (programName,claimerAddress) = makeString(["%s%s%s", "unclaimedReferral", programName, claimerAddress], SEP)
9090
9191
9292 let emissionAddressStr = getStringOrFail(keyEmissionAddress())
9393
9494 let emissionContract = addressFromStringValue(emissionAddressStr)
9595
9696 let IdxCfgAssetId = 1
9797
9898 let IdxCfgPacemakerAddress = 2
9999
100100 let IdxCfgBoostingContract = 3
101101
102102 let IdxCfgMaxDepth = 4
103103
104104 func keyConfig () = "%s__config"
105105
106106
107107 func readConfigArrayOrFail () = split(getStringOrFail(keyConfig()), SEP)
108108
109109
110110 func formatConfig (wxAssetIdStr,matcherPacemakerAddressStr,boostingContractAddressStr,maxDepth) = makeString(["%s%s%s%d", wxAssetIdStr, matcherPacemakerAddressStr, boostingContractAddressStr, toString(maxDepth)], SEP)
111111
112112
113113 func boostingContractOrFail () = {
114114 let cfgArray = readConfigArrayOrFail()
115115 valueOrErrorMessage(addressFromString(cfgArray[IdxCfgBoostingContract]), "boosting contract address is not defined")
116116 }
117117
118118
119119 func keyGwxRewardEmissionStartHeight () = "%s%s__gwxRewardEmissionPart__startHeight"
120120
121121
122122 func keyUsersCount () = "%s__nextUserNum"
123123
124124
125125 func keyRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
126126
127127
128128 func keyGwxHoldersRewardCurrent () = "%s%s__gwxHoldersReward__current"
129129
130130
131131 func keyGwxHoldersRewardNext () = "%s%s__gwxHoldersReward__next"
132132
133133
134134 func keyPoolWeightVirtual () = "%s%s__poolWeight__GWXvirtualPOOL"
135135
136136
137137 func keyNextProcessedUser () = "%s__nextProcessedUser"
138138
139139
140140 func keyLatestPeriod () = "%s__latestPeriod"
141141
142142
143143 func keyNextPeriod () = "%s__nextPeriod"
144144
145145
146146 func keyProcessingStage () = "%s__processingStage"
147147
148148
149149 func keyNextProcessedPeriod () = "%s__nextProcessedPeriod"
150150
151151
152152 func keyUserUnclaimed (userIndex) = makeString(["%s%d", "userUnclaimed", toString(userIndex)], SEP)
153153
154154
155155 func keyNextUnlaimedPeriodOfUser (userIndex) = makeString(["%s%d__nextClaimedPeriod", toString(userIndex)], SEP)
156156
157157
158158 func keyLastProcessedPeriodOfUser (userIndex) = makeString(["%s%d__lastProcessedPeriod", toString(userIndex)], SEP)
159159
160160
161161 func keyHeightForPeriod (period) = makeString(["%s%d__startHeightForPeriod", toString(period)], SEP)
162162
163163
164164 func keyAuxEmissionRewardForPeriod (period) = makeString(["%s%d__auxEmissionReward", toString(period)], SEP)
165165
166166
167167 func keyTotalAmountForPeriod (period) = makeString(["%s%d__totalAmountForPeriod", toString(period)], SEP)
168168
169169
170170 func keyLastPayoutInfo () = "%s__lastPayoutInfo"
171171
172172
173173 func PeriodPayoutInfo (period,matcherReward,emissionReward) = makeString(["%d%d%d", toString(period), toString(matcherReward), toString(emissionReward)], SEP)
174174
175175
176176 func keyPayoutHistoryInfo (period) = makeString(["%s%s%d__payouts__history", toString(period)], SEP)
177177
178178
179179 func keyTotalWeightForPeriod (period) = makeString(["%s%d__totalWeightForPeriod", toString(period)], SEP)
180180
181181
182182 func keyUserKValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "k", toString(period)], SEP)
183183
184184
185185 func keyUserBValueForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "b", toString(period)], SEP)
186186
187187
188188 func keyUserWeightForPeriod (period,userIndex) = makeString(["%s%d%s%d__paramByPeriod", toString(userIndex), "weight", toString(period)], SEP)
189189
190190
191191 func keyReferralsContractAddress () = makeString(["%s%s", "config", "referralsContractAddress"], SEP)
192192
193193
194194 let referralsContractAddressOrFail = addressFromStringValue(getStringOrFail(keyReferralsContractAddress()))
195195
196196 func HistoryEntry (type,user,amount,i) = {
197197 let historyKEY = makeString(["%s%s%s%s__history", type, user, toBase58String(i.transactionId)], SEP)
198198 let historyDATA = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amount)], SEP)
199199 StringEntry(historyKEY, historyDATA)
200200 }
201201
202202
203203 func keyManagerPublicKey () = "%s__managerPublicKey"
204204
205205
206206 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
207207
208208
209209 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
210210 case s: String =>
211211 fromBase58String(s)
212212 case _: Unit =>
213213 unit
214214 case _ =>
215215 throw("Match error")
216216 }
217217
218218
219219 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
220220 case s: String =>
221221 fromBase58String(s)
222222 case _: Unit =>
223223 unit
224224 case _ =>
225225 throw("Match error")
226226 }
227227
228228
229229 func mustManager (i) = {
230230 let pd = throw("Permission denied")
231231 match managerPublicKeyOrUnit() {
232232 case pk: ByteVector =>
233233 if ((i.callerPublicKey == pk))
234234 then true
235235 else pd
236236 case _: Unit =>
237237 if ((i.caller == this))
238238 then true
239239 else pd
240240 case _ =>
241241 throw("Match error")
242242 }
243243 }
244244
245245
246246 func calcUserWeight (boostingContractAddress,heightForPeriod,period,userIndex) = {
247247 let kLast = keyLastProcessedPeriodOfUser(userIndex)
248248 let kKey = keyUserKValueForPeriod(period, userIndex)
249249 let kRaw = getInteger(boostingContractAddress, kKey)
250250 let kUserWeight = keyUserWeightForPeriod(period, userIndex)
251251 if (isDefined(kRaw))
252252 then {
253253 let k = value(kRaw)
254254 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(period, userIndex)))
255255 let w = ((k * heightForPeriod) + b)
256256 if ((w > 0))
257257 then $Tuple2((w / SCALE), [IntegerEntry(kLast, period), IntegerEntry(kUserWeight, w)])
258258 else $Tuple2(0, nil)
259259 }
260260 else {
261261 let p = getInteger(this, kLast)
262262 if (if (isDefined(p))
263263 then (period >= value(p))
264264 else false)
265265 then {
266266 let pv = value(p)
267267 let k = value(getInteger(boostingContractAddress, keyUserKValueForPeriod(pv, userIndex)))
268268 let b = value(getInteger(boostingContractAddress, keyUserBValueForPeriod(pv, userIndex)))
269269 let w = ((k * heightForPeriod) + b)
270270 if ((w > 0))
271271 then $Tuple2((w / SCALE), [IntegerEntry(kUserWeight, w)])
272272 else $Tuple2(0, nil)
273273 }
274274 else $Tuple2(0, nil)
275275 }
276276 }
277277
278278
279279 func calcUserWeightForClaim (boostingContractAddress,heightForPeriod,period,userIndex) = {
280280 let kUserWeight = keyUserWeightForPeriod(period, userIndex)
281281 let userWeightOrUnit = getInteger(kUserWeight)
282282 match userWeightOrUnit {
283283 case _: Unit =>
284284 0
285285 case w: Int =>
286286 (w / SCALE)
287287 case _ =>
288288 throw("Match error")
289289 }
290290 }
291291
292292
293293 func getUserIndexByAddress (boostingContractAddressStr,userAddress) = {
294294 let key = makeString(["%s%s%s", "mapping", "user2num", userAddress], SEP)
295295 parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String(boostingContractAddressStr)), key), ((("User address " + userAddress) + " is not found in boosting contract data, key=") + key)))
296296 }
297297
298298
299299 func nextPeriod () = getNumberByKey(keyNextPeriod())
300300
301301
302302 func commonClaimReward (userAddress) = {
303303 let cfgArray = readConfigArrayOrFail()
304304 let userIdx = getUserIndexByAddress(cfgArray[IdxCfgBoostingContract], userAddress)
305305 let userUnclaimedOption = getInteger(keyUserUnclaimed(userIdx))
306306 match userUnclaimedOption {
307307 case _: Unit =>
308308 $Tuple2(0, nil)
309309 case u: Int =>
310310 $Tuple2(u, [IntegerEntry(keyUserUnclaimed(userIdx), 0)])
311311 case _ =>
312312 throw("Match error")
313313 }
314314 }
315315
316316
317317 @Callable(i)
318318 func updateReferralActivity (userAddress,gWxAmountStart) = {
319319 let referrer = getString(referralsContractAddressOrFail, keyReferrer(userAddress))
320320 let activeReferralInv = if ((referrer == unit))
321321 then unit
322322 else invoke(referralsContractAddressOrFail, "updateReferralActivity", [referralProgramName, userAddress, (gWxAmountStart >= referralMinGWxAmount)], nil)
323323 if ((activeReferralInv == activeReferralInv))
324324 then $Tuple2(nil, unit)
325325 else throw("Strict value is not equal to itself.")
326326 }
327327
328328
329329
330330 @Callable(i)
331331 func finalizeHelper () = {
332332 let processingStage = valueOrElse(getInteger(keyProcessingStage()), processingStageTotal)
333333 let currentPeriod = getNumberByKey(keyNextProcessedPeriod())
334334 let currentUser = getNumberByKey(keyNextProcessedUser())
335335 let latestPeriod = getNumberByKey(keyLatestPeriod())
336336 let usersCount = valueOrElse(getInteger(boostingContractOrFail(), keyUsersCount()), 0)
337337 let totalWeightKey = keyTotalWeightForPeriod(currentPeriod)
338338 let totalWeight = getNumberByKey(keyTotalWeightForPeriod(currentPeriod))
339339 let heightForPeriod = getNumberByKey(keyHeightForPeriod(currentPeriod))
340340 if ((currentPeriod > latestPeriod))
341341 then $Tuple2(nil, false)
342342 else if ((processingStage == processingStageTotal))
343343 then {
344344 let $t01241512531 = calcUserWeight(boostingContractOrFail(), heightForPeriod, currentPeriod, currentUser)
345345 let userWeight = $t01241512531._1
346346 let userActions = $t01241512531._2
347347 let totalWeightNew = (totalWeight + userWeight)
348348 let processingActions = if (((usersCount - 1) > currentUser))
349349 then [IntegerEntry(keyNextProcessedUser(), (currentUser + 1))]
350350 else [IntegerEntry(keyProcessingStage(), processingStageShares), IntegerEntry(keyNextProcessedUser(), 0)]
351351 $Tuple2((([IntegerEntry(totalWeightKey, totalWeightNew)] ++ processingActions) ++ userActions), true)
352352 }
353353 else if ((processingStage == processingStageShares))
354354 then {
355355 let userWeight = calcUserWeightForClaim(boostingContractOrFail(), heightForPeriod, currentPeriod, currentUser)
356356 let userAmountMatcherForPeriod = fraction(getNumberByKey(keyTotalAmountForPeriod(currentPeriod)), userWeight, totalWeight)
357357 let userAmountEmissionForPeriod = fraction(getNumberByKey(keyAuxEmissionRewardForPeriod(currentPeriod)), userWeight, totalWeight)
358358 let userTotalAmount = (userAmountEmissionForPeriod + userAmountMatcherForPeriod)
359359 let userUnclaimedOption = getInteger(keyUserUnclaimed(currentUser))
360360 let userAddress = getStringValue(boostingContractOrFail(), keyNumToUserMapping(currentUser))
361361 let referrer = getString(referralsContractAddressOrFail, keyReferrer(userAddress))
362362 let activeReferralInv = if ((referrer == unit))
363363 then unit
364364 else invoke(referralsContractAddressOrFail, "updateReferralActivity", [referralProgramName, userAddress, (userWeight >= referralMinGWxAmount)], nil)
365365 if ((activeReferralInv == activeReferralInv))
366366 then {
367367 let referralInv = if (if ((referrer == unit))
368368 then true
369369 else (referralMinGWxAmount > userWeight))
370370 then unit
371371 else {
372372 let referrerReward = fraction(userTotalAmount, referrerRewardPermille, SCALE)
373373 let referralReward = fraction(userTotalAmount, referralRewardPermille, SCALE)
374374 invoke(referralsContractAddressOrFail, "incUnclaimed", [referralProgramName, userAddress, referrerReward, referralReward], nil)
375375 }
376376 if ((referralInv == referralInv))
377377 then {
378378 let unclaimedActions = [IntegerEntry(keyUserUnclaimed(currentUser), (valueOrElse(userUnclaimedOption, 0) + userTotalAmount))]
379379 let processingActions = if (((usersCount - 1) > currentUser))
380380 then [IntegerEntry(keyNextProcessedUser(), (currentUser + 1))]
381381 else [IntegerEntry(keyNextProcessedPeriod(), (currentPeriod + 1)), IntegerEntry(keyNextProcessedUser(), 0), DeleteEntry(keyProcessingStage())]
382382 $Tuple2((unclaimedActions ++ processingActions), true)
383383 }
384384 else throw("Strict value is not equal to itself.")
385385 }
386386 else throw("Strict value is not equal to itself.")
387387 }
388388 else throw("invalid processing stage")
389389 }
390390
391391
392392
393393 @Callable(i)
394394 func finalizeWrapper (counter) = {
395395 let result = {
396396 let @ = invoke(this, "finalizeHelper", nil, nil)
397397 if ($isInstanceOf(@, "Boolean"))
398398 then @
399399 else throw(($getType(@) + " couldn't be cast to Boolean"))
400400 }
401401 if ((result == result))
402402 then if (!(result))
403403 then if ((counter == maxDepth))
404404 then throw("Nothing to process")
405405 else $Tuple2(nil, unit)
406406 else if ((counter > 0))
407407 then $Tuple2(nil, invoke(this, "finalizeWrapper", [(counter - 1)], nil))
408408 else $Tuple2(nil, unit)
409409 else throw("Strict value is not equal to itself.")
410410 }
411411
412412
413413
414414 @Callable(i)
415415 func processPendingPeriodsAndUsers () = $Tuple2(nil, invoke(this, "finalizeWrapper", [maxDepth], nil))
416416
417417
418418
419419 @Callable(i)
420420 func deposit () = {
421421 let checkCaller = if ((i.caller == votingEmissionContract))
422422 then true
423423 else mustManager(i)
424424 if ((checkCaller == checkCaller))
425425 then {
426426 let period = nextPeriod()
427427 let deltaH = (height - getNumberOrFail(keyGwxRewardEmissionStartHeight()))
428428 let emissionRate = valueOrErrorMessage(getInteger(emissionContract, keyRatePerBlockCurrent()), (("mandatory emission_contract." + keyRatePerBlockCurrent()) + " is not defined"))
429429 let gwxHoldersRewardCurrent = valueOrElse(getInteger(emissionContract, keyGwxHoldersRewardCurrent()), 0)
430- let auxAmount = fraction((deltaH * gwxHoldersRewardCurrent), emissionRate, MULT8)
431- let em = if ((auxAmount > 0))
432- then invoke(emissionContract, "emit", [auxAmount], nil)
433- else unit
434- if ((em == em))
430+ if ((gwxHoldersRewardCurrent == gwxHoldersRewardCurrent))
435431 then {
436- let matcherPart = 0
437- let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
438- let gwxHoldersRewardUpdate = invoke(emissionContract, "gwxHoldersRewardUpdate", nil, nil)
439- if ((gwxHoldersRewardUpdate == gwxHoldersRewardUpdate))
432+ let auxAmount = fraction((deltaH * gwxHoldersRewardCurrent), emissionRate, MULT8)
433+ let em = if ((auxAmount > 0))
434+ then invoke(emissionContract, "emit", [auxAmount], nil)
435+ else unit
436+ if ((em == em))
440437 then {
441- let totalReward = (matcherPart + auxAmount)
442- let actions = if ((totalReward == 0))
443- then nil
444- else [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)]
445- $Tuple2(actions, unit)
438+ let matcherPart = 0
439+ let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
440+ let gwxHoldersRewardUpdated = {
441+ let @ = invoke(emissionContract, "gwxHoldersRewardUpdate", nil, nil)
442+ if ($isInstanceOf(@, "Boolean"))
443+ then @
444+ else throw(($getType(@) + " couldn't be cast to Boolean"))
445+ }
446+ if ((gwxHoldersRewardUpdated == gwxHoldersRewardUpdated))
447+ then {
448+ let totalReward = (matcherPart + auxAmount)
449+ let actions = if (if ((totalReward == 0))
450+ then !(gwxHoldersRewardUpdated)
451+ else false)
452+ then nil
453+ else [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)]
454+ $Tuple2(actions, unit)
455+ }
456+ else throw("Strict value is not equal to itself.")
446457 }
447458 else throw("Strict value is not equal to itself.")
448459 }
449460 else throw("Strict value is not equal to itself.")
450461 }
451462 else throw("Strict value is not equal to itself.")
452463 }
453464
454465
455466
456467 @Callable(i)
457468 func claimReward () = {
458469 let cfgArray = readConfigArrayOrFail()
459470 let address = toString(i.caller)
460- let $t01767117721 = commonClaimReward(address)
461- let amount = $t01767117721._1
462- let actions = $t01767117721._2
471+ let $t01772017770 = commonClaimReward(address)
472+ let amount = $t01772017770._1
473+ let actions = $t01772017770._2
463474 let checkAmount = if ((amount > 0))
464475 then true
465476 else throw("Nothing to claim")
466477 if ((checkAmount == checkAmount))
467478 then {
468479 let amountFromEmission = 0
469480 let claimedReferral = {
470481 let @ = invoke(referralsContractAddressOrFail, "claim", [referralProgramName], nil)
471482 if ($isInstanceOf(@, "Int"))
472483 then @
473484 else throw(($getType(@) + " couldn't be cast to Int"))
474485 }
475486 let totalAmount = (amount + claimedReferral)
476487 $Tuple2(([ScriptTransfer(i.caller, totalAmount, fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amount, i)] ++ actions), [totalAmount, amountFromEmission])
477488 }
478489 else throw("Strict value is not equal to itself.")
479490 }
480491
481492
482493
483494 @Callable(i)
484495 func claimRewardREADONLY (address) = {
485- let $t01829418344 = commonClaimReward(address)
486- let amount = $t01829418344._1
487- let actions = $t01829418344._2
496+ let $t01834318393 = commonClaimReward(address)
497+ let amount = $t01834318393._1
498+ let actions = $t01834318393._2
488499 let referralUnclaimed = valueOrElse(getInteger(referralsContractAddressOrFail, keyUnclaimedReferral(referralProgramName, address)), 0)
489500 let totalAmount = (amount + referralUnclaimed)
490501 $Tuple2(nil, totalAmount)
491502 }
492503
493504
494505
495506 @Callable(i)
496507 func latestFinalizedPeriodREADONLY (address) = $Tuple2(nil, valueOrElse(getInteger(this, keyLatestPeriod()), -1))
497508
498509
499510
500511 @Callable(i)
501512 func latestFinalizedPeriodInfoREADONLY (address) = $Tuple2(nil, getStringByKey(keyLastPayoutInfo()))
502513
503514
504515
505516 @Callable(i)
506517 func calcGwxParamsREADONLY (gwxAmountStart,lockStartHeight,lockDurationBlocks) = {
507518 let lockEndHeight = (lockStartHeight + lockDurationBlocks)
508519 let scale8ParamK = -(fraction(gwxAmountStart, SCALE, lockDurationBlocks))
509520 let scale8ParamB = (fraction(gwxAmountStart, SCALE, lockDurationBlocks) * lockEndHeight)
510521 $Tuple2(nil, [scale8ParamK, scale8ParamB, nextPeriod()])
511522 }
512523
513524
514525
515526 @Callable(i)
516527 func calcGwxAmountStartREADONLY (wxLockAmount,lockDuration,maxLockDuration) = {
517528 let coeffX8 = fraction(lockDuration, MULT8, maxLockDuration)
518529 let gWxAmountStart = fraction(wxLockAmount, coeffX8, MULT8)
519530 $Tuple2(nil, [gWxAmountStart])
520531 }
521532
522533
523534
524535 @Callable(i)
525536 func onEmissionForGwxStart () = if ((i.caller != factoryContract))
526537 then throw("permissions denied")
527538 else [IntegerEntry(keyGwxRewardEmissionStartHeight(), height)]
528539
529540
530541
531542 @Callable(i)
532543 func latestPeriodEmissionRewardsREADONLY (address) = {
533544 let period = nextPeriod()
534545 $Tuple2(nil, [getNumberByKey(keyAuxEmissionRewardForPeriod(period))])
535546 }
536547
537548
538549
539550 @Callable(i)
540551 func calcD (x1BigIntStr,x2BigIntStr,ampBigIntStr,aPrecisionBigIntStr,targetPrecisionBigIntStr) = {
541552 let nCoins = toBigInt(2)
542553 let aPrecision = parseBigIntValue(aPrecisionBigIntStr)
543554 let targetPrecision = parseBigIntValue(targetPrecisionBigIntStr)
544555 let x1 = parseBigIntValue(x1BigIntStr)
545556 let x2 = parseBigIntValue(x2BigIntStr)
546557 let amp = (parseBigIntValue(ampBigIntStr) * aPrecision)
547558 let s = (x1 + x2)
548559 if ((s == zeroBigInt))
549560 then $Tuple2(nil, toString(zeroBigInt))
550561 else {
551562 let ann = (amp * nCoins)
552563 let arr = [0, 1, 2, 3, 4, 5, 6]
553564 func calc (acc,cur) = {
554- let $t02097721004 = acc
555- let d = $t02097721004._1
556- let dPrev = $t02097721004._2
557- let found = $t02097721004._3
565+ let $t02102621053 = acc
566+ let d = $t02102621053._1
567+ let dPrev = $t02102621053._2
568+ let found = $t02102621053._3
558569 if ((found != unit))
559570 then acc
560571 else {
561572 let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
562573 let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
563574 let dDiff = absBigInt((dNext - value(d)))
564575 if ((targetPrecision >= dDiff))
565576 then $Tuple3(dNext, d, cur)
566577 else $Tuple3(dNext, d, unit)
567578 }
568579 }
569580
570- let $t02160221665 = {
581+ let $t02165121714 = {
571582 let $l = arr
572583 let $s = size($l)
573584 let $acc0 = $Tuple3(s, unit, unit)
574585 func $f0_1 ($a,$i) = if (($i >= $s))
575586 then $a
576587 else calc($a, $l[$i])
577588
578589 func $f0_2 ($a,$i) = if (($i >= $s))
579590 then $a
580591 else throw("List size exceeds 7")
581592
582593 $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)
583594 }
584- let dNext = $t02160221665._1
585- let dPrev = $t02160221665._2
586- let found = $t02160221665._3
595+ let dNext = $t02165121714._1
596+ let dPrev = $t02165121714._2
597+ let found = $t02165121714._3
587598 if ((found != unit))
588599 then $Tuple2(nil, toString(dNext))
589600 else {
590601 let dDiff = absBigInt((dNext - value(dPrev)))
591602 throw(("D calculation error, dDiff = " + toString(dDiff)))
592603 }
593604 }
594605 }
595606
596607
597608
598609 @Callable(i)
599610 func setManager (pendingManagerPublicKey) = {
600611 let checkCaller = mustManager(i)
601612 if ((checkCaller == checkCaller))
602613 then {
603614 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
604615 if ((checkManagerPublicKey == checkManagerPublicKey))
605616 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
606617 else throw("Strict value is not equal to itself.")
607618 }
608619 else throw("Strict value is not equal to itself.")
609620 }
610621
611622
612623
613624 @Callable(i)
614625 func confirmManager () = {
615626 let pm = pendingManagerPublicKeyOrUnit()
616627 let hasPM = if (isDefined(pm))
617628 then true
618629 else throw("No pending manager")
619630 if ((hasPM == hasPM))
620631 then {
621632 let checkPM = if ((i.callerPublicKey == value(pm)))
622633 then true
623634 else throw("You are not pending manager")
624635 if ((checkPM == checkPM))
625636 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
626637 else throw("Strict value is not equal to itself.")
627638 }
628639 else throw("Strict value is not equal to itself.")
629640 }
630641
631642
632643 @Verifier(tx)
633644 func verify () = {
634645 let targetPublicKey = match managerPublicKeyOrUnit() {
635646 case pk: ByteVector =>
636647 pk
637648 case _: Unit =>
638649 tx.senderPublicKey
639650 case _ =>
640651 throw("Match error")
641652 }
642653 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
643654 }
644655

github/deemru/w8io/169f3d6 
92.48 ms