tx · HKn9V4yTsYDfTX1CSF7rMjUJ6LY25TfvoRJZ16xuPL1A

3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE:  -0.01800000 Waves

2023.04.17 15:30 [2538570] smart account 3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE > SELF 0.00000000 Waves

{ "type": 13, "id": "HKn9V4yTsYDfTX1CSF7rMjUJ6LY25TfvoRJZ16xuPL1A", "fee": 1800000, "feeAssetId": null, "timestamp": 1681734713702, "version": 2, "chainId": 84, "sender": "3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE", "senderPublicKey": "G349Uq3FTox7dRNLeAfAQeoACvwZ9iEnVSaHcEYn6j8J", "proofs": [ "5ZbkB6NgnXWmB4DmBkZhLmuFWqYhErHnfcZ8Hkm4KCSNmGDKHsHuLSVtwgaPbLCy6oXeucBLM6bJSAGc3as1Pm78" ], "script": "base64:BgKkGggCEgQKAggBEgASAwoBARIAEgASABIDCgEIEgMKAQgSAwoBCBIFCgMBAQESBQoDAQEBEgASAwoBCBIHCgUICAgICBIDCgEIEgAiA1NFUCIFU0NBTEUiBU1VTFQ4Igp6ZXJvQmlnSW50IhRwcm9jZXNzaW5nU3RhZ2VUb3RhbCIVcHJvY2Vzc2luZ1N0YWdlU2hhcmVzIg5nZXROdW1iZXJCeUtleSIDa2V5Ig9nZXROdW1iZXJPckZhaWwiDmdldFN0cmluZ0J5S2V5Ig9nZXRTdHJpbmdPckZhaWwiA2FicyIDdmFsIglhYnNCaWdJbnQiC2tleU1heERlcHRoIg9tYXhEZXB0aERlZmF1bHQiCG1heERlcHRoIhFrZXlGYWN0b3J5QWRkcmVzcyIRZmFjdG9yeUFkZHJlc3NTdHIiD2ZhY3RvcnlDb250cmFjdCISa2V5RW1pc3Npb25BZGRyZXNzIhlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0IhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0IhNrZXlOdW1Ub1VzZXJNYXBwaW5nIgNudW0iFmtleVJlZmVycmFsUHJvZ3JhbU5hbWUiGnJlZmVycmFsUHJvZ3JhbU5hbWVEZWZhdWx0IhNyZWZlcnJhbFByb2dyYW1OYW1lIhdrZXlSZWZlcnJhbE1pbkdXeEFtb3VudCIbcmVmZXJyYWxNaW5HV3hBbW91bnREZWZhdWx0IhRyZWZlcnJhbE1pbkdXeEFtb3VudCIZa2V5UmVmZXJyZXJSZXdhcmRQZXJtaWxsZSIdcmVmZXJyZXJSZXdhcmRQZXJtaWxsZURlZmF1bHQiFnJlZmVycmVyUmV3YXJkUGVybWlsbGUiGWtleVJlZmVycmFsUmV3YXJkUGVybWlsbGUiHXJlZmVycmFsUmV3YXJkUGVybWlsbGVEZWZhdWx0IhZyZWZlcnJhbFJld2FyZFBlcm1pbGxlIgtrZXlSZWZlcnJlciIPcmVmZXJyYWxBZGRyZXNzIhRrZXlVbmNsYWltZWRSZWZlcnJhbCILcHJvZ3JhbU5hbWUiDmNsYWltZXJBZGRyZXNzIhJlbWlzc2lvbkFkZHJlc3NTdHIiEGVtaXNzaW9uQ29udHJhY3QiDUlkeENmZ0Fzc2V0SWQiFklkeENmZ1BhY2VtYWtlckFkZHJlc3MiFklkeENmZ0Jvb3N0aW5nQ29udHJhY3QiDklkeENmZ01heERlcHRoIglrZXlDb25maWciFXJlYWRDb25maWdBcnJheU9yRmFpbCIMZm9ybWF0Q29uZmlnIgx3eEFzc2V0SWRTdHIiGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyIhpib29zdGluZ0NvbnRyYWN0QWRkcmVzc1N0ciIWYm9vc3RpbmdDb250cmFjdE9yRmFpbCIIY2ZnQXJyYXkiH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQiDWtleVVzZXJzQ291bnQiFmtleVJhdGVQZXJCbG9ja0N1cnJlbnQiGmtleUd3eEhvbGRlcnNSZXdhcmRDdXJyZW50IhdrZXlHd3hIb2xkZXJzUmV3YXJkTmV4dCIUa2V5UG9vbFdlaWdodFZpcnR1YWwiFGtleU5leHRQcm9jZXNzZWRVc2VyIg9rZXlMYXRlc3RQZXJpb2QiDWtleU5leHRQZXJpb2QiEmtleVByb2Nlc3NpbmdTdGFnZSIWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZCIQa2V5VXNlclVuY2xhaW1lZCIJdXNlckluZGV4IhtrZXlOZXh0VW5sYWltZWRQZXJpb2RPZlVzZXIiHGtleUxhc3RQcm9jZXNzZWRQZXJpb2RPZlVzZXIiEmtleUhlaWdodEZvclBlcmlvZCIGcGVyaW9kIh1rZXlBdXhFbWlzc2lvblJld2FyZEZvclBlcmlvZCIXa2V5VG90YWxBbW91bnRGb3JQZXJpb2QiEWtleUxhc3RQYXlvdXRJbmZvIhBQZXJpb2RQYXlvdXRJbmZvIg1tYXRjaGVyUmV3YXJkIg5lbWlzc2lvblJld2FyZCIUa2V5UGF5b3V0SGlzdG9yeUluZm8iF2tleVRvdGFsV2VpZ2h0Rm9yUGVyaW9kIhZrZXlVc2VyS1ZhbHVlRm9yUGVyaW9kIhZrZXlVc2VyQlZhbHVlRm9yUGVyaW9kIhZrZXlVc2VyV2VpZ2h0Rm9yUGVyaW9kIhtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MiHnJlZmVycmFsc0NvbnRyYWN0QWRkcmVzc09yRmFpbCIMSGlzdG9yeUVudHJ5IgR0eXBlIgR1c2VyIgZhbW91bnQiAWkiCmhpc3RvcnlLRVkiC2hpc3RvcnlEQVRBIhNrZXlNYW5hZ2VyUHVibGljS2V5IhprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleSIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIHJG1hdGNoMCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgJwZCICcGsiDmNhbGNVc2VyV2VpZ2h0Ihdib29zdGluZ0NvbnRyYWN0QWRkcmVzcyIPaGVpZ2h0Rm9yUGVyaW9kIgVrTGFzdCIEa0tleSIEa1JhdyILa1VzZXJXZWlnaHQiAWsiAWIiAXciAXAiAnB2IhZjYWxjVXNlcldlaWdodEZvckNsYWltIhB1c2VyV2VpZ2h0T3JVbml0IhVnZXRVc2VySW5kZXhCeUFkZHJlc3MiC3VzZXJBZGRyZXNzIgpuZXh0UGVyaW9kIhFjb21tb25DbGFpbVJld2FyZCIHdXNlcklkeCITdXNlclVuY2xhaW1lZE9wdGlvbiIBdSIOZ1d4QW1vdW50U3RhcnQiCHJlZmVycmVyIhFhY3RpdmVSZWZlcnJhbEludiIPcHJvY2Vzc2luZ1N0YWdlIg1jdXJyZW50UGVyaW9kIgtjdXJyZW50VXNlciIMbGF0ZXN0UGVyaW9kIgp1c2Vyc0NvdW50Ig50b3RhbFdlaWdodEtleSILdG90YWxXZWlnaHQiDSR0MDEyNDE1MTI1MzEiCnVzZXJXZWlnaHQiC3VzZXJBY3Rpb25zIg50b3RhbFdlaWdodE5ldyIRcHJvY2Vzc2luZ0FjdGlvbnMiGnVzZXJBbW91bnRNYXRjaGVyRm9yUGVyaW9kIht1c2VyQW1vdW50RW1pc3Npb25Gb3JQZXJpb2QiD3VzZXJUb3RhbEFtb3VudCILcmVmZXJyYWxJbnYiDnJlZmVycmVyUmV3YXJkIg5yZWZlcnJhbFJld2FyZCIQdW5jbGFpbWVkQWN0aW9ucyIHY291bnRlciIGcmVzdWx0IgFAIgtjaGVja0NhbGxlciIGZGVsdGFIIgxlbWlzc2lvblJhdGUiF2d3eEhvbGRlcnNSZXdhcmRDdXJyZW50IglhdXhBbW91bnQiAmVtIgttYXRjaGVyUGFydCIKcGF5b3V0SW5mbyIWZ3d4SG9sZGVyc1Jld2FyZFVwZGF0ZSILdG90YWxSZXdhcmQiB2FjdGlvbnMiB2FkZHJlc3MiDSR0MDE3NjM3MTc2ODciC2NoZWNrQW1vdW50IhJhbW91bnRGcm9tRW1pc3Npb24iD2NsYWltZWRSZWZlcnJhbCILdG90YWxBbW91bnQiDSR0MDE4MjYwMTgzMTAiEXJlZmVycmFsVW5jbGFpbWVkIg5nd3hBbW91bnRTdGFydCIPbG9ja1N0YXJ0SGVpZ2h0IhJsb2NrRHVyYXRpb25CbG9ja3MiDWxvY2tFbmRIZWlnaHQiDHNjYWxlOFBhcmFtSyIMc2NhbGU4UGFyYW1CIgx3eExvY2tBbW91bnQiDGxvY2tEdXJhdGlvbiIPbWF4TG9ja0R1cmF0aW9uIgdjb2VmZlg4Igt4MUJpZ0ludFN0ciILeDJCaWdJbnRTdHIiDGFtcEJpZ0ludFN0ciITYVByZWNpc2lvbkJpZ0ludFN0ciIYdGFyZ2V0UHJlY2lzaW9uQmlnSW50U3RyIgZuQ29pbnMiCmFQcmVjaXNpb24iD3RhcmdldFByZWNpc2lvbiICeDEiAngyIgNhbXAiA2FubiIDYXJyIgRjYWxjIgNhY2MiA2N1ciINJHQwMjA5NDMyMDk3MCIBZCIFZFByZXYiBWZvdW5kIgJkcCIFZE5leHQiBWREaWZmIg0kdDAyMTU2ODIxNjMxIgIkbCICJHMiBSRhY2MwIgUkZjBfMSICJGEiAiRpIgUkZjBfMiIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXlTAAFhAgJfXwABYgDoBwABYwCAwtcvAAFkCQC2AgEAAAABZQAAAAFmAAEBAWcBAWgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBaAAAAQFpAQFoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBaAkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBaAIPIGlzIG5vdCBkZWZpbmVkAQFqAQFoCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWgCAAEBawEBaAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFAWgJAKwCAgkArAICAg9tYW5kYXRvcnkgdGhpcy4FAWgCDyBpcyBub3QgZGVmaW5lZAEBbAEBbQMJAGYCAAAFAW0JAQEtAQUBbQUBbQEBbgEBbQMJAL8CAgUBZAUBbQkAvgIBBQFtBQFtAAFvAgwlc19fbWF4RGVwdGgAAXAAHgABcQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFvBQFwAQFyAAIcJXMlc19fY29uZmlnX19mYWN0b3J5QWRkcmVzcwABcwkBAWsBCQEBcgAAAXQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMBAXUAAh0lcyVzX19jb25maWdfX2VtaXNzaW9uQWRkcmVzcwEBdgAJALkJAgkAzAgCAgIlcwkAzAgCAhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQNuaWwFAWEAAXcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFAXQJAQF2AAEBeAEBeQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgdtYXBwaW5nCQDMCAICCG51bTJ1c2VyCQDMCAIJAKQDAQUBeQUDbmlsBQFhAAF6CQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAgtwcm9ncmFtTmFtZQUDbmlsBQFhAAFBAgZ3eGxvY2sAAUIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUBegUBQQABQwkAuQkCCQDMCAICBCVzJXMJAMwIAgIIcmVmZXJyYWwJAMwIAgIMbWluR1d4QW1vdW50BQNuaWwFAWEAAUQJAGgCAPQDBQFjAAFFCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAUMFAUQAAUYJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICFnJlZmVycmVyUmV3YXJkUGVybWlsbGUFA25pbAUBYQABRwAyAAFICQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAUYFAUcAAUkJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICFnJlZmVycmFsUmV3YXJkUGVybWlsbGUFA25pbAUBYQABSgAyAAFLCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAUkFAUoBAUwBAU0JALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIIcmVmZXJyZXIJAMwIAgUBQgkAzAgCBQFNBQNuaWwFAWEBAU4CAU8BUAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhF1bmNsYWltZWRSZWZlcnJhbAkAzAgCBQFPCQDMCAIFAVAFA25pbAUBYQABUQkBAWsBCQEBdQAAAVIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAVEAAVMAAQABVAACAAFVAAMAAVYABAEBVwACCiVzX19jb25maWcBAVgACQC1CQIJAQFrAQkBAVcABQFhAQFZBAFaAmFhAmFiAXEJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCBQFaCQDMCAIFAmFhCQDMCAIFAmFiCQDMCAIJAKQDAQUBcQUDbmlsBQFhAQJhYwAEAmFkCQEBWAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmFkBQFVAihib29zdGluZyBjb250cmFjdCBhZGRyZXNzIGlzIG5vdCBkZWZpbmVkAQJhZQACKCVzJXNfX2d3eFJld2FyZEVtaXNzaW9uUGFydF9fc3RhcnRIZWlnaHQBAmFmAAIPJXNfX25leHRVc2VyTnVtAQJhZwACGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAECYWgAAh8lcyVzX19nd3hIb2xkZXJzUmV3YXJkX19jdXJyZW50AQJhaQACHCVzJXNfX2d3eEhvbGRlcnNSZXdhcmRfX25leHQBAmFqAAIgJXMlc19fcG9vbFdlaWdodF9fR1dYdmlydHVhbFBPT0wBAmFrAAIVJXNfX25leHRQcm9jZXNzZWRVc2VyAQJhbAACECVzX19sYXRlc3RQZXJpb2QBAmFtAAIOJXNfX25leHRQZXJpb2QBAmFuAAITJXNfX3Byb2Nlc3NpbmdTdGFnZQECYW8AAhclc19fbmV4dFByb2Nlc3NlZFBlcmlvZAECYXABAmFxCQC5CQIJAMwIAgIEJXMlZAkAzAgCAg11c2VyVW5jbGFpbWVkCQDMCAIJAKQDAQUCYXEFA25pbAUBYQECYXIBAmFxCQC5CQIJAMwIAgIXJXMlZF9fbmV4dENsYWltZWRQZXJpb2QJAMwIAgkApAMBBQJhcQUDbmlsBQFhAQJhcwECYXEJALkJAgkAzAgCAhklcyVkX19sYXN0UHJvY2Vzc2VkUGVyaW9kCQDMCAIJAKQDAQUCYXEFA25pbAUBYQECYXQBAmF1CQC5CQIJAMwIAgIaJXMlZF9fc3RhcnRIZWlnaHRGb3JQZXJpb2QJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJhdgECYXUJALkJAgkAzAgCAhclcyVkX19hdXhFbWlzc2lvblJld2FyZAkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmF3AQJhdQkAuQkCCQDMCAICGiVzJWRfX3RvdGFsQW1vdW50Rm9yUGVyaW9kCQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYXgAAhIlc19fbGFzdFBheW91dEluZm8BAmF5AwJhdQJhegJhQQkAuQkCCQDMCAICBiVkJWQlZAkAzAgCCQCkAwEFAmF1CQDMCAIJAKQDAQUCYXoJAMwIAgkApAMBBQJhQQUDbmlsBQFhAQJhQgECYXUJALkJAgkAzAgCAhglcyVzJWRfX3BheW91dHNfX2hpc3RvcnkJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJhQwECYXUJALkJAgkAzAgCAholcyVkX190b3RhbFdlaWdodEZvclBlcmlvZAkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmFEAgJhdQJhcQkAuQkCCQDMCAICFyVzJWQlcyVkX19wYXJhbUJ5UGVyaW9kCQDMCAIJAKQDAQUCYXEJAMwIAgIBawkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmFFAgJhdQJhcQkAuQkCCQDMCAICFyVzJWQlcyVkX19wYXJhbUJ5UGVyaW9kCQDMCAIJAKQDAQUCYXEJAMwIAgIBYgkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmFGAgJhdQJhcQkAuQkCCQDMCAICFyVzJWQlcyVkX19wYXJhbUJ5UGVyaW9kCQDMCAIJAKQDAQUCYXEJAMwIAgIGd2VpZ2h0CQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYUcACQC5CQIJAMwIAgIEJXMlcwkAzAgCAgZjb25maWcJAMwIAgIYcmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzBQNuaWwFAWEAAmFICQERQGV4dHJOYXRpdmUoMTA2MikBCQEBawEJAQJhRwABAmFJBAJhSgJhSwJhTAJhTQQCYU4JALkJAgkAzAgCAhElcyVzJXMlc19faGlzdG9yeQkAzAgCBQJhSgkAzAgCBQJhSwkAzAgCCQDYBAEIBQJhTQ10cmFuc2FjdGlvbklkBQNuaWwFAWEEAmFPCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQCkAwEFAmFMBQNuaWwFAWEJAQtTdHJpbmdFbnRyeQIFAmFOBQJhTwECYVAAAhQlc19fbWFuYWdlclB1YmxpY0tleQECYVEAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAmFSAAQCYVMJAKIIAQkBAmFQAAMJAAECBQJhUwIGU3RyaW5nBAJhVAUCYVMJANkEAQUCYVQDCQABAgUCYVMCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYVUABAJhUwkAoggBCQECYVEAAwkAAQIFAmFTAgZTdHJpbmcEAmFUBQJhUwkA2QQBBQJhVAMJAAECBQJhUwIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJhVgECYU0EAmFXCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEAmFTCQECYVIAAwkAAQIFAmFTAgpCeXRlVmVjdG9yBAJhWAUCYVMDCQAAAggFAmFND2NhbGxlclB1YmxpY0tleQUCYVgGBQJhVwMJAAECBQJhUwIEVW5pdAMJAAACCAUCYU0GY2FsbGVyBQR0aGlzBgUCYVcJAAIBAgtNYXRjaCBlcnJvcgECYVkEAmFaAmJhAmF1AmFxBAJiYgkBAmFzAQUCYXEEAmJjCQECYUQCBQJhdQUCYXEEAmJkCQCaCAIFAmFaBQJiYwQCYmUJAQJhRgIFAmF1BQJhcQMJAQlpc0RlZmluZWQBBQJiZAQCYmYJAQV2YWx1ZQEFAmJkBAJiZwkBBXZhbHVlAQkAmggCBQJhWgkBAmFFAgUCYXUFAmFxBAJiaAkAZAIJAGgCBQJiZgUCYmEFAmJnAwkAZgIFAmJoAAAJAJQKAgkAaQIFAmJoBQFiCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJiYgUCYXUJAMwIAgkBDEludGVnZXJFbnRyeQIFAmJlBQJiaAUDbmlsCQCUCgIAAAUDbmlsBAJiaQkAmggCBQR0aGlzBQJiYgMDCQEJaXNEZWZpbmVkAQUCYmkJAGcCBQJhdQkBBXZhbHVlAQUCYmkHBAJiagkBBXZhbHVlAQUCYmkEAmJmCQEFdmFsdWUBCQCaCAIFAmFaCQECYUQCBQJiagUCYXEEAmJnCQEFdmFsdWUBCQCaCAIFAmFaCQECYUUCBQJiagUCYXEEAmJoCQBkAgkAaAIFAmJmBQJiYQUCYmcDCQBmAgUCYmgAAAkAlAoCCQBpAgUCYmgFAWIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmJlBQJiaAUDbmlsCQCUCgIAAAUDbmlsCQCUCgIAAAUDbmlsAQJiawQCYVoCYmECYXUCYXEEAmJlCQECYUYCBQJhdQUCYXEEAmJsCQCfCAEFAmJlBAJhUwUCYmwDCQABAgUCYVMCBFVuaXQAAAMJAAECBQJhUwIDSW50BAJiaAUCYVMJAGkCBQJiaAUBYgkAAgECC01hdGNoIGVycm9yAQJibQICYWICYm4EAWgJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIHbWFwcGluZwkAzAgCAgh1c2VyMm51bQkAzAgCBQJibgUDbmlsBQFhCQENcGFyc2VJbnRWYWx1ZQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQEHQWRkcmVzcwEJANkEAQUCYWIFAWgJAKwCAgkArAICCQCsAgICDVVzZXIgYWRkcmVzcyAFAmJuAi0gaXMgbm90IGZvdW5kIGluIGJvb3N0aW5nIGNvbnRyYWN0IGRhdGEsIGtleT0FAWgBAmJvAAkBAWcBCQECYW0AAQJicAECYm4EAmFkCQEBWAAEAmJxCQECYm0CCQCRAwIFAmFkBQFVBQJibgQCYnIJAJ8IAQkBAmFwAQUCYnEEAmFTBQJicgMJAAECBQJhUwIEVW5pdAkAlAoCAAAFA25pbAMJAAECBQJhUwIDSW50BAJicwUCYVMJAJQKAgUCYnMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcAEFAmJxAAAFA25pbAkAAgECC01hdGNoIGVycm9yEAJhTQEWdXBkYXRlUmVmZXJyYWxBY3Rpdml0eQICYm4CYnQEAmJ1CQCdCAIFAmFICQEBTAEFAmJuBAJidgMJAAACBQJidQUEdW5pdAUEdW5pdAkA/AcEBQJhSAIWdXBkYXRlUmVmZXJyYWxBY3Rpdml0eQkAzAgCBQFCCQDMCAIFAmJuCQDMCAIJAGcCBQJidAUBRQUDbmlsBQNuaWwDCQAAAgUCYnYFAmJ2CQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTQEOZmluYWxpemVIZWxwZXIABAJidwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQECYW4ABQFlBAJieAkBAWcBCQECYW8ABAJieQkBAWcBCQECYWsABAJiegkBAWcBCQECYWwABAJiQQkBC3ZhbHVlT3JFbHNlAgkAmggCCQECYWMACQECYWYAAAAEAmJCCQECYUMBBQJieAQCYkMJAQFnAQkBAmFDAQUCYngEAmJhCQEBZwEJAQJhdAEFAmJ4AwkAZgIFAmJ4BQJiegkAlAoCBQNuaWwHAwkAAAIFAmJ3BQFlBAJiRAkBAmFZBAkBAmFjAAUCYmEFAmJ4BQJieQQCYkUIBQJiRAJfMQQCYkYIBQJiRAJfMgQCYkcJAGQCBQJiQwUCYkUEAmJIAwkAZgIJAGUCBQJiQQABBQJieQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFrAAkAZAIFAmJ5AAEFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFuAAUBZgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFrAAAABQNuaWwJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmJCBQJiRwUDbmlsBQJiSAUCYkYGAwkAAAIFAmJ3BQFmBAJiRQkBAmJrBAkBAmFjAAUCYmEFAmJ4BQJieQQCYkkJAGsDCQEBZwEJAQJhdwEFAmJ4BQJiRQUCYkMEAmJKCQBrAwkBAWcBCQECYXYBBQJieAUCYkUFAmJDBAJiSwkAZAIFAmJKBQJiSQQCYnIJAJ8IAQkBAmFwAQUCYnkEAmJuCQERQGV4dHJOYXRpdmUoMTA1MykCCQECYWMACQEBeAEFAmJ5BAJidQkAnQgCBQJhSAkBAUwBBQJibgQCYnYDCQAAAgUCYnUFBHVuaXQFBHVuaXQJAPwHBAUCYUgCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgUBQgkAzAgCBQJibgkAzAgCCQBnAgUCYkUFAUUFA25pbAUDbmlsAwkAAAIFAmJ2BQJidgQCYkwDAwkAAAIFAmJ1BQR1bml0BgkAZgIFAUUFAmJFBQR1bml0BAJiTQkAawMFAmJLBQFIBQFiBAJiTgkAawMFAmJLBQFLBQFiCQD8BwQFAmFIAgxpbmNVbmNsYWltZWQJAMwIAgUBQgkAzAgCBQJibgkAzAgCBQJiTQkAzAgCBQJiTgUDbmlsBQNuaWwDCQAAAgUCYkwFAmJMBAJiTwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFwAQUCYnkJAGQCCQELdmFsdWVPckVsc2UCBQJicgAABQJiSwUDbmlsBAJiSAMJAGYCCQBlAgUCYkEAAQUCYnkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhawAJAGQCBQJieQABBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbwAJAGQCBQJieAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWsAAAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFuAAUDbmlsCQCUCgIJAM4IAgUCYk8FAmJIBgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECGGludmFsaWQgcHJvY2Vzc2luZyBzdGFnZQJhTQEPZmluYWxpemVXcmFwcGVyAQJiUAQCYlEKAAJiUgkA/AcEBQR0aGlzAg5maW5hbGl6ZUhlbHBlcgUDbmlsBQNuaWwDCQABAgUCYlICB0Jvb2xlYW4FAmJSCQACAQkArAICCQADAQUCYlICHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4DCQAAAgUCYlEFAmJRAwkBASEBBQJiUQMJAAACBQJiUAUBcQkAAgECEk5vdGhpbmcgdG8gcHJvY2VzcwkAlAoCBQNuaWwFBHVuaXQDCQBmAgUCYlAAAAkAlAoCBQNuaWwJAPwHBAUEdGhpcwIPZmluYWxpemVXcmFwcGVyCQDMCAIJAGUCBQJiUAABBQNuaWwFA25pbAkAlAoCBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU0BHXByb2Nlc3NQZW5kaW5nUGVyaW9kc0FuZFVzZXJzAAkAlAoCBQNuaWwJAPwHBAUEdGhpcwIPZmluYWxpemVXcmFwcGVyCQDMCAIFAXEFA25pbAUDbmlsAmFNAQdkZXBvc2l0AAQCYlMDCQAAAggFAmFNBmNhbGxlcgUBdwYJAQJhVgEFAmFNAwkAAAIFAmJTBQJiUwQCYXUJAQJibwAEAmJUCQBlAgUGaGVpZ2h0CQEBaQEJAQJhZQAEAmJVCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBUgkBAmFnAAkArAICCQCsAgICHG1hbmRhdG9yeSBlbWlzc2lvbl9jb250cmFjdC4JAQJhZwACDyBpcyBub3QgZGVmaW5lZAQCYlYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBUgkBAmFoAAAABAJiVwkAawMJAGgCBQJiVAUCYlYFAmJVBQFjBAJiWAkA/AcEBQFSAgRlbWl0CQDMCAIFAmJXBQNuaWwFA25pbAMJAAACBQJiWAUCYlgEAmJZAAAEAmJaCQECYXkDBQJhdQUCYlkFAmJXBAJjYQkA/AcEBQFSAhZnd3hIb2xkZXJzUmV3YXJkVXBkYXRlBQNuaWwFA25pbAMJAAACBQJjYQUCY2EEAmNiCQBkAgUCYlkFAmJXBAJjYwMJAAACBQJjYgAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbAAFAmF1CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXQBBQJhdQUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXYBBQJhdQUCYlcJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZQAFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmF3AQUCYXUFAmJZCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYW0ACQBkAgUCYXUAAQkAzAgCCQELU3RyaW5nRW50cnkCCQECYXgABQJiWgkAzAgCCQELU3RyaW5nRW50cnkCCQECYUIBBQJhdQUCYloFA25pbAkAlAoCBQJjYwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTQELY2xhaW1SZXdhcmQABAJhZAkBAVgABAJjZAkApQgBCAUCYU0GY2FsbGVyBAJjZQkBAmJwAQUCY2QEAmFMCAUCY2UCXzEEAmNjCAUCY2UCXzIEAmNmAwkAZgIFAmFMAAAGCQACAQIQTm90aGluZyB0byBjbGFpbQMJAAACBQJjZgUCY2YEAmNnAAAEAmNoCgACYlIJAPwHBAUCYUgCBWNsYWltCQDMCAIFAUIFA25pbAUDbmlsAwkAAQIFAmJSAgNJbnQFAmJSCQACAQkArAICCQADAQUCYlICGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQCY2kJAGQCBQJhTAUCY2gJAJQKAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJhTQZjYWxsZXIFAmNpCQDZBAEJAJEDAgUCYWQFAVMJAMwIAgkBAmFJBAIFY2xhaW0FAmNkBQJhTAUCYU0FA25pbAUCY2MJAMwIAgUCY2kJAMwIAgUCY2cFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTQETY2xhaW1SZXdhcmRSRUFET05MWQECY2QEAmNqCQECYnABBQJjZAQCYUwIBQJjagJfMQQCY2MIBQJjagJfMgQCY2sJAQt2YWx1ZU9yRWxzZQIJAJoIAgUCYUgJAQFOAgUBQgUCY2QAAAQCY2kJAGQCBQJhTAUCY2sJAJQKAgUDbmlsBQJjaQJhTQEdbGF0ZXN0RmluYWxpemVkUGVyaW9kUkVBRE9OTFkBAmNkCQCUCgIFA25pbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYWwAAP///////////wECYU0BIWxhdGVzdEZpbmFsaXplZFBlcmlvZEluZm9SRUFET05MWQECY2QJAJQKAgUDbmlsCQEBagEJAQJheAACYU0BFWNhbGNHd3hQYXJhbXNSRUFET05MWQMCY2wCY20CY24EAmNvCQBkAgUCY20FAmNuBAJjcAkBAS0BCQBrAwUCY2wFAWIFAmNuBAJjcQkAaAIJAGsDBQJjbAUBYgUCY24FAmNvCQCUCgIFA25pbAkAzAgCBQJjcAkAzAgCBQJjcQkAzAgCCQECYm8ABQNuaWwCYU0BGmNhbGNHd3hBbW91bnRTdGFydFJFQURPTkxZAwJjcgJjcwJjdAQCY3UJAGsDBQJjcwUBYwUCY3QEAmJ0CQBrAwUCY3IFAmN1BQFjCQCUCgIFA25pbAkAzAgCBQJidAUDbmlsAmFNARVvbkVtaXNzaW9uRm9yR3d4U3RhcnQAAwkBAiE9AggFAmFNBmNhbGxlcgUBdAkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFlAAUGaGVpZ2h0BQNuaWwCYU0BI2xhdGVzdFBlcmlvZEVtaXNzaW9uUmV3YXJkc1JFQURPTkxZAQJjZAQCYXUJAQJibwAJAJQKAgUDbmlsCQDMCAIJAQFnAQkBAmF2AQUCYXUFA25pbAJhTQEFY2FsY0QFAmN2AmN3AmN4AmN5AmN6BAJjQQkAtgIBAAIEAmNCCQCnAwEFAmN5BAJjQwkApwMBBQJjegQCY0QJAKcDAQUCY3YEAmNFCQCnAwEFAmN3BAJjRgkAuQICCQCnAwEFAmN4BQJjQgQCYVQJALcCAgUCY0QFAmNFAwkAAAIFAmFUBQFkCQCUCgIFA25pbAkApgMBBQFkBAJjRwkAuQICBQJjRgUCY0EEAmNICQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgECY0kCAmNKAmNLBAJjTAUCY0oEAmNNCAUCY0wCXzEEAmNOCAUCY0wCXzIEAmNPCAUCY0wCXzMDCQECIT0CBQJjTwUEdW5pdAUCY0oEAmNQCQC6AgIJALkCAgkAuQICBQJjTQUCY00FAmNNCQC5AgIJALkCAgkAuQICBQJjRAUCY0UFAmNBBQJjQQQCY1EJALoCAgkAuQICCQC3AgIJALoCAgkAuQICBQJjRwUCYVQFAmNCCQC5AgIFAmNQBQJjQQUCY00JALcCAgkAugICCQC5AgIJALgCAgUCY0cFAmNCBQJjTQUCY0IJALkCAgkAtwICBQJjQQkAtgIBAAEFAmNQBAJjUgkBAW4BCQC4AgIFAmNRCQEFdmFsdWUBBQJjTQMJAMACAgUCY0MFAmNSCQCVCgMFAmNRBQJjTQUCY0sJAJUKAwUCY1EFAmNNBQR1bml0BAJjUwoAAmNUBQJjSAoAAmNVCQCQAwEFAmNUCgACY1YJAJUKAwUCYVQFBHVuaXQFBHVuaXQKAQJjVwICY1gCY1kDCQBnAgUCY1kFAmNVBQJjWAkBAmNJAgUCY1gJAJEDAgUCY1QFAmNZCgECY1oCAmNYAmNZAwkAZwIFAmNZBQJjVQUCY1gJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA3CQECY1oCCQECY1cCCQECY1cCCQECY1cCCQECY1cCCQECY1cCCQECY1cCCQECY1cCBQJjVgAAAAEAAgADAAQABQAGAAcEAmNRCAUCY1MCXzEEAmNOCAUCY1MCXzIEAmNPCAUCY1MCXzMDCQECIT0CBQJjTwUEdW5pdAkAlAoCBQNuaWwJAKYDAQUCY1EEAmNSCQEBbgEJALgCAgUCY1EJAQV2YWx1ZQEFAmNOCQACAQkArAICAh1EIGNhbGN1bGF0aW9uIGVycm9yLCBkRGlmZiA9IAkApgMBBQJjUgJhTQEKc2V0TWFuYWdlcgECZGEEAmJTCQECYVYBBQJhTQMJAAACBQJiUwUCYlMEAmRiCQDZBAEFAmRhAwkAAAIFAmRiBQJkYgkAzAgCCQELU3RyaW5nRW50cnkCCQECYVEABQJkYQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNAQ5jb25maXJtTWFuYWdlcgAEAmRjCQECYVUABAJkZAMJAQlpc0RlZmluZWQBBQJkYwYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZGQFAmRkBAJkZQMJAAACCAUCYU0PY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJkYwYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZGUFAmRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhUAAJANgEAQkBBXZhbHVlAQUCZGMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFRAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJkZgECZGcABAJkaAQCYVMJAQJhUgADCQABAgUCYVMCCkJ5dGVWZWN0b3IEAmFYBQJhUwUCYVgDCQABAgUCYVMCBFVuaXQIBQJkZg9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCZGYJYm9keUJ5dGVzCQCRAwIIBQJkZgZwcm9vZnMAAAUCZGgHAUpB", "height": 2538570, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FWL2HwD6oRFLzo6F455UKyxYYhaPwpX4iTJF1DskdgTa Next: Fjy5zC31WL1bKgvRC7dEx4yMMbErWjVvPvHDaNynFMmx Diff:
OldNewDifferences
435435 let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
436436 let gwxHoldersRewardUpdate = invoke(emissionContract, "gwxHoldersRewardUpdate", nil, nil)
437437 if ((gwxHoldersRewardUpdate == gwxHoldersRewardUpdate))
438- then [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)]
438+ then {
439+ let totalReward = (matcherPart + auxAmount)
440+ let actions = if ((totalReward == 0))
441+ then nil
442+ 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)]
443+ $Tuple2(actions, unit)
444+ }
439445 else throw("Strict value is not equal to itself.")
440446 }
441447 else throw("Strict value is not equal to itself.")
449455 func claimReward () = {
450456 let cfgArray = readConfigArrayOrFail()
451457 let address = toString(i.caller)
452- let $t01752517575 = commonClaimReward(address)
453- let amount = $t01752517575._1
454- let actions = $t01752517575._2
458+ let $t01763717687 = commonClaimReward(address)
459+ let amount = $t01763717687._1
460+ let actions = $t01763717687._2
455461 let checkAmount = if ((amount > 0))
456462 then true
457463 else throw("Nothing to claim")
474480
475481 @Callable(i)
476482 func claimRewardREADONLY (address) = {
477- let $t01814818198 = commonClaimReward(address)
478- let amount = $t01814818198._1
479- let actions = $t01814818198._2
483+ let $t01826018310 = commonClaimReward(address)
484+ let amount = $t01826018310._1
485+ let actions = $t01826018310._2
480486 let referralUnclaimed = valueOrElse(getInteger(referralsContractAddressOrFail, keyUnclaimedReferral(referralProgramName, address)), 0)
481487 let totalAmount = (amount + referralUnclaimed)
482488 $Tuple2(nil, totalAmount)
543549 let ann = (amp * nCoins)
544550 let arr = [0, 1, 2, 3, 4, 5, 6]
545551 func calc (acc,cur) = {
546- let $t02083120858 = acc
547- let d = $t02083120858._1
548- let dPrev = $t02083120858._2
549- let found = $t02083120858._3
552+ let $t02094320970 = acc
553+ let d = $t02094320970._1
554+ let dPrev = $t02094320970._2
555+ let found = $t02094320970._3
550556 if ((found != unit))
551557 then acc
552558 else {
559565 }
560566 }
561567
562- let $t02145621519 = {
568+ let $t02156821631 = {
563569 let $l = arr
564570 let $s = size($l)
565571 let $acc0 = $Tuple3(s, unit, unit)
573579
574580 $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)
575581 }
576- let dNext = $t02145621519._1
577- let dPrev = $t02145621519._2
578- let found = $t02145621519._3
582+ let dNext = $t02156821631._1
583+ let dPrev = $t02156821631._2
584+ let found = $t02156821631._3
579585 if ((found != unit))
580586 then $Tuple2(nil, toString(dNext))
581587 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)
430430 let auxAmount = fraction((deltaH * gwxHoldersRewardCurrent), emissionRate, MULT8)
431431 let em = invoke(emissionContract, "emit", [auxAmount], nil)
432432 if ((em == em))
433433 then {
434434 let matcherPart = 0
435435 let payoutInfo = PeriodPayoutInfo(period, matcherPart, auxAmount)
436436 let gwxHoldersRewardUpdate = invoke(emissionContract, "gwxHoldersRewardUpdate", nil, nil)
437437 if ((gwxHoldersRewardUpdate == gwxHoldersRewardUpdate))
438- then [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)]
438+ then {
439+ let totalReward = (matcherPart + auxAmount)
440+ let actions = if ((totalReward == 0))
441+ then nil
442+ 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)]
443+ $Tuple2(actions, unit)
444+ }
439445 else throw("Strict value is not equal to itself.")
440446 }
441447 else throw("Strict value is not equal to itself.")
442448 }
443449 else throw("Strict value is not equal to itself.")
444450 }
445451
446452
447453
448454 @Callable(i)
449455 func claimReward () = {
450456 let cfgArray = readConfigArrayOrFail()
451457 let address = toString(i.caller)
452- let $t01752517575 = commonClaimReward(address)
453- let amount = $t01752517575._1
454- let actions = $t01752517575._2
458+ let $t01763717687 = commonClaimReward(address)
459+ let amount = $t01763717687._1
460+ let actions = $t01763717687._2
455461 let checkAmount = if ((amount > 0))
456462 then true
457463 else throw("Nothing to claim")
458464 if ((checkAmount == checkAmount))
459465 then {
460466 let amountFromEmission = 0
461467 let claimedReferral = {
462468 let @ = invoke(referralsContractAddressOrFail, "claim", [referralProgramName], nil)
463469 if ($isInstanceOf(@, "Int"))
464470 then @
465471 else throw(($getType(@) + " couldn't be cast to Int"))
466472 }
467473 let totalAmount = (amount + claimedReferral)
468474 $Tuple2(([ScriptTransfer(i.caller, totalAmount, fromBase58String(cfgArray[IdxCfgAssetId])), HistoryEntry("claim", address, amount, i)] ++ actions), [totalAmount, amountFromEmission])
469475 }
470476 else throw("Strict value is not equal to itself.")
471477 }
472478
473479
474480
475481 @Callable(i)
476482 func claimRewardREADONLY (address) = {
477- let $t01814818198 = commonClaimReward(address)
478- let amount = $t01814818198._1
479- let actions = $t01814818198._2
483+ let $t01826018310 = commonClaimReward(address)
484+ let amount = $t01826018310._1
485+ let actions = $t01826018310._2
480486 let referralUnclaimed = valueOrElse(getInteger(referralsContractAddressOrFail, keyUnclaimedReferral(referralProgramName, address)), 0)
481487 let totalAmount = (amount + referralUnclaimed)
482488 $Tuple2(nil, totalAmount)
483489 }
484490
485491
486492
487493 @Callable(i)
488494 func latestFinalizedPeriodREADONLY (address) = $Tuple2(nil, valueOrElse(getInteger(this, keyLatestPeriod()), -1))
489495
490496
491497
492498 @Callable(i)
493499 func latestFinalizedPeriodInfoREADONLY (address) = $Tuple2(nil, getStringByKey(keyLastPayoutInfo()))
494500
495501
496502
497503 @Callable(i)
498504 func calcGwxParamsREADONLY (gwxAmountStart,lockStartHeight,lockDurationBlocks) = {
499505 let lockEndHeight = (lockStartHeight + lockDurationBlocks)
500506 let scale8ParamK = -(fraction(gwxAmountStart, SCALE, lockDurationBlocks))
501507 let scale8ParamB = (fraction(gwxAmountStart, SCALE, lockDurationBlocks) * lockEndHeight)
502508 $Tuple2(nil, [scale8ParamK, scale8ParamB, nextPeriod()])
503509 }
504510
505511
506512
507513 @Callable(i)
508514 func calcGwxAmountStartREADONLY (wxLockAmount,lockDuration,maxLockDuration) = {
509515 let coeffX8 = fraction(lockDuration, MULT8, maxLockDuration)
510516 let gWxAmountStart = fraction(wxLockAmount, coeffX8, MULT8)
511517 $Tuple2(nil, [gWxAmountStart])
512518 }
513519
514520
515521
516522 @Callable(i)
517523 func onEmissionForGwxStart () = if ((i.caller != factoryContract))
518524 then throw("permissions denied")
519525 else [IntegerEntry(keyGwxRewardEmissionStartHeight(), height)]
520526
521527
522528
523529 @Callable(i)
524530 func latestPeriodEmissionRewardsREADONLY (address) = {
525531 let period = nextPeriod()
526532 $Tuple2(nil, [getNumberByKey(keyAuxEmissionRewardForPeriod(period))])
527533 }
528534
529535
530536
531537 @Callable(i)
532538 func calcD (x1BigIntStr,x2BigIntStr,ampBigIntStr,aPrecisionBigIntStr,targetPrecisionBigIntStr) = {
533539 let nCoins = toBigInt(2)
534540 let aPrecision = parseBigIntValue(aPrecisionBigIntStr)
535541 let targetPrecision = parseBigIntValue(targetPrecisionBigIntStr)
536542 let x1 = parseBigIntValue(x1BigIntStr)
537543 let x2 = parseBigIntValue(x2BigIntStr)
538544 let amp = (parseBigIntValue(ampBigIntStr) * aPrecision)
539545 let s = (x1 + x2)
540546 if ((s == zeroBigInt))
541547 then $Tuple2(nil, toString(zeroBigInt))
542548 else {
543549 let ann = (amp * nCoins)
544550 let arr = [0, 1, 2, 3, 4, 5, 6]
545551 func calc (acc,cur) = {
546- let $t02083120858 = acc
547- let d = $t02083120858._1
548- let dPrev = $t02083120858._2
549- let found = $t02083120858._3
552+ let $t02094320970 = acc
553+ let d = $t02094320970._1
554+ let dPrev = $t02094320970._2
555+ let found = $t02094320970._3
550556 if ((found != unit))
551557 then acc
552558 else {
553559 let dp = (((d * d) * d) / (((x1 * x2) * nCoins) * nCoins))
554560 let dNext = (((((ann * s) / aPrecision) + (dp * nCoins)) * d) / ((((ann - aPrecision) * d) / aPrecision) + ((nCoins + toBigInt(1)) * dp)))
555561 let dDiff = absBigInt((dNext - value(d)))
556562 if ((targetPrecision >= dDiff))
557563 then $Tuple3(dNext, d, cur)
558564 else $Tuple3(dNext, d, unit)
559565 }
560566 }
561567
562- let $t02145621519 = {
568+ let $t02156821631 = {
563569 let $l = arr
564570 let $s = size($l)
565571 let $acc0 = $Tuple3(s, unit, unit)
566572 func $f0_1 ($a,$i) = if (($i >= $s))
567573 then $a
568574 else calc($a, $l[$i])
569575
570576 func $f0_2 ($a,$i) = if (($i >= $s))
571577 then $a
572578 else throw("List size exceeds 7")
573579
574580 $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)
575581 }
576- let dNext = $t02145621519._1
577- let dPrev = $t02145621519._2
578- let found = $t02145621519._3
582+ let dNext = $t02156821631._1
583+ let dPrev = $t02156821631._2
584+ let found = $t02156821631._3
579585 if ((found != unit))
580586 then $Tuple2(nil, toString(dNext))
581587 else {
582588 let dDiff = absBigInt((dNext - value(dPrev)))
583589 throw(("D calculation error, dDiff = " + toString(dDiff)))
584590 }
585591 }
586592 }
587593
588594
589595
590596 @Callable(i)
591597 func setManager (pendingManagerPublicKey) = {
592598 let checkCaller = mustManager(i)
593599 if ((checkCaller == checkCaller))
594600 then {
595601 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
596602 if ((checkManagerPublicKey == checkManagerPublicKey))
597603 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
598604 else throw("Strict value is not equal to itself.")
599605 }
600606 else throw("Strict value is not equal to itself.")
601607 }
602608
603609
604610
605611 @Callable(i)
606612 func confirmManager () = {
607613 let pm = pendingManagerPublicKeyOrUnit()
608614 let hasPM = if (isDefined(pm))
609615 then true
610616 else throw("No pending manager")
611617 if ((hasPM == hasPM))
612618 then {
613619 let checkPM = if ((i.callerPublicKey == value(pm)))
614620 then true
615621 else throw("You are not pending manager")
616622 if ((checkPM == checkPM))
617623 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
618624 else throw("Strict value is not equal to itself.")
619625 }
620626 else throw("Strict value is not equal to itself.")
621627 }
622628
623629
624630 @Verifier(tx)
625631 func verify () = {
626632 let targetPublicKey = match managerPublicKeyOrUnit() {
627633 case pk: ByteVector =>
628634 pk
629635 case _: Unit =>
630636 tx.senderPublicKey
631637 case _ =>
632638 throw("Match error")
633639 }
634640 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
635641 }
636642

github/deemru/w8io/03bedc9 
120.05 ms