tx · 3dwwLKhoSMJmjsXhKrPU93xySYpTPEh79PBm6b1PJTkH

3Mungn3ygy3DzpbDUKPbJQaeNKfQHu9fkK8:  -0.01500000 Waves

2022.11.11 11:55 [2312267] smart account 3Mungn3ygy3DzpbDUKPbJQaeNKfQHu9fkK8 > SELF 0.00000000 Waves

{ "type": 13, "id": "3dwwLKhoSMJmjsXhKrPU93xySYpTPEh79PBm6b1PJTkH", "fee": 1500000, "feeAssetId": null, "timestamp": 1668156921183, "version": 2, "chainId": 84, "sender": "3Mungn3ygy3DzpbDUKPbJQaeNKfQHu9fkK8", "senderPublicKey": "6L7iBerXuPa5E74WCM6fLSB2VM1bMG9jgASH8tu9orHN", "proofs": [ "XUJbkS5qcP3vDVsvuVgLEjQXCDyioNmeNw2rwxSA15WJN9ENN1AuQbkxHjBT2cKtPQ4nsY79EAdgw2RUgtUBWRi" ], "script": "base64:BgIoCAISBwoFAQgBAQgSBgoEAQEICBIDCgEBEgQKAgEIEgQKAhEYEgASACsAD0dBTUVfVFlQRV9HUk9VUAIFR3JvdXAAEUdBTUVfVFlQRV9QTEFUT0ZGAghQbGF5LW9mZgAKR0FNRV9UWVBFUwkAzAgCBQ9HQU1FX1RZUEVfR1JPVVAJAMwIAgURR0FNRV9UWVBFX1BMQVRPRkYFA25pbAAEVVNEVAEgbySjyqsw3FIpmOgsYVruWn8jTcItdbvpnapU4NLQB8EAB01JTl9CRVQAwIQ9AAhPTkVfSE9VUgkAaAIJAGgCAAUAPADoBwARTU9ORVlfQk9YX0FERFJFRVMJAQdBZGRyZXNzAQEaAVSxYgy7BRV2F+zuKtUZtXyHmoiep9yqU84AB0JFVF9GRUUA9AMACUZFRV9TQ0FMRQCQTgAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADWtHYW1lU3RyYVRpbWUCDl9zdGFydEdhbWVUaW1lAAlrR2FtZVR5cGUCCV9HYW1lVHlwZQALa0xhc3RHYW1lSWQCDGxhc3RfZ2FtZV9pZAAKa1RvdGFsQmV0cwIKX3RvdGFsQmV0cwAHa1RvV2luQQIHX3RvV2luQQAHa1RvV2luQgIHX3RvV2luQgAHa09uRHJhdwIHX29uRHJhdwALa0dhbWVSZXN1bHQCB19yZXN1bHQABWtCYW5rAgVfYmFuawAKa0ZpbmFsVGltZQINX2ZpbmFsVGltZeKAnQARa1RvdGFsQmV0c0ZvclR5cGUCEV90b3RhbEJldHNGb3JUeXBlAAhrVXNlckJldAIIX3VzZXJCZXQACmtVc2VyUmVmSWQCBl9yZWZJZAAMa1VzZXJDbGFpbWVkAghfY2xhaW1lZAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwAGb3JhY2xlCQEHQWRkcmVzcwEBGgFXiv8IaJo1ukDNYXTyEjfepjfw+jjO6B44ARNnZXRCYXNlNThGcm9tT3JhY2xlAQNrZXkEByRtYXRjaDAJAJ0IAgUGb3JhY2xlBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAJANkEAQUGc3RyaW5nBAdub3RoaW5nBQckbWF0Y2gwCQACAQkArAICBQNrZXkCCGlzIGVtcHR5AAxhZG1pblB1YktleTEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MQAMYWRtaW5QdWJLZXkyCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTIADGFkbWluUHViS2V5MwkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkzAAZhY3RpdmUJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUHa0FjdGl2ZQYACmFjdGl2ZUdsb2IJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlBQtrQWN0aXZlR2xvYgYBCGlzQWN0aXZlAAMDBQZhY3RpdmUFCmFjdGl2ZUdsb2IHBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BB3N1c3BlbmQBBWNhdXNlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBwkAzAgCCQELU3RyaW5nRW50cnkCBQZrQ2F1c2UFBWNhdXNlBQNuaWwBDWdldFVzZXJCZXRLZXkEBHVzZXIGZ2FtZUlkBHR5cGUGcmVzdWx0CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUGZ2FtZUlkAgFfCQCkAwEFBHR5cGUCAV8FBnJlc3VsdAUIa1VzZXJCZXQBFmdldFRvdGFsQmV0c0ZvclR5cGVLZXkDBmdhbWVJZAR0eXBlBnJlc3VsdAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUGZ2FtZUlkAgFfCQCkAwEFBHR5cGUCAV8FBnJlc3VsdAURa1RvdGFsQmV0c0ZvclR5cGUBC3ZhbGlkYXRlQmV0AwhnYW1lVHlwZQR0eXBlBnJlc3VsdAMJAAACBQR0eXBlAAEDCQECIT0CCQCxAgEFBnJlc3VsdAABCQACAQIvR2FtZSByZXN1bHQgbXVzdCBjb250YWluIG9ubHkgb25lIGxldHRlcjogQSxCLEQDCQEBIQEJAQhjb250YWlucwICA0FCRAUGcmVzdWx0CQACAQIvR2FtZSByZXN1bHQgbXVzdCBjb250YWluIG9ubHkgb25lIGxldHRlcjogQSxCLEQDAwkAAAIFCGdhbWVUeXBlBRFHQU1FX1RZUEVfUExBVE9GRgkBASEBCQEIY29udGFpbnMCAgJBQgUGcmVzdWx0BwkAAgECLUdhbWUgcmVzdWx0IG11c3QgY29udGFpbiBvbmx5IG9uZSBsZXR0ZXI6IEEsQgYDCQAAAgUEdHlwZQACBAdzcGxpdGVkCQC1CQIFBnJlc3VsdAIBXwMJAQIhPQIJAJADAQUHc3BsaXRlZAACCQACAQIWSW5uY29ycmVjdCBnYW1lIHJlc3VsdAQGYmFsbHNBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQdzcGxpdGVkAAACFklubmNvcnJlY3QgZ2FtZSByZXN1bHQEBmJhbGxzQgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUHc3BsaXRlZAABAhZJbm5jb3JyZWN0IGdhbWUgcmVzdWx0AwkAAAIFBmJhbGxzQQUGYmFsbHNCCQACAQIvSW5uY29ycmVjdCBnYW1lIHJlc3VsdC4gQSBhbmQgQiBjYW5ub3QgYmUgZXF1YWwGAwkAAAIFBHR5cGUAAwQHc3BsaXRlZAkAtQkCBQZyZXN1bHQCAV8DCQECIT0CCQCQAwEFB3NwbGl0ZWQAAgkAAgECFklubmNvcnJlY3QgZ2FtZSByZXN1bHQEBHRlYW0JAJEDAgUHc3BsaXRlZAAABAtiYWxsc0Ftb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUHc3BsaXRlZAABAhZJbm5jb3JyZWN0IGdhbWUgcmVzdWx0AwkAZwIAAAULYmFsbHNBbW91bnQJAAIBAjtJbm5jb3JyZWN0IGdhbWUgcmVzdWx0LCBiYWxscyBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoZW4gMAMDCQECIT0CCQCxAgEFBHRlYW0AAQYJAQEhAQkBCGNvbnRhaW5zAgICQUIFBHRlYW0JAAIBAi1HYW1lIHJlc3VsdCBtdXN0IGNvbnRhaW4gb25seSBvbmUgbGV0dGVyOiBBLEIGBwEJY2FsY0NsYWltBQZnYW1lSWQLdXNlckFkZHJlc3MGcmVzdWx0BHR5cGUGYW1vdW50BAdzcGxkUmVzCQC1CQIFBnJlc3VsdAIBXwQLJHQwMzk2OTQ0OTUDCQAAAgUEdHlwZQABAwkAAAIFBnJlc3VsdAIBQQkAlQoDAgMxXzAAAQAAAwkAAAIFBnJlc3VsdAIBQgkAlQoDAgMwXzEAAAABCQCVCgMCAzFfMQABAAEDCQAAAgUEdHlwZQACCQCVCgMFBnJlc3VsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAQMJAAACBQR0eXBlAAMDCQAAAgkAkQMCBQdzcGxkUmVzAAACAUEJAJUKAwkArAICCQCRAwIFB3NwbGRSZXMAAQICXzAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzcGxkUmVzAAEAAAkAlQoDCQCsAgICAjBfCQCRAwIFB3NwbGRSZXMAAQAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc3BsZFJlcwABCQCVCgMFBnJlc3VsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAQQKZ2FtZVJlc3VsdAgFCyR0MDM5Njk0NDk1Al8xBAZiYWxsc0EIBQskdDAzOTY5NDQ5NQJfMgQGYmFsbHNCCAULJHQwMzk2OTQ0OTUCXzMEBGRpZmYDCQBmAgUGYmFsbHNBBQZiYWxsc0IJAGUCBQZiYWxsc0EFBmJhbGxzQgkAZQIFBmJhbGxzQgUGYmFsbHNBBAZ3aW5uZXIDCQBmAgUGYmFsbHNBBQZiYWxsc0ICAUEDCQBmAgUGYmFsbHNCBQZiYWxsc0ECAUICAUQEAkcxCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAABBQZ3aW5uZXIAAAMJAAACBQR0eXBlAAEFBmFtb3VudAAABAJHMgkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFmdldFRvdGFsQmV0c0ZvclR5cGVLZXkDBQZnYW1lSWQAAgUKZ2FtZVJlc3VsdAAAAwkAAAIFBHR5cGUAAgUGYW1vdW50AAAEAkczCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAADCQCsAgIJAKwCAgUGd2lubmVyAgFfCQCkAwEFBGRpZmYAAAMJAAACBQR0eXBlAAMFBmFtb3VudAAABA10b3RhbFdpblZhbHVlCQBkAgkAZAIFAkcxBQJHMgUCRzMECXRvdGFsQmV0cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUKa1RvdGFsQmV0cwAABQZhbW91bnQEC2JhbmtXaXRoRmVlCQBlAgUJdG90YWxCZXRzBQ10b3RhbFdpblZhbHVlBANmZWUJAGsDBQtiYW5rV2l0aEZlZQUHQkVUX0ZFRQUJRkVFX1NDQUxFBAFCCQBlAgULYmFua1dpdGhGZWUFA2ZlZQQDVUIxCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQENZ2V0VXNlckJldEtleQQFC3VzZXJBZGRyZXNzBQZnYW1lSWQAAQUGd2lubmVyAAADCQAAAgUEdHlwZQABBQZhbW91bnQAAAQDVUIyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQENZ2V0VXNlckJldEtleQQFC3VzZXJBZGRyZXNzBQZnYW1lSWQAAgUKZ2FtZVJlc3VsdAAAAwkAAAIFBHR5cGUAAgUGYW1vdW50AAAEA1VCMwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDWdldFVzZXJCZXRLZXkEBQt1c2VyQWRkcmVzcwUGZ2FtZUlkAAMJAKwCAgkArAICBQZ3aW5uZXICAV8JAKQDAQUEZGlmZgAAAwkAAAIFBHR5cGUAAwUGYW1vdW50AAAEEHRvdGFsV2luVmFsdWVNYXgJAGQCCQBkAgUCRzEJAGgCBQJHMgADCQBoAgUCRzMAAgQCRDEDCQAAAgUCRzEAAAAACQBrAwkAZAIFAkcxCQBrAwkAaAIFAkcyBQFCAAMFEHRvdGFsV2luVmFsdWVNYXgFA1VCMgUCRzEEAkQyAwkAAAIFAkcyAAAAAAkAawMJAGQCBQJHMgkAawMJAGgCBQJHMgUBQgADBRB0b3RhbFdpblZhbHVlTWF4BQNVQjIFAkcyBAJEMwMJAAACBQJHMwAAAAAJAGsDCQBkAgUCRzMJAGsDCQBoAgUCRzMFAUIAAwUQdG90YWxXaW5WYWx1ZU1heAUDVUIzBQJHMwQLY2xhaW1BbW91bnQJAGQCCQBkAgUCRDEFAkQyBQJEMwULY2xhaW1BbW91bnQHAWkBEXBvdGVudGlhbFdpbm5pbmdzBQZnYW1lSWQLdXNlckFkZHJlc3MGYW1vdW50BHR5cGUGcmVzdWx0BAtjbGFpbUFtb3VudAkBCWNhbGNDbGFpbQUFBmdhbWVJZAULdXNlckFkZHJlc3MFBnJlc3VsdAUEdHlwZQUGYW1vdW50CQCUCgIFA25pbAULY2xhaW1BbW91bnQBaQEDYmV0BAZnYW1lSWQEdHlwZQZyZXN1bHQFcmVmSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAZnSWRTdHIJAKQDAQUGZ2FtZUlkBAskdDA2NDgxNjU1NgkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQskdDA2NDgxNjU1NgJfMQQKcG10QXNzZXRJZAgFCyR0MDY0ODE2NTU2Al8yBA1nYW1lU3RhcnRUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQZnYW1lSWQFDWtHYW1lU3RyYVRpbWUAAAQIZ2FtZVR5cGUJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkApAMBBQZnYW1lSWQFCWtHYW1lVHlwZQMJAQIhPQIFCnBtdEFzc2V0SWQFBFVTRFQJAAIBAh5QYW15bWVudCBtdXN0IGJlIEluIFVTRFQgYXNzZXQDCQBmAgUHTUlOX0JFVAUJcG10QW1vdW50CQACAQkArAICCQCsAgICCE1pbiBiZXQgCQCkAwEJAGkCBQdNSU5fQkVUAMCEPQIEVVNEVAMJAAACBQ1nYW1lU3RhcnRUaW1lAAAJAAIBCQCsAgICGFRoZXJlIGlzIG5vIGdhbWUgd2l0aCBpZAkApAMBBQZnYW1lSWQDCQBnAgkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQhPTkVfSE9VUgUNZ2FtZVN0YXJ0VGltZQkAAgECKEJldHMgb24gdGhpcyBnYW1lIGFyZSBubyBsb25nZXIgYWNjZXB0ZWQDCQEBIQEJAQt2YWxpZGF0ZUJldAMFCGdhbWVUeXBlBQR0eXBlBQZyZXN1bHQJAAIBAhJJbmNvcnJlY3QgYmV0IHR5cGUEB3NwbGRSZXMJALUJAgUGcmVzdWx0AgFfBAp1c2VyQmV0S2V5CQENZ2V0VXNlckJldEtleQQFBHVzZXIFBmdhbWVJZAUEdHlwZQUGcmVzdWx0BBZ0b3RhbEJldHNGb3JUeXBlQmV0S2V5CQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAUEdHlwZQUGcmVzdWx0BAd1c2VyQmV0CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQp1c2VyQmV0S2V5AAAFCXBtdEFtb3VudAQTdG90YWxCZXRzRm9yVHlwZUJldAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUWdG90YWxCZXRzRm9yVHlwZUJldEtleQAABQlwbXRBbW91bnQECXRvdGFsQmV0cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQZnSWRTdHIFCmtUb3RhbEJldHMAAAUJcG10QW1vdW50BAZ0b1dpbkEJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUGZ0lkU3RyBQdrVG9XaW5BAAADAwkAAAIFBHR5cGUAAQkAAAIFBnJlc3VsdAIBQQcFCXBtdEFtb3VudAMDCQAAAgUEdHlwZQACCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAQcFCXBtdEFtb3VudAMDCQAAAgUEdHlwZQADCQAAAgkAkQMCBQdzcGxkUmVzAAACAUEHBQlwbXRBbW91bnQAAAQGdG9XaW5CCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBmdJZFN0cgUHa1RvV2luQgAAAwMJAAACBQR0eXBlAAEJAAACBQZyZXN1bHQCAUIHBQlwbXRBbW91bnQDAwkAAAIFBHR5cGUAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzcGxkUmVzAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzcGxkUmVzAAAHBQlwbXRBbW91bnQDAwkAAAIFBHR5cGUAAwkAAAIJAJEDAgUHc3BsZFJlcwAAAgFCBwUJcG10QW1vdW50AAAEBm9uRHJhdwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQZnSWRTdHIFB2tPbkRyYXcAAAMDCQAAAgUEdHlwZQABCQAAAgUGcmVzdWx0AgFEBwUJcG10QW1vdW50AAAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKdXNlckJldEtleQUHdXNlckJldAkAzAgCCQEMSW50ZWdlckVudHJ5AgUWdG90YWxCZXRzRm9yVHlwZUJldEtleQUTdG90YWxCZXRzRm9yVHlwZUJldAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZnSWRTdHIFCmtUb3RhbEJldHMFCXRvdGFsQmV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZnSWRTdHIFB2tUb1dpbkEFBnRvV2luQQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZnSWRTdHIFB2tUb1dpbkIFBnRvV2luQgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZnSWRTdHIFB2tPbkRyYXcFBm9uRHJhdwUDbmlsAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIFBHVzZXIFCmtVc2VyUmVmSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR1c2VyBQprVXNlclJlZklkBQVyZWZJZAUDbmlsBQNuaWwBaQEFY2xhaW0BBmdhbWVJZAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEBmdJZFN0cgkApAMBBQZnYW1lSWQECWZpbmFsVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgUGZ0lkU3RyBQprRmluYWxUaW1lAiRZb3UgY2FuIGNsYWltIG9ubHkgYWZ0ZXIgZ2FtZSBmaW5pc2gDCQBmAggFCWxhc3RCbG9jawl0aW1lc3RhbXAJAGQCBQlmaW5hbFRpbWUFCE9ORV9IT1VSCQACAQI3WW91IGNhbiBjbGFpbSBvbmx5IGFmdGVyIG9uZSBob3VyIHBhc3MgYWZ0ZXIgZmluYWwgdGltZQMJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBmdJZFN0cgUMa1VzZXJDbGFpbWVkCQACAQIWWW91IGFyZSBhbHJlZHkgY2xhaW1lZAQKZ2FtZVJlc3VsdAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQZnSWRTdHIFC2tHYW1lUmVzdWx0BAtjbGFpbUFtb3VudAkBCWNhbGNDbGFpbQUFBmdhbWVJZAUEdXNlcgUKZ2FtZVJlc3VsdAAAAAADCQAAAgULY2xhaW1BbW91bnQAAAkAAgECEE5vdGhpbmcgdG8gY2xhaW0JAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUGZ0lkU3RyBQxrVXNlckNsYWltZWQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULY2xhaW1BbW91bnQFBFVTRFQFA25pbAULY2xhaW1BbW91bnQBaQELZ2FtZVN1bW1hcnkCBmdhbWVJZAZyZXN1bHQEBmdJZFN0cgkApAMBBQZnYW1lSWQEDWdhbWVTdGFydFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUNa0dhbWVTdHJhVGltZQAAAwkAAAIFDWdhbWVTdGFydFRpbWUAAAkAAgEJAKwCAgIYVGhlcmUgaXMgbm8gZ2FtZSB3aXRoIGlkCQCkAwEFBmdhbWVJZAQHc3BsZFJlcwkAtQkCBQZyZXN1bHQCAV8EBmJhbGxzQQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUHc3BsZFJlcwAAAhZJbm5jb3JyZWN0IGdhbWUgcmVzdWx0BAZiYWxsc0IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFB3NwbGRSZXMAAQIWSW5uY29ycmVjdCBnYW1lIHJlc3VsdAQEZGlmZgMJAGYCBQZiYWxsc0EFBmJhbGxzQgkAZQIFBmJhbGxzQQUGYmFsbHNCCQBlAgUGYmFsbHNCBQZiYWxsc0EEBndpbm5lcgMJAGYCBQZiYWxsc0EFBmJhbGxzQgIBQQMJAGYCBQZiYWxsc0IFBmJhbGxzQQIBQgIBRAQNdG90YWxXaW5UeXBlMQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAABBQZ3aW5uZXIAAAQNdG90YWxXaW5UeXBlMgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAACBQZyZXN1bHQAAAQNdG90YWxXaW5UeXBlMwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAADCQCsAgIJAKwCAgUGd2lubmVyAgFfCQCkAwEFBGRpZmYAAAQNdG90YWxXaW5WYWx1ZQkAZAIJAGQCBQ10b3RhbFdpblR5cGUxBQ10b3RhbFdpblR5cGUyBQ10b3RhbFdpblR5cGUzBAl0b3RhbEJldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUKa1RvdGFsQmV0cwAABAtiYW5rV2l0aEZlZQkAZQIFCXRvdGFsQmV0cwUNdG90YWxXaW5WYWx1ZQQNJHQwMTA2MTgxMDc3NgMJAAACBQ10b3RhbFdpblZhbHVlAAAJAJQKAgULYmFua1dpdGhGZWUAAAQBZgkAawMFC2JhbmtXaXRoRmVlBQdCRVRfRkVFBQlGRUVfU0NBTEUJAJQKAgUBZgkAZQIFC2JhbmtXaXRoRmVlBQFmBANmZWUIBQ0kdDAxMDYxODEwNzc2Al8xBARiYW5rCAUNJHQwMTA2MTgxMDc3NgJfMgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBmdJZFN0cgULa0dhbWVSZXN1bHQFBnJlc3VsdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZnSWRTdHIFBWtCYW5rBQRiYW5rCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBmdJZFN0cgUKa0ZpbmFsVGltZQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwURTU9ORVlfQk9YX0FERFJFRVMFA2ZlZQUEVVNEVAUDbmlsAWkBCWluaXRHYW1lcwIOc3RhcnRHYW1lVGltZXMFdHlwZXMKAQhpbml0R2FtZQIDYWNjDXN0YXJ0R2FtZVRpbWUEDSR0MDExMTYwMTExOTQFA2FjYwQHZW50cmllcwgFDSR0MDExMTYwMTExOTQCXzEECmxhc3RHYW1lSWQIBQ0kdDAxMTE2MDExMTk0Al8yBAFqCAUNJHQwMTExNjAxMTE5NAJfMwQJbmV3R2FtZUlkCQBkAgUKbGFzdEdhbWVJZAABAwkAZgIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ1zdGFydEdhbWVUaW1lCQACAQIjc3RhcnRHYW1lVGltZSBtdXN0IGJlIGluIHRoZSBmdXR1cmUDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQpHQU1FX1RZUEVTCQCRAwIFBXR5cGVzBQFqCQACAQkArAICAiF0eXBlIG11c3QgY29udGFpbiBvbmUgb2YgdmFsdWVzOiAJALkJAgUKR0FNRV9UWVBFUwIBLAQLZ2FtZUVudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApAMBBQluZXdHYW1lSWQFDWtHYW1lU3RyYVRpbWUFDXN0YXJ0R2FtZVRpbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCkAwEFCW5ld0dhbWVJZAUJa0dhbWVUeXBlCQCRAwIFBXR5cGVzBQFqBQNuaWwJAJUKAwkAzggCBQdlbnRyaWVzBQtnYW1lRW50cmllcwUJbmV3R2FtZUlkCQBkAgUBagABBApsYXN0R2FtZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tMYXN0R2FtZUlkAAAEDSR0MDExNzM3MTE4MjIKAAIkbAUOc3RhcnRHYW1lVGltZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUKbGFzdEdhbWVJZAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhpbml0R2FtZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAxnYW1lc0VudHJpZXMIBQ0kdDAxMTczNzExODIyAl8xBAduZXdMR0lkCAUNJHQwMTE3MzcxMTgyMgJfMgkAzQgCBQxnYW1lc0VudHJpZXMJAQxJbnRlZ2VyRW50cnkCBQtrTGFzdEdhbWVJZAUHbmV3TEdJZAFpAQhzaHV0ZG93bgADCQEBIQEFBmFjdGl2ZQkAAgEJAKwCAgIiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrQ2F1c2UCGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAMFBmFjdGl2ZQkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwA4rk1tw==", "height": 2312267, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: a9WDsvvtRGtMyGwqxUymkougA2zvG4wg29as56HLzu4 Next: BQWHHgZYQNjvRUCxxz6GLeAh6uRD4Sdssdf9WrAYu3EV Diff:
OldNewDifferences
143143 else false
144144
145145
146-@Callable(i)
147-func potentialWinnings (gameId,userAddress,amount,type,result) = {
146+func calcClaim (gameId,userAddress,result,type,amount) = {
148147 let spldRes = split(result, "_")
149- let $t039904398 = if ((type == 1))
148+ let $t039694495 = if ((type == 1))
150149 then if ((result == "A"))
151150 then $Tuple3("1_0", 1, 0)
152151 else if ((result == "B"))
154153 else $Tuple3("1_1", 1, 1)
155154 else if ((type == 2))
156155 then $Tuple3(result, parseIntValue(spldRes[0]), parseIntValue(spldRes[1]))
157- else if ((spldRes[0] == "A"))
158- then $Tuple3((spldRes[1] + "_0"), parseIntValue(spldRes[1]), 0)
159- else $Tuple3(("0_" + spldRes[1]), 0, parseIntValue(spldRes[1]))
160- let gameResult = $t039904398._1
161- let ballsA = $t039904398._2
162- let ballsB = $t039904398._3
156+ else if ((type == 3))
157+ then if ((spldRes[0] == "A"))
158+ then $Tuple3((spldRes[1] + "_0"), parseIntValue(spldRes[1]), 0)
159+ else $Tuple3(("0_" + spldRes[1]), 0, parseIntValue(spldRes[1]))
160+ else $Tuple3(result, parseIntValue(spldRes[0]), parseIntValue(spldRes[1]))
161+ let gameResult = $t039694495._1
162+ let ballsA = $t039694495._2
163+ let ballsB = $t039694495._3
163164 let diff = if ((ballsA > ballsB))
164165 then (ballsA - ballsB)
165166 else (ballsB - ballsA)
194195 let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
195196 let D1 = if ((G1 == 0))
196197 then 0
197- else (((G1 + ((G1 / totalWinValueMax) * B)) * UB1) / G1)
198+ else fraction((G1 + fraction((G2 * B), 3, totalWinValueMax)), UB2, G1)
198199 let D2 = if ((G2 == 0))
199200 then 0
200- else (((G2 + (((G2 * 3) / totalWinValueMax) * B)) * UB2) / G2)
201+ else fraction((G2 + fraction((G2 * B), 3, totalWinValueMax)), UB2, G2)
201202 let D3 = if ((G3 == 0))
202203 then 0
203- else (((G3 + (((G3 * 2) / totalWinValueMax) * B)) * UB3) / G3)
204+ else fraction((G3 + fraction((G3 * B), 3, totalWinValueMax)), UB3, G3)
204205 let claimAmount = ((D1 + D2) + D3)
206+ claimAmount
207+ }
208+
209+
210+@Callable(i)
211+func potentialWinnings (gameId,userAddress,amount,type,result) = {
212+ let claimAmount = calcClaim(gameId, userAddress, result, type, amount)
205213 $Tuple2(nil, claimAmount)
206214 }
207215
211219 func bet (gameId,type,result,refId) = valueOrElse(isActive(), {
212220 let user = toString(i.caller)
213221 let gIdStr = toString(gameId)
214- let $t061246199 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215- let pmtAmount = $t061246199._1
216- let pmtAssetId = $t061246199._2
222+ let $t064816556 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223+ let pmtAmount = $t064816556._1
224+ let pmtAssetId = $t064816556._2
217225 let gameStartTime = valueOrElse(getInteger(this, (toString(gameId) + kGameStraTime)), 0)
218226 let gameType = getStringValue(this, (toString(gameId) + kGameType))
219227 if ((pmtAssetId != USDT))
283291 then throw("You are alredy claimed")
284292 else {
285293 let gameResult = getStringValue(this, (gIdStr + kGameResult))
286- let spldRes = split(gameResult, "_")
287- let ballsA = valueOrErrorMessage(parseInt(spldRes[0]), "Inncorrect game result")
288- let ballsB = valueOrErrorMessage(parseInt(spldRes[1]), "Inncorrect game result")
289- let diff = if ((ballsA > ballsB))
290- then (ballsA - ballsB)
291- else (ballsB - ballsA)
292- let winner = if ((ballsA > ballsB))
293- then "A"
294- else if ((ballsB > ballsA))
295- then "B"
296- else "D"
297- let B = getIntegerValue(this, (gIdStr + kBank))
298- let UB1 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 1, winner)), 0)
299- let UB2 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 2, gameResult)), 0)
300- let UB3 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 3, ((winner + "_") + toString(diff)))), 0)
301- let G1 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0)
302- let G2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, gameResult)), 0)
303- let G3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0)
304- let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
305- let D1 = if ((G1 == 0))
306- then 0
307- else (((G1 + ((G1 / totalWinValueMax) * B)) * UB1) / G1)
308- let D2 = if ((G2 == 0))
309- then 0
310- else (((G2 + (((G2 * 3) / totalWinValueMax) * B)) * UB2) / G2)
311- let D3 = if ((G3 == 0))
312- then 0
313- else (((G3 + (((G3 * 2) / totalWinValueMax) * B)) * UB3) / G3)
314- let claimAmount = ((D1 + D2) + D3)
294+ let claimAmount = calcClaim(gameId, user, gameResult, 0, 0)
315295 if ((claimAmount == 0))
316296 then throw("Nothing to claim")
317297 else $Tuple2([BooleanEntry((((user + "_") + gIdStr) + kUserClaimed), true), ScriptTransfer(i.caller, claimAmount, USDT)], claimAmount)
344324 let totalWinValue = ((totalWinType1 + totalWinType2) + totalWinType3)
345325 let totalBets = valueOrElse(getInteger(this, (toString(gameId) + kTotalBets)), 0)
346326 let bankWithFee = (totalBets - totalWinValue)
347- let $t01151811676 = if ((totalWinValue == 0))
327+ let $t01061810776 = if ((totalWinValue == 0))
348328 then $Tuple2(bankWithFee, 0)
349329 else {
350330 let f = fraction(bankWithFee, BET_FEE, FEE_SCALE)
351331 $Tuple2(f, (bankWithFee - f))
352332 }
353- let fee = $t01151811676._1
354- let bank = $t01151811676._2
333+ let fee = $t01061810776._1
334+ let bank = $t01061810776._2
355335 [StringEntry((gIdStr + kGameResult), result), IntegerEntry((gIdStr + kBank), bank), IntegerEntry((gIdStr + kFinalTime), lastBlock.timestamp), ScriptTransfer(MONEY_BOX_ADDREES, fee, USDT)]
356336 }
357337 }
361341 @Callable(i)
362342 func initGames (startGameTimes,types) = {
363343 func initGame (acc,startGameTime) = {
364- let $t01206012094 = acc
365- let entries = $t01206012094._1
366- let lastGameId = $t01206012094._2
367- let j = $t01206012094._3
344+ let $t01116011194 = acc
345+ let entries = $t01116011194._1
346+ let lastGameId = $t01116011194._2
347+ let j = $t01116011194._3
368348 let newGameId = (lastGameId + 1)
369349 if ((lastBlock.timestamp > startGameTime))
370350 then throw("startGameTime must be in the future")
377357 }
378358
379359 let lastGameId = valueOrElse(getInteger(this, kLastGameId), 0)
380- let $t01263712722 = {
360+ let $t01173711822 = {
381361 let $l = startGameTimes
382362 let $s = size($l)
383363 let $acc0 = $Tuple3(nil, lastGameId, 0)
391371
392372 $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($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)
393373 }
394- let gamesEntries = $t01263712722._1
395- let newLGId = $t01263712722._2
374+ let gamesEntries = $t01173711822._1
375+ let newLGId = $t01173711822._2
396376 (gamesEntries :+ IntegerEntry(kLastGameId, newLGId))
397377 }
398378
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let GAME_TYPE_GROUP = "Group"
55
66 let GAME_TYPE_PLATOFF = "Play-off"
77
88 let GAME_TYPES = [GAME_TYPE_GROUP, GAME_TYPE_PLATOFF]
99
1010 let USDT = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
1111
1212 let MIN_BET = 1000000
1313
1414 let ONE_HOUR = ((5 * 60) * 1000)
1515
1616 let MONEY_BOX_ADDREES = Address(base58'3N65zqVKchaFdW4gS7FxCRibjfkVgJvo7PT')
1717
1818 let BET_FEE = 500
1919
2020 let FEE_SCALE = 10000
2121
2222 let kActive = "active"
2323
2424 let kActiveGlob = "active_all_contracts"
2525
2626 let kCause = "shutdown_cause"
2727
2828 let kGameStraTime = "_startGameTime"
2929
3030 let kGameType = "_GameType"
3131
3232 let kLastGameId = "last_game_id"
3333
3434 let kTotalBets = "_totalBets"
3535
3636 let kToWinA = "_toWinA"
3737
3838 let kToWinB = "_toWinB"
3939
4040 let kOnDraw = "_onDraw"
4141
4242 let kGameResult = "_result"
4343
4444 let kBank = "_bank"
4545
4646 let kFinalTime = "_finalTimeā€"
4747
4848 let kTotalBetsForType = "_totalBetsForType"
4949
5050 let kUserBet = "_userBet"
5151
5252 let kUserRefId = "_refId"
5353
5454 let kUserClaimed = "_claimed"
5555
5656 let kAdminPubKey1 = "admin_pub_1"
5757
5858 let kAdminPubKey2 = "admin_pub_2"
5959
6060 let kAdminPubKey3 = "admin_pub_3"
6161
6262 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
6363
6464 func getBase58FromOracle (key) = match getString(oracle, key) {
6565 case string: String =>
6666 fromBase58String(string)
6767 case nothing =>
6868 throw((key + "is empty"))
6969 }
7070
7171
7272 let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
7373
7474 let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
7575
7676 let adminPubKey3 = getBase58FromOracle(kAdminPubKey3)
7777
7878 let active = valueOrElse(getBoolean(this, kActive), true)
7979
8080 let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
8181
8282 func isActive () = if (if (active)
8383 then activeGlob
8484 else false)
8585 then unit
8686 else throw("DApp is inactive at this moment")
8787
8888
8989 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
9090 then unit
9191 else throw("Only admin can call this function")
9292
9393
9494 func suspend (cause) = [BooleanEntry(kActive, false), StringEntry(kCause, cause)]
9595
9696
9797 func getUserBetKey (user,gameId,type,result) = (((((((user + "_") + toString(gameId)) + "_") + toString(type)) + "_") + result) + kUserBet)
9898
9999
100100 func getTotalBetsForTypeKey (gameId,type,result) = (((((toString(gameId) + "_") + toString(type)) + "_") + result) + kTotalBetsForType)
101101
102102
103103 func validateBet (gameType,type,result) = if ((type == 1))
104104 then if ((size(result) != 1))
105105 then throw("Game result must contain only one letter: A,B,D")
106106 else if (!(contains("ABD", result)))
107107 then throw("Game result must contain only one letter: A,B,D")
108108 else if (if ((gameType == GAME_TYPE_PLATOFF))
109109 then !(contains("AB", result))
110110 else false)
111111 then throw("Game result must contain only one letter: A,B")
112112 else true
113113 else if ((type == 2))
114114 then {
115115 let splited = split(result, "_")
116116 if ((size(splited) != 2))
117117 then throw("Inncorrect game result")
118118 else {
119119 let ballsA = valueOrErrorMessage(parseInt(splited[0]), "Inncorrect game result")
120120 let ballsB = valueOrErrorMessage(parseInt(splited[1]), "Inncorrect game result")
121121 if ((ballsA == ballsB))
122122 then throw("Inncorrect game result. A and B cannot be equal")
123123 else true
124124 }
125125 }
126126 else if ((type == 3))
127127 then {
128128 let splited = split(result, "_")
129129 if ((size(splited) != 2))
130130 then throw("Inncorrect game result")
131131 else {
132132 let team = splited[0]
133133 let ballsAmount = valueOrErrorMessage(parseInt(splited[1]), "Inncorrect game result")
134134 if ((0 >= ballsAmount))
135135 then throw("Inncorrect game result, balls amount must be greater then 0")
136136 else if (if ((size(team) != 1))
137137 then true
138138 else !(contains("AB", team)))
139139 then throw("Game result must contain only one letter: A,B")
140140 else true
141141 }
142142 }
143143 else false
144144
145145
146-@Callable(i)
147-func potentialWinnings (gameId,userAddress,amount,type,result) = {
146+func calcClaim (gameId,userAddress,result,type,amount) = {
148147 let spldRes = split(result, "_")
149- let $t039904398 = if ((type == 1))
148+ let $t039694495 = if ((type == 1))
150149 then if ((result == "A"))
151150 then $Tuple3("1_0", 1, 0)
152151 else if ((result == "B"))
153152 then $Tuple3("0_1", 0, 1)
154153 else $Tuple3("1_1", 1, 1)
155154 else if ((type == 2))
156155 then $Tuple3(result, parseIntValue(spldRes[0]), parseIntValue(spldRes[1]))
157- else if ((spldRes[0] == "A"))
158- then $Tuple3((spldRes[1] + "_0"), parseIntValue(spldRes[1]), 0)
159- else $Tuple3(("0_" + spldRes[1]), 0, parseIntValue(spldRes[1]))
160- let gameResult = $t039904398._1
161- let ballsA = $t039904398._2
162- let ballsB = $t039904398._3
156+ else if ((type == 3))
157+ then if ((spldRes[0] == "A"))
158+ then $Tuple3((spldRes[1] + "_0"), parseIntValue(spldRes[1]), 0)
159+ else $Tuple3(("0_" + spldRes[1]), 0, parseIntValue(spldRes[1]))
160+ else $Tuple3(result, parseIntValue(spldRes[0]), parseIntValue(spldRes[1]))
161+ let gameResult = $t039694495._1
162+ let ballsA = $t039694495._2
163+ let ballsB = $t039694495._3
163164 let diff = if ((ballsA > ballsB))
164165 then (ballsA - ballsB)
165166 else (ballsB - ballsA)
166167 let winner = if ((ballsA > ballsB))
167168 then "A"
168169 else if ((ballsB > ballsA))
169170 then "B"
170171 else "D"
171172 let G1 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0) + (if ((type == 1))
172173 then amount
173174 else 0))
174175 let G2 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, gameResult)), 0) + (if ((type == 2))
175176 then amount
176177 else 0))
177178 let G3 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0) + (if ((type == 3))
178179 then amount
179180 else 0))
180181 let totalWinValue = ((G1 + G2) + G3)
181182 let totalBets = (valueOrElse(getInteger(this, (toString(gameId) + kTotalBets)), 0) + amount)
182183 let bankWithFee = (totalBets - totalWinValue)
183184 let fee = fraction(bankWithFee, BET_FEE, FEE_SCALE)
184185 let B = (bankWithFee - fee)
185186 let UB1 = (valueOrElse(getInteger(this, getUserBetKey(userAddress, gameId, 1, winner)), 0) + (if ((type == 1))
186187 then amount
187188 else 0))
188189 let UB2 = (valueOrElse(getInteger(this, getUserBetKey(userAddress, gameId, 2, gameResult)), 0) + (if ((type == 2))
189190 then amount
190191 else 0))
191192 let UB3 = (valueOrElse(getInteger(this, getUserBetKey(userAddress, gameId, 3, ((winner + "_") + toString(diff)))), 0) + (if ((type == 3))
192193 then amount
193194 else 0))
194195 let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
195196 let D1 = if ((G1 == 0))
196197 then 0
197- else (((G1 + ((G1 / totalWinValueMax) * B)) * UB1) / G1)
198+ else fraction((G1 + fraction((G2 * B), 3, totalWinValueMax)), UB2, G1)
198199 let D2 = if ((G2 == 0))
199200 then 0
200- else (((G2 + (((G2 * 3) / totalWinValueMax) * B)) * UB2) / G2)
201+ else fraction((G2 + fraction((G2 * B), 3, totalWinValueMax)), UB2, G2)
201202 let D3 = if ((G3 == 0))
202203 then 0
203- else (((G3 + (((G3 * 2) / totalWinValueMax) * B)) * UB3) / G3)
204+ else fraction((G3 + fraction((G3 * B), 3, totalWinValueMax)), UB3, G3)
204205 let claimAmount = ((D1 + D2) + D3)
206+ claimAmount
207+ }
208+
209+
210+@Callable(i)
211+func potentialWinnings (gameId,userAddress,amount,type,result) = {
212+ let claimAmount = calcClaim(gameId, userAddress, result, type, amount)
205213 $Tuple2(nil, claimAmount)
206214 }
207215
208216
209217
210218 @Callable(i)
211219 func bet (gameId,type,result,refId) = valueOrElse(isActive(), {
212220 let user = toString(i.caller)
213221 let gIdStr = toString(gameId)
214- let $t061246199 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215- let pmtAmount = $t061246199._1
216- let pmtAssetId = $t061246199._2
222+ let $t064816556 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223+ let pmtAmount = $t064816556._1
224+ let pmtAssetId = $t064816556._2
217225 let gameStartTime = valueOrElse(getInteger(this, (toString(gameId) + kGameStraTime)), 0)
218226 let gameType = getStringValue(this, (toString(gameId) + kGameType))
219227 if ((pmtAssetId != USDT))
220228 then throw("Pamyment must be In USDT asset")
221229 else if ((MIN_BET > pmtAmount))
222230 then throw((("Min bet " + toString((MIN_BET / 1000000))) + "USDT"))
223231 else if ((gameStartTime == 0))
224232 then throw(("There is no game with id" + toString(gameId)))
225233 else if (((lastBlock.timestamp + ONE_HOUR) >= gameStartTime))
226234 then throw("Bets on this game are no longer accepted")
227235 else if (!(validateBet(gameType, type, result)))
228236 then throw("Incorrect bet type")
229237 else {
230238 let spldRes = split(result, "_")
231239 let userBetKey = getUserBetKey(user, gameId, type, result)
232240 let totalBetsForTypeBetKey = getTotalBetsForTypeKey(gameId, type, result)
233241 let userBet = (valueOrElse(getInteger(this, userBetKey), 0) + pmtAmount)
234242 let totalBetsForTypeBet = (valueOrElse(getInteger(this, totalBetsForTypeBetKey), 0) + pmtAmount)
235243 let totalBets = (valueOrElse(getInteger(this, (gIdStr + kTotalBets)), 0) + pmtAmount)
236244 let toWinA = (valueOrElse(getInteger(this, (gIdStr + kToWinA)), 0) + (if (if ((type == 1))
237245 then (result == "A")
238246 else false)
239247 then pmtAmount
240248 else if (if ((type == 2))
241249 then (parseIntValue(spldRes[0]) > parseIntValue(spldRes[1]))
242250 else false)
243251 then pmtAmount
244252 else if (if ((type == 3))
245253 then (spldRes[0] == "A")
246254 else false)
247255 then pmtAmount
248256 else 0))
249257 let toWinB = (valueOrElse(getInteger(this, (gIdStr + kToWinB)), 0) + (if (if ((type == 1))
250258 then (result == "B")
251259 else false)
252260 then pmtAmount
253261 else if (if ((type == 2))
254262 then (parseIntValue(spldRes[1]) > parseIntValue(spldRes[0]))
255263 else false)
256264 then pmtAmount
257265 else if (if ((type == 3))
258266 then (spldRes[0] == "B")
259267 else false)
260268 then pmtAmount
261269 else 0))
262270 let onDraw = (valueOrElse(getInteger(this, (gIdStr + kOnDraw)), 0) + (if (if ((type == 1))
263271 then (result == "D")
264272 else false)
265273 then pmtAmount
266274 else 0))
267275 ([IntegerEntry(userBetKey, userBet), IntegerEntry(totalBetsForTypeBetKey, totalBetsForTypeBet), IntegerEntry((gIdStr + kTotalBets), totalBets), IntegerEntry((gIdStr + kToWinA), toWinA), IntegerEntry((gIdStr + kToWinB), toWinB), IntegerEntry((gIdStr + kOnDraw), onDraw)] ++ (if (!(isDefined(getString(this, (user + kUserRefId)))))
268276 then [StringEntry((user + kUserRefId), refId)]
269277 else nil))
270278 }
271279 })
272280
273281
274282
275283 @Callable(i)
276284 func claim (gameId) = valueOrElse(isActive(), {
277285 let user = toString(i.caller)
278286 let gIdStr = toString(gameId)
279287 let finalTime = valueOrErrorMessage(getInteger(this, (gIdStr + kFinalTime)), "You can claim only after game finish")
280288 if ((lastBlock.timestamp > (finalTime + ONE_HOUR)))
281289 then throw("You can claim only after one hour pass after final time")
282290 else if (isDefined(getBoolean(this, (((user + "_") + gIdStr) + kUserClaimed))))
283291 then throw("You are alredy claimed")
284292 else {
285293 let gameResult = getStringValue(this, (gIdStr + kGameResult))
286- let spldRes = split(gameResult, "_")
287- let ballsA = valueOrErrorMessage(parseInt(spldRes[0]), "Inncorrect game result")
288- let ballsB = valueOrErrorMessage(parseInt(spldRes[1]), "Inncorrect game result")
289- let diff = if ((ballsA > ballsB))
290- then (ballsA - ballsB)
291- else (ballsB - ballsA)
292- let winner = if ((ballsA > ballsB))
293- then "A"
294- else if ((ballsB > ballsA))
295- then "B"
296- else "D"
297- let B = getIntegerValue(this, (gIdStr + kBank))
298- let UB1 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 1, winner)), 0)
299- let UB2 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 2, gameResult)), 0)
300- let UB3 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 3, ((winner + "_") + toString(diff)))), 0)
301- let G1 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0)
302- let G2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, gameResult)), 0)
303- let G3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0)
304- let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
305- let D1 = if ((G1 == 0))
306- then 0
307- else (((G1 + ((G1 / totalWinValueMax) * B)) * UB1) / G1)
308- let D2 = if ((G2 == 0))
309- then 0
310- else (((G2 + (((G2 * 3) / totalWinValueMax) * B)) * UB2) / G2)
311- let D3 = if ((G3 == 0))
312- then 0
313- else (((G3 + (((G3 * 2) / totalWinValueMax) * B)) * UB3) / G3)
314- let claimAmount = ((D1 + D2) + D3)
294+ let claimAmount = calcClaim(gameId, user, gameResult, 0, 0)
315295 if ((claimAmount == 0))
316296 then throw("Nothing to claim")
317297 else $Tuple2([BooleanEntry((((user + "_") + gIdStr) + kUserClaimed), true), ScriptTransfer(i.caller, claimAmount, USDT)], claimAmount)
318298 }
319299 })
320300
321301
322302
323303 @Callable(i)
324304 func gameSummary (gameId,result) = {
325305 let gIdStr = toString(gameId)
326306 let gameStartTime = valueOrElse(getInteger(this, (toString(gameId) + kGameStraTime)), 0)
327307 if ((gameStartTime == 0))
328308 then throw(("There is no game with id" + toString(gameId)))
329309 else {
330310 let spldRes = split(result, "_")
331311 let ballsA = valueOrErrorMessage(parseInt(spldRes[0]), "Inncorrect game result")
332312 let ballsB = valueOrErrorMessage(parseInt(spldRes[1]), "Inncorrect game result")
333313 let diff = if ((ballsA > ballsB))
334314 then (ballsA - ballsB)
335315 else (ballsB - ballsA)
336316 let winner = if ((ballsA > ballsB))
337317 then "A"
338318 else if ((ballsB > ballsA))
339319 then "B"
340320 else "D"
341321 let totalWinType1 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0)
342322 let totalWinType2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, result)), 0)
343323 let totalWinType3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0)
344324 let totalWinValue = ((totalWinType1 + totalWinType2) + totalWinType3)
345325 let totalBets = valueOrElse(getInteger(this, (toString(gameId) + kTotalBets)), 0)
346326 let bankWithFee = (totalBets - totalWinValue)
347- let $t01151811676 = if ((totalWinValue == 0))
327+ let $t01061810776 = if ((totalWinValue == 0))
348328 then $Tuple2(bankWithFee, 0)
349329 else {
350330 let f = fraction(bankWithFee, BET_FEE, FEE_SCALE)
351331 $Tuple2(f, (bankWithFee - f))
352332 }
353- let fee = $t01151811676._1
354- let bank = $t01151811676._2
333+ let fee = $t01061810776._1
334+ let bank = $t01061810776._2
355335 [StringEntry((gIdStr + kGameResult), result), IntegerEntry((gIdStr + kBank), bank), IntegerEntry((gIdStr + kFinalTime), lastBlock.timestamp), ScriptTransfer(MONEY_BOX_ADDREES, fee, USDT)]
356336 }
357337 }
358338
359339
360340
361341 @Callable(i)
362342 func initGames (startGameTimes,types) = {
363343 func initGame (acc,startGameTime) = {
364- let $t01206012094 = acc
365- let entries = $t01206012094._1
366- let lastGameId = $t01206012094._2
367- let j = $t01206012094._3
344+ let $t01116011194 = acc
345+ let entries = $t01116011194._1
346+ let lastGameId = $t01116011194._2
347+ let j = $t01116011194._3
368348 let newGameId = (lastGameId + 1)
369349 if ((lastBlock.timestamp > startGameTime))
370350 then throw("startGameTime must be in the future")
371351 else if (!(containsElement(GAME_TYPES, types[j])))
372352 then throw(("type must contain one of values: " + makeString(GAME_TYPES, ",")))
373353 else {
374354 let gameEntries = [IntegerEntry((toString(newGameId) + kGameStraTime), startGameTime), StringEntry((toString(newGameId) + kGameType), types[j])]
375355 $Tuple3((entries ++ gameEntries), newGameId, (j + 1))
376356 }
377357 }
378358
379359 let lastGameId = valueOrElse(getInteger(this, kLastGameId), 0)
380- let $t01263712722 = {
360+ let $t01173711822 = {
381361 let $l = startGameTimes
382362 let $s = size($l)
383363 let $acc0 = $Tuple3(nil, lastGameId, 0)
384364 func $f0_1 ($a,$i) = if (($i >= $s))
385365 then $a
386366 else initGame($a, $l[$i])
387367
388368 func $f0_2 ($a,$i) = if (($i >= $s))
389369 then $a
390370 else throw("List size exceeds 50")
391371
392372 $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($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)
393373 }
394- let gamesEntries = $t01263712722._1
395- let newLGId = $t01263712722._2
374+ let gamesEntries = $t01173711822._1
375+ let newLGId = $t01173711822._2
396376 (gamesEntries :+ IntegerEntry(kLastGameId, newLGId))
397377 }
398378
399379
400380
401381 @Callable(i)
402382 func shutdown () = if (!(active))
403383 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, kCause), "the cause wasn't specified")))
404384 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
405385 then throw("Only admin can call this function")
406386 else suspend("Paused by admin")
407387
408388
409389
410390 @Callable(i)
411391 func activate () = if (active)
412392 then throw("DApp is already active")
413393 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
414394 then throw("Only admin can call this function")
415395 else [BooleanEntry(kActive, true), DeleteEntry(kCause)]
416396
417397

github/deemru/w8io/169f3d6 
59.79 ms