tx · 7zKadgV5r3xJHxFTDYAKoPZ2ggjqun7YCNpZUdEuwdDg

3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk:  -0.01000000 Waves

2022.09.25 01:32 [2243819] smart account 3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk > SELF 0.00000000 Waves

{ "type": 13, "id": "7zKadgV5r3xJHxFTDYAKoPZ2ggjqun7YCNpZUdEuwdDg", "fee": 1000000, "feeAssetId": null, "timestamp": 1664058752963, "version": 2, "chainId": 84, "sender": "3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk", "senderPublicKey": "AR4BeE6hYADMvKxgRQs4ADN3krEqb2j8WE3WfJxzL3zE", "proofs": [ "3mTU9FUER8mujp4gNU4MQr2LbP3v1UYrPvYsi31y1dkhBrnNftcu9kg7jwPxbQf4RFoe6cDfHWkWRZoZ1svsChqQ" ], "script": "base64:BgI1CAISAwoBCBIAEgMKAQgSBgoECAEBCBIECgIICBIFCgMICAESAwoBCBIAEgUKAwgICBIAEgAeAAV3YXZlcwCAwtcvAA50aWNrZXRQcmljZUludADAhD0AC3RpY2tldFByaWNlBQ50aWNrZXRQcmljZUludAAGaW52RmVlAKDCHgASd2l0aGRyYXdGZWVQZXJjZW50AAUAFmZlZUNvbGxlY3RvckFkZHJlc3NLZXkCE2ZlZUNvbGxlY3RvckFkZHJlc3MADmRlcG9zaXRBc3NldElkAiw1dWUxZml1VjZqNlVCcjZYZjI4UW1zNnk1RnF6S3RxdmF4eGh3dTdoVFE1OAENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAESZ2V0VGlja2V0c0NvdW50S2V5AQ1hZGRyZXNzU3RyaW5nCQCsAgIFDWFkZHJlc3NTdHJpbmcCDV90aWNrZXRzQ291bnQBHXRpY2tldEZvclRvdXJuYW1lbnRGb3JBY2NvdW50Agx0b3VybmFtZW50SWQHYWNjb3VudAkArAICCQCsAgIFDHRvdXJuYW1lbnRJZAISX3RpY2tldEZvckFjY291bnRfBQdhY2NvdW50ARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCFl90b3VybmFtZW50UHJpemVBbW91bnQBHHRvdXJuYW1lbnRNYXhQbGF5ZXJzQ291bnRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCGl90b3VybmFtZW50TWF4UGxheWVyc0NvdW50ARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhdfdG91cm5hbWVudFBsYXllcnNDb3VudAEZdG91cm5hbWVudFByaXplQXNzZXRJZEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIXX3RvdXJuYW1lbnRQcml6ZUFzc2V0SWQBG3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZUtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIZX3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZQEYdG91cm5hbWVudEJ1eUluQW1vdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhZfdG91cm5hbWVudEJ1eUluQW1vdW50ARl0b3VybmFtZW50QnV5SW5Bc3NldElkS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhdfdG91cm5hbWVudEJ1eUluQXNzZXRJZAEbdG91cm5hbWVudEJ1eUluQXNzZXROYW1lS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhlfdG91cm5hbWVudEJ1eUluQXNzZXROYW1lAR90b3VybmFtZW50QnV5SW5Bc3NldERlY2ltYWxzS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAh1fdG91cm5hbWVudEJ1eUluQXNzZXREZWNpbWFscwEfdG91cm5hbWVudFByaXplQXNzZXREZWNpbWFsc0tleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIdX3RvdXJuYW1lbnRQcml6ZUFzc2V0RGVjaW1hbHMBE3RvdXJuYW1lbnRTdGF0dXNLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCEV90b3VybmFtZW50U3RhdHVzASF0b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCH190b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWQBDWdhbWVXaW5uZXJLZXkBBmdhbWVJZAkArAICBQZnYW1lSWQCB193aW5uZXIBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAg9fYXZhaWxhYmxlRnVuZHMBGmFkZHJlc3NUb3RhbExvY2tlZEZ1bmRzS2V5AQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEV90b3RhbExvY2tlZEZ1bmRzASFhZGRyZXNzTG9ja2VkRnVuZHNUb3RhbEhpc3RvcnlLZXkBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIYX2xvY2tlZEZ1bmRzVG90YWxIaXN0b3J5ARxhZGRyZXNzTG9ja2VkRnVuZHNGb3JHYW1lS2V5AgdhZGRyZXNzBmdhbWVJZAkArAICCQCsAgIFB2FkZHJlc3MCDV9sb2NrZWRGdW5kc18FBmdhbWVJZAEaYWRkcmVzc0F2YWlsYWJsZVJld2FyZHNLZXkBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIRX2F2YWlsYWJsZVJld2FyZHMBD2dldFRpY2tldHNDb3VudAENYWRkcmVzc1N0cmluZwkBDXRyeUdldEludGVnZXIBCQESZ2V0VGlja2V0c0NvdW50S2V5AQUNYWRkcmVzc1N0cmluZwENY29uc3VtZVRpY2tldAEKcGxheWVyQWRkcgQSY3VycmVudFRpY2tldENvdW50CQEPZ2V0VGlja2V0c0NvdW50AQUKcGxheWVyQWRkcgQVbmV3Q3VycmVudFRpY2tldENvdW50CQBlAgUSY3VycmVudFRpY2tldENvdW50AAEDCQBmAgAABRVuZXdDdXJyZW50VGlja2V0Q291bnQAAAUVbmV3Q3VycmVudFRpY2tldENvdW50CwFpARZzZXRGZWVDb2xsZWN0b3JBZGRyZXNzAQ1jb2xsZWN0b3JBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQkAzAgCCQELU3RyaW5nRW50cnkCBRZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5BQ1jb2xsZWN0b3JBZGRyBQNuaWwBaQEMZGVwb3NpdEZ1bmRzAAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50AwkBAiE9AggFA3BtdAdhc3NldElkCQDZBAEFDmRlcG9zaXRBc3NldElkCQACAQIZWW91IGNhbiBvbmx5IGRlcG9zaXQgVVNETgQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBVjdXJyZW50QXZhaWxhYmxlRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAGQCBRVjdXJyZW50QXZhaWxhYmxlRnVuZHMIBQNwbXQGYW1vdW50BQNuaWwAAQFpARJzaWduVXBUb1RvdXJuYW1lbnQBDHRvdXJuYW1lbnRJZAQPbWF4UGxheWVyc0NvdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEcdG91cm5hbWVudE1heFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAQdYWxyZWFkeVJlZ2lzdGVyZWRQbGF5ZXJzQ291bnQJAQ10cnlHZXRJbnRlZ2VyAQkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQEEHRvdXJuYW1lbnRTdGF0dXMJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAwkBAiE9AgUQdG91cm5hbWVudFN0YXR1cwIMcmVnaXN0cmF0aW9uCQACAQIoVG91cm5hbWVudCBpcyBub3QgaW4gcmVnaXN0cmF0aW9uIHBoYXNlIQMJAAACBR1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAUPbWF4UGxheWVyc0NvdW50CQACAQI1VG91cm5hbWVudCBpcyBjdXJyZW50bHkgZnVsbCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIVBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAQMYnV5SW5Bc3NldGlkBAckbWF0Y2gwCAUDcG10B2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgkAAgECC01hdGNoIGVycm9yBBNidXlJblJlcXVpcmVkQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEYdG91cm5hbWVudEJ1eUluQW1vdW50S2V5AQUMdG91cm5hbWVudElkBBRidXlJblJlcXVpcmVkQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBGXRvdXJuYW1lbnRCdXlJbkFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQDCQECIT0CBRNidXlJblJlcXVpcmVkQW1vdW50CAUDcG10BmFtb3VudAkAAgEJAKwCAgIsQXR0YWNoZWQgcGF5bWVudCBhbW91bnQgaXMgaW52YWxpZCwgbXVzdCBiZSAJAKQDAQUTYnV5SW5SZXF1aXJlZEFtb3VudAMJAQIhPQIFFGJ1eUluUmVxdWlyZWRBc3NldElkBQxidXlJbkFzc2V0aWQJAAIBCQCsAgICLkF0dGFjaGVkIHBheW1lbnQgYXNzZXQgaWQgaXMgaW52YWxpZCwgbXVzdCBiZSAFFGJ1eUluUmVxdWlyZWRBc3NldElkBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBHXRpY2tldEZvclRvdXJuYW1lbnRGb3JBY2NvdW50AgUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQJAGQCBR1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAABBQNuaWwAAQFpARBjcmVhdGVUb3VybmFtZW50BAx0b3VybmFtZW50SWQMcGxheWVyc0NvdW50C2J1eUluQW1vdW50DGJ1eUluQXNzZXRJZAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50BAxwcml6ZUFzc2V0SWQEByRtYXRjaDAIBQNwbXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAFiBQckbWF0Y2gwAgADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiCQACAQILTWF0Y2ggZXJyb3IEDGFzc2V0RGV0YWlscwQHJG1hdGNoMAgFA3BtdAdhc3NldElkAwkAAQIFByRtYXRjaDACBFVuaXQEAWIFByRtYXRjaDAJAMwIAgIFV2F2ZXMJAMwIAgAIBQNuaWwDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAQHJG1hdGNoMQkA7AcBBQFiAwkAAQIFByRtYXRjaDECBUFzc2V0BAVhc3NldAUHJG1hdGNoMQkAzAgCCAUFYXNzZXQEbmFtZQkAzAgCCAUFYXNzZXQIZGVjaW1hbHMFA25pbAkAAgECEENhbid0IGZpbmQgYXNzZXQJAAIBAgtNYXRjaCBlcnJvcgQKYnV5SW5Bc3NldAQHJG1hdGNoMAkA7AcBCQDZBAEFDGJ1eUluQXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAJAMwIAggFBWFzc2V0BG5hbWUJAMwIAggFBWFzc2V0CGRlY2ltYWxzBQNuaWwJAMwIAgIACQDMCAIAAAUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBBQx0b3VybmFtZW50SWQIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEcdG91cm5hbWVudE1heFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAUMcGxheWVyc0NvdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARl0b3VybmFtZW50UHJpemVBc3NldElkS2V5AQUMdG91cm5hbWVudElkBQxwcml6ZUFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBG3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZUtleQEFDHRvdXJuYW1lbnRJZAoAAUAJAJEDAgUMYXNzZXREZXRhaWxzAAADCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQkAkQMCBQxhc3NldERldGFpbHMAAAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEfdG91cm5hbWVudFByaXplQXNzZXREZWNpbWFsc0tleQEFDHRvdXJuYW1lbnRJZAoAAUAJAJEDAgUMYXNzZXREZXRhaWxzAAEDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQkAkQMCBQxhc3NldERldGFpbHMAAQIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAgxyZWdpc3RyYXRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQFC2J1eUluQW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARt0b3VybmFtZW50QnV5SW5Bc3NldE5hbWVLZXkBBQx0b3VybmFtZW50SWQKAAFACQCRAwIFCmJ1eUluQXNzZXQAAAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBCQCRAwIFCmJ1eUluQXNzZXQAAAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEfdG91cm5hbWVudEJ1eUluQXNzZXREZWNpbWFsc0tleQEFDHRvdXJuYW1lbnRJZAoAAUAJAJEDAgUKYnV5SW5Bc3NldAABAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEJAJEDAgUKYnV5SW5Bc3NldAABAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGXRvdXJuYW1lbnRCdXlJbkFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQFDGJ1eUluQXNzZXRJZAUDbmlsAAEBaQEQZmluaXNoVG91cm5hbWVudAIMdG91cm5hbWVudElkHXdpbm5pbmdUcmFuc2ZlcnRUcmFuc2FjdGlvbklkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJASF0b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWRLZXkBBQx0b3VybmFtZW50SWQFHXdpbm5pbmdUcmFuc2ZlcnRUcmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAghmaW5pc2hlZAUDbmlsAAEBaQEOcGxheWVyRXhpdEdhbWUDBmdhbWVJZApwbGF5ZXJBZGRyD2V4aXRTdGFja0Ftb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkEF2N1cnJlbnRUb3RhbExvY2tlZEZ1bmRzCQENdHJ5R2V0SW50ZWdlcgEJARphZGRyZXNzVG90YWxMb2NrZWRGdW5kc0tleQEFCnBsYXllckFkZHIEIGN1cnJlbnRHYW1lTG9ja2VkQW1vdW50Rm9yUGxheWVyCQENdHJ5R2V0SW50ZWdlcgEJARxhZGRyZXNzTG9ja2VkRnVuZHNGb3JHYW1lS2V5AgUKcGxheWVyQWRkcgUGZ2FtZUlkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARphZGRyZXNzVG90YWxMb2NrZWRGdW5kc0tleQEFCnBsYXllckFkZHIJAGUCBRdjdXJyZW50VG90YWxMb2NrZWRGdW5kcwUgY3VycmVudEdhbWVMb2NrZWRBbW91bnRGb3JQbGF5ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARxhZGRyZXNzTG9ja2VkRnVuZHNGb3JHYW1lS2V5AgUKcGxheWVyQWRkcgUGZ2FtZUlkAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKcGxheWVyQWRkcgUPZXhpdFN0YWNrQW1vdW50CQDZBAEFDmRlcG9zaXRBc3NldElkBQNuaWwAAQFpARBsb2NrRnVuZHNGb3JHYW1lAQZnYW1lSWQEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIVBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAMJAQIhPQIIBQNwbXQHYXNzZXRJZAkA2QQBBQ5kZXBvc2l0QXNzZXRJZAkAAgECGVlvdSBjYW4gb25seSBkZXBvc2l0IFVTRE4EDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQXY3VycmVudFRvdGFsTG9ja2VkRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGmFkZHJlc3NUb3RhbExvY2tlZEZ1bmRzS2V5AQUNY2FsbGVyQWRkclN0cgQeY3VycmVudExvY2tlZEZ1bmRzVG90YWxIaXN0b3J5CQENdHJ5R2V0SW50ZWdlcgEJASFhZGRyZXNzTG9ja2VkRnVuZHNUb3RhbEhpc3RvcnlLZXkBBQ1jYWxsZXJBZGRyU3RyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARphZGRyZXNzVG90YWxMb2NrZWRGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAGQCBRdjdXJyZW50VG90YWxMb2NrZWRGdW5kcwgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJASFhZGRyZXNzTG9ja2VkRnVuZHNUb3RhbEhpc3RvcnlLZXkBBQ1jYWxsZXJBZGRyU3RyCQBkAgUeY3VycmVudExvY2tlZEZ1bmRzVG90YWxIaXN0b3J5CAUDcG10BmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGFkZHJlc3NMb2NrZWRGdW5kc0ZvckdhbWVLZXkCBQ1jYWxsZXJBZGRyU3RyBQZnYW1lSWQIBQNwbXQGYW1vdW50BQNuaWwAAQFpAQ13aXRoZHJhd0Z1bmRzAAQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBBmZWVDb2xsZWN0b3JBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5BBVjdXJyZW50QXZhaWxhYmxlRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIEC3dpdGhkcmF3RmVlCQBrAwUVY3VycmVudEF2YWlsYWJsZUZ1bmRzBRJ3aXRoZHJhd0ZlZVBlcmNlbnQAZAQUYWN0dWFsQXZhaWxhYmxlRnVuZHMJAGUCBRVjdXJyZW50QXZhaWxhYmxlRnVuZHMFC3dpdGhkcmF3RmVlAwkAZwIAAAUUYWN0dWFsQXZhaWxhYmxlRnVuZHMJAAIBAh5ObyBhdmFpbGFibGUgZnVuZHMgdG8gd2l0aGRyYXcJAMwIAgkBDEludGVnZXJFbnRyeQIJARhhZGRyZXNzQXZhaWxhYmxlRnVuZHNLZXkBBQ1jYWxsZXJBZGRyU3RyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRRhY3R1YWxBdmFpbGFibGVGdW5kcwkA2QQBBQ5kZXBvc2l0QXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRBmZWVDb2xsZWN0b3JBZGRyBQt3aXRoZHJhd0ZlZQkA2QQBBQ5kZXBvc2l0QXNzZXRJZAUDbmlsAWkBEHNldFdpbm5lckhlYWRzVXADBmdhbWVJZA13aW5uZXJBZGRyU3RyD290aGVyUGxheWVyQWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkEE2F2YWlsYWJsZVJld2FyZHNLZXkJARphZGRyZXNzQXZhaWxhYmxlUmV3YXJkc0tleQEFDXdpbm5lckFkZHJTdHIEF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzCQENdHJ5R2V0SW50ZWdlcgEFE2F2YWlsYWJsZVJld2FyZHNLZXkEFG5ld1RpY2tldENvdW50V2lubmVyCQENY29uc3VtZVRpY2tldAEFDXdpbm5lckFkZHJTdHIEGW5ld1RpY2tldENvdW50T3RoZXJQbGF5ZXIJAQ1jb25zdW1lVGlja2V0AQUPb3RoZXJQbGF5ZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1nYW1lV2lubmVyS2V5AQUGZ2FtZUlkBQ13aW5uZXJBZGRyU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNhdmFpbGFibGVSZXdhcmRzS2V5CQBkAgUXY3VycmVudEF2YWlsYWJsZVJld2FyZHMJAGgCBQt0aWNrZXRQcmljZQACCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESZ2V0VGlja2V0c0NvdW50S2V5AQUNd2lubmVyQWRkclN0cgUUbmV3VGlja2V0Q291bnRXaW5uZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ9vdGhlclBsYXllckFkZHIFGW5ld1RpY2tldENvdW50T3RoZXJQbGF5ZXIFA25pbAFpAQ93aXRoZHJhd1Jld2FyZHMABA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEEGZlZUNvbGxlY3RvckFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFFmZlZUNvbGxlY3RvckFkZHJlc3NLZXkEF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzCQENdHJ5R2V0SW50ZWdlcgEJARphZGRyZXNzQXZhaWxhYmxlUmV3YXJkc0tleQEFDWNhbGxlckFkZHJTdHIEC3dpdGhkcmF3RmVlCQBrAwUXY3VycmVudEF2YWlsYWJsZVJld2FyZHMFEndpdGhkcmF3RmVlUGVyY2VudABkBBZhY3R1YWxBdmFpbGFibGVSZXdhcmRzCQBlAgkAZQIFF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzBQZpbnZGZWUFC3dpdGhkcmF3RmVlAwkAZwIAAAUXY3VycmVudEF2YWlsYWJsZVJld2FyZHMJAAIBAiBObyBhdmFpbGFibGUgcmV3YXJkcyB0byB3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmFkZHJlc3NBdmFpbGFibGVSZXdhcmRzS2V5AQUNY2FsbGVyQWRkclN0cgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUWYWN0dWFsQXZhaWxhYmxlUmV3YXJkcwUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRBmZWVDb2xsZWN0b3JBZGRyBQt3aXRoZHJhd0ZlZQUEdW5pdAUDbmlsAWkBCmJ1eVRpY2tldHMABANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiFQbGVhc2UgYXR0YWNoIGV4YWN0bHkgb25lIHBheW1lbnQDCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkCQACAQInVGlja2V0cyBjYW4gb25seSBpYmUgcHVyY2hhc2VkIGluIFdhdmVzAwkBAiE9AggFA3BtdAZhbW91bnQFC3RpY2tldFByaWNlCQACAQkArAICCQCsAgICH1RoZSBwYXltZW50IG11c3QgYmUgb2YgZXhhY3RseSAJAKQDAQUOdGlja2V0UHJpY2VJbnQCBiB3YXZlcwQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBNjdXJyZW50VGlja2V0c0NvdW50CQENdHJ5R2V0SW50ZWdlcgEJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ1jYWxsZXJBZGRyU3RyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ1jYWxsZXJBZGRyU3RyCQBkAgUTY3VycmVudFRpY2tldHNDb3VudAABBQNuaWwAAQECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXm8O9jE", "height": 2243819, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HpsNEoWTEYFC19SCoHzqsLVjeGhKW7U8pjih8PJ1aoig Next: 5464HgYMDNVRQyeJES9vwdZFeVK7h9UBrb3RCsJ8JqTK Diff:
OldNewDifferences
2626 func getTicketsCountKey (addressString) = (addressString + "_ticketsCount")
2727
2828
29+func ticketForTournamentForAccount (tournamentId,account) = ((tournamentId + "_ticketForAccount_") + account)
30+
31+
2932 func tournamentPrizeAmountKey (tournamentId) = (tournamentId + "_tournamentPrizeAmount")
33+
34+
35+func tournamentMaxPlayersCountKey (tournamentId) = (tournamentId + "_tournamentMaxPlayersCount")
36+
37+
38+func tournamentPlayersCountKey (tournamentId) = (tournamentId + "_tournamentPlayersCount")
3039
3140
3241 func tournamentPrizeAssetIdKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetId")
3342
3443
3544 func tournamentPrizeAssetNameKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetName")
45+
46+
47+func tournamentBuyInAmountKey (tournamentId) = (tournamentId + "_tournamentBuyInAmount")
48+
49+
50+func tournamentBuyInAssetIdKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetId")
51+
52+
53+func tournamentBuyInAssetNameKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetName")
54+
55+
56+func tournamentBuyInAssetDecimalsKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetDecimals")
3657
3758
3859 func tournamentPrizeAssetDecimalsKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetDecimals")
98119
99120
100121 @Callable(i)
101-func createTournament (tournamentId) = {
122+func signUpToTournament (tournamentId) = {
123+ let maxPlayersCount = getIntegerValue(this, tournamentMaxPlayersCountKey(tournamentId))
124+ let alreadyRegisteredPlayersCount = tryGetInteger(tournamentPlayersCountKey(tournamentId))
125+ let tournamentStatus = getStringValue(tournamentStatusKey(tournamentId))
126+ if ((tournamentStatus != "registration"))
127+ then throw("Tournament is not in registration phase!")
128+ else if ((alreadyRegisteredPlayersCount == maxPlayersCount))
129+ then throw("Tournament is currently full, please try again later!")
130+ else {
131+ let pmt = if ((size(i.payments) == 1))
132+ then i.payments[0]
133+ else throw("Please attach exactly one payment")
134+ let buyInAssetid = match pmt.assetId {
135+ case b: Unit =>
136+ ""
137+ case b: ByteVector =>
138+ toBase58String(b)
139+ case _ =>
140+ throw("Match error")
141+ }
142+ let buyInRequiredAmount = getIntegerValue(this, tournamentBuyInAmountKey(tournamentId))
143+ let buyInRequiredAssetId = getStringValue(this, tournamentBuyInAssetIdKey(tournamentId))
144+ if ((buyInRequiredAmount != pmt.amount))
145+ then throw(("Attached payment amount is invalid, must be " + toString(buyInRequiredAmount)))
146+ else if ((buyInRequiredAssetId != buyInAssetid))
147+ then throw(("Attached payment asset id is invalid, must be " + buyInRequiredAssetId))
148+ else {
149+ let callerAddrStr = toBase58String(i.caller.bytes)
150+ $Tuple2([BooleanEntry(ticketForTournamentForAccount(tournamentId, callerAddrStr), true), IntegerEntry(tournamentPlayersCountKey(tournamentId), (alreadyRegisteredPlayersCount + 1))], 1)
151+ }
152+ }
153+ }
154+
155+
156+
157+@Callable(i)
158+func createTournament (tournamentId,playersCount,buyInAmount,buyInAssetId) = {
102159 let pmt = if ((size(i.payments) == 1))
103160 then i.payments[0]
104161 else throw("Please attach exactly one payment")
110167 case _ =>
111168 throw("Match error")
112169 }
113- let assetName = match pmt.assetId {
170+ let assetDetails = match pmt.assetId {
114171 case b: Unit =>
115- "Waves"
172+["Waves", 8]
116173 case b: ByteVector =>
117174 match assetInfo(b) {
118175 case asset: Asset =>
119- asset.name
176+[asset.name, asset.decimals]
120177 case _ =>
121178 throw("Can't find asset")
122179 }
123180 case _ =>
124181 throw("Match error")
125182 }
126- let assetDecimals = match pmt.assetId {
127- case b: Unit =>
128- 8
129- case b: ByteVector =>
130- match assetInfo(b) {
131- case asset: Asset =>
132- asset.decimals
133- case _ =>
134- throw("Can't find asset")
135- }
183+ let buyInAsset = match assetInfo(fromBase58String(buyInAssetId)) {
184+ case asset: Asset =>
185+[asset.name, asset.decimals]
136186 case _ =>
137- throw("Match error")
187+["", 0]
138188 }
139- $Tuple2([IntegerEntry(tournamentPrizeAmountKey(tournamentId), pmt.amount), StringEntry(tournamentPrizeAssetIdKey(tournamentId), prizeAssetId), StringEntry(tournamentPrizeAssetNameKey(tournamentId), assetName), IntegerEntry(tournamentPrizeAssetDecimalsKey(tournamentId), assetDecimals), StringEntry(tournamentStatusKey(tournamentId), "registration")], 1)
189+ $Tuple2([IntegerEntry(tournamentPrizeAmountKey(tournamentId), pmt.amount), IntegerEntry(tournamentMaxPlayersCountKey(tournamentId), playersCount), StringEntry(tournamentPrizeAssetIdKey(tournamentId), prizeAssetId), StringEntry(tournamentPrizeAssetNameKey(tournamentId), {
190+ let @ = assetDetails[0]
191+ if ($isInstanceOf(@, "String"))
192+ then @
193+ else throw(($getType(assetDetails[0]) + " couldn't be cast to String"))
194+ }), IntegerEntry(tournamentPrizeAssetDecimalsKey(tournamentId), {
195+ let @ = assetDetails[1]
196+ if ($isInstanceOf(@, "Int"))
197+ then @
198+ else throw(($getType(assetDetails[1]) + " couldn't be cast to Int"))
199+ }), StringEntry(tournamentStatusKey(tournamentId), "registration"), IntegerEntry(tournamentBuyInAmountKey(tournamentId), buyInAmount), StringEntry(tournamentBuyInAssetNameKey(tournamentId), {
200+ let @ = buyInAsset[0]
201+ if ($isInstanceOf(@, "String"))
202+ then @
203+ else throw(($getType(buyInAsset[0]) + " couldn't be cast to String"))
204+ }), IntegerEntry(tournamentBuyInAssetDecimalsKey(tournamentId), {
205+ let @ = buyInAsset[1]
206+ if ($isInstanceOf(@, "Int"))
207+ then @
208+ else throw(($getType(buyInAsset[1]) + " couldn't be cast to Int"))
209+ }), StringEntry(tournamentBuyInAssetIdKey(tournamentId), buyInAssetId)], 1)
140210 }
141211
142212
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let waves = 100000000
55
66 let ticketPriceInt = 1000000
77
88 let ticketPrice = ticketPriceInt
99
1010 let invFee = 500000
1111
1212 let withdrawFeePercent = 5
1313
1414 let feeCollectorAddressKey = "feeCollectorAddress"
1515
1616 let depositAssetId = "5ue1fiuV6j6UBr6Xf28Qms6y5FqzKtqvaxxhwu7hTQ58"
1717
1818 func tryGetInteger (key) = match getInteger(this, key) {
1919 case b: Int =>
2020 b
2121 case _ =>
2222 0
2323 }
2424
2525
2626 func getTicketsCountKey (addressString) = (addressString + "_ticketsCount")
2727
2828
29+func ticketForTournamentForAccount (tournamentId,account) = ((tournamentId + "_ticketForAccount_") + account)
30+
31+
2932 func tournamentPrizeAmountKey (tournamentId) = (tournamentId + "_tournamentPrizeAmount")
33+
34+
35+func tournamentMaxPlayersCountKey (tournamentId) = (tournamentId + "_tournamentMaxPlayersCount")
36+
37+
38+func tournamentPlayersCountKey (tournamentId) = (tournamentId + "_tournamentPlayersCount")
3039
3140
3241 func tournamentPrizeAssetIdKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetId")
3342
3443
3544 func tournamentPrizeAssetNameKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetName")
45+
46+
47+func tournamentBuyInAmountKey (tournamentId) = (tournamentId + "_tournamentBuyInAmount")
48+
49+
50+func tournamentBuyInAssetIdKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetId")
51+
52+
53+func tournamentBuyInAssetNameKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetName")
54+
55+
56+func tournamentBuyInAssetDecimalsKey (tournamentId) = (tournamentId + "_tournamentBuyInAssetDecimals")
3657
3758
3859 func tournamentPrizeAssetDecimalsKey (tournamentId) = (tournamentId + "_tournamentPrizeAssetDecimals")
3960
4061
4162 func tournamentStatusKey (tournamentId) = (tournamentId + "_tournamentStatus")
4263
4364
4465 func tournamentWinningTransactionIdKey (tournamentId) = (tournamentId + "_tournamentWinningTransactionId")
4566
4667
4768 func gameWinnerKey (gameId) = (gameId + "_winner")
4869
4970
5071 func addressAvailableFundsKey (address) = (address + "_availableFunds")
5172
5273
5374 func addressTotalLockedFundsKey (address) = (address + "_totalLockedFunds")
5475
5576
5677 func addressLockedFundsTotalHistoryKey (address) = (address + "_lockedFundsTotalHistory")
5778
5879
5980 func addressLockedFundsForGameKey (address,gameId) = ((address + "_lockedFunds_") + gameId)
6081
6182
6283 func addressAvailableRewardsKey (address) = (address + "_availableRewards")
6384
6485
6586 func getTicketsCount (addressString) = tryGetInteger(getTicketsCountKey(addressString))
6687
6788
6889 func consumeTicket (playerAddr) = {
6990 let currentTicketCount = getTicketsCount(playerAddr)
7091 let newCurrentTicketCount = (currentTicketCount - 1)
7192 if ((0 > newCurrentTicketCount))
7293 then 0
7394 else newCurrentTicketCount
7495 }
7596
7697
7798 @Callable(i)
7899 func setFeeCollectorAddress (collectorAddr) = if ((i.caller != this))
79100 then throw("Admin Only")
80101 else [StringEntry(feeCollectorAddressKey, collectorAddr)]
81102
82103
83104
84105 @Callable(i)
85106 func depositFunds () = {
86107 let pmt = if ((size(i.payments) == 1))
87108 then i.payments[0]
88109 else throw("Please attach exactly one payment")
89110 if ((pmt.assetId != fromBase58String(depositAssetId)))
90111 then throw("You can only deposit USDN")
91112 else {
92113 let callerAddrStr = toBase58String(i.caller.bytes)
93114 let currentAvailableFunds = tryGetInteger(addressAvailableFundsKey(callerAddrStr))
94115 $Tuple2([IntegerEntry(addressAvailableFundsKey(callerAddrStr), (currentAvailableFunds + pmt.amount))], 1)
95116 }
96117 }
97118
98119
99120
100121 @Callable(i)
101-func createTournament (tournamentId) = {
122+func signUpToTournament (tournamentId) = {
123+ let maxPlayersCount = getIntegerValue(this, tournamentMaxPlayersCountKey(tournamentId))
124+ let alreadyRegisteredPlayersCount = tryGetInteger(tournamentPlayersCountKey(tournamentId))
125+ let tournamentStatus = getStringValue(tournamentStatusKey(tournamentId))
126+ if ((tournamentStatus != "registration"))
127+ then throw("Tournament is not in registration phase!")
128+ else if ((alreadyRegisteredPlayersCount == maxPlayersCount))
129+ then throw("Tournament is currently full, please try again later!")
130+ else {
131+ let pmt = if ((size(i.payments) == 1))
132+ then i.payments[0]
133+ else throw("Please attach exactly one payment")
134+ let buyInAssetid = match pmt.assetId {
135+ case b: Unit =>
136+ ""
137+ case b: ByteVector =>
138+ toBase58String(b)
139+ case _ =>
140+ throw("Match error")
141+ }
142+ let buyInRequiredAmount = getIntegerValue(this, tournamentBuyInAmountKey(tournamentId))
143+ let buyInRequiredAssetId = getStringValue(this, tournamentBuyInAssetIdKey(tournamentId))
144+ if ((buyInRequiredAmount != pmt.amount))
145+ then throw(("Attached payment amount is invalid, must be " + toString(buyInRequiredAmount)))
146+ else if ((buyInRequiredAssetId != buyInAssetid))
147+ then throw(("Attached payment asset id is invalid, must be " + buyInRequiredAssetId))
148+ else {
149+ let callerAddrStr = toBase58String(i.caller.bytes)
150+ $Tuple2([BooleanEntry(ticketForTournamentForAccount(tournamentId, callerAddrStr), true), IntegerEntry(tournamentPlayersCountKey(tournamentId), (alreadyRegisteredPlayersCount + 1))], 1)
151+ }
152+ }
153+ }
154+
155+
156+
157+@Callable(i)
158+func createTournament (tournamentId,playersCount,buyInAmount,buyInAssetId) = {
102159 let pmt = if ((size(i.payments) == 1))
103160 then i.payments[0]
104161 else throw("Please attach exactly one payment")
105162 let prizeAssetId = match pmt.assetId {
106163 case b: Unit =>
107164 ""
108165 case b: ByteVector =>
109166 toBase58String(b)
110167 case _ =>
111168 throw("Match error")
112169 }
113- let assetName = match pmt.assetId {
170+ let assetDetails = match pmt.assetId {
114171 case b: Unit =>
115- "Waves"
172+["Waves", 8]
116173 case b: ByteVector =>
117174 match assetInfo(b) {
118175 case asset: Asset =>
119- asset.name
176+[asset.name, asset.decimals]
120177 case _ =>
121178 throw("Can't find asset")
122179 }
123180 case _ =>
124181 throw("Match error")
125182 }
126- let assetDecimals = match pmt.assetId {
127- case b: Unit =>
128- 8
129- case b: ByteVector =>
130- match assetInfo(b) {
131- case asset: Asset =>
132- asset.decimals
133- case _ =>
134- throw("Can't find asset")
135- }
183+ let buyInAsset = match assetInfo(fromBase58String(buyInAssetId)) {
184+ case asset: Asset =>
185+[asset.name, asset.decimals]
136186 case _ =>
137- throw("Match error")
187+["", 0]
138188 }
139- $Tuple2([IntegerEntry(tournamentPrizeAmountKey(tournamentId), pmt.amount), StringEntry(tournamentPrizeAssetIdKey(tournamentId), prizeAssetId), StringEntry(tournamentPrizeAssetNameKey(tournamentId), assetName), IntegerEntry(tournamentPrizeAssetDecimalsKey(tournamentId), assetDecimals), StringEntry(tournamentStatusKey(tournamentId), "registration")], 1)
189+ $Tuple2([IntegerEntry(tournamentPrizeAmountKey(tournamentId), pmt.amount), IntegerEntry(tournamentMaxPlayersCountKey(tournamentId), playersCount), StringEntry(tournamentPrizeAssetIdKey(tournamentId), prizeAssetId), StringEntry(tournamentPrizeAssetNameKey(tournamentId), {
190+ let @ = assetDetails[0]
191+ if ($isInstanceOf(@, "String"))
192+ then @
193+ else throw(($getType(assetDetails[0]) + " couldn't be cast to String"))
194+ }), IntegerEntry(tournamentPrizeAssetDecimalsKey(tournamentId), {
195+ let @ = assetDetails[1]
196+ if ($isInstanceOf(@, "Int"))
197+ then @
198+ else throw(($getType(assetDetails[1]) + " couldn't be cast to Int"))
199+ }), StringEntry(tournamentStatusKey(tournamentId), "registration"), IntegerEntry(tournamentBuyInAmountKey(tournamentId), buyInAmount), StringEntry(tournamentBuyInAssetNameKey(tournamentId), {
200+ let @ = buyInAsset[0]
201+ if ($isInstanceOf(@, "String"))
202+ then @
203+ else throw(($getType(buyInAsset[0]) + " couldn't be cast to String"))
204+ }), IntegerEntry(tournamentBuyInAssetDecimalsKey(tournamentId), {
205+ let @ = buyInAsset[1]
206+ if ($isInstanceOf(@, "Int"))
207+ then @
208+ else throw(($getType(buyInAsset[1]) + " couldn't be cast to Int"))
209+ }), StringEntry(tournamentBuyInAssetIdKey(tournamentId), buyInAssetId)], 1)
140210 }
141211
142212
143213
144214 @Callable(i)
145215 func finishTournament (tournamentId,winningTransfertTransactionId) = if ((i.caller != this))
146216 then throw("Admin Only")
147217 else $Tuple2([StringEntry(tournamentWinningTransactionIdKey(tournamentId), winningTransfertTransactionId), StringEntry(tournamentStatusKey(tournamentId), "finished")], 1)
148218
149219
150220
151221 @Callable(i)
152222 func playerExitGame (gameId,playerAddr,exitStackAmount) = if ((i.caller != this))
153223 then throw("Admin Only")
154224 else {
155225 let currentTotalLockedFunds = tryGetInteger(addressTotalLockedFundsKey(playerAddr))
156226 let currentGameLockedAmountForPlayer = tryGetInteger(addressLockedFundsForGameKey(playerAddr, gameId))
157227 $Tuple2([IntegerEntry(addressTotalLockedFundsKey(playerAddr), (currentTotalLockedFunds - currentGameLockedAmountForPlayer)), IntegerEntry(addressLockedFundsForGameKey(playerAddr, gameId), 0), ScriptTransfer(addressFromStringValue(playerAddr), exitStackAmount, fromBase58String(depositAssetId))], 1)
158228 }
159229
160230
161231
162232 @Callable(i)
163233 func lockFundsForGame (gameId) = {
164234 let pmt = if ((size(i.payments) == 1))
165235 then i.payments[0]
166236 else throw("Please attach exactly one payment")
167237 if ((pmt.assetId != fromBase58String(depositAssetId)))
168238 then throw("You can only deposit USDN")
169239 else {
170240 let callerAddrStr = toBase58String(i.caller.bytes)
171241 let currentTotalLockedFunds = tryGetInteger(addressTotalLockedFundsKey(callerAddrStr))
172242 let currentLockedFundsTotalHistory = tryGetInteger(addressLockedFundsTotalHistoryKey(callerAddrStr))
173243 $Tuple2([IntegerEntry(addressTotalLockedFundsKey(callerAddrStr), (currentTotalLockedFunds + pmt.amount)), IntegerEntry(addressLockedFundsTotalHistoryKey(callerAddrStr), (currentLockedFundsTotalHistory + pmt.amount)), IntegerEntry(addressLockedFundsForGameKey(callerAddrStr, gameId), pmt.amount)], 1)
174244 }
175245 }
176246
177247
178248
179249 @Callable(i)
180250 func withdrawFunds () = {
181251 let callerAddrStr = toBase58String(i.caller.bytes)
182252 let feeCollectorAddr = addressFromStringValue(getStringValue(feeCollectorAddressKey))
183253 let currentAvailableFunds = tryGetInteger(addressAvailableFundsKey(callerAddrStr))
184254 let withdrawFee = fraction(currentAvailableFunds, withdrawFeePercent, 100)
185255 let actualAvailableFunds = (currentAvailableFunds - withdrawFee)
186256 if ((0 >= actualAvailableFunds))
187257 then throw("No available funds to withdraw")
188258 else [IntegerEntry(addressAvailableFundsKey(callerAddrStr), 0), ScriptTransfer(i.caller, actualAvailableFunds, fromBase58String(depositAssetId)), ScriptTransfer(feeCollectorAddr, withdrawFee, fromBase58String(depositAssetId))]
189259 }
190260
191261
192262
193263 @Callable(i)
194264 func setWinnerHeadsUp (gameId,winnerAddrStr,otherPlayerAddr) = if ((i.caller != this))
195265 then throw("Admin Only")
196266 else {
197267 let availableRewardsKey = addressAvailableRewardsKey(winnerAddrStr)
198268 let currentAvailableRewards = tryGetInteger(availableRewardsKey)
199269 let newTicketCountWinner = consumeTicket(winnerAddrStr)
200270 let newTicketCountOtherPlayer = consumeTicket(otherPlayerAddr)
201271 [StringEntry(gameWinnerKey(gameId), winnerAddrStr), IntegerEntry(availableRewardsKey, (currentAvailableRewards + (ticketPrice * 2))), IntegerEntry(getTicketsCountKey(winnerAddrStr), newTicketCountWinner), IntegerEntry(getTicketsCountKey(otherPlayerAddr), newTicketCountOtherPlayer)]
202272 }
203273
204274
205275
206276 @Callable(i)
207277 func withdrawRewards () = {
208278 let callerAddrStr = toBase58String(i.caller.bytes)
209279 let feeCollectorAddr = addressFromStringValue(getStringValue(feeCollectorAddressKey))
210280 let currentAvailableRewards = tryGetInteger(addressAvailableRewardsKey(callerAddrStr))
211281 let withdrawFee = fraction(currentAvailableRewards, withdrawFeePercent, 100)
212282 let actualAvailableRewards = ((currentAvailableRewards - invFee) - withdrawFee)
213283 if ((0 >= currentAvailableRewards))
214284 then throw("No available rewards to withdraw")
215285 else [IntegerEntry(addressAvailableRewardsKey(callerAddrStr), 0), ScriptTransfer(i.caller, actualAvailableRewards, unit), ScriptTransfer(feeCollectorAddr, withdrawFee, unit)]
216286 }
217287
218288
219289
220290 @Callable(i)
221291 func buyTickets () = {
222292 let pmt = if ((size(i.payments) == 1))
223293 then i.payments[0]
224294 else throw("Please attach exactly one payment")
225295 if (isDefined(pmt.assetId))
226296 then throw("Tickets can only ibe purchased in Waves")
227297 else if ((pmt.amount != ticketPrice))
228298 then throw((("The payment must be of exactly " + toString(ticketPriceInt)) + " waves"))
229299 else {
230300 let callerAddrStr = toBase58String(i.caller.bytes)
231301 let currentTicketsCount = tryGetInteger(getTicketsCountKey(callerAddrStr))
232302 $Tuple2([IntegerEntry(getTicketsCountKey(callerAddrStr), (currentTicketsCount + 1))], 1)
233303 }
234304 }
235305
236306
237307 @Verifier(tx)
238308 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
239309

github/deemru/w8io/873ac7e 
42.63 ms