tx · 6WJfMtyY5HzhqPBE3uUpaGzKZ1DFqur5cnzkMVV4r3PF

3PEnTKKhcVFnPprwLeTf5kSTYFExCbkWftb:  -0.01400000 Waves

2023.11.07 12:54 [3898613] smart account 3PEnTKKhcVFnPprwLeTf5kSTYFExCbkWftb > SELF 0.00000000 Waves

{ "type": 13, "id": "6WJfMtyY5HzhqPBE3uUpaGzKZ1DFqur5cnzkMVV4r3PF", "fee": 1400000, "feeAssetId": null, "timestamp": 1699350888740, "version": 2, "chainId": 87, "sender": "3PEnTKKhcVFnPprwLeTf5kSTYFExCbkWftb", "senderPublicKey": "CPjPY4XdDADzcBh7JnN2qKGnJMUNksoSNtZKUetJg4nP", "proofs": [ "5D3VQZHDSxYV729f8So22mwAqMYCYh2bawGBNk8DmewVtVnArqQzedHYH2hjVr1nxqT8ZbJgP5zZcSMWKdncbRGX" ], "script": "base64:BgIeCAISABIDCgEBEgMKAQESABIAEgMKAQgSABIDCgEBJAAEUEVURQEg4W4pTkHcHIXuYikIATFxVuov8OITyH3BrthKEwuN9tYAElBldGVTdGFraW5nQWRkcmVzcwkBB0FkZHJlc3MBARoBV2qxSTJN3QE8WlTs6Heuf4HE06AyMEj07QALU3dhcEFkZHJlc3MJAQdBZGRyZXNzAQEaAVcuKjU1sQ238Xk+4bdG0J50Uk17MdCDrgYAC1RlYW1BZGRyZXNzCQEHQWRkcmVzcwEBGgFXrGfSWrEBpqNP6e7xdRI8GkyCe3sRTGA6AAlzZXBhcmF0b3ICAV8ADFJPVU5EX0JMT0NLUwDgTgAMSkFDS1BPVF9QQVJUADwACVRFQU1fUEFSVAAeAApCRVRfQU1PVU5UAJCf2gMABFc0MjAAgKjWuQcAC3N1cHBsaWVkS2V5AgpwZXRlX3RvdGFsAApqYWNrcG90S2V5AgxwZXRlX2phY2twb3QADXBldGVJbkxvY2tLZXkCDHBldGVfaW5fbG9jawAQcGV0ZUluU3Rha2luZ0tleQIPcGV0ZV9pbl9zdGFraW5nAA5saWRlcnNUb3RhbEtleQIGbGlkZXJzAAx0b3RhbFNwaW5LZXkCCnNwaW5fdG90YWwACnRvcDNfYmxvY2sCCnRvcDNfYmxvY2sACnRvcDNfcm91bmQCCnRvcDNfcm91bmQBD2dldEN1cnJlbnRSb3VuZAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFCnRvcDNfcm91bmQBEGdldExhc3RUb3AzQmxvY2sACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQp0b3AzX2Jsb2NrAQtnZXRDb3VudEtleQEKYWRkcmVzc1N0cgkArAICBQphZGRyZXNzU3RyAgRfY250ARBnZXRSb3VuZENvdW50S2V5AQphZGRyZXNzU3RyCQCsAgIJAKwCAgkArAICBQphZGRyZXNzU3RyAgNfcl8JAKQDAQkBD2dldEN1cnJlbnRSb3VuZAACBF9jbnQBEWdldFJvdW5kTGlkZXJzS2V5AAkArAICCQCsAgIFDmxpZGVyc1RvdGFsS2V5AgNfcl8JAKQDAQkBD2dldEN1cnJlbnRSb3VuZAABFGdldFJvdW5kVG90YWxTcGluS2V5AAkArAICCQCsAgIFDHRvdGFsU3BpbktleQIDX3JfCQCkAwEJAQ9nZXRDdXJyZW50Um91bmQAAAVuVHhJZAAAAAduUmVzdWx0AAEAB25IZWlnaHQAAgAIbkFkZHJlc3MAAwEGcmV2ZWFsAgR0eGlkC3RhcmdldEJsb2NrAwkAZwIFBmhlaWdodAULdGFyZ2V0QmxvY2sEC3JldmVhbEJsb2NrCQEFdmFsdWUBCQDtBwEFC3RhcmdldEJsb2NrBAN2cmYJAQV2YWx1ZQEIBQtyZXZlYWxCbG9jawN2cmYEBnJldmVhbAkA9wMBCQDLAQIFA3ZyZgkAmwMBBQR0eGlkCQBqAgkAsQkBBQZyZXZlYWwACgD///////////8BARFjaGVja1dpbm5lckFtb3VudAEGcmVzdWx0AwkAAAIFBnJlc3VsdAIDNzc3CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmphY2twb3RLZXkAAAMJAAACBQZyZXN1bHQCAzQyMAUEVzQyMAMJAAACBQZyZXN1bHQCAzEwMACAyrXuAQMJAAACBQZyZXN1bHQCAzExMQCAjI2eAgMJAAACBQZyZXN1bHQCAzIyMgCAzuTNAgMJAAACBQZyZXN1bHQCAzMzMwCAkLz9AgMJAAACBQZyZXN1bHQCAzQ0NACA0pOtAwMJAAACBQZyZXN1bHQCAzU1NQCAkLz9AgMJAAACBQZyZXN1bHQCAzg4OACAzuTNAgMJAAACBQZyZXN1bHQCAzk5OQCAjI2eAgMJAAACBQZyZXN1bHQCAzY2NgCAtcm9AgMJAAACBQZyZXN1bHQCAzEzNwDA2cjcAgAAAQpqc29uUmVzdWx0AQphZGRyZXNzU3RyAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQphZGRyZXNzU3RyAhR7InN0YXR1cyI6Im5vIGdhbWUifQQEZGF0YQkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUKYWRkcmVzc1N0cgkArAICAhh1bmFibGUgdG8gcmVhZCBkYXRhIGZvciAFCmFkZHJlc3NTdHIFCXNlcGFyYXRvcgQEdHhpZAkAkQMCBQRkYXRhBQVuVHhJZAQMY29tbWl0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOkHAQkA2QQBBQR0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CQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkArAICCQCsAgICAXsJALoJAgUDdG9wAgEsAgF9AQ1wcml2YXRlU3VwcGx5AQZhbW91bnQEBXRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC3N1cHBsaWVkS2V5AAAEB2phY2twb3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUKamFja3BvdEtleQAABAhuZXdUb3RhbAkAZAIFBXRvdGFsCQBrAwUGYW1vdW50CQBlAgBkBQxKQUNLUE9UX1BBUlQAZAQKbmV3SmFja3BvdAkAZAIFB2phY2twb3QJAGsDBQZhbW91bnQFDEpBQ0tQT1RfUEFSVABkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtzdXBwbGllZEtleQUIbmV3VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIFCmphY2twb3RLZXkFCm5ld0phY2twb3QFA25pbAEScHJpdmF0ZUNoZWNrTGlkZXJzBAphZGRyZXNzU3RyCXNwaW5Db3VudApzTGlkZXJzS2V5CXNDb3VudEtleQQJbGlkZXJzU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCnNMaWRlcnNLZXkCAAQGbGlkZXJzAwkBAiE9AgUJbGlkZXJzU3RyAgAJAL0JAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUKc0xpZGVyc0tleQUJc2VwYXJhdG9yBQNuaWwEA2lkeAkAzwgCBQZsaWRlcnMFCmFkZHJlc3NTdHIEDmZpbHRlcmVkTGlkZXJzAwkBCWlzRGVmaW5lZAEFA2lkeAkA0QgCBQZsaWRlcnMJAQV2YWx1ZQEFA2lkeAUGbGlkZXJzBAhtaW5Db3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAJEDAgUOZmlsdGVyZWRMaWRlcnMJAGUCCQCQAwEFDmZpbHRlcmVkTGlkZXJzAAEFCXNDb3VudEtleQAABApsaWRlcnNTaXplCQCQAwEFDmZpbHRlcmVkTGlkZXJzCgEIZm9sZFNvcnQCBWFjY3Vt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cGFyYXRvcgQGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIFCnNMaWRlcnNLZXkFDG5ld0xpZGVyc1N0cgUDbmlsBQZyZXN1bHQBC3ByaXZhdGVTcGluAgphZGRyZXNzU3RyBHR4aWQEBmxvY2tlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1wZXRlSW5Mb2NrS2V5AAAEBXRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC3N1cHBsaWVkS2V5AAAECXRvdGFsU3BpbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQx0b3RhbFNwaW5LZXkAAAQOdG90YWxSb3VuZFNwaW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFGdldFJvdW5kVG90YWxTcGluS2V5AAAABAxuZXdTcGluQ291bnQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtnZXRDb3VudEtleQEFCmFkZHJlc3NTdHIAAAABBBFuZXdTcGluUm91bmRDb3VudAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEGdldFJvdW5kQ291bnRLZXkBBQphZGRyZXNzU3RyAAAAAQMJAGYCBQRXNDIwBQV0b3RhbAkAAgECDW5vIHBldGUgaW4gc2MEA3N0cgkAuQkCCQDMCAIFBHR4aWQJAMwIAgIDeHh4CQDMCAIJAKQDAQUGaGVpZ2h0CQDMCAIFCmFkZHJlc3NTdHIFA25pbAUJc2VwYXJhdG9yBAZsaWRlcnMJARJwcml2YXRlQ2hlY2tMaWRlcnMEBQphZGRyZXNzU3RyBQxuZXdTcGluQ291bnQFDmxpZGVyc1RvdGFsS2V5CQELZ2V0Q291bnRLZXkBAgAEC3JvdW5kTGlkZXJzCQEScHJpdmF0ZUNoZWNrTGlkZXJzBAUKYWRkcmVzc1N0cgURbmV3U3BpblJvdW5kQ291bnQJARFnZXRSb3VuZExpZGVyc0tleQAJARBnZXRSb3VuZENvdW50S2V5AQIABANyZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgUKYWRkcmVzc1N0cgUDc3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1wZXRlSW5Mb2NrS2V5CQBkAgUGbG9ja2VkBQRXNDIwCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELZ2V0Q291bnRLZXkBBQphZGRyZXNzU3RyBQxuZXdTcGluQ291bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARBnZXRSb3VuZENvdW50S2V5AQUKYWRkcmVzc1N0cgURbmV3U3BpblJvdW5kQ291bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDHRvdGFsU3BpbktleQkAZAIFCXRvdGFsU3BpbgABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUZ2V0Um91bmRUb3RhbFNwaW5LZXkACQBkAgUOdG90YWxSb3VuZFNwaW4AAQUDbmlsCQDOCAIJAM4IAgUGbGlkZXJzBQtyb3VuZExpZGVycwUDcmVzCAFpAQZzdXBwbHkAAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCXlvdSBjYW4ndAMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQRQRVRFBwQDaW52CQD8BwQFBHRoaXMCCXN0YWtlUGV0ZQkAzAgCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYJAQ1wcml2YXRlU3VwcGx5AQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAgtiYWQgcGF5bWVudAFpAQlzdGFrZVBldGUBCnBldGVBbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgl5b3UgY2FuJ3QEC3BldGVJblN0YWtlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEHBldGVJblN0YWtpbmdLZXkAAAQDaW52CQD8BwQFElBldGVTdGFraW5nQWRkcmVzcwIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEUEVURQUKcGV0ZUFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBwZXRlSW5TdGFraW5nS2V5CQBkAgULcGV0ZUluU3Rha2UFCnBldGVBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQt1bnN0YWtlUGV0ZQEGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIJeW91IGNhbid0BAtwZXRlSW5TdGFrZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFEHBldGVJblN0YWtpbmdLZXkJAKwCAgUQcGV0ZUluU3Rha2luZ0tleQIKIG5vdCBmb3VuZAQDaW52CQD8BwQFElBldGVTdGFraW5nQWRkcmVzcwIHdW5zdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBwZXRlSW5TdGFraW5nS2V5CQBlAgULcGV0ZUluU3Rha2UFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFGNsYWltUGV0ZUZyb21TdGFraW5nAAMJAGYCCQBkAgkBEGdldExhc3RUb3AzQmxvY2sABQxST1VORF9CTE9DS1MFBmhlaWdodAkAAgECCXRvbyBlYXJseQQQcGV0ZUFtb3VudEJlZm9yZQkA8AcCBQR0aGlzBQRQRVRFAwkAAAIFEHBldGVBbW91bnRCZWZvcmUFEHBldGVBbW91bnRCZWZvcmUEA2ludgkA/AcEBRJQZXRlU3Rha2luZ0FkZHJlc3MCBWNsYWltBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQNcGV0ZUFtb3VudE5ldwkAZQIJAPAHAgUEdGhpcwUEUEVURQUQcGV0ZUFtb3VudEJlZm9yZQMJAAACBQ1wZXRlQW1vdW50TmV3BQ1wZXRlQW1vdW50TmV3AwkAZgIFDXBldGVBbW91bnROZXcAAAQGbGlkZXJzAwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwkBEWdldFJvdW5kTGlkZXJzS2V5AAkAvQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQERZ2V0Um91bmRMaWRlcnNLZXkABQlzZXBhcmF0b3IFA25pbAQKbGlkZXJzU2l6ZQkAkAMBBQZsaWRlcnMEAnAxAwkAZwIFCmxpZGVyc1NpemUAAQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELZ2V0Q291bnRLZXkBCQCRAwIFBmxpZGVycwAAAAAAAAQCcDIDCQBnAgUKbGlkZXJzU2l6ZQACCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtnZXRDb3VudEtleQEJAJEDAgUGbGlkZXJzAAEAAAAABAJwMwMJAGcCBQpsaWRlcnNTaXplAAMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBC2dldENvdW50S2V5AQkAkQMCBQZsaWRlcnMAAgAAAAAEA3AxdwMJAGcCBQpsaWRlcnNTaXplAAEJAJEDAgUGbGlkZXJzAAACCm5vIGFkZHJlc3MEA3AydwMJAGcCBQpsaWRlcnNTaXplAAIJAJEDAgUGbGlkZXJzAAECCm5vIGFkZHJlc3MEA3AzdwMJAGcCBQpsaWRlcnNTaXplAAMJAJEDAgUGbGlkZXJzAAICCm5vIGFkZHJlc3MECnRvdGFsQ291bnQJAGQCCQBkAgUCcDEFAnAyBQJwMwQCcjMDCQBmAgUCcDMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQNwM3cJAGsDBQ1wZXRlQW1vdW50TmV3BQJwMwUKdG90YWxDb3VudAUEUEVURQUDbmlsBQNuaWwEAnIyAwkAZgIFAnAyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUDcDJ3CQBrAwUNcGV0ZUFtb3VudE5ldwUCcDIFCnRvdGFsQ291bnQFBFBFVEUFA25pbAUDbmlsBAJyMQMJAGYCBQJwMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFA3AxdwkAawMFDXBldGVBbW91bnROZXcFAnAxBQp0b3RhbENvdW50BQRQRVRFBQNuaWwFA25pbAkAzggCCQDOCAIJAM4IAgUCcjEFAnIyBQJyMwkAzAgCCQEMSW50ZWdlckVudHJ5AgUKdG9wM19ibG9jawUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQp0b3AzX3JvdW5kCQBkAgkBD2dldEN1cnJlbnRSb3VuZAAAAQUDbmlsCQACAQIRbm90aGluZyBhdmFpbGFibGUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEc3BpbgADAwMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQHCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCkJFVF9BTU9VTlQHBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQEdHhpZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUHYWRkcmVzcwQDaW52CQD8BwQFBHRoaXMCBnJlc3VsdAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkBC3ByaXZhdGVTcGluAgUHYWRkcmVzcwUEdHhpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBC3ByaXZhdGVTcGluAgUHYWRkcmVzcwUEdHhpZAkAAgECC2JhZCBwYXltZW50AWkBBnJlc3VsdAEKYWRkcmVzc1N0cgQEZGF0YQkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUKYWRkcmVzc1N0cgkArAICAhh1bmFibGUgdG8gcmVhZCBkYXRhIGZvciAFCmFkZHJlc3NTdHIFCXNlcGFyYXRvcgQEdHhpZAkAkQMCBQRkYXRhBQVuVHhJZAQLc3RhcnRIZWlnaHQJAJEDAgUEZGF0YQUHbkhlaWdodAQMY29tbWl0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOkHAQkA2QQBBQR0eGlkCQCsAgIFBHR4aWQCCiBub3QgZm91bmQDCQBmAgkAZAIFDGNvbW1pdEhlaWdodAADBQZoZWlnaHQJAAIBCQCsAgIJAKwCAgIFd2FpdCAJAKQDAQkAZQIJAGQCBQxjb21taXRIZWlnaHQAAwUGaGVpZ2h0AhsgYmxvY2tzIHRvIHJldmVhbCB0aGlzIHR4aWQEAnIxCQEGcmV2ZWFsAgUEdHhpZAkAZAIFDGNvbW1pdEhlaWdodAABBAJyMgkBBnJldmVhbAIFBHR4aWQJAGQCBQxjb21taXRIZWlnaHQAAgQCcjMJAQZyZXZlYWwCBQR0eGlkCQBkAgUMY29tbWl0SGVpZ2h0AAMEBnJlc3VsdAkArAICCQCsAgIJAKQDAQUCcjEJAKQDAQUCcjIJAKQDAQUCcjMEDHdpbm5lckFtb3VudAkBEWNoZWNrV2lubmVyQW1vdW50AQUGcmVzdWx0BANzdHIJALkJAgkAzAgCBQR0eGlkCQDMCAIFBnJlc3VsdAkAzAgCBQtzdGFydEhlaWdodAkAzAgCBQphZGRyZXNzU3RyBQNuaWwFCXNlcGFyYXRvcgQGbG9ja2VkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUNcGV0ZUluTG9ja0tleQIVdW5hYmxlIHRvIHJlYWQgbG9ja2VkAwkAZgIFDHdpbm5lckFtb3VudAAABAFrCQCsAgICAnJfBQZyZXN1bHQEC3Jlc3VsdENvdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWsAAAQDaW52CQD8BwQFBHRoaXMCC3Vuc3Rha2VQZXRlCQDMCAIFDHdpbm5lckFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEBXRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC3N1cHBsaWVkS2V5AAAEA2tleQMJAAACBQZyZXN1bHQCAzc3NwUKamFja3BvdEtleQULc3VwcGxpZWRLZXkEA3ZhbAMJAAACBQZyZXN1bHQCAzc3NwAACQBlAgUFdG90YWwFDHdpbm5lckFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNcGV0ZUluTG9ja0tleQkAZQIFBmxvY2tlZAUEVzQyMAkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5BQN2YWwJAMwIAgkBDEludGVnZXJFbnRyeQIFAWsJAGQCBQtyZXN1bHRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIFBHR4aWQFA3N0cgkAzAgCCQELRGVsZXRlRW50cnkBBQphZGRyZXNzU3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmFkZHJlc3NTdHIFDHdpbm5lckFtb3VudAUEUEVURQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwMDCQAAAgUCcjEFAnIzBgkAAAIFAnIxBQJyMgYJAAACBQJyMgUCcjMEAWsCCHJfcmVmdW5kBAtyZXN1bHRDb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFDXBldGVJbkxvY2tLZXkJAGUCBQZsb2NrZWQFBFc0MjAJAMwIAgkBDEludGVnZXJFbnRyeQIFAWsJAGQCBQtyZXN1bHRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIFBHR4aWQFA3N0cgkAzAgCCQELRGVsZXRlRW50cnkBBQphZGRyZXNzU3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmFkZHJlc3NTdHIFCkJFVF9BTU9VTlQFBHVuaXQFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNcGV0ZUluTG9ja0tleQkAZQIFBmxvY2tlZAUEVzQyMAkAzAgCCQELU3RyaW5nRW50cnkCBQR0eGlkBQNzdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKYWRkcmVzc1N0cgUDbmlsAWkBBnRvUGV0ZQAEC3dhdmVzQW1vdW50CQBlAggJAO8HAQUEdGhpcwdyZWd1bGFyAICt4gQDCQBmAgCAwtcvBQt3YXZlc0Ftb3VudAkAAgECEmJhbGFuY2UgaXMgdG9vIGxvdwQPdGVhbVdhdmVzQW1vdW50CQBrAwULd2F2ZXNBbW91bnQFCVRFQU1fUEFSVABkBA9zd2FwV2F2ZXNBbW91bnQJAGUCCQBlAgULd2F2ZXNBbW91bnQFD3RlYW1XYXZlc0Ftb3VudACA2sQJBARzd2FwCQD8BwQFC1N3YXBBZGRyZXNzAgRzd2FwCQDMCAIAAQkAzAgCCQDYBAEFBFBFVEUJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFD3N3YXBXYXZlc0Ftb3VudAUDbmlsAwkAAAIFBHN3YXAFBHN3YXAEDXBldGVBbW91bnROZXcJAPAHAgUEdGhpcwUEUEVURQMJAAACBQ1wZXRlQW1vdW50TmV3BQ1wZXRlQW1vdW50TmV3BAZzdXBwbHkJAQ1wcml2YXRlU3VwcGx5AQUNcGV0ZUFtb3VudE5ldwQDaW52CQD8BwQFBHRoaXMCCXN0YWtlUGV0ZQkAzAgCBQ1wZXRlQW1vdW50TmV3BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC1RlYW1BZGRyZXNzBQ90ZWFtV2F2ZXNBbW91bnQFBHVuaXQFA25pbAUGc3VwcGx5CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXJlYmFsYW5jZQEGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIJeW91IGNhbid0BAV0b3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtzdXBwbGllZEtleQAABAdqYWNrcG90CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmphY2twb3RLZXkAAAMJAGcCBQZhbW91bnQFBXRvdGFsCQACAQIKYmFkIGFtb3VudAQIbmV3VG90YWwJAGUCBQV0b3RhbAUGYW1vdW50BApuZXdKYWNrcG90CQBkAgUHamFja3BvdAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtzdXBwbGllZEtleQUIbmV3VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIFCmphY2twb3RLZXkFCm5ld0phY2twb3QFA25pbADwcBbT", "height": 3898613, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6avXe8eawmuA8NRLZftqY7vhafbmHkW7496W2a1wErLv Next: DSAx3Jjnq2P6T67AJdT63X1gks5mKeaT9eX3RggzVbPT Diff:
OldNewDifferences
1010 let TeamAddress = Address(base58'3PHeVKu6hS24p2LX7AdtHnZnpyuC8Q7q2MF')
1111
1212 let separator = "_"
13+
14+let ROUND_BLOCKS = 10080
1315
1416 let JACKPOT_PART = 60
1517
2729
2830 let peteInStakingKey = "pete_in_staking"
2931
30-let lidersKey = "liders"
32+let lidersTotalKey = "liders"
3133
3234 let totalSpinKey = "spin_total"
3335
36+let top3_block = "top3_block"
37+
38+let top3_round = "top3_round"
39+
40+func getCurrentRound () = getIntegerValue(this, top3_round)
41+
42+
43+func getLastTop3Block () = getIntegerValue(this, top3_block)
44+
45+
3446 func getCountKey (addressStr) = (addressStr + "_cnt")
47+
48+
49+func getRoundCountKey (addressStr) = (((addressStr + "_r_") + toString(getCurrentRound())) + "_cnt")
50+
51+
52+func getRoundLidersKey () = ((lidersTotalKey + "_r_") + toString(getCurrentRound()))
53+
54+
55+func getRoundTotalSpinKey () = ((totalSpinKey + "_r_") + toString(getCurrentRound()))
3556
3657
3758 let nTxId = 0
96117
97118
98119 func jsonTopGamers () = {
99- let liders = if (isDefined(getString(this, lidersKey)))
100- then split_51C(getStringValue(this, lidersKey), separator)
120+ let liders = if (isDefined(getString(this, lidersTotalKey)))
121+ then split_51C(getStringValue(this, lidersTotalKey), separator)
101122 else nil
102123 func foldTop (accum,address) = {
103124 let cnt = valueOrElse(getInteger(this, getCountKey(address)), 0)
125+ (accum :+ ((("\"" + address) + "\":") + toString(cnt)))
126+ }
127+
128+ let top = {
129+ let $l = liders
130+ let $s = size($l)
131+ let $acc0 = nil
132+ func $f0_1 ($a,$i) = if (($i >= $s))
133+ then $a
134+ else foldTop($a, $l[$i])
135+
136+ func $f0_2 ($a,$i) = if (($i >= $s))
137+ then $a
138+ else throw("List size exceeds 20")
139+
140+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
141+ }
142+ (("{" + makeString_2C(top, ",")) + "}")
143+ }
144+
145+
146+func jsonRoundTopGamers () = {
147+ let liders = if (isDefined(getString(this, getRoundLidersKey())))
148+ then split_51C(getStringValue(this, getRoundLidersKey()), separator)
149+ else nil
150+ func foldTop (accum,address) = {
151+ let cnt = valueOrElse(getInteger(this, getRoundCountKey(address)), 0)
104152 (accum :+ ((("\"" + address) + "\":") + toString(cnt)))
105153 }
106154
131179 }
132180
133181
134-func privateCheckLiders (addressStr,spinCount) = {
135- let lidersStr = valueOrElse(getString(this, lidersKey), "")
182+func privateCheckLiders (addressStr,spinCount,sLidersKey,sCountKey) = {
183+ let lidersStr = valueOrElse(getString(this, sLidersKey), "")
136184 let liders = if ((lidersStr != ""))
137- then split_51C(getStringValue(this, lidersKey), separator)
185+ then split_51C(getStringValue(this, sLidersKey), separator)
138186 else nil
139187 let idx = indexOf(liders, addressStr)
140188 let filteredLiders = if (isDefined(idx))
141189 then removeByIndex(liders, value(idx))
142190 else liders
143- let minCount = valueOrElse(getInteger(this, getCountKey(filteredLiders[(size(filteredLiders) - 1)])), 0)
191+ let minCount = valueOrElse(getInteger(this, (filteredLiders[(size(filteredLiders) - 1)] + sCountKey)), 0)
144192 let lidersSize = size(filteredLiders)
145193 func foldSort (accum,address) = {
146- let cnt = valueOrElse(getInteger(this, getCountKey(address)), 0)
194+ let cnt = valueOrElse(getInteger(this, (address + sCountKey)), 0)
147195 let accumSize = size(accum)
148196 if ((accumSize == 100))
149197 then accum
182230 list
183231 }
184232 let newLidersStr = makeString_11C(newLiders, separator)
185- let result = [StringEntry(lidersKey, newLidersStr)]
233+ let result = [StringEntry(sLidersKey, newLidersStr)]
186234 result
187235 }
188236
191239 let locked = valueOrElse(getInteger(this, peteInLockKey), 0)
192240 let total = valueOrElse(getInteger(this, suppliedKey), 0)
193241 let totalSpin = valueOrElse(getInteger(this, totalSpinKey), 0)
242+ let totalRoundSpin = valueOrElse(getInteger(this, getRoundTotalSpinKey()), 0)
194243 let newSpinCount = (valueOrElse(getInteger(this, getCountKey(addressStr)), 0) + 1)
244+ let newSpinRoundCount = (valueOrElse(getInteger(this, getRoundCountKey(addressStr)), 0) + 1)
195245 if ((W420 > total))
196246 then throw("no pete in sc")
197247 else {
198248 let str = makeString([txid, "xxx", toString(height), addressStr], separator)
199- let liders = privateCheckLiders(addressStr, newSpinCount)
200- let res = [StringEntry(addressStr, str), IntegerEntry(peteInLockKey, (locked + W420)), IntegerEntry(getCountKey(addressStr), newSpinCount), IntegerEntry(totalSpinKey, (totalSpin + 1))]
201- (liders ++ res)
249+ let liders = privateCheckLiders(addressStr, newSpinCount, lidersTotalKey, getCountKey(""))
250+ let roundLiders = privateCheckLiders(addressStr, newSpinRoundCount, getRoundLidersKey(), getRoundCountKey(""))
251+ let res = [StringEntry(addressStr, str), IntegerEntry(peteInLockKey, (locked + W420)), IntegerEntry(getCountKey(addressStr), newSpinCount), IntegerEntry(getRoundCountKey(addressStr), newSpinRoundCount), IntegerEntry(totalSpinKey, (totalSpin + 1)), IntegerEntry(getRoundTotalSpinKey(), (totalRoundSpin + 1))]
252+ ((liders ++ roundLiders) ++ res)
202253 }
203254 }
204255
246297
247298
248299 @Callable(i)
249-func claimPeteFromStaking () = {
250- let peteAmountBefore = assetBalance(this, PETE)
251- if ((peteAmountBefore == peteAmountBefore))
252- then {
253- let inv = invoke(PeteStakingAddress, "claim", nil, nil)
254- if ((inv == inv))
255- then {
256- let peteAmountNew = (assetBalance(this, PETE) - peteAmountBefore)
257- if ((peteAmountNew == peteAmountNew))
258- then if ((peteAmountNew > 0))
259- then {
260- let liders = if (isDefined(getString(this, lidersKey)))
261- then split_51C(getStringValue(this, lidersKey), separator)
262- else nil
263- let lidersSize = size(liders)
264- let p1 = if ((lidersSize >= 1))
265- then valueOrElse(getInteger(this, getCountKey(liders[0])), 0)
266- else 0
267- let p2 = if ((lidersSize >= 2))
268- then valueOrElse(getInteger(this, getCountKey(liders[1])), 0)
269- else 0
270- let p3 = if ((lidersSize >= 3))
271- then valueOrElse(getInteger(this, getCountKey(liders[2])), 0)
272- else 0
273- let p1w = if ((lidersSize >= 1))
274- then liders[0]
275- else "no address"
276- let p2w = if ((lidersSize >= 2))
277- then liders[1]
278- else "no address"
279- let p3w = if ((lidersSize >= 3))
280- then liders[2]
281- else "no address"
282- let totalCount = ((p1 + p2) + p3)
283- let r3 = if ((p3 > 0))
284- then [ScriptTransfer(addressFromStringValue(p3w), fraction(peteAmountNew, p3, totalCount), PETE)]
285- else nil
286- let r2 = if ((p2 > 0))
287- then [ScriptTransfer(addressFromStringValue(p2w), fraction(peteAmountNew, p2, totalCount), PETE)]
288- else nil
289- let r1 = if ((p1 > 0))
290- then [ScriptTransfer(addressFromStringValue(p1w), fraction(peteAmountNew, p1, totalCount), PETE)]
291- else nil
292- ((r1 ++ r2) ++ r3)
293- }
294- else throw("nothing available")
295- else throw("Strict value is not equal to itself.")
296- }
297- else throw("Strict value is not equal to itself.")
298- }
299- else throw("Strict value is not equal to itself.")
300- }
300+func claimPeteFromStaking () = if (((getLastTop3Block() + ROUND_BLOCKS) > height))
301+ then throw("too early")
302+ else {
303+ let peteAmountBefore = assetBalance(this, PETE)
304+ if ((peteAmountBefore == peteAmountBefore))
305+ then {
306+ let inv = invoke(PeteStakingAddress, "claim", nil, nil)
307+ if ((inv == inv))
308+ then {
309+ let peteAmountNew = (assetBalance(this, PETE) - peteAmountBefore)
310+ if ((peteAmountNew == peteAmountNew))
311+ then if ((peteAmountNew > 0))
312+ then {
313+ let liders = if (isDefined(getString(this, getRoundLidersKey())))
314+ then split_51C(getStringValue(this, getRoundLidersKey()), separator)
315+ else nil
316+ let lidersSize = size(liders)
317+ let p1 = if ((lidersSize >= 1))
318+ then valueOrElse(getInteger(this, getCountKey(liders[0])), 0)
319+ else 0
320+ let p2 = if ((lidersSize >= 2))
321+ then valueOrElse(getInteger(this, getCountKey(liders[1])), 0)
322+ else 0
323+ let p3 = if ((lidersSize >= 3))
324+ then valueOrElse(getInteger(this, getCountKey(liders[2])), 0)
325+ else 0
326+ let p1w = if ((lidersSize >= 1))
327+ then liders[0]
328+ else "no address"
329+ let p2w = if ((lidersSize >= 2))
330+ then liders[1]
331+ else "no address"
332+ let p3w = if ((lidersSize >= 3))
333+ then liders[2]
334+ else "no address"
335+ let totalCount = ((p1 + p2) + p3)
336+ let r3 = if ((p3 > 0))
337+ then [ScriptTransfer(addressFromStringValue(p3w), fraction(peteAmountNew, p3, totalCount), PETE)]
338+ else nil
339+ let r2 = if ((p2 > 0))
340+ then [ScriptTransfer(addressFromStringValue(p2w), fraction(peteAmountNew, p2, totalCount), PETE)]
341+ else nil
342+ let r1 = if ((p1 > 0))
343+ then [ScriptTransfer(addressFromStringValue(p1w), fraction(peteAmountNew, p1, totalCount), PETE)]
344+ else nil
345+ (((r1 ++ r2) ++ r3) ++ [IntegerEntry(top3_block, height), IntegerEntry(top3_round, (getCurrentRound() + 1))])
346+ }
347+ else throw("nothing available")
348+ else throw("Strict value is not equal to itself.")
349+ }
350+ else throw("Strict value is not equal to itself.")
351+ }
352+ else throw("Strict value is not equal to itself.")
353+ }
301354
302355
303356
402455
403456
404457 @Callable(i)
405-func removeLiders () = if ((i.caller != this))
406- then throw("you can't")
407- else [DeleteEntry(lidersKey)]
408-
409-
410-
411-@Callable(i)
412458 func rebalance (amount) = if ((i.caller != this))
413459 then throw("you can't")
414460 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let PETE = base58'GAzAEjApmjMYZKPzri2g2VUXNvTiQGF7KDYZFFsP3AEq'
55
66 let PeteStakingAddress = Address(base58'3PBf2jd3ZEPX7NHQvVarscTjLQ8bk43uAfn')
77
88 let SwapAddress = Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93')
99
1010 let TeamAddress = Address(base58'3PHeVKu6hS24p2LX7AdtHnZnpyuC8Q7q2MF')
1111
1212 let separator = "_"
13+
14+let ROUND_BLOCKS = 10080
1315
1416 let JACKPOT_PART = 60
1517
1618 let TEAM_PART = 30
1719
1820 let BET_AMOUNT = 7770000
1921
2022 let W420 = 2000000000
2123
2224 let suppliedKey = "pete_total"
2325
2426 let jackpotKey = "pete_jackpot"
2527
2628 let peteInLockKey = "pete_in_lock"
2729
2830 let peteInStakingKey = "pete_in_staking"
2931
30-let lidersKey = "liders"
32+let lidersTotalKey = "liders"
3133
3234 let totalSpinKey = "spin_total"
3335
36+let top3_block = "top3_block"
37+
38+let top3_round = "top3_round"
39+
40+func getCurrentRound () = getIntegerValue(this, top3_round)
41+
42+
43+func getLastTop3Block () = getIntegerValue(this, top3_block)
44+
45+
3446 func getCountKey (addressStr) = (addressStr + "_cnt")
47+
48+
49+func getRoundCountKey (addressStr) = (((addressStr + "_r_") + toString(getCurrentRound())) + "_cnt")
50+
51+
52+func getRoundLidersKey () = ((lidersTotalKey + "_r_") + toString(getCurrentRound()))
53+
54+
55+func getRoundTotalSpinKey () = ((totalSpinKey + "_r_") + toString(getCurrentRound()))
3556
3657
3758 let nTxId = 0
3859
3960 let nResult = 1
4061
4162 let nHeight = 2
4263
4364 let nAddress = 3
4465
4566 func reveal (txid,targetBlock) = if ((height >= targetBlock))
4667 then {
4768 let revealBlock = value(blockInfoByHeight(targetBlock))
4869 let vrf = value(revealBlock.vrf)
4970 let reveal = sha256((vrf + toBytes(txid)))
5071 (toInt(reveal) % 10)
5172 }
5273 else -1
5374
5475
5576 func checkWinnerAmount (result) = if ((result == "777"))
5677 then valueOrElse(getInteger(this, jackpotKey), 0)
5778 else if ((result == "420"))
5879 then W420
5980 else if ((result == "100"))
6081 then 500000000
6182 else if ((result == "111"))
6283 then 600000000
6384 else if ((result == "222"))
6485 then 700000000
6586 else if ((result == "333"))
6687 then 800000000
6788 else if ((result == "444"))
6889 then 900000000
6990 else if ((result == "555"))
7091 then 800000000
7192 else if ((result == "888"))
7293 then 700000000
7394 else if ((result == "999"))
7495 then 600000000
7596 else if ((result == "666"))
7697 then 666000000
7798 else if ((result == "137"))
7899 then 731000000
79100 else 0
80101
81102
82103 func jsonResult (addressStr) = if (!(isDefined(getString(this, addressStr))))
83104 then "{\"status\":\"no game\"}"
84105 else {
85106 let data = split(valueOrErrorMessage(getString(this, addressStr), ("unable to read data for " + addressStr)), separator)
86107 let txid = data[nTxId]
87108 let commitHeight = valueOrErrorMessage(transactionHeightById(fromBase58String(txid)), (txid + " not found"))
88109 let r1 = reveal(txid, (commitHeight + 1))
89110 let r2 = reveal(txid, (commitHeight + 2))
90111 let r3 = reveal(txid, (commitHeight + 3))
91112 let result = ((toString(r1) + toString(r2)) + toString(r3))
92113 let winnerAmount = checkWinnerAmount(result)
93114 let json = (((((((((((((((((((((((((("{" + "\"status\":\"in game\",") + "\"") + "prize") + "\"") + ":") + toString(winnerAmount)) + ",") + "\"") + "r1") + "\"") + ":") + toString(r1)) + ",") + "\"") + "r2") + "\"") + ":") + toString(r2)) + ",") + "\"") + "r3") + "\"") + ":") + toString(r3)) + "") + "}")
94115 json
95116 }
96117
97118
98119 func jsonTopGamers () = {
99- let liders = if (isDefined(getString(this, lidersKey)))
100- then split_51C(getStringValue(this, lidersKey), separator)
120+ let liders = if (isDefined(getString(this, lidersTotalKey)))
121+ then split_51C(getStringValue(this, lidersTotalKey), separator)
101122 else nil
102123 func foldTop (accum,address) = {
103124 let cnt = valueOrElse(getInteger(this, getCountKey(address)), 0)
125+ (accum :+ ((("\"" + address) + "\":") + toString(cnt)))
126+ }
127+
128+ let top = {
129+ let $l = liders
130+ let $s = size($l)
131+ let $acc0 = nil
132+ func $f0_1 ($a,$i) = if (($i >= $s))
133+ then $a
134+ else foldTop($a, $l[$i])
135+
136+ func $f0_2 ($a,$i) = if (($i >= $s))
137+ then $a
138+ else throw("List size exceeds 20")
139+
140+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
141+ }
142+ (("{" + makeString_2C(top, ",")) + "}")
143+ }
144+
145+
146+func jsonRoundTopGamers () = {
147+ let liders = if (isDefined(getString(this, getRoundLidersKey())))
148+ then split_51C(getStringValue(this, getRoundLidersKey()), separator)
149+ else nil
150+ func foldTop (accum,address) = {
151+ let cnt = valueOrElse(getInteger(this, getRoundCountKey(address)), 0)
104152 (accum :+ ((("\"" + address) + "\":") + toString(cnt)))
105153 }
106154
107155 let top = {
108156 let $l = liders
109157 let $s = size($l)
110158 let $acc0 = nil
111159 func $f0_1 ($a,$i) = if (($i >= $s))
112160 then $a
113161 else foldTop($a, $l[$i])
114162
115163 func $f0_2 ($a,$i) = if (($i >= $s))
116164 then $a
117165 else throw("List size exceeds 20")
118166
119167 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
120168 }
121169 (("{" + makeString_2C(top, ",")) + "}")
122170 }
123171
124172
125173 func privateSupply (amount) = {
126174 let total = valueOrElse(getInteger(this, suppliedKey), 0)
127175 let jackpot = valueOrElse(getInteger(this, jackpotKey), 0)
128176 let newTotal = (total + fraction(amount, (100 - JACKPOT_PART), 100))
129177 let newJackpot = (jackpot + fraction(amount, JACKPOT_PART, 100))
130178 [IntegerEntry(suppliedKey, newTotal), IntegerEntry(jackpotKey, newJackpot)]
131179 }
132180
133181
134-func privateCheckLiders (addressStr,spinCount) = {
135- let lidersStr = valueOrElse(getString(this, lidersKey), "")
182+func privateCheckLiders (addressStr,spinCount,sLidersKey,sCountKey) = {
183+ let lidersStr = valueOrElse(getString(this, sLidersKey), "")
136184 let liders = if ((lidersStr != ""))
137- then split_51C(getStringValue(this, lidersKey), separator)
185+ then split_51C(getStringValue(this, sLidersKey), separator)
138186 else nil
139187 let idx = indexOf(liders, addressStr)
140188 let filteredLiders = if (isDefined(idx))
141189 then removeByIndex(liders, value(idx))
142190 else liders
143- let minCount = valueOrElse(getInteger(this, getCountKey(filteredLiders[(size(filteredLiders) - 1)])), 0)
191+ let minCount = valueOrElse(getInteger(this, (filteredLiders[(size(filteredLiders) - 1)] + sCountKey)), 0)
144192 let lidersSize = size(filteredLiders)
145193 func foldSort (accum,address) = {
146- let cnt = valueOrElse(getInteger(this, getCountKey(address)), 0)
194+ let cnt = valueOrElse(getInteger(this, (address + sCountKey)), 0)
147195 let accumSize = size(accum)
148196 if ((accumSize == 100))
149197 then accum
150198 else if (isDefined(indexOf(accum, addressStr)))
151199 then (accum :+ address)
152200 else if ((spinCount > cnt))
153201 then if ((accumSize == 99))
154202 then (accum :+ addressStr)
155203 else ((accum :+ addressStr) :+ address)
156204 else (accum :+ address)
157205 }
158206
159207 let newLiders = if ((lidersSize == 0))
160208 then [addressStr]
161209 else if (if ((100 > lidersSize))
162210 then (minCount >= spinCount)
163211 else false)
164212 then (filteredLiders :+ addressStr)
165213 else if ((minCount >= spinCount))
166214 then filteredLiders
167215 else {
168216 let list = {
169217 let $l = filteredLiders
170218 let $s = size($l)
171219 let $acc0 = nil
172220 func $f0_1 ($a,$i) = if (($i >= $s))
173221 then $a
174222 else foldSort($a, $l[$i])
175223
176224 func $f0_2 ($a,$i) = if (($i >= $s))
177225 then $a
178226 else throw("List size exceeds 100")
179227
180228 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
181229 }
182230 list
183231 }
184232 let newLidersStr = makeString_11C(newLiders, separator)
185- let result = [StringEntry(lidersKey, newLidersStr)]
233+ let result = [StringEntry(sLidersKey, newLidersStr)]
186234 result
187235 }
188236
189237
190238 func privateSpin (addressStr,txid) = {
191239 let locked = valueOrElse(getInteger(this, peteInLockKey), 0)
192240 let total = valueOrElse(getInteger(this, suppliedKey), 0)
193241 let totalSpin = valueOrElse(getInteger(this, totalSpinKey), 0)
242+ let totalRoundSpin = valueOrElse(getInteger(this, getRoundTotalSpinKey()), 0)
194243 let newSpinCount = (valueOrElse(getInteger(this, getCountKey(addressStr)), 0) + 1)
244+ let newSpinRoundCount = (valueOrElse(getInteger(this, getRoundCountKey(addressStr)), 0) + 1)
195245 if ((W420 > total))
196246 then throw("no pete in sc")
197247 else {
198248 let str = makeString([txid, "xxx", toString(height), addressStr], separator)
199- let liders = privateCheckLiders(addressStr, newSpinCount)
200- let res = [StringEntry(addressStr, str), IntegerEntry(peteInLockKey, (locked + W420)), IntegerEntry(getCountKey(addressStr), newSpinCount), IntegerEntry(totalSpinKey, (totalSpin + 1))]
201- (liders ++ res)
249+ let liders = privateCheckLiders(addressStr, newSpinCount, lidersTotalKey, getCountKey(""))
250+ let roundLiders = privateCheckLiders(addressStr, newSpinRoundCount, getRoundLidersKey(), getRoundCountKey(""))
251+ let res = [StringEntry(addressStr, str), IntegerEntry(peteInLockKey, (locked + W420)), IntegerEntry(getCountKey(addressStr), newSpinCount), IntegerEntry(getRoundCountKey(addressStr), newSpinRoundCount), IntegerEntry(totalSpinKey, (totalSpin + 1)), IntegerEntry(getRoundTotalSpinKey(), (totalRoundSpin + 1))]
252+ ((liders ++ roundLiders) ++ res)
202253 }
203254 }
204255
205256
206257 @Callable(i)
207258 func supply () = if ((i.caller == this))
208259 then throw("you can't")
209260 else if (if ((size(i.payments) == 1))
210261 then (i.payments[0].assetId == PETE)
211262 else false)
212263 then {
213264 let inv = invoke(this, "stakePete", [i.payments[0].amount], nil)
214265 if ((inv == inv))
215266 then privateSupply(i.payments[0].amount)
216267 else throw("Strict value is not equal to itself.")
217268 }
218269 else throw("bad payment")
219270
220271
221272
222273 @Callable(i)
223274 func stakePete (peteAmount) = if ((i.caller != this))
224275 then throw("you can't")
225276 else {
226277 let peteInStake = valueOrElse(getInteger(this, peteInStakingKey), 0)
227278 let inv = invoke(PeteStakingAddress, "stake", nil, [AttachedPayment(PETE, peteAmount)])
228279 if ((inv == inv))
229280 then [IntegerEntry(peteInStakingKey, (peteInStake + peteAmount))]
230281 else throw("Strict value is not equal to itself.")
231282 }
232283
233284
234285
235286 @Callable(i)
236287 func unstakePete (amount) = if ((i.caller != this))
237288 then throw("you can't")
238289 else {
239290 let peteInStake = valueOrErrorMessage(getInteger(this, peteInStakingKey), (peteInStakingKey + " not found"))
240291 let inv = invoke(PeteStakingAddress, "unstake", [amount], nil)
241292 if ((inv == inv))
242293 then [IntegerEntry(peteInStakingKey, (peteInStake - amount))]
243294 else throw("Strict value is not equal to itself.")
244295 }
245296
246297
247298
248299 @Callable(i)
249-func claimPeteFromStaking () = {
250- let peteAmountBefore = assetBalance(this, PETE)
251- if ((peteAmountBefore == peteAmountBefore))
252- then {
253- let inv = invoke(PeteStakingAddress, "claim", nil, nil)
254- if ((inv == inv))
255- then {
256- let peteAmountNew = (assetBalance(this, PETE) - peteAmountBefore)
257- if ((peteAmountNew == peteAmountNew))
258- then if ((peteAmountNew > 0))
259- then {
260- let liders = if (isDefined(getString(this, lidersKey)))
261- then split_51C(getStringValue(this, lidersKey), separator)
262- else nil
263- let lidersSize = size(liders)
264- let p1 = if ((lidersSize >= 1))
265- then valueOrElse(getInteger(this, getCountKey(liders[0])), 0)
266- else 0
267- let p2 = if ((lidersSize >= 2))
268- then valueOrElse(getInteger(this, getCountKey(liders[1])), 0)
269- else 0
270- let p3 = if ((lidersSize >= 3))
271- then valueOrElse(getInteger(this, getCountKey(liders[2])), 0)
272- else 0
273- let p1w = if ((lidersSize >= 1))
274- then liders[0]
275- else "no address"
276- let p2w = if ((lidersSize >= 2))
277- then liders[1]
278- else "no address"
279- let p3w = if ((lidersSize >= 3))
280- then liders[2]
281- else "no address"
282- let totalCount = ((p1 + p2) + p3)
283- let r3 = if ((p3 > 0))
284- then [ScriptTransfer(addressFromStringValue(p3w), fraction(peteAmountNew, p3, totalCount), PETE)]
285- else nil
286- let r2 = if ((p2 > 0))
287- then [ScriptTransfer(addressFromStringValue(p2w), fraction(peteAmountNew, p2, totalCount), PETE)]
288- else nil
289- let r1 = if ((p1 > 0))
290- then [ScriptTransfer(addressFromStringValue(p1w), fraction(peteAmountNew, p1, totalCount), PETE)]
291- else nil
292- ((r1 ++ r2) ++ r3)
293- }
294- else throw("nothing available")
295- else throw("Strict value is not equal to itself.")
296- }
297- else throw("Strict value is not equal to itself.")
298- }
299- else throw("Strict value is not equal to itself.")
300- }
300+func claimPeteFromStaking () = if (((getLastTop3Block() + ROUND_BLOCKS) > height))
301+ then throw("too early")
302+ else {
303+ let peteAmountBefore = assetBalance(this, PETE)
304+ if ((peteAmountBefore == peteAmountBefore))
305+ then {
306+ let inv = invoke(PeteStakingAddress, "claim", nil, nil)
307+ if ((inv == inv))
308+ then {
309+ let peteAmountNew = (assetBalance(this, PETE) - peteAmountBefore)
310+ if ((peteAmountNew == peteAmountNew))
311+ then if ((peteAmountNew > 0))
312+ then {
313+ let liders = if (isDefined(getString(this, getRoundLidersKey())))
314+ then split_51C(getStringValue(this, getRoundLidersKey()), separator)
315+ else nil
316+ let lidersSize = size(liders)
317+ let p1 = if ((lidersSize >= 1))
318+ then valueOrElse(getInteger(this, getCountKey(liders[0])), 0)
319+ else 0
320+ let p2 = if ((lidersSize >= 2))
321+ then valueOrElse(getInteger(this, getCountKey(liders[1])), 0)
322+ else 0
323+ let p3 = if ((lidersSize >= 3))
324+ then valueOrElse(getInteger(this, getCountKey(liders[2])), 0)
325+ else 0
326+ let p1w = if ((lidersSize >= 1))
327+ then liders[0]
328+ else "no address"
329+ let p2w = if ((lidersSize >= 2))
330+ then liders[1]
331+ else "no address"
332+ let p3w = if ((lidersSize >= 3))
333+ then liders[2]
334+ else "no address"
335+ let totalCount = ((p1 + p2) + p3)
336+ let r3 = if ((p3 > 0))
337+ then [ScriptTransfer(addressFromStringValue(p3w), fraction(peteAmountNew, p3, totalCount), PETE)]
338+ else nil
339+ let r2 = if ((p2 > 0))
340+ then [ScriptTransfer(addressFromStringValue(p2w), fraction(peteAmountNew, p2, totalCount), PETE)]
341+ else nil
342+ let r1 = if ((p1 > 0))
343+ then [ScriptTransfer(addressFromStringValue(p1w), fraction(peteAmountNew, p1, totalCount), PETE)]
344+ else nil
345+ (((r1 ++ r2) ++ r3) ++ [IntegerEntry(top3_block, height), IntegerEntry(top3_round, (getCurrentRound() + 1))])
346+ }
347+ else throw("nothing available")
348+ else throw("Strict value is not equal to itself.")
349+ }
350+ else throw("Strict value is not equal to itself.")
351+ }
352+ else throw("Strict value is not equal to itself.")
353+ }
301354
302355
303356
304357 @Callable(i)
305358 func spin () = if (if (if ((size(i.payments) == 1))
306359 then (i.payments[0].assetId == unit)
307360 else false)
308361 then (i.payments[0].amount == BET_AMOUNT)
309362 else false)
310363 then {
311364 let address = toString(i.caller)
312365 let txid = toBase58String(i.transactionId)
313366 if (isDefined(getString(this, address)))
314367 then {
315368 let inv = invoke(this, "result", [address], nil)
316369 if ((inv == inv))
317370 then privateSpin(address, txid)
318371 else throw("Strict value is not equal to itself.")
319372 }
320373 else privateSpin(address, txid)
321374 }
322375 else throw("bad payment")
323376
324377
325378
326379 @Callable(i)
327380 func result (addressStr) = {
328381 let data = split(valueOrErrorMessage(getString(this, addressStr), ("unable to read data for " + addressStr)), separator)
329382 let txid = data[nTxId]
330383 let startHeight = data[nHeight]
331384 let commitHeight = valueOrErrorMessage(transactionHeightById(fromBase58String(txid)), (txid + " not found"))
332385 if (((commitHeight + 3) > height))
333386 then throw((("wait " + toString(((commitHeight + 3) - height))) + " blocks to reveal this txid"))
334387 else {
335388 let r1 = reveal(txid, (commitHeight + 1))
336389 let r2 = reveal(txid, (commitHeight + 2))
337390 let r3 = reveal(txid, (commitHeight + 3))
338391 let result = ((toString(r1) + toString(r2)) + toString(r3))
339392 let winnerAmount = checkWinnerAmount(result)
340393 let str = makeString([txid, result, startHeight, addressStr], separator)
341394 let locked = valueOrErrorMessage(getInteger(this, peteInLockKey), "unable to read locked")
342395 if ((winnerAmount > 0))
343396 then {
344397 let k = ("r_" + result)
345398 let resultCount = valueOrElse(getInteger(this, k), 0)
346399 let inv = invoke(this, "unstakePete", [winnerAmount], nil)
347400 if ((inv == inv))
348401 then {
349402 let total = valueOrElse(getInteger(this, suppliedKey), 0)
350403 let key = if ((result == "777"))
351404 then jackpotKey
352405 else suppliedKey
353406 let val = if ((result == "777"))
354407 then 0
355408 else (total - winnerAmount)
356409 [IntegerEntry(peteInLockKey, (locked - W420)), IntegerEntry(key, val), IntegerEntry(k, (resultCount + 1)), StringEntry(txid, str), DeleteEntry(addressStr), ScriptTransfer(addressFromStringValue(addressStr), winnerAmount, PETE)]
357410 }
358411 else throw("Strict value is not equal to itself.")
359412 }
360413 else if (if (if ((r1 == r3))
361414 then true
362415 else (r1 == r2))
363416 then true
364417 else (r2 == r3))
365418 then {
366419 let k = "r_refund"
367420 let resultCount = valueOrElse(getInteger(this, k), 0)
368421 [IntegerEntry(peteInLockKey, (locked - W420)), IntegerEntry(k, (resultCount + 1)), StringEntry(txid, str), DeleteEntry(addressStr), ScriptTransfer(addressFromStringValue(addressStr), BET_AMOUNT, unit)]
369422 }
370423 else [IntegerEntry(peteInLockKey, (locked - W420)), StringEntry(txid, str), DeleteEntry(addressStr)]
371424 }
372425 }
373426
374427
375428
376429 @Callable(i)
377430 func toPete () = {
378431 let wavesAmount = (wavesBalance(this).regular - 10000000)
379432 if ((100000000 > wavesAmount))
380433 then throw("balance is too low")
381434 else {
382435 let teamWavesAmount = fraction(wavesAmount, TEAM_PART, 100)
383436 let swapWavesAmount = ((wavesAmount - teamWavesAmount) - 20000000)
384437 let swap = invoke(SwapAddress, "swap", [1, toBase58String(PETE), toString(this)], [AttachedPayment(unit, swapWavesAmount)])
385438 if ((swap == swap))
386439 then {
387440 let peteAmountNew = assetBalance(this, PETE)
388441 if ((peteAmountNew == peteAmountNew))
389442 then {
390443 let supply = privateSupply(peteAmountNew)
391444 let inv = invoke(this, "stakePete", [peteAmountNew], nil)
392445 if ((inv == inv))
393446 then ([ScriptTransfer(TeamAddress, teamWavesAmount, unit)] ++ supply)
394447 else throw("Strict value is not equal to itself.")
395448 }
396449 else throw("Strict value is not equal to itself.")
397450 }
398451 else throw("Strict value is not equal to itself.")
399452 }
400453 }
401454
402455
403456
404457 @Callable(i)
405-func removeLiders () = if ((i.caller != this))
406- then throw("you can't")
407- else [DeleteEntry(lidersKey)]
408-
409-
410-
411-@Callable(i)
412458 func rebalance (amount) = if ((i.caller != this))
413459 then throw("you can't")
414460 else {
415461 let total = valueOrElse(getInteger(this, suppliedKey), 0)
416462 let jackpot = valueOrElse(getInteger(this, jackpotKey), 0)
417463 if ((amount >= total))
418464 then throw("bad amount")
419465 else {
420466 let newTotal = (total - amount)
421467 let newJackpot = (jackpot + amount)
422468 [IntegerEntry(suppliedKey, newTotal), IntegerEntry(jackpotKey, newJackpot)]
423469 }
424470 }
425471
426472

github/deemru/w8io/0e76f2f 
65.58 ms