tx · Fw1iCwZZDCPhePwNJjcMPKF7NbEaTBRsK5i7WG6hSrz3

3N9f1tiq3xsNPRsXeXmkkTwtRFY6wCQw7Y4:  -0.01400000 Waves

2021.10.21 19:42 [1756319] smart account 3N9f1tiq3xsNPRsXeXmkkTwtRFY6wCQw7Y4 > SELF 0.00000000 Waves

{ "type": 13, "id": "Fw1iCwZZDCPhePwNJjcMPKF7NbEaTBRsK5i7WG6hSrz3", "fee": 1400000, "feeAssetId": null, "timestamp": 1634834595746, "version": 2, "chainId": 84, "sender": "3N9f1tiq3xsNPRsXeXmkkTwtRFY6wCQw7Y4", "senderPublicKey": "4LQ3XHwdngCdK63o8zYFKDB6cMM9uVebqBeF1Wj3d6ZA", "proofs": [ "5LXXC2TWmFuPrpREPf7LGR7wePjv9TrU14AhZSMLbLBET3RW4anvP1fKJHZQ8WwgoobJKRF8BEWFXix2GzLFpGmR" ], "script": "base64:AAIFAAAAAAAAAEEIAhIHCgUBAQEBCBIKCggBAQEBAQEBBBIDCgEBEgsKCQEBAQEBAQgICBIECgIICBIDCgEIEgMKAQgSBAoCCAgSAAAAAEMAAAAADmZhcm1pbmdBZGRyZXNzAQAAABoBVPI2OcArysfSHWdY6vW8njYvqXogIGoz0wAAAAAVcmFyaXR5UHJvdmlkZXJBZGRyZXNzAQAAABoBVPqvXAIOK77VhJOb48rzK/MJjwrn6vR1pAAAAAALZWdnc0Fzc2V0SWQBAAAAIJCd0BOFRitA5P/T5bgiHb1Vgk7rzOBhSkWkXfeUEYRRAAAAAAVTTE9UUwAAAAAAAAAACgAAAAAHV0FJVElORwAAAAAAAAAACAAAAAAMc3RlcER1cmF0aW9uAAAAAAAAAAAFAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAADHRyeUdldFN0cmluZwAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADXRyeUdldEJvb2xlYW4AAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIHAQAAAA1nZXROZXh0R2FtZUlkAAAAAAQAAAAGbmV4dElkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAACm5leHRHYW1lSWQDCQAAAAAAAAIFAAAABm5leHRJZAAAAAAAAAAAAAAAAAAAAAAAAQUAAAAGbmV4dElkAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEAAAANcGxheWVyQWRkcmVzcwkAASwAAAACBQAAAA1wbGF5ZXJBZGRyZXNzAgAAAAxfY3VycmVudEdhbWUBAAAAFGdldFBsYXllckN1cnJlbnRHYW1lAAAAAQAAAA1wbGF5ZXJBZGRyZXNzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADXBsYXllckFkZHJlc3MBAAAACmdldFNsb3RLZXkAAAABAAAABHNsb3QJAAEsAAAAAgIAAAAEc2xvdAkAAaQAAAABBQAAAARzbG90AQAAAAdnZXRTbG90AAAAAQAAAARzbG90CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAApnZXRTbG90S2V5AAAAAQUAAAAEc2xvdAEAAAAQZ2V0UGxheWVyUm9sZUtleQAAAAIAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAAAFfBQAAAA1wbGF5ZXJBZGRyZXNzAQAAAA1nZXRQbGF5ZXJSb2xlAAAAAgAAAAZnYW1lSWQAAAANcGxheWVyQWRkcmVzcwkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAABBnZXRQbGF5ZXJSb2xlS2V5AAAAAgUAAAAGZ2FtZUlkBQAAAA1wbGF5ZXJBZGRyZXNzAQAAAAtnZXRNYWtlcktleQAAAAEAAAAGZ2FtZUlkCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAABl9tYWtlcgEAAAAIZ2V0TWFrZXIAAAABAAAABmdhbWVJZAkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAAAtnZXRNYWtlcktleQAAAAEFAAAABmdhbWVJZAEAAAALZ2V0VGFrZXJLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAAAZfdGFrZXIBAAAACGdldFRha2VyAAAAAQAAAAZnYW1lSWQJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAALZ2V0VGFrZXJLZXkAAAABBQAAAAZnYW1lSWQBAAAAFmdldFRha2VyU2tpcFJlcGxhY2VLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAABJfdGFrZXJfc2tpcFJlcGxhY2UBAAAAE2dldFRha2VyU2tpcFJlcGxhY2UAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEJvb2xlYW4AAAABCQEAAAAWZ2V0VGFrZXJTa2lwUmVwbGFjZUtleQAAAAEFAAAABmdhbWVJZAEAAAAJZ2V0QmV0S2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAAEX2JldAEAAAAGZ2V0QmV0AAAAAQAAAAZnYW1lSWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAACWdldEJldEtleQAAAAEFAAAABmdhbWVJZAEAAAAdZ2V0V2FpdGluZ0V4cGlyYXRpb25IZWlnaHRLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAABhfd2FpdGluZ0V4cGlyYXRpb25IZWlnaHQBAAAAGmdldFdhaXRpbmdFeHBpcmF0aW9uSGVpZ2h0AAAAAQAAAAZnYW1lSWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAHWdldFdhaXRpbmdFeHBpcmF0aW9uSGVpZ2h0S2V5AAAAAQUAAAAGZ2FtZUlkAQAAABZnZXRFeHBpcmF0aW9uSGVpZ2h0S2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAARX2V4cGlyYXRpb25IZWlnaHQBAAAAE2dldEV4cGlyYXRpb25IZWlnaHQAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAWZ2V0RXhwaXJhdGlvbkhlaWdodEtleQAAAAEFAAAABmdhbWVJZAEAAAALZ2V0UmFuZ2VLZXkAAAACAAAABmdhbWVJZAAAAA1yYW5nZVBvc2l0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAAHX3JhbmdlXwUAAAANcmFuZ2VQb3NpdGlvbgEAAAAIZ2V0UmFuZ2UAAAACAAAABmdhbWVJZAAAAA1yYW5nZVBvc2l0aW9uCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAAtnZXRSYW5nZUtleQAAAAIFAAAABmdhbWVJZAUAAAANcmFuZ2VQb3NpdGlvbgEAAAAYZ2V0TWFrZXJSYW5kb21zQ29tbWl0S2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAAUX21ha2VyX3JhbmRvbXNDb21taXQBAAAAFWdldE1ha2VyUmFuZG9tc0NvbW1pdAAAAAEAAAAGZ2FtZUlkCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAGGdldE1ha2VyUmFuZG9tc0NvbW1pdEtleQAAAAEFAAAABmdhbWVJZAEAAAANZ2V0UmFuZG9tc0tleQAAAAIAAAAGZ2FtZUlkAAAACnBsYXllclJvbGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAAV8FAAAACnBsYXllclJvbGUCAAAACF9yYW5kb21zAQAAAApnZXRSYW5kb21zAAAAAgAAAAZnYW1lSWQAAAAKcGxheWVyUm9sZQkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAAA1nZXRSYW5kb21zS2V5AAAAAgUAAAAGZ2FtZUlkBQAAAApwbGF5ZXJSb2xlAQAAAApnZXRTdGVwS2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAAFX3N0ZXABAAAAB2dldFN0ZXAAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAKZ2V0U3RlcEtleQAAAAEFAAAABmdhbWVJZAEAAAAMZ2V0UmFyaXR5S2V5AAAAAwAAAAZnYW1lSWQAAAAKcGxheWVyUm9sZQAAAA1yYW5nZVBvc2l0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAABXwUAAAAKcGxheWVyUm9sZQIAAAABXwUAAAANcmFuZ2VQb3NpdGlvbgIAAAAGUmFyaXR5AQAAAAlnZXRSYXJpdHkAAAADAAAABmdhbWVJZAAAAApwbGF5ZXJSb2xlAAAADXJhbmdlUG9zaXRpb24JAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAADGdldFJhcml0eUtleQAAAAMFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQUAAAANcmFuZ2VQb3NpdGlvbgEAAAATZ2V0UmVwbGFjZWRSYW5nZUtleQAAAAIAAAAGZ2FtZUlkAAAACnBsYXllclJvbGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAAV8FAAAACnBsYXllclJvbGUCAAAADl9yZXBsYWNlZFJhbmdlAQAAABBnZXRSZXBsYWNlZFJhbmdlAAAAAgAAAAZnYW1lSWQAAAAKcGxheWVyUm9sZQkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAABNnZXRSZXBsYWNlZFJhbmdlS2V5AAAAAgUAAAAGZ2FtZUlkBQAAAApwbGF5ZXJSb2xlAQAAAAxnZXREdWNrSWRLZXkAAAACAAAABmdhbWVJZAAAAApwbGF5ZXJSb2xlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGdhbWUJAAGkAAAAAQUAAAAGZ2FtZUlkAgAAAAFfBQAAAApwbGF5ZXJSb2xlAgAAAAdfZHVja0lkAQAAAAlnZXREdWNrSWQAAAACAAAABmdhbWVJZAAAAApwbGF5ZXJSb2xlCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAADGdldER1Y2tJZEtleQAAAAIFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQEAAAAWZ2V0VGFrZXJPcmRlckNvbW1pdEtleQAAAAEAAAAGZ2FtZUlkCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAEl90YWtlcl9vcmRlckNvbW1pdAEAAAATZ2V0VGFrZXJPcmRlckNvbW1pdAAAAAEAAAAGZ2FtZUlkCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAFmdldFRha2VyT3JkZXJDb21taXRLZXkAAAABBQAAAAZnYW1lSWQBAAAAC2dldE9yZGVyS2V5AAAAAgAAAAZnYW1lSWQAAAAKcGxheWVyUm9sZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARnYW1lCQABpAAAAAEFAAAABmdhbWVJZAIAAAABXwUAAAAKcGxheWVyUm9sZQIAAAAGX29yZGVyAQAAAAhnZXRPcmRlcgAAAAIAAAAGZ2FtZUlkAAAACnBsYXllclJvbGUJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAALZ2V0T3JkZXJLZXkAAAACBQAAAAZnYW1lSWQFAAAACnBsYXllclJvbGUBAAAAEmdldFBsYXllclJlc3VsdEtleQAAAAIAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAAV8FAAAADXBsYXllckFkZHJlc3MCAAAAB19yZXN1bHQBAAAAD2dldFBsYXllclJlc3VsdAAAAAIAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAASZ2V0UGxheWVyUmVzdWx0S2V5AAAAAgUAAAAGZ2FtZUlkBQAAAA1wbGF5ZXJBZGRyZXNzAQAAABFnZXRQbGF5ZXJQcml6ZUtleQAAAAIAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEZ2FtZQkAAaQAAAABBQAAAAZnYW1lSWQCAAAAAV8FAAAADXBsYXllckFkZHJlc3MCAAAABl9wcml6ZQEAAAAOZ2V0UGxheWVyUHJpemUAAAACAAAABmdhbWVJZAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABFnZXRQbGF5ZXJQcml6ZUtleQAAAAIFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwEAAAAQZ2V0UGxheWVyV2luc0tleQAAAAEAAAANcGxheWVyQWRkcmVzcwkAASwAAAACBQAAAA1wbGF5ZXJBZGRyZXNzAgAAAAVfd2lucwEAAAANZ2V0UGxheWVyV2lucwAAAAEAAAANcGxheWVyQWRkcmVzcwkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAQZ2V0UGxheWVyV2luc0tleQAAAAEFAAAADXBsYXllckFkZHJlc3MBAAAAEWdldFBsYXllckxvc2VzS2V5AAAAAQAAAA1wbGF5ZXJBZGRyZXNzCQABLAAAAAIFAAAADXBsYXllckFkZHJlc3MCAAAABl9sb3NlcwEAAAAOZ2V0UGxheWVyTG9zZXMAAAABAAAADXBsYXllckFkZHJlc3MJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEWdldFBsYXllckxvc2VzS2V5AAAAAQUAAAANcGxheWVyQWRkcmVzcwEAAAARZ2V0UGxheWVyRHJhd3NLZXkAAAABAAAADXBsYXllckFkZHJlc3MJAAEsAAAAAgUAAAANcGxheWVyQWRkcmVzcwIAAAAGX2RyYXdzAQAAAA5nZXRQbGF5ZXJEcmF3cwAAAAEAAAANcGxheWVyQWRkcmVzcwkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARZ2V0UGxheWVyRHJhd3NLZXkAAAABBQAAAA1wbGF5ZXJBZGRyZXNzAQAAAA9nZXRQbGF5ZXJQbkxLZXkAAAABAAAADXBsYXllckFkZHJlc3MJAAEsAAAAAgUAAAANcGxheWVyQWRkcmVzcwIAAAAEX1BuTAEAAAAMZ2V0UGxheWVyUG5MAAAAAQAAAA1wbGF5ZXJBZGRyZXNzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAA9nZXRQbGF5ZXJQbkxLZXkAAAABBQAAAA1wbGF5ZXJBZGRyZXNzAQAAABFnZXRHYW1lc1BsYXllZEtleQAAAAACAAAAC2dhbWVzUGxheWVkAQAAAA5nZXRHYW1lc1BsYXllZAAAAAAJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEWdldEdhbWVzUGxheWVkS2V5AAAAAAEAAAAPZ2V0RmFybWluZ1Bvd2VyAAAAAgAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAB0FkZHJlc3MAAAABBQAAAA5mYXJtaW5nQWRkcmVzcwkAASwAAAACCQABLAAAAAIJ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AAZnYW1lSWQAAAAKdGFrZXJPcmRlcgAAAAdleHBpcmVkBAAAAANiZXQJAQAAAAZnZXRCZXQAAAABBQAAAAZnYW1lSWQEAAAADG1ha2VyQWRkcmVzcwkBAAAACGdldE1ha2VyAAAAAQUAAAAGZ2FtZUlkBAAAAAx0YWtlckFkZHJlc3MJAQAAAAhnZXRUYWtlcgAAAAEFAAAABmdhbWVJZAQAAAAGd2lubmVyCQEAAAAJZ2V0V2lubmVyAAAAAwUAAAAGZ2FtZUlkBQAAAAp0YWtlck9yZGVyBQAAAAdleHBpcmVkBAAAAA13aW5uZXJBZGRyZXNzAwkAAAAAAAACBQAAAAZ3aW5uZXICAAAABW1ha2VyBQAAAAxtYWtlckFkZHJlc3MDCQAAAAAAAAIFAAAABndpbm5lcgIAAAAFdGFrZXIFAAAADHRha2VyQWRkcmVzcwIAAAAABAAAAAxsb3NlckFkZHJlc3MDCQAAAAAAAAIFAAAABndpbm5lcgIAAAAFdGFrZXIFAAAADG1ha2VyQWRkcmVzcwMJAAAAAAAAAgUAAAAGd2lubmVyAgAAAAVtYWtlcgUAAAAMdGFrZXJBZGRyZXNzAgAAAAADCQEAAAACIT0AAAACBQAAAA13aW5uZXJBZGRyZXNzAgAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADXdpbm5lckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADGxvc2VyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGdldFBsYXllcldpbnNLZXkAAAABBQAAAA13aW5uZXJBZGRyZXNzCQAAZAAAAAIJAQAAAA1nZXRQbGF5ZXJXaW5zAAAAAQUAAAANd2lubmVyQWRkcmVzcwAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldFBsYXllckxvc2VzS2V5AAAAAQUAAAAMbG9zZXJBZGRyZXNzCQAAZAAAAAIJAQAAAA5nZXRQbGF5ZXJMb3NlcwAAAAEFAAAADGxvc2VyQWRkcmVzcwAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0UGxheWVyUmVzdWx0S2V5AAAAAgUAAAAGZ2FtZUlkBQAAAA13aW5uZXJBZGRyZXNzAgAAAAN3aW4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmdldFBsYXllclJlc3VsdEtleQAAAAIFAAAABmdhbWVJZAUAAAAMbG9zZXJBZGRyZXNzAgAAAARsb3NlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0UGxheWVyUHJpemVLZXkAAAACBQAAAAZnYW1lSWQFAAAADXdpbm5lckFkZHJlc3MFAAAAA2JldAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldFBsYXllclByaXplS2V5AAAAAgUAAAAGZ2FtZUlkBQAAAAxsb3NlckFkZHJlc3MJAQAAAAEtAAAAAQUAAAADYmV0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0UGxheWVyUG5MS2V5AAAAAQUAAAANd2lubmVyQWRkcmVzcwkAAGQAAAACCQEAAAAMZ2V0UGxheWVyUG5MAAAAAQUAAAANd2lubmVyQWRkcmVzcwUAAAADYmV0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0UGxheWVyUG5MS2V5AAAAAQUAAAAMbG9zZXJBZGRyZXNzCQAAZQAAAAIJAQAAAAxnZXRQbGF5ZXJQbkwAAAABBQAAAAxsb3NlckFkZHJlc3MFAAAAA2JldAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAANd2lubmVyQWRkcmVzcwkAAGgAAAACBQAAAANiZXQAAAAAAAAAAAIFAAAAC2VnZ3NBc3NldElkBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADG1ha2VyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF2dldFBsYXllckN1cnJlbnRHYW1lS2V5AAAAAQUAAAAMdGFrZXJBZGRyZXNzAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0UGxheWVyRHJhd3NLZXkAAAABBQAAAAxtYWtlckFkZHJlc3MJAABkAAAAAgkBAAAADmdldFBsYXllckRyYXdzAAAAAQUAAAAMbWFrZXJBZGRyZXNzAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0UGxheWVyRHJhd3NLZXkAAAABBQAAAAx0YWtlckFkZHJlc3MJAABkAAAAAgkBAAAADmdldFBsYXllckRyYXdzAAAAAQUAAAAMdGFrZXJBZGRyZXNzAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJnZXRQbGF5ZXJSZXN1bHRLZXkAAAACBQAAAAZnYW1lSWQFAAAADG1ha2VyQWRkcmVzcwIAAAAEZHJhdwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0UGxheWVyUmVzdWx0S2V5AAAAAgUAAAAGZ2FtZUlkBQAAAAx0YWtlckFkZHJlc3MCAAAABGRyYXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRQbGF5ZXJQcml6ZUtleQAAAAIFAAAABmdhbWVJZAUAAAAMbWFrZXJBZGRyZXNzAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0UGxheWVyUHJpemVLZXkAAAACBQAAAAZnYW1lSWQFAAAADHRha2VyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAMbWFrZXJBZGRyZXNzBQAAAANiZXQFAAAAC2VnZ3NBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAx0YWtlckFkZHJlc3MFAAAA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AAAAAAAABAAAAAp3b3JzdFJhbmdlCQEAAAAIZ2V0UmFuZ2UAAAACBQAAAAZnYW1lSWQCAAAABXdvcnN0BAAAAAttZWRpdW1SYW5nZQkBAAAACGdldFJhbmdlAAAAAgUAAAAGZ2FtZUlkAgAAAAZtZWRpdW0EAAAACWJlc3RSYW5nZQkBAAAACGdldFJhbmdlAAAAAgUAAAAGZ2FtZUlkAgAAAARiZXN0BAAAABB3b3JzdFJhcml0eU1ha2VyAwkAAAAAAAACBQAAAA5yYW5nZVRvUmVwbGFjZQIAAAAFd29yc3QFAAAAD3Jhcml0eVRvUmVwbGFjZQkBAAAAD2dldFJhbmRvbVJhcml0eQAAAAIJAABkAAAAAgUAAAAHcmFuZG9tMQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRha2VyUmFuZG9tcwAAAAAAAAAAAAUAAAAKd29yc3RSYW5nZQQAAAARbWVkaXVtUmFyaXR5TWFrZXIDCQAAAAAAAAIFAAAADnJhbmdlVG9SZXBsYWNlAgAAAAZtZWRpdW0FAAAAD3Jhcml0eVRvUmVwbGFjZQkBAAAAD2dldFJhbmRvbVJhcml0eQAAAAIJAABkAAAAAgUAAAAHcmFuZG9tMgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRha2VyUmFuZG9tcwAAAAAAAAAAAQUAAAALbWVkaXVtUmFuZ2UEAAAAD2Jlc3RSYXJpdHlNYWtlcgMJAAAAAAAAAgUAAAAOcmFuZ2VUb1JlcGxhY2UCAAAABGJlc3QFAAAAD3Jhcml0eVRvUmVwbGFjZQkBAAAAD2dldFJhbmRvbVJhcml0eQAAAAIJAABkAAAAAgUAAAAHcmFuZG9tMwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRha2VyUmFuZG9tcwAAAAAAAAAAAgUAAAAJYmVzdFJhbmdlBAAAABB3b3JzdFJhcml0eVRha2VyCQEAAAAPZ2V0UmFuZG9tUmFyaXR5AAAAAgkAAGQAAAACBQAAAAdyYW5kb200CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGFrZXJSYW5kb21zAAAAAAAAAAADBQAAAAp3b3JzdFJhbmdlBAAAABFt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a2VyBQAAAA5yYW5nZVRvUmVwbGFjZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMZ2V0RHVja0lkS2V5AAAAAgUAAAAGZ2FtZUlkAgAAAAVtYWtlcgUAAAAGZHVja0lkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAMZ2V0UmFyaXR5S2V5AAAAAwUAAAAGZ2FtZUlkAgAAAAV0YWtlcgIAAAAFd29yc3QFAAAAEHdvcnN0UmFyaXR5VGFrZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxnZXRSYXJpdHlLZXkAAAADBQAAAAZnYW1lSWQCAAAABXRha2VyAgAAAAZtZWRpdW0FAAAAEW1lZGl1bVJhcml0eVRha2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAMZ2V0UmFyaXR5S2V5AAAAAwUAAAAGZ2FtZUlkAgAAAAV0YWtlcgIAAAAEYmVzdAUAAAAPYmVzdFJhcml0eVRha2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKZ2V0U3RlcEtleQAAAAEFAAAABmdhbWVJZAUAAAAIbmV4dFN0ZXAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZnZXRFeHBpcmF0aW9uSGVpZ2h0S2V5AAAAAQUAAAAGZ2FtZUlkCQAAZAAAAAIFAAAABmhlaWdodAUAAAAMc3RlcER1cmF0aW9uBQAAAANuaWwAAAABaQEAAAAMcmVwbGFjZVRha2VyAAAAAgAAAA5yYW5nZVRvUmVwbGFjZQAAAAZkdWNrSWQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAGZ2FtZUlkCQEAAAAUZ2V0UGxheWVyQ3VycmVudEdhbWUAAAABBQAAAA1jYWxsZXJBZGRyZXNzBAAAAApwbGF5ZXJSb2xlCQEAAAANZ2V0UGxheWVyUm9sZQAAAAIFAAAABmdhbWVJZAUAAAANY2FsbGVyQWRkcmVzcwQAAAAEc3RlcAkBAAAAB2dldFN0ZXAAAAABBQAAAAZnYW1lSWQEAAAABXJhbmdlCQEAAAAIZ2V0UmFu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", "height": 1756319, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let farmingAddress = base58'3NBznG19rEYUAcnukTRTtwJHBVKQLbobVdC'
5+
6+let rarityProviderAddress = base58'3NCman4dCzk1HWWU4DPTr5rsbhvuUCwwUZh'
7+
8+let eggsAssetId = base58'AjXHBGsVDeXETQPk3qH4CPbZdfXPyNo5XoBx7jVbtwWG'
9+
10+let SLOTS = 10
11+
12+let WAITING = 8
13+
14+let stepDuration = 5
15+
16+func tryGetInteger (key) = match getInteger(this, key) {
17+ case b: Int =>
18+ b
19+ case _ =>
20+ 0
21+}
22+
23+
24+func tryGetString (key) = match getString(this, key) {
25+ case a: String =>
26+ a
27+ case _ =>
28+ ""
29+}
30+
31+
32+func tryGetBoolean (key) = match getBoolean(this, key) {
33+ case b: Boolean =>
34+ b
35+ case _ =>
36+ false
37+}
38+
39+
40+func getNextGameId () = {
41+ let nextId = tryGetInteger("nextGameId")
42+ if ((nextId == 0))
43+ then 1
44+ else nextId
45+ }
46+
47+
48+func getPlayerCurrentGameKey (playerAddress) = (playerAddress + "_currentGame")
49+
50+
51+func getPlayerCurrentGame (playerAddress) = tryGetInteger(getPlayerCurrentGameKey(playerAddress))
52+
53+
54+func getSlotKey (slot) = ("slot" + toString(slot))
55+
56+
57+func getSlot (slot) = tryGetInteger(getSlotKey(slot))
58+
59+
60+func getPlayerRoleKey (gameId,playerAddress) = ((("game" + toString(gameId)) + "_") + playerAddress)
61+
62+
63+func getPlayerRole (gameId,playerAddress) = tryGetString(getPlayerRoleKey(gameId, playerAddress))
64+
65+
66+func getMakerKey (gameId) = (("game" + toString(gameId)) + "_maker")
67+
68+
69+func getMaker (gameId) = tryGetString(getMakerKey(gameId))
70+
71+
72+func getTakerKey (gameId) = (("game" + toString(gameId)) + "_taker")
73+
74+
75+func getTaker (gameId) = tryGetString(getTakerKey(gameId))
76+
77+
78+func getTakerSkipReplaceKey (gameId) = (("game" + toString(gameId)) + "_taker_skipReplace")
79+
80+
81+func getTakerSkipReplace (gameId) = tryGetBoolean(getTakerSkipReplaceKey(gameId))
82+
83+
84+func getBetKey (gameId) = (("game" + toString(gameId)) + "_bet")
85+
86+
87+func getBet (gameId) = tryGetInteger(getBetKey(gameId))
88+
89+
90+func getWaitingExpirationHeightKey (gameId) = (("game" + toString(gameId)) + "_waitingExpirationHeight")
91+
92+
93+func getWaitingExpirationHeight (gameId) = tryGetInteger(getWaitingExpirationHeightKey(gameId))
94+
95+
96+func getExpirationHeightKey (gameId) = (("game" + toString(gameId)) + "_expirationHeight")
97+
98+
99+func getExpirationHeight (gameId) = tryGetInteger(getExpirationHeightKey(gameId))
100+
101+
102+func getRangeKey (gameId,rangePosition) = ((("game" + toString(gameId)) + "_range_") + rangePosition)
103+
104+
105+func getRange (gameId,rangePosition) = tryGetInteger(getRangeKey(gameId, rangePosition))
106+
107+
108+func getMakerRandomsCommitKey (gameId) = (("game" + toString(gameId)) + "_maker_randomsCommit")
109+
110+
111+func getMakerRandomsCommit (gameId) = tryGetString(getMakerRandomsCommitKey(gameId))
112+
113+
114+func getRandomsKey (gameId,playerRole) = (((("game" + toString(gameId)) + "_") + playerRole) + "_randoms")
115+
116+
117+func getRandoms (gameId,playerRole) = tryGetString(getRandomsKey(gameId, playerRole))
118+
119+
120+func getStepKey (gameId) = (("game" + toString(gameId)) + "_step")
121+
122+
123+func getStep (gameId) = tryGetInteger(getStepKey(gameId))
124+
125+
126+func getRarityKey (gameId,playerRole,rangePosition) = (((((("game" + toString(gameId)) + "_") + playerRole) + "_") + rangePosition) + "Rarity")
127+
128+
129+func getRarity (gameId,playerRole,rangePosition) = tryGetInteger(getRarityKey(gameId, playerRole, rangePosition))
130+
131+
132+func getReplacedRangeKey (gameId,playerRole) = (((("game" + toString(gameId)) + "_") + playerRole) + "_replacedRange")
133+
134+
135+func getReplacedRange (gameId,playerRole) = tryGetString(getReplacedRangeKey(gameId, playerRole))
136+
137+
138+func getDuckIdKey (gameId,playerRole) = (((("game" + toString(gameId)) + "_") + playerRole) + "_duckId")
139+
140+
141+func getDuckId (gameId,playerRole) = tryGetString(getDuckIdKey(gameId, playerRole))
142+
143+
144+func getTakerOrderCommitKey (gameId) = (("game" + toString(gameId)) + "_taker_orderCommit")
145+
146+
147+func getTakerOrderCommit (gameId) = tryGetString(getTakerOrderCommitKey(gameId))
148+
149+
150+func getOrderKey (gameId,playerRole) = (((("game" + toString(gameId)) + "_") + playerRole) + "_order")
151+
152+
153+func getOrder (gameId,playerRole) = tryGetString(getOrderKey(gameId, playerRole))
154+
155+
156+func getPlayerResultKey (gameId,playerAddress) = (((("game" + toString(gameId)) + "_") + playerAddress) + "_result")
157+
158+
159+func getPlayerResult (gameId,playerAddress) = tryGetString(getPlayerResultKey(gameId, playerAddress))
160+
161+
162+func getPlayerPrizeKey (gameId,playerAddress) = (((("game" + toString(gameId)) + "_") + playerAddress) + "_prize")
163+
164+
165+func getPlayerPrize (gameId,playerAddress) = tryGetInteger(getPlayerPrizeKey(gameId, playerAddress))
166+
167+
168+func getPlayerWinsKey (playerAddress) = (playerAddress + "_wins")
169+
170+
171+func getPlayerWins (playerAddress) = tryGetInteger(getPlayerWinsKey(playerAddress))
172+
173+
174+func getPlayerLosesKey (playerAddress) = (playerAddress + "_loses")
175+
176+
177+func getPlayerLoses (playerAddress) = tryGetInteger(getPlayerLosesKey(playerAddress))
178+
179+
180+func getPlayerDrawsKey (playerAddress) = (playerAddress + "_draws")
181+
182+
183+func getPlayerDraws (playerAddress) = tryGetInteger(getPlayerDrawsKey(playerAddress))
184+
185+
186+func getPlayerPnLKey (playerAddress) = (playerAddress + "_PnL")
187+
188+
189+func getPlayerPnL (playerAddress) = tryGetInteger(getPlayerPnLKey(playerAddress))
190+
191+
192+func getGamesPlayedKey () = "gamesPlayed"
193+
194+
195+func getGamesPlayed () = tryGetInteger(getGamesPlayedKey())
196+
197+
198+func getFarmingPower (address,assetId) = match getInteger(Address(farmingAddress), (((("address_" + address) + "_asset_") + assetId) + "_farmingPower")) {
199+ case fp: Int =>
200+ fp
201+ case _ =>
202+ 0
203+}
204+
205+
206+func checkDuckOwner (ownerAddress,assetId) = if ((assetBalance(ownerAddress, assetId) > 0))
207+ then true
208+ else (getFarmingPower(toBase58String(ownerAddress.bytes), toBase58String(assetId)) > 0)
209+
210+
211+let RANGES = [[2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 30], [31, 33, 35, 37, 40], [44, 50, 57, 70, 100]]
212+
213+func getRandomRarity (random,range) = {
214+ let randomIdx = (random % size(RANGES[(range - 1)]))
215+RANGES[(range - 1)][randomIdx]
216+ }
217+
218+
219+func getScore (a,b) = if ((a > b))
220+ then 1
221+ else if ((b > a))
222+ then -1
223+ else 0
224+
225+
226+func getWinner (gameId,takerOrderStr,expired) = {
227+ let step = getStep(gameId)
228+ if (expired)
229+ then {
230+ let expirationHeight = getExpirationHeight(gameId)
231+ if ((step == 0))
232+ then throw("Game is not started")
233+ else if ((expirationHeight > height))
234+ then throw("Game is not expired")
235+ else if (if ((step == 1))
236+ then true
237+ else (step == 4))
238+ then "taker"
239+ else "maker"
240+ }
241+ else {
242+ let makerOrder = split(getOrder(gameId, "maker"), "|")
243+ let takerOrder = split(takerOrderStr, "|")
244+ let makerRarity1 = getRarity(gameId, "maker", makerOrder[0])
245+ let makerRarity2 = getRarity(gameId, "maker", makerOrder[1])
246+ let makerRarity3 = getRarity(gameId, "maker", makerOrder[2])
247+ let takerRarity1 = getRarity(gameId, "taker", takerOrder[0])
248+ let takerRarity2 = getRarity(gameId, "taker", takerOrder[1])
249+ let takerRarity3 = getRarity(gameId, "taker", takerOrder[2])
250+ let makerScore = ((getScore(makerRarity1, takerRarity1) + getScore(makerRarity2, takerRarity2)) + getScore(makerRarity3, takerRarity3))
251+ if ((makerScore > 0))
252+ then "maker"
253+ else if ((0 > makerScore))
254+ then "taker"
255+ else "draw"
256+ }
257+ }
258+
259+
260+func getGameResult (gameId,takerOrder,expired) = {
261+ let bet = getBet(gameId)
262+ let makerAddress = getMaker(gameId)
263+ let takerAddress = getTaker(gameId)
264+ let winner = getWinner(gameId, takerOrder, expired)
265+ let winnerAddress = if ((winner == "maker"))
266+ then makerAddress
267+ else if ((winner == "taker"))
268+ then takerAddress
269+ else ""
270+ let loserAddress = if ((winner == "taker"))
271+ then makerAddress
272+ else if ((winner == "maker"))
273+ then takerAddress
274+ else ""
275+ if ((winnerAddress != ""))
276+ then [IntegerEntry(getPlayerCurrentGameKey(winnerAddress), 0), IntegerEntry(getPlayerCurrentGameKey(loserAddress), 0), IntegerEntry(getPlayerWinsKey(winnerAddress), (getPlayerWins(winnerAddress) + 1)), IntegerEntry(getPlayerLosesKey(loserAddress), (getPlayerLoses(loserAddress) + 1)), StringEntry(getPlayerResultKey(gameId, winnerAddress), "win"), StringEntry(getPlayerResultKey(gameId, loserAddress), "lose"), IntegerEntry(getPlayerPrizeKey(gameId, winnerAddress), bet), IntegerEntry(getPlayerPrizeKey(gameId, loserAddress), -(bet)), IntegerEntry(getPlayerPnLKey(winnerAddress), (getPlayerPnL(winnerAddress) + bet)), IntegerEntry(getPlayerPnLKey(loserAddress), (getPlayerPnL(loserAddress) - bet)), ScriptTransfer(Address(fromBase58String(winnerAddress)), (bet * 2), eggsAssetId)]
277+ else [IntegerEntry(getPlayerCurrentGameKey(makerAddress), 0), IntegerEntry(getPlayerCurrentGameKey(takerAddress), 0), IntegerEntry(getPlayerDrawsKey(makerAddress), (getPlayerDraws(makerAddress) + 1)), IntegerEntry(getPlayerDrawsKey(takerAddress), (getPlayerDraws(takerAddress) + 1)), StringEntry(getPlayerResultKey(gameId, makerAddress), "draw"), StringEntry(getPlayerResultKey(gameId, takerAddress), "draw"), IntegerEntry(getPlayerPrizeKey(gameId, makerAddress), 0), IntegerEntry(getPlayerPrizeKey(gameId, takerAddress), 0), ScriptTransfer(Address(fromBase58String(makerAddress)), bet, eggsAssetId), ScriptTransfer(Address(fromBase58String(takerAddress)), bet, eggsAssetId)]
278+ }
279+
280+
281+@Callable(i)
282+func makeGame (slot,worstRange,mediumRange,bestRange,randomsCommit) = {
283+ let callerAddress = toBase58String(i.caller.bytes)
284+ let slotGameId = getSlot(slot)
285+ let payment = value(i.payments[0])
286+ let eggs = payment.amount
287+ let gameId = getNextGameId()
288+ if ((getPlayerCurrentGame(callerAddress) != 0))
289+ then throw("You already have an active game")
290+ else if (if ((0 > slot))
291+ then true
292+ else (slot >= SLOTS))
293+ then throw("Invalid slot")
294+ else if ((slotGameId != 0))
295+ then throw("This slot is busy")
296+ else if ((payment.assetId != eggsAssetId))
297+ then throw(("You can attach only EGGs with the following asset id - " + toBase58String(eggsAssetId)))
298+ else if ((eggs != 10000))
299+ then throw("Bet must be 0.0001 EGG during beta test")
300+ else if (if ((1 > worstRange))
301+ then true
302+ else (worstRange > 5))
303+ then throw("Invalid range for the worst duck")
304+ else if (if ((1 > mediumRange))
305+ then true
306+ else (mediumRange > 5))
307+ then throw("Invalid range for the medium duck")
308+ else if (if ((1 > bestRange))
309+ then true
310+ else (bestRange > 5))
311+ then throw("Invalid range for the best duck")
312+ else if ((worstRange > mediumRange))
313+ then throw("The medium range can't be less than the worst one")
314+ else if ((mediumRange > bestRange))
315+ then throw("The best range can't be worse than the medium one")
316+ else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), gameId), StringEntry(getMakerKey(gameId), callerAddress), StringEntry(getPlayerRoleKey(gameId, callerAddress), "maker"), IntegerEntry(getBetKey(gameId), eggs), IntegerEntry(getRangeKey(gameId, "worst"), worstRange), IntegerEntry(getRangeKey(gameId, "medium"), mediumRange), IntegerEntry(getRangeKey(gameId, "best"), bestRange), StringEntry(getMakerRandomsCommitKey(gameId), randomsCommit), IntegerEntry(getWaitingExpirationHeightKey(gameId), (height + WAITING)), IntegerEntry(getSlotKey(slot), gameId), IntegerEntry("nextGameId", (gameId + 1))]
317+ }
318+
319+
320+
321+@Callable(i)
322+func takeGame (slot,random1,random2,random3,random4,random5,random6,skipReplace) = {
323+ let callerAddress = toBase58String(i.caller.bytes)
324+ let gameId = getSlot(slot)
325+ let payment = value(i.payments[0])
326+ let randoms = ((((((((((toString(random1) + "|") + toString(random2)) + "|") + toString(random3)) + "|") + toString(random4)) + "|") + toString(random5)) + "|") + toString(random6))
327+ if ((getPlayerCurrentGame(callerAddress) != 0))
328+ then throw("You already have an active game")
329+ else if (if ((0 > slot))
330+ then true
331+ else (slot >= SLOTS))
332+ then throw("Invalid slot")
333+ else if ((getSlot(slot) == 0))
334+ then throw("This slot is empty")
335+ else if ((payment.assetId != eggsAssetId))
336+ then throw(("You can attach only EGGs with the following asset id - " + toBase58String(eggsAssetId)))
337+ else if ((payment.amount != getBet(gameId)))
338+ then throw("Insufficient eggs amount")
339+ else if ((height >= getWaitingExpirationHeight(gameId)))
340+ then throw("This game is expired")
341+ else if (if ((0 > random1))
342+ then true
343+ else (random1 > 1000000000000))
344+ then throw("Invalid random1")
345+ else if (if ((0 > random2))
346+ then true
347+ else (random2 > 1000000000000))
348+ then throw("Invalid random2")
349+ else if (if ((0 > random3))
350+ then true
351+ else (random3 > 1000000000000))
352+ then throw("Invalid random3")
353+ else if (if ((0 > random4))
354+ then true
355+ else (random4 > 1000000000000))
356+ then throw("Invalid random4")
357+ else if (if ((0 > random5))
358+ then true
359+ else (random5 > 1000000000000))
360+ then throw("Invalid random5")
361+ else if (if ((0 > random6))
362+ then true
363+ else (random6 > 1000000000000))
364+ then throw("Invalid random6")
365+ else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), gameId), StringEntry(getTakerKey(gameId), callerAddress), StringEntry(getPlayerRoleKey(gameId, callerAddress), "taker"), StringEntry(getRandomsKey(gameId, "taker"), randoms), BooleanEntry(getTakerSkipReplaceKey(gameId), skipReplace), IntegerEntry(getStepKey(gameId), 1), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration)), IntegerEntry(getSlotKey(slot), 0), IntegerEntry("gamesPlayed", (getGamesPlayed() + 1))]
366+ }
367+
368+
369+
370+@Callable(i)
371+func kickGame (slot) = {
372+ let callerAddress = toBase58String(i.caller.bytes)
373+ let gameId = getSlot(slot)
374+ let maker = getMaker(gameId)
375+ if (if ((0 > slot))
376+ then true
377+ else (slot >= SLOTS))
378+ then throw("Invalid slot")
379+ else if ((gameId == 0))
380+ then throw("Slot is empty")
381+ else if (if ((callerAddress != maker))
382+ then (getWaitingExpirationHeight(gameId) > height)
383+ else false)
384+ then throw("Waiting is not finished yet")
385+ else [IntegerEntry(getPlayerCurrentGameKey(maker), 0), IntegerEntry(getSlotKey(slot), 0), ScriptTransfer(Address(fromBase58String(maker)), getBet(gameId), eggsAssetId)]
386+ }
387+
388+
389+
390+@Callable(i)
391+func revealRandomsAndReplaceMaker (random1,random2,random3,random4,random5,random6,salt,rangeToReplace,duckId) = {
392+ let callerAddress = toBase58String(i.caller.bytes)
393+ let gameId = getPlayerCurrentGame(callerAddress)
394+ let playerRole = getPlayerRole(gameId, callerAddress)
395+ let step = getStep(gameId)
396+ let makerRandomsCommit = getMakerRandomsCommit(gameId)
397+ let makerRandomsStr = ((((((((((toString(random1) + "|") + toString(random2)) + "|") + toString(random3)) + "|") + toString(random4)) + "|") + toString(random5)) + "|") + toString(random6))
398+ let takerRandoms = split(getRandoms(gameId, "taker"), "|")
399+ let rarityToReplace = if (if (if ((rangeToReplace == "worst"))
400+ then true
401+ else (rangeToReplace == "medium"))
402+ then true
403+ else (rangeToReplace == "best"))
404+ then {
405+ let invokeRes = invoke(Address(rarityProviderAddress), "getAssetRarity", [duckId], nil)
406+ if ((invokeRes == invokeRes))
407+ then {
408+ let rarity = match invokeRes {
409+ case r: Int =>
410+ r
411+ case _ =>
412+ throw("Incorrect invoke result")
413+ }
414+ let range = getRange(gameId, rangeToReplace)
415+ if (!(checkDuckOwner(i.caller, fromBase58String(duckId))))
416+ then throw((("Asset " + duckId) + " doesn't belong to you"))
417+ else if (if ((5 > range))
418+ then if ((rarity > (range * 10)))
419+ then true
420+ else (((range - 1) * 10) >= rarity)
421+ else false)
422+ then throw("Duck doesn't fit rarity range")
423+ else if (if ((range == 5))
424+ then (40 >= rarity)
425+ else false)
426+ then throw("Duck doesn't fit rarity range")
427+ else rarity
428+ }
429+ else throw("Strict value is not equal to itself.")
430+ }
431+ else 0
432+ let worstRange = getRange(gameId, "worst")
433+ let mediumRange = getRange(gameId, "medium")
434+ let bestRange = getRange(gameId, "best")
435+ let worstRarityMaker = if ((rangeToReplace == "worst"))
436+ then rarityToReplace
437+ else getRandomRarity((random1 + parseIntValue(takerRandoms[0])), worstRange)
438+ let mediumRarityMaker = if ((rangeToReplace == "medium"))
439+ then rarityToReplace
440+ else getRandomRarity((random2 + parseIntValue(takerRandoms[1])), mediumRange)
441+ let bestRarityMaker = if ((rangeToReplace == "best"))
442+ then rarityToReplace
443+ else getRandomRarity((random3 + parseIntValue(takerRandoms[2])), bestRange)
444+ let worstRarityTaker = getRandomRarity((random4 + parseIntValue(takerRandoms[3])), worstRange)
445+ let mediumRarityTaker = getRandomRarity((random5 + parseIntValue(takerRandoms[4])), mediumRange)
446+ let bestRarityTaker = getRandomRarity((random6 + parseIntValue(takerRandoms[5])), bestRange)
447+ let nextStep = if (getTakerSkipReplace(gameId))
448+ then (step + 2)
449+ else (step + 1)
450+ if ((gameId == 0))
451+ then throw("You don't have an active game")
452+ else if ((playerRole != "maker"))
453+ then throw("Only maker can call this method")
454+ else if ((1 > step))
455+ then throw("Game is not started")
456+ else if ((step > 1))
457+ then throw("This step is finished")
458+ else if (if ((0 > random1))
459+ then true
460+ else (random1 > 1000000000000))
461+ then throw("Invalid random1")
462+ else if (if ((0 > random2))
463+ then true
464+ else (random2 > 1000000000000))
465+ then throw("Invalid random2")
466+ else if (if ((0 > random3))
467+ then true
468+ else (random3 > 1000000000000))
469+ then throw("Invalid random3")
470+ else if (if ((0 > random4))
471+ then true
472+ else (random4 > 1000000000000))
473+ then throw("Invalid random4")
474+ else if (if ((0 > random5))
475+ then true
476+ else (random5 > 1000000000000))
477+ then throw("Invalid random5")
478+ else if (if ((0 > random6))
479+ then true
480+ else (random6 > 1000000000000))
481+ then throw("Invalid random6")
482+ else if ((toBase58String(sha256(toBytes((makerRandomsStr + salt)))) != makerRandomsCommit))
483+ then throw("Randoms don't match commit")
484+ else [StringEntry(getRandomsKey(gameId, "maker"), makerRandomsStr), IntegerEntry(getRarityKey(gameId, "maker", "worst"), worstRarityMaker), IntegerEntry(getRarityKey(gameId, "maker", "medium"), mediumRarityMaker), IntegerEntry(getRarityKey(gameId, "maker", "best"), bestRarityMaker), StringEntry(getReplacedRangeKey(gameId, "maker"), rangeToReplace), StringEntry(getDuckIdKey(gameId, "maker"), duckId), IntegerEntry(getRarityKey(gameId, "taker", "worst"), worstRarityTaker), IntegerEntry(getRarityKey(gameId, "taker", "medium"), mediumRarityTaker), IntegerEntry(getRarityKey(gameId, "taker", "best"), bestRarityTaker), IntegerEntry(getStepKey(gameId), nextStep), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
485+ }
486+
487+
488+
489+@Callable(i)
490+func replaceTaker (rangeToReplace,duckId) = {
491+ let callerAddress = toBase58String(i.caller.bytes)
492+ let gameId = getPlayerCurrentGame(callerAddress)
493+ let playerRole = getPlayerRole(gameId, callerAddress)
494+ let step = getStep(gameId)
495+ let range = getRange(gameId, rangeToReplace)
496+ let invokeRes = invoke(Address(rarityProviderAddress), "getAssetRarity", [duckId], nil)
497+ if ((invokeRes == invokeRes))
498+ then {
499+ let rarity = match invokeRes {
500+ case r: Int =>
501+ r
502+ case _ =>
503+ throw("Incorrect invoke result")
504+ }
505+ if ((gameId == 0))
506+ then throw("You don't have an active game")
507+ else if ((playerRole != "taker"))
508+ then throw("Only taker can call this method")
509+ else if (if (if ((rangeToReplace != "worst"))
510+ then (rangeToReplace != "medium")
511+ else false)
512+ then (rangeToReplace != "best")
513+ else false)
514+ then throw((("Invalid range - " + rangeToReplace) + ". Must be worst, medium or best"))
515+ else if ((getExpirationHeight(gameId) == 0))
516+ then throw("Game is not started")
517+ else if ((2 > step))
518+ then throw("This step is not started")
519+ else if ((step > 2))
520+ then throw("This step is finished")
521+ else if (!(checkDuckOwner(i.caller, fromBase58String(duckId))))
522+ then throw((("Asset " + duckId) + " doesn't belong to you"))
523+ else if (if ((5 > range))
524+ then if ((rarity > (range * 10)))
525+ then true
526+ else (((range - 1) * 10) >= rarity)
527+ else false)
528+ then throw("Duck doesn't fit rarity range")
529+ else if (if ((range == 5))
530+ then (40 >= rarity)
531+ else false)
532+ then throw("Duck doesn't fit rarity range")
533+ else [IntegerEntry(getRarityKey(gameId, playerRole, rangeToReplace), rarity), StringEntry(getReplacedRangeKey(gameId, playerRole), rangeToReplace), StringEntry(getDuckIdKey(gameId, playerRole), duckId), IntegerEntry(getStepKey(gameId), (step + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
534+ }
535+ else throw("Strict value is not equal to itself.")
536+ }
537+
538+
539+
540+@Callable(i)
541+func commitOrderTaker (orderCommit) = {
542+ let callerAddress = toBase58String(i.caller.bytes)
543+ let gameId = getPlayerCurrentGame(callerAddress)
544+ let playerRole = getPlayerRole(gameId, callerAddress)
545+ let step = getStep(gameId)
546+ if ((gameId == 0))
547+ then throw("You don't have an active game")
548+ else if ((playerRole != "taker"))
549+ then throw("Only taker can call this method")
550+ else if ((3 > step))
551+ then throw("This step is not started")
552+ else if ((step > 3))
553+ then throw("This step is finished")
554+ else [StringEntry(getTakerOrderCommitKey(gameId), orderCommit), IntegerEntry(getStepKey(gameId), (step + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
555+ }
556+
557+
558+
559+@Callable(i)
560+func setOrderMaker (order) = {
561+ let callerAddress = toBase58String(i.caller.bytes)
562+ let gameId = getPlayerCurrentGame(callerAddress)
563+ let playerRole = getPlayerRole(gameId, callerAddress)
564+ let step = getStep(gameId)
565+ if ((gameId == 0))
566+ then throw("You don't have an active game")
567+ else if ((playerRole != "maker"))
568+ then throw("Only maker can call this method")
569+ else if ((4 > step))
570+ then throw("This step is not started")
571+ else if ((step > 4))
572+ then throw("This step is finished")
573+ else if (if (if (if (if (if ((order != "worst|medium|best"))
574+ then (order != "worst|best|medium")
575+ else false)
576+ then (order != "medium|worst|best")
577+ else false)
578+ then (order != "medium|best|worst")
579+ else false)
580+ then (order != "best|worst|medium")
581+ else false)
582+ then (order != "best|medium|worst")
583+ else false)
584+ then throw("Invalid order data")
585+ else [StringEntry(getOrderKey(gameId, playerRole), order), IntegerEntry(getStepKey(gameId), (step + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
586+ }
587+
588+
589+
590+@Callable(i)
591+func revealOrderTaker (order,salt) = {
592+ let callerAddress = toBase58String(i.caller.bytes)
593+ let gameId = getPlayerCurrentGame(callerAddress)
594+ let playerRole = getPlayerRole(gameId, callerAddress)
595+ let step = getStep(gameId)
596+ if ((gameId == 0))
597+ then throw("You don't have an active game")
598+ else if ((playerRole != "taker"))
599+ then throw("Only taker can call this method")
600+ else if ((5 > step))
601+ then throw("This step is not started")
602+ else if (if (if (if (if (if ((order != "worst|medium|best"))
603+ then (order != "worst|best|medium")
604+ else false)
605+ then (order != "medium|worst|best")
606+ else false)
607+ then (order != "medium|best|worst")
608+ else false)
609+ then (order != "best|worst|medium")
610+ else false)
611+ then (order != "best|medium|worst")
612+ else false)
613+ then throw("Invalid order data")
614+ else if ((toBase58String(sha256(toBytes((order + salt)))) != getTakerOrderCommit(gameId)))
615+ then throw("Reveal doesn't match commit")
616+ else (getGameResult(gameId, order, false) ++ [StringEntry(getOrderKey(gameId, playerRole), order)])
617+ }
618+
619+
620+
621+@Callable(i)
622+func getPrizeExpired () = {
623+ let callerAddress = toBase58String(i.caller.bytes)
624+ let gameId = getPlayerCurrentGame(callerAddress)
625+ if ((gameId == 0))
626+ then throw("You don't have an active game")
627+ else getGameResult(gameId, "", true)
628+ }
629+
630+
631+@Verifier(tx)
632+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
633+

github/deemru/w8io/873ac7e 
53.96 ms