tx · 9a6rU1qowbZ5NXSPGYtrE1gYgxL6XKM4DLaN4Gf2Uouv

3N6oaapvYkEryHUr4vAiPRXM3iS6kMYXito:  -0.05000000 Waves

2021.09.10 11:45 [1696728] smart account 3N6oaapvYkEryHUr4vAiPRXM3iS6kMYXito > SELF 0.00000000 Waves

{ "type": 13, "id": "9a6rU1qowbZ5NXSPGYtrE1gYgxL6XKM4DLaN4Gf2Uouv", "fee": 5000000, "feeAssetId": null, "timestamp": 1631263551978, "version": 2, "chainId": 84, "sender": "3N6oaapvYkEryHUr4vAiPRXM3iS6kMYXito", "senderPublicKey": "7PMrxEzirv6h9Z2zqLE47qrZd6v1AbRZER5Aqfo95Eyr", "proofs": [ "3jjcuMj3JMq1t5BxZYUineEC85g1r78Bjy4jbSQayMKDMmdvyiB26syJZovohf8wE1LPJv8PAhPQnTSXy7d2PDna" ], "script": "base64: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Z2dzAQAAAApnZXRCZXRFZ2dzAAAAAQAAAAZnYW1lSWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAADWdldEJldEVnZ3NLZXkAAAABBQAAAAZnYW1lSWQBAAAAHWdldFdhaXRpbmdFeHBpcmF0aW9uSGVpZ2h0S2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAAYX3dhaXRpbmdFeHBpcmF0aW9uSGVpZ2h0AQAAABpnZXRXYWl0aW5nRXhwaXJhdGlvbkhlaWdodAAAAAEAAAAGZ2FtZUlkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAB1nZXRXYWl0aW5nRXhwaXJhdGlvbkhlaWdodEtleQAAAAEFAAAABmdhbWVJZAEAAAAWZ2V0RXhwaXJhdGlvbkhlaWdodEtleQAAAAEAAAAGZ2FtZUlkCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAEV9leHBpcmF0aW9uSGVpZ2h0AQAAABNnZXRFeHBpcmF0aW9uSGVpZ2h0AAAAAQAAAAZnYW1lSWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAFmdldEV4cGlyYXRpb25IZWlnaHRLZXkAAAABBQAAAAZnYW1lSWQBAAAAEWdldFJhcml0eVJhbmdlS2V5AAAAAgAAAAZnYW1lSWQAAAANcmFuZ2VQb3NpdGlvbgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAADV9yYXJpdHlSYW5nZV8FAAAADXJhbmdlUG9zaXRpb24BAAAADmdldFJhcml0eVJhbmdlAAAAAgAAAAZnYW1lSWQAAAANcmFuZ2VQb3NpdGlvbgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARZ2V0UmFyaXR5UmFuZ2VLZXkAAAACBQAAAAZnYW1lSWQFAAAADXJhbmdlUG9zaXRpb24BAAAACmdldFN0ZXBLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAAAVfc3RlcAEAAAAHZ2V0U3RlcAAAAAEAAAAGZ2FtZUlkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAApnZXRTdGVwS2V5AAAAAQUAAAAGZ2FtZUlkAQAAAAxnZXRSYXJpdHlLZXkAAAADAAAABmdhbWVJZAAAAApwbGF5ZXJSb2xlAAAADXJhbmdlUG9zaXRpb24JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAAAFfBQAAAApwbGF5ZXJSb2xlAgAAAAFfBQAAAA1yYW5nZVBvc2l0aW9uAgAAAAZSYXJpdHkBAAAACWdldFJhcml0eQAAAAMAAAAGZ2FtZUlkAAAACnBsYXllclJvbGUAAAANcmFuZ2VQb3NpdGlvbgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAMZ2V0UmFyaXR5S2V5AAAAAwUAAAAGZ2FtZUlkBQAAAApwbGF5ZXJSb2xlBQAAAA1yYW5nZVBvc2l0aW9uAQAAAAxnZXREdWNrSWRLZXkAAAADAAAABmdhbWVJZAAAAApwbGF5ZXJSb2xlAAAADXJhbmdlUG9zaXRpb24JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAAAFfBQAAAApwbGF5ZXJSb2xlAgAAAAFfBQAAAA1yYW5nZVBvc2l0aW9uAgAAAAZEdWNrSWQBAAAACWdldER1Y2tJZAAAAAMAAAAGZ2FtZUlkAAAACnBsYXllclJvbGUAAAANcmFuZ2VQb3NpdGlvbgkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAAAxnZXREdWNrSWRLZXkAAAADBQAAAAZnYW1lSWQFAAAACnBsYXllclJvbGUFAAAADXJhbmdlUG9zaXRpb24BAAAADGdldENvbW1pdEtleQAAAAIAAAAGZ2FtZUlkAAAACnBsYXllclJvbGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAAV8FAAAACnBsYXllclJvbGUCAAAAB19jb21taXQBAAAACWdldENvbW1pdAAAAAIAAAAGZ2FtZUlkAAAACnBsYXllclJvbGUJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAMZ2V0Q29tbWl0S2V5AAAAAgUAAAAGZ2FtZUlkBQAAAApwbGF5ZXJSb2xlAQAAAA9nZXREdWNrT3JkZXJLZXkAAAACAAAABmdhbWVJZAAAAApwbGF5ZXJSb2xlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAAAFfBQAAAApwbGF5ZXJSb2xlAgAAAApfZHVja09yZGVyAQAAAAxnZXREdWNrT3JkZXIAAAACAAAABmdhbWVJZAAAAApwbGF5ZXJSb2xlCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAD2dldER1Y2tPcmRlcktleQAAAAIFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQEAAAAQZ2V0R2FtZVJlc3VsdEtleQAAAAIAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAAV8FAAAADXBsYXllckFkZHJlc3MCAAAAB19yZXN1bHQBAAAADWdldEdhbWVSZXN1bHQAAAACAAAABmdhbWVJZAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAEGdldEdhbWVSZXN1bHRLZXkAAAACBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MBAAAAEGdldFBsYXllcldpbnNLZXkAAAABAAAADXBsYXllckFkZHJlc3MJAAEsAAAAAgUAAAANcGxheWVyQWRkcmVzcwIAAAAFX3dpbnMBAAAADWdldFBsYXllcldpbnMAAAABAAAADXBsYXllckFkZHJlc3MJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEGdldFBsYXllcldpbnNLZXkAAAABBQAAAA1wbGF5ZXJBZGRyZXNzAQAAABFnZXRQbGF5ZXJMb3Nlc0tleQAAAAEAAAANcGxheWVyQWRkcmVzcwkAASwAAAACBQAAAA1wbGF5ZXJBZGRyZXNzAgAAAAZfbG9zZXMBAAAADmdldFBsYXllckxvc2VzAAAAAQAAAA1wbGF5ZXJBZGRyZXNzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABFnZXRQbGF5ZXJMb3Nlc0tleQAAAAEFAAAADXBsYXllckFkZHJlc3MBAAAAEWdldFBsYXllckRyYXdzS2V5AAAAAQAAAA1wbGF5ZXJBZGRyZXNzCQABLAAAAAIFAAAADXBsYXllckFkZHJlc3MCAAAABl9kcmF3cwEAAAAOZ2V0UGxheWVyRHJhd3MAAAABAAAADXBsYXllckFkZHJlc3MJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEWdldFBsYXllckRyYXdzS2V5AAAAAQUAAAANcGxheWVyQWRkcmVzcwEAAAARZ2V0R2FtZXNQbGF5ZWRLZXkAAAAAAgAAAAtnYW1lc1BsYXllZAEAAAAOZ2V0R2FtZXNQbGF5ZWQAAAAACQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABFnZXRHYW1lc1BsYXllZEtleQAAAAABAAAAD2dldEZhcm1pbmdQb3dlcgAAAAIAAAAHYWRkcmVzcwAAAAdhc3NldElkBAAAAAckbWF0Y2gwCQAEGgAAAAIJAQAAAAdBZGRyZXNzAAAAAQUAAAAOZmFybWluZ0FkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAAB2Fzc2V0SWQCAAAADV9mYXJtaW5nUG93ZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAACZnAFAAAAByRtYXRjaDAFAAAAAmZwAAAAAAAAAAAAAQAAAA5jaGVja0R1Y2tPd25lcgAAAAIAAAAMb3duZXJBZGRyZXNzAAAAB2Fzc2V0SWQDCQAAZgAAAAIJAAPwAAAAAgUAAAAMb3duZXJBZGRyZXNzBQAAAAdhc3NldElkAAAAAAAAAAAABgkAAGYAAAACCQEAAAAPZ2V0RmFybWluZ1Bvd2VyAAAAAgkAAlgAAAABCAUAAAAMb3duZXJBZGRyZXNzAAAABWJ5dGVzCQACWAAAAAEFAAAAB2Fzc2V0SWQAAAAAAAAAAAABAAAACGdldFNjb3JlAAAAAgAAAAFhAAAAAWIDCQAAZgAAAAIFAAAAAWEFAAAAAWIAAAAAAAAAAAEDCQAAZgAAAAIFAAAAAWIFAAAAAWEA//////////8AAAAAAAAAAAABAAAACWdldFdpbm5lcgAAAAEAAAAGZ2FtZUlkBAAAAAhnYW1lU3RlcAkBAAAAB2dldFN0ZXAAAAABBQAAAAZnYW1lSWQDCQAAZgAAAAIAAAAAAAAAAAYFAAAACGdhbWVTdGVwBAAAABBleHBpcmF0aW9uSGVpZ2h0CQEAAAATZ2V0RXhwaXJhdGlvbkhlaWdodAAAAAEFAAAABmdhbWVJZAMJAAAAAAAAAgUAAAAQZXhwaXJhdGlvbkhlaWdodAAAAAAAAAAAAAkAAAIAAAABAgAAABNHYW1lIGlzIG5vdCBzdGFydGVkAwkAAGYAAAACBQAAABBleHBpcmF0aW9uSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAfR2FtZSBpcyBub3QgZmluaXNoZWQgb3IgZXhwaXJlZAMJAAAAAAAAAgkAAGoAAAACCQEAAAAHZ2V0U3RlcAAAAAEFAAAABmdhbWVJZAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAFbWFrZXICAAAABXRha2VyBAAAAA5tYWtlckR1Y2tPcmRlcgkABLUAAAACCQEAAAAMZ2V0RHVja09yZGVyAAAAAgUAAAAGZ2FtZUlkAgAAAAVtYWtlcgIAAAABLAQAAAAOdGFrZXJEdWNrT3JkZXIJAAS1AAAAAgkBAAAADGdldER1Y2tPcmRlcgAAAAIFAAAABmdhbWVJZAIAAAAFdGFrZXICAAAAASwEAAAADG1ha2VyUmFyaXR5MQkBAAAACWdldFJhcml0eQAAAAMFAAAABmdhbWVJZAIAAAAFbWFrZXIJAAGRAAAAAgUAAAAObWFrZXJEdWNrT3JkZXIAAAAAAAAAAAAEAAAADG1ha2VyUmFyaXR5MgkBAAAACWdldFJhcml0eQAAAAMFAAAABmdhbWVJZAIAAAAFbWFrZXIJAAGRAAAAAgUAAAAObWFrZXJEdWNrT3JkZXIAAAAAAAAAAAEEAAAADG1ha2VyUmFyaXR5MwkBAAAACWdldFJhcml0eQAAAAMFAAAABmdhbWVJZAIAAAAFbWFrZXIJAAGRAAAAAgUAAAAObWFrZXJEdWNrT3JkZXIAAAAAAAAAAAIEAAAADHRha2VyUmFyaXR5MQkBAAAACWdldFJhcml0eQAAAAMFAAAABmdhbWVJZAIAAAAFdGFrZXIJAAGRAAAAAgUAAAAOdGFrZXJEdWNrT3JkZXIAAAAAAAAAAAAEAAAADHRha2VyUmFyaXR5MgkBAAAACWdldFJhcml0eQAAAAMFAAAABmdhbWVJZAIAAAAFdGFrZXIJAAGRAAAAAgUAAAAOdGFrZXJEdWNrT3JkZXIAAAAAAAAAAAEEAAAADHRha2VyUmFyaXR5MwkBAAAACWdldFJhcml0eQAAAAMFAAAABmdhbWVJZAIAAAAFdGFrZXIJAAGRAAAAAgUAAAAOdGFrZXJEdWNrT3JkZXIAAAAAAAAAAAIEAAAACm1ha2VyU2NvcmUJAABkAAAAAgkAAGQAAAACCQEAAAAIZ2V0U2NvcmUAAAACBQAAAAxtYWtlclJhcml0eTEFAAAADHRha2VyUmFyaXR5MQkBAAAACGdldFNjb3JlAAAAAgUAAAAMbWFrZXJSYXJpdHkyBQAAAAx0YWtlclJhcml0eTIJAQAAAAhnZXRTY29yZQAAAAIFAAAADG1ha2VyUmFyaXR5MwUAAAAMdGFrZXJSYXJpdHkzAwkAAGYAAAACBQAAAAptYWtlclNjb3JlAAAAAAAAAAAAAgAAAAVtYWtlcgMJAABmAAAAAgAAAAAAAAAAAAUAAAAKbWFrZXJTY29yZQIAAAAFdGFrZXICAAAABGRyYXcAAAAHAAAAAWkBAAAACG1ha2VHYW1lAAAABAAAAARzbG90AAAAEHJhcml0eVJhbmdlV29yc3QAAAARcmFyaXR5UmFuZ2VNZWRpdW0AAAAPcmFyaXR5UmFuZ2VCZXN0BAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACnNsb3RHYW1lSWQJAQAAAAdnZXRTbG90AAAAAQUAAAAEc2xvdAQAAAAHcGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAEZWdncwgFAAAAB3BheW1lbnQAAAAGYW1vdW50BAAAAAZnYW1lSWQJAQAAAA1nZXROZXh0R2FtZUlkAAAAAAMJAQAAAAIhPQAAAAIJAQAAABRnZXRQbGF5ZXJDdXJyZW50R2FtZQAAAAEFAAAADWNhbGxlckFkZHJlc3MAAAAAAAAAAAAJAAACAAAAAQIAAAAfWW91IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgZ2FtZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAABHNsb3QGCQAAZwAAAAIFAAAABHNsb3QFAAAABVNMT1RTCQAAAgAAAAECAAAADEludmFsaWQgc2xvdAMJAQAAAAIhPQAAAAIFAAAACnNsb3RHYW1lSWQAAAAAAAAAAAAJAAACAAAAAQIAAAARVGhpcyBzbG90IGlzIGJ1c3kDCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAtlZ2dzQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAANllvdSBjYW4gYXR0YWNoIG9ubHkgRUdHcyB3aXRoIHRoZSBmb2xsb3dpbmcgYXNzZXQgaWQ6IAkAAlgAAAABBQAAAAtlZ2dzQXNzZXRJZAMJAQAAAAIhPQAAAAIFAAAABGVnZ3MAAAAAAAAAAAEJAAACAAAAAQIAAAAlQmV0IG11c3QgYmUgMC4wMSBFR0cgZHVyaW5nIGJldGEgdGVzdAMDCQAAZgAAAAIAAAAAAAAAAAEFAAAAEHJhcml0eVJhbmdlV29yc3QGCQAAZgAAAAIFAAAAEHJhcml0eVJhbmdlV29yc3QAAAAAAAAAAAUJAAACAAAAAQIAAAAnSW52YWxpZCByYXJpdHkgcmFuZ2UgZm9yIHRoZSB3b3JzdCBkdWNrAwMJAABmAAAAAgAAAAAAAAAAAQUAAAARcmFyaXR5UmFuZ2VNZWRpdW0GCQAAZgAAAAIFAAAAEXJhcml0eVJhbmdlTWVkaXVtAAAAAAAAAAAFCQAAAgAAAAECAAAAKEludmFsaWQgcmFyaXR5IHJhbmdlIGZvciB0aGUgbWVkaXVtIGR1Y2sDAwkAAGYAAAACAAAAAAAAAAABBQAAAA9yYXJpdHlSYW5nZUJlc3QGCQAAZgAAAAIFAAAAD3Jhcml0eVJhbmdlQmVzdAAAAAAAAAAABQkAAAIAAAABAgAAACZJbnZhbGlkIHJhcml0eSByYW5nZSBmb3IgdGhlIGJlc3QgZHVjawMJAABmAAAAAgUAAAAQcmFyaXR5UmFuZ2VXb3JzdAUAAAARcmFyaXR5UmFuZ2VNZWRpdW0JAAACAAAAAQIAAAAxVGhlIG1lZGl1bSByYW5nZSBjYW4ndCBiZSBsZXNzIHRoYW4gdGhlIHdvcnN0IG9uZQMJAABmAAAAAgUAAAARcmFyaXR5UmFuZ2VNZWRpdW0FAAAAD3Jhcml0eVJhbmdlQmVzdAkAAAIAAAABAgAAADFUaGUgYmVzdCByYW5nZSBjYW4ndCBiZSB3b3JzZSB0aGFuIHRoZSBtZWRpdW0gb25lCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXZ2V0UGxheWVyQ3VycmVudEdhbWVLZXkAAAABBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAZnYW1lSWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2dldE1ha2VyS2V5AAAAAQUAAAAGZ2FtZUlkBQAAAA1jYWxsZXJBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRQbGF5ZXJSb2xlS2V5AAAAAgUAAAAGZ2FtZUlkBQAAAA1jYWxsZXJBZGRyZXNzAgAAAAVtYWtlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWdldEJldEVnZ3NLZXkAAAABBQAAAAZnYW1lSWQFAAAABGVnZ3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRSYXJpdHlSYW5nZUtleQAAAAIFAAAABmdhbWVJZAIAAAAFd29yc3QFAAAAEHJhcml0eVJhbmdlV29yc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRSYXJpdHlSYW5nZUtleQAAAAIFAAAABmdhbWVJZAIAAAAGbWVkaXVtBQAAABFyYXJpdHlSYW5nZU1lZGl1bQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldFJhcml0eVJhbmdlS2V5AAAAAgUAAAAGZ2FtZUlkAgAAAARiZXN0BQAAAA9yYXJpdHlSYW5nZUJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAB1nZXRXYWl0aW5nRXhwaXJhdGlvbkhlaWdo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CQAAAgAAAAECAAAADVNsb3QgaXMgZW1wdHkDCQAAZgAAAAIJAQAAABpnZXRXYWl0aW5nRXhwaXJhdGlvbkhlaWdodAAAAAEFAAAABmdhbWVJZAUAAAAGaGVpZ2h0CQAAAgAAAAECAAAAG1dhaXRpbmcgaXMgbm90IGZpbmlzaGVkIHlldAQAAAAFbWFrZXIJAQAAAAhnZXRNYWtlcgAAAAEFAAAABmdhbWVJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF2dldFBsYXllckN1cnJlbnRHYW1lS2V5AAAAAQUAAAAFbWFrZXIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAApnZXRTbG90S2V5AAAAAQUAAAAEc2xvdAAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAFbWFrZXIJAQAAAApnZXRCZXRFZ2dzAAAAAQUAAAAGZ2FtZUlkBQAAAAtlZ2dzQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAACXBpY2tEdWNrcwAAAAMAAAALd29yc3REdWNrSWQAAAAMbWVkaXVtRHVja0lkAAAACmJlc3REdWNrSWQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAGZ2FtZUlkCQEAAAAUZ2V0UGxheWVyQ3VycmVudEdhbWUAAAABBQAAAA1jYWxsZXJBZGRyZXNzBAAAAApwbGF5ZXJSb2xlCQEAAAANZ2V0UGxheWVyUm9sZQAAAAIFAAAABmdhbWVJZAUAAAANY2FsbGVyQWRkcmVzcwQAAAAIZ2FtZVN0ZXAJAQAAAAdnZXRTdGVwAAAAAQUAAAAGZ2FtZUlkBAAAABB3b3JzdFJhcml0eVJhbmdlCQEAAAAOZ2V0UmFyaXR5UmFuZ2UAAAACBQAAAAZnYW1lSWQCAAAABXdvcnN0BAAAABFtZWRpdW1SYXJpdHlSYW5nZQkBAAAADmdldFJhcml0eVJhbmdlAAAAAgUAAAAGZ2FtZUlkAgAAAAZtZWRpdW0EAAAAD2Jlc3RSYXJpdHlSYW5nZQkBAAAADmdldFJhcml0eVJhbmdlAAAAAgUAAAAGZ2FtZUlkAgAAAARiZXN0BAAAAA5pbnZva2VXb3JzdFJlcwkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAFXJhcml0eVByb3ZpZGVyQWRkcmVzcwIAAAAOZ2V0QXNzZXRSYXJpdHkJAARMAAAAAgUAAAALd29yc3REdWNrSWQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAA5pbnZva2VXb3JzdFJlcwUAAAAOaW52b2tlV29yc3RSZXMEAAAAC3dvcnN0UmFyaXR5BAAAAAckbWF0Y2gwBQAAAA5pbnZva2VXb3JzdFJlcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFyBQAAAAckbWF0Y2gwBQAAAAFyCQAAAgAAAAECAAAAF0luY29ycmVjdCBpbnZva2UgcmVzdWx0BAAAAA9pbnZva2VNZWRpdW1SZXMJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAABVyYXJpdHlQcm92aWRlckFkZHJlc3MCAAAADmdldEFzc2V0UmFyaXR5CQAETAAAAAIFAAAADG1lZGl1bUR1Y2tJZAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAD2ludm9rZU1lZGl1bVJlcwUAAAAPaW52b2tlTWVkaXVtUmVzBAAAAAxtZWRpdW1SYXJpdHkEAAAAByRtYXRjaDAFAAAAD2ludm9rZU1lZGl1bVJlcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFyBQAAAAckbWF0Y2gwBQAAAAFyCQAAAgAAAAECAAAAF0luY29ycmVjdCBpbnZva2UgcmVzdWx0BAAAAA1pbnZva2VCZXN0UmVzCQAD/AAAAAQJAQAAAAdBZGRyZXNzAAAAAQUAAAAVcmFyaXR5UHJvdmlkZXJBZGRyZXNzAgAAAA5nZXRBc3NldFJhcml0eQkABEwAAAACBQAAAApiZXN0RHVja0lkBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAANaW52b2tlQmVzdFJlcwUAAAANaW52b2tlQmVzdFJlcwQAAAAKYmVzdFJhcml0eQQAAAAHJG1hdGNoMAUAAAANaW52b2tlQmVzdFJlcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIA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dCBmaXQgcmFyaXR5IHJhbmdlAwMJAAAAAAAAAgUAAAARbWVkaXVtUmFyaXR5UmFuZ2UAAAAAAAAAAAUJAABnAAAAAgAAAAAAAAAAKAUAAAAMbWVkaXVtUmFyaXR5BwkAAAIAAAABAgAAACRNZWRpdW0gZHVjayBkb2Vzbid0IGZpdCByYXJpdHkgcmFuZ2UDAwkAAAAAAAACBQAAAA9iZXN0UmFyaXR5UmFuZ2UAAAAAAAAAAAUJAABnAAAAAgAAAAAAAAAAKAUAAAAKYmVzdFJhcml0eQcJAAACAAAAAQIAAAAiQmVzdCBkdWNrIGRvZXNuJ3QgZml0IHJhcml0eSByYW5nZQMDAwkAAAAAAAACBQAAAAt3b3JzdFJhcml0eQUAAAAMbWVkaXVtUmFyaXR5BgkAAAAAAAACBQAAAAt3b3JzdFJhcml0eQUAAAAKYmVzdFJhcml0eQYJAAAAAAAAAgUAAAAMbWVkaXVtUmFyaXR5BQAAAApiZXN0UmFyaXR5CQAAAgAAAAECAAAAIkR1Y2tzIG11c3QgaGF2ZSBkaWZmZXJlbnQgcmFyaXRpZXMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxnZXRSYXJpdHlLZXkAAAADBQAAAAZnYW1lSWQFAAAACnBsYXllclJvbGUCAAAABXdvcnN0BQAAAAt3b3JzdFJhcml0eQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGdldFJhcml0eUtleQAAAAMFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQIAAAAGbWVkaXVtBQAAAAxtZWRpdW1SYXJpdHkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxnZXRSYXJpdHlLZXkAAAADBQAAAAZnYW1lSWQFAAAACnBsYXllclJvbGUCAAAABGJlc3QFAAAACmJlc3RSYXJpdHkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGdldER1Y2tJZEtleQAAAAMFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQIAAAAFd29yc3QFAAAAC3dvcnN0RHVja0lkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxnZXREdWNrSWRLZXkAAAAD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D2dldER1Y2tPcmRlcktleQAAAAIFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQUAAAAJZHVja09yZGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKZ2V0U3RlcEtleQAAAAEFAAAABmdhbWVJZAkAAGQAAAACBQAAAAhnYW1lU3RlcAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmdldEV4cGlyYXRpb25IZWlnaHRLZXkAAAABBQAAAAZnYW1lSWQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAAxzdGVwRHVyYXRpb24FAAAAA25pbAAAAAFpAQAAAAhnZXRQcml6ZQAAAAAEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAGZ2FtZUlkCQEAAAAUZ2V0UGxheWVyQ3VycmVudEdhbWUAAAABBQAAAA1jYWxsZXJBZGRyZXNzBAAAAApwbGF5ZXJSb2xlCQEAAAANZ2V0UGxheWVyUm9sZQAAAAIFAAAABmdhbWVJZAUAAAANY2FsbGVyQWRkcmVzcwQAAAAUYW5vdGhlclBsYXllckFkZHJlc3MDCQAAAAAAAAIFAAAACnBsYXllclJvbGUCAAAABW1ha2VyCQEAAAAIZ2V0VGFrZXIAAAABBQAAAAZnYW1lSWQJAQAAAAhnZXRNYWtlcgAAAAEFAAAABmdhbWVJZAQAAAAGd2lubmVyCQEAAAAJZ2V0V2lubmVyAAAAAQUAAAAGZ2FtZUlkAwkAAAAAAAACBQAAAAZnYW1lSWQAAAAAAAAAAAAJAAACAAAAAQIAAAAdWW91IGRvbid0IGhhdmUgYW4gYWN0aXZlIGdhbWUDCQAAAAAAAAIFAAAABndpbm5lcgUAAAAKcGxheWVyUm9sZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF2dldFBsYXllckN1cnJlbnRHYW1lS2V5AAAAAQUAAAANY2FsbGVyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF2dldFBsYXllckN1cnJlbnRHYW1lS2V5AAAAAQUAAAAUYW5vdGhlclBsYXllckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBnZXRQbGF5ZXJXaW5zS2V5AAAAAQUAAAANY2FsbGVyQWRkcmVzcwkAAGQAAAACCQEAAAANZ2V0UGxheWVyV2lucwAAAAEFAAAADWNhbGxlckFkZHJlc3MAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRQbGF5ZXJMb3Nlc0tleQAAAAEFAAAAFGFub3RoZXJQbGF5ZXJBZGRyZXNzCQAAZAAAAAIJAQAAAA5nZXRQbGF5ZXJMb3NlcwAAAAEFAAAAFGFub3RoZXJQbGF5ZXJBZGRyZXNzAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRHYW1lUmVzdWx0S2V5AAAAAgUAAAAGZ2FtZUlkBQAAAA1jYWxsZXJBZGRyZXNzAgAAAAN3aW4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGdldEdhbWVSZXN1bHRLZXkAAAACBQAAAAZnYW1lSWQFAAAAFGFub3RoZXJQbGF5ZXJBZGRyZXNzAgAAAARsb3NlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgkAAGgAAAACCQEAAAAKZ2V0QmV0RWdncwAAAAEFAAAABmdhbWVJZAAAAAAAAAAAAgUAAAALZWdnc0Fzc2V0SWQFAAAAA25pbAMJAAAAAAAAAgUAAAAGd2lubmVyAgAAAARkcmF3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXZ2V0UGxheWVyQ3VycmVudEdhbWVLZXkAAAABBQAAAA1jYWxsZXJBZGRyZXNzAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0UGxheWVyRHJhd3NLZXkAAAABBQAAAA1jYWxsZXJBZGRyZXNzCQAAZAAAAAIJAQAAAA5nZXRQbGF5ZXJEcmF3cwAAAAEFAAAADWNhbGxlckFkZHJlc3MAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGdldEdhbWVSZXN1bHRLZXkAAAACBQAAAAZnYW1lSWQFAAAADWNhbGxlckFkZHJlc3MCAAAABGRyYXcJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQEAAAAKZ2V0QmV0RWdncwAAAAEFAAAABmdhbWVJZAUAAAALZWdnc0Fzc2V0SWQFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF2dldFBsYXllckN1cnJlbnRHYW1lS2V5AAAAAQUAAAANY2FsbGVyQWRkcmVzcwAAAAAAAAAAAAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXmKpWYk", "height": 1696728, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 88Ne3hdW1HdB8QnCxjFBeahgNtsBm1jE2RYx5UNynYar Next: D9nuK465nEitbyB4YKUs6J6jZjaekCQL7PVwq5Mzafkb Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let incubatorAddress = base58'3MtBigTsaeevrcJAEwVcr4quwkqcrtnjoAh'
5-
6-let breederAddress = base58'3N285kYUMxPi6oZsdWrxhSY34dJHyu4kRN5'
4+let farmingAddress = base58'3NBznG19rEYUAcnukTRTtwJHBVKQLbobVdC'
75
86 let rarityProviderAddress = base58'3NCman4dCzk1HWWU4DPTr5rsbhvuUCwwUZh'
97
161159 func getGamesPlayed () = tryGetInteger(getGamesPlayedKey())
162160
163161
164-func checkDuckOwner (ownerAddress,assetId) = (assetBalance(ownerAddress, assetId) > 0)
162+func getFarmingPower (address,assetId) = match getInteger(Address(farmingAddress), (((("address_" + address) + "_asset_") + assetId) + "_farmingPower")) {
163+ case fp: Int =>
164+ fp
165+ case _ =>
166+ 0
167+}
168+
169+
170+func checkDuckOwner (ownerAddress,assetId) = if ((assetBalance(ownerAddress, assetId) > 0))
171+ then true
172+ else (getFarmingPower(toBase58String(ownerAddress.bytes), toBase58String(assetId)) > 0)
165173
166174
167175 func getScore (a,b) = if ((a > b))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let incubatorAddress = base58'3MtBigTsaeevrcJAEwVcr4quwkqcrtnjoAh'
5-
6-let breederAddress = base58'3N285kYUMxPi6oZsdWrxhSY34dJHyu4kRN5'
4+let farmingAddress = base58'3NBznG19rEYUAcnukTRTtwJHBVKQLbobVdC'
75
86 let rarityProviderAddress = base58'3NCman4dCzk1HWWU4DPTr5rsbhvuUCwwUZh'
97
108 let eggsAssetId = base58'3VUCuh9dWqe54SdzzNUkXhFXpc8UQynnJVh42B7MjNzN'
119
1210 let SLOTS = 10
1311
1412 let WAITING = 8
1513
1614 let stepDuration = 5
1715
1816 func tryGetInteger (key) = match getInteger(this, key) {
1917 case b: Int =>
2018 b
2119 case _ =>
2220 0
2321 }
2422
2523
2624 func tryGetString (key) = match getString(this, key) {
2725 case a: String =>
2826 a
2927 case _ =>
3028 ""
3129 }
3230
3331
3432 func tryGetBoolean (key) = match getBoolean(this, key) {
3533 case b: Boolean =>
3634 b
3735 case _ =>
3836 false
3937 }
4038
4139
4240 func getNextGameId () = {
4341 let nextId = tryGetInteger("nextGameId")
4442 if ((nextId == 0))
4543 then 1
4644 else nextId
4745 }
4846
4947
5048 func getPlayerCurrentGameKey (playerAddress) = (playerAddress + "_currentGame")
5149
5250
5351 func getPlayerCurrentGame (playerAddress) = tryGetInteger(getPlayerCurrentGameKey(playerAddress))
5452
5553
5654 func getSlotKey (slot) = ("slot" + toString(slot))
5755
5856
5957 func getSlot (slot) = tryGetInteger(getSlotKey(slot))
6058
6159
6260 func getPlayerRoleKey (gameId,playerAddress) = ((("game" + toString(gameId)) + "_") + playerAddress)
6361
6462
6563 func getPlayerRole (gameId,playerAddress) = tryGetString(getPlayerRoleKey(gameId, playerAddress))
6664
6765
6866 func getMakerKey (gameId) = (("game" + toString(gameId)) + "_maker")
6967
7068
7169 func getMaker (gameId) = tryGetString(getMakerKey(gameId))
7270
7371
7472 func getTakerKey (gameId) = (("game" + toString(gameId)) + "_taker")
7573
7674
7775 func getTaker (gameId) = tryGetString(getTakerKey(gameId))
7876
7977
8078 func getBetEggsKey (gameId) = (("game" + toString(gameId)) + "_betEggs")
8179
8280
8381 func getBetEggs (gameId) = tryGetInteger(getBetEggsKey(gameId))
8482
8583
8684 func getWaitingExpirationHeightKey (gameId) = (("game" + toString(gameId)) + "_waitingExpirationHeight")
8785
8886
8987 func getWaitingExpirationHeight (gameId) = tryGetInteger(getWaitingExpirationHeightKey(gameId))
9088
9189
9290 func getExpirationHeightKey (gameId) = (("game" + toString(gameId)) + "_expirationHeight")
9391
9492
9593 func getExpirationHeight (gameId) = tryGetInteger(getExpirationHeightKey(gameId))
9694
9795
9896 func getRarityRangeKey (gameId,rangePosition) = ((("game" + toString(gameId)) + "_rarityRange_") + rangePosition)
9997
10098
10199 func getRarityRange (gameId,rangePosition) = tryGetInteger(getRarityRangeKey(gameId, rangePosition))
102100
103101
104102 func getStepKey (gameId) = (("game" + toString(gameId)) + "_step")
105103
106104
107105 func getStep (gameId) = tryGetInteger(getStepKey(gameId))
108106
109107
110108 func getRarityKey (gameId,playerRole,rangePosition) = (((((("game" + toString(gameId)) + "_") + playerRole) + "_") + rangePosition) + "Rarity")
111109
112110
113111 func getRarity (gameId,playerRole,rangePosition) = tryGetInteger(getRarityKey(gameId, playerRole, rangePosition))
114112
115113
116114 func getDuckIdKey (gameId,playerRole,rangePosition) = (((((("game" + toString(gameId)) + "_") + playerRole) + "_") + rangePosition) + "DuckId")
117115
118116
119117 func getDuckId (gameId,playerRole,rangePosition) = tryGetString(getDuckIdKey(gameId, playerRole, rangePosition))
120118
121119
122120 func getCommitKey (gameId,playerRole) = (((("game" + toString(gameId)) + "_") + playerRole) + "_commit")
123121
124122
125123 func getCommit (gameId,playerRole) = tryGetString(getCommitKey(gameId, playerRole))
126124
127125
128126 func getDuckOrderKey (gameId,playerRole) = (((("game" + toString(gameId)) + "_") + playerRole) + "_duckOrder")
129127
130128
131129 func getDuckOrder (gameId,playerRole) = tryGetString(getDuckOrderKey(gameId, playerRole))
132130
133131
134132 func getGameResultKey (gameId,playerAddress) = (((("game" + toString(gameId)) + "_") + playerAddress) + "_result")
135133
136134
137135 func getGameResult (gameId,playerAddress) = tryGetString(getGameResultKey(gameId, playerAddress))
138136
139137
140138 func getPlayerWinsKey (playerAddress) = (playerAddress + "_wins")
141139
142140
143141 func getPlayerWins (playerAddress) = tryGetInteger(getPlayerWinsKey(playerAddress))
144142
145143
146144 func getPlayerLosesKey (playerAddress) = (playerAddress + "_loses")
147145
148146
149147 func getPlayerLoses (playerAddress) = tryGetInteger(getPlayerLosesKey(playerAddress))
150148
151149
152150 func getPlayerDrawsKey (playerAddress) = (playerAddress + "_draws")
153151
154152
155153 func getPlayerDraws (playerAddress) = tryGetInteger(getPlayerDrawsKey(playerAddress))
156154
157155
158156 func getGamesPlayedKey () = "gamesPlayed"
159157
160158
161159 func getGamesPlayed () = tryGetInteger(getGamesPlayedKey())
162160
163161
164-func checkDuckOwner (ownerAddress,assetId) = (assetBalance(ownerAddress, assetId) > 0)
162+func getFarmingPower (address,assetId) = match getInteger(Address(farmingAddress), (((("address_" + address) + "_asset_") + assetId) + "_farmingPower")) {
163+ case fp: Int =>
164+ fp
165+ case _ =>
166+ 0
167+}
168+
169+
170+func checkDuckOwner (ownerAddress,assetId) = if ((assetBalance(ownerAddress, assetId) > 0))
171+ then true
172+ else (getFarmingPower(toBase58String(ownerAddress.bytes), toBase58String(assetId)) > 0)
165173
166174
167175 func getScore (a,b) = if ((a > b))
168176 then 1
169177 else if ((b > a))
170178 then -1
171179 else 0
172180
173181
174182 func getWinner (gameId) = {
175183 let gameStep = getStep(gameId)
176184 if ((6 > gameStep))
177185 then {
178186 let expirationHeight = getExpirationHeight(gameId)
179187 if ((expirationHeight == 0))
180188 then throw("Game is not started")
181189 else if ((expirationHeight > height))
182190 then throw("Game is not finished or expired")
183191 else if (((getStep(gameId) % 2) == 0))
184192 then "maker"
185193 else "taker"
186194 }
187195 else {
188196 let makerDuckOrder = split(getDuckOrder(gameId, "maker"), ",")
189197 let takerDuckOrder = split(getDuckOrder(gameId, "taker"), ",")
190198 let makerRarity1 = getRarity(gameId, "maker", makerDuckOrder[0])
191199 let makerRarity2 = getRarity(gameId, "maker", makerDuckOrder[1])
192200 let makerRarity3 = getRarity(gameId, "maker", makerDuckOrder[2])
193201 let takerRarity1 = getRarity(gameId, "taker", takerDuckOrder[0])
194202 let takerRarity2 = getRarity(gameId, "taker", takerDuckOrder[1])
195203 let takerRarity3 = getRarity(gameId, "taker", takerDuckOrder[2])
196204 let makerScore = ((getScore(makerRarity1, takerRarity1) + getScore(makerRarity2, takerRarity2)) + getScore(makerRarity3, takerRarity3))
197205 if ((makerScore > 0))
198206 then "maker"
199207 else if ((0 > makerScore))
200208 then "taker"
201209 else "draw"
202210 }
203211 }
204212
205213
206214 @Callable(i)
207215 func makeGame (slot,rarityRangeWorst,rarityRangeMedium,rarityRangeBest) = {
208216 let callerAddress = toBase58String(i.caller.bytes)
209217 let slotGameId = getSlot(slot)
210218 let payment = value(i.payments[0])
211219 let eggs = payment.amount
212220 let gameId = getNextGameId()
213221 if ((getPlayerCurrentGame(callerAddress) != 0))
214222 then throw("You already have an active game")
215223 else if (if ((0 > slot))
216224 then true
217225 else (slot >= SLOTS))
218226 then throw("Invalid slot")
219227 else if ((slotGameId != 0))
220228 then throw("This slot is busy")
221229 else if ((payment.assetId != eggsAssetId))
222230 then throw(("You can attach only EGGs with the following asset id: " + toBase58String(eggsAssetId)))
223231 else if ((eggs != 1))
224232 then throw("Bet must be 0.01 EGG during beta test")
225233 else if (if ((1 > rarityRangeWorst))
226234 then true
227235 else (rarityRangeWorst > 5))
228236 then throw("Invalid rarity range for the worst duck")
229237 else if (if ((1 > rarityRangeMedium))
230238 then true
231239 else (rarityRangeMedium > 5))
232240 then throw("Invalid rarity range for the medium duck")
233241 else if (if ((1 > rarityRangeBest))
234242 then true
235243 else (rarityRangeBest > 5))
236244 then throw("Invalid rarity range for the best duck")
237245 else if ((rarityRangeWorst > rarityRangeMedium))
238246 then throw("The medium range can't be less than the worst one")
239247 else if ((rarityRangeMedium > rarityRangeBest))
240248 then throw("The best range can't be worse than the medium one")
241249 else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), gameId), StringEntry(getMakerKey(gameId), callerAddress), StringEntry(getPlayerRoleKey(gameId, callerAddress), "maker"), IntegerEntry(getBetEggsKey(gameId), eggs), IntegerEntry(getRarityRangeKey(gameId, "worst"), rarityRangeWorst), IntegerEntry(getRarityRangeKey(gameId, "medium"), rarityRangeMedium), IntegerEntry(getRarityRangeKey(gameId, "best"), rarityRangeBest), IntegerEntry(getWaitingExpirationHeightKey(gameId), (height + WAITING)), IntegerEntry(getSlotKey(slot), gameId), IntegerEntry("nextGameId", (gameId + 1))]
242250 }
243251
244252
245253
246254 @Callable(i)
247255 func takeGame (slot) = {
248256 let callerAddress = toBase58String(i.caller.bytes)
249257 let gameId = getSlot(slot)
250258 let payment = value(i.payments[0])
251259 if ((getPlayerCurrentGame(callerAddress) != 0))
252260 then throw("You already have an active game")
253261 else if (if ((0 > slot))
254262 then true
255263 else (slot >= SLOTS))
256264 then throw("Invalid slot")
257265 else if ((getSlot(slot) == 0))
258266 then throw("This slot is empty")
259267 else if ((payment.assetId != eggsAssetId))
260268 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
261269 else if ((payment.amount != getBetEggs(gameId)))
262270 then throw("Insufficient eggs amount")
263271 else if ((height >= getWaitingExpirationHeight(gameId)))
264272 then throw("This game is expired")
265273 else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), gameId), StringEntry(getTakerKey(gameId), callerAddress), StringEntry(getPlayerRoleKey(gameId, callerAddress), "taker"), IntegerEntry(getStepKey(gameId), 0), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration)), IntegerEntry(getSlotKey(slot), 0), IntegerEntry("gamesPlayed", (getGamesPlayed() + 1))]
266274 }
267275
268276
269277
270278 @Callable(i)
271279 func kickGame (slot) = {
272280 let gameId = getSlot(slot)
273281 if (if ((0 > slot))
274282 then true
275283 else (slot >= SLOTS))
276284 then throw("Invalid slot")
277285 else if ((gameId == 0))
278286 then throw("Slot is empty")
279287 else if ((getWaitingExpirationHeight(gameId) > height))
280288 then throw("Waiting is not finished yet")
281289 else {
282290 let maker = getMaker(gameId)
283291 [IntegerEntry(getPlayerCurrentGameKey(maker), 0), IntegerEntry(getSlotKey(slot), 0), ScriptTransfer(Address(fromBase58String(maker)), getBetEggs(gameId), eggsAssetId)]
284292 }
285293 }
286294
287295
288296
289297 @Callable(i)
290298 func pickDucks (worstDuckId,mediumDuckId,bestDuckId) = {
291299 let callerAddress = toBase58String(i.caller.bytes)
292300 let gameId = getPlayerCurrentGame(callerAddress)
293301 let playerRole = getPlayerRole(gameId, callerAddress)
294302 let gameStep = getStep(gameId)
295303 let worstRarityRange = getRarityRange(gameId, "worst")
296304 let mediumRarityRange = getRarityRange(gameId, "medium")
297305 let bestRarityRange = getRarityRange(gameId, "best")
298306 let invokeWorstRes = invoke(Address(rarityProviderAddress), "getAssetRarity", [worstDuckId], nil)
299307 if ((invokeWorstRes == invokeWorstRes))
300308 then {
301309 let worstRarity = match invokeWorstRes {
302310 case r: Int =>
303311 r
304312 case _ =>
305313 throw("Incorrect invoke result")
306314 }
307315 let invokeMediumRes = invoke(Address(rarityProviderAddress), "getAssetRarity", [mediumDuckId], nil)
308316 if ((invokeMediumRes == invokeMediumRes))
309317 then {
310318 let mediumRarity = match invokeMediumRes {
311319 case r: Int =>
312320 r
313321 case _ =>
314322 throw("Incorrect invoke result")
315323 }
316324 let invokeBestRes = invoke(Address(rarityProviderAddress), "getAssetRarity", [bestDuckId], nil)
317325 if ((invokeBestRes == invokeBestRes))
318326 then {
319327 let bestRarity = match invokeBestRes {
320328 case r: Int =>
321329 r
322330 case _ =>
323331 throw("Incorrect invoke result")
324332 }
325333 if ((gameId == 0))
326334 then throw("You don't have an active game")
327335 else if ((getExpirationHeight(gameId) == 0))
328336 then throw("Game is not started")
329337 else if (if ((gameStep == 0))
330338 then (playerRole != "taker")
331339 else false)
332340 then throw("It is the taker's turn to pick now")
333341 else if (if ((gameStep == 1))
334342 then (playerRole != "maker")
335343 else false)
336344 then throw("It is the maker's turn to pick now")
337345 else if ((gameStep > 1))
338346 then throw("Ducks have already been picked")
339347 else if (!(checkDuckOwner(i.caller, fromBase58String(worstDuckId))))
340348 then throw((("Asset " + worstDuckId) + " doesn't belong to you"))
341349 else if (!(checkDuckOwner(i.caller, fromBase58String(mediumDuckId))))
342350 then throw((("Asset " + mediumDuckId) + " doesn't belong to you"))
343351 else if (!(checkDuckOwner(i.caller, fromBase58String(bestDuckId))))
344352 then throw((("Asset " + bestDuckId) + " doesn't belong to you"))
345353 else if (if ((5 > worstRarityRange))
346354 then if ((worstRarity > (worstRarityRange * 10)))
347355 then true
348356 else (((worstRarityRange - 1) * 10) >= worstRarity)
349357 else false)
350358 then throw("Worst duck doesn't fit rarity range")
351359 else if (if ((5 > mediumRarityRange))
352360 then if ((mediumRarity > (mediumRarityRange * 10)))
353361 then true
354362 else (((mediumRarityRange - 1) * 10) >= mediumRarity)
355363 else false)
356364 then throw("Medium duck doesn't fit rarity range")
357365 else if (if ((5 > bestRarityRange))
358366 then if ((bestRarity > (bestRarityRange * 10)))
359367 then true
360368 else (((bestRarityRange - 1) * 10) >= bestRarity)
361369 else false)
362370 then throw("Best duck doesn't fit rarity range")
363371 else if (if ((worstRarityRange == 5))
364372 then (40 >= worstRarity)
365373 else false)
366374 then throw("Worst duck doesn't fit rarity range")
367375 else if (if ((mediumRarityRange == 5))
368376 then (40 >= mediumRarity)
369377 else false)
370378 then throw("Medium duck doesn't fit rarity range")
371379 else if (if ((bestRarityRange == 5))
372380 then (40 >= bestRarity)
373381 else false)
374382 then throw("Best duck doesn't fit rarity range")
375383 else if (if (if ((worstRarity == mediumRarity))
376384 then true
377385 else (worstRarity == bestRarity))
378386 then true
379387 else (mediumRarity == bestRarity))
380388 then throw("Ducks must have different rarities")
381389 else [IntegerEntry(getRarityKey(gameId, playerRole, "worst"), worstRarity), IntegerEntry(getRarityKey(gameId, playerRole, "medium"), mediumRarity), IntegerEntry(getRarityKey(gameId, playerRole, "best"), bestRarity), StringEntry(getDuckIdKey(gameId, playerRole, "worst"), worstDuckId), StringEntry(getDuckIdKey(gameId, playerRole, "medium"), mediumDuckId), StringEntry(getDuckIdKey(gameId, playerRole, "best"), bestDuckId), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
382390 }
383391 else throw("Strict value is not equal to itself.")
384392 }
385393 else throw("Strict value is not equal to itself.")
386394 }
387395 else throw("Strict value is not equal to itself.")
388396 }
389397
390398
391399
392400 @Callable(i)
393401 func commit (hash) = {
394402 let callerAddress = toBase58String(i.caller.bytes)
395403 let gameId = getPlayerCurrentGame(callerAddress)
396404 let playerRole = getPlayerRole(gameId, callerAddress)
397405 let gameStep = getStep(gameId)
398406 if ((gameId == 0))
399407 then throw("You don't have an active game")
400408 else if ((2 > gameStep))
401409 then throw("Commit is not started")
402410 else if (if ((gameStep == 2))
403411 then (playerRole != "taker")
404412 else false)
405413 then throw("It is the taker's turn to pick now")
406414 else if (if ((gameStep == 3))
407415 then (playerRole != "maker")
408416 else false)
409417 then throw("It is the maker's turn to pick now")
410418 else if ((gameStep > 3))
411419 then throw("Commit is finished")
412420 else [StringEntry(getCommitKey(gameId, playerRole), hash), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
413421 }
414422
415423
416424
417425 @Callable(i)
418426 func reveal (duckOrder,salt) = {
419427 let callerAddress = toBase58String(i.caller.bytes)
420428 let gameId = getPlayerCurrentGame(callerAddress)
421429 let playerRole = getPlayerRole(gameId, callerAddress)
422430 let gameStep = getStep(gameId)
423431 if ((gameId == 0))
424432 then throw("You don't have an active game")
425433 else if ((4 > gameStep))
426434 then throw("Reveal is not started")
427435 else if (if ((gameStep == 4))
428436 then (playerRole != "taker")
429437 else false)
430438 then throw("It is the taker's turn to pick now")
431439 else if (if ((gameStep == 5))
432440 then (playerRole != "maker")
433441 else false)
434442 then throw("It is the maker's turn to pick now")
435443 else if ((gameStep > 5))
436444 then throw("Reveal is finished")
437445 else if (if (if (if (if (if ((duckOrder != "worst,medium,best"))
438446 then (duckOrder != "worst,best,medium")
439447 else false)
440448 then (duckOrder != "medium,worst,best")
441449 else false)
442450 then (duckOrder != "medium,best,worst")
443451 else false)
444452 then (duckOrder != "best,worst,medium")
445453 else false)
446454 then (duckOrder != "best,medium,worst")
447455 else false)
448456 then throw("Reveal data is not valid")
449457 else if ((toBase58String(sha256(toBytes((duckOrder + salt)))) != getCommit(gameId, playerRole)))
450458 then throw("Reveal doesn't match commit")
451459 else [StringEntry(getDuckOrderKey(gameId, playerRole), duckOrder), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
452460 }
453461
454462
455463
456464 @Callable(i)
457465 func getPrize () = {
458466 let callerAddress = toBase58String(i.caller.bytes)
459467 let gameId = getPlayerCurrentGame(callerAddress)
460468 let playerRole = getPlayerRole(gameId, callerAddress)
461469 let anotherPlayerAddress = if ((playerRole == "maker"))
462470 then getTaker(gameId)
463471 else getMaker(gameId)
464472 let winner = getWinner(gameId)
465473 if ((gameId == 0))
466474 then throw("You don't have an active game")
467475 else if ((winner == playerRole))
468476 then [IntegerEntry(getPlayerCurrentGameKey(callerAddress), 0), IntegerEntry(getPlayerCurrentGameKey(anotherPlayerAddress), 0), IntegerEntry(getPlayerWinsKey(callerAddress), (getPlayerWins(callerAddress) + 1)), IntegerEntry(getPlayerLosesKey(anotherPlayerAddress), (getPlayerLoses(anotherPlayerAddress) + 1)), StringEntry(getGameResultKey(gameId, callerAddress), "win"), StringEntry(getGameResultKey(gameId, anotherPlayerAddress), "lose"), ScriptTransfer(i.caller, (getBetEggs(gameId) * 2), eggsAssetId)]
469477 else if ((winner == "draw"))
470478 then [IntegerEntry(getPlayerCurrentGameKey(callerAddress), 0), IntegerEntry(getPlayerDrawsKey(callerAddress), (getPlayerDraws(callerAddress) + 1)), StringEntry(getGameResultKey(gameId, callerAddress), "draw"), ScriptTransfer(i.caller, getBetEggs(gameId), eggsAssetId)]
471479 else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), 0)]
472480 }
473481
474482
475483 @Verifier(tx)
476484 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
477485

github/deemru/w8io/169f3d6 
76.20 ms