tx · 8um1kaQxHSi7JQKysUUV1sXXN9J9weYWsQUiVCawNfk2 3N4boZRUJ2LxY5jLyp6hmxGktqnawQidu6H: -0.00700000 Waves 2022.08.22 12:38 [2195497] smart account 3N4boZRUJ2LxY5jLyp6hmxGktqnawQidu6H > SELF 0.00000000 Waves
{ "type": 13, "id": "8um1kaQxHSi7JQKysUUV1sXXN9J9weYWsQUiVCawNfk2", "fee": 700000, "feeAssetId": null, "timestamp": 1661161153438, "version": 2, "chainId": 84, "sender": "3N4boZRUJ2LxY5jLyp6hmxGktqnawQidu6H", "senderPublicKey": "BDeCphaaC4MZvfmbJqQZ78EvuEBZTJ1VEW7fbxue8BUu", "proofs": [ "3X1diXiskx1YVizvPn5kBZnidvfPiKV6PsAifQwCQbg2tnoBX7bxQ9ZMZ3ZQzjuVwxqTsqihUF44YUqfzh2UuM2M" ], "script": "base64:BgIJCAISBQoDCAgBRAAJc2VwYXJhdG9yAgFfAAVrR2FtZQIEZ2FtZQAGa1JvdW5kAgVyb3VuZAAHa1BsYXllcgIGcGxheWVyAAZrVG90YWwCBXRvdGFsAAZrQ291bnQCBWNvdW50AARrUG90AgNwb3QABmtBc3NldAIFYXNzZXQABGtCZXQCA2JldAAEa01pbgIDbWluAARrTWF4AgNtYXgABWtOZXh0AgRuZXh0AAVrTGFzdAIEbGFzdAAJa0Jhbmtyb2xsAghiYW5rcm9sbAAFa0JhbmsCBGJhbmsACGtEZWZhdWx0AgdkZWZhdWx0AAdrU3RhdHVzAgZzdGF0dXMACGtCYWxhbmNlAgdiYWxhbmNlAQpnZXRHYW1lS2V5AQZnYW1lSWQJALkJAgkAzAgCBQVrR2FtZQkAzAgCBQZnYW1lSWQFA25pbAUJc2VwYXJhdG9yARBnZXRHYW1lUGxheWVyS2V5AgZnYW1lSWQNcGxheWVyQWRkcmVzcwkAuQkCCQDMCAIJAQpnZXRHYW1lS2V5AQUGZ2FtZUlkCQDMCAIFB2tQbGF5ZXIJAMwIAgUNcGxheWVyQWRkcmVzcwUDbmlsBQlzZXBhcmF0b3IBF2dldEdhbWVQbGF5ZXJDb3VudGVyS2V5AQZnYW1lSWQJALkJAgkAzAgCCQEKZ2V0R2FtZUtleQEFBmdhbWVJZAkAzAgCBQdrUGxheWVyCQDMCAIFBmtDb3VudAUDbmlsBQlzZXBhcmF0b3IBFWdldEdhbWVQbGF5ZXJUb3RhbEtleQEGZ2FtZUlkCQC5CQIJAMwIAgkBCmdldEdhbWVLZXkBBQZnYW1lSWQJAMwIAgUHa1BsYXllcgkAzAgCBQZrVG90YWwFA25pbAUJc2VwYXJhdG9yARNnZXROZXh0QmV0UGxheWVyS2V5AQZnYW1lSWQJALkJAgkAzAgCCQEKZ2V0R2FtZUtleQEFBmdhbWVJZAkAzAgCBQVrTmV4dAkAzAgCBQRrQmV0CQDMCAIFB2tQbGF5ZXIFA25pbAUJc2VwYXJhdG9yARZnZXRHYW1lUGxheWVyU3RhdHVzS2V5AgZnYW1lSWQNcGxheWVyQWRkcmVzcwkAuQkCCQDMCAIJAQpnZXRHYW1lS2V5AQUGZ2FtZUlkCQDMCAIFB2tTdGF0dXMJAMwIAgUHa1BsYXllcgkAzAgCBQ1wbGF5ZXJBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgEPZ2V0R2FtZVJvdW5kS2V5AQZnYW1lSWQJALkJAgkAzAgCCQEKZ2V0R2FtZUtleQEFBmdhbWVJZAkAzAgCBQZrUm91bmQFA25pbAUJc2VwYXJhdG9yAQ1nZXRHYW1lUG90S2V5AQZnYW1lSWQJALkJAgkAzAgCCQEKZ2V0R2FtZUtleQEFBmdhbWVJZAkAzAgCBQRrUG90BQNuaWwFCXNlcGFyYXRvcgEPZ2V0R2FtZUFzc2V0S2V5AQZnYW1lSWQJALkJAgkAzAgCCQEKZ2V0R2FtZUtleQEFBmdhbWVJZAkAzAgCBQZrQXNzZXQFA25pbAUJc2VwYXJhdG9yARBnZXRHYW1lTWluQmV0S2V5AQZnYW1lSWQJALkJAgkAzAgCCQEKZ2V0R2FtZUtleQEFBmdhbWVJZAkAzAgCBQRrTWluCQDMCAIFBGtCZXQFA25pbAUJc2VwYXJhdG9yARFnZXRHYW1lTGFzdEJldEtleQEGZ2FtZUlkCQC5CQIJAMwIAgkBCmdldEdhbWVLZXkBBQZnYW1lSWQJAMwIAgUFa0xhc3QJAMwIAgUEa0JldAUDbmlsBQlzZXBhcmF0b3IBEmdldEdhbWVCYW5rcm9sbEtleQEGZ2FtZUlkCQC5CQIJAMwIAgkBCmdldEdhbWVLZXkBBQZnYW1lSWQJAMwIAgUJa0Jhbmtyb2xsBQNuaWwFCXNlcGFyYXRvcgEOZ2V0R2FtZUJhbmtLZXkBBmdhbWVJZAkAuQkCCQDMCAIJAQpnZXRHYW1lS2V5AQUGZ2FtZUlkCQDMCAIFBWtCYW5rBQNuaWwFCXNlcGFyYXRvcgEXZ2V0R2FtZVBsYXllckJhbGFuY2VLZXkCBmdhbWVJZA1wbGF5ZXJBZGRyZXNzCQC5CQIJAMwIAgkBCmdldEdhbWVLZXkBBQZnYW1lSWQJAMwIAgUHa1BsYXllcgkAzAgCBQ1wbGF5ZXJBZGRyZXNzCQDMCAIFCGtCYWxhbmNlBQNuaWwFCXNlcGFyYXRvcgEHc2V0R2FtZQIGZ2FtZUlkBGZsYWcJAQxCb29sZWFuRW50cnkCCQEKZ2V0R2FtZUtleQEFBmdhbWVJZAUEZmxhZwENc2V0R2FtZVBsYXllcgMGZ2FtZUlkDXBsYXllckFkZHJlc3MIcGxheWVySWQJAQxJbnRlZ2VyRW50cnkCCQEQZ2V0R2FtZVBsYXllcktleQIFBmdhbWVJZAUNcGxheWVyQWRkcmVzcwUIcGxheWVySWQBFHNldEdhbWVQbGF5ZXJDb3VudGVyAgZnYW1lSWQHY291bnRlcgkBDEludGVnZXJFbnRyeQIJARdnZXRHYW1lUGxheWVyQ291bnRlcktleQEFBmdhbWVJZAUHY291bnRlcgESc2V0R2FtZVBsYXllclRvdGFsAgZnYW1lSWQMdG90YWxQbGF5ZXJzCQEMSW50ZWdlckVudHJ5AgkBFWdldEdhbWVQbGF5ZXJUb3RhbEtleQEFBmdhbWVJZAUMdG90YWxQbGF5ZXJzARBzZXROZXh0QmV0UGxheWVyAgZnYW1lSWQIcGxheWVySWQJAQxJbnRlZ2VyRW50cnkCCQETZ2V0TmV4dEJldFBsYXllcktleQEFBmdhbWVJZAUIcGxheWVySWQBE3NldEdhbWVQbGF5ZXJTdGF0dXMDBmdhbWVJZA1wbGF5ZXJBZGRyZXNzBGZsYWcJAQxCb29sZWFuRW50cnkCCQEWZ2V0R2FtZVBsYXllclN0YXR1c0tleQIFBmdhbWVJZAUNcGxheWVyQWRkcmVzcwUEZmxhZwEMc2V0R2FtZVJvdW5kAgZnYW1lSWQFcm91bmQJAQxJbnRlZ2VyRW50cnkCCQEPZ2V0R2FtZVJvdW5kS2V5AQUGZ2FtZUlkBQVyb3VuZAEKc2V0R2FtZVBvdAIGZ2FtZUlkA3BvdAkBDEludGVnZXJFbnRyeQIJAQ1nZXRHYW1lUG90S2V5AQUGZ2FtZUlkBQNwb3QBDnNldEdhbWVMYXN0QmV0AgZnYW1lSWQHbGFzdEJldAkBDEludGVnZXJFbnRyeQIJARFnZXRHYW1lTGFzdEJldEtleQEFBmdhbWVJZAUHbGFzdEJldAEMc2V0R2FtZUFzc2V0AgZnYW1lSWQJZ2FtZUFzc2V0BAckbWF0Y2gwBQlnYW1lQXNzZXQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQFdG9rZW4FByRtYXRjaDAJAQtTdHJpbmdFbnRyeQIJAQ9nZXRHYW1lQXNzZXRLZXkBBQZnYW1lSWQJANgEAQUFdG9rZW4JAQtTdHJpbmdFbnRyeQIJAQ9nZXRHYW1lQXNzZXRLZXkBBQZnYW1lSWQCBVdBVkVTAQ1zZXRHYW1lTWluQmV0AgZnYW1lSWQGbWluQmV0CQEMSW50ZWdlckVudHJ5AgkBEGdldEdhbWVNaW5CZXRLZXkBBQZnYW1lSWQFBm1pbkJldAEPc2V0R2FtZUJhbmtyb2xsAgZnYW1lSWQIYmFua3JvbGwJAQxJbnRlZ2VyRW50cnkCCQESZ2V0R2FtZUJhbmtyb2xsS2V5AQUGZ2FtZUlkBQhiYW5rcm9sbAELc2V0R2FtZUJhbmsCBmdhbWVJZARiYW5rCQEMSW50ZWdlckVudHJ5AgkBEmdldEdhbWVCYW5rcm9sbEtleQEFBmdhbWVJZAUEYmFuawEUc2V0R2FtZVBsYXllckJhbGFuY2UDBmdhbWVJZA1wbGF5ZXJBZGRyZXNzDmN1cnJlbnRCYWxhbmNlCQEMSW50ZWdlckVudHJ5AgkBF2dldEdhbWVQbGF5ZXJCYWxhbmNlS2V5AgUGZ2FtZUlkBQ1wbGF5ZXJBZGRyZXNzBQ5jdXJyZW50QmFsYW5jZQEHZ2V0R2FtZQEGZ2FtZUlkCQCbCAIFBHRoaXMJAQpnZXRHYW1lS2V5AQUGZ2FtZUlkAQ1nZXRHYW1lUGxheWVyAgZnYW1lSWQNcGxheWVyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBEGdldEdhbWVQbGF5ZXJLZXkCBQZnYW1lSWQFDXBsYXllckFkZHJlc3MBFGdldEdhbWVQbGF5ZXJDb3VudGVyAQZnYW1lSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBF2dldEdhbWVQbGF5ZXJDb3VudGVyS2V5AQUGZ2FtZUlkAAABEmdldEdhbWVQbGF5ZXJUb3RhbAEGZ2FtZUlkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEVZ2V0R2FtZVBsYXllclRvdGFsS2V5AQUGZ2FtZUlkARBnZXROZXh0QmV0UGxheWVyAQZnYW1lSWQJAJoIAgUEdGhpcwkBE2dldE5leHRCZXRQbGF5ZXJLZXkBBQZnYW1lSWQBE2dldEdhbWVQbGF5ZXJTdGF0dXMCBmdhbWVJZA1wbGF5ZXJBZGRyZXNzCQCbCAIFBHRoaXMJARZnZXRHYW1lUGxheWVyU3RhdHVzS2V5AgUGZ2FtZUlkBQ1wbGF5ZXJBZGRyZXNzAQxnZXRHYW1lUm91bmQBBmdhbWVJZAkAmggCBQR0aGlzCQEPZ2V0R2FtZVJvdW5kS2V5AQUGZ2FtZUlkAQpnZXRHYW1lUG90AQZnYW1lSWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ1nZXRHYW1lUG90S2V5AQUGZ2FtZUlkAQ5nZXRHYW1lTGFzdEJldAEGZ2FtZUlkCQCaCAIFBHRoaXMJARFnZXRHYW1lTGFzdEJldEtleQEFBmdhbWVJZAEMZ2V0R2FtZUFzc2V0AQZnYW1lSWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAQ9nZXRHYW1lQXNzZXRLZXkBBQZnYW1lSWQBDWdldEdhbWVNaW5CZXQBBmdhbWVJZAkAmggCBQR0aGlzCQEQZ2V0R2FtZU1pbkJldEtleQEFBmdhbWVJZAEPZ2V0R2FtZUJhbmtyb2xsAQZnYW1lSWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARJnZXRHYW1lQmFua3JvbGxLZXkBBQZnYW1lSWQBC2dldEdhbWVCYW5rAQZnYW1lSWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ5nZXRHYW1lQmFua0tleQEFBmdhbWVJZAEUZ2V0R2FtZVBsYXllckJhbGFuY2UCBmdhbWVJZA1wbGF5ZXJBZGRyZXNzCQCaCAIFBHRoaXMJARdnZXRHYW1lUGxheWVyQmFsYW5jZUtleQIFBmdhbWVJZAUNcGxheWVyQWRkcmVzcwELaXNHYW1lRXhpc3QBBmdhbWVJZAkBCWlzRGVmaW5lZAEJAQdnZXRHYW1lAQUGZ2FtZUlkAQ1pc0dhbWVTdGFydGVkAQZnYW1lSWQJAQt2YWx1ZU9yRWxzZQIJAQdnZXRHYW1lAQUGZ2FtZUlkBwEQaXNSZXF1aXJlZFBsYXllcgEGZ2FtZUlkCQBmAgkBEmdldEdhbWVQbGF5ZXJUb3RhbAEFBmdhbWVJZAkBFGdldEdhbWVQbGF5ZXJDb3VudGVyAQUGZ2FtZUlkAQ5pc0NvcnJlY3RBc3NldAIGZ2FtZUlkBWFzc2V0BAlnYW1lQXNzZXQJAQxnZXRHYW1lQXNzZXQBBQZnYW1lSWQDCQAAAgUJZ2FtZUFzc2V0AgVXQVZFUwkAAAIFBWFzc2V0BQR1bml0CQAAAgUFYXNzZXQJANkEAQUJZ2FtZUFzc2V0ARBpc0Vub3VndGhEZXBvc2l0AgZnYW1lSWQGYW1vdW50CQBnAgUGYW1vdW50CQEPZ2V0R2FtZUJhbmtyb2xsAQUGZ2FtZUlkAQRmb2xkAwZnYW1lSWQLcGxheWVyVG90YWwGY2FsbGVyBBJzdHJ1Y3RQbGF5ZXJTdGF0dXMJARNzZXRHYW1lUGxheWVyU3RhdHVzAwUGZ2FtZUlkCQClCAEFBmNhbGxlcgcEEXBsYXllclRvdGFsU3RydWN0CQESc2V0R2FtZVBsYXllclRvdGFsAgUGZ2FtZUlkCQBlAgULcGxheWVyVG90YWwAAQkAlAoCBRJzdHJ1Y3RQbGF5ZXJTdGF0dXMFEXBsYXllclRvdGFsU3RydWN0AQVyYWlzZQUGYW1vdW50DXBsYXllckJhbGFuY2UHbGFzdEJldAZnYW1lSWQGY2FsbGVyAwMJAGYCBQZhbW91bnQFDXBsYXllckJhbGFuY2UGCQBmAgUHbGFzdEJldAUGYW1vdW50CQACAQISaW5zdWZmaWNpZW50IGZ1bmRzBA1sYXN0QmV0U3RydWN0CQEOc2V0R2FtZUxhc3RCZXQCBQZnYW1lSWQFBmFtb3VudAQKYmFua1N0cnVjdAkBC3NldEdhbWVCYW5rAgUGZ2FtZUlkCQBkAgkBC2dldEdhbWVCYW5rAQUGZ2FtZUlkBQZhbW91bnQEE3BsYXllckJhbGFuY2VTdHJ1Y3QJARRzZXRHYW1lUGxheWVyQmFsYW5jZQMFBmdhbWVJZAkApQgBBQZjYWxsZXIJAGUCBQ1wbGF5ZXJCYWxhbmNlBQZhbW91bnQJAJUKAwUNbGFzdEJldFN0cnVjdAUKYmFua1N0cnVjdAUTcGxheWVyQmFsYW5jZVN0cnVjdAELY2hlY2tPckNhbGwEDXBsYXllckJhbGFuY2UHbGFzdEJldAZnYW1lSWQGY2FsbGVyAwkAZgIFB2xhc3RCZXQFDXBsYXllckJhbGFuY2UJAAIBAhJpbnN1ZmZpY2llbnQgZnVuZHMECmJhbmtTdHJ1Y3QJAQtzZXRHYW1lQmFuawIFBmdhbWVJZAkAZAIJAQtnZXRHYW1lQmFuawEFBmdhbWVJZAUHbGFzdEJldAQTcGxheWVyQmFsYW5jZVN0cnVjdAkBFHNldEdhbWVQbGF5ZXJCYWxhbmNlAwUGZ2FtZUlkCQClCAEFBmNhbGxlcgkAZQIFDXBsYXllckJhbGFuY2UFB2xhc3RCZXQJAJQKAgUKYmFua1N0cnVjdAUTcGxheWVyQmFsYW5jZVN0cnVjdAEBaQEEbW92ZQMGYWN0aW9uBmdhbWVJZAZhbW91bnQECmdhbWVQbGF5ZXIJAQ1nZXRHYW1lUGxheWVyAgUGZ2FtZUlkCQClCAEIBQFpBmNhbGxlcgQHbGFzdEJldAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQEOZ2V0R2FtZUxhc3RCZXQBBQZnYW1lSWQCAAQNcGxheWVyQmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQEUZ2V0R2FtZVBsYXllckJhbGFuY2UCBQZnYW1lSWQJAKUIAQgFAWkGY2FsbGVyAgAEDHBsYXllclN0YXR1cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQETZ2V0R2FtZVBsYXllclN0YXR1cwIFBmdhbWVJZAkApQgBCAUBaQZjYWxsZXICAAQLcGxheWVyVG90YWwJARJnZXRHYW1lUGxheWVyVG90YWwBBQZnYW1lSWQDCQAAAgUGYWN0aW9uAgRmb2xkBAskdDA3MzQ3NzQyOAkBBGZvbGQDBQZnYW1lSWQFC3BsYXllclRvdGFsCAUBaQZjYWxsZXIEEnN0cnVjdFBsYXllclN0YXR1cwgFCyR0MDczNDc3NDI4Al8xBBFwbGF5ZXJUb3RhbFN0cnVjdAgFCyR0MDczNDc3NDI4Al8yCQDMCAIFEnN0cnVjdFBsYXllclN0YXR1cwkAzAgCBRFwbGF5ZXJUb3RhbFN0cnVjdAUDbmlsAwkAAAIFBmFjdGlvbgIFcmFpc2UECyR0MDc1NDI3NjUyCQEFcmFpc2UFBQZhbW91bnQFDXBsYXllckJhbGFuY2UFB2xhc3RCZXQFBmdhbWVJZAgFAWkGY2FsbGVyBA1sYXN0QmV0U3RydWN0CAULJHQwNzU0Mjc2NTICXzEECmJhbmtTdHJ1Y3QIBQskdDA3NTQyNzY1MgJfMgQTcGxheWVyQmFsYW5jZVN0cnVjdAgFCyR0MDc1NDI3NjUyAl8zCQDMCAIFDWxhc3RCZXRTdHJ1Y3QJAMwIAgUKYmFua1N0cnVjdAkAzAgCBRNwbGF5ZXJCYWxhbmNlU3RydWN0BQNuaWwDCQAAAgUGYWN0aW9uAgtjaGVja09yQ2FsbAQLJHQwNzc4OTc4OTcJAQtjaGVja09yQ2FsbAQFDXBsYXllckJhbGFuY2UFB2xhc3RCZXQFBmdhbWVJZAgFAWkGY2FsbGVyBBViYW5rU3RydWN0Q2hlY2tPckNhbGwIBQskdDA3Nzg5Nzg5NwJfMQQYcGxheWVyQmFsYW5jZUNoZWNrT3JDYWxsCAULJHQwNzc4OTc4OTcCXzIJAMwIAgUVYmFua1N0cnVjdENoZWNrT3JDYWxsCQDMCAIFGHBsYXllckJhbGFuY2VDaGVja09yQ2FsbAUDbmlsBQNuaWwA/B2Rwg==", "height": 2195497, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2CFHkSbk3xy6gFKy2tRSrJ8fRjzzmG8cHYfu6VCBvkDU Next: 4ok5mZo25s1fKumHAB6qVcwf1yRWYHAWxyUw3jStafmC Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let | |
4 | + | let separator = "_" | |
5 | 5 | ||
6 | - | let | |
6 | + | let kGame = "game" | |
7 | 7 | ||
8 | - | func randomize (bytes,range) = { | |
9 | - | let hash = sha256(bytes) | |
10 | - | let index = toInt(hash) | |
11 | - | (index % range) | |
8 | + | let kRound = "round" | |
9 | + | ||
10 | + | let kPlayer = "player" | |
11 | + | ||
12 | + | let kTotal = "total" | |
13 | + | ||
14 | + | let kCount = "count" | |
15 | + | ||
16 | + | let kPot = "pot" | |
17 | + | ||
18 | + | let kAsset = "asset" | |
19 | + | ||
20 | + | let kBet = "bet" | |
21 | + | ||
22 | + | let kMin = "min" | |
23 | + | ||
24 | + | let kMax = "max" | |
25 | + | ||
26 | + | let kNext = "next" | |
27 | + | ||
28 | + | let kLast = "last" | |
29 | + | ||
30 | + | let kBankroll = "bankroll" | |
31 | + | ||
32 | + | let kBank = "bank" | |
33 | + | ||
34 | + | let kDefault = "default" | |
35 | + | ||
36 | + | let kStatus = "status" | |
37 | + | ||
38 | + | let kBalance = "balance" | |
39 | + | ||
40 | + | func getGameKey (gameId) = makeString([kGame, gameId], separator) | |
41 | + | ||
42 | + | ||
43 | + | func getGamePlayerKey (gameId,playerAddress) = makeString([getGameKey(gameId), kPlayer, playerAddress], separator) | |
44 | + | ||
45 | + | ||
46 | + | func getGamePlayerCounterKey (gameId) = makeString([getGameKey(gameId), kPlayer, kCount], separator) | |
47 | + | ||
48 | + | ||
49 | + | func getGamePlayerTotalKey (gameId) = makeString([getGameKey(gameId), kPlayer, kTotal], separator) | |
50 | + | ||
51 | + | ||
52 | + | func getNextBetPlayerKey (gameId) = makeString([getGameKey(gameId), kNext, kBet, kPlayer], separator) | |
53 | + | ||
54 | + | ||
55 | + | func getGamePlayerStatusKey (gameId,playerAddress) = makeString([getGameKey(gameId), kStatus, kPlayer, playerAddress], separator) | |
56 | + | ||
57 | + | ||
58 | + | func getGameRoundKey (gameId) = makeString([getGameKey(gameId), kRound], separator) | |
59 | + | ||
60 | + | ||
61 | + | func getGamePotKey (gameId) = makeString([getGameKey(gameId), kPot], separator) | |
62 | + | ||
63 | + | ||
64 | + | func getGameAssetKey (gameId) = makeString([getGameKey(gameId), kAsset], separator) | |
65 | + | ||
66 | + | ||
67 | + | func getGameMinBetKey (gameId) = makeString([getGameKey(gameId), kMin, kBet], separator) | |
68 | + | ||
69 | + | ||
70 | + | func getGameLastBetKey (gameId) = makeString([getGameKey(gameId), kLast, kBet], separator) | |
71 | + | ||
72 | + | ||
73 | + | func getGameBankrollKey (gameId) = makeString([getGameKey(gameId), kBankroll], separator) | |
74 | + | ||
75 | + | ||
76 | + | func getGameBankKey (gameId) = makeString([getGameKey(gameId), kBank], separator) | |
77 | + | ||
78 | + | ||
79 | + | func getGamePlayerBalanceKey (gameId,playerAddress) = makeString([getGameKey(gameId), kPlayer, playerAddress, kBalance], separator) | |
80 | + | ||
81 | + | ||
82 | + | func setGame (gameId,flag) = BooleanEntry(getGameKey(gameId), flag) | |
83 | + | ||
84 | + | ||
85 | + | func setGamePlayer (gameId,playerAddress,playerId) = IntegerEntry(getGamePlayerKey(gameId, playerAddress), playerId) | |
86 | + | ||
87 | + | ||
88 | + | func setGamePlayerCounter (gameId,counter) = IntegerEntry(getGamePlayerCounterKey(gameId), counter) | |
89 | + | ||
90 | + | ||
91 | + | func setGamePlayerTotal (gameId,totalPlayers) = IntegerEntry(getGamePlayerTotalKey(gameId), totalPlayers) | |
92 | + | ||
93 | + | ||
94 | + | func setNextBetPlayer (gameId,playerId) = IntegerEntry(getNextBetPlayerKey(gameId), playerId) | |
95 | + | ||
96 | + | ||
97 | + | func setGamePlayerStatus (gameId,playerAddress,flag) = BooleanEntry(getGamePlayerStatusKey(gameId, playerAddress), flag) | |
98 | + | ||
99 | + | ||
100 | + | func setGameRound (gameId,round) = IntegerEntry(getGameRoundKey(gameId), round) | |
101 | + | ||
102 | + | ||
103 | + | func setGamePot (gameId,pot) = IntegerEntry(getGamePotKey(gameId), pot) | |
104 | + | ||
105 | + | ||
106 | + | func setGameLastBet (gameId,lastBet) = IntegerEntry(getGameLastBetKey(gameId), lastBet) | |
107 | + | ||
108 | + | ||
109 | + | func setGameAsset (gameId,gameAsset) = match gameAsset { | |
110 | + | case token: ByteVector => | |
111 | + | StringEntry(getGameAssetKey(gameId), toBase58String(token)) | |
112 | + | case _ => | |
113 | + | StringEntry(getGameAssetKey(gameId), "WAVES") | |
114 | + | } | |
115 | + | ||
116 | + | ||
117 | + | func setGameMinBet (gameId,minBet) = IntegerEntry(getGameMinBetKey(gameId), minBet) | |
118 | + | ||
119 | + | ||
120 | + | func setGameBankroll (gameId,bankroll) = IntegerEntry(getGameBankrollKey(gameId), bankroll) | |
121 | + | ||
122 | + | ||
123 | + | func setGameBank (gameId,bank) = IntegerEntry(getGameBankrollKey(gameId), bank) | |
124 | + | ||
125 | + | ||
126 | + | func setGamePlayerBalance (gameId,playerAddress,currentBalance) = IntegerEntry(getGamePlayerBalanceKey(gameId, playerAddress), currentBalance) | |
127 | + | ||
128 | + | ||
129 | + | func getGame (gameId) = getBoolean(this, getGameKey(gameId)) | |
130 | + | ||
131 | + | ||
132 | + | func getGamePlayer (gameId,playerAddress) = getStringValue(this, getGamePlayerKey(gameId, playerAddress)) | |
133 | + | ||
134 | + | ||
135 | + | func getGamePlayerCounter (gameId) = valueOrElse(getInteger(this, getGamePlayerCounterKey(gameId)), 0) | |
136 | + | ||
137 | + | ||
138 | + | func getGamePlayerTotal (gameId) = getIntegerValue(this, getGamePlayerTotalKey(gameId)) | |
139 | + | ||
140 | + | ||
141 | + | func getNextBetPlayer (gameId) = getInteger(this, getNextBetPlayerKey(gameId)) | |
142 | + | ||
143 | + | ||
144 | + | func getGamePlayerStatus (gameId,playerAddress) = getBoolean(this, getGamePlayerStatusKey(gameId, playerAddress)) | |
145 | + | ||
146 | + | ||
147 | + | func getGameRound (gameId) = getInteger(this, getGameRoundKey(gameId)) | |
148 | + | ||
149 | + | ||
150 | + | func getGamePot (gameId) = getIntegerValue(this, getGamePotKey(gameId)) | |
151 | + | ||
152 | + | ||
153 | + | func getGameLastBet (gameId) = getInteger(this, getGameLastBetKey(gameId)) | |
154 | + | ||
155 | + | ||
156 | + | func getGameAsset (gameId) = getStringValue(this, getGameAssetKey(gameId)) | |
157 | + | ||
158 | + | ||
159 | + | func getGameMinBet (gameId) = getInteger(this, getGameMinBetKey(gameId)) | |
160 | + | ||
161 | + | ||
162 | + | func getGameBankroll (gameId) = getIntegerValue(this, getGameBankrollKey(gameId)) | |
163 | + | ||
164 | + | ||
165 | + | func getGameBank (gameId) = getIntegerValue(this, getGameBankKey(gameId)) | |
166 | + | ||
167 | + | ||
168 | + | func getGamePlayerBalance (gameId,playerAddress) = getInteger(this, getGamePlayerBalanceKey(gameId, playerAddress)) | |
169 | + | ||
170 | + | ||
171 | + | func isGameExist (gameId) = isDefined(getGame(gameId)) | |
172 | + | ||
173 | + | ||
174 | + | func isGameStarted (gameId) = valueOrElse(getGame(gameId), false) | |
175 | + | ||
176 | + | ||
177 | + | func isRequiredPlayer (gameId) = (getGamePlayerTotal(gameId) > getGamePlayerCounter(gameId)) | |
178 | + | ||
179 | + | ||
180 | + | func isCorrectAsset (gameId,asset) = { | |
181 | + | let gameAsset = getGameAsset(gameId) | |
182 | + | if ((gameAsset == "WAVES")) | |
183 | + | then (asset == unit) | |
184 | + | else (asset == fromBase58String(gameAsset)) | |
12 | 185 | } | |
13 | 186 | ||
14 | 187 | ||
15 | - | func counting (bytes) = { | |
16 | - | let count = randomize(bytes, 10) | |
17 | - | if ((count >= 4)) | |
18 | - | then BooleanEntry(kWon, false) | |
19 | - | else BooleanEntry(kWon, true) | |
188 | + | func isEnougthDeposit (gameId,amount) = (amount >= getGameBankroll(gameId)) | |
189 | + | ||
190 | + | ||
191 | + | func fold (gameId,playerTotal,caller) = { | |
192 | + | let structPlayerStatus = setGamePlayerStatus(gameId, toString(caller), false) | |
193 | + | let playerTotalStruct = setGamePlayerTotal(gameId, (playerTotal - 1)) | |
194 | + | $Tuple2(structPlayerStatus, playerTotalStruct) | |
20 | 195 | } | |
21 | 196 | ||
22 | 197 | ||
23 | - | @Callable(i) | |
24 | - | func parseStruct () = if ((i.caller != this)) | |
25 | - | then throw("Only owner") | |
198 | + | func raise (amount,playerBalance,lastBet,gameId,caller) = if (if ((amount > playerBalance)) | |
199 | + | then true | |
200 | + | else (lastBet > amount)) | |
201 | + | then throw("insufficient funds") | |
26 | 202 | else { | |
27 | - | let winnerStruct = counting(i.transactionId) | |
28 | - | [winnerStruct] | |
203 | + | let lastBetStruct = setGameLastBet(gameId, amount) | |
204 | + | let bankStruct = setGameBank(gameId, (getGameBank(gameId) + amount)) | |
205 | + | let playerBalanceStruct = setGamePlayerBalance(gameId, toString(caller), (playerBalance - amount)) | |
206 | + | $Tuple3(lastBetStruct, bankStruct, playerBalanceStruct) | |
29 | 207 | } | |
30 | 208 | ||
31 | 209 | ||
210 | + | func checkOrCall (playerBalance,lastBet,gameId,caller) = if ((lastBet > playerBalance)) | |
211 | + | then throw("insufficient funds") | |
212 | + | else { | |
213 | + | let bankStruct = setGameBank(gameId, (getGameBank(gameId) + lastBet)) | |
214 | + | let playerBalanceStruct = setGamePlayerBalance(gameId, toString(caller), (playerBalance - lastBet)) | |
215 | + | $Tuple2(bankStruct, playerBalanceStruct) | |
216 | + | } | |
217 | + | ||
32 | 218 | ||
33 | 219 | @Callable(i) | |
34 | - | func startGame () = { | |
35 | - | let amount = value(i.payments[0].amount) | |
36 | - | if ((amount > 20)) | |
37 | - | then throw("You cannot bet more than 20!") | |
38 | - | else if ((i.payments[0].assetId != unit)) | |
39 | - | then throw("Pay in waves") | |
40 | - | else { | |
41 | - | let nullInitStore = invoke(this, "parseStruct", nil, nil) | |
42 | - | if ((nullInitStore == nullInitStore)) | |
43 | - | then { | |
44 | - | let won = valueOrErrorMessage(getBoolean(this, kWon), "Storage read error") | |
45 | - | if (won) | |
46 | - | then [ScriptTransfer(i.caller, (amount * 2), unit)] | |
47 | - | else nil | |
48 | - | } | |
49 | - | else throw("Strict value is not equal to itself.") | |
220 | + | func move (action,gameId,amount) = { | |
221 | + | let gamePlayer = getGamePlayer(gameId, toString(i.caller)) | |
222 | + | let lastBet = valueOrErrorMessage(getGameLastBet(gameId), "") | |
223 | + | let playerBalance = valueOrErrorMessage(getGamePlayerBalance(gameId, toString(i.caller)), "") | |
224 | + | let playerStatus = valueOrErrorMessage(getGamePlayerStatus(gameId, toString(i.caller)), "") | |
225 | + | let playerTotal = getGamePlayerTotal(gameId) | |
226 | + | if ((action == "fold")) | |
227 | + | then { | |
228 | + | let $t073477428 = fold(gameId, playerTotal, i.caller) | |
229 | + | let structPlayerStatus = $t073477428._1 | |
230 | + | let playerTotalStruct = $t073477428._2 | |
231 | + | [structPlayerStatus, playerTotalStruct] | |
232 | + | } | |
233 | + | else if ((action == "raise")) | |
234 | + | then { | |
235 | + | let $t075427652 = raise(amount, playerBalance, lastBet, gameId, i.caller) | |
236 | + | let lastBetStruct = $t075427652._1 | |
237 | + | let bankStruct = $t075427652._2 | |
238 | + | let playerBalanceStruct = $t075427652._3 | |
239 | + | [lastBetStruct, bankStruct, playerBalanceStruct] | |
50 | 240 | } | |
241 | + | else if ((action == "checkOrCall")) | |
242 | + | then { | |
243 | + | let $t077897897 = checkOrCall(playerBalance, lastBet, gameId, i.caller) | |
244 | + | let bankStructCheckOrCall = $t077897897._1 | |
245 | + | let playerBalanceCheckOrCall = $t077897897._2 | |
246 | + | [bankStructCheckOrCall, playerBalanceCheckOrCall] | |
247 | + | } | |
248 | + | else nil | |
51 | 249 | } | |
52 | 250 | ||
53 | 251 |
github/deemru/w8io/169f3d6 56.57 ms ◑