tx · E1abgJgWboM2XPmh4q97CSYoYmb1VmTvXaVe98V4pTXh

3Mungn3ygy3DzpbDUKPbJQaeNKfQHu9fkK8:  -0.01200000 Waves

2022.11.10 17:50 [2311192] smart account 3Mungn3ygy3DzpbDUKPbJQaeNKfQHu9fkK8 > SELF 0.00000000 Waves

{ "type": 13, "id": "E1abgJgWboM2XPmh4q97CSYoYmb1VmTvXaVe98V4pTXh", "fee": 1200000, "feeAssetId": null, "timestamp": 1668091853991, "version": 2, "chainId": 84, "sender": "3Mungn3ygy3DzpbDUKPbJQaeNKfQHu9fkK8", "senderPublicKey": "6L7iBerXuPa5E74WCM6fLSB2VM1bMG9jgASH8tu9orHN", "proofs": [ "2XpDHTYMSA6Lqy9pJdfrMYpWCUGMgrENeyShFC4hqcEMhQoxpC5SBSRTwqTyGyDKEgXS9h9rWWvMCDYAqQwRNm3W" ], "script": "base64:BgIfCAISBgoEAQEICBIDCgEBEgQKAgEIEgQKAhEYEgASACsAD0dBTUVfVFlQRV9HUk9VUAIFR3JvdXAAEUdBTUVfVFlQRV9QTEFUT0ZGAghQbGF5LW9mZgAKR0FNRV9UWVBFUwkAzAgCBQ9HQU1FX1RZUEVfR1JPVVAJAMwIAgURR0FNRV9UWVBFX1BMQVRPRkYFA25pbAAEVVNEVAEgbySjyqsw3FIpmOgsYVruWn8jTcItdbvpnapU4NLQB8EAB01JTl9CRVQAwIQ9AAhPTkVfSE9VUgkAaAIJAGgCAAUAPADoBwARTU9ORVlfQk9YX0FERFJFRVMJAQdBZGRyZXNzAQEaAVSxYgy7BRV2F+zuKtUZtXyHmoiep9yqU84AB0JFVF9GRUUA9AMACUZFRV9TQ0FMRQCQTgAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADWtHYW1lU3RyYVRpbWUCDl9zdGFydEdhbWVUaW1lAAlrR2FtZVR5cGUCDl9zdGFydEdhbWVUaW1lAAtrTGFzdEdhbWVJZAIMbGFzdF9nYW1lX2lkAAprVG90YWxCZXRzAgpfdG90YWxCZXRzAAdrVG9XaW5BAgdfdG9XaW5BAAdrVG9XaW5CAgdfdG9XaW5BAAdrT25EcmF3Agdfb25EcmF3AAtrR2FtZVJlc3VsdAIHX3Jlc3VsdAAFa0JhbmsCBV9iYW5rAAprRmluYWxUaW1lAg1fZmluYWxUaW1l4oCdABFrVG90YWxCZXRzRm9yVHlwZQIRX3RvdGFsQmV0c0ZvclR5cGUACGtVc2VyQmV0AghfdXNlckJldAAKa1VzZXJSZWZJZAIGX3JlZklkAAxrVXNlckNsYWltZWQCCF9jbGFpbWVkAA1rQWRtaW5QdWJLZXkxAgthZG1pbl9wdWJfMQANa0FkbWluUHViS2V5MgILYWRtaW5fcHViXzIADWtBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMABmFjdGl2ZQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQdrQWN0aXZlBgAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgEIaXNBY3RpdmUAAwMFBmFjdGl2ZQUKYWN0aXZlR2xvYgcFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAENZ2V0VXNlckJldEtleQQEdXNlcgZnYW1lSWQEdHlwZQZyZXN1bHQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZnYW1lSWQCAV8JAKQDAQUEdHlwZQIBXwUGcmVzdWx0BQhrVXNlckJldAEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMGZ2FtZUlkBHR5cGUGcmVzdWx0CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQZnYW1lSWQCAV8JAKQDAQUEdHlwZQIBXwUGcmVzdWx0BRFrVG90YWxCZXRzRm9yVHlwZQELdmFsaWRhdGVCZXQDCGdhbWVUeXBlBHR5cGUGcmVzdWx0AwkAAAIFBHR5cGUAAQMJAQIhPQIJALECAQUGcmVzdWx0AAEJAAIBAi9HYW1lIHJlc3VsdCBtdXN0IGNvbnRhaW4gb25seSBvbmUgbGV0dGVyOiBBLEIsRAMJAQEhAQkBCGNvbnRhaW5zAgIDQUJEBQZyZXN1bHQJAAIBAi9HYW1lIHJlc3VsdCBtdXN0IGNvbnRhaW4gb25seSBvbmUgbGV0dGVyOiBBLEIsRAMDCQAAAgUIZ2FtZVR5cGUFEUdBTUVfVFlQRV9QTEFUT0ZGCQEBIQEJAQhjb250YWlucwICAkFCBQZyZXN1bHQHCQACAQItR2FtZSByZXN1bHQgbXVzdCBjb250YWluIG9ubHkgb25lIGxldHRlcjogQSxCBgMJAAACBQR0eXBlAAIEB3NwbGl0ZWQJALUJAgUGcmVzdWx0AgFfAwkBAiE9AgkAkAMBBQdzcGxpdGVkAAIJAAIBAhZJbm5jb3JyZWN0IGdhbWUgcmVzdWx0BAZiYWxsc0EJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFB3NwbGl0ZWQAAAIWSW5uY29ycmVjdCBnYW1lIHJlc3VsdAQGYmFsbHNCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQdzcGxpdGVkAAECFklubmNvcnJlY3QgZ2FtZSByZXN1bHQDCQAAAgUGYmFsbHNBBQZiYWxsc0IJAAIBAi9Jbm5jb3JyZWN0IGdhbWUgcmVzdWx0LiBBIGFuZCBCIGNhbm5vdCBiZSBlcXVhbAYDCQAAAgUEdHlwZQADBAdzcGxpdGVkCQC1CQIFBnJlc3VsdAIBXwMJAQIhPQIJAJADAQUHc3BsaXRlZAACCQACAQIWSW5uY29ycmVjdCBnYW1lIHJlc3VsdAQEdGVhbQkAkQMCBQdzcGxpdGVkAAAEC2JhbGxzQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQdzcGxpdGVkAAECFklubmNvcnJlY3QgZ2FtZSByZXN1bHQDCQBnAgAABQtiYWxsc0Ftb3VudAkAAgECO0lubmNvcnJlY3QgZ2FtZSByZXN1bHQsIGJhbGxzIGFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhlbiAwAwMJAQIhPQIJALECAQUEdGVhbQABBgkBASEBCQEIY29udGFpbnMCAgJBQgUEdGVhbQkAAgECLUdhbWUgcmVzdWx0IG11c3QgY29udGFpbiBvbmx5IG9uZSBsZXR0ZXI6IEEsQgYHARFwb3RlbnRpYWxXaW5uaW5ncwUGZ2FtZUlkC3VzZXJBZGRyZXNzBmFtb3VudAR0eXBlBnJlc3VsdAQHc3BsZFJlcwkAtQkCBQZyZXN1bHQCAV8ECyR0MDM5ODI0MzkwAwkAAAIFBHR5cGUAAQMJAAACBQZyZXN1bHQCAUEJAJUKAwIDMV8wAAEAAAMJAAACBQZyZXN1bHQCAUIJAJUKAwIDMF8xAAAAAQkAlQoDAgMxXzEAAQABAwkAAAIFBHR5cGUAAgkAlQoDBQZyZXN1bHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzcGxkUmVzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzcGxkUmVzAAEDCQAAAgkAkQMCBQdzcGxkUmVzAAACAUEJAJUKAwkArAICCQCRAwIFB3NwbGRSZXMAAQICXzAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzcGxkUmVzAAEAAAkAlQoDCQCsAgICAjBfCQCRAwIFB3NwbGRSZXMAAQAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc3BsZFJlcwABBApnYW1lUmVzdWx0CAULJHQwMzk4MjQzOTACXzEEBmJhbGxzQQgFCyR0MDM5ODI0MzkwAl8yBAZiYWxsc0IIBQskdDAzOTgyNDM5MAJfMwQEZGlmZgMJAGYCBQZiYWxsc0EFBmJhbGxzQgkAZQIFBmJhbGxzQQUGYmFsbHNCCQBlAgUGYmFsbHNCBQZiYWxsc0EEBndpbm5lcgMJAGYCBQZiYWxsc0EFBmJhbGxzQgIBQQMJAGYCBQZiYWxsc0IFBmJhbGxzQQIBQgIBRAQCRzEJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZnZXRUb3RhbEJldHNGb3JUeXBlS2V5AwUGZ2FtZUlkAAEFBndpbm5lcgAAAwkAAAIFBHR5cGUAAQUGYW1vdW50AAAEAkcyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAACBQZyZXN1bHQAAAMJAAACBQR0eXBlAAIFBmFtb3VudAAABAJHMwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFmdldFRvdGFsQmV0c0ZvclR5cGVLZXkDBQZnYW1lSWQAAwkArAICCQCsAgIFBndpbm5lcgIBXwkApAMBBQRkaWZmAAADCQAAAgUEdHlwZQADBQZhbW91bnQAAAQNdG90YWxXaW5WYWx1ZQkAZAIJAGQCBQJHMQUCRzIFAkczBAl0b3RhbEJldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUKa1RvdGFsQmV0cwAABAtiYW5rV2l0aEZlZQkAZQIFCXRvdGFsQmV0cwUNdG90YWxXaW5WYWx1ZQQDZmVlCQBrAwULYmFua1dpdGhGZWUFB0JFVF9GRUUFCUZFRV9TQ0FMRQQBQgkAZQIFC2JhbmtXaXRoRmVlBQNmZWUEA1VCMQkAZAIJAQt2YWx1ZU9yRWxzZQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ1nZXRVc2VyQmV0S2V5BAULdXNlckFkZHJlc3MFBmdhbWVJZAABBQZ3aW5uZXIAAAMJAAACBQR0eXBlAAEFBmFtb3VudAAABANVQjIJAGQCCQELdmFsdWVPckVsc2UCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQENZ2V0VXNlckJldEtleQQFC3VzZXJBZGRyZXNzBQZnYW1lSWQAAgUKZ2FtZVJlc3VsdAAAAwkAAAIFBHR5cGUAAQUGYW1vdW50AAAEA1VCMwkAZAIJAQt2YWx1ZU9yRWxzZQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ1nZXRVc2VyQmV0S2V5BAULdXNlckFkZHJlc3MFBmdhbWVJZAADCQCsAgIJAKwCAgUGd2lubmVyAgFfCQCkAwEFBGRpZmYAAAMJAAACBQR0eXBlAAEFBmFtb3VudAAABBB0b3RhbFdpblZhbHVlTWF4CQBkAgkAZAIFAkcxCQBoAgUCRzIAAwkAaAIFAkczAAIEAkQxCQBpAgkAaAIJAGQCBQJHMQkAaAIJAGkCBQJHMQUQdG90YWxXaW5WYWx1ZU1heAUBQgUDVUIxBQJHMQQCRDIJAGkCCQBoAgkAZAIFAkcyCQBoAgkAaQIFAkcyBRB0b3RhbFdpblZhbHVlTWF4BQFCBQNVQjIFAkcyBAJEMwkAaQIJAGgCCQBkAgUCRzMJAGgCCQBpAgUCRzMFEHRvdGFsV2luVmFsdWVNYXgFAUIFA1VCMwUCRzMEC2NsYWltQW1vdW50CQBkAgkAZAIFAkQxBQJEMgUCRDMFC2NsYWltQW1vdW50BgFpAQNiZXQEBmdhbWVJZAR0eXBlBnJlc3VsdAVyZWZJZAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEBmdJZFN0cgkApAMBBQZnYW1lSWQECyR0MDYwMzU2MTEwCQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFCyR0MDYwMzU2MTEwAl8xBApwbXRBc3NldElkCAULJHQwNjAzNTYxMTACXzIEDWdhbWVTdGFydFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUNa0dhbWVTdHJhVGltZQAABAhnYW1lVHlwZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUJa0dhbWVUeXBlAwkBAiE9AgUKcG10QXNzZXRJZAUEVVNEVAkAAgECHlBhbXltZW50IG11c3QgYmUgSW4gVVNEVCBhc3NldAMJAGYCBQdNSU5fQkVUBQlwbXRBbW91bnQJAAIBCQCsAgIJAKwCAgIITWluIGJldCAJAKQDAQkAaQIFB01JTl9CRVQAwIQ9AgRVU0RUAwkAAAIFDWdhbWVTdGFydFRpbWUAAAkAAgEJAKwCAgIYVGhlcmUgaXMgbm8gZ2FtZSB3aXRoIGlkCQCkAwEFBmdhbWVJZAMJAGcCCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCE9ORV9IT1VSBQ1nYW1lU3RhcnRUaW1lCQACAQIoQmV0cyBvbiB0aGlzIGdhbWUgYXJlIG5vIGxvbmdlciBhY2NlcHRlZAMJAQEhAQkBC3ZhbGlkYXRlQmV0AwUIZ2FtZVR5cGUFBHR5cGUFBnJlc3VsdAkAAgECEkluY29ycmVjdCBiZXQgdHlwZQQHc3BsZFJlcwkAtQkCBQZyZXN1bHQCAV8ECnVzZXJCZXRLZXkJAQ1nZXRVc2VyQmV0S2V5BAUEdXNlcgUGZ2FtZUlkBQR0eXBlBQZyZXN1bHQEFnRvdGFsQmV0c0ZvclR5cGVCZXRLZXkJARZnZXRUb3RhbEJldHNGb3JUeXBlS2V5AwUGZ2FtZUlkBQR0eXBlBQZyZXN1bHQEB3VzZXJCZXQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCnVzZXJCZXRLZXkAAAUJcG10QW1vdW50BBN0b3RhbEJldHNGb3JUeXBlQmV0CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRZ0b3RhbEJldHNGb3JUeXBlQmV0S2V5AAAFCXBtdEFtb3VudAQJdG90YWxCZXRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBmdJZFN0cgUKa1RvdGFsQmV0cwAABQlwbXRBbW91bnQEBnRvV2luQQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQZnSWRTdHIFB2tUb1dpbkEAAAMDCQAAAgUEdHlwZQABCQAAAgUGcmVzdWx0AgFBBwUJcG10QW1vdW50AwMJAAACBQR0eXBlAAIJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc3BsZFJlcwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc3BsZFJlcwABBwUJcG10QW1vdW50AwMJAAACBQR0eXBlAAMJAAACCQCRAwIFB3NwbGRSZXMAAAIBQQcFCXBtdEFtb3VudAAABAZ0b1dpbkIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUGZ0lkU3RyBQdrVG9XaW5CAAADAwkAAAIFBHR5cGUAAQkAAAIFBnJlc3VsdAIBQgcFCXBtdEFtb3VudAMDCQAAAgUEdHlwZQACCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NwbGRSZXMAAAcFCXBtdEFtb3VudAMDCQAAAgUEdHlwZQADCQAAAgkAkQMCBQdzcGxkUmVzAAACAUIHBQlwbXRBbW91bnQAAAQGb25EcmF3CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBmdJZFN0cgUHa09uRHJhdwAAAwMJAAACBQR0eXBlAAEJAAACBQZyZXN1bHQCAUQHBQlwbXRBbW91bnQAAAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQp1c2VyQmV0S2V5BQd1c2VyQmV0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZ0b3RhbEJldHNGb3JUeXBlQmV0S2V5BRN0b3RhbEJldHNGb3JUeXBlQmV0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBmdJZFN0cgUKa1RvdGFsQmV0cwUJdG90YWxCZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBmdJZFN0cgUHa1RvV2luQQUGdG9XaW5BCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBmdJZFN0cgUHa1RvV2luQgUGdG9XaW5CCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBmdJZFN0cgUHa09uRHJhdwUGb25EcmF3BQNuaWwDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFCmtVc2VyUmVmSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUKa1VzZXJSZWZJZAUFcmVmSWQFA25pbAUDbmlsAWkBBWNsYWltAQZnYW1lSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAZnSWRTdHIJAKQDAQUGZ2FtZUlkBAlmaW5hbFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIFBmdJZFN0cgUKa0ZpbmFsVGltZQIkWW91IGNhbiBjbGFpbSBvbmx5IGFmdGVyIGdhbWUgZmluaXNoAwkAZgIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQBkAgUJZmluYWxUaW1lBQhPTkVfSE9VUgkAAgECN1lvdSBjYW4gY2xhaW0gb25seSBhZnRlciBvbmUgaG91ciBwYXNzIGFmdGVyIGZpbmFsIHRpbWUDCQEJaXNEZWZpbmVkAQkAmwgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQZnSWRTdHIFDGtVc2VyQ2xhaW1lZAkAAgECFllvdSBhcmUgYWxyZWR5IGNsYWltZWQECmdhbWVSZXN1bHQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUGZ0lkU3RyBQtrR2FtZVJlc3VsdAQHc3BsZFJlcwkAtQkCBQpnYW1lUmVzdWx0AgFfBAZiYWxsc0EJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFB3NwbGRSZXMAAAIWSW5uY29ycmVjdCBnYW1lIHJlc3VsdAQGYmFsbHNCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQdzcGxkUmVzAAECFklubmNvcnJlY3QgZ2FtZSByZXN1bHQEBGRpZmYDCQBmAgUGYmFsbHNBBQZiYWxsc0IJAGUCBQZiYWxsc0EFBmJhbGxzQgkAZQIFBmJhbGxzQgUGYmFsbHNBBAZ3aW5uZXIDCQBmAgUGYmFsbHNBBQZiYWxsc0ICAUEDCQBmAgUGYmFsbHNCBQZiYWxsc0ECAUICAUQEAUIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUGZ0lkU3RyBQVrQmFuawQDVUIxCQELdmFsdWVPckVsc2UCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQENZ2V0VXNlckJldEtleQQFBHVzZXIFBmdhbWVJZAABBQZ3aW5uZXIAAAQDVUIyCQELdmFsdWVPckVsc2UCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQENZ2V0VXNlckJldEtleQQFBHVzZXIFBmdhbWVJZAACBQpnYW1lUmVzdWx0AAAEA1VCMwkBC3ZhbHVlT3JFbHNlAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDWdldFVzZXJCZXRLZXkEBQR1c2VyBQZnYW1lSWQAAwkArAICCQCsAgIFBndpbm5lcgIBXwkApAMBBQRkaWZmAAAEAkcxCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZnZXRUb3RhbEJldHNGb3JUeXBlS2V5AwUGZ2FtZUlkAAEFBndpbm5lcgAABAJHMgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAACBQpnYW1lUmVzdWx0AAAEAkczCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZnZXRUb3RhbEJldHNGb3JUeXBlS2V5AwUGZ2FtZUlkAAMJAKwCAgkArAICBQZ3aW5uZXICAV8JAKQDAQUEZGlmZgAABBB0b3RhbFdpblZhbHVlTWF4CQBkAgkAZAIFAkcxCQBoAgUCRzIAAwkAaAIFAkczAAIEAkQxCQBpAgkAaAIJAGQCBQJHMQkAaAIJAGkCBQJHMQUQdG90YWxXaW5WYWx1ZU1heAUBQgUDVUIxBQJHMQQCRDIJAGkCCQBoAgkAZAIFAkcyCQBoAgkAaQIFAkcyBRB0b3RhbFdpblZhbHVlTWF4BQFCBQNVQjIFAkcyBAJEMwkAaQIJAGgCCQBkAgUCRzMJAGgCCQBpAgUCRzMFEHRvdGFsV2luVmFsdWVNYXgFAUIFA1VCMwUCRzMEC2NsYWltQW1vdW50CQBkAgkAZAIFAkQxBQJEMgUCRDMDCQAAAgULY2xhaW1BbW91bnQAAAkAAgECEE5vdGhpbmcgdG8gY2xhaW0JAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUGZ0lkU3RyBQxrVXNlckNsYWltZWQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULY2xhaW1BbW91bnQFBFVTRFQFA25pbAULY2xhaW1BbW91bnQBaQELZ2FtZVN1bW1hcnkCBmdhbWVJZAZyZXN1bHQEBmdJZFN0cgkApAMBBQZnYW1lSWQEDWdhbWVTdGFydFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUNa0dhbWVTdHJhVGltZQAAAwkAAAIFDWdhbWVTdGFydFRpbWUAAAkAAgEJAKwCAgIYVGhlcmUgaXMgbm8gZ2FtZSB3aXRoIGlkCQCkAwEFBmdhbWVJZAQHc3BsZFJlcwkAtQkCBQZyZXN1bHQCAV8EBmJhbGxzQQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUHc3BsZFJlcwAAAhZJbm5jb3JyZWN0IGdhbWUgcmVzdWx0BAZiYWxsc0IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFB3NwbGRSZXMAAQIWSW5uY29ycmVjdCBnYW1lIHJlc3VsdAQEZGlmZgMJAGYCBQZiYWxsc0EFBmJhbGxzQgkAZQIFBmJhbGxzQQUGYmFsbHNCCQBlAgUGYmFsbHNCBQZiYWxsc0EEBndpbm5lcgMJAGYCBQZiYWxsc0EFBmJhbGxzQgIBQQMJAGYCBQZiYWxsc0IFBmJhbGxzQQIBQgIBRAQNdG90YWxXaW5UeXBlMQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAABBQZ3aW5uZXIAAAQNdG90YWxXaW5UeXBlMgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAACBQZyZXN1bHQAAAQNdG90YWxXaW5UeXBlMwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0VG90YWxCZXRzRm9yVHlwZUtleQMFBmdhbWVJZAADCQCsAgIJAKwCAgUGd2lubmVyAgFfCQCkAwEFBGRpZmYAAAQNdG90YWxXaW5WYWx1ZQkAZAIJAGQCBQ10b3RhbFdpblR5cGUxBQ10b3RhbFdpblR5cGUyBQ10b3RhbFdpblR5cGUzBAl0b3RhbEJldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFBmdhbWVJZAUKa1RvdGFsQmV0cwAABAtiYW5rV2l0aEZlZQkAZQIFCXRvdGFsQmV0cwUNdG90YWxXaW5WYWx1ZQQNJHQwMTEzMzgxMTQ5NgMJAAACBQ10b3RhbFdpblZhbHVlAAAJAJQKAgULYmFua1dpdGhGZWUAAAQBZgkAawMFC2JhbmtXaXRoRmVlBQdCRVRfRkVFBQlGRUVfU0NBTEUJAJQKAgUBZgkAZQIFC2JhbmtXaXRoRmVlBQFmBANmZWUIBQ0kdDAxMTMzODExNDk2Al8xBARiYW5rCAUNJHQwMTEzMzgxMTQ5NgJfMgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBmdJZFN0cgULa0dhbWVSZXN1bHQFBnJlc3VsdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZnSWRTdHIFBWtCYW5rBQRiYW5rCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBmdJZFN0cgUKa0ZpbmFsVGltZQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwURTU9ORVlfQk9YX0FERFJFRVMFA2ZlZQUEVVNEVAUDbmlsAWkBCWluaXRHYW1lcwIOc3RhcnRHYW1lVGltZXMFdHlwZXMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkKAQhpbml0R2FtZQIDYWNjDXN0YXJ0R2FtZVRpbWUEDSR0MDExOTA3MTE5NDEFA2FjYwQHZW50cmllcwgFDSR0MDExOTA3MTE5NDECXzEECmxhc3RHYW1lSWQIBQ0kdDAxMTkwNzExOTQxAl8yBAFqCAUNJHQwMTE5MDcxMTk0MQJfMwQJbmV3R2FtZUlkCQBkAgUKbGFzdEdhbWVJZAABAwkAZgIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ1zdGFydEdhbWVUaW1lCQACAQIjc3RhcnRHYW1lVGltZSBtdXN0IGJlIGluIHRoZSBmdXR1cmUDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQpHQU1FX1RZUEVTCQCRAwIFBXR5cGVzBQFqCQACAQkArAICAiF0eXBlIG11c3QgY29udGFpbiBvbmUgb2YgdmFsdWVzOiAJALkJAgUKR0FNRV9UWVBFUwIBLAQLZ2FtZUVudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApAMBBQluZXdHYW1lSWQFDWtHYW1lU3RyYVRpbWUFDXN0YXJ0R2FtZVRpbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCkAwEFCW5ld0dhbWVJZAUJa0dhbWVUeXBlCQCRAwIFBXR5cGVzBQFqBQNuaWwJAJUKAwkAzggCBQdlbnRyaWVzBQtnYW1lRW50cmllcwUJbmV3R2FtZUlkCQBkAgUBagABBApsYXN0R2FtZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tMYXN0R2FtZUlkAAAEDSR0MDEyNDg0MTI1NjkKAAIkbAUOc3RhcnRHYW1lVGltZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUKbGFzdEdhbWVJZAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhpbml0R2FtZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAxnYW1lc0VudHJpZXMIBQ0kdDAxMjQ4NDEyNTY5Al8xBAduZXdMR0lkCAUNJHQwMTI0ODQxMjU2OQJfMgkAzQgCBQxnYW1lc0VudHJpZXMJAQxJbnRlZ2VyRW50cnkCBQtrTGFzdEdhbWVJZAUHbmV3TEdJZAFpAQhzaHV0ZG93bgADCQEBIQEFBmFjdGl2ZQkAAgEJAKwCAgIiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrQ2F1c2UCGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAMFBmFjdGl2ZQkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwAcyT0vg==", "height": 2311192, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8TE1aBaYJwLFC6nSom7wGrcgEQBwxiAqLye4bmfJa5L2 Next: 7zJaSoFg7TcagEHL9WX2YqhBkFSQcTwze9GLAmpCUB7D Diff:
OldNewDifferences
170170 let G1 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0) + (if ((type == 1))
171171 then amount
172172 else 0))
173- let G2 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, result)), 0) + (if ((type == 2))
173+ let G2 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, result)), 0) + (if ((type == 2))
174174 then amount
175175 else 0))
176- let G3 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, ((winner + "_") + toString(diff)))), 0) + (if ((type == 3))
176+ let G3 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0) + (if ((type == 3))
177177 then amount
178178 else 0))
179179 let totalWinValue = ((G1 + G2) + G3)
187187 let UB2 = (valueOrElse(getIntegerValue(this, getUserBetKey(userAddress, gameId, 2, gameResult)), 0) + (if ((type == 1))
188188 then amount
189189 else 0))
190- let UB3 = (valueOrElse(getIntegerValue(this, getUserBetKey(userAddress, gameId, 1, ((winner + "_") + toString(diff)))), 0) + (if ((type == 1))
190+ let UB3 = (valueOrElse(getIntegerValue(this, getUserBetKey(userAddress, gameId, 3, ((winner + "_") + toString(diff)))), 0) + (if ((type == 1))
191191 then amount
192192 else 0))
193193 let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
289289 let B = getIntegerValue(this, (gIdStr + kBank))
290290 let UB1 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 1, winner)), 0)
291291 let UB2 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 2, gameResult)), 0)
292- let UB3 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 1, ((winner + "_") + toString(diff)))), 0)
292+ let UB3 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 3, ((winner + "_") + toString(diff)))), 0)
293293 let G1 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0)
294- let G2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, gameResult)), 0)
295- let G3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, ((winner + "_") + toString(diff)))), 0)
294+ let G2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, gameResult)), 0)
295+ let G3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0)
296296 let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
297297 let D1 = (((G1 + ((G1 / totalWinValueMax) * B)) * UB1) / G1)
298298 let D2 = (((G2 + ((G2 / totalWinValueMax) * B)) * UB2) / G2)
325325 then "B"
326326 else "D"
327327 let totalWinType1 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0)
328- let totalWinType2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, result)), 0)
329- let totalWinType3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, ((winner + "_") + toString(diff)))), 0)
328+ let totalWinType2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, result)), 0)
329+ let totalWinType3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0)
330330 let totalWinValue = ((totalWinType1 + totalWinType2) + totalWinType3)
331331 let totalBets = valueOrElse(getInteger(this, (toString(gameId) + kTotalBets)), 0)
332332 let bankWithFee = (totalBets - totalWinValue)
345345
346346
347347 @Callable(i)
348-func initGames (startGameTimes,types) = {
348+func initGames (startGameTimes,types) = valueOrElse(isAdminCall(i), {
349349 func initGame (acc,startGameTime) = {
350- let $t01188011913 = acc
351- let entries = $t01188011913._1
352- let newGameId = $t01188011913._2
353- let j = $t01188011913._3
350+ let $t01190711941 = acc
351+ let entries = $t01190711941._1
352+ let lastGameId = $t01190711941._2
353+ let j = $t01190711941._3
354+ let newGameId = (lastGameId + 1)
354355 if ((lastBlock.timestamp > startGameTime))
355356 then throw("startGameTime must be in the future")
356357 else if (!(containsElement(GAME_TYPES, types[j])))
357358 then throw(("type must contain one of values: " + makeString(GAME_TYPES, ",")))
358359 else {
359360 let gameEntries = [IntegerEntry((toString(newGameId) + kGameStraTime), startGameTime), StringEntry((toString(newGameId) + kGameType), types[j])]
360- $Tuple3((entries ++ nil), (newGameId + 1), (j + 1))
361+ $Tuple3((entries ++ gameEntries), newGameId, (j + 1))
361362 }
362363 }
363364
364365 let lastGameId = valueOrElse(getInteger(this, kLastGameId), 0)
365- let $t01241612505 = {
366+ let $t01248412569 = {
366367 let $l = startGameTimes
367368 let $s = size($l)
368- let $acc0 = $Tuple3(nil, (lastGameId + 1), 0)
369+ let $acc0 = $Tuple3(nil, lastGameId, 0)
369370 func $f0_1 ($a,$i) = if (($i >= $s))
370371 then $a
371372 else initGame($a, $l[$i])
376377
377378 $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)
378379 }
379- let gamesEntries = $t01241612505._1
380- let newLGId = $t01241612505._2
380+ let gamesEntries = $t01248412569._1
381+ let newLGId = $t01248412569._2
381382 (gamesEntries :+ IntegerEntry(kLastGameId, newLGId))
382- }
383+ })
383384
384385
385386
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 = "_startGameTime"
3131
3232 let kLastGameId = "last_game_id"
3333
3434 let kTotalBets = "_totalBets"
3535
3636 let kToWinA = "_toWinA"
3737
3838 let kToWinB = "_toWinA"
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
146146 func potentialWinnings (gameId,userAddress,amount,type,result) = {
147147 let spldRes = split(result, "_")
148148 let $t039824390 = if ((type == 1))
149149 then if ((result == "A"))
150150 then $Tuple3("1_0", 1, 0)
151151 else if ((result == "B"))
152152 then $Tuple3("0_1", 0, 1)
153153 else $Tuple3("1_1", 1, 1)
154154 else if ((type == 2))
155155 then $Tuple3(result, parseIntValue(spldRes[0]), parseIntValue(spldRes[1]))
156156 else if ((spldRes[0] == "A"))
157157 then $Tuple3((spldRes[1] + "_0"), parseIntValue(spldRes[1]), 0)
158158 else $Tuple3(("0_" + spldRes[1]), 0, parseIntValue(spldRes[1]))
159159 let gameResult = $t039824390._1
160160 let ballsA = $t039824390._2
161161 let ballsB = $t039824390._3
162162 let diff = if ((ballsA > ballsB))
163163 then (ballsA - ballsB)
164164 else (ballsB - ballsA)
165165 let winner = if ((ballsA > ballsB))
166166 then "A"
167167 else if ((ballsB > ballsA))
168168 then "B"
169169 else "D"
170170 let G1 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0) + (if ((type == 1))
171171 then amount
172172 else 0))
173- let G2 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, result)), 0) + (if ((type == 2))
173+ let G2 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, result)), 0) + (if ((type == 2))
174174 then amount
175175 else 0))
176- let G3 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, ((winner + "_") + toString(diff)))), 0) + (if ((type == 3))
176+ let G3 = (valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0) + (if ((type == 3))
177177 then amount
178178 else 0))
179179 let totalWinValue = ((G1 + G2) + G3)
180180 let totalBets = valueOrElse(getInteger(this, (toString(gameId) + kTotalBets)), 0)
181181 let bankWithFee = (totalBets - totalWinValue)
182182 let fee = fraction(bankWithFee, BET_FEE, FEE_SCALE)
183183 let B = (bankWithFee - fee)
184184 let UB1 = (valueOrElse(getIntegerValue(this, getUserBetKey(userAddress, gameId, 1, winner)), 0) + (if ((type == 1))
185185 then amount
186186 else 0))
187187 let UB2 = (valueOrElse(getIntegerValue(this, getUserBetKey(userAddress, gameId, 2, gameResult)), 0) + (if ((type == 1))
188188 then amount
189189 else 0))
190- let UB3 = (valueOrElse(getIntegerValue(this, getUserBetKey(userAddress, gameId, 1, ((winner + "_") + toString(diff)))), 0) + (if ((type == 1))
190+ let UB3 = (valueOrElse(getIntegerValue(this, getUserBetKey(userAddress, gameId, 3, ((winner + "_") + toString(diff)))), 0) + (if ((type == 1))
191191 then amount
192192 else 0))
193193 let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
194194 let D1 = (((G1 + ((G1 / totalWinValueMax) * B)) * UB1) / G1)
195195 let D2 = (((G2 + ((G2 / totalWinValueMax) * B)) * UB2) / G2)
196196 let D3 = (((G3 + ((G3 / totalWinValueMax) * B)) * UB3) / G3)
197197 let claimAmount = ((D1 + D2) + D3)
198198 claimAmount
199199 }
200200
201201
202202 @Callable(i)
203203 func bet (gameId,type,result,refId) = valueOrElse(isActive(), {
204204 let user = toString(i.caller)
205205 let gIdStr = toString(gameId)
206206 let $t060356110 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
207207 let pmtAmount = $t060356110._1
208208 let pmtAssetId = $t060356110._2
209209 let gameStartTime = valueOrElse(getInteger(this, (toString(gameId) + kGameStraTime)), 0)
210210 let gameType = getStringValue(this, (toString(gameId) + kGameType))
211211 if ((pmtAssetId != USDT))
212212 then throw("Pamyment must be In USDT asset")
213213 else if ((MIN_BET > pmtAmount))
214214 then throw((("Min bet " + toString((MIN_BET / 1000000))) + "USDT"))
215215 else if ((gameStartTime == 0))
216216 then throw(("There is no game with id" + toString(gameId)))
217217 else if (((lastBlock.timestamp + ONE_HOUR) >= gameStartTime))
218218 then throw("Bets on this game are no longer accepted")
219219 else if (!(validateBet(gameType, type, result)))
220220 then throw("Incorrect bet type")
221221 else {
222222 let spldRes = split(result, "_")
223223 let userBetKey = getUserBetKey(user, gameId, type, result)
224224 let totalBetsForTypeBetKey = getTotalBetsForTypeKey(gameId, type, result)
225225 let userBet = (valueOrElse(getInteger(this, userBetKey), 0) + pmtAmount)
226226 let totalBetsForTypeBet = (valueOrElse(getInteger(this, totalBetsForTypeBetKey), 0) + pmtAmount)
227227 let totalBets = (valueOrElse(getInteger(this, (gIdStr + kTotalBets)), 0) + pmtAmount)
228228 let toWinA = (valueOrElse(getInteger(this, (gIdStr + kToWinA)), 0) + (if (if ((type == 1))
229229 then (result == "A")
230230 else false)
231231 then pmtAmount
232232 else if (if ((type == 2))
233233 then (parseIntValue(spldRes[0]) > parseIntValue(spldRes[1]))
234234 else false)
235235 then pmtAmount
236236 else if (if ((type == 3))
237237 then (spldRes[0] == "A")
238238 else false)
239239 then pmtAmount
240240 else 0))
241241 let toWinB = (valueOrElse(getInteger(this, (gIdStr + kToWinB)), 0) + (if (if ((type == 1))
242242 then (result == "B")
243243 else false)
244244 then pmtAmount
245245 else if (if ((type == 2))
246246 then (parseIntValue(spldRes[1]) > parseIntValue(spldRes[0]))
247247 else false)
248248 then pmtAmount
249249 else if (if ((type == 3))
250250 then (spldRes[0] == "B")
251251 else false)
252252 then pmtAmount
253253 else 0))
254254 let onDraw = (valueOrElse(getInteger(this, (gIdStr + kOnDraw)), 0) + (if (if ((type == 1))
255255 then (result == "D")
256256 else false)
257257 then pmtAmount
258258 else 0))
259259 ([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, kUserRefId))))
260260 then [StringEntry(kUserRefId, refId)]
261261 else nil))
262262 }
263263 })
264264
265265
266266
267267 @Callable(i)
268268 func claim (gameId) = valueOrElse(isActive(), {
269269 let user = toString(i.caller)
270270 let gIdStr = toString(gameId)
271271 let finalTime = valueOrErrorMessage(getInteger(this, (gIdStr + kFinalTime)), "You can claim only after game finish")
272272 if ((lastBlock.timestamp > (finalTime + ONE_HOUR)))
273273 then throw("You can claim only after one hour pass after final time")
274274 else if (isDefined(getBoolean(this, (((user + "_") + gIdStr) + kUserClaimed))))
275275 then throw("You are alredy claimed")
276276 else {
277277 let gameResult = getStringValue(this, (gIdStr + kGameResult))
278278 let spldRes = split(gameResult, "_")
279279 let ballsA = valueOrErrorMessage(parseInt(spldRes[0]), "Inncorrect game result")
280280 let ballsB = valueOrErrorMessage(parseInt(spldRes[1]), "Inncorrect game result")
281281 let diff = if ((ballsA > ballsB))
282282 then (ballsA - ballsB)
283283 else (ballsB - ballsA)
284284 let winner = if ((ballsA > ballsB))
285285 then "A"
286286 else if ((ballsB > ballsA))
287287 then "B"
288288 else "D"
289289 let B = getIntegerValue(this, (gIdStr + kBank))
290290 let UB1 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 1, winner)), 0)
291291 let UB2 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 2, gameResult)), 0)
292- let UB3 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 1, ((winner + "_") + toString(diff)))), 0)
292+ let UB3 = valueOrElse(getIntegerValue(this, getUserBetKey(user, gameId, 3, ((winner + "_") + toString(diff)))), 0)
293293 let G1 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0)
294- let G2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, gameResult)), 0)
295- let G3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, ((winner + "_") + toString(diff)))), 0)
294+ let G2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, gameResult)), 0)
295+ let G3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0)
296296 let totalWinValueMax = ((G1 + (G2 * 3)) + (G3 * 2))
297297 let D1 = (((G1 + ((G1 / totalWinValueMax) * B)) * UB1) / G1)
298298 let D2 = (((G2 + ((G2 / totalWinValueMax) * B)) * UB2) / G2)
299299 let D3 = (((G3 + ((G3 / totalWinValueMax) * B)) * UB3) / G3)
300300 let claimAmount = ((D1 + D2) + D3)
301301 if ((claimAmount == 0))
302302 then throw("Nothing to claim")
303303 else $Tuple2([BooleanEntry((((user + "_") + gIdStr) + kUserClaimed), true), ScriptTransfer(i.caller, claimAmount, USDT)], claimAmount)
304304 }
305305 })
306306
307307
308308
309309 @Callable(i)
310310 func gameSummary (gameId,result) = {
311311 let gIdStr = toString(gameId)
312312 let gameStartTime = valueOrElse(getInteger(this, (toString(gameId) + kGameStraTime)), 0)
313313 if ((gameStartTime == 0))
314314 then throw(("There is no game with id" + toString(gameId)))
315315 else {
316316 let spldRes = split(result, "_")
317317 let ballsA = valueOrErrorMessage(parseInt(spldRes[0]), "Inncorrect game result")
318318 let ballsB = valueOrErrorMessage(parseInt(spldRes[1]), "Inncorrect game result")
319319 let diff = if ((ballsA > ballsB))
320320 then (ballsA - ballsB)
321321 else (ballsB - ballsA)
322322 let winner = if ((ballsA > ballsB))
323323 then "A"
324324 else if ((ballsB > ballsA))
325325 then "B"
326326 else "D"
327327 let totalWinType1 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, winner)), 0)
328- let totalWinType2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, result)), 0)
329- let totalWinType3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 1, ((winner + "_") + toString(diff)))), 0)
328+ let totalWinType2 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 2, result)), 0)
329+ let totalWinType3 = valueOrElse(getInteger(this, getTotalBetsForTypeKey(gameId, 3, ((winner + "_") + toString(diff)))), 0)
330330 let totalWinValue = ((totalWinType1 + totalWinType2) + totalWinType3)
331331 let totalBets = valueOrElse(getInteger(this, (toString(gameId) + kTotalBets)), 0)
332332 let bankWithFee = (totalBets - totalWinValue)
333333 let $t01133811496 = if ((totalWinValue == 0))
334334 then $Tuple2(bankWithFee, 0)
335335 else {
336336 let f = fraction(bankWithFee, BET_FEE, FEE_SCALE)
337337 $Tuple2(f, (bankWithFee - f))
338338 }
339339 let fee = $t01133811496._1
340340 let bank = $t01133811496._2
341341 [StringEntry((gIdStr + kGameResult), result), IntegerEntry((gIdStr + kBank), bank), IntegerEntry((gIdStr + kFinalTime), lastBlock.timestamp), ScriptTransfer(MONEY_BOX_ADDREES, fee, USDT)]
342342 }
343343 }
344344
345345
346346
347347 @Callable(i)
348-func initGames (startGameTimes,types) = {
348+func initGames (startGameTimes,types) = valueOrElse(isAdminCall(i), {
349349 func initGame (acc,startGameTime) = {
350- let $t01188011913 = acc
351- let entries = $t01188011913._1
352- let newGameId = $t01188011913._2
353- let j = $t01188011913._3
350+ let $t01190711941 = acc
351+ let entries = $t01190711941._1
352+ let lastGameId = $t01190711941._2
353+ let j = $t01190711941._3
354+ let newGameId = (lastGameId + 1)
354355 if ((lastBlock.timestamp > startGameTime))
355356 then throw("startGameTime must be in the future")
356357 else if (!(containsElement(GAME_TYPES, types[j])))
357358 then throw(("type must contain one of values: " + makeString(GAME_TYPES, ",")))
358359 else {
359360 let gameEntries = [IntegerEntry((toString(newGameId) + kGameStraTime), startGameTime), StringEntry((toString(newGameId) + kGameType), types[j])]
360- $Tuple3((entries ++ nil), (newGameId + 1), (j + 1))
361+ $Tuple3((entries ++ gameEntries), newGameId, (j + 1))
361362 }
362363 }
363364
364365 let lastGameId = valueOrElse(getInteger(this, kLastGameId), 0)
365- let $t01241612505 = {
366+ let $t01248412569 = {
366367 let $l = startGameTimes
367368 let $s = size($l)
368- let $acc0 = $Tuple3(nil, (lastGameId + 1), 0)
369+ let $acc0 = $Tuple3(nil, lastGameId, 0)
369370 func $f0_1 ($a,$i) = if (($i >= $s))
370371 then $a
371372 else initGame($a, $l[$i])
372373
373374 func $f0_2 ($a,$i) = if (($i >= $s))
374375 then $a
375376 else throw("List size exceeds 50")
376377
377378 $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)
378379 }
379- let gamesEntries = $t01241612505._1
380- let newLGId = $t01241612505._2
380+ let gamesEntries = $t01248412569._1
381+ let newLGId = $t01248412569._2
381382 (gamesEntries :+ IntegerEntry(kLastGameId, newLGId))
382- }
383+ })
383384
384385
385386
386387 @Callable(i)
387388 func shutdown () = if (!(active))
388389 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, kCause), "the cause wasn't specified")))
389390 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
390391 then throw("Only admin can call this function")
391392 else suspend("Paused by admin")
392393
393394
394395
395396 @Callable(i)
396397 func activate () = if (active)
397398 then throw("DApp is already active")
398399 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
399400 then throw("Only admin can call this function")
400401 else [BooleanEntry(kActive, true), DeleteEntry(kCause)]
401402
402403

github/deemru/w8io/169f3d6 
75.53 ms