2023.06.01 15:19 [3669140] smart account 3PJyz4AHXKBgDuFx7uZdYmHCBtTmDnRgCx3 > SELF 0.00000000 Waves

{ "type": 13, "id": "7jUQ223tjvaVEShR4b1AX1s1vSsChGbHRVsWzdv7QyRq", "fee": 1300000, "feeAssetId": null, "timestamp": 1685621973808, "version": 2, "chainId": 87, "sender": "3PJyz4AHXKBgDuFx7uZdYmHCBtTmDnRgCx3", "senderPublicKey": "FoGdD9qz4AFW3pdmp1QCA5vvo9wn3fTbv4JnYrWZe3BB", "proofs": [ "2STa1qrSCBkzCQr4DQS7rX39phong1t1BX3BHLiVa9KJq5ybFVpGbX6ELf94ZBx8jTXLy4bsFXvMhB2a7ACJf33h" ], "script": "base64:BgIdCAISCQoHCAEBAQEBCBIDCgEIEgMKAQESABIAEgAyAANTRVACAl9fAQd3cmFwRXJyAQNtc2cJALkJAgkAzAgCAg5lbWlzc2lvbi5yaWRlOgkAzAgCCQClCAEFBHRoaXMJAMwIAgUDbXNnBQNuaWwCASABCHRocm93RXJyAQNtc2cJAAIBCQEHd3JhcEVycgEFA21zZwEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkBB3dyYXBFcnIBCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQNrZXkCDyBpcyBub3QgZGVmaW5lZAERa2V5RmFjdG9yeUFkZHJlc3MAAhwlcyVzX19jb25maWdfX2ZhY3RvcnlBZGRyZXNzABlrZXlWb3RpbmdWZXJpZmllZENvbnRyYWN0AiQlcyVzX19jb25maWdfX3ZvdGluZ1ZlcmlmaWVkQ29udHJhY3QAImtleVZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QCLSVzJXNfX2NvbmZpZ19fdm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAAUa2V5VXNlclBvb2xzQ29udHJhY3QCHyVzJXNfX2NvbmZpZ19fdXNlclBvb2xzQ29udHJhY3QAFnZvdGluZ1ZlcmlmaWVkQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzBRlrZXlWb3RpbmdWZXJpZmllZENvbnRyYWN0AB92b3RpbmdFbWlzc2lvbkNhbmRpZGF0ZUNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwUia2V5Vm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAARdXNlclBvb2xzQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzBRRrZXlVc2VyUG9vbHNDb250cmFjdAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAAEAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAgAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAwAVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwAAQAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAABQAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAYAGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAABwAaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAACgENa2V5RmFjdG9yeUNmZwACESVzX19mYWN0b3J5Q29uZmlnARprZXlGYWN0b3J5THAyQXNzZXRzTWFwcGluZwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABEGtleUZhY3RvcnlMcExpc3QAAhAlc19fbHBUb2tlbnNMaXN0ASZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwEKbHBBc3NldFN0cgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQpscEFzc2V0U3RyCQDMCAICHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUDbmlsBQNTRVABFGtleUZhY3RvcnlQb29sV2VpZ2h0AQ9jb250cmFjdEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCnBvb2xXZWlnaHQJAMwIAgUPY29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARFrZXlGYWN0b3J5QWRkcmVzcwABCnJlYWRMcExpc3QACQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbAAJARBrZXlGYWN0b3J5THBMaXN0AAIABQNTRVABFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAQdmYWN0b3J5CQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQdmYWN0b3J5CQENa2V5RmFjdG9yeUNmZwAFA1NFUAEYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAQpmYWN0b3J5Q2ZnCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmZhY3RvcnlDZmcFGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHABGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEKZmFjdG9yeUNmZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQpmYWN0b3J5Q2ZnBRhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHABGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwBCmZhY3RvcnlDZmcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUKZmFjdG9yeUNmZwUaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHABCWtleUNvbmZpZwACCiVzX19jb25maWcBGWtleVJhdGVQZXJCbG9ja01heEN1cnJlbnQAAh4lcyVzX19yYXRlUGVyQmxvY2tNYXhfX2N1cnJlbnQBG2tleVJhdGVQZXJCbG9ja01heFN0YXJ0RnJvbQIJdGltZXN0YW1wBWJsb2NrCQC5CQIJAMwIAgIgJXMlcyVkJWRfX3JhdGVQZXJCbG9ja01heF9fc3RhcnQJAMwIAgkApAMBBQl0aW1lc3RhbXAJAMwIAgkApAMBBQVibG9jawUDbmlsBQNTRVABFmtleVJhdGVQZXJCbG9ja0N1cnJlbnQAAhslcyVzX19yYXRlUGVyQmxvY2tfX2N1cnJlbnQBE2tleVJhdGVQZXJCbG9ja05leHQAAhglcyVzX19yYXRlUGVyQmxvY2tfX25leHQBGGtleVJhdGVQZXJCbG9ja1N0YXJ0RnJvbQIJdGltZXN0YW1wBWJsb2NrCQC5CQIJAMwIAgIdJXMlcyVkJWRfX3JhdGVQZXJCbG9ja19fc3RhcnQJAMwIAgkApAMBBQl0aW1lc3RhbXAJAMwIAgkApAMBBQVibG9jawUDbmlsBQNTRVABFWtleUVtaXNzaW9uU3RhcnRCbG9jawACGiVzJXNfX2VtaXNzaW9uX19zdGFydEJsb2NrARtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MAAhglcyVzX19lbWlzc2lvbl9fZHVyYXRpb24BE2tleUVtaXNzaW9uRW5kQmxvY2sAAhglcyVzX19lbWlzc2lvbl9fZW5kQmxvY2sBDWtleUJvb3N0Q29lZmYAAg4lc19fYm9vc3RDb2VmZgARYm9vc3RDb2VmZkRlZmF1bHQAAwAKYm9vc3RDb2VmZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQENa2V5Qm9vc3RDb2VmZgAFEWJvb3N0Q29lZmZEZWZhdWx0ARprZXlHd3hIb2xkZXJzUmV3YXJkQ3VycmVudAACHyVzJXNfX2d3eEhvbGRlcnNSZXdhcmRfX2N1cnJlbnQBF2tleUd3eEhvbGRlcnNSZXdhcmROZXh0AAIcJXMlc19fZ3d4SG9sZGVyc1Jld2FyZF9fbmV4dAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkEAnBkCQEIdGhyb3dFcnIBAhFQZXJtaXNzaW9uIGRlbmllZAQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQUCcGsGBQJwZAMJAAECBQckbWF0Y2gwAgRVbml0AwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYFAnBkCQACAQILTWF0Y2ggZXJyb3IGAWkBC2NvbnN0cnVjdG9yBw5mYWN0b3J5QWRkcmVzcw9yYXRlUGVyQmxvY2tNYXgMcmF0ZVBlckJsb2NrEmVtaXNzaW9uU3RhcnRCbG9jaxBlbWlzc2lvbkR1cmF0aW9uFmVtaXNzaW9uU3RhcnRUaW1lc3RhbXAMd3hBc3NldElkU3RyBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARtrZXlSYXRlUGVyQmxvY2tNYXhTdGFydEZyb20CBRZlbWlzc2lvblN0YXJ0VGltZXN0YW1wBRJlbWlzc2lvblN0YXJ0QmxvY2sFD3JhdGVQZXJCbG9ja01heAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWtleVJhdGVQZXJCbG9ja01heEN1cnJlbnQABQ9yYXRlUGVyQmxvY2tNYXgJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlSYXRlUGVyQmxvY2tTdGFydEZyb20CBRZlbWlzc2lvblN0YXJ0VGltZXN0YW1wBRJlbWlzc2lvblN0YXJ0QmxvY2sFDHJhdGVQZXJCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVJhdGVQZXJCbG9ja0N1cnJlbnQABQxyYXRlUGVyQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlFbWlzc2lvblN0YXJ0QmxvY2sABRJlbWlzc2lvblN0YXJ0QmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIJARtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MABRBlbWlzc2lvbkR1cmF0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5RW1pc3Npb25FbmRCbG9jawAJAGQCBRJlbWlzc2lvblN0YXJ0QmxvY2sFEGVtaXNzaW9uRHVyYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUZhY3RvcnlBZGRyZXNzAAUOZmFjdG9yeUFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCWtleUNvbmZpZwAJAKwCAgIEJXNfXwUMd3hBc3NldElkU3RyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY29uc3RydWN0b3JWMgEZdm90aW5nVmVyaWZpZWRDb250cmFjdFBybQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUZa2V5Vm90aW5nVmVyaWZpZWRDb250cmFjdAUZdm90aW5nVmVyaWZpZWRDb250cmFjdFBybQUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGVtaXQBBmFtb3VudAMJAGcCAAAFBmFtb3VudAkAlAoCBQNuaWwFA25pbAQPZmFjdG9yeUNvbnRyYWN0CQEYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAQKZmFjdG9yeUNmZwkBFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAQUPZmFjdG9yeUNvbnRyYWN0BA9zdGFraW5nQ29udHJhY3QJARdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcEEmd3eFJld2FyZHNDb250cmFjdAkBGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwBBQpmYWN0b3J5Q2ZnBAZjYWxsZXIIBQFpBmNhbGxlcgMDCQECIT0CBQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkBAiE9AgUGY2FsbGVyBRJnd3hSZXdhcmRzQ29udHJhY3QHCQEIdGhyb3dFcnIBAhJwZXJtaXNzaW9ucyBkZW5pZWQEDHd4QXNzZXRJZFN0cgkAkQMCCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQEJa2V5Q29uZmlnAAUDU0VQAAEECXd4QXNzZXRJZAkA2QQBBQx3eEFzc2V0SWRTdHIJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFBmFtb3VudAUJd3hBc3NldElkBQNuaWwJAMwIAgUJd3hBc3NldElkBQNuaWwBaQEEYnVybgAED2ZhY3RvcnlDb250cmFjdAkBGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbAAECmZhY3RvcnlDZmcJARRyZWFkRmFjdG9yeUNmZ09yRmFpbAEFD2ZhY3RvcnlDb250cmFjdAQQYm9vc3RpbmdDb250cmFjdAkBGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAEFCmZhY3RvcnlDZmcDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAQh0aHJvd0VycgECHGV4YWN0IG9uZSBwYXltZW50IGlzIGFsbG93ZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQECXBtdEFtb3VudAgFA3BtdAZhbW91bnQECXd4QXNzZXRJZAkA2QQBCQCRAwIJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJAQlrZXlDb25maWcABQNTRVAAAQMJAQIhPQIFB2Fzc2V0SWQFCXd4QXNzZXRJZAkBCHRocm93RXJyAQIbaW52YWxpZCB3eEFzc2V0SWQgaXMgcGFzc2VkAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBRBib29zdGluZ0NvbnRyYWN0CQDMCAIFFnZvdGluZ1ZlcmlmaWVkQ29udHJhY3QJAMwIAgUfdm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAkAzAgCBRF1c2VyUG9vbHNDb250cmFjdAUDbmlsCAUBaQZjYWxsZXIJAQh0aHJvd0VycgECEnBlcm1pc3Npb25zIGRlbmllZAkAzAgCCQEEQnVybgIFB2Fzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICFyVzJXMlc19faGlzdG9yeV9fYnVybl9fCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgkApAMBBQZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQCkAwEFCXBtdEFtb3VudAUDbmlsBQNTRVAFA25pbAFpARZnd3hIb2xkZXJzUmV3YXJkVXBkYXRlAAQPZmFjdG9yeUNvbnRyYWN0CQEYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAQKZmFjdG9yeUNmZwkBFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAQUPZmFjdG9yeUNvbnRyYWN0BBJnd3hSZXdhcmRzQ29udHJhY3QJARlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsAQUKZmFjdG9yeUNmZwQLY2hlY2tDYWxsZXIDCQAAAggFAWkGY2FsbGVyBRJnd3hSZXdhcmRzQ29udHJhY3QGCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQWZ3d4SG9sZGVyUmV3YXJkQ3VycmVudAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEaa2V5R3d4SG9sZGVyc1Jld2FyZEN1cnJlbnQAAAAEE2d3eEhvbGRlclJld2FyZE5leHQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBF2tleUd3eEhvbGRlcnNSZXdhcmROZXh0AAUWZ3d4SG9sZGVyUmV3YXJkQ3VycmVudAQPc2hvdWxkQmVVcGRhdGVkCQECIT0CBRZnd3hIb2xkZXJSZXdhcmRDdXJyZW50BRNnd3hIb2xkZXJSZXdhcmROZXh0BAdhY3Rpb25zAwUPc2hvdWxkQmVVcGRhdGVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5R3d4SG9sZGVyc1Jld2FyZEN1cnJlbnQABRNnd3hIb2xkZXJSZXdhcmROZXh0CQDMCAIJAQtEZWxldGVFbnRyeQEJARdrZXlHd3hIb2xkZXJzUmV3YXJkTmV4dAAFA25pbAUDbmlsCQCUCgIFB2FjdGlvbnMFD3Nob3VsZEJlVXBkYXRlZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARVnZXRCb29zdENvZWZmUkVBRE9OTFkACQCUCgIFA25pbAUKYm9vc3RDb2VmZgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleU48wFE=", "height": 3669140, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3vrci1Jm1Fha1jTKnEoCoMcPTHMkxYvXg8PzypgnUwit Next: Eb55yKLfDb9mLsxYqGZVZbz4AyczMSju5JLtvEKGgphf Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
9191 func keyRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
9292
9393
94+func keyRatePerBlockNext () = "%s%s__ratePerBlock__next"
95+
96+
9497 func keyRatePerBlockStartFrom (timestamp,block) = makeString(["%s%s%d%d__ratePerBlock__start", toString(timestamp), toString(block)], SEP)
9598
9699
109112 let boostCoeffDefault = 3
110113
111114 let boostCoeff = valueOrElse(getInteger(this, keyBoostCoeff()), boostCoeffDefault)
115+
116+func keyGwxHoldersRewardCurrent () = "%s%s__gwxHoldersReward__current"
117+
118+
119+func keyGwxHoldersRewardNext () = "%s%s__gwxHoldersReward__next"
120+
112121
113122 func keyManagerPublicKey () = "%s__managerPublicKey"
114123
219228
220229
221230 @Callable(i)
231+func gwxHoldersRewardUpdate () = {
232+ let factoryContract = readFactoryAddressOrFail()
233+ let factoryCfg = readFactoryCfgOrFail(factoryContract)
234+ let gwxRewardsContract = getGwxRewardAddressOrFail(factoryCfg)
235+ let checkCaller = if ((i.caller == gwxRewardsContract))
236+ then true
237+ else mustManager(i)
238+ if ((checkCaller == checkCaller))
239+ then {
240+ let gwxHolderRewardCurrent = valueOrElse(getInteger(keyGwxHoldersRewardCurrent()), 0)
241+ let gwxHolderRewardNext = valueOrElse(getInteger(keyGwxHoldersRewardNext()), gwxHolderRewardCurrent)
242+ let shouldBeUpdated = (gwxHolderRewardCurrent != gwxHolderRewardNext)
243+ let actions = if (shouldBeUpdated)
244+ then [IntegerEntry(keyGwxHoldersRewardCurrent(), gwxHolderRewardNext), DeleteEntry(keyGwxHoldersRewardNext())]
245+ else nil
246+ $Tuple2(actions, shouldBeUpdated)
247+ }
248+ else throw("Strict value is not equal to itself.")
249+ }
250+
251+
252+
253+@Callable(i)
222254 func getBoostCoeffREADONLY () = $Tuple2(nil, boostCoeff)
223255
224256
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 func wrapErr (msg) = makeString(["emission.ride:", toString(this), msg], " ")
77
88
99 func throwErr (msg) = throw(wrapErr(msg))
1010
1111
1212 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), wrapErr((("mandatory this." + key) + " is not defined")))
1313
1414
1515 func keyFactoryAddress () = "%s%s__config__factoryAddress"
1616
1717
1818 let keyVotingVerifiedContract = "%s%s__config__votingVerifiedContract"
1919
2020 let keyVotingEmissionCandidateContract = "%s%s__config__votingEmissionCandidateContract"
2121
2222 let keyUserPoolsContract = "%s%s__config__userPoolsContract"
2323
2424 let votingVerifiedContract = addressFromStringValue(getStringOrFail(this, keyVotingVerifiedContract))
2525
2626 let votingEmissionCandidateContract = addressFromStringValue(getStringOrFail(this, keyVotingEmissionCandidateContract))
2727
2828 let userPoolsContract = addressFromStringValue(getStringOrFail(this, keyUserPoolsContract))
2929
3030 let IdxFactoryCfgStakingDapp = 1
3131
3232 let IdxFactoryCfgBoostingDapp = 2
3333
3434 let IdxFactoryCfgIdoDapp = 3
3535
3636 let IdxFactoryCfgTeamDapp = 4
3737
3838 let IdxFactoryCfgEmissionDapp = 5
3939
4040 let IdxFactoryCfgRestDapp = 6
4141
4242 let IdxFactoryCfgSlippageDapp = 7
4343
4444 let IdxFactoryCfgGwxRewardDapp = 10
4545
4646 func keyFactoryCfg () = "%s__factoryConfig"
4747
4848
4949 func keyFactoryLp2AssetsMapping (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
5050
5151
5252 func keyFactoryLpList () = "%s__lpTokensList"
5353
5454
5555 func keyFactoryLpAssetToPoolContractAddress (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
5656
5757
5858 func keyFactoryPoolWeight (contractAddress) = makeString(["%s%s", "poolWeight", contractAddress], SEP)
5959
6060
6161 func readFactoryAddressOrFail () = addressFromStringValue(getStringOrFail(this, keyFactoryAddress()))
6262
6363
6464 func readLpList () = split(valueOrElse(getString(readFactoryAddressOrFail(), keyFactoryLpList()), ""), SEP)
6565
6666
6767 func readFactoryCfgOrFail (factory) = split(getStringOrFail(factory, keyFactoryCfg()), SEP)
6868
6969
7070 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
7171
7272
7373 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
7474
7575
7676 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
7777
7878
7979 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
8080
8181
8282 func keyConfig () = "%s__config"
8383
8484
8585 func keyRatePerBlockMaxCurrent () = "%s%s__ratePerBlockMax__current"
8686
8787
8888 func keyRatePerBlockMaxStartFrom (timestamp,block) = makeString(["%s%s%d%d__ratePerBlockMax__start", toString(timestamp), toString(block)], SEP)
8989
9090
9191 func keyRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
9292
9393
94+func keyRatePerBlockNext () = "%s%s__ratePerBlock__next"
95+
96+
9497 func keyRatePerBlockStartFrom (timestamp,block) = makeString(["%s%s%d%d__ratePerBlock__start", toString(timestamp), toString(block)], SEP)
9598
9699
97100 func keyEmissionStartBlock () = "%s%s__emission__startBlock"
98101
99102
100103 func keyEmissionDurationInBlocks () = "%s%s__emission__duration"
101104
102105
103106 func keyEmissionEndBlock () = "%s%s__emission__endBlock"
104107
105108
106109 func keyBoostCoeff () = "%s__boostCoeff"
107110
108111
109112 let boostCoeffDefault = 3
110113
111114 let boostCoeff = valueOrElse(getInteger(this, keyBoostCoeff()), boostCoeffDefault)
115+
116+func keyGwxHoldersRewardCurrent () = "%s%s__gwxHoldersReward__current"
117+
118+
119+func keyGwxHoldersRewardNext () = "%s%s__gwxHoldersReward__next"
120+
112121
113122 func keyManagerPublicKey () = "%s__managerPublicKey"
114123
115124
116125 func keyManagerVaultAddress () = "%s__managerVaultAddress"
117126
118127
119128 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
120129 case s: String =>
121130 addressFromStringValue(s)
122131 case _ =>
123132 this
124133 }
125134
126135
127136 func managerPublicKeyOrUnit () = {
128137 let managerVaultAddress = getManagerVaultAddressOrThis()
129138 match getString(managerVaultAddress, keyManagerPublicKey()) {
130139 case s: String =>
131140 fromBase58String(s)
132141 case _: Unit =>
133142 unit
134143 case _ =>
135144 throw("Match error")
136145 }
137146 }
138147
139148
140149 func mustManager (i) = {
141150 let pd = throwErr("Permission denied")
142151 match managerPublicKeyOrUnit() {
143152 case pk: ByteVector =>
144153 if ((i.callerPublicKey == pk))
145154 then true
146155 else pd
147156 case _: Unit =>
148157 if ((i.caller == this))
149158 then true
150159 else pd
151160 case _ =>
152161 throw("Match error")
153162 }
154163 }
155164
156165
157166 @Callable(i)
158167 func constructor (factoryAddress,ratePerBlockMax,ratePerBlock,emissionStartBlock,emissionDuration,emissionStartTimestamp,wxAssetIdStr) = {
159168 let checkCaller = mustManager(i)
160169 if ((checkCaller == checkCaller))
161170 then [IntegerEntry(keyRatePerBlockMaxStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlockMax), IntegerEntry(keyRatePerBlockMaxCurrent(), ratePerBlockMax), IntegerEntry(keyRatePerBlockStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlock), IntegerEntry(keyRatePerBlockCurrent(), ratePerBlock), IntegerEntry(keyEmissionStartBlock(), emissionStartBlock), IntegerEntry(keyEmissionDurationInBlocks(), emissionDuration), IntegerEntry(keyEmissionEndBlock(), (emissionStartBlock + emissionDuration)), StringEntry(keyFactoryAddress(), factoryAddress), StringEntry(keyConfig(), ("%s__" + wxAssetIdStr))]
162171 else throw("Strict value is not equal to itself.")
163172 }
164173
165174
166175
167176 @Callable(i)
168177 func constructorV2 (votingVerifiedContractPrm) = {
169178 let checkCaller = mustManager(i)
170179 if ((checkCaller == checkCaller))
171180 then $Tuple2([StringEntry(keyVotingVerifiedContract, votingVerifiedContractPrm)], unit)
172181 else throw("Strict value is not equal to itself.")
173182 }
174183
175184
176185
177186 @Callable(i)
178187 func emit (amount) = if ((0 >= amount))
179188 then $Tuple2(nil, nil)
180189 else {
181190 let factoryContract = readFactoryAddressOrFail()
182191 let factoryCfg = readFactoryCfgOrFail(factoryContract)
183192 let stakingContract = getStakingAddressOrFail(factoryCfg)
184193 let gwxRewardsContract = getGwxRewardAddressOrFail(factoryCfg)
185194 let caller = i.caller
186195 if (if ((caller != stakingContract))
187196 then (caller != gwxRewardsContract)
188197 else false)
189198 then throwErr("permissions denied")
190199 else {
191200 let wxAssetIdStr = split(getStringOrFail(this, keyConfig()), SEP)[1]
192201 let wxAssetId = fromBase58String(wxAssetIdStr)
193202 $Tuple2([ScriptTransfer(caller, amount, wxAssetId)], [wxAssetId])
194203 }
195204 }
196205
197206
198207
199208 @Callable(i)
200209 func burn () = {
201210 let factoryContract = readFactoryAddressOrFail()
202211 let factoryCfg = readFactoryCfgOrFail(factoryContract)
203212 let boostingContract = getBoostingAddressOrFail(factoryCfg)
204213 if ((size(i.payments) != 1))
205214 then throwErr("exact one payment is allowed")
206215 else {
207216 let pmt = i.payments[0]
208217 let assetId = value(pmt.assetId)
209218 let pmtAmount = pmt.amount
210219 let wxAssetId = fromBase58String(split(getStringOrFail(this, keyConfig()), SEP)[1])
211220 if ((assetId != wxAssetId))
212221 then throwErr("invalid wxAssetId is passed")
213222 else if (!(containsElement([boostingContract, votingVerifiedContract, votingEmissionCandidateContract, userPoolsContract], i.caller)))
214223 then throwErr("permissions denied")
215224 else [Burn(assetId, pmtAmount), StringEntry(("%s%s%s__history__burn__" + toBase58String(i.transactionId)), makeString(["%d%d%d", toString(height), toString(lastBlock.timestamp), toString(pmtAmount)], SEP))]
216225 }
217226 }
218227
219228
220229
221230 @Callable(i)
231+func gwxHoldersRewardUpdate () = {
232+ let factoryContract = readFactoryAddressOrFail()
233+ let factoryCfg = readFactoryCfgOrFail(factoryContract)
234+ let gwxRewardsContract = getGwxRewardAddressOrFail(factoryCfg)
235+ let checkCaller = if ((i.caller == gwxRewardsContract))
236+ then true
237+ else mustManager(i)
238+ if ((checkCaller == checkCaller))
239+ then {
240+ let gwxHolderRewardCurrent = valueOrElse(getInteger(keyGwxHoldersRewardCurrent()), 0)
241+ let gwxHolderRewardNext = valueOrElse(getInteger(keyGwxHoldersRewardNext()), gwxHolderRewardCurrent)
242+ let shouldBeUpdated = (gwxHolderRewardCurrent != gwxHolderRewardNext)
243+ let actions = if (shouldBeUpdated)
244+ then [IntegerEntry(keyGwxHoldersRewardCurrent(), gwxHolderRewardNext), DeleteEntry(keyGwxHoldersRewardNext())]
245+ else nil
246+ $Tuple2(actions, shouldBeUpdated)
247+ }
248+ else throw("Strict value is not equal to itself.")
249+ }
250+
251+
252+
253+@Callable(i)
222254 func getBoostCoeffREADONLY () = $Tuple2(nil, boostCoeff)
223255
224256
225257 @Verifier(tx)
226258 func verify () = {
227259 let targetPublicKey = match managerPublicKeyOrUnit() {
228260 case pk: ByteVector =>
229261 pk
230262 case _: Unit =>
231263 tx.senderPublicKey
232264 case _ =>
233265 throw("Match error")
234266 }
235267 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
236268 }
237269

github/deemru/w8io/786bc32 
37.18 ms