tx · 6avXe8eawmuA8NRLZftqY7vhafbmHkW7496W2a1wErLv

3PEnTKKhcVFnPprwLeTf5kSTYFExCbkWftb:  -0.01200000 Waves

2023.11.06 20:58 [3897646] smart account 3PEnTKKhcVFnPprwLeTf5kSTYFExCbkWftb > SELF 0.00000000 Waves

{ "type": 13, "id": "6avXe8eawmuA8NRLZftqY7vhafbmHkW7496W2a1wErLv", "fee": 1200000, "feeAssetId": null, "timestamp": 1699293586843, "version": 2, "chainId": 87, "sender": "3PEnTKKhcVFnPprwLeTf5kSTYFExCbkWftb", "senderPublicKey": "CPjPY4XdDADzcBh7JnN2qKGnJMUNksoSNtZKUetJg4nP", "proofs": [ "2Ns2Khoa73c9wKc8K1LHxwEiAh37e8fnmnSxQCgyGZzRcPHAJN8GdzW2krJysezKxPrPFpTHHAcjARbWZisSJXRf" ], "script": "base64:BgIgCAISABIDCgEBEgMKAQESABIAEgMKAQgSABIAEgMKAQEbAARQRVRFASDhbilOQdwche5iKQgBMXFW6i/w4hPIfcGu2EoTC4321gASUGV0ZVN0YWtpbmdBZGRyZXNzCQEHQWRkcmVzcwEBGgFXarFJMk3dATxaVOzod65/gcTToDIwSPTtAAtTd2FwQWRkcmVzcwkBB0FkZHJlc3MBARoBVy4qNTWxDbfxeT7ht0bQnnRSTXsx0IOuBgALVGVhbUFkZHJlc3MJAQdBZGRyZXNzAQEaAVesZ9JasQGmo0/p7vF1EjwaTIJ7exFMYDoACXNlcGFyYXRvcgIBXwAMSkFDS1BPVF9QQVJUADwACVRFQU1fUEFSVAAeAApCRVRfQU1PVU5UAJCf2gMABFc0MjAAgKjWuQcAC3N1cHBsaWVkS2V5AgpwZXRlX3RvdGFsAApqYWNrcG90S2V5AgxwZXRlX2phY2twb3QADXBldGVJbkxvY2tLZXkCDHBldGVfaW5fbG9jawAQcGV0ZUluU3Rha2luZ0tleQIPcGV0ZV9pbl9zdGFraW5nAAlsaWRlcnNLZXkCBmxpZGVycwAMdG90YWxTcGluS2V5AgpzcGluX3RvdGFsAQtnZXRDb3VudEtleQEKYWRkcmVzc1N0cgkArAICBQphZGRyZXNzU3RyAgRfY250AAVuVHhJZAAAAAduUmVzdWx0AAEAB25IZWlnaHQAAgAIbkFkZHJlc3MAAwEGcmV2ZWFsAgR0eGlkC3RhcmdldEJsb2NrAwkAZwIFBmhlaWdodAULdGFyZ2V0QmxvY2sEC3JldmVhbEJsb2NrCQEFdmFsdWUBCQDtBwEFC3RhcmdldEJsb2NrBAN2cmYJAQV2YWx1ZQEIBQtyZXZlYWxCbG9jawN2cmYEBnJldmVhbAkA9wMBCQDLAQIFA3ZyZgkAmwMBBQR0eGlkCQBqAgkAsQkBBQZyZXZlYWwACgD///////////8BARFjaGVja1dpbm5lckFtb3VudAEGcmVzdWx0AwkAAAIFBnJlc3VsdAIDNzc3CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmphY2twb3RLZXkAAAMJAAACBQZyZXN1bHQCAzQyMAUEVzQyMAMJAAACBQZyZXN1bHQCAzEwMACAyrXuAQMJAAACBQZyZXN1bHQCAzExMQCAjI2eAgMJAAACBQZyZXN1bHQCAzIyMgCAzuTNAgMJAAACBQZyZXN1bHQCAzMzMwCAkLz9AgMJAAACBQZyZXN1bHQCAzQ0NACA0pOtAwMJAAACBQZyZXN1bHQCAzU1NQCAkLz9AgMJAAACBQZyZXN1bHQCAzg4OACAzuTNAgMJAAACBQZyZXN1bHQCAzk5OQCAjI2eAgMJAAACBQZyZXN1bHQCAzY2NgCAtcm9AgMJAAACBQZyZXN1bHQCAzEzNwDA2cjcAgAAAQpqc29uUmVzdWx0AQphZGRyZXNzU3RyAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQphZGRyZXNzU3RyAhR7InN0YXR1cyI6Im5vIGdhbWUifQQEZGF0YQkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUKYWRkcmVzc1N0cgkArAICAhh1bmFibGUgdG8gcmVhZCBkYXRhIGZvciAFCmFkZHJlc3NTdHIFCXNlcGFyYXRvcgQEdHhpZAkAkQMCBQRkYXRhBQVuVHhJZAQMY29tbWl0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOkHAQkA2QQBBQR0eGlkCQCsAgIFBHR4aWQCCiBub3QgZm91bmQEAnIxCQEGcmV2ZWFsAgUEdHhpZAkAZAIFDGNvbW1pdEhlaWdodAABBAJyMgkBBnJldmVhbAIFBHR4aWQJAGQCBQxjb21taXRIZWlnaHQAAgQCcjMJAQZyZXZlYWwCBQR0eGlkCQBkAgUMY29tbWl0SGVpZ2h0AAMEBnJlc3VsdAkArAICCQCsAgIJAKQDAQUCcjEJAKQDAQUCcjIJAKQDAQUCcjMEDHdpbm5lckFtb3VudAkBEWNoZWNrV2lubmVyQW1vdW50AQUGcmVzdWx0BARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewITInN0YXR1cyI6ImluIGdhbWUiLAIBIgIFcHJpemUCASICAToJAKQDAQUMd2lubmVyQW1vdW50AgEsAgEiAgJyMQIBIgIBOgkApAMBBQJyMQIBLAIBIgICcjICASICAToJAKQDAQUCcjICASwCASICAnIzAgEiAgE6CQCkAwEFAnIzAgACAX0FBGpzb24BDWpzb25Ub3BHYW1lcnMABAZsaWRlcnMDCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQlsaWRlcnNLZXkJAL0JAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJbGlkZXJzS2V5BQlzZXBhcmF0b3IFA25pbAoBB2ZvbGRUb3ACBWFjY3VtB2FkZHJlc3MEA2NudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELZ2V0Q291bnRLZXkBBQdhZGRyZXNzAAAJAM0IAgUFYWNjdW0JAKwCAgkArAICCQCsAgICASIFB2FkZHJlc3MCAiI6CQCkAwEFA2NudAQDdG9wCgACJGwFBmxpZGVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHZm9sZFRvcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUCQCsAgIJAKwCAgIBewkAugkCBQN0b3ACASwCAX0BDXByaXZhdGVTdXBwbHkBBmFtb3VudAQFdG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULc3VwcGxpZWRLZXkAAAQHamFja3BvdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQpqYWNrcG90S2V5AAAECG5ld1RvdGFsCQBkAgUFdG90YWwJAGsDBQZhbW91bnQJAGUCAGQFDEpBQ0tQT1RfUEFSVABkBApuZXdKYWNrcG90CQBkAgUHamFja3BvdAkAawMFBmFtb3VudAUMSkFDS1BPVF9QQVJUAGQJAMwIAgkBDEludGVnZXJFbnRyeQIFC3N1cHBsaWVkS2V5BQhuZXdUb3RhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKamFja3BvdEtleQUKbmV3SmFja3BvdAUDbmlsARJwcml2YXRlQ2hlY2tMaWRlcnMCCmFkZHJlc3NTdHIJc3BpbkNvdW50BAlsaWRlcnNTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUJbGlkZXJzS2V5AgAEBmxpZGVycwMJAQIhPQIFCWxpZGVyc1N0cgIACQC9CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFCWxpZGVyc0tleQUJc2VwYXJhdG9yBQNuaWwEA2lkeAkAzwgCBQZsaWRlcnMFCmFkZHJlc3NTdHIEDmZpbHRlcmVkTGlkZXJzAwkBCWlzRGVmaW5lZAEFA2lkeAkA0QgCBQZsaWRlcnMJAQV2YWx1ZQEFA2lkeAUGbGlkZXJzBAhtaW5Db3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELZ2V0Q291bnRLZXkBCQCRAwIFDmZpbHRlcmVkTGlkZXJzCQBlAgkAkAMBBQ5maWx0ZXJlZExpZGVycwABAAAECmxpZGVyc1NpemUJAJADAQUOZmlsdGVyZWRMaWRlcnMKAQhmb2xkU29ydAIFYWNjdW0HYWRkcmVzcwQDY250CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtnZXRDb3VudEtleQEFB2FkZHJlc3MAAAQJYWNjdW1TaXplCQCQAwEFBWFjY3VtAwkAAAIFCWFjY3VtU2l6ZQBkBQVhY2N1bQMJAQlpc0RlZmluZWQBCQDPCAIFBWFjY3VtBQphZGRyZXNzU3RyCQDNCAIFBWFjY3VtBQdhZGRyZXNzAwkAZgIFCXNwaW5Db3VudAUDY250AwkAAAIFCWFjY3VtU2l6ZQBjCQDNCAIFBWFjY3VtBQphZGRyZXNzU3RyCQDNCAIJAM0IAgUFYWNjdW0FCmFkZHJlc3NTdHIFB2FkZHJlc3MJAM0IAgUFYWNjdW0FB2FkZHJlc3MECW5ld0xpZGVycwMJAAACBQpsaWRlcnNTaXplAAAJAMwIAgUKYWRkcmVzc1N0cgUDbmlsAwMJAGYCAGQFCmxpZGVyc1NpemUJAGcCBQhtaW5Db3VudAUJc3BpbkNvdW50BwkAzQgCBQ5maWx0ZXJlZExpZGVycwUKYWRkcmVzc1N0cgMJAGcCBQhtaW5Db3VudAUJc3BpbkNvdW50BQ5maWx0ZXJlZExpZGVycwQEbGlzdAoAAiRsBQ5maWx0ZXJlZExpZGVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZm9sZFNvcnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkBQRsaXN0BAxuZXdMaWRlcnNTdHIJALsJAgUJbmV3TGlkZXJzBQlzZXBhcmF0b3IEBnJlc3VsdAkAzAgCCQELU3RyaW5nRW50cnkCBQlsaWRlcnNLZXkFDG5ld0xpZGVyc1N0cgUDbmlsBQZyZXN1bHQBC3ByaXZhdGVTcGluAgphZGRyZXNzU3RyBHR4aWQEBmxvY2tlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1wZXRlSW5Mb2NrS2V5AAAEBXRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC3N1cHBsaWVkS2V5AAAECXRvdGFsU3BpbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQx0b3RhbFNwaW5LZXkAAAQMbmV3U3BpbkNvdW50CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELZ2V0Q291bnRLZXkBBQphZGRyZXNzU3RyAAAAAQMJAGYCBQRXNDIwBQV0b3RhbAkAAgECDW5vIHBldGUgaW4gc2MEA3N0cgkAuQkCCQDMCAIFBHR4aWQJAMwIAgIDeHh4CQDMCAIJAKQDAQUGaGVpZ2h0CQDMCAIFCmFkZHJlc3NTdHIFA25pbAUJc2VwYXJhdG9yBAZsaWRlcnMJARJwcml2YXRlQ2hlY2tMaWRlcnMCBQphZGRyZXNzU3RyBQxuZXdTcGluQ291bnQEA3JlcwkAzAgCCQELU3RyaW5nRW50cnkCBQphZGRyZXNzU3RyBQNzdHIJAMwIAgkBDEludGVnZXJFbnRyeQIFDXBldGVJbkxvY2tLZXkJAGQCBQZsb2NrZWQFBFc0MjAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtnZXRDb3VudEtleQEFCmFkZHJlc3NTdHIFDG5ld1NwaW5Db3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMdG90YWxTcGluS2V5CQBkAgUJdG90YWxTcGluAAEFA25pbAkAzggCBQZsaWRlcnMFA3JlcwkBaQEGc3VwcGx5AAMJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgl5b3UgY2FuJ3QDAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEUEVURQcEA2ludgkA/AcEBQR0aGlzAglzdGFrZVBldGUJAMwIAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52CQENcHJpdmF0ZVN1cHBseQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQILYmFkIHBheW1lbnQBaQEJc3Rha2VQZXRlAQpwZXRlQW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIJeW91IGNhbid0BAtwZXRlSW5TdGFrZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRBwZXRlSW5TdGFraW5nS2V5AAAEA2ludgkA/AcEBRJQZXRlU3Rha2luZ0FkZHJlc3MCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBFBFVEUFCnBldGVBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgUQcGV0ZUluU3Rha2luZ0tleQkAZAIFC3BldGVJblN0YWtlBQpwZXRlQW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELdW5zdGFrZVBldGUBBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCXlvdSBjYW4ndAQLcGV0ZUluU3Rha2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRBwZXRlSW5TdGFraW5nS2V5CQCsAgIFEHBldGVJblN0YWtpbmdLZXkCCiBub3QgZm91bmQEA2ludgkA/AcEBRJQZXRlU3Rha2luZ0FkZHJlc3MCB3Vuc3Rha2UJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgUQcGV0ZUluU3Rha2luZ0tleQkAZQIFC3BldGVJblN0YWtlBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARRjbGFpbVBldGVGcm9tU3Rha2luZwAEEHBldGVBbW91bnRCZWZvcmUJAPAHAgUEdGhpcwUEUEVURQMJAAACBRBwZXRlQW1vdW50QmVmb3JlBRBwZXRlQW1vdW50QmVmb3JlBANpbnYJAPwHBAUSUGV0ZVN0YWtpbmdBZGRyZXNzAgVjbGFpbQUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEDXBldGVBbW91bnROZXcJAGUCCQDwBwIFBHRoaXMFBFBFVEUFEHBldGVBbW91bnRCZWZvcmUDCQAAAgUNcGV0ZUFtb3VudE5ldwUNcGV0ZUFtb3VudE5ldwMJAGYCBQ1wZXRlQW1vdW50TmV3AAAEBmxpZGVycwMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFCWxpZGVyc0tleQkAvQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlsaWRlcnNLZXkFCXNlcGFyYXRvcgUDbmlsBApsaWRlcnNTaXplCQCQAwEFBmxpZGVycwQCcDEDCQBnAgUKbGlkZXJzU2l6ZQABCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtnZXRDb3VudEtleQEJAJEDAgUGbGlkZXJzAAAAAAAABAJwMgMJAGcCBQpsaWRlcnNTaXplAAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBC2dldENvdW50S2V5AQkAkQMCBQZsaWRlcnMAAQAAAAAEAnAzAwkAZwIFCmxpZGVyc1NpemUAAwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELZ2V0Q291bnRLZXkBCQCRAwIFBmxpZGVycwACAAAAAAQDcDF3AwkAZwIFCmxpZGVyc1NpemUAAQkAkQMCBQZsaWRlcnMAAAIKbm8gYWRkcmVzcwQDcDJ3AwkAZwIFCmxpZGVyc1NpemUAAgkAkQMCBQZsaWRlcnMAAQIKbm8gYWRkcmVzcwQDcDN3AwkAZwIFCmxpZGVyc1NpemUAAwkAkQMCBQZsaWRlcnMAAgIKbm8gYWRkcmVzcwQKdG90YWxDb3VudAkAZAIJAGQCBQJwMQUCcDIFAnAzBAJyMwMJAGYCBQJwMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFA3AzdwkAawMFDXBldGVBbW91bnROZXcFAnAzBQp0b3RhbENvdW50BQRQRVRFBQNuaWwFA25pbAQCcjIDCQBmAgUCcDIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQNwMncJAGsDBQ1wZXRlQW1vdW50TmV3BQJwMgUKdG90YWxDb3VudAUEUEVURQUDbmlsBQNuaWwEAnIxAwkAZgIFAnAxAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUDcDF3CQBrAwUNcGV0ZUFtb3VudE5ldwUCcDEFCnRvdGFsQ291bnQFBFBFVEUFA25pbAUDbmlsCQDOCAIJAM4IAgUCcjEFAnIyBQJyMwkAAgECEW5vdGhpbmcgYXZhaWxhYmxlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBHNwaW4AAwMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0BwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQpCRVRfQU1PVU5UBwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBHR4aWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFB2FkZHJlc3MEA2ludgkA/AcEBQR0aGlzAgZyZXN1bHQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYJAQtwcml2YXRlU3BpbgIFB2FkZHJlc3MFBHR4aWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAQtwcml2YXRlU3BpbgIFB2FkZHJlc3MFBHR4aWQJAAIBAgtiYWQgcGF5bWVudAFpAQZyZXN1bHQBCmFkZHJlc3NTdHIEBGRhdGEJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCmFkZHJlc3NTdHIJAKwCAgIYdW5hYmxlIHRvIHJlYWQgZGF0YSBmb3IgBQphZGRyZXNzU3RyBQlzZXBhcmF0b3IEBHR4aWQJAJEDAgUEZGF0YQUFblR4SWQEC3N0YXJ0SGVpZ2h0CQCRAwIFBGRhdGEFB25IZWlnaHQEDGNvbW1pdEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDpBwEJANkEAQUEdHhpZAkArAICBQR0eGlkAgogbm90IGZvdW5kAwkAZgIJAGQCBQxjb21taXRIZWlnaHQAAwUGaGVpZ2h0CQACAQkArAICCQCsAgICBXdhaXQgCQCkAwEJAGUCCQBkAgUMY29tbWl0SGVpZ2h0AAMFBmhlaWdodAIbIGJsb2NrcyB0byByZXZlYWwgdGhpcyB0eGlkBAJyMQkBBnJldmVhbAIFBHR4aWQJAGQCBQxjb21taXRIZWlnaHQAAQQCcjIJAQZyZXZlYWwCBQR0eGlkCQBkAgUMY29tbWl0SGVpZ2h0AAIEAnIzCQEGcmV2ZWFsAgUEdHhpZAkAZAIFDGNvbW1pdEhlaWdodAADBAZyZXN1bHQJAKwCAgkArAICCQCkAwEFAnIxCQCkAwEFAnIyCQCkAwEFAnIzBAx3aW5uZXJBbW91bnQJARFjaGVja1dpbm5lckFtb3VudAEFBnJlc3VsdAQDc3RyCQC5CQIJAMwIAgUEdHhpZAkAzAgCBQZyZXN1bHQJAMwIAgULc3RhcnRIZWlnaHQJAMwIAgUKYWRkcmVzc1N0cgUDbmlsBQlzZXBhcmF0b3IEBmxvY2tlZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFDXBldGVJbkxvY2tLZXkCFXVuYWJsZSB0byByZWFkIGxvY2tlZAMJAGYCBQx3aW5uZXJBbW91bnQAAAQBawkArAICAgJyXwUGcmVzdWx0BAtyZXN1bHRDb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrAAAEA2ludgkA/AcEBQR0aGlzAgt1bnN0YWtlUGV0ZQkAzAgCBQx3aW5uZXJBbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAV0b3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtzdXBwbGllZEtleQAABANrZXkDCQAAAgUGcmVzdWx0AgM3NzcFCmphY2twb3RLZXkFC3N1cHBsaWVkS2V5BAN2YWwDCQAAAgUGcmVzdWx0AgM3NzcAAAkAZQIFBXRvdGFsBQx3aW5uZXJBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDXBldGVJbkxvY2tLZXkJAGUCBQZsb2NrZWQFBFc0MjAJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUDdmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQFrCQBkAgULcmVzdWx0Q291bnQAAQkAzAgCCQELU3RyaW5nRW50cnkCBQR0eGlkBQNzdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKYWRkcmVzc1N0cgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQphZGRyZXNzU3RyBQx3aW5uZXJBbW91bnQFBFBFVEUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMDAwkAAAIFAnIxBQJyMwYJAAACBQJyMQUCcjIGCQAAAgUCcjIFAnIzBAFrAghyX3JlZnVuZAQLcmVzdWx0Q291bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1wZXRlSW5Mb2NrS2V5CQBlAgUGbG9ja2VkBQRXNDIwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQFrCQBkAgULcmVzdWx0Q291bnQAAQkAzAgCCQELU3RyaW5nRW50cnkCBQR0eGlkBQNzdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKYWRkcmVzc1N0cgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQphZGRyZXNzU3RyBQpCRVRfQU1PVU5UBQR1bml0BQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFDXBldGVJbkxvY2tLZXkJAGUCBQZsb2NrZWQFBFc0MjAJAMwIAgkBC1N0cmluZ0VudHJ5AgUEdHhpZAUDc3RyCQDMCAIJAQtEZWxldGVFbnRyeQEFCmFkZHJlc3NTdHIFA25pbAFpAQZ0b1BldGUABAt3YXZlc0Ftb3VudAkAZQIICQDvBwEFBHRoaXMHcmVndWxhcgCAreIEAwkAZgIAgMLXLwULd2F2ZXNBbW91bnQJAAIBAhJiYWxhbmNlIGlzIHRvbyBsb3cED3RlYW1XYXZlc0Ftb3VudAkAawMFC3dhdmVzQW1vdW50BQlURUFNX1BBUlQAZAQPc3dhcFdhdmVzQW1vdW50CQBlAgkAZQIFC3dhdmVzQW1vdW50BQ90ZWFtV2F2ZXNBbW91bnQAgNrECQQEc3dhcAkA/AcEBQtTd2FwQWRkcmVzcwIEc3dhcAkAzAgCAAEJAMwIAgkA2AQBBQRQRVRFCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQ9zd2FwV2F2ZXNBbW91bnQFA25pbAMJAAACBQRzd2FwBQRzd2FwBA1wZXRlQW1vdW50TmV3CQDwBwIFBHRoaXMFBFBFVEUDCQAAAgUNcGV0ZUFtb3VudE5ldwUNcGV0ZUFtb3VudE5ldwQGc3VwcGx5CQENcHJpdmF0ZVN1cHBseQEFDXBldGVBbW91bnROZXcEA2ludgkA/AcEBQR0aGlzAglzdGFrZVBldGUJAMwIAgUNcGV0ZUFtb3VudE5ldwUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQtUZWFtQWRkcmVzcwUPdGVhbVdhdmVzQW1vdW50BQR1bml0BQNuaWwFBnN1cHBseQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVMaWRlcnMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIJeW91IGNhbid0CQDMCAIJAQtEZWxldGVFbnRyeQEFCWxpZGVyc0tleQUDbmlsAWkBCXJlYmFsYW5jZQEGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIJeW91IGNhbid0BAV0b3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtzdXBwbGllZEtleQAABAdqYWNrcG90CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmphY2twb3RLZXkAAAMJAGcCBQZhbW91bnQFBXRvdGFsCQACAQIKYmFkIGFtb3VudAQIbmV3VG90YWwJAGUCBQV0b3RhbAUGYW1vdW50BApuZXdKYWNrcG90CQBkAgUHamFja3BvdAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtzdXBwbGllZEtleQUIbmV3VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIFCmphY2twb3RLZXkFCm5ld0phY2twb3QFA25pbAClr1fL", "height": 3897646, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CUspWPQk62cyzQq4gwa8Atq4CGV99sBQkTiynyjdzH6o Next: 6WJfMtyY5HzhqPBE3uUpaGzKZ1DFqur5cnzkMVV4r3PF Diff:
OldNewDifferences
407407 else [DeleteEntry(lidersKey)]
408408
409409
410+
411+@Callable(i)
412+func rebalance (amount) = if ((i.caller != this))
413+ then throw("you can't")
414+ else {
415+ let total = valueOrElse(getInteger(this, suppliedKey), 0)
416+ let jackpot = valueOrElse(getInteger(this, jackpotKey), 0)
417+ if ((amount >= total))
418+ then throw("bad amount")
419+ else {
420+ let newTotal = (total - amount)
421+ let newJackpot = (jackpot + amount)
422+[IntegerEntry(suppliedKey, newTotal), IntegerEntry(jackpotKey, newJackpot)]
423+ }
424+ }
425+
426+
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 = "_"
1313
1414 let JACKPOT_PART = 60
1515
1616 let TEAM_PART = 30
1717
1818 let BET_AMOUNT = 7770000
1919
2020 let W420 = 2000000000
2121
2222 let suppliedKey = "pete_total"
2323
2424 let jackpotKey = "pete_jackpot"
2525
2626 let peteInLockKey = "pete_in_lock"
2727
2828 let peteInStakingKey = "pete_in_staking"
2929
3030 let lidersKey = "liders"
3131
3232 let totalSpinKey = "spin_total"
3333
3434 func getCountKey (addressStr) = (addressStr + "_cnt")
3535
3636
3737 let nTxId = 0
3838
3939 let nResult = 1
4040
4141 let nHeight = 2
4242
4343 let nAddress = 3
4444
4545 func reveal (txid,targetBlock) = if ((height >= targetBlock))
4646 then {
4747 let revealBlock = value(blockInfoByHeight(targetBlock))
4848 let vrf = value(revealBlock.vrf)
4949 let reveal = sha256((vrf + toBytes(txid)))
5050 (toInt(reveal) % 10)
5151 }
5252 else -1
5353
5454
5555 func checkWinnerAmount (result) = if ((result == "777"))
5656 then valueOrElse(getInteger(this, jackpotKey), 0)
5757 else if ((result == "420"))
5858 then W420
5959 else if ((result == "100"))
6060 then 500000000
6161 else if ((result == "111"))
6262 then 600000000
6363 else if ((result == "222"))
6464 then 700000000
6565 else if ((result == "333"))
6666 then 800000000
6767 else if ((result == "444"))
6868 then 900000000
6969 else if ((result == "555"))
7070 then 800000000
7171 else if ((result == "888"))
7272 then 700000000
7373 else if ((result == "999"))
7474 then 600000000
7575 else if ((result == "666"))
7676 then 666000000
7777 else if ((result == "137"))
7878 then 731000000
7979 else 0
8080
8181
8282 func jsonResult (addressStr) = if (!(isDefined(getString(this, addressStr))))
8383 then "{\"status\":\"no game\"}"
8484 else {
8585 let data = split(valueOrErrorMessage(getString(this, addressStr), ("unable to read data for " + addressStr)), separator)
8686 let txid = data[nTxId]
8787 let commitHeight = valueOrErrorMessage(transactionHeightById(fromBase58String(txid)), (txid + " not found"))
8888 let r1 = reveal(txid, (commitHeight + 1))
8989 let r2 = reveal(txid, (commitHeight + 2))
9090 let r3 = reveal(txid, (commitHeight + 3))
9191 let result = ((toString(r1) + toString(r2)) + toString(r3))
9292 let winnerAmount = checkWinnerAmount(result)
9393 let json = (((((((((((((((((((((((((("{" + "\"status\":\"in game\",") + "\"") + "prize") + "\"") + ":") + toString(winnerAmount)) + ",") + "\"") + "r1") + "\"") + ":") + toString(r1)) + ",") + "\"") + "r2") + "\"") + ":") + toString(r2)) + ",") + "\"") + "r3") + "\"") + ":") + toString(r3)) + "") + "}")
9494 json
9595 }
9696
9797
9898 func jsonTopGamers () = {
9999 let liders = if (isDefined(getString(this, lidersKey)))
100100 then split_51C(getStringValue(this, lidersKey), separator)
101101 else nil
102102 func foldTop (accum,address) = {
103103 let cnt = valueOrElse(getInteger(this, getCountKey(address)), 0)
104104 (accum :+ ((("\"" + address) + "\":") + toString(cnt)))
105105 }
106106
107107 let top = {
108108 let $l = liders
109109 let $s = size($l)
110110 let $acc0 = nil
111111 func $f0_1 ($a,$i) = if (($i >= $s))
112112 then $a
113113 else foldTop($a, $l[$i])
114114
115115 func $f0_2 ($a,$i) = if (($i >= $s))
116116 then $a
117117 else throw("List size exceeds 20")
118118
119119 $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)
120120 }
121121 (("{" + makeString_2C(top, ",")) + "}")
122122 }
123123
124124
125125 func privateSupply (amount) = {
126126 let total = valueOrElse(getInteger(this, suppliedKey), 0)
127127 let jackpot = valueOrElse(getInteger(this, jackpotKey), 0)
128128 let newTotal = (total + fraction(amount, (100 - JACKPOT_PART), 100))
129129 let newJackpot = (jackpot + fraction(amount, JACKPOT_PART, 100))
130130 [IntegerEntry(suppliedKey, newTotal), IntegerEntry(jackpotKey, newJackpot)]
131131 }
132132
133133
134134 func privateCheckLiders (addressStr,spinCount) = {
135135 let lidersStr = valueOrElse(getString(this, lidersKey), "")
136136 let liders = if ((lidersStr != ""))
137137 then split_51C(getStringValue(this, lidersKey), separator)
138138 else nil
139139 let idx = indexOf(liders, addressStr)
140140 let filteredLiders = if (isDefined(idx))
141141 then removeByIndex(liders, value(idx))
142142 else liders
143143 let minCount = valueOrElse(getInteger(this, getCountKey(filteredLiders[(size(filteredLiders) - 1)])), 0)
144144 let lidersSize = size(filteredLiders)
145145 func foldSort (accum,address) = {
146146 let cnt = valueOrElse(getInteger(this, getCountKey(address)), 0)
147147 let accumSize = size(accum)
148148 if ((accumSize == 100))
149149 then accum
150150 else if (isDefined(indexOf(accum, addressStr)))
151151 then (accum :+ address)
152152 else if ((spinCount > cnt))
153153 then if ((accumSize == 99))
154154 then (accum :+ addressStr)
155155 else ((accum :+ addressStr) :+ address)
156156 else (accum :+ address)
157157 }
158158
159159 let newLiders = if ((lidersSize == 0))
160160 then [addressStr]
161161 else if (if ((100 > lidersSize))
162162 then (minCount >= spinCount)
163163 else false)
164164 then (filteredLiders :+ addressStr)
165165 else if ((minCount >= spinCount))
166166 then filteredLiders
167167 else {
168168 let list = {
169169 let $l = filteredLiders
170170 let $s = size($l)
171171 let $acc0 = nil
172172 func $f0_1 ($a,$i) = if (($i >= $s))
173173 then $a
174174 else foldSort($a, $l[$i])
175175
176176 func $f0_2 ($a,$i) = if (($i >= $s))
177177 then $a
178178 else throw("List size exceeds 100")
179179
180180 $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)
181181 }
182182 list
183183 }
184184 let newLidersStr = makeString_11C(newLiders, separator)
185185 let result = [StringEntry(lidersKey, newLidersStr)]
186186 result
187187 }
188188
189189
190190 func privateSpin (addressStr,txid) = {
191191 let locked = valueOrElse(getInteger(this, peteInLockKey), 0)
192192 let total = valueOrElse(getInteger(this, suppliedKey), 0)
193193 let totalSpin = valueOrElse(getInteger(this, totalSpinKey), 0)
194194 let newSpinCount = (valueOrElse(getInteger(this, getCountKey(addressStr)), 0) + 1)
195195 if ((W420 > total))
196196 then throw("no pete in sc")
197197 else {
198198 let str = makeString([txid, "xxx", toString(height), addressStr], separator)
199199 let liders = privateCheckLiders(addressStr, newSpinCount)
200200 let res = [StringEntry(addressStr, str), IntegerEntry(peteInLockKey, (locked + W420)), IntegerEntry(getCountKey(addressStr), newSpinCount), IntegerEntry(totalSpinKey, (totalSpin + 1))]
201201 (liders ++ res)
202202 }
203203 }
204204
205205
206206 @Callable(i)
207207 func supply () = if ((i.caller == this))
208208 then throw("you can't")
209209 else if (if ((size(i.payments) == 1))
210210 then (i.payments[0].assetId == PETE)
211211 else false)
212212 then {
213213 let inv = invoke(this, "stakePete", [i.payments[0].amount], nil)
214214 if ((inv == inv))
215215 then privateSupply(i.payments[0].amount)
216216 else throw("Strict value is not equal to itself.")
217217 }
218218 else throw("bad payment")
219219
220220
221221
222222 @Callable(i)
223223 func stakePete (peteAmount) = if ((i.caller != this))
224224 then throw("you can't")
225225 else {
226226 let peteInStake = valueOrElse(getInteger(this, peteInStakingKey), 0)
227227 let inv = invoke(PeteStakingAddress, "stake", nil, [AttachedPayment(PETE, peteAmount)])
228228 if ((inv == inv))
229229 then [IntegerEntry(peteInStakingKey, (peteInStake + peteAmount))]
230230 else throw("Strict value is not equal to itself.")
231231 }
232232
233233
234234
235235 @Callable(i)
236236 func unstakePete (amount) = if ((i.caller != this))
237237 then throw("you can't")
238238 else {
239239 let peteInStake = valueOrErrorMessage(getInteger(this, peteInStakingKey), (peteInStakingKey + " not found"))
240240 let inv = invoke(PeteStakingAddress, "unstake", [amount], nil)
241241 if ((inv == inv))
242242 then [IntegerEntry(peteInStakingKey, (peteInStake - amount))]
243243 else throw("Strict value is not equal to itself.")
244244 }
245245
246246
247247
248248 @Callable(i)
249249 func claimPeteFromStaking () = {
250250 let peteAmountBefore = assetBalance(this, PETE)
251251 if ((peteAmountBefore == peteAmountBefore))
252252 then {
253253 let inv = invoke(PeteStakingAddress, "claim", nil, nil)
254254 if ((inv == inv))
255255 then {
256256 let peteAmountNew = (assetBalance(this, PETE) - peteAmountBefore)
257257 if ((peteAmountNew == peteAmountNew))
258258 then if ((peteAmountNew > 0))
259259 then {
260260 let liders = if (isDefined(getString(this, lidersKey)))
261261 then split_51C(getStringValue(this, lidersKey), separator)
262262 else nil
263263 let lidersSize = size(liders)
264264 let p1 = if ((lidersSize >= 1))
265265 then valueOrElse(getInteger(this, getCountKey(liders[0])), 0)
266266 else 0
267267 let p2 = if ((lidersSize >= 2))
268268 then valueOrElse(getInteger(this, getCountKey(liders[1])), 0)
269269 else 0
270270 let p3 = if ((lidersSize >= 3))
271271 then valueOrElse(getInteger(this, getCountKey(liders[2])), 0)
272272 else 0
273273 let p1w = if ((lidersSize >= 1))
274274 then liders[0]
275275 else "no address"
276276 let p2w = if ((lidersSize >= 2))
277277 then liders[1]
278278 else "no address"
279279 let p3w = if ((lidersSize >= 3))
280280 then liders[2]
281281 else "no address"
282282 let totalCount = ((p1 + p2) + p3)
283283 let r3 = if ((p3 > 0))
284284 then [ScriptTransfer(addressFromStringValue(p3w), fraction(peteAmountNew, p3, totalCount), PETE)]
285285 else nil
286286 let r2 = if ((p2 > 0))
287287 then [ScriptTransfer(addressFromStringValue(p2w), fraction(peteAmountNew, p2, totalCount), PETE)]
288288 else nil
289289 let r1 = if ((p1 > 0))
290290 then [ScriptTransfer(addressFromStringValue(p1w), fraction(peteAmountNew, p1, totalCount), PETE)]
291291 else nil
292292 ((r1 ++ r2) ++ r3)
293293 }
294294 else throw("nothing available")
295295 else throw("Strict value is not equal to itself.")
296296 }
297297 else throw("Strict value is not equal to itself.")
298298 }
299299 else throw("Strict value is not equal to itself.")
300300 }
301301
302302
303303
304304 @Callable(i)
305305 func spin () = if (if (if ((size(i.payments) == 1))
306306 then (i.payments[0].assetId == unit)
307307 else false)
308308 then (i.payments[0].amount == BET_AMOUNT)
309309 else false)
310310 then {
311311 let address = toString(i.caller)
312312 let txid = toBase58String(i.transactionId)
313313 if (isDefined(getString(this, address)))
314314 then {
315315 let inv = invoke(this, "result", [address], nil)
316316 if ((inv == inv))
317317 then privateSpin(address, txid)
318318 else throw("Strict value is not equal to itself.")
319319 }
320320 else privateSpin(address, txid)
321321 }
322322 else throw("bad payment")
323323
324324
325325
326326 @Callable(i)
327327 func result (addressStr) = {
328328 let data = split(valueOrErrorMessage(getString(this, addressStr), ("unable to read data for " + addressStr)), separator)
329329 let txid = data[nTxId]
330330 let startHeight = data[nHeight]
331331 let commitHeight = valueOrErrorMessage(transactionHeightById(fromBase58String(txid)), (txid + " not found"))
332332 if (((commitHeight + 3) > height))
333333 then throw((("wait " + toString(((commitHeight + 3) - height))) + " blocks to reveal this txid"))
334334 else {
335335 let r1 = reveal(txid, (commitHeight + 1))
336336 let r2 = reveal(txid, (commitHeight + 2))
337337 let r3 = reveal(txid, (commitHeight + 3))
338338 let result = ((toString(r1) + toString(r2)) + toString(r3))
339339 let winnerAmount = checkWinnerAmount(result)
340340 let str = makeString([txid, result, startHeight, addressStr], separator)
341341 let locked = valueOrErrorMessage(getInteger(this, peteInLockKey), "unable to read locked")
342342 if ((winnerAmount > 0))
343343 then {
344344 let k = ("r_" + result)
345345 let resultCount = valueOrElse(getInteger(this, k), 0)
346346 let inv = invoke(this, "unstakePete", [winnerAmount], nil)
347347 if ((inv == inv))
348348 then {
349349 let total = valueOrElse(getInteger(this, suppliedKey), 0)
350350 let key = if ((result == "777"))
351351 then jackpotKey
352352 else suppliedKey
353353 let val = if ((result == "777"))
354354 then 0
355355 else (total - winnerAmount)
356356 [IntegerEntry(peteInLockKey, (locked - W420)), IntegerEntry(key, val), IntegerEntry(k, (resultCount + 1)), StringEntry(txid, str), DeleteEntry(addressStr), ScriptTransfer(addressFromStringValue(addressStr), winnerAmount, PETE)]
357357 }
358358 else throw("Strict value is not equal to itself.")
359359 }
360360 else if (if (if ((r1 == r3))
361361 then true
362362 else (r1 == r2))
363363 then true
364364 else (r2 == r3))
365365 then {
366366 let k = "r_refund"
367367 let resultCount = valueOrElse(getInteger(this, k), 0)
368368 [IntegerEntry(peteInLockKey, (locked - W420)), IntegerEntry(k, (resultCount + 1)), StringEntry(txid, str), DeleteEntry(addressStr), ScriptTransfer(addressFromStringValue(addressStr), BET_AMOUNT, unit)]
369369 }
370370 else [IntegerEntry(peteInLockKey, (locked - W420)), StringEntry(txid, str), DeleteEntry(addressStr)]
371371 }
372372 }
373373
374374
375375
376376 @Callable(i)
377377 func toPete () = {
378378 let wavesAmount = (wavesBalance(this).regular - 10000000)
379379 if ((100000000 > wavesAmount))
380380 then throw("balance is too low")
381381 else {
382382 let teamWavesAmount = fraction(wavesAmount, TEAM_PART, 100)
383383 let swapWavesAmount = ((wavesAmount - teamWavesAmount) - 20000000)
384384 let swap = invoke(SwapAddress, "swap", [1, toBase58String(PETE), toString(this)], [AttachedPayment(unit, swapWavesAmount)])
385385 if ((swap == swap))
386386 then {
387387 let peteAmountNew = assetBalance(this, PETE)
388388 if ((peteAmountNew == peteAmountNew))
389389 then {
390390 let supply = privateSupply(peteAmountNew)
391391 let inv = invoke(this, "stakePete", [peteAmountNew], nil)
392392 if ((inv == inv))
393393 then ([ScriptTransfer(TeamAddress, teamWavesAmount, unit)] ++ supply)
394394 else throw("Strict value is not equal to itself.")
395395 }
396396 else throw("Strict value is not equal to itself.")
397397 }
398398 else throw("Strict value is not equal to itself.")
399399 }
400400 }
401401
402402
403403
404404 @Callable(i)
405405 func removeLiders () = if ((i.caller != this))
406406 then throw("you can't")
407407 else [DeleteEntry(lidersKey)]
408408
409409
410+
411+@Callable(i)
412+func rebalance (amount) = if ((i.caller != this))
413+ then throw("you can't")
414+ else {
415+ let total = valueOrElse(getInteger(this, suppliedKey), 0)
416+ let jackpot = valueOrElse(getInteger(this, jackpotKey), 0)
417+ if ((amount >= total))
418+ then throw("bad amount")
419+ else {
420+ let newTotal = (total - amount)
421+ let newJackpot = (jackpot + amount)
422+[IntegerEntry(suppliedKey, newTotal), IntegerEntry(jackpotKey, newJackpot)]
423+ }
424+ }
425+
426+

github/deemru/w8io/3ef1775 
64.67 ms