tx · FWL2HwD6oRFLzo6F455UKyxYYhaPwpX4iTJF1DskdgTa 3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE: -0.01800000 Waves 2023.04.17 15:15 [2538555] smart account 3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE > SELF 0.00000000 Waves
{ "type": 13, "id": "FWL2HwD6oRFLzo6F455UKyxYYhaPwpX4iTJF1DskdgTa", "fee": 1800000, "feeAssetId": null, "timestamp": 1681733768066, "version": 2, "chainId": 84, "sender": "3Mp5kisFrqESzrXxAMEPk2k69zpeF41czEE", "senderPublicKey": "G349Uq3FTox7dRNLeAfAQeoACvwZ9iEnVSaHcEYn6j8J", "proofs": [ "FkJYDpztZ2K6TrAmR11929pQCqxUNes5CRjxR2uUgEpx4AAPo4X2b3eXKMVPMQzrxFFTmeazbkG1tV27RSUzQ5i" ], "script": "base64:BgKXGggCEgQKAggBEgASAwoBARIAEgASABIDCgEIEgMKAQgSAwoBCBIFCgMBAQESBQoDAQEBEgASAwoBCBIHCgUICAgICBIDCgEIEgAiA1NFUCIFU0NBTEUiBU1VTFQ4Igp6ZXJvQmlnSW50IhRwcm9jZXNzaW5nU3RhZ2VUb3RhbCIVcHJvY2Vzc2luZ1N0YWdlU2hhcmVzIg5nZXROdW1iZXJCeUtleSIDa2V5Ig9nZXROdW1iZXJPckZhaWwiDmdldFN0cmluZ0J5S2V5Ig9nZXRTdHJpbmdPckZhaWwiA2FicyIDdmFsIglhYnNCaWdJbnQiC2tleU1heERlcHRoIg9tYXhEZXB0aERlZmF1bHQiCG1heERlcHRoIhFrZXlGYWN0b3J5QWRkcmVzcyIRZmFjdG9yeUFkZHJlc3NTdHIiD2ZhY3RvcnlDb250cmFjdCISa2V5RW1pc3Npb25BZGRyZXNzIhlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0IhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0IhNrZXlOdW1Ub1VzZXJNYXBwaW5nIgNudW0iFmtleVJlZmVycmFsUHJvZ3JhbU5hbWUiGnJlZmVycmFsUHJvZ3JhbU5hbWVEZWZhdWx0IhNyZWZlcnJhbFByb2dyYW1OYW1lIhdrZXlSZWZlcnJhbE1pbkdXeEFtb3VudCIbcmVmZXJyYWxNaW5HV3hBbW91bnREZWZhdWx0IhRyZWZlcnJhbE1pbkdXeEFtb3VudCIZa2V5UmVmZXJyZXJSZXdhcmRQZXJtaWxsZSIdcmVmZXJyZXJSZXdhcmRQZXJtaWxsZURlZmF1bHQiFnJlZmVycmVyUmV3YXJkUGVybWlsbGUiGWtleVJlZmVycmFsUmV3YXJkUGVybWlsbGUiHXJlZmVycmFsUmV3YXJkUGVybWlsbGVEZWZhdWx0IhZyZWZlcnJhbFJld2FyZFBlcm1pbGxlIgtrZXlSZWZlcnJlciIPcmVmZXJyYWxBZGRyZXNzIhRrZXlVbmNsYWltZWRSZWZlcnJhbCILcHJvZ3JhbU5hbWUiDmNsYWltZXJBZGRyZXNzIhJlbWlzc2lvbkFkZHJlc3NTdHIiEGVtaXNzaW9uQ29udHJhY3QiDUlkeENmZ0Fzc2V0SWQiFklkeENmZ1BhY2VtYWtlckFkZHJlc3MiFklkeENmZ0Jvb3N0aW5nQ29udHJhY3QiDklkeENmZ01heERlcHRoIglrZXlDb25maWciFXJlYWRDb25maWdBcnJheU9yRmFpbCIMZm9ybWF0Q29uZmlnIgx3eEFzc2V0SWRTdHIiGm1hdGNoZXJQYWNlbWFrZXJBZGRyZXNzU3RyIhpib29zdGluZ0NvbnRyYWN0QWRkcmVzc1N0ciIWYm9vc3RpbmdDb250cmFjdE9yRmFpbCIIY2ZnQXJyYXkiH2tleUd3eFJld2FyZEVtaXNzaW9uU3RhcnRIZWlnaHQiDWtleVVzZXJzQ291bnQiFmtleVJhdGVQZXJCbG9ja0N1cnJlbnQiGmtleUd3eEhvbGRlcnNSZXdhcmRDdXJyZW50IhdrZXlHd3hIb2xkZXJzUmV3YXJkTmV4dCIUa2V5UG9vbFdlaWdodFZpcnR1YWwiFGtleU5leHRQcm9jZXNzZWRVc2VyIg9rZXlMYXRlc3RQZXJpb2QiDWtleU5leHRQZXJpb2QiEmtleVByb2Nlc3NpbmdTdGFnZSIWa2V5TmV4dFByb2Nlc3NlZFBlcmlvZCIQa2V5VXNlclVuY2xhaW1lZCIJdXNlckluZGV4IhtrZXlOZXh0VW5sYWltZWRQZXJpb2RPZlVzZXIiHGtleUxhc3RQcm9jZXNzZWRQZXJpb2RPZlVzZXIiEmtleUhlaWdodEZvclBlcmlvZCIGcGVyaW9kIh1rZXlBdXhFbWlzc2lvblJld2FyZEZvclBlcmlvZCIXa2V5VG90YWxBbW91bnRGb3JQZXJpb2QiEWtleUxhc3RQYXlvdXRJbmZvIhBQZXJpb2RQYXlvdXRJbmZvIg1tYXRjaGVyUmV3YXJkIg5lbWlzc2lvblJld2FyZCIUa2V5UGF5b3V0SGlzdG9yeUluZm8iF2tleVRvdGFsV2VpZ2h0Rm9yUGVyaW9kIhZrZXlVc2VyS1ZhbHVlRm9yUGVyaW9kIhZrZXlVc2VyQlZhbHVlRm9yUGVyaW9kIhZrZXlVc2VyV2VpZ2h0Rm9yUGVyaW9kIhtrZXlSZWZlcnJhbHNDb250cmFjdEFkZHJlc3MiHnJlZmVycmFsc0NvbnRyYWN0QWRkcmVzc09yRmFpbCIMSGlzdG9yeUVudHJ5IgR0eXBlIgR1c2VyIgZhbW91bnQiAWkiCmhpc3RvcnlLRVkiC2hpc3RvcnlEQVRBIhNrZXlNYW5hZ2VyUHVibGljS2V5IhprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleSIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIHJG1hdGNoMCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgJwZCICcGsiDmNhbGNVc2VyV2VpZ2h0Ihdib29zdGluZ0NvbnRyYWN0QWRkcmVzcyIPaGVpZ2h0Rm9yUGVyaW9kIgVrTGFzdCIEa0tleSIEa1JhdyILa1VzZXJXZWlnaHQiAWsiAWIiAXciAXAiAnB2IhZjYWxjVXNlcldlaWdodEZvckNsYWltIhB1c2VyV2VpZ2h0T3JVbml0IhVnZXRVc2VySW5kZXhCeUFkZHJlc3MiC3VzZXJBZGRyZXNzIgpuZXh0UGVyaW9kIhFjb21tb25DbGFpbVJld2FyZCIHdXNlcklkeCITdXNlclVuY2xhaW1lZE9wdGlvbiIBdSIOZ1d4QW1vdW50U3RhcnQiCHJlZmVycmVyIhFhY3RpdmVSZWZlcnJhbEludiIPcHJvY2Vzc2luZ1N0YWdlIg1jdXJyZW50UGVyaW9kIgtjdXJyZW50VXNlciIMbGF0ZXN0UGVyaW9kIgp1c2Vyc0NvdW50Ig50b3RhbFdlaWdodEtleSILdG90YWxXZWlnaHQiDSR0MDEyNDE1MTI1MzEiCnVzZXJXZWlnaHQiC3VzZXJBY3Rpb25zIg50b3RhbFdlaWdodE5ldyIRcHJvY2Vzc2luZ0FjdGlvbnMiGnVzZXJBbW91bnRNYXRjaGVyRm9yUGVyaW9kIht1c2VyQW1vdW50RW1pc3Npb25Gb3JQZXJpb2QiD3VzZXJUb3RhbEFtb3VudCILcmVmZXJyYWxJbnYiDnJlZmVycmVyUmV3YXJkIg5yZWZlcnJhbFJld2FyZCIQdW5jbGFpbWVkQWN0aW9ucyIHY291bnRlciIGcmVzdWx0IgFAIgtjaGVja0NhbGxlciIGZGVsdGFIIgxlbWlzc2lvblJhdGUiF2d3eEhvbGRlcnNSZXdhcmRDdXJyZW50IglhdXhBbW91bnQiAmVtIgttYXRjaGVyUGFydCIKcGF5b3V0SW5mbyIWZ3d4SG9sZGVyc1Jld2FyZFVwZGF0ZSIHYWRkcmVzcyINJHQwMTc1MjUxNzU3NSIHYWN0aW9ucyILY2hlY2tBbW91bnQiEmFtb3VudEZyb21FbWlzc2lvbiIPY2xhaW1lZFJlZmVycmFsIgt0b3RhbEFtb3VudCINJHQwMTgxNDgxODE5OCIRcmVmZXJyYWxVbmNsYWltZWQiDmd3eEFtb3VudFN0YXJ0Ig9sb2NrU3RhcnRIZWlnaHQiEmxvY2tEdXJhdGlvbkJsb2NrcyINbG9ja0VuZEhlaWdodCIMc2NhbGU4UGFyYW1LIgxzY2FsZThQYXJhbUIiDHd4TG9ja0Ftb3VudCIMbG9ja0R1cmF0aW9uIg9tYXhMb2NrRHVyYXRpb24iB2NvZWZmWDgiC3gxQmlnSW50U3RyIgt4MkJpZ0ludFN0ciIMYW1wQmlnSW50U3RyIhNhUHJlY2lzaW9uQmlnSW50U3RyIhh0YXJnZXRQcmVjaXNpb25CaWdJbnRTdHIiBm5Db2lucyIKYVByZWNpc2lvbiIPdGFyZ2V0UHJlY2lzaW9uIgJ4MSICeDIiA2FtcCIDYW5uIgNhcnIiBGNhbGMiA2FjYyIDY3VyIg0kdDAyMDgzMTIwODU4IgFkIgVkUHJldiIFZm91bmQiAmRwIgVkTmV4dCIFZERpZmYiDSR0MDIxNDU2MjE1MTkiAiRsIgIkcyIFJGFjYzAiBSRmMF8xIgIkYSICJGkiBSRmMF8yIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleVMAAWECAl9fAAFiAOgHAAFjAIDC1y8AAWQJALYCAQAAAAFlAAAAAWYAAQEBZwEBaAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFoAAABAWkBAWgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFoCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQFoAg8gaXMgbm90IGRlZmluZWQBAWoBAWgJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUBaAIAAQFrAQFoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUBaAkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBaAIPIGlzIG5vdCBkZWZpbmVkAQFsAQFtAwkAZgIAAAUBbQkBAS0BBQFtBQFtAQFuAQFtAwkAvwICBQFkBQFtCQC+AgEFAW0FAW0AAW8CDCVzX19tYXhEZXB0aAABcAAeAAFxCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAW8FAXABAXIAAhwlcyVzX19jb25maWdfX2ZhY3RvcnlBZGRyZXNzAAFzCQEBawEJAQFyAAABdAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBcwEBdQACHSVzJXNfX2NvbmZpZ19fZW1pc3Npb25BZGRyZXNzAQF2AAkAuQkCCQDMCAICAiVzCQDMCAICFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFA25pbAUBYQABdwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUBdAkBAXYAAQF4AQF5CQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICB21hcHBpbmcJAMwIAgIIbnVtMnVzZXIJAMwIAgkApAMBBQF5BQNuaWwFAWEAAXoJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlZmVycmFsCQDMCAICC3Byb2dyYW1OYW1lBQNuaWwFAWEAAUECBnd4bG9jawABQgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQF6BQFBAAFDCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAgxtaW5HV3hBbW91bnQFA25pbAUBYQABRAkAaAIA9AMFAWMAAUUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBQwUBRAABRgkAuQkCCQDMCAICBCVzJXMJAMwIAgIIcmVmZXJyYWwJAMwIAgIWcmVmZXJyZXJSZXdhcmRQZXJtaWxsZQUDbmlsBQFhAAFHADIAAUgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBRgUBRwABSQkAuQkCCQDMCAICBCVzJXMJAMwIAgIIcmVmZXJyYWwJAMwIAgIWcmVmZXJyYWxSZXdhcmRQZXJtaWxsZQUDbmlsBQFhAAFKADIAAUsJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBSQUBSgEBTAEBTQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAghyZWZlcnJlcgkAzAgCBQFCCQDMCAIFAU0FA25pbAUBYQEBTgIBTwFQCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEXVuY2xhaW1lZFJlZmVycmFsCQDMCAIFAU8JAMwIAgUBUAUDbmlsBQFhAAFRCQEBawEJAQF1AAABUgkBEUBleHRyTmF0aXZlKDEwNjIpAQUBUQABUwABAAFUAAIAAVUAAwABVgAEAQFXAAIKJXNfX2NvbmZpZwEBWAAJALUJAgkBAWsBCQEBVwAFAWEBAVkEAVoCYWECYWIBcQkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAIFAVoJAMwIAgUCYWEJAMwIAgUCYWIJAMwIAgkApAMBBQFxBQNuaWwFAWEBAmFjAAQCYWQJAQFYAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCYWQFAVUCKGJvb3N0aW5nIGNvbnRyYWN0IGFkZHJlc3MgaXMgbm90IGRlZmluZWQBAmFlAAIoJXMlc19fZ3d4UmV3YXJkRW1pc3Npb25QYXJ0X19zdGFydEhlaWdodAECYWYAAg8lc19fbmV4dFVzZXJOdW0BAmFnAAIbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQJhaAACHyVzJXNfX2d3eEhvbGRlcnNSZXdhcmRfX2N1cnJlbnQBAmFpAAIcJXMlc19fZ3d4SG9sZGVyc1Jld2FyZF9fbmV4dAECYWoAAiAlcyVzX19wb29sV2VpZ2h0X19HV1h2aXJ0dWFsUE9PTAECYWsAAhUlc19fbmV4dFByb2Nlc3NlZFVzZXIBAmFsAAIQJXNfX2xhdGVzdFBlcmlvZAECYW0AAg4lc19fbmV4dFBlcmlvZAECYW4AAhMlc19fcHJvY2Vzc2luZ1N0YWdlAQJhbwACFyVzX19uZXh0UHJvY2Vzc2VkUGVyaW9kAQJhcAECYXEJALkJAgkAzAgCAgQlcyVkCQDMCAICDXVzZXJVbmNsYWltZWQJAMwIAgkApAMBBQJhcQUDbmlsBQFhAQJhcgECYXEJALkJAgkAzAgCAhclcyVkX19uZXh0Q2xhaW1lZFBlcmlvZAkAzAgCCQCkAwEFAmFxBQNuaWwFAWEBAmFzAQJhcQkAuQkCCQDMCAICGSVzJWRfX2xhc3RQcm9jZXNzZWRQZXJpb2QJAMwIAgkApAMBBQJhcQUDbmlsBQFhAQJhdAECYXUJALkJAgkAzAgCAholcyVkX19zdGFydEhlaWdodEZvclBlcmlvZAkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmF2AQJhdQkAuQkCCQDMCAICFyVzJWRfX2F1eEVtaXNzaW9uUmV3YXJkCQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYXcBAmF1CQC5CQIJAMwIAgIaJXMlZF9fdG90YWxBbW91bnRGb3JQZXJpb2QJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJheAACEiVzX19sYXN0UGF5b3V0SW5mbwECYXkDAmF1AmF6AmFBCQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIJAKQDAQUCYXUJAMwIAgkApAMBBQJhegkAzAgCCQCkAwEFAmFBBQNuaWwFAWEBAmFCAQJhdQkAuQkCCQDMCAICGCVzJXMlZF9fcGF5b3V0c19faGlzdG9yeQkAzAgCCQCkAwEFAmF1BQNuaWwFAWEBAmFDAQJhdQkAuQkCCQDMCAICGiVzJWRfX3RvdGFsV2VpZ2h0Rm9yUGVyaW9kCQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYUQCAmF1AmFxCQC5CQIJAMwIAgIXJXMlZCVzJWRfX3BhcmFtQnlQZXJpb2QJAMwIAgkApAMBBQJhcQkAzAgCAgFrCQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYUUCAmF1AmFxCQC5CQIJAMwIAgIXJXMlZCVzJWRfX3BhcmFtQnlQZXJpb2QJAMwIAgkApAMBBQJhcQkAzAgCAgFiCQDMCAIJAKQDAQUCYXUFA25pbAUBYQECYUYCAmF1AmFxCQC5CQIJAMwIAgIXJXMlZCVzJWRfX3BhcmFtQnlQZXJpb2QJAMwIAgkApAMBBQJhcQkAzAgCAgZ3ZWlnaHQJAMwIAgkApAMBBQJhdQUDbmlsBQFhAQJhRwAJALkJAgkAzAgCAgQlcyVzCQDMCAICBmNvbmZpZwkAzAgCAhhyZWZlcnJhbHNDb250cmFjdEFkZHJlc3MFA25pbAUBYQACYUgJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQFrAQkBAmFHAAECYUkEAmFKAmFLAmFMAmFNBAJhTgkAuQkCCQDMCAICESVzJXMlcyVzX19oaXN0b3J5CQDMCAIFAmFKCQDMCAIFAmFLCQDMCAIJANgEAQgFAmFNDXRyYW5zYWN0aW9uSWQFA25pbAUBYQQCYU8JALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUCYUwFA25pbAUBYQkBC1N0cmluZ0VudHJ5AgUCYU4FAmFPAQJhUAACFCVzX19tYW5hZ2VyUHVibGljS2V5AQJhUQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQECYVIABAJhUwkAoggBCQECYVAAAwkAAQIFAmFTAgZTdHJpbmcEAmFUBQJhUwkA2QQBBQJhVAMJAAECBQJhUwIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJhVQAEAmFTCQCiCAEJAQJhUQADCQABAgUCYVMCBlN0cmluZwQCYVQFAmFTCQDZBAEFAmFUAwkAAQIFAmFTAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmFWAQJhTQQCYVcJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQCYVMJAQJhUgADCQABAgUCYVMCCkJ5dGVWZWN0b3IEAmFYBQJhUwMJAAACCAUCYU0PY2FsbGVyUHVibGljS2V5BQJhWAYFAmFXAwkAAQIFAmFTAgRVbml0AwkAAAIIBQJhTQZjYWxsZXIFBHRoaXMGBQJhVwkAAgECC01hdGNoIGVycm9yAQJhWQQCYVoCYmECYXUCYXEEAmJiCQECYXMBBQJhcQQCYmMJAQJhRAIFAmF1BQJhcQQCYmQJAJoIAgUCYVoFAmJjBAJiZQkBAmFGAgUCYXUFAmFxAwkBCWlzRGVmaW5lZAEFAmJkBAJiZgkBBXZhbHVlAQUCYmQEAmJnCQEFdmFsdWUBCQCaCAIFAmFaCQECYUUCBQJhdQUCYXEEAmJoCQBkAgkAaAIFAmJmBQJiYQUCYmcDCQBmAgUCYmgAAAkAlAoCCQBpAgUCYmgFAWIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmJiBQJhdQkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYmUFAmJoBQNuaWwJAJQKAgAABQNuaWwEAmJpCQCaCAIFBHRoaXMFAmJiAwMJAQlpc0RlZmluZWQBBQJiaQkAZwIFAmF1CQEFdmFsdWUBBQJiaQcEAmJqCQEFdmFsdWUBBQJiaQQCYmYJAQV2YWx1ZQEJAJoIAgUCYVoJAQJhRAIFAmJqBQJhcQQCYmcJAQV2YWx1ZQEJAJoIAgUCYVoJAQJhRQIFAmJqBQJhcQQCYmgJAGQCCQBoAgUCYmYFAmJhBQJiZwMJAGYCBQJiaAAACQCUCgIJAGkCBQJiaAUBYgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYmUFAmJoBQNuaWwJAJQKAgAABQNuaWwJAJQKAgAABQNuaWwBAmJrBAJhWgJiYQJhdQJhcQQCYmUJAQJhRgIFAmF1BQJhcQQCYmwJAJ8IAQUCYmUEAmFTBQJibAMJAAECBQJhUwIEVW5pdAAAAwkAAQIFAmFTAgNJbnQEAmJoBQJhUwkAaQIFAmJoBQFiCQACAQILTWF0Y2ggZXJyb3IBAmJtAgJhYgJibgQBaAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgdtYXBwaW5nCQDMCAICCHVzZXIybnVtCQDMCAIFAmJuBQNuaWwFAWEJAQ1wYXJzZUludFZhbHVlAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQdBZGRyZXNzAQkA2QQBBQJhYgUBaAkArAICCQCsAgIJAKwCAgINVXNlciBhZGRyZXNzIAUCYm4CLSBpcyBub3QgZm91bmQgaW4gYm9vc3RpbmcgY29udHJhY3QgZGF0YSwga2V5PQUBaAECYm8ACQEBZwEJAQJhbQABAmJwAQJibgQCYWQJAQFYAAQCYnEJAQJibQIJAJEDAgUCYWQFAVUFAmJuBAJicgkAnwgBCQECYXABBQJicQQCYVMFAmJyAwkAAQIFAmFTAgRVbml0CQCUCgIAAAUDbmlsAwkAAQIFAmFTAgNJbnQEAmJzBQJhUwkAlAoCBQJicwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFwAQUCYnEAAAUDbmlsCQACAQILTWF0Y2ggZXJyb3IQAmFNARZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5AgJibgJidAQCYnUJAJ0IAgUCYUgJAQFMAQUCYm4EAmJ2AwkAAAIFAmJ1BQR1bml0BQR1bml0CQD8BwQFAmFIAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIFAUIJAMwIAgUCYm4JAMwIAgkAZwIFAmJ0BQFFBQNuaWwFA25pbAMJAAACBQJidgUCYnYJAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNAQ5maW5hbGl6ZUhlbHBlcgAEAmJ3CQELdmFsdWVPckVsc2UCCQCfCAEJAQJhbgAFAWUEAmJ4CQEBZwEJAQJhbwAEAmJ5CQEBZwEJAQJhawAEAmJ6CQEBZwEJAQJhbAAEAmJBCQELdmFsdWVPckVsc2UCCQCaCAIJAQJhYwAJAQJhZgAAAAQCYkIJAQJhQwEFAmJ4BAJiQwkBAWcBCQECYUMBBQJieAQCYmEJAQFnAQkBAmF0AQUCYngDCQBmAgUCYngFAmJ6CQCUCgIFA25pbAcDCQAAAgUCYncFAWUEAmJECQECYVkECQECYWMABQJiYQUCYngFAmJ5BAJiRQgFAmJEAl8xBAJiRggFAmJEAl8yBAJiRwkAZAIFAmJDBQJiRQQCYkgDCQBmAgkAZQIFAmJBAAEFAmJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWsACQBkAgUCYnkAAQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYW4ABQFmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWsAAAAFA25pbAkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYkIFAmJHBQNuaWwFAmJIBQJiRgYDCQAAAgUCYncFAWYEAmJFCQECYmsECQECYWMABQJiYQUCYngFAmJ5BAJiSQkAawMJAQFnAQkBAmF3AQUCYngFAmJFBQJiQwQCYkoJAGsDCQEBZwEJAQJhdgEFAmJ4BQJiRQUCYkMEAmJLCQBkAgUCYkoFAmJJBAJicgkAnwgBCQECYXABBQJieQQCYm4JARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQJhYwAJAQF4AQUCYnkEAmJ1CQCdCAIFAmFICQEBTAEFAmJuBAJidgMJAAACBQJidQUEdW5pdAUEdW5pdAkA/AcEBQJhSAIWdXBkYXRlUmVmZXJyYWxBY3Rpdml0eQkAzAgCBQFCCQDMCAIFAmJuCQDMCAIJAGcCBQJiRQUBRQUDbmlsBQNuaWwDCQAAAgUCYnYFAmJ2BAJiTAMDCQAAAgUCYnUFBHVuaXQGCQBmAgUBRQUCYkUFBHVuaXQEAmJNCQBrAwUCYksFAUgFAWIEAmJOCQBrAwUCYksFAUsFAWIJAPwHBAUCYUgCDGluY1VuY2xhaW1lZAkAzAgCBQFCCQDMCAIFAmJuCQDMCAIFAmJNCQDMCAIFAmJOBQNuaWwFA25pbAMJAAACBQJiTAUCYkwEAmJPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXABBQJieQkAZAIJAQt2YWx1ZU9yRWxzZQIFAmJyAAAFAmJLBQNuaWwEAmJIAwkAZgIJAGUCBQJiQQABBQJieQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFrAAkAZAIFAmJ5AAEFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFvAAkAZAIFAmJ4AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhawAAAAkAzAgCCQELRGVsZXRlRW50cnkBCQECYW4ABQNuaWwJAJQKAgkAzggCBQJiTwUCYkgGCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIYaW52YWxpZCBwcm9jZXNzaW5nIHN0YWdlAmFNAQ9maW5hbGl6ZVdyYXBwZXIBAmJQBAJiUQoAAmJSCQD8BwQFBHRoaXMCDmZpbmFsaXplSGVscGVyBQNuaWwFA25pbAMJAAECBQJiUgIHQm9vbGVhbgUCYlIJAAIBCQCsAgIJAAMBBQJiUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgMJAAACBQJiUQUCYlEDCQEBIQEFAmJRAwkAAAIFAmJQBQFxCQACAQISTm90aGluZyB0byBwcm9jZXNzCQCUCgIFA25pbAUEdW5pdAMJAGYCBQJiUAAACQCUCgIFA25pbAkA/AcEBQR0aGlzAg9maW5hbGl6ZVdyYXBwZXIJAMwIAgkAZQIFAmJQAAEFA25pbAUDbmlsCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTQEdcHJvY2Vzc1BlbmRpbmdQZXJpb2RzQW5kVXNlcnMACQCUCgIFA25pbAkA/AcEBQR0aGlzAg9maW5hbGl6ZVdyYXBwZXIJAMwIAgUBcQUDbmlsBQNuaWwCYU0BB2RlcG9zaXQABAJiUwMJAAACCAUCYU0GY2FsbGVyBQF3BgkBAmFWAQUCYU0DCQAAAgUCYlMFAmJTBAJhdQkBAmJvAAQCYlQJAGUCBQZoZWlnaHQJAQFpAQkBAmFlAAQCYlUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQFSCQECYWcACQCsAgIJAKwCAgIcbWFuZGF0b3J5IGVtaXNzaW9uX2NvbnRyYWN0LgkBAmFnAAIPIGlzIG5vdCBkZWZpbmVkBAJiVgkBC3ZhbHVlT3JFbHNlAgkAmggCBQFSCQECYWgAAAAEAmJXCQBrAwkAaAIFAmJUBQJiVgUCYlUFAWMEAmJYCQD8BwQFAVICBGVtaXQJAMwIAgUCYlcFA25pbAUDbmlsAwkAAAIFAmJYBQJiWAQCYlkAAAQCYloJAQJheQMFAmF1BQJiWQUCYlcEAmNhCQD8BwQFAVICFmd3eEhvbGRlcnNSZXdhcmRVcGRhdGUFA25pbAUDbmlsAwkAAAIFAmNhBQJjYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFsAAUCYXUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhdAEFAmF1BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhdgEFAmF1BQJiVwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFlAAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXcBBQJhdQUCYlkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbQAJAGQCBQJhdQABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJheAAFAmJaCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhQgEFAmF1BQJiWgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNAQtjbGFpbVJld2FyZAAEAmFkCQEBWAAEAmNiCQClCAEIBQJhTQZjYWxsZXIEAmNjCQECYnABBQJjYgQCYUwIBQJjYwJfMQQCY2QIBQJjYwJfMgQCY2UDCQBmAgUCYUwAAAYJAAIBAhBOb3RoaW5nIHRvIGNsYWltAwkAAAIFAmNlBQJjZQQCY2YAAAQCY2cKAAJiUgkA/AcEBQJhSAIFY2xhaW0JAMwIAgUBQgUDbmlsBQNuaWwDCQABAgUCYlICA0ludAUCYlIJAAIBCQCsAgIJAAMBBQJiUgIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAJjaAkAZAIFAmFMBQJjZwkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmFNBmNhbGxlcgUCY2gJANkEAQkAkQMCBQJhZAUBUwkAzAgCCQECYUkEAgVjbGFpbQUCY2IFAmFMBQJhTQUDbmlsBQJjZAkAzAgCBQJjaAkAzAgCBQJjZgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFNARNjbGFpbVJld2FyZFJFQURPTkxZAQJjYgQCY2kJAQJicAEFAmNiBAJhTAgFAmNpAl8xBAJjZAgFAmNpAl8yBAJjagkBC3ZhbHVlT3JFbHNlAgkAmggCBQJhSAkBAU4CBQFCBQJjYgAABAJjaAkAZAIFAmFMBQJjagkAlAoCBQNuaWwFAmNoAmFNAR1sYXRlc3RGaW5hbGl6ZWRQZXJpb2RSRUFET05MWQECY2IJAJQKAgUDbmlsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhbAAA////////////AQJhTQEhbGF0ZXN0RmluYWxpemVkUGVyaW9kSW5mb1JFQURPTkxZAQJjYgkAlAoCBQNuaWwJAQFqAQkBAmF4AAJhTQEVY2FsY0d3eFBhcmFtc1JFQURPTkxZAwJjawJjbAJjbQQCY24JAGQCBQJjbAUCY20EAmNvCQEBLQEJAGsDBQJjawUBYgUCY20EAmNwCQBoAgkAawMFAmNrBQFiBQJjbQUCY24JAJQKAgUDbmlsCQDMCAIFAmNvCQDMCAIFAmNwCQDMCAIJAQJibwAFA25pbAJhTQEaY2FsY0d3eEFtb3VudFN0YXJ0UkVBRE9OTFkDAmNxAmNyAmNzBAJjdAkAawMFAmNyBQFjBQJjcwQCYnQJAGsDBQJjcQUCY3QFAWMJAJQKAgUDbmlsCQDMCAIFAmJ0BQNuaWwCYU0BFW9uRW1pc3Npb25Gb3JHd3hTdGFydAADCQECIT0CCAUCYU0GY2FsbGVyBQF0CQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWUABQZoZWlnaHQFA25pbAJhTQEjbGF0ZXN0UGVyaW9kRW1pc3Npb25SZXdhcmRzUkVBRE9OTFkBAmNiBAJhdQkBAmJvAAkAlAoCBQNuaWwJAMwIAgkBAWcBCQECYXYBBQJhdQUDbmlsAmFNAQVjYWxjRAUCY3UCY3YCY3cCY3gCY3kEAmN6CQC2AgEAAgQCY0EJAKcDAQUCY3gEAmNCCQCnAwEFAmN5BAJjQwkApwMBBQJjdQQCY0QJAKcDAQUCY3YEAmNFCQC5AgIJAKcDAQUCY3cFAmNBBAJhVAkAtwICBQJjQwUCY0QDCQAAAgUCYVQFAWQJAJQKAgUDbmlsCQCmAwEFAWQEAmNGCQC5AgIFAmNFBQJjegQCY0cJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGBQNuaWwKAQJjSAICY0kCY0oEAmNLBQJjSQQCY0wIBQJjSwJfMQQCY00IBQJjSwJfMgQCY04IBQJjSwJfMwMJAQIhPQIFAmNOBQR1bml0BQJjSQQCY08JALoCAgkAuQICCQC5AgIFAmNMBQJjTAUCY0wJALkCAgkAuQICCQC5AgIFAmNDBQJjRAUCY3oFAmN6BAJjUAkAugICCQC5AgIJALcCAgkAugICCQC5AgIFAmNGBQJhVAUCY0EJALkCAgUCY08FAmN6BQJjTAkAtwICCQC6AgIJALkCAgkAuAICBQJjRgUCY0EFAmNMBQJjQQkAuQICCQC3AgIFAmN6CQC2AgEAAQUCY08EAmNRCQEBbgEJALgCAgUCY1AJAQV2YWx1ZQEFAmNMAwkAwAICBQJjQgUCY1EJAJUKAwUCY1AFAmNMBQJjSgkAlQoDBQJjUAUCY0wFBHVuaXQEAmNSCgACY1MFAmNHCgACY1QJAJADAQUCY1MKAAJjVQkAlQoDBQJhVAUEdW5pdAUEdW5pdAoBAmNWAgJjVwJjWAMJAGcCBQJjWAUCY1QFAmNXCQECY0gCBQJjVwkAkQMCBQJjUwUCY1gKAQJjWQICY1cCY1gDCQBnAgUCY1gFAmNUBQJjVwkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDcJAQJjWQIJAQJjVgIJAQJjVgIJAQJjVgIJAQJjVgIJAQJjVgIJAQJjVgIJAQJjVgIFAmNVAAAAAQACAAMABAAFAAYABwQCY1AIBQJjUgJfMQQCY00IBQJjUgJfMgQCY04IBQJjUgJfMwMJAQIhPQIFAmNOBQR1bml0CQCUCgIFA25pbAkApgMBBQJjUAQCY1EJAQFuAQkAuAICBQJjUAkBBXZhbHVlAQUCY00JAAIBCQCsAgICHUQgY2FsY3VsYXRpb24gZXJyb3IsIGREaWZmID0gCQCmAwEFAmNRAmFNAQpzZXRNYW5hZ2VyAQJjWgQCYlMJAQJhVgEFAmFNAwkAAAIFAmJTBQJiUwQCZGEJANkEAQUCY1oDCQAAAgUCZGEFAmRhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhUQAFAmNaBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU0BDmNvbmZpcm1NYW5hZ2VyAAQCZGIJAQJhVQAEAmRjAwkBCWlzRGVmaW5lZAEFAmRiBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJkYwUCZGMEAmRkAwkAAAIIBQJhTQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmRiBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJkZAUCZGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFQAAkA2AQBCQEFdmFsdWUBBQJkYgkAzAgCCQELRGVsZXRlRW50cnkBCQECYVEABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmRlAQJkZgAEAmRnBAJhUwkBAmFSAAMJAAECBQJhUwIKQnl0ZVZlY3RvcgQCYVgFAmFTBQJhWAMJAAECBQJhUwIEVW5pdAgFAmRlD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJkZQlib2R5Qnl0ZXMJAJEDAggFAmRlBnByb29mcwAABQJkZzab7I8=", "height": 2538555, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HysWtk6dUsvdzxkuVcGbWUjnrSxBno7eeyrT6GxNJx4E Next: HKn9V4yTsYDfTX1CSF7rMjUJ6LY25TfvoRJZ16xuPL1A Diff:
Old | New | Differences | |
---|---|---|---|
51 | 51 | func u () = "%s%s__config__emissionAddress" | |
52 | 52 | ||
53 | 53 | ||
54 | - | func v ( | |
54 | + | func v () = makeString(["%s", "votingEmissionContract"], a) | |
55 | 55 | ||
56 | 56 | ||
57 | - | let | |
57 | + | let w = addressFromStringValue(getStringValue(t, v())) | |
58 | 58 | ||
59 | - | let y = "wxlock" | |
60 | - | ||
61 | - | let z = valueOrElse(getString(this, x), y) | |
62 | - | ||
63 | - | let A = makeString(["%s%s", "referral", "minGWxAmount"], a) | |
64 | - | ||
65 | - | let B = (500 * c) | |
66 | - | ||
67 | - | let C = valueOrElse(getInteger(this, A), B) | |
68 | - | ||
69 | - | let D = makeString(["%s%s", "referral", "referrerRewardPermille"], a) | |
70 | - | ||
71 | - | let E = 50 | |
72 | - | ||
73 | - | let F = valueOrElse(getInteger(this, D), E) | |
74 | - | ||
75 | - | let G = makeString(["%s%s", "referral", "referralRewardPermille"], a) | |
76 | - | ||
77 | - | let H = 50 | |
78 | - | ||
79 | - | let I = valueOrElse(getInteger(this, G), H) | |
80 | - | ||
81 | - | func J (K) = makeString(["%s%s%s", "referrer", z, K], a) | |
59 | + | func x (y) = makeString(["%s%s%s", "mapping", "num2user", toString(y)], a) | |
82 | 60 | ||
83 | 61 | ||
84 | - | func L (M,N) = makeString(["%s%s%s", "unclaimedReferral", M, N], a) | |
62 | + | let z = makeString(["%s%s", "referral", "programName"], a) | |
63 | + | ||
64 | + | let A = "wxlock" | |
65 | + | ||
66 | + | let B = valueOrElse(getString(this, z), A) | |
67 | + | ||
68 | + | let C = makeString(["%s%s", "referral", "minGWxAmount"], a) | |
69 | + | ||
70 | + | let D = (500 * c) | |
71 | + | ||
72 | + | let E = valueOrElse(getInteger(this, C), D) | |
73 | + | ||
74 | + | let F = makeString(["%s%s", "referral", "referrerRewardPermille"], a) | |
75 | + | ||
76 | + | let G = 50 | |
77 | + | ||
78 | + | let H = valueOrElse(getInteger(this, F), G) | |
79 | + | ||
80 | + | let I = makeString(["%s%s", "referral", "referralRewardPermille"], a) | |
81 | + | ||
82 | + | let J = 50 | |
83 | + | ||
84 | + | let K = valueOrElse(getInteger(this, I), J) | |
85 | + | ||
86 | + | func L (M) = makeString(["%s%s%s", "referrer", B, M], a) | |
85 | 87 | ||
86 | 88 | ||
87 | - | let O = k(u()) | |
88 | - | ||
89 | - | let P = addressFromStringValue(O) | |
90 | - | ||
91 | - | let Q = 1 | |
92 | - | ||
93 | - | let R = 2 | |
94 | - | ||
95 | - | let S = 3 | |
96 | - | ||
97 | - | let T = 4 | |
98 | - | ||
99 | - | func U () = "%s__config" | |
89 | + | func N (O,P) = makeString(["%s%s%s", "unclaimedReferral", O, P], a) | |
100 | 90 | ||
101 | 91 | ||
102 | - | func V () = split(k(U()), a) | |
92 | + | let Q = k(u()) | |
93 | + | ||
94 | + | let R = addressFromStringValue(Q) | |
95 | + | ||
96 | + | let S = 1 | |
97 | + | ||
98 | + | let T = 2 | |
99 | + | ||
100 | + | let U = 3 | |
101 | + | ||
102 | + | let V = 4 | |
103 | + | ||
104 | + | func W () = "%s__config" | |
103 | 105 | ||
104 | 106 | ||
105 | - | func | |
107 | + | func X () = split(k(W()), a) | |
106 | 108 | ||
107 | 109 | ||
108 | - | func aa () = { | |
109 | - | let ab = V() | |
110 | - | valueOrErrorMessage(addressFromString(ab[S]), "boosting contract address is not defined") | |
110 | + | func Y (Z,aa,ab,q) = makeString(["%s%s%s%d", Z, aa, ab, toString(q)], a) | |
111 | + | ||
112 | + | ||
113 | + | func ac () = { | |
114 | + | let ad = X() | |
115 | + | valueOrErrorMessage(addressFromString(ad[U]), "boosting contract address is not defined") | |
111 | 116 | } | |
112 | 117 | ||
113 | 118 | ||
114 | - | func | |
119 | + | func ae () = "%s%s__gwxRewardEmissionPart__startHeight" | |
115 | 120 | ||
116 | 121 | ||
117 | - | func | |
122 | + | func af () = "%s__nextUserNum" | |
118 | 123 | ||
119 | 124 | ||
120 | - | func | |
125 | + | func ag () = "%s%s__ratePerBlock__current" | |
121 | 126 | ||
122 | 127 | ||
123 | - | func | |
128 | + | func ah () = "%s%s__gwxHoldersReward__current" | |
124 | 129 | ||
125 | 130 | ||
126 | - | func | |
131 | + | func ai () = "%s%s__gwxHoldersReward__next" | |
127 | 132 | ||
128 | 133 | ||
129 | - | func | |
134 | + | func aj () = "%s%s__poolWeight__GWXvirtualPOOL" | |
130 | 135 | ||
131 | 136 | ||
132 | - | func | |
137 | + | func ak () = "%s__nextProcessedUser" | |
133 | 138 | ||
134 | 139 | ||
135 | - | func | |
140 | + | func al () = "%s__latestPeriod" | |
136 | 141 | ||
137 | 142 | ||
138 | - | func | |
143 | + | func am () = "%s__nextPeriod" | |
139 | 144 | ||
140 | 145 | ||
141 | - | func | |
146 | + | func an () = "%s__processingStage" | |
142 | 147 | ||
143 | 148 | ||
144 | - | func | |
149 | + | func ao () = "%s__nextProcessedPeriod" | |
145 | 150 | ||
146 | 151 | ||
147 | - | func | |
152 | + | func ap (aq) = makeString(["%s%d", "userUnclaimed", toString(aq)], a) | |
148 | 153 | ||
149 | 154 | ||
150 | - | func | |
155 | + | func ar (aq) = makeString(["%s%d__nextClaimedPeriod", toString(aq)], a) | |
151 | 156 | ||
152 | 157 | ||
153 | - | func | |
158 | + | func as (aq) = makeString(["%s%d__lastProcessedPeriod", toString(aq)], a) | |
154 | 159 | ||
155 | 160 | ||
156 | - | func | |
161 | + | func at (au) = makeString(["%s%d__startHeightForPeriod", toString(au)], a) | |
157 | 162 | ||
158 | 163 | ||
159 | - | func | |
164 | + | func av (au) = makeString(["%s%d__auxEmissionReward", toString(au)], a) | |
160 | 165 | ||
161 | 166 | ||
162 | - | func | |
167 | + | func aw (au) = makeString(["%s%d__totalAmountForPeriod", toString(au)], a) | |
163 | 168 | ||
164 | 169 | ||
165 | - | func ax ( | |
170 | + | func ax () = "%s__lastPayoutInfo" | |
166 | 171 | ||
167 | 172 | ||
168 | - | func ay ( | |
173 | + | func ay (au,az,aA) = makeString(["%d%d%d", toString(au), toString(az), toString(aA)], a) | |
169 | 174 | ||
170 | 175 | ||
171 | - | func | |
176 | + | func aB (au) = makeString(["%s%s%d__payouts__history", toString(au)], a) | |
172 | 177 | ||
173 | 178 | ||
174 | - | func | |
179 | + | func aC (au) = makeString(["%s%d__totalWeightForPeriod", toString(au)], a) | |
175 | 180 | ||
176 | 181 | ||
177 | - | func | |
182 | + | func aD (au,aq) = makeString(["%s%d%s%d__paramByPeriod", toString(aq), "k", toString(au)], a) | |
178 | 183 | ||
179 | 184 | ||
180 | - | func | |
185 | + | func aE (au,aq) = makeString(["%s%d%s%d__paramByPeriod", toString(aq), "b", toString(au)], a) | |
181 | 186 | ||
182 | 187 | ||
183 | - | ||
188 | + | func aF (au,aq) = makeString(["%s%d%s%d__paramByPeriod", toString(aq), "weight", toString(au)], a) | |
184 | 189 | ||
185 | - | func aE (aF,aG,aH,aI) = { | |
186 | - | let aJ = makeString(["%s%s%s%s__history", aF, aG, toBase58String(aI.transactionId)], a) | |
187 | - | let aK = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aH)], a) | |
188 | - | StringEntry(aJ, aK) | |
190 | + | ||
191 | + | func aG () = makeString(["%s%s", "config", "referralsContractAddress"], a) | |
192 | + | ||
193 | + | ||
194 | + | let aH = addressFromStringValue(k(aG())) | |
195 | + | ||
196 | + | func aI (aJ,aK,aL,aM) = { | |
197 | + | let aN = makeString(["%s%s%s%s__history", aJ, aK, toBase58String(aM.transactionId)], a) | |
198 | + | let aO = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aL)], a) | |
199 | + | StringEntry(aN, aO) | |
189 | 200 | } | |
190 | 201 | ||
191 | 202 | ||
192 | - | func | |
203 | + | func aP () = "%s__managerPublicKey" | |
193 | 204 | ||
194 | 205 | ||
195 | - | func | |
206 | + | func aQ () = "%s__pendingManagerPublicKey" | |
196 | 207 | ||
197 | 208 | ||
198 | - | func | |
199 | - | let | |
200 | - | if ($isInstanceOf( | |
209 | + | func aR () = { | |
210 | + | let aS = getString(aP()) | |
211 | + | if ($isInstanceOf(aS, "String")) | |
201 | 212 | then { | |
202 | - | let | |
203 | - | fromBase58String( | |
213 | + | let aT = aS | |
214 | + | fromBase58String(aT) | |
204 | 215 | } | |
205 | - | else if ($isInstanceOf( | |
216 | + | else if ($isInstanceOf(aS, "Unit")) | |
206 | 217 | then unit | |
207 | 218 | else throw("Match error") | |
208 | 219 | } | |
209 | 220 | ||
210 | 221 | ||
211 | - | func | |
212 | - | let | |
213 | - | if ($isInstanceOf( | |
222 | + | func aU () = { | |
223 | + | let aS = getString(aQ()) | |
224 | + | if ($isInstanceOf(aS, "String")) | |
214 | 225 | then { | |
215 | - | let | |
216 | - | fromBase58String( | |
226 | + | let aT = aS | |
227 | + | fromBase58String(aT) | |
217 | 228 | } | |
218 | - | else if ($isInstanceOf( | |
229 | + | else if ($isInstanceOf(aS, "Unit")) | |
219 | 230 | then unit | |
220 | 231 | else throw("Match error") | |
221 | 232 | } | |
222 | 233 | ||
223 | 234 | ||
224 | - | func | |
225 | - | let | |
226 | - | let | |
227 | - | if ($isInstanceOf( | |
235 | + | func aV (aM) = { | |
236 | + | let aW = throw("Permission denied") | |
237 | + | let aS = aR() | |
238 | + | if ($isInstanceOf(aS, "ByteVector")) | |
228 | 239 | then { | |
229 | - | let | |
230 | - | if (( | |
240 | + | let aX = aS | |
241 | + | if ((aM.callerPublicKey == aX)) | |
231 | 242 | then true | |
232 | - | else | |
243 | + | else aW | |
233 | 244 | } | |
234 | - | else if ($isInstanceOf( | |
235 | - | then if (( | |
245 | + | else if ($isInstanceOf(aS, "Unit")) | |
246 | + | then if ((aM.caller == this)) | |
236 | 247 | then true | |
237 | - | else | |
248 | + | else aW | |
238 | 249 | else throw("Match error") | |
239 | 250 | } | |
240 | 251 | ||
241 | 252 | ||
242 | - | func | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | if (isDefined( | |
253 | + | func aY (aZ,ba,au,aq) = { | |
254 | + | let bb = as(aq) | |
255 | + | let bc = aD(au, aq) | |
256 | + | let bd = getInteger(aZ, bc) | |
257 | + | let be = aF(au, aq) | |
258 | + | if (isDefined(bd)) | |
248 | 259 | then { | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | if (( | |
253 | - | then $Tuple2(( | |
260 | + | let bf = value(bd) | |
261 | + | let bg = value(getInteger(aZ, aE(au, aq))) | |
262 | + | let bh = ((bf * ba) + bg) | |
263 | + | if ((bh > 0)) | |
264 | + | then $Tuple2((bh / b), [IntegerEntry(bb, au), IntegerEntry(be, bh)]) | |
254 | 265 | else $Tuple2(0, nil) | |
255 | 266 | } | |
256 | 267 | else { | |
257 | - | let | |
258 | - | if (if (isDefined( | |
259 | - | then ( | |
268 | + | let bi = getInteger(this, bb) | |
269 | + | if (if (isDefined(bi)) | |
270 | + | then (au >= value(bi)) | |
260 | 271 | else false) | |
261 | 272 | then { | |
262 | - | let | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | if (( | |
267 | - | then $Tuple2(( | |
273 | + | let bj = value(bi) | |
274 | + | let bf = value(getInteger(aZ, aD(bj, aq))) | |
275 | + | let bg = value(getInteger(aZ, aE(bj, aq))) | |
276 | + | let bh = ((bf * ba) + bg) | |
277 | + | if ((bh > 0)) | |
278 | + | then $Tuple2((bh / b), [IntegerEntry(be, bh)]) | |
268 | 279 | else $Tuple2(0, nil) | |
269 | 280 | } | |
270 | 281 | else $Tuple2(0, nil) | |
272 | 283 | } | |
273 | 284 | ||
274 | 285 | ||
275 | - | func | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | if ($isInstanceOf( | |
286 | + | func bk (aZ,ba,au,aq) = { | |
287 | + | let be = aF(au, aq) | |
288 | + | let bl = getInteger(be) | |
289 | + | let aS = bl | |
290 | + | if ($isInstanceOf(aS, "Unit")) | |
280 | 291 | then 0 | |
281 | - | else if ($isInstanceOf( | |
292 | + | else if ($isInstanceOf(aS, "Int")) | |
282 | 293 | then { | |
283 | - | let | |
284 | - | ( | |
294 | + | let bh = aS | |
295 | + | (bh / b) | |
285 | 296 | } | |
286 | 297 | else throw("Match error") | |
287 | 298 | } | |
288 | 299 | ||
289 | 300 | ||
290 | - | func | |
291 | - | let h = makeString(["%s%s%s", "mapping", "user2num", | |
292 | - | parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String( | |
301 | + | func bm (ab,bn) = { | |
302 | + | let h = makeString(["%s%s%s", "mapping", "user2num", bn], a) | |
303 | + | parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String(ab)), h), ((("User address " + bn) + " is not found in boosting contract data, key=") + h))) | |
293 | 304 | } | |
294 | 305 | ||
295 | 306 | ||
296 | - | func | |
307 | + | func bo () = g(am()) | |
297 | 308 | ||
298 | 309 | ||
299 | - | func | |
300 | - | let | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | if ($isInstanceOf( | |
310 | + | func bp (bn) = { | |
311 | + | let ad = X() | |
312 | + | let bq = bm(ad[U], bn) | |
313 | + | let br = getInteger(ap(bq)) | |
314 | + | let aS = br | |
315 | + | if ($isInstanceOf(aS, "Unit")) | |
305 | 316 | then $Tuple2(0, nil) | |
306 | - | else if ($isInstanceOf( | |
317 | + | else if ($isInstanceOf(aS, "Int")) | |
307 | 318 | then { | |
308 | - | let | |
309 | - | $Tuple2( | |
319 | + | let bs = aS | |
320 | + | $Tuple2(bs, [IntegerEntry(ap(bq), 0)]) | |
310 | 321 | } | |
311 | 322 | else throw("Match error") | |
312 | 323 | } | |
313 | 324 | ||
314 | 325 | ||
315 | - | @Callable( | |
316 | - | func updateReferralActivity ( | |
317 | - | let | |
318 | - | let | |
326 | + | @Callable(aM) | |
327 | + | func updateReferralActivity (bn,bt) = { | |
328 | + | let bu = getString(aH, L(bn)) | |
329 | + | let bv = if ((bu == unit)) | |
319 | 330 | then unit | |
320 | - | else invoke( | |
321 | - | if (( | |
331 | + | else invoke(aH, "updateReferralActivity", [B, bn, (bt >= E)], nil) | |
332 | + | if ((bv == bv)) | |
322 | 333 | then $Tuple2(nil, unit) | |
323 | 334 | else throw("Strict value is not equal to itself.") | |
324 | 335 | } | |
325 | 336 | ||
326 | 337 | ||
327 | 338 | ||
328 | - | @Callable( | |
339 | + | @Callable(aM) | |
329 | 340 | func finalizeHelper () = { | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | let | |
337 | - | let | |
338 | - | if (( | |
341 | + | let bw = valueOrElse(getInteger(an()), e) | |
342 | + | let bx = g(ao()) | |
343 | + | let by = g(ak()) | |
344 | + | let bz = g(al()) | |
345 | + | let bA = valueOrElse(getInteger(ac(), af()), 0) | |
346 | + | let bB = aC(bx) | |
347 | + | let bC = g(aC(bx)) | |
348 | + | let ba = g(at(bx)) | |
349 | + | if ((bx > bz)) | |
339 | 350 | then $Tuple2(nil, false) | |
340 | - | else if (( | |
351 | + | else if ((bw == e)) | |
341 | 352 | then { | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | then [IntegerEntry( | |
348 | - | else [IntegerEntry( | |
349 | - | $Tuple2((([IntegerEntry( | |
353 | + | let bD = aY(ac(), ba, bx, by) | |
354 | + | let bE = bD._1 | |
355 | + | let bF = bD._2 | |
356 | + | let bG = (bC + bE) | |
357 | + | let bH = if (((bA - 1) > by)) | |
358 | + | then [IntegerEntry(ak(), (by + 1))] | |
359 | + | else [IntegerEntry(an(), f), IntegerEntry(ak(), 0)] | |
360 | + | $Tuple2((([IntegerEntry(bB, bG)] ++ bH) ++ bF), true) | |
350 | 361 | } | |
351 | - | else if (( | |
362 | + | else if ((bw == f)) | |
352 | 363 | then { | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
364 | + | let bE = bk(ac(), ba, bx, by) | |
365 | + | let bI = fraction(g(aw(bx)), bE, bC) | |
366 | + | let bJ = fraction(g(av(bx)), bE, bC) | |
367 | + | let bK = (bJ + bI) | |
368 | + | let br = getInteger(ap(by)) | |
369 | + | let bn = getStringValue(ac(), x(by)) | |
370 | + | let bu = getString(aH, L(bn)) | |
371 | + | let bv = if ((bu == unit)) | |
361 | 372 | then unit | |
362 | - | else invoke( | |
363 | - | if (( | |
373 | + | else invoke(aH, "updateReferralActivity", [B, bn, (bE >= E)], nil) | |
374 | + | if ((bv == bv)) | |
364 | 375 | then { | |
365 | - | let | |
376 | + | let bL = if (if ((bu == unit)) | |
366 | 377 | then true | |
367 | - | else ( | |
378 | + | else (E > bE)) | |
368 | 379 | then unit | |
369 | 380 | else { | |
370 | - | let | |
371 | - | let | |
372 | - | invoke( | |
381 | + | let bM = fraction(bK, H, b) | |
382 | + | let bN = fraction(bK, K, b) | |
383 | + | invoke(aH, "incUnclaimed", [B, bn, bM, bN], nil) | |
373 | 384 | } | |
374 | - | if (( | |
385 | + | if ((bL == bL)) | |
375 | 386 | then { | |
376 | - | let | |
377 | - | let | |
378 | - | then [IntegerEntry( | |
379 | - | else [IntegerEntry( | |
380 | - | $Tuple2(( | |
387 | + | let bO = [IntegerEntry(ap(by), (valueOrElse(br, 0) + bK))] | |
388 | + | let bH = if (((bA - 1) > by)) | |
389 | + | then [IntegerEntry(ak(), (by + 1))] | |
390 | + | else [IntegerEntry(ao(), (bx + 1)), IntegerEntry(ak(), 0), DeleteEntry(an())] | |
391 | + | $Tuple2((bO ++ bH), true) | |
381 | 392 | } | |
382 | 393 | else throw("Strict value is not equal to itself.") | |
383 | 394 | } | |
388 | 399 | ||
389 | 400 | ||
390 | 401 | ||
391 | - | @Callable( | |
392 | - | func finalizeWrapper ( | |
393 | - | let | |
394 | - | let | |
395 | - | if ($isInstanceOf( | |
396 | - | then | |
397 | - | else throw(($getType( | |
402 | + | @Callable(aM) | |
403 | + | func finalizeWrapper (bP) = { | |
404 | + | let bQ = { | |
405 | + | let bR = invoke(this, "finalizeHelper", nil, nil) | |
406 | + | if ($isInstanceOf(bR, "Boolean")) | |
407 | + | then bR | |
408 | + | else throw(($getType(bR) + " couldn't be cast to Boolean")) | |
398 | 409 | } | |
399 | - | if (( | |
400 | - | then if (!( | |
401 | - | then if (( | |
410 | + | if ((bQ == bQ)) | |
411 | + | then if (!(bQ)) | |
412 | + | then if ((bP == q)) | |
402 | 413 | then throw("Nothing to process") | |
403 | 414 | else $Tuple2(nil, unit) | |
404 | - | else if (( | |
405 | - | then $Tuple2(nil, invoke(this, "finalizeWrapper", [( | |
415 | + | else if ((bP > 0)) | |
416 | + | then $Tuple2(nil, invoke(this, "finalizeWrapper", [(bP - 1)], nil)) | |
406 | 417 | else $Tuple2(nil, unit) | |
407 | 418 | else throw("Strict value is not equal to itself.") | |
408 | 419 | } | |
409 | 420 | ||
410 | 421 | ||
411 | 422 | ||
412 | - | @Callable( | |
423 | + | @Callable(aM) | |
413 | 424 | func processPendingPeriodsAndUsers () = $Tuple2(nil, invoke(this, "finalizeWrapper", [q], nil)) | |
414 | 425 | ||
415 | 426 | ||
416 | 427 | ||
417 | - | @Callable( | |
428 | + | @Callable(aM) | |
418 | 429 | func deposit () = { | |
419 | - | let ab = V() | |
420 | - | if ((aI.caller != Address(fromBase58String(ab[R])))) | |
421 | - | then throw("Wrong caller address") | |
422 | - | else { | |
423 | - | let bO = value(value(aI.payments[0]).assetId) | |
424 | - | if ((bO != fromBase58String(ab[Q]))) | |
425 | - | then throw("Wrong payment asset") | |
426 | - | else { | |
427 | - | let aq = bk() | |
428 | - | let bP = (height - i(ac())) | |
429 | - | let bQ = valueOrErrorMessage(getInteger(P, ae()), (("mandatory emission_contract." + ae()) + " is not defined")) | |
430 | - | let bR = valueOrErrorMessage(getInteger(t, af()), (("mandatory factory_contract." + af()) + " is not defined")) | |
431 | - | let bS = fraction((bP * bR), bQ, c) | |
432 | - | let bT = invoke(P, "emit", [bS], nil) | |
433 | - | if ((bT == bT)) | |
434 | - | then { | |
435 | - | let bU = value(aI.payments[0]).amount | |
436 | - | let bV = au(aq, bU, bS) | |
437 | - | [IntegerEntry(ah(), aq), IntegerEntry(ap(aq), height), IntegerEntry(ar(aq), bS), IntegerEntry(ac(), height), IntegerEntry(as(aq), bU), IntegerEntry(ai(), (aq + 1)), StringEntry(at(), bV), StringEntry(ax(aq), bV)] | |
438 | - | } | |
430 | + | let bS = if ((aM.caller == w)) | |
431 | + | then true | |
432 | + | else aV(aM) | |
433 | + | if ((bS == bS)) | |
434 | + | then { | |
435 | + | let au = bo() | |
436 | + | let bT = (height - i(ae())) | |
437 | + | let bU = valueOrErrorMessage(getInteger(R, ag()), (("mandatory emission_contract." + ag()) + " is not defined")) | |
438 | + | let bV = valueOrElse(getInteger(R, ah()), 0) | |
439 | + | let bW = fraction((bT * bV), bU, c) | |
440 | + | let bX = invoke(R, "emit", [bW], nil) | |
441 | + | if ((bX == bX)) | |
442 | + | then { | |
443 | + | let bY = 0 | |
444 | + | let bZ = ay(au, bY, bW) | |
445 | + | let ca = invoke(R, "gwxHoldersRewardUpdate", nil, nil) | |
446 | + | if ((ca == ca)) | |
447 | + | then [IntegerEntry(al(), au), IntegerEntry(at(au), height), IntegerEntry(av(au), bW), IntegerEntry(ae(), height), IntegerEntry(aw(au), bY), IntegerEntry(am(), (au + 1)), StringEntry(ax(), bZ), StringEntry(aB(au), bZ)] | |
439 | 448 | else throw("Strict value is not equal to itself.") | |
440 | 449 | } | |
441 | - | } | |
442 | - | } | |
443 | - | ||
444 | - | ||
445 | - | ||
446 | - | @Callable(aI) | |
447 | - | func claimReward () = { | |
448 | - | let ab = V() | |
449 | - | let bW = toString(aI.caller) | |
450 | - | let bX = bl(bW) | |
451 | - | let aH = bX._1 | |
452 | - | let bY = bX._2 | |
453 | - | let bZ = if ((aH > 0)) | |
454 | - | then true | |
455 | - | else throw("Nothing to claim") | |
456 | - | if ((bZ == bZ)) | |
457 | - | then { | |
458 | - | let ca = 0 | |
459 | - | let cb = { | |
460 | - | let bN = invoke(aD, "claim", [z], nil) | |
461 | - | if ($isInstanceOf(bN, "Int")) | |
462 | - | then bN | |
463 | - | else throw(($getType(bN) + " couldn't be cast to Int")) | |
464 | - | } | |
465 | - | let cc = (aH + cb) | |
466 | - | $Tuple2(([ScriptTransfer(aI.caller, cc, fromBase58String(ab[Q])), aE("claim", bW, aH, aI)] ++ bY), [cc, ca]) | |
467 | - | } | |
468 | - | else throw("Strict value is not equal to itself.") | |
469 | - | } | |
470 | - | ||
471 | - | ||
472 | - | ||
473 | - | @Callable(aI) | |
474 | - | func claimRewardREADONLY (bW) = { | |
475 | - | let cd = bl(bW) | |
476 | - | let aH = cd._1 | |
477 | - | let bY = cd._2 | |
478 | - | let ce = valueOrElse(getInteger(aD, L(z, bW)), 0) | |
479 | - | let cc = (aH + ce) | |
480 | - | $Tuple2(nil, cc) | |
481 | - | } | |
482 | - | ||
483 | - | ||
484 | - | ||
485 | - | @Callable(aI) | |
486 | - | func latestFinalizedPeriodREADONLY (bW) = $Tuple2(nil, valueOrElse(getInteger(this, ah()), -1)) | |
487 | - | ||
488 | - | ||
489 | - | ||
490 | - | @Callable(aI) | |
491 | - | func latestFinalizedPeriodInfoREADONLY (bW) = $Tuple2(nil, j(at())) | |
492 | - | ||
493 | - | ||
494 | - | ||
495 | - | @Callable(aI) | |
496 | - | func calcGwxParamsREADONLY (cf,cg,ch) = { | |
497 | - | let ci = (cg + ch) | |
498 | - | let cj = -(fraction(cf, b, ch)) | |
499 | - | let ck = (fraction(cf, b, ch) * ci) | |
500 | - | $Tuple2(nil, [cj, ck, bk()]) | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | ||
505 | - | @Callable(aI) | |
506 | - | func calcGwxAmountStartREADONLY (cl,cm,cn) = { | |
507 | - | let co = fraction(cm, c, cn) | |
508 | - | let bp = fraction(cl, co, c) | |
509 | - | $Tuple2(nil, [bp]) | |
510 | - | } | |
511 | - | ||
512 | - | ||
513 | - | ||
514 | - | @Callable(aI) | |
515 | - | func onEmissionForGwxStart () = if ((aI.caller != t)) | |
516 | - | then throw("permissions denied") | |
517 | - | else [IntegerEntry(ac(), height)] | |
518 | - | ||
519 | - | ||
520 | - | ||
521 | - | @Callable(aI) | |
522 | - | func latestPeriodEmissionRewardsREADONLY (bW) = { | |
523 | - | let aq = bk() | |
524 | - | $Tuple2(nil, [g(ar(aq))]) | |
525 | - | } | |
526 | - | ||
527 | - | ||
528 | - | ||
529 | - | @Callable(aI) | |
530 | - | func calcD (cp,cq,cr,cs,ct) = { | |
531 | - | let cu = toBigInt(2) | |
532 | - | let cv = parseBigIntValue(cs) | |
533 | - | let cw = parseBigIntValue(ct) | |
534 | - | let cx = parseBigIntValue(cp) | |
535 | - | let cy = parseBigIntValue(cq) | |
536 | - | let cz = (parseBigIntValue(cr) * cv) | |
537 | - | let aP = (cx + cy) | |
538 | - | if ((aP == d)) | |
539 | - | then $Tuple2(nil, toString(d)) | |
540 | - | else { | |
541 | - | let cA = (cz * cu) | |
542 | - | let cB = [0, 1, 2, 3, 4, 5, 6] | |
543 | - | func cC (cD,cE) = { | |
544 | - | let cF = cD | |
545 | - | let cG = cF._1 | |
546 | - | let cH = cF._2 | |
547 | - | let cI = cF._3 | |
548 | - | if ((cI != unit)) | |
549 | - | then cD | |
550 | - | else { | |
551 | - | let cJ = (((cG * cG) * cG) / (((cx * cy) * cu) * cu)) | |
552 | - | let cK = (((((cA * aP) / cv) + (cJ * cu)) * cG) / ((((cA - cv) * cG) / cv) + ((cu + toBigInt(1)) * cJ))) | |
553 | - | let cL = n((cK - value(cG))) | |
554 | - | if ((cw >= cL)) | |
555 | - | then $Tuple3(cK, cG, cE) | |
556 | - | else $Tuple3(cK, cG, unit) | |
557 | - | } | |
558 | - | } | |
559 | - | ||
560 | - | let cM = { | |
561 | - | let cN = cB | |
562 | - | let cO = size(cN) | |
563 | - | let cP = $Tuple3(aP, unit, unit) | |
564 | - | func cQ (cR,cS) = if ((cS >= cO)) | |
565 | - | then cR | |
566 | - | else cC(cR, cN[cS]) | |
567 | - | ||
568 | - | func cT (cR,cS) = if ((cS >= cO)) | |
569 | - | then cR | |
570 | - | else throw("List size exceeds 7") | |
571 | - | ||
572 | - | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7) | |
573 | - | } | |
574 | - | let cK = cM._1 | |
575 | - | let cH = cM._2 | |
576 | - | let cI = cM._3 | |
577 | - | if ((cI != unit)) | |
578 | - | then $Tuple2(nil, toString(cK)) | |
579 | - | else { | |
580 | - | let cL = n((cK - value(cH))) | |
581 | - | throw(("D calculation error, dDiff = " + toString(cL))) | |
582 | - | } | |
583 | - | } | |
584 | - | } | |
585 | - | ||
586 | - | ||
587 | - | ||
588 | - | @Callable(aI) | |
589 | - | func setManager (cU) = { | |
590 | - | let cV = aR(aI) | |
591 | - | if ((cV == cV)) | |
592 | - | then { | |
593 | - | let cW = fromBase58String(cU) | |
594 | - | if ((cW == cW)) | |
595 | - | then [StringEntry(aM(), cU)] | |
596 | 450 | else throw("Strict value is not equal to itself.") | |
597 | 451 | } | |
598 | 452 | else throw("Strict value is not equal to itself.") | |
600 | 454 | ||
601 | 455 | ||
602 | 456 | ||
603 | - | @Callable(aI) | |
604 | - | func confirmManager () = { | |
605 | - | let cX = aQ() | |
606 | - | let cY = if (isDefined(cX)) | |
457 | + | @Callable(aM) | |
458 | + | func claimReward () = { | |
459 | + | let ad = X() | |
460 | + | let cb = toString(aM.caller) | |
461 | + | let cc = bp(cb) | |
462 | + | let aL = cc._1 | |
463 | + | let cd = cc._2 | |
464 | + | let ce = if ((aL > 0)) | |
607 | 465 | then true | |
608 | - | else throw(" | |
609 | - | if (( | |
466 | + | else throw("Nothing to claim") | |
467 | + | if ((ce == ce)) | |
610 | 468 | then { | |
611 | - | let cZ = if ((aI.callerPublicKey == value(cX))) | |
612 | - | then true | |
613 | - | else throw("You are not pending manager") | |
614 | - | if ((cZ == cZ)) | |
615 | - | then [StringEntry(aL(), toBase58String(value(cX))), DeleteEntry(aM())] | |
469 | + | let cf = 0 | |
470 | + | let cg = { | |
471 | + | let bR = invoke(aH, "claim", [B], nil) | |
472 | + | if ($isInstanceOf(bR, "Int")) | |
473 | + | then bR | |
474 | + | else throw(($getType(bR) + " couldn't be cast to Int")) | |
475 | + | } | |
476 | + | let ch = (aL + cg) | |
477 | + | $Tuple2(([ScriptTransfer(aM.caller, ch, fromBase58String(ad[S])), aI("claim", cb, aL, aM)] ++ cd), [ch, cf]) | |
478 | + | } | |
479 | + | else throw("Strict value is not equal to itself.") | |
480 | + | } | |
481 | + | ||
482 | + | ||
483 | + | ||
484 | + | @Callable(aM) | |
485 | + | func claimRewardREADONLY (cb) = { | |
486 | + | let ci = bp(cb) | |
487 | + | let aL = ci._1 | |
488 | + | let cd = ci._2 | |
489 | + | let cj = valueOrElse(getInteger(aH, N(B, cb)), 0) | |
490 | + | let ch = (aL + cj) | |
491 | + | $Tuple2(nil, ch) | |
492 | + | } | |
493 | + | ||
494 | + | ||
495 | + | ||
496 | + | @Callable(aM) | |
497 | + | func latestFinalizedPeriodREADONLY (cb) = $Tuple2(nil, valueOrElse(getInteger(this, al()), -1)) | |
498 | + | ||
499 | + | ||
500 | + | ||
501 | + | @Callable(aM) | |
502 | + | func latestFinalizedPeriodInfoREADONLY (cb) = $Tuple2(nil, j(ax())) | |
503 | + | ||
504 | + | ||
505 | + | ||
506 | + | @Callable(aM) | |
507 | + | func calcGwxParamsREADONLY (ck,cl,cm) = { | |
508 | + | let cn = (cl + cm) | |
509 | + | let co = -(fraction(ck, b, cm)) | |
510 | + | let cp = (fraction(ck, b, cm) * cn) | |
511 | + | $Tuple2(nil, [co, cp, bo()]) | |
512 | + | } | |
513 | + | ||
514 | + | ||
515 | + | ||
516 | + | @Callable(aM) | |
517 | + | func calcGwxAmountStartREADONLY (cq,cr,cs) = { | |
518 | + | let ct = fraction(cr, c, cs) | |
519 | + | let bt = fraction(cq, ct, c) | |
520 | + | $Tuple2(nil, [bt]) | |
521 | + | } | |
522 | + | ||
523 | + | ||
524 | + | ||
525 | + | @Callable(aM) | |
526 | + | func onEmissionForGwxStart () = if ((aM.caller != t)) | |
527 | + | then throw("permissions denied") | |
528 | + | else [IntegerEntry(ae(), height)] | |
529 | + | ||
530 | + | ||
531 | + | ||
532 | + | @Callable(aM) | |
533 | + | func latestPeriodEmissionRewardsREADONLY (cb) = { | |
534 | + | let au = bo() | |
535 | + | $Tuple2(nil, [g(av(au))]) | |
536 | + | } | |
537 | + | ||
538 | + | ||
539 | + | ||
540 | + | @Callable(aM) | |
541 | + | func calcD (cu,cv,cw,cx,cy) = { | |
542 | + | let cz = toBigInt(2) | |
543 | + | let cA = parseBigIntValue(cx) | |
544 | + | let cB = parseBigIntValue(cy) | |
545 | + | let cC = parseBigIntValue(cu) | |
546 | + | let cD = parseBigIntValue(cv) | |
547 | + | let cE = (parseBigIntValue(cw) * cA) | |
548 | + | let aT = (cC + cD) | |
549 | + | if ((aT == d)) | |
550 | + | then $Tuple2(nil, toString(d)) | |
551 | + | else { | |
552 | + | let cF = (cE * cz) | |
553 | + | let cG = [0, 1, 2, 3, 4, 5, 6] | |
554 | + | func cH (cI,cJ) = { | |
555 | + | let cK = cI | |
556 | + | let cL = cK._1 | |
557 | + | let cM = cK._2 | |
558 | + | let cN = cK._3 | |
559 | + | if ((cN != unit)) | |
560 | + | then cI | |
561 | + | else { | |
562 | + | let cO = (((cL * cL) * cL) / (((cC * cD) * cz) * cz)) | |
563 | + | let cP = (((((cF * aT) / cA) + (cO * cz)) * cL) / ((((cF - cA) * cL) / cA) + ((cz + toBigInt(1)) * cO))) | |
564 | + | let cQ = n((cP - value(cL))) | |
565 | + | if ((cB >= cQ)) | |
566 | + | then $Tuple3(cP, cL, cJ) | |
567 | + | else $Tuple3(cP, cL, unit) | |
568 | + | } | |
569 | + | } | |
570 | + | ||
571 | + | let cR = { | |
572 | + | let cS = cG | |
573 | + | let cT = size(cS) | |
574 | + | let cU = $Tuple3(aT, unit, unit) | |
575 | + | func cV (cW,cX) = if ((cX >= cT)) | |
576 | + | then cW | |
577 | + | else cH(cW, cS[cX]) | |
578 | + | ||
579 | + | func cY (cW,cX) = if ((cX >= cT)) | |
580 | + | then cW | |
581 | + | else throw("List size exceeds 7") | |
582 | + | ||
583 | + | cY(cV(cV(cV(cV(cV(cV(cV(cU, 0), 1), 2), 3), 4), 5), 6), 7) | |
584 | + | } | |
585 | + | let cP = cR._1 | |
586 | + | let cM = cR._2 | |
587 | + | let cN = cR._3 | |
588 | + | if ((cN != unit)) | |
589 | + | then $Tuple2(nil, toString(cP)) | |
590 | + | else { | |
591 | + | let cQ = n((cP - value(cM))) | |
592 | + | throw(("D calculation error, dDiff = " + toString(cQ))) | |
593 | + | } | |
594 | + | } | |
595 | + | } | |
596 | + | ||
597 | + | ||
598 | + | ||
599 | + | @Callable(aM) | |
600 | + | func setManager (cZ) = { | |
601 | + | let bS = aV(aM) | |
602 | + | if ((bS == bS)) | |
603 | + | then { | |
604 | + | let da = fromBase58String(cZ) | |
605 | + | if ((da == da)) | |
606 | + | then [StringEntry(aQ(), cZ)] | |
616 | 607 | else throw("Strict value is not equal to itself.") | |
617 | 608 | } | |
618 | 609 | else throw("Strict value is not equal to itself.") | |
619 | 610 | } | |
620 | 611 | ||
621 | 612 | ||
622 | - | @Verifier(da) | |
623 | - | func db () = { | |
624 | - | let dc = { | |
625 | - | let aO = aN() | |
626 | - | if ($isInstanceOf(aO, "ByteVector")) | |
613 | + | ||
614 | + | @Callable(aM) | |
615 | + | func confirmManager () = { | |
616 | + | let db = aU() | |
617 | + | let dc = if (isDefined(db)) | |
618 | + | then true | |
619 | + | else throw("No pending manager") | |
620 | + | if ((dc == dc)) | |
621 | + | then { | |
622 | + | let dd = if ((aM.callerPublicKey == value(db))) | |
623 | + | then true | |
624 | + | else throw("You are not pending manager") | |
625 | + | if ((dd == dd)) | |
626 | + | then [StringEntry(aP(), toBase58String(value(db))), DeleteEntry(aQ())] | |
627 | + | else throw("Strict value is not equal to itself.") | |
628 | + | } | |
629 | + | else throw("Strict value is not equal to itself.") | |
630 | + | } | |
631 | + | ||
632 | + | ||
633 | + | @Verifier(de) | |
634 | + | func df () = { | |
635 | + | let dg = { | |
636 | + | let aS = aR() | |
637 | + | if ($isInstanceOf(aS, "ByteVector")) | |
627 | 638 | then { | |
628 | - | let | |
629 | - | | |
639 | + | let aX = aS | |
640 | + | aX | |
630 | 641 | } | |
631 | - | else if ($isInstanceOf( | |
632 | - | then | |
642 | + | else if ($isInstanceOf(aS, "Unit")) | |
643 | + | then de.senderPublicKey | |
633 | 644 | else throw("Match error") | |
634 | 645 | } | |
635 | - | sigVerify( | |
646 | + | sigVerify(de.bodyBytes, de.proofs[0], dg) | |
636 | 647 | } | |
637 | 648 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = 1000 | |
7 | 7 | ||
8 | 8 | let c = 100000000 | |
9 | 9 | ||
10 | 10 | let d = toBigInt(0) | |
11 | 11 | ||
12 | 12 | let e = 0 | |
13 | 13 | ||
14 | 14 | let f = 1 | |
15 | 15 | ||
16 | 16 | func g (h) = valueOrElse(getInteger(this, h), 0) | |
17 | 17 | ||
18 | 18 | ||
19 | 19 | func i (h) = valueOrErrorMessage(getInteger(this, h), (("mandatory this." + h) + " is not defined")) | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | func j (h) = valueOrElse(getString(this, h), "") | |
23 | 23 | ||
24 | 24 | ||
25 | 25 | func k (h) = valueOrErrorMessage(getString(this, h), (("mandatory this." + h) + " is not defined")) | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func l (m) = if ((0 > m)) | |
29 | 29 | then -(m) | |
30 | 30 | else m | |
31 | 31 | ||
32 | 32 | ||
33 | 33 | func n (m) = if ((d > m)) | |
34 | 34 | then -(m) | |
35 | 35 | else m | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | let o = "%s__maxDepth" | |
39 | 39 | ||
40 | 40 | let p = 30 | |
41 | 41 | ||
42 | 42 | let q = valueOrElse(getInteger(this, o), p) | |
43 | 43 | ||
44 | 44 | func r () = "%s%s__config__factoryAddress" | |
45 | 45 | ||
46 | 46 | ||
47 | 47 | let s = k(r()) | |
48 | 48 | ||
49 | 49 | let t = addressFromStringValue(s) | |
50 | 50 | ||
51 | 51 | func u () = "%s%s__config__emissionAddress" | |
52 | 52 | ||
53 | 53 | ||
54 | - | func v ( | |
54 | + | func v () = makeString(["%s", "votingEmissionContract"], a) | |
55 | 55 | ||
56 | 56 | ||
57 | - | let | |
57 | + | let w = addressFromStringValue(getStringValue(t, v())) | |
58 | 58 | ||
59 | - | let y = "wxlock" | |
60 | - | ||
61 | - | let z = valueOrElse(getString(this, x), y) | |
62 | - | ||
63 | - | let A = makeString(["%s%s", "referral", "minGWxAmount"], a) | |
64 | - | ||
65 | - | let B = (500 * c) | |
66 | - | ||
67 | - | let C = valueOrElse(getInteger(this, A), B) | |
68 | - | ||
69 | - | let D = makeString(["%s%s", "referral", "referrerRewardPermille"], a) | |
70 | - | ||
71 | - | let E = 50 | |
72 | - | ||
73 | - | let F = valueOrElse(getInteger(this, D), E) | |
74 | - | ||
75 | - | let G = makeString(["%s%s", "referral", "referralRewardPermille"], a) | |
76 | - | ||
77 | - | let H = 50 | |
78 | - | ||
79 | - | let I = valueOrElse(getInteger(this, G), H) | |
80 | - | ||
81 | - | func J (K) = makeString(["%s%s%s", "referrer", z, K], a) | |
59 | + | func x (y) = makeString(["%s%s%s", "mapping", "num2user", toString(y)], a) | |
82 | 60 | ||
83 | 61 | ||
84 | - | func L (M,N) = makeString(["%s%s%s", "unclaimedReferral", M, N], a) | |
62 | + | let z = makeString(["%s%s", "referral", "programName"], a) | |
63 | + | ||
64 | + | let A = "wxlock" | |
65 | + | ||
66 | + | let B = valueOrElse(getString(this, z), A) | |
67 | + | ||
68 | + | let C = makeString(["%s%s", "referral", "minGWxAmount"], a) | |
69 | + | ||
70 | + | let D = (500 * c) | |
71 | + | ||
72 | + | let E = valueOrElse(getInteger(this, C), D) | |
73 | + | ||
74 | + | let F = makeString(["%s%s", "referral", "referrerRewardPermille"], a) | |
75 | + | ||
76 | + | let G = 50 | |
77 | + | ||
78 | + | let H = valueOrElse(getInteger(this, F), G) | |
79 | + | ||
80 | + | let I = makeString(["%s%s", "referral", "referralRewardPermille"], a) | |
81 | + | ||
82 | + | let J = 50 | |
83 | + | ||
84 | + | let K = valueOrElse(getInteger(this, I), J) | |
85 | + | ||
86 | + | func L (M) = makeString(["%s%s%s", "referrer", B, M], a) | |
85 | 87 | ||
86 | 88 | ||
87 | - | let O = k(u()) | |
88 | - | ||
89 | - | let P = addressFromStringValue(O) | |
90 | - | ||
91 | - | let Q = 1 | |
92 | - | ||
93 | - | let R = 2 | |
94 | - | ||
95 | - | let S = 3 | |
96 | - | ||
97 | - | let T = 4 | |
98 | - | ||
99 | - | func U () = "%s__config" | |
89 | + | func N (O,P) = makeString(["%s%s%s", "unclaimedReferral", O, P], a) | |
100 | 90 | ||
101 | 91 | ||
102 | - | func V () = split(k(U()), a) | |
92 | + | let Q = k(u()) | |
93 | + | ||
94 | + | let R = addressFromStringValue(Q) | |
95 | + | ||
96 | + | let S = 1 | |
97 | + | ||
98 | + | let T = 2 | |
99 | + | ||
100 | + | let U = 3 | |
101 | + | ||
102 | + | let V = 4 | |
103 | + | ||
104 | + | func W () = "%s__config" | |
103 | 105 | ||
104 | 106 | ||
105 | - | func | |
107 | + | func X () = split(k(W()), a) | |
106 | 108 | ||
107 | 109 | ||
108 | - | func aa () = { | |
109 | - | let ab = V() | |
110 | - | valueOrErrorMessage(addressFromString(ab[S]), "boosting contract address is not defined") | |
110 | + | func Y (Z,aa,ab,q) = makeString(["%s%s%s%d", Z, aa, ab, toString(q)], a) | |
111 | + | ||
112 | + | ||
113 | + | func ac () = { | |
114 | + | let ad = X() | |
115 | + | valueOrErrorMessage(addressFromString(ad[U]), "boosting contract address is not defined") | |
111 | 116 | } | |
112 | 117 | ||
113 | 118 | ||
114 | - | func | |
119 | + | func ae () = "%s%s__gwxRewardEmissionPart__startHeight" | |
115 | 120 | ||
116 | 121 | ||
117 | - | func | |
122 | + | func af () = "%s__nextUserNum" | |
118 | 123 | ||
119 | 124 | ||
120 | - | func | |
125 | + | func ag () = "%s%s__ratePerBlock__current" | |
121 | 126 | ||
122 | 127 | ||
123 | - | func | |
128 | + | func ah () = "%s%s__gwxHoldersReward__current" | |
124 | 129 | ||
125 | 130 | ||
126 | - | func | |
131 | + | func ai () = "%s%s__gwxHoldersReward__next" | |
127 | 132 | ||
128 | 133 | ||
129 | - | func | |
134 | + | func aj () = "%s%s__poolWeight__GWXvirtualPOOL" | |
130 | 135 | ||
131 | 136 | ||
132 | - | func | |
137 | + | func ak () = "%s__nextProcessedUser" | |
133 | 138 | ||
134 | 139 | ||
135 | - | func | |
140 | + | func al () = "%s__latestPeriod" | |
136 | 141 | ||
137 | 142 | ||
138 | - | func | |
143 | + | func am () = "%s__nextPeriod" | |
139 | 144 | ||
140 | 145 | ||
141 | - | func | |
146 | + | func an () = "%s__processingStage" | |
142 | 147 | ||
143 | 148 | ||
144 | - | func | |
149 | + | func ao () = "%s__nextProcessedPeriod" | |
145 | 150 | ||
146 | 151 | ||
147 | - | func | |
152 | + | func ap (aq) = makeString(["%s%d", "userUnclaimed", toString(aq)], a) | |
148 | 153 | ||
149 | 154 | ||
150 | - | func | |
155 | + | func ar (aq) = makeString(["%s%d__nextClaimedPeriod", toString(aq)], a) | |
151 | 156 | ||
152 | 157 | ||
153 | - | func | |
158 | + | func as (aq) = makeString(["%s%d__lastProcessedPeriod", toString(aq)], a) | |
154 | 159 | ||
155 | 160 | ||
156 | - | func | |
161 | + | func at (au) = makeString(["%s%d__startHeightForPeriod", toString(au)], a) | |
157 | 162 | ||
158 | 163 | ||
159 | - | func | |
164 | + | func av (au) = makeString(["%s%d__auxEmissionReward", toString(au)], a) | |
160 | 165 | ||
161 | 166 | ||
162 | - | func | |
167 | + | func aw (au) = makeString(["%s%d__totalAmountForPeriod", toString(au)], a) | |
163 | 168 | ||
164 | 169 | ||
165 | - | func ax ( | |
170 | + | func ax () = "%s__lastPayoutInfo" | |
166 | 171 | ||
167 | 172 | ||
168 | - | func ay ( | |
173 | + | func ay (au,az,aA) = makeString(["%d%d%d", toString(au), toString(az), toString(aA)], a) | |
169 | 174 | ||
170 | 175 | ||
171 | - | func | |
176 | + | func aB (au) = makeString(["%s%s%d__payouts__history", toString(au)], a) | |
172 | 177 | ||
173 | 178 | ||
174 | - | func | |
179 | + | func aC (au) = makeString(["%s%d__totalWeightForPeriod", toString(au)], a) | |
175 | 180 | ||
176 | 181 | ||
177 | - | func | |
182 | + | func aD (au,aq) = makeString(["%s%d%s%d__paramByPeriod", toString(aq), "k", toString(au)], a) | |
178 | 183 | ||
179 | 184 | ||
180 | - | func | |
185 | + | func aE (au,aq) = makeString(["%s%d%s%d__paramByPeriod", toString(aq), "b", toString(au)], a) | |
181 | 186 | ||
182 | 187 | ||
183 | - | ||
188 | + | func aF (au,aq) = makeString(["%s%d%s%d__paramByPeriod", toString(aq), "weight", toString(au)], a) | |
184 | 189 | ||
185 | - | func aE (aF,aG,aH,aI) = { | |
186 | - | let aJ = makeString(["%s%s%s%s__history", aF, aG, toBase58String(aI.transactionId)], a) | |
187 | - | let aK = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aH)], a) | |
188 | - | StringEntry(aJ, aK) | |
190 | + | ||
191 | + | func aG () = makeString(["%s%s", "config", "referralsContractAddress"], a) | |
192 | + | ||
193 | + | ||
194 | + | let aH = addressFromStringValue(k(aG())) | |
195 | + | ||
196 | + | func aI (aJ,aK,aL,aM) = { | |
197 | + | let aN = makeString(["%s%s%s%s__history", aJ, aK, toBase58String(aM.transactionId)], a) | |
198 | + | let aO = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aL)], a) | |
199 | + | StringEntry(aN, aO) | |
189 | 200 | } | |
190 | 201 | ||
191 | 202 | ||
192 | - | func | |
203 | + | func aP () = "%s__managerPublicKey" | |
193 | 204 | ||
194 | 205 | ||
195 | - | func | |
206 | + | func aQ () = "%s__pendingManagerPublicKey" | |
196 | 207 | ||
197 | 208 | ||
198 | - | func | |
199 | - | let | |
200 | - | if ($isInstanceOf( | |
209 | + | func aR () = { | |
210 | + | let aS = getString(aP()) | |
211 | + | if ($isInstanceOf(aS, "String")) | |
201 | 212 | then { | |
202 | - | let | |
203 | - | fromBase58String( | |
213 | + | let aT = aS | |
214 | + | fromBase58String(aT) | |
204 | 215 | } | |
205 | - | else if ($isInstanceOf( | |
216 | + | else if ($isInstanceOf(aS, "Unit")) | |
206 | 217 | then unit | |
207 | 218 | else throw("Match error") | |
208 | 219 | } | |
209 | 220 | ||
210 | 221 | ||
211 | - | func | |
212 | - | let | |
213 | - | if ($isInstanceOf( | |
222 | + | func aU () = { | |
223 | + | let aS = getString(aQ()) | |
224 | + | if ($isInstanceOf(aS, "String")) | |
214 | 225 | then { | |
215 | - | let | |
216 | - | fromBase58String( | |
226 | + | let aT = aS | |
227 | + | fromBase58String(aT) | |
217 | 228 | } | |
218 | - | else if ($isInstanceOf( | |
229 | + | else if ($isInstanceOf(aS, "Unit")) | |
219 | 230 | then unit | |
220 | 231 | else throw("Match error") | |
221 | 232 | } | |
222 | 233 | ||
223 | 234 | ||
224 | - | func | |
225 | - | let | |
226 | - | let | |
227 | - | if ($isInstanceOf( | |
235 | + | func aV (aM) = { | |
236 | + | let aW = throw("Permission denied") | |
237 | + | let aS = aR() | |
238 | + | if ($isInstanceOf(aS, "ByteVector")) | |
228 | 239 | then { | |
229 | - | let | |
230 | - | if (( | |
240 | + | let aX = aS | |
241 | + | if ((aM.callerPublicKey == aX)) | |
231 | 242 | then true | |
232 | - | else | |
243 | + | else aW | |
233 | 244 | } | |
234 | - | else if ($isInstanceOf( | |
235 | - | then if (( | |
245 | + | else if ($isInstanceOf(aS, "Unit")) | |
246 | + | then if ((aM.caller == this)) | |
236 | 247 | then true | |
237 | - | else | |
248 | + | else aW | |
238 | 249 | else throw("Match error") | |
239 | 250 | } | |
240 | 251 | ||
241 | 252 | ||
242 | - | func | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | if (isDefined( | |
253 | + | func aY (aZ,ba,au,aq) = { | |
254 | + | let bb = as(aq) | |
255 | + | let bc = aD(au, aq) | |
256 | + | let bd = getInteger(aZ, bc) | |
257 | + | let be = aF(au, aq) | |
258 | + | if (isDefined(bd)) | |
248 | 259 | then { | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | if (( | |
253 | - | then $Tuple2(( | |
260 | + | let bf = value(bd) | |
261 | + | let bg = value(getInteger(aZ, aE(au, aq))) | |
262 | + | let bh = ((bf * ba) + bg) | |
263 | + | if ((bh > 0)) | |
264 | + | then $Tuple2((bh / b), [IntegerEntry(bb, au), IntegerEntry(be, bh)]) | |
254 | 265 | else $Tuple2(0, nil) | |
255 | 266 | } | |
256 | 267 | else { | |
257 | - | let | |
258 | - | if (if (isDefined( | |
259 | - | then ( | |
268 | + | let bi = getInteger(this, bb) | |
269 | + | if (if (isDefined(bi)) | |
270 | + | then (au >= value(bi)) | |
260 | 271 | else false) | |
261 | 272 | then { | |
262 | - | let | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | if (( | |
267 | - | then $Tuple2(( | |
273 | + | let bj = value(bi) | |
274 | + | let bf = value(getInteger(aZ, aD(bj, aq))) | |
275 | + | let bg = value(getInteger(aZ, aE(bj, aq))) | |
276 | + | let bh = ((bf * ba) + bg) | |
277 | + | if ((bh > 0)) | |
278 | + | then $Tuple2((bh / b), [IntegerEntry(be, bh)]) | |
268 | 279 | else $Tuple2(0, nil) | |
269 | 280 | } | |
270 | 281 | else $Tuple2(0, nil) | |
271 | 282 | } | |
272 | 283 | } | |
273 | 284 | ||
274 | 285 | ||
275 | - | func | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | if ($isInstanceOf( | |
286 | + | func bk (aZ,ba,au,aq) = { | |
287 | + | let be = aF(au, aq) | |
288 | + | let bl = getInteger(be) | |
289 | + | let aS = bl | |
290 | + | if ($isInstanceOf(aS, "Unit")) | |
280 | 291 | then 0 | |
281 | - | else if ($isInstanceOf( | |
292 | + | else if ($isInstanceOf(aS, "Int")) | |
282 | 293 | then { | |
283 | - | let | |
284 | - | ( | |
294 | + | let bh = aS | |
295 | + | (bh / b) | |
285 | 296 | } | |
286 | 297 | else throw("Match error") | |
287 | 298 | } | |
288 | 299 | ||
289 | 300 | ||
290 | - | func | |
291 | - | let h = makeString(["%s%s%s", "mapping", "user2num", | |
292 | - | parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String( | |
301 | + | func bm (ab,bn) = { | |
302 | + | let h = makeString(["%s%s%s", "mapping", "user2num", bn], a) | |
303 | + | parseIntValue(valueOrErrorMessage(getString(Address(fromBase58String(ab)), h), ((("User address " + bn) + " is not found in boosting contract data, key=") + h))) | |
293 | 304 | } | |
294 | 305 | ||
295 | 306 | ||
296 | - | func | |
307 | + | func bo () = g(am()) | |
297 | 308 | ||
298 | 309 | ||
299 | - | func | |
300 | - | let | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | if ($isInstanceOf( | |
310 | + | func bp (bn) = { | |
311 | + | let ad = X() | |
312 | + | let bq = bm(ad[U], bn) | |
313 | + | let br = getInteger(ap(bq)) | |
314 | + | let aS = br | |
315 | + | if ($isInstanceOf(aS, "Unit")) | |
305 | 316 | then $Tuple2(0, nil) | |
306 | - | else if ($isInstanceOf( | |
317 | + | else if ($isInstanceOf(aS, "Int")) | |
307 | 318 | then { | |
308 | - | let | |
309 | - | $Tuple2( | |
319 | + | let bs = aS | |
320 | + | $Tuple2(bs, [IntegerEntry(ap(bq), 0)]) | |
310 | 321 | } | |
311 | 322 | else throw("Match error") | |
312 | 323 | } | |
313 | 324 | ||
314 | 325 | ||
315 | - | @Callable( | |
316 | - | func updateReferralActivity ( | |
317 | - | let | |
318 | - | let | |
326 | + | @Callable(aM) | |
327 | + | func updateReferralActivity (bn,bt) = { | |
328 | + | let bu = getString(aH, L(bn)) | |
329 | + | let bv = if ((bu == unit)) | |
319 | 330 | then unit | |
320 | - | else invoke( | |
321 | - | if (( | |
331 | + | else invoke(aH, "updateReferralActivity", [B, bn, (bt >= E)], nil) | |
332 | + | if ((bv == bv)) | |
322 | 333 | then $Tuple2(nil, unit) | |
323 | 334 | else throw("Strict value is not equal to itself.") | |
324 | 335 | } | |
325 | 336 | ||
326 | 337 | ||
327 | 338 | ||
328 | - | @Callable( | |
339 | + | @Callable(aM) | |
329 | 340 | func finalizeHelper () = { | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | let | |
337 | - | let | |
338 | - | if (( | |
341 | + | let bw = valueOrElse(getInteger(an()), e) | |
342 | + | let bx = g(ao()) | |
343 | + | let by = g(ak()) | |
344 | + | let bz = g(al()) | |
345 | + | let bA = valueOrElse(getInteger(ac(), af()), 0) | |
346 | + | let bB = aC(bx) | |
347 | + | let bC = g(aC(bx)) | |
348 | + | let ba = g(at(bx)) | |
349 | + | if ((bx > bz)) | |
339 | 350 | then $Tuple2(nil, false) | |
340 | - | else if (( | |
351 | + | else if ((bw == e)) | |
341 | 352 | then { | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | then [IntegerEntry( | |
348 | - | else [IntegerEntry( | |
349 | - | $Tuple2((([IntegerEntry( | |
353 | + | let bD = aY(ac(), ba, bx, by) | |
354 | + | let bE = bD._1 | |
355 | + | let bF = bD._2 | |
356 | + | let bG = (bC + bE) | |
357 | + | let bH = if (((bA - 1) > by)) | |
358 | + | then [IntegerEntry(ak(), (by + 1))] | |
359 | + | else [IntegerEntry(an(), f), IntegerEntry(ak(), 0)] | |
360 | + | $Tuple2((([IntegerEntry(bB, bG)] ++ bH) ++ bF), true) | |
350 | 361 | } | |
351 | - | else if (( | |
362 | + | else if ((bw == f)) | |
352 | 363 | then { | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
364 | + | let bE = bk(ac(), ba, bx, by) | |
365 | + | let bI = fraction(g(aw(bx)), bE, bC) | |
366 | + | let bJ = fraction(g(av(bx)), bE, bC) | |
367 | + | let bK = (bJ + bI) | |
368 | + | let br = getInteger(ap(by)) | |
369 | + | let bn = getStringValue(ac(), x(by)) | |
370 | + | let bu = getString(aH, L(bn)) | |
371 | + | let bv = if ((bu == unit)) | |
361 | 372 | then unit | |
362 | - | else invoke( | |
363 | - | if (( | |
373 | + | else invoke(aH, "updateReferralActivity", [B, bn, (bE >= E)], nil) | |
374 | + | if ((bv == bv)) | |
364 | 375 | then { | |
365 | - | let | |
376 | + | let bL = if (if ((bu == unit)) | |
366 | 377 | then true | |
367 | - | else ( | |
378 | + | else (E > bE)) | |
368 | 379 | then unit | |
369 | 380 | else { | |
370 | - | let | |
371 | - | let | |
372 | - | invoke( | |
381 | + | let bM = fraction(bK, H, b) | |
382 | + | let bN = fraction(bK, K, b) | |
383 | + | invoke(aH, "incUnclaimed", [B, bn, bM, bN], nil) | |
373 | 384 | } | |
374 | - | if (( | |
385 | + | if ((bL == bL)) | |
375 | 386 | then { | |
376 | - | let | |
377 | - | let | |
378 | - | then [IntegerEntry( | |
379 | - | else [IntegerEntry( | |
380 | - | $Tuple2(( | |
387 | + | let bO = [IntegerEntry(ap(by), (valueOrElse(br, 0) + bK))] | |
388 | + | let bH = if (((bA - 1) > by)) | |
389 | + | then [IntegerEntry(ak(), (by + 1))] | |
390 | + | else [IntegerEntry(ao(), (bx + 1)), IntegerEntry(ak(), 0), DeleteEntry(an())] | |
391 | + | $Tuple2((bO ++ bH), true) | |
381 | 392 | } | |
382 | 393 | else throw("Strict value is not equal to itself.") | |
383 | 394 | } | |
384 | 395 | else throw("Strict value is not equal to itself.") | |
385 | 396 | } | |
386 | 397 | else throw("invalid processing stage") | |
387 | 398 | } | |
388 | 399 | ||
389 | 400 | ||
390 | 401 | ||
391 | - | @Callable( | |
392 | - | func finalizeWrapper ( | |
393 | - | let | |
394 | - | let | |
395 | - | if ($isInstanceOf( | |
396 | - | then | |
397 | - | else throw(($getType( | |
402 | + | @Callable(aM) | |
403 | + | func finalizeWrapper (bP) = { | |
404 | + | let bQ = { | |
405 | + | let bR = invoke(this, "finalizeHelper", nil, nil) | |
406 | + | if ($isInstanceOf(bR, "Boolean")) | |
407 | + | then bR | |
408 | + | else throw(($getType(bR) + " couldn't be cast to Boolean")) | |
398 | 409 | } | |
399 | - | if (( | |
400 | - | then if (!( | |
401 | - | then if (( | |
410 | + | if ((bQ == bQ)) | |
411 | + | then if (!(bQ)) | |
412 | + | then if ((bP == q)) | |
402 | 413 | then throw("Nothing to process") | |
403 | 414 | else $Tuple2(nil, unit) | |
404 | - | else if (( | |
405 | - | then $Tuple2(nil, invoke(this, "finalizeWrapper", [( | |
415 | + | else if ((bP > 0)) | |
416 | + | then $Tuple2(nil, invoke(this, "finalizeWrapper", [(bP - 1)], nil)) | |
406 | 417 | else $Tuple2(nil, unit) | |
407 | 418 | else throw("Strict value is not equal to itself.") | |
408 | 419 | } | |
409 | 420 | ||
410 | 421 | ||
411 | 422 | ||
412 | - | @Callable( | |
423 | + | @Callable(aM) | |
413 | 424 | func processPendingPeriodsAndUsers () = $Tuple2(nil, invoke(this, "finalizeWrapper", [q], nil)) | |
414 | 425 | ||
415 | 426 | ||
416 | 427 | ||
417 | - | @Callable( | |
428 | + | @Callable(aM) | |
418 | 429 | func deposit () = { | |
419 | - | let ab = V() | |
420 | - | if ((aI.caller != Address(fromBase58String(ab[R])))) | |
421 | - | then throw("Wrong caller address") | |
422 | - | else { | |
423 | - | let bO = value(value(aI.payments[0]).assetId) | |
424 | - | if ((bO != fromBase58String(ab[Q]))) | |
425 | - | then throw("Wrong payment asset") | |
426 | - | else { | |
427 | - | let aq = bk() | |
428 | - | let bP = (height - i(ac())) | |
429 | - | let bQ = valueOrErrorMessage(getInteger(P, ae()), (("mandatory emission_contract." + ae()) + " is not defined")) | |
430 | - | let bR = valueOrErrorMessage(getInteger(t, af()), (("mandatory factory_contract." + af()) + " is not defined")) | |
431 | - | let bS = fraction((bP * bR), bQ, c) | |
432 | - | let bT = invoke(P, "emit", [bS], nil) | |
433 | - | if ((bT == bT)) | |
434 | - | then { | |
435 | - | let bU = value(aI.payments[0]).amount | |
436 | - | let bV = au(aq, bU, bS) | |
437 | - | [IntegerEntry(ah(), aq), IntegerEntry(ap(aq), height), IntegerEntry(ar(aq), bS), IntegerEntry(ac(), height), IntegerEntry(as(aq), bU), IntegerEntry(ai(), (aq + 1)), StringEntry(at(), bV), StringEntry(ax(aq), bV)] | |
438 | - | } | |
430 | + | let bS = if ((aM.caller == w)) | |
431 | + | then true | |
432 | + | else aV(aM) | |
433 | + | if ((bS == bS)) | |
434 | + | then { | |
435 | + | let au = bo() | |
436 | + | let bT = (height - i(ae())) | |
437 | + | let bU = valueOrErrorMessage(getInteger(R, ag()), (("mandatory emission_contract." + ag()) + " is not defined")) | |
438 | + | let bV = valueOrElse(getInteger(R, ah()), 0) | |
439 | + | let bW = fraction((bT * bV), bU, c) | |
440 | + | let bX = invoke(R, "emit", [bW], nil) | |
441 | + | if ((bX == bX)) | |
442 | + | then { | |
443 | + | let bY = 0 | |
444 | + | let bZ = ay(au, bY, bW) | |
445 | + | let ca = invoke(R, "gwxHoldersRewardUpdate", nil, nil) | |
446 | + | if ((ca == ca)) | |
447 | + | then [IntegerEntry(al(), au), IntegerEntry(at(au), height), IntegerEntry(av(au), bW), IntegerEntry(ae(), height), IntegerEntry(aw(au), bY), IntegerEntry(am(), (au + 1)), StringEntry(ax(), bZ), StringEntry(aB(au), bZ)] | |
439 | 448 | else throw("Strict value is not equal to itself.") | |
440 | 449 | } | |
441 | - | } | |
442 | - | } | |
443 | - | ||
444 | - | ||
445 | - | ||
446 | - | @Callable(aI) | |
447 | - | func claimReward () = { | |
448 | - | let ab = V() | |
449 | - | let bW = toString(aI.caller) | |
450 | - | let bX = bl(bW) | |
451 | - | let aH = bX._1 | |
452 | - | let bY = bX._2 | |
453 | - | let bZ = if ((aH > 0)) | |
454 | - | then true | |
455 | - | else throw("Nothing to claim") | |
456 | - | if ((bZ == bZ)) | |
457 | - | then { | |
458 | - | let ca = 0 | |
459 | - | let cb = { | |
460 | - | let bN = invoke(aD, "claim", [z], nil) | |
461 | - | if ($isInstanceOf(bN, "Int")) | |
462 | - | then bN | |
463 | - | else throw(($getType(bN) + " couldn't be cast to Int")) | |
464 | - | } | |
465 | - | let cc = (aH + cb) | |
466 | - | $Tuple2(([ScriptTransfer(aI.caller, cc, fromBase58String(ab[Q])), aE("claim", bW, aH, aI)] ++ bY), [cc, ca]) | |
467 | - | } | |
468 | - | else throw("Strict value is not equal to itself.") | |
469 | - | } | |
470 | - | ||
471 | - | ||
472 | - | ||
473 | - | @Callable(aI) | |
474 | - | func claimRewardREADONLY (bW) = { | |
475 | - | let cd = bl(bW) | |
476 | - | let aH = cd._1 | |
477 | - | let bY = cd._2 | |
478 | - | let ce = valueOrElse(getInteger(aD, L(z, bW)), 0) | |
479 | - | let cc = (aH + ce) | |
480 | - | $Tuple2(nil, cc) | |
481 | - | } | |
482 | - | ||
483 | - | ||
484 | - | ||
485 | - | @Callable(aI) | |
486 | - | func latestFinalizedPeriodREADONLY (bW) = $Tuple2(nil, valueOrElse(getInteger(this, ah()), -1)) | |
487 | - | ||
488 | - | ||
489 | - | ||
490 | - | @Callable(aI) | |
491 | - | func latestFinalizedPeriodInfoREADONLY (bW) = $Tuple2(nil, j(at())) | |
492 | - | ||
493 | - | ||
494 | - | ||
495 | - | @Callable(aI) | |
496 | - | func calcGwxParamsREADONLY (cf,cg,ch) = { | |
497 | - | let ci = (cg + ch) | |
498 | - | let cj = -(fraction(cf, b, ch)) | |
499 | - | let ck = (fraction(cf, b, ch) * ci) | |
500 | - | $Tuple2(nil, [cj, ck, bk()]) | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | ||
505 | - | @Callable(aI) | |
506 | - | func calcGwxAmountStartREADONLY (cl,cm,cn) = { | |
507 | - | let co = fraction(cm, c, cn) | |
508 | - | let bp = fraction(cl, co, c) | |
509 | - | $Tuple2(nil, [bp]) | |
510 | - | } | |
511 | - | ||
512 | - | ||
513 | - | ||
514 | - | @Callable(aI) | |
515 | - | func onEmissionForGwxStart () = if ((aI.caller != t)) | |
516 | - | then throw("permissions denied") | |
517 | - | else [IntegerEntry(ac(), height)] | |
518 | - | ||
519 | - | ||
520 | - | ||
521 | - | @Callable(aI) | |
522 | - | func latestPeriodEmissionRewardsREADONLY (bW) = { | |
523 | - | let aq = bk() | |
524 | - | $Tuple2(nil, [g(ar(aq))]) | |
525 | - | } | |
526 | - | ||
527 | - | ||
528 | - | ||
529 | - | @Callable(aI) | |
530 | - | func calcD (cp,cq,cr,cs,ct) = { | |
531 | - | let cu = toBigInt(2) | |
532 | - | let cv = parseBigIntValue(cs) | |
533 | - | let cw = parseBigIntValue(ct) | |
534 | - | let cx = parseBigIntValue(cp) | |
535 | - | let cy = parseBigIntValue(cq) | |
536 | - | let cz = (parseBigIntValue(cr) * cv) | |
537 | - | let aP = (cx + cy) | |
538 | - | if ((aP == d)) | |
539 | - | then $Tuple2(nil, toString(d)) | |
540 | - | else { | |
541 | - | let cA = (cz * cu) | |
542 | - | let cB = [0, 1, 2, 3, 4, 5, 6] | |
543 | - | func cC (cD,cE) = { | |
544 | - | let cF = cD | |
545 | - | let cG = cF._1 | |
546 | - | let cH = cF._2 | |
547 | - | let cI = cF._3 | |
548 | - | if ((cI != unit)) | |
549 | - | then cD | |
550 | - | else { | |
551 | - | let cJ = (((cG * cG) * cG) / (((cx * cy) * cu) * cu)) | |
552 | - | let cK = (((((cA * aP) / cv) + (cJ * cu)) * cG) / ((((cA - cv) * cG) / cv) + ((cu + toBigInt(1)) * cJ))) | |
553 | - | let cL = n((cK - value(cG))) | |
554 | - | if ((cw >= cL)) | |
555 | - | then $Tuple3(cK, cG, cE) | |
556 | - | else $Tuple3(cK, cG, unit) | |
557 | - | } | |
558 | - | } | |
559 | - | ||
560 | - | let cM = { | |
561 | - | let cN = cB | |
562 | - | let cO = size(cN) | |
563 | - | let cP = $Tuple3(aP, unit, unit) | |
564 | - | func cQ (cR,cS) = if ((cS >= cO)) | |
565 | - | then cR | |
566 | - | else cC(cR, cN[cS]) | |
567 | - | ||
568 | - | func cT (cR,cS) = if ((cS >= cO)) | |
569 | - | then cR | |
570 | - | else throw("List size exceeds 7") | |
571 | - | ||
572 | - | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7) | |
573 | - | } | |
574 | - | let cK = cM._1 | |
575 | - | let cH = cM._2 | |
576 | - | let cI = cM._3 | |
577 | - | if ((cI != unit)) | |
578 | - | then $Tuple2(nil, toString(cK)) | |
579 | - | else { | |
580 | - | let cL = n((cK - value(cH))) | |
581 | - | throw(("D calculation error, dDiff = " + toString(cL))) | |
582 | - | } | |
583 | - | } | |
584 | - | } | |
585 | - | ||
586 | - | ||
587 | - | ||
588 | - | @Callable(aI) | |
589 | - | func setManager (cU) = { | |
590 | - | let cV = aR(aI) | |
591 | - | if ((cV == cV)) | |
592 | - | then { | |
593 | - | let cW = fromBase58String(cU) | |
594 | - | if ((cW == cW)) | |
595 | - | then [StringEntry(aM(), cU)] | |
596 | 450 | else throw("Strict value is not equal to itself.") | |
597 | 451 | } | |
598 | 452 | else throw("Strict value is not equal to itself.") | |
599 | 453 | } | |
600 | 454 | ||
601 | 455 | ||
602 | 456 | ||
603 | - | @Callable(aI) | |
604 | - | func confirmManager () = { | |
605 | - | let cX = aQ() | |
606 | - | let cY = if (isDefined(cX)) | |
457 | + | @Callable(aM) | |
458 | + | func claimReward () = { | |
459 | + | let ad = X() | |
460 | + | let cb = toString(aM.caller) | |
461 | + | let cc = bp(cb) | |
462 | + | let aL = cc._1 | |
463 | + | let cd = cc._2 | |
464 | + | let ce = if ((aL > 0)) | |
607 | 465 | then true | |
608 | - | else throw(" | |
609 | - | if (( | |
466 | + | else throw("Nothing to claim") | |
467 | + | if ((ce == ce)) | |
610 | 468 | then { | |
611 | - | let cZ = if ((aI.callerPublicKey == value(cX))) | |
612 | - | then true | |
613 | - | else throw("You are not pending manager") | |
614 | - | if ((cZ == cZ)) | |
615 | - | then [StringEntry(aL(), toBase58String(value(cX))), DeleteEntry(aM())] | |
469 | + | let cf = 0 | |
470 | + | let cg = { | |
471 | + | let bR = invoke(aH, "claim", [B], nil) | |
472 | + | if ($isInstanceOf(bR, "Int")) | |
473 | + | then bR | |
474 | + | else throw(($getType(bR) + " couldn't be cast to Int")) | |
475 | + | } | |
476 | + | let ch = (aL + cg) | |
477 | + | $Tuple2(([ScriptTransfer(aM.caller, ch, fromBase58String(ad[S])), aI("claim", cb, aL, aM)] ++ cd), [ch, cf]) | |
478 | + | } | |
479 | + | else throw("Strict value is not equal to itself.") | |
480 | + | } | |
481 | + | ||
482 | + | ||
483 | + | ||
484 | + | @Callable(aM) | |
485 | + | func claimRewardREADONLY (cb) = { | |
486 | + | let ci = bp(cb) | |
487 | + | let aL = ci._1 | |
488 | + | let cd = ci._2 | |
489 | + | let cj = valueOrElse(getInteger(aH, N(B, cb)), 0) | |
490 | + | let ch = (aL + cj) | |
491 | + | $Tuple2(nil, ch) | |
492 | + | } | |
493 | + | ||
494 | + | ||
495 | + | ||
496 | + | @Callable(aM) | |
497 | + | func latestFinalizedPeriodREADONLY (cb) = $Tuple2(nil, valueOrElse(getInteger(this, al()), -1)) | |
498 | + | ||
499 | + | ||
500 | + | ||
501 | + | @Callable(aM) | |
502 | + | func latestFinalizedPeriodInfoREADONLY (cb) = $Tuple2(nil, j(ax())) | |
503 | + | ||
504 | + | ||
505 | + | ||
506 | + | @Callable(aM) | |
507 | + | func calcGwxParamsREADONLY (ck,cl,cm) = { | |
508 | + | let cn = (cl + cm) | |
509 | + | let co = -(fraction(ck, b, cm)) | |
510 | + | let cp = (fraction(ck, b, cm) * cn) | |
511 | + | $Tuple2(nil, [co, cp, bo()]) | |
512 | + | } | |
513 | + | ||
514 | + | ||
515 | + | ||
516 | + | @Callable(aM) | |
517 | + | func calcGwxAmountStartREADONLY (cq,cr,cs) = { | |
518 | + | let ct = fraction(cr, c, cs) | |
519 | + | let bt = fraction(cq, ct, c) | |
520 | + | $Tuple2(nil, [bt]) | |
521 | + | } | |
522 | + | ||
523 | + | ||
524 | + | ||
525 | + | @Callable(aM) | |
526 | + | func onEmissionForGwxStart () = if ((aM.caller != t)) | |
527 | + | then throw("permissions denied") | |
528 | + | else [IntegerEntry(ae(), height)] | |
529 | + | ||
530 | + | ||
531 | + | ||
532 | + | @Callable(aM) | |
533 | + | func latestPeriodEmissionRewardsREADONLY (cb) = { | |
534 | + | let au = bo() | |
535 | + | $Tuple2(nil, [g(av(au))]) | |
536 | + | } | |
537 | + | ||
538 | + | ||
539 | + | ||
540 | + | @Callable(aM) | |
541 | + | func calcD (cu,cv,cw,cx,cy) = { | |
542 | + | let cz = toBigInt(2) | |
543 | + | let cA = parseBigIntValue(cx) | |
544 | + | let cB = parseBigIntValue(cy) | |
545 | + | let cC = parseBigIntValue(cu) | |
546 | + | let cD = parseBigIntValue(cv) | |
547 | + | let cE = (parseBigIntValue(cw) * cA) | |
548 | + | let aT = (cC + cD) | |
549 | + | if ((aT == d)) | |
550 | + | then $Tuple2(nil, toString(d)) | |
551 | + | else { | |
552 | + | let cF = (cE * cz) | |
553 | + | let cG = [0, 1, 2, 3, 4, 5, 6] | |
554 | + | func cH (cI,cJ) = { | |
555 | + | let cK = cI | |
556 | + | let cL = cK._1 | |
557 | + | let cM = cK._2 | |
558 | + | let cN = cK._3 | |
559 | + | if ((cN != unit)) | |
560 | + | then cI | |
561 | + | else { | |
562 | + | let cO = (((cL * cL) * cL) / (((cC * cD) * cz) * cz)) | |
563 | + | let cP = (((((cF * aT) / cA) + (cO * cz)) * cL) / ((((cF - cA) * cL) / cA) + ((cz + toBigInt(1)) * cO))) | |
564 | + | let cQ = n((cP - value(cL))) | |
565 | + | if ((cB >= cQ)) | |
566 | + | then $Tuple3(cP, cL, cJ) | |
567 | + | else $Tuple3(cP, cL, unit) | |
568 | + | } | |
569 | + | } | |
570 | + | ||
571 | + | let cR = { | |
572 | + | let cS = cG | |
573 | + | let cT = size(cS) | |
574 | + | let cU = $Tuple3(aT, unit, unit) | |
575 | + | func cV (cW,cX) = if ((cX >= cT)) | |
576 | + | then cW | |
577 | + | else cH(cW, cS[cX]) | |
578 | + | ||
579 | + | func cY (cW,cX) = if ((cX >= cT)) | |
580 | + | then cW | |
581 | + | else throw("List size exceeds 7") | |
582 | + | ||
583 | + | cY(cV(cV(cV(cV(cV(cV(cV(cU, 0), 1), 2), 3), 4), 5), 6), 7) | |
584 | + | } | |
585 | + | let cP = cR._1 | |
586 | + | let cM = cR._2 | |
587 | + | let cN = cR._3 | |
588 | + | if ((cN != unit)) | |
589 | + | then $Tuple2(nil, toString(cP)) | |
590 | + | else { | |
591 | + | let cQ = n((cP - value(cM))) | |
592 | + | throw(("D calculation error, dDiff = " + toString(cQ))) | |
593 | + | } | |
594 | + | } | |
595 | + | } | |
596 | + | ||
597 | + | ||
598 | + | ||
599 | + | @Callable(aM) | |
600 | + | func setManager (cZ) = { | |
601 | + | let bS = aV(aM) | |
602 | + | if ((bS == bS)) | |
603 | + | then { | |
604 | + | let da = fromBase58String(cZ) | |
605 | + | if ((da == da)) | |
606 | + | then [StringEntry(aQ(), cZ)] | |
616 | 607 | else throw("Strict value is not equal to itself.") | |
617 | 608 | } | |
618 | 609 | else throw("Strict value is not equal to itself.") | |
619 | 610 | } | |
620 | 611 | ||
621 | 612 | ||
622 | - | @Verifier(da) | |
623 | - | func db () = { | |
624 | - | let dc = { | |
625 | - | let aO = aN() | |
626 | - | if ($isInstanceOf(aO, "ByteVector")) | |
613 | + | ||
614 | + | @Callable(aM) | |
615 | + | func confirmManager () = { | |
616 | + | let db = aU() | |
617 | + | let dc = if (isDefined(db)) | |
618 | + | then true | |
619 | + | else throw("No pending manager") | |
620 | + | if ((dc == dc)) | |
621 | + | then { | |
622 | + | let dd = if ((aM.callerPublicKey == value(db))) | |
623 | + | then true | |
624 | + | else throw("You are not pending manager") | |
625 | + | if ((dd == dd)) | |
626 | + | then [StringEntry(aP(), toBase58String(value(db))), DeleteEntry(aQ())] | |
627 | + | else throw("Strict value is not equal to itself.") | |
628 | + | } | |
629 | + | else throw("Strict value is not equal to itself.") | |
630 | + | } | |
631 | + | ||
632 | + | ||
633 | + | @Verifier(de) | |
634 | + | func df () = { | |
635 | + | let dg = { | |
636 | + | let aS = aR() | |
637 | + | if ($isInstanceOf(aS, "ByteVector")) | |
627 | 638 | then { | |
628 | - | let | |
629 | - | | |
639 | + | let aX = aS | |
640 | + | aX | |
630 | 641 | } | |
631 | - | else if ($isInstanceOf( | |
632 | - | then | |
642 | + | else if ($isInstanceOf(aS, "Unit")) | |
643 | + | then de.senderPublicKey | |
633 | 644 | else throw("Match error") | |
634 | 645 | } | |
635 | - | sigVerify( | |
646 | + | sigVerify(de.bodyBytes, de.proofs[0], dg) | |
636 | 647 | } | |
637 | 648 |
github/deemru/w8io/03bedc9 157.63 ms ◑