tx · DB2QHyVFPmEcfp9ZM8f37nBxHFM3QBBDS6S46roFrsP4

3P86ne9inVG1Cf4smrEGSdcXyBuEApPcMAc:  -0.00900000 Waves

2023.09.02 14:45 [3803384] smart account 3P86ne9inVG1Cf4smrEGSdcXyBuEApPcMAc > SELF 0.00000000 Waves

{ "type": 13, "id": "DB2QHyVFPmEcfp9ZM8f37nBxHFM3QBBDS6S46roFrsP4", "fee": 900000, "feeAssetId": null, "timestamp": 1693655031936, "version": 1, "sender": "3P86ne9inVG1Cf4smrEGSdcXyBuEApPcMAc", "senderPublicKey": "6hjWe2YQdsZKtjcACiKTUMEGGnow19LjCF763eE2Tt91", "proofs": [ "3hgZSaL8uSQLobdP7TQ86oxfVC5AKJRWanGMyrcJ7jK2YV65Tv4KAzFFZHfg5ELUtjy69VSkqSb1y2sbu4jGrJPA" ], "script": "base64:BgIuCAISABIDCgEIEgMKAQgSAwoBARIECgIIARIDCgEIEgMKAQgSABIAEgMKAQgSACcBEHdyaXRlQ29uc3RTdHJpbmcCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQEId3JpdGVJbnQCA2tleQV2YWx1ZQMJAGYCAAAFBXZhbHVlCQACAQkArAICCQCsAgIJAKwCAgIXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAKQDAQUFdmFsdWUCCSBmb3Iga2V5IAUDa2V5CQEMSW50ZWdlckVudHJ5AgUDa2V5BQV2YWx1ZQEIY2hhbmdlQnkCA2tleQV2YWx1ZQkBCHdyaXRlSW50AgUDa2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAUFdmFsdWUAEmNvbmZpZ0FkZHJlc3NTdG9yZQIGY29uZmlnAA1jb25maWdBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFEmNvbmZpZ0FkZHJlc3NTdG9yZQIhc3Rha2luZzogY29uZmlnIGFkZHJlc3Mgbm90IGZvdW5kAhZpbnZhbGlkIGNvbmZpZyBhZGRyZXNzAQdhbGxvd2VkAQJvcAkA/AcEBQ1jb25maWdBZGRyZXNzAglvcEFsbG93ZWQJAMwIAgUCb3AFA25pbAUDbmlsAA1wd3JBc3NldElkU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIMcG93ZXJBc3NldElkAhZwd3IgYXNzZXQgaWQgbm90IGZvdW5kAApwd3JBc3NldElkCQDZBAEFDXB3ckFzc2V0SWRTdHIADm1pbnRlckNvbnRyYWN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCD2NvbnRyYWN0X21pbnRlcgISbm8gY29udHJhY3RfbWludGVyAhdpbnZhbGlkIG1pbnRlciBjb250cmFjdAANbWFpbkFkZHJlc3NlcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1jb25maWdBZGRyZXNzAg5tYWluX2FkZHJlc3NlcwIAAAttaW5Mb2NrVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgkApQgBBQR0aGlzAg5fbWluX2xvY2tfdGltZQIVbWluX2xvY2tfdGltZSBub3Qgc2V0AQ91c2VyU2hhcmVzU3RvcmUBBHVzZXIJAKwCAgUEdXNlcgIHX3NoYXJlcwELc3RvcmVIZWlnaHQBBXN0b3JlCQCsAgIFBXN0b3JlAgdfaGVpZ2h0AQlzdG9yZUxvY2sBBXN0b3JlCQCsAgIFBXN0b3JlAgVfbG9jawELc3Rha2VIZWlnaHQBB2FkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQELc3RvcmVIZWlnaHQBCQEPdXNlclNoYXJlc1N0b3JlAQUHYWRkcmVzcwIPbm8gc3Rha2UgaGVpZ2h0AQpsb2NrSGVpZ2h0AQdhZGRyZXNzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQlzdG9yZUxvY2sBCQEPdXNlclNoYXJlc1N0b3JlAQUHYWRkcmVzcwAAAQx1bmxvY2tIZWlnaHQBB2FkZHJlc3MJAGQCCQEKbG9ja0hlaWdodAEFB2FkZHJlc3MFC21pbkxvY2tUaW1lAQ11bnN0YWtlSGVpZ2h0AQdhZGRyZXNzCQBkAgkBC3N0YWtlSGVpZ2h0AQUHYWRkcmVzcwULbWluTG9ja1RpbWUACHNsYXNoZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgkApQgBBQR0aGlzAglfc2xhc2hlcnMCAAAGSEVJR0hUBQZoZWlnaHQAEXN0YWtlZEhlaWdodFN0b3JlAgxzdGFrZWRIZWlnaHQAEHRvdGFsU2hhcmVzU3RvcmUCC3RvdGFsU2hhcmVzAAtzdGFrZWRTdG9yZQIGc3Rha2VkAAVSQmFzZQCAgIT+pt7hEQADYXByCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwkArAICCQClCAEFBHRoaXMCC19zdGFrZXJfYXByAg1ubyBzdGFrZXJfYXByAA1ibG9ja3NQZXJZZWFyCQBoAgkAaAIA7QIAGAA8AAlSUGVyQmxvY2sJAGsDBQNhcHIFBVJCYXNlCQBoAgDoBwUNYmxvY2tzUGVyWWVhcgALdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULc3Rha2VkU3RvcmUAAAANY3VycmVudFN0YWtlZAQMc3Rha2VkSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEXN0YWtlZEhlaWdodFN0b3JlAAAEAWQJAGUCBQZIRUlHSFQFDHN0YWtlZEhlaWdodAQBcgkAZAIFBVJCYXNlCQBoAgUBZAUJUlBlckJsb2NrCQBrAwULdG90YWxTdGFrZWQFAXIFBVJCYXNlAQtwd3JUb1NoYXJlcwEJcHdyQW1vdW50BAt0b3RhbFNoYXJlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRB0b3RhbFNoYXJlc1N0b3JlAAADCQAAAgULdG90YWxTaGFyZXMAAAUJcHdyQW1vdW50CQBrAwUJcHdyQW1vdW50BQt0b3RhbFNoYXJlcwUNY3VycmVudFN0YWtlZAELc2hhcmVzVG9Qd3IBDHNoYXJlc0Ftb3VudAQLdG90YWxTaGFyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUQdG90YWxTaGFyZXNTdG9yZQAAAwkAAAIFC3RvdGFsU2hhcmVzAAAFDHNoYXJlc0Ftb3VudAkAawMFDHNoYXJlc0Ftb3VudAUNY3VycmVudFN0YWtlZAULdG90YWxTaGFyZXMBEGVuc3VyZVB3ckJhbGFuY2UBBmFtb3VudAQKcHdyQmFsYW5jZQkA8AcCBQR0aGlzBQpwd3JBc3NldElkAwkAZgIFBmFtb3VudAUKcHdyQmFsYW5jZQQEbWludAkA/AcEBQ5taW50ZXJDb250cmFjdAIEbWludAkAzAgCCQBlAgUGYW1vdW50BQpwd3JCYWxhbmNlBQNuaWwFA25pbAMJAAACBQRtaW50BQRtaW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAEGcGF5b3V0AgR1c2VyBmFtb3VudAQGZW5zdXJlCQEQZW5zdXJlUHdyQmFsYW5jZQEFBmFtb3VudAMJAAACBQZlbnN1cmUFBmVuc3VyZQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEdXNlcgUGYW1vdW50BQpwd3JBc3NldElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQZzaGFyZXMBB2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBD3VzZXJTaGFyZXNTdG9yZQEFB2FkZHJlc3MAAAEGc3Rha2VkAQdhZGRyZXNzCQELc2hhcmVzVG9Qd3IBCQEGc2hhcmVzAQUHYWRkcmVzcwEGYWR2aXNlAAQLdG90YWxTaGFyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUQdG90YWxTaGFyZXNTdG9yZQAABAx0b3RhbFN0YWtlZDEJAQtzaGFyZXNUb1B3cgEFC3RvdGFsU2hhcmVzCQCsAgIJAKwCAgkArAICAghoZWlnaHQ6IAkApAMBBQZIRUlHSFQCDywgdG90YWxTdGFrZWQ6IAkApAMBBQx0b3RhbFN0YWtlZDEBCmFkdmlzZVVzZXIBBHVzZXIEB3NoYXJlczEJAQZzaGFyZXMBBQR1c2VyBAlhdmFpbGFibGUJAQtzaGFyZXNUb1B3cgEFB3NoYXJlczEEDGhlaWdodEFuZEFjYwkArAICCQCsAgIJAKwCAgIIaGVpZ2h0OiAJAKQDAQUGSEVJR0hUAgssIGFjY291bnQ6IAUEdXNlcgMJAAACBQdzaGFyZXMxAAAJAKwCAgkArAICCQCsAgIJAKwCAgUMaGVpZ2h0QW5kQWNjAgssIHN0YWtlZDogMAIRLCB2b3RpbmdfcG93ZXI6IDACEiwgc3Rha2VfaGVpZ2h0OiAtMQIULCB1bnN0YWtlX2hlaWdodDogLTEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQxoZWlnaHRBbmRBY2MCCiwgc3Rha2VkOiAJAKQDAQUJYXZhaWxhYmxlAhAsIHZvdGluZ19wb3dlcjogCQCkAwEFB3NoYXJlczECECwgc3Rha2VfaGVpZ2h0OiAJAKQDAQkBC3N0YWtlSGVpZ2h0AQUEdXNlcgISLCB1bnN0YWtlX2hlaWdodDogCQCkAwEJAQ11bnN0YWtlSGVpZ2h0AQUEdXNlcgELc3Rha2VGb3JJbnQCB2FkZHJlc3MBcAMJAQIhPQIIBQFwB2Fzc2V0SWQFCnB3ckFzc2V0SWQJAAIBAhBpbnZhbGlkIGFzc2V0IGlkBAphZGRpdGlvbmFsCAUBcAZhbW91bnQEDHNoYXJlc0Ftb3VudAkBC3B3clRvU2hhcmVzAQUKYWRkaXRpb25hbAkAzAgCCQEId3JpdGVJbnQCBQtzdGFrZWRTdG9yZQkAZAIFDWN1cnJlbnRTdGFrZWQFCmFkZGl0aW9uYWwJAMwIAgkBCHdyaXRlSW50AgURc3Rha2VkSGVpZ2h0U3RvcmUFBkhFSUdIVAkAzAgCCQEIY2hhbmdlQnkCBRB0b3RhbFNoYXJlc1N0b3JlBQxzaGFyZXNBbW91bnQJAMwIAgkBCGNoYW5nZUJ5AgkBD3VzZXJTaGFyZXNTdG9yZQEFB2FkZHJlc3MFDHNoYXJlc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC3N0b3JlSGVpZ2h0AQkBD3VzZXJTaGFyZXNTdG9yZQEFB2FkZHJlc3MFBkhFSUdIVAUDbmlsAQ51bnN0YWtlRnJvbUludAMHYWRkcmVzcw1wYXlvdXRBZGRyZXNzCXB3ckFtb3VudAQHc2hhcmVzMQkBBnNoYXJlcwEFB2FkZHJlc3MDCQAAAgUHc2hhcmVzMQAACQACAQISbm90aGluZyB0byB1bnN0YWtlBAxtYXhBdmFpbGFibGUJAQtzaGFyZXNUb1B3cgEFB3NoYXJlczEEBmFtb3VudAMJAAACBQlwd3JBbW91bnQA////////////AQUMbWF4QXZhaWxhYmxlBQlwd3JBbW91bnQDCQBmAgAABQZhbW91bnQJAAIBAh5jYW5ub3QgdW5zdGFrZSBuZWdhdGl2ZSBhbW91bnQDCQBmAgUGYW1vdW50BQxtYXhBdmFpbGFibGUJAAIBAiFjYW5ub3QgdW5zdGFrZSBtb3JlIHRoYW4geW91IGhhdmUEDHNoYXJlc0Ftb3VudAkAlwMBCQDMCAIJAQtwd3JUb1NoYXJlcwEFBmFtb3VudAkAzAgCBQdzaGFyZXMxBQNuaWwDCQAAAgUMc2hhcmVzQW1vdW50AAAJAAIBAhdjYW5ub3QgdW5zdGFrZSAwIHNoYXJlcwkAzAgCCQEId3JpdGVJbnQCBQtzdGFrZWRTdG9yZQkAZQIFDWN1cnJlbnRTdGFrZWQFBmFtb3VudAkAzAgCCQEId3JpdGVJbnQCBRFzdGFrZWRIZWlnaHRTdG9yZQUGSEVJR0hUCQDMCAIJAQhjaGFuZ2VCeQIFEHRvdGFsU2hhcmVzU3RvcmUJAQEtAQUMc2hhcmVzQW1vdW50CQDMCAIJAQhjaGFuZ2VCeQIJAQ91c2VyU2hhcmVzU3RvcmUBBQdhZGRyZXNzCQEBLQEFDHNoYXJlc0Ftb3VudAkAzAgCCQEGcGF5b3V0AgUNcGF5b3V0QWRkcmVzcwUGYW1vdW50BQNuaWwLAWkBBXN0YWtlAAQBYQkBB2FsbG93ZWQBAgVzdGFrZQMJAAACBQFhBQFhCQELc3Rha2VGb3JJbnQCCQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHN0YWtlRm9yAQdhZGRyZXNzBAFhCQEHYWxsb3dlZAECCHN0YWtlRm9yAwkAAAIFAWEFAWEDAwkBAiE9AgUHYWRkcmVzcwkApQgBCAUBaQxvcmlnaW5DYWxsZXIJAQEhAQkBCGNvbnRhaW5zAgUNbWFpbkFkZHJlc3NlcwkApQgBCAUBaQZjYWxsZXIHCQACAQIGZGVuaWVkCQELc3Rha2VGb3JJbnQCBQdhZGRyZXNzCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcmVzdGFrZUZvcgEHYWRkcmVzcwQBYQkBB2FsbG93ZWQBAgpyZXN0YWtlRm9yAwkAAAIFAWEFAWEDCQEBIQEJAQhjb250YWlucwIFDW1haW5BZGRyZXNzZXMJAKUIAQgFAWkGY2FsbGVyCQACAQIGZGVuaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJc3RvcmVMb2NrAQkBD3VzZXJTaGFyZXNTdG9yZQEFB2FkZHJlc3MFBkhFSUdIVAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3Vuc3Rha2UBCXB3ckFtb3VudAQBYQkBB2FsbG93ZWQBAgd1bnN0YWtlAwkAAAIFAWEFAWEEB2FjY291bnQJAKUIAQgFAWkGY2FsbGVyAwkAZgIJAQ11bnN0YWtlSGVpZ2h0AQUHYWNjb3VudAUGSEVJR0hUCQACAQIXc3RpbGwgbG9ja2VkIGluIHN0YWtpbmcDCQBmAgkBDHVubG9ja0hlaWdodAEFB2FjY291bnQFBkhFSUdIVAkAAgECFnN0aWxsIGxvY2tlZCBpbiB2b3RpbmcJAQ51bnN0YWtlRnJvbUludAMFB2FjY291bnQFB2FjY291bnQFCXB3ckFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQt1bnN0YWtlRnJvbQIHYWRkcmVzcwlwd3JBbW91bnQEAWEJAQdhbGxvd2VkAQILdW5zdGFrZUZyb20DCQAAAgUBYQUBYQQJcGF5b3V0QWRyCQClCAEIBQFpBmNhbGxlcgMJAQEhAQkBCGNvbnRhaW5zAgUNbWFpbkFkZHJlc3NlcwUJcGF5b3V0QWRyCQACAQIGZGVuaWVkCQEOdW5zdGFrZUZyb21JbnQDBQdhZGRyZXNzBQlwYXlvdXRBZHIFCXB3ckFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQp1c2VyU2hhcmVzAQdhZGRyZXNzCQCUCgIFA25pbAkBBnNoYXJlcwEFB2FkZHJlc3MBaQEJdXNlclBvd2VyAQdhZGRyZXNzCQCUCgIFA25pbAkBBnN0YWtlZAEFB2FkZHJlc3MBaQEKdG90YWxQb3dlcgAJAJQKAgUDbmlsBQ1jdXJyZW50U3Rha2VkAWkBC3RvdGFsU2hhcmVzAAkAlAoCBQNuaWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUQdG90YWxTaGFyZXNTdG9yZQAAAWkBBGluaXQBBGNvbmYJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCBRJjb25maWdBZGRyZXNzU3RvcmUFBGNvbmYFA25pbAFpAQtzcGxpdFN0YWtlZAAEDG1hcmtldGluZ0RhbwIjM1BOVDFtdnlQZ29rQ3hiRUxKaTVhc3JDdkQyM2VhdE5yTlAEEW1hcmtldGluZ1RyZWFzdXJ5AiMzUDJ0aHd0YmVCUWI1Y0FvZG9CdDJFc244VHNEZkp4M2hxTgQIY2hpbGRyZW4JARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQQkxQbWtNM1RoeXROajZRZUp5TFRYMTU0aWY4UzZDZWE1BBB0b3RhbEludmVzdG1lbnRzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQhjaGlsZHJlbgkArAICAhJpbnZlc3RtZW50c190b3RhbF8FDG1hcmtldGluZ0RhbwQRdG90YWxTaGFyZXNTdG9yZTEJAQ91c2VyU2hhcmVzU3RvcmUBBRFtYXJrZXRpbmdUcmVhc3VyeQQLdG90YWxTaGFyZXMJARFAZXh0ck5hdGl2ZSgxMDU1KQEFEXRvdGFsU2hhcmVzU3RvcmUxBAlpbnZlc3RvcnMJAMwIAgIjM1AyRk1IYXZzaEt5Y2l5dThjSHZrVmprd3BwcVhtejduV20JAMwIAgIjM1AzMzlzOVdWeEYyekdDMmV3OE5QempSV2JMdnlUZHFjOW4JAMwIAgIjM1A0U2lCb2tXQ1BHZTJ5eXRXVmVjYVpteWpVRVkxc1k2NXAJAMwIAgIjM1A0ZmduYjZqWVBFN2pDNkh2eVpEWnN0V0NybWN0N1g1QkYJAMwIAgIjM1A0eXJNWnFOcWZLaUQ0MmZMaGRZa0ZkRnZycm9ZaWt0RmcJAMwIAgIjM1A1cTRwenVGZEpmS2N1RndNOGdTTmtXWW82Q2ViN1NBdVMJAMwIAgIjM1A2MVJwd1AxRlNhTG1Yc0ZjVENUTGhqc0duR1NSZzc2NEEJAMwIAgIjM1A2RmpRY0haTmdnVUxYRzh0d3ZianBzVDFzQlU4U2gyeXYJAMwIAgIjM1A3RWs3UnhiS3cxdmpHMWVvQXpLUHRRMnEzR2lKRXp3OW4JAMwIAgIjM1A4cVZYMTg5cXBvVEpaUVFRZEtTOWVuZEhLNXN4V3N2cmQJAMwIAgIjM1A4cXJqYTV3RmZRY3FpZWpYN0U2WnM4YVVQaHY5M2s5RkgJAMwIAgIjM1BEUHIzUFV6TXVOM2c0bkZrTGsycEFNYW41emRpelNhbXAJAMwIAgIjM1BGUTZpNUtXNzVUSDZQbmRQc3BXeGFLdjVWUXFaMzJKejkJAMwIAgIjM1BGU3NKMXdvRUpyUHF1cjhhcGRtRUJkdzhIdnlBdTI3MVcJAMwIAgIjM1BGZmlrb3ZGVDhXQTF4c0pvRFRUeHJMNm5WNWppZTFQdHkJAMwIAgIjM1BGdnhMUFV4Q1k5RXQ1dXlma1lMRTRTRFo1b0pUQ0ZXc0cJAMwIAgIjM1BHb1huZTVCVHZUa0NxY2tWZmVNNDRCaHRwRWVqOXE2c0QJAMwIAgIjM1BIRkFhdnhqMmVQSnFGQjQ2SDJhUkdBN29RTDZrejFySkoJAMwIAgIjM1BQS1dhclVnaE50WVdXM3ZpeTNZU1N0eFdtcUdueXdkVzgJAMwIAgIjM1BRN0F2eDdqcHZpdXE0Zmt0MzN6NW9iRzZMWDhZajJFVGoJAMwIAgIjM1BRR3RKQ000RzhHZjUxZWJaTms0Y1dNTTI4OENtUjhGYVMJAMwIAgIjM1BRaEd2TGdIZFV0NEd2aVM4d1g1WndxQVpRUHY1bW5Vb2kFA25pbAoBBGZvbGQCA2FjYwR1c2VyBAppbnZlc3RtZW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQhjaGlsZHJlbgkArAICCQCsAgIJAKwCAgIJaW52ZXN0b3JfBQxtYXJrZXRpbmdEYW8CAV8FBHVzZXIEDmludmVzdG9yU2hhcmVzCQBrAwULdG90YWxTaGFyZXMFCmludmVzdG1lbnQFEHRvdGFsSW52ZXN0bWVudHMEEHVzZXJTaGFyZXNTdG9yZTEJAQ91c2VyU2hhcmVzU3RvcmUBBQR1c2VyCQDMCAIJAQhjaGFuZ2VCeQIFEHVzZXJTaGFyZXNTdG9yZTEFDmludmVzdG9yU2hhcmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELc3RvcmVIZWlnaHQBBRB1c2VyU2hhcmVzU3RvcmUxBQZIRUlHSFQFA2FjYwkAzAgCCQELRGVsZXRlRW50cnkBBRF0b3RhbFNoYXJlc1N0b3JlMQkAzAgCCQELRGVsZXRlRW50cnkBCQELc3RvcmVIZWlnaHQBBRF0b3RhbFNoYXJlc1N0b3JlMQoAAiRsBQlpbnZlc3RvcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAeqc3mg==", "chainId": 87, "height": 3803384, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H2MMdyc8u9b2f4XCy8Boqx1ouR31Uj7M1VrmqijKMVaV Next: HYZRqPv5dnsUYdj6owTbUbQjGpHWjw2vkmyh2UNqbvj7 Diff:
OldNewDifferences
263263 func init (conf) = [writeConstString(configAddressStore, conf)]
264264
265265
266+
267+@Callable(i)
268+func splitStaked () = {
269+ let marketingDao = "3PNT1mvyPgokCxbELJi5asrCvD23eatNrNP"
270+ let marketingTreasury = "3P2thwtbeBQb5cAodoBt2Esn8TsDfJx3hqN"
271+ let children = addressFromStringValue("3PBLPmkM3ThytNj6QeJyLTX154if8S6Cea5")
272+ let totalInvestments = getIntegerValue(children, ("investments_total_" + marketingDao))
273+ let totalSharesStore1 = userSharesStore(marketingTreasury)
274+ let totalShares = getIntegerValue(totalSharesStore1)
275+ let investors = ["3P2FMHavshKyciyu8cHvkVjkwppqXmz7nWm", "3P339s9WVxF2zGC2ew8NPzjRWbLvyTdqc9n", "3P4SiBokWCPGe2yytWVecaZmyjUEY1sY65p", "3P4fgnb6jYPE7jC6HvyZDZstWCrmct7X5BF", "3P4yrMZqNqfKiD42fLhdYkFdFvrroYiktFg", "3P5q4pzuFdJfKcuFwM8gSNkWYo6Ceb7SAuS", "3P61RpwP1FSaLmXsFcTCTLhjsGnGSRg764A", "3P6FjQcHZNggULXG8twvbjpsT1sBU8Sh2yv", "3P7Ek7RxbKw1vjG1eoAzKPtQ2q3GiJEzw9n", "3P8qVX189qpoTJZQQQdKS9endHK5sxWsvrd", "3P8qrja5wFfQcqiejX7E6Zs8aUPhv93k9FH", "3PDPr3PUzMuN3g4nFkLk2pAMan5zdizSamp", "3PFQ6i5KW75TH6PndPspWxaKv5VQqZ32Jz9", "3PFSsJ1woEJrPqur8apdmEBdw8HvyAu271W", "3PFfikovFT8WA1xsJoDTTxrL6nV5jie1Pty", "3PFvxLPUxCY9Et5uyfkYLE4SDZ5oJTCFWsG", "3PGoXne5BTvTkCqckVfeM44BhtpEej9q6sD", "3PHFAavxj2ePJqFB46H2aRGA7oQL6kz1rJJ", "3PPKWarUghNtYWW3viy3YSStxWmqGnywdW8", "3PQ7Avx7jpviuq4fkt33z5obG6LX8Yj2ETj", "3PQGtJCM4G8Gf51ebZNk4cWMM288CmR8FaS", "3PQhGvLgHdUt4GviS8wX5ZwqAZQPv5mnUoi"]
276+ func fold (acc,user) = {
277+ let investment = getIntegerValue(children, ((("investor_" + marketingDao) + "_") + user))
278+ let investorShares = fraction(totalShares, investment, totalInvestments)
279+ let userSharesStore1 = userSharesStore(user)
280+[changeBy(userSharesStore1, investorShares), IntegerEntry(storeHeight(userSharesStore1), HEIGHT)] :: acc
281+ }
282+
283+[DeleteEntry(totalSharesStore1), DeleteEntry(storeHeight(totalSharesStore1)), {
284+ let $l = investors
285+ let $s = size($l)
286+ let $acc0 = nil
287+ func $f0_1 ($a,$i) = if (($i >= $s))
288+ then $a
289+ else fold($a, $l[$i])
290+
291+ func $f0_2 ($a,$i) = if (($i >= $s))
292+ then $a
293+ else throw("List size exceeds 22")
294+
295+ $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22)
296+ }]
297+ }
298+
299+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
55 then StringEntry(key, value)
66 else throw(("already initialized: " + key))
77
88
99 func writeInt (key,value) = if ((0 > value))
1010 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
1111 else IntegerEntry(key, value)
1212
1313
1414 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
1515
1616
1717 let configAddressStore = "config"
1818
1919 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "staking: config address not found")), "invalid config address")
2020
2121 func allowed (op) = invoke(configAddress, "opAllowed", [op], nil)
2222
2323
2424 let pwrAssetIdStr = valueOrErrorMessage(getString(configAddress, "powerAssetId"), "pwr asset id not found")
2525
2626 let pwrAssetId = fromBase58String(pwrAssetIdStr)
2727
2828 let minterContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_minter"), "no contract_minter")), "invalid minter contract")
2929
3030 let mainAddresses = valueOrElse(getString(configAddress, "main_addresses"), "")
3131
3232 let minLockTime = valueOrErrorMessage(getInteger(configAddress, (toString(this) + "_min_lock_time")), "min_lock_time not set")
3333
3434 func userSharesStore (user) = (user + "_shares")
3535
3636
3737 func storeHeight (store) = (store + "_height")
3838
3939
4040 func storeLock (store) = (store + "_lock")
4141
4242
4343 func stakeHeight (address) = valueOrErrorMessage(getInteger(this, storeHeight(userSharesStore(address))), "no stake height")
4444
4545
4646 func lockHeight (address) = valueOrElse(getInteger(this, storeLock(userSharesStore(address))), 0)
4747
4848
4949 func unlockHeight (address) = (lockHeight(address) + minLockTime)
5050
5151
5252 func unstakeHeight (address) = (stakeHeight(address) + minLockTime)
5353
5454
5555 let slashers = valueOrElse(getString(configAddress, (toString(this) + "_slashers")), "")
5656
5757 let HEIGHT = height
5858
5959 let stakedHeightStore = "stakedHeight"
6060
6161 let totalSharesStore = "totalShares"
6262
6363 let stakedStore = "staked"
6464
6565 let RBase = 10000000000000000
6666
6767 let apr = valueOrErrorMessage(getInteger(configAddress, (toString(this) + "_staker_apr")), "no staker_apr")
6868
6969 let blocksPerYear = ((365 * 24) * 60)
7070
7171 let RPerBlock = fraction(apr, RBase, (1000 * blocksPerYear))
7272
7373 let totalStaked = valueOrElse(getInteger(this, stakedStore), 0)
7474
7575 let currentStaked = {
7676 let stakedHeight = valueOrElse(getInteger(this, stakedHeightStore), 0)
7777 let d = (HEIGHT - stakedHeight)
7878 let r = (RBase + (d * RPerBlock))
7979 fraction(totalStaked, r, RBase)
8080 }
8181
8282 func pwrToShares (pwrAmount) = {
8383 let totalShares = valueOrElse(getInteger(this, totalSharesStore), 0)
8484 if ((totalShares == 0))
8585 then pwrAmount
8686 else fraction(pwrAmount, totalShares, currentStaked)
8787 }
8888
8989
9090 func sharesToPwr (sharesAmount) = {
9191 let totalShares = valueOrElse(getInteger(this, totalSharesStore), 0)
9292 if ((totalShares == 0))
9393 then sharesAmount
9494 else fraction(sharesAmount, currentStaked, totalShares)
9595 }
9696
9797
9898 func ensurePwrBalance (amount) = {
9999 let pwrBalance = assetBalance(this, pwrAssetId)
100100 if ((amount > pwrBalance))
101101 then {
102102 let mint = invoke(minterContract, "mint", [(amount - pwrBalance)], nil)
103103 if ((mint == mint))
104104 then nil
105105 else throw("Strict value is not equal to itself.")
106106 }
107107 else nil
108108 }
109109
110110
111111 func payout (user,amount) = {
112112 let ensure = ensurePwrBalance(amount)
113113 if ((ensure == ensure))
114114 then ScriptTransfer(addressFromStringValue(user), amount, pwrAssetId)
115115 else throw("Strict value is not equal to itself.")
116116 }
117117
118118
119119 func shares (address) = valueOrElse(getInteger(this, userSharesStore(address)), 0)
120120
121121
122122 func staked (address) = sharesToPwr(shares(address))
123123
124124
125125 func advise () = {
126126 let totalShares = valueOrElse(getInteger(this, totalSharesStore), 0)
127127 let totalStaked1 = sharesToPwr(totalShares)
128128 ((("height: " + toString(HEIGHT)) + ", totalStaked: ") + toString(totalStaked1))
129129 }
130130
131131
132132 func adviseUser (user) = {
133133 let shares1 = shares(user)
134134 let available = sharesToPwr(shares1)
135135 let heightAndAcc = ((("height: " + toString(HEIGHT)) + ", account: ") + user)
136136 if ((shares1 == 0))
137137 then ((((heightAndAcc + ", staked: 0") + ", voting_power: 0") + ", stake_height: -1") + ", unstake_height: -1")
138138 else ((((((((heightAndAcc + ", staked: ") + toString(available)) + ", voting_power: ") + toString(shares1)) + ", stake_height: ") + toString(stakeHeight(user))) + ", unstake_height: ") + toString(unstakeHeight(user)))
139139 }
140140
141141
142142 func stakeForInt (address,p) = if ((p.assetId != pwrAssetId))
143143 then throw("invalid asset id")
144144 else {
145145 let additional = p.amount
146146 let sharesAmount = pwrToShares(additional)
147147 [writeInt(stakedStore, (currentStaked + additional)), writeInt(stakedHeightStore, HEIGHT), changeBy(totalSharesStore, sharesAmount), changeBy(userSharesStore(address), sharesAmount), IntegerEntry(storeHeight(userSharesStore(address)), HEIGHT)]
148148 }
149149
150150
151151 func unstakeFromInt (address,payoutAddress,pwrAmount) = {
152152 let shares1 = shares(address)
153153 if ((shares1 == 0))
154154 then throw("nothing to unstake")
155155 else {
156156 let maxAvailable = sharesToPwr(shares1)
157157 let amount = if ((pwrAmount == -1))
158158 then maxAvailable
159159 else pwrAmount
160160 if ((0 > amount))
161161 then throw("cannot unstake negative amount")
162162 else if ((amount > maxAvailable))
163163 then throw("cannot unstake more than you have")
164164 else {
165165 let sharesAmount = min([pwrToShares(amount), shares1])
166166 if ((sharesAmount == 0))
167167 then throw("cannot unstake 0 shares")
168168 else [writeInt(stakedStore, (currentStaked - amount)), writeInt(stakedHeightStore, HEIGHT), changeBy(totalSharesStore, -(sharesAmount)), changeBy(userSharesStore(address), -(sharesAmount)), payout(payoutAddress, amount)]
169169 }
170170 }
171171 }
172172
173173
174174 @Callable(i)
175175 func stake () = {
176176 let a = allowed("stake")
177177 if ((a == a))
178178 then stakeForInt(toString(i.caller), i.payments[0])
179179 else throw("Strict value is not equal to itself.")
180180 }
181181
182182
183183
184184 @Callable(i)
185185 func stakeFor (address) = {
186186 let a = allowed("stakeFor")
187187 if ((a == a))
188188 then if (if ((address != toString(i.originCaller)))
189189 then !(contains(mainAddresses, toString(i.caller)))
190190 else false)
191191 then throw("denied")
192192 else stakeForInt(address, i.payments[0])
193193 else throw("Strict value is not equal to itself.")
194194 }
195195
196196
197197
198198 @Callable(i)
199199 func restakeFor (address) = {
200200 let a = allowed("restakeFor")
201201 if ((a == a))
202202 then if (!(contains(mainAddresses, toString(i.caller))))
203203 then throw("denied")
204204 else [IntegerEntry(storeLock(userSharesStore(address)), HEIGHT)]
205205 else throw("Strict value is not equal to itself.")
206206 }
207207
208208
209209
210210 @Callable(i)
211211 func unstake (pwrAmount) = {
212212 let a = allowed("unstake")
213213 if ((a == a))
214214 then {
215215 let account = toString(i.caller)
216216 if ((unstakeHeight(account) > HEIGHT))
217217 then throw("still locked in staking")
218218 else if ((unlockHeight(account) > HEIGHT))
219219 then throw("still locked in voting")
220220 else unstakeFromInt(account, account, pwrAmount)
221221 }
222222 else throw("Strict value is not equal to itself.")
223223 }
224224
225225
226226
227227 @Callable(i)
228228 func unstakeFrom (address,pwrAmount) = {
229229 let a = allowed("unstakeFrom")
230230 if ((a == a))
231231 then {
232232 let payoutAdr = toString(i.caller)
233233 if (!(contains(mainAddresses, payoutAdr)))
234234 then throw("denied")
235235 else unstakeFromInt(address, payoutAdr, pwrAmount)
236236 }
237237 else throw("Strict value is not equal to itself.")
238238 }
239239
240240
241241
242242 @Callable(i)
243243 func userShares (address) = $Tuple2(nil, shares(address))
244244
245245
246246
247247 @Callable(i)
248248 func userPower (address) = $Tuple2(nil, staked(address))
249249
250250
251251
252252 @Callable(i)
253253 func totalPower () = $Tuple2(nil, currentStaked)
254254
255255
256256
257257 @Callable(i)
258258 func totalShares () = $Tuple2(nil, valueOrElse(getInteger(totalSharesStore), 0))
259259
260260
261261
262262 @Callable(i)
263263 func init (conf) = [writeConstString(configAddressStore, conf)]
264264
265265
266+
267+@Callable(i)
268+func splitStaked () = {
269+ let marketingDao = "3PNT1mvyPgokCxbELJi5asrCvD23eatNrNP"
270+ let marketingTreasury = "3P2thwtbeBQb5cAodoBt2Esn8TsDfJx3hqN"
271+ let children = addressFromStringValue("3PBLPmkM3ThytNj6QeJyLTX154if8S6Cea5")
272+ let totalInvestments = getIntegerValue(children, ("investments_total_" + marketingDao))
273+ let totalSharesStore1 = userSharesStore(marketingTreasury)
274+ let totalShares = getIntegerValue(totalSharesStore1)
275+ let investors = ["3P2FMHavshKyciyu8cHvkVjkwppqXmz7nWm", "3P339s9WVxF2zGC2ew8NPzjRWbLvyTdqc9n", "3P4SiBokWCPGe2yytWVecaZmyjUEY1sY65p", "3P4fgnb6jYPE7jC6HvyZDZstWCrmct7X5BF", "3P4yrMZqNqfKiD42fLhdYkFdFvrroYiktFg", "3P5q4pzuFdJfKcuFwM8gSNkWYo6Ceb7SAuS", "3P61RpwP1FSaLmXsFcTCTLhjsGnGSRg764A", "3P6FjQcHZNggULXG8twvbjpsT1sBU8Sh2yv", "3P7Ek7RxbKw1vjG1eoAzKPtQ2q3GiJEzw9n", "3P8qVX189qpoTJZQQQdKS9endHK5sxWsvrd", "3P8qrja5wFfQcqiejX7E6Zs8aUPhv93k9FH", "3PDPr3PUzMuN3g4nFkLk2pAMan5zdizSamp", "3PFQ6i5KW75TH6PndPspWxaKv5VQqZ32Jz9", "3PFSsJ1woEJrPqur8apdmEBdw8HvyAu271W", "3PFfikovFT8WA1xsJoDTTxrL6nV5jie1Pty", "3PFvxLPUxCY9Et5uyfkYLE4SDZ5oJTCFWsG", "3PGoXne5BTvTkCqckVfeM44BhtpEej9q6sD", "3PHFAavxj2ePJqFB46H2aRGA7oQL6kz1rJJ", "3PPKWarUghNtYWW3viy3YSStxWmqGnywdW8", "3PQ7Avx7jpviuq4fkt33z5obG6LX8Yj2ETj", "3PQGtJCM4G8Gf51ebZNk4cWMM288CmR8FaS", "3PQhGvLgHdUt4GviS8wX5ZwqAZQPv5mnUoi"]
276+ func fold (acc,user) = {
277+ let investment = getIntegerValue(children, ((("investor_" + marketingDao) + "_") + user))
278+ let investorShares = fraction(totalShares, investment, totalInvestments)
279+ let userSharesStore1 = userSharesStore(user)
280+[changeBy(userSharesStore1, investorShares), IntegerEntry(storeHeight(userSharesStore1), HEIGHT)] :: acc
281+ }
282+
283+[DeleteEntry(totalSharesStore1), DeleteEntry(storeHeight(totalSharesStore1)), {
284+ let $l = investors
285+ let $s = size($l)
286+ let $acc0 = nil
287+ func $f0_1 ($a,$i) = if (($i >= $s))
288+ then $a
289+ else fold($a, $l[$i])
290+
291+ func $f0_2 ($a,$i) = if (($i >= $s))
292+ then $a
293+ else throw("List size exceeds 22")
294+
295+ $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22)
296+ }]
297+ }
298+
299+

github/deemru/w8io/6500d08 
40.39 ms