tx · 9cd9kgwP15GTNXrGwYWsftcYSCoRWkWkiPRpVYtqhCjo

3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx:  -0.01300000 Waves

2023.09.06 12:16 [2743319] smart account 3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx > SELF 0.00000000 Waves

{ "type": 13, "id": "9cd9kgwP15GTNXrGwYWsftcYSCoRWkWkiPRpVYtqhCjo", "fee": 1300000, "feeAssetId": null, "timestamp": 1693991844687, "version": 2, "chainId": 84, "sender": "3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx", "senderPublicKey": "UGqkWsCpv7xRVXkQRXyLd6pWPDtYGXmPip7FxSd1pAu", "proofs": [ "4ACyrm1LmaENt5f5KAiejcHF5rHkvwzmBtnXJQBdsDXLmV8VE2PVXRrmXUcRfd1n6RfUJqL6psuUvqTMjsLxb6n7" ], "script": "base64:BgIfCAISBwoFAQEBAQESABIAEgQKAggBEgMKAQESAwoBATYAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAA1sYXN0VG91cklkS2V5Ag4lc19fbGFzdFRvdXJJZAEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQN0SWQJAKwCAgIWJXMlZF9fdG91clN0YXRpY0RhdGFfXwkApAMBBQN0SWQBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBA3RJZAkArAICAhclcyVkX190b3VyRHluYW1pY0RhdGFfXwkApAMBBQN0SWQBE2tleVNjb3JlQm9hcmRCeVRvdXIBA3RJZAkArAICAhIlcyVkX19zY29yZUJvYXJkX18JAKQDAQUDdElkARJrZXlTdW1TY29yZXNCeVRvdXIBA3RJZAkArAICAhElcyVkX19zdW1TY29yZXNfXwkApAMBBQN0SWQBG2tleUxhc3RSZWdpc3RlcmVkVG91ckJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIgJXMlc19fbGFzdFJlZ2lzdGVyZWRUb3VyQnlEdWNrX18FC2R1Y2tBc3NldElkARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAiElcyVkJXNfX2lzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BG2tleUxhc3RBdHRlbXB0QnlUb3VyQW5kRHVjawIDdElkC2R1Y2tBc3NldElkCQC5CQIJAMwIAgIgJXMlZCVzX19sYXN0QXR0ZW1wdEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAh8lcyVkJXNfX2Jlc3RSZXN1bHRCeVRvdXJBbmREdWNrCQDMCAIJAKQDAQUDdElkCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwCAl9fAAlpZHhTdGF0aWMAAAAKaWR4RHluYW1pYwABABN0U3RhdGljUmVnaXN0ZXJDb3N0AAIAEnRTdGF0aWNBdHRlbXB0Q29zdAADAAx0U3RhdGljU3RhcnQABQAKdFN0YXRpY0VuZAAGAA50RHluYW1pY1N0YXR1cwABAA90RHluYW1pY0xlYWRlcnMAAgARdER5bmFtaWNXaW5SZXN1bHQAAwAVdER5bmFtaWNUb3RhbFJlZ0NvdW50AAQAFXREeW5hbWljVG90YWxBdHRlbXB0cwAFAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQITTm90IGluaXRpYWxpemVkIHlldAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQRwYWRMAgN2YWwDbGVuBAR2YWxTCQCkAwEFA3ZhbAQGemVyb2VzCQCwAgIJAKQDAQkAbAYACgAACQBlAgUDbGVuCQCxAgEFBHZhbFMAAAAABQRET1dOAAEJAKwCAgUGemVyb2VzBQR2YWxTABNNQVhUT1VSTkFNRU5UTEVOR1RIAICY/80BAARIT1VSAIDd2wEACmFkbWluc0xpc3QJAMwIAgkApQgBBQR0aGlzCQDMCAIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRWUyUkVMVUhDRkNCc21TQ05jQko4TjNVUkxWUWVuZGU3AwkAAAIBAVQFByRtYXRjaDACIzNNdEJnSlRhTHhQQjNDN1VKRDFVRThxamtIdGhmS3ZGUVlZCQACAQINVW5rbm93biBjaGFpbgUDbmlsAQpzdGF0aWNEYXRhBwR0eElkDHJlZ2lzdGVyQ29zdAthdHRlbXB0Q29zdAxjcmVhdGlvblRpbWUJc3RhcnRUaW1lB2VuZFRpbWUJbnVtR3JhbmRzCQC5CQIJAMwIAgIOJXMlZCVkJWQlZCVkJWQJAMwIAgUEdHhJZAkAzAgCCQCkAwEFDHJlZ2lzdGVyQ29zdAkAzAgCCQCkAwEFC2F0dGVtcHRDb3N0CQDMCAIJAKQDAQUMY3JlYXRpb25UaW1lCQDMCAIJAKQDAQUJc3RhcnRUaW1lCQDMCAIJAKQDAQUHZW5kVGltZQkAzAgCCQCkAwEFCW51bUdyYW5kcwUDbmlsBQNTRVABC2R5bmFtaWNEYXRhBQZzdGF0dXMHbGVhZGVycwl3aW5SZXN1bHQJdG90YWxSZWdzDXRvdGFsQXR0ZW1wdHMJALoJAgkAzAgCAgolcyVzJWQlZCVkCQDMCAIFBnN0YXR1cwkAzAgCBQdsZWFkZXJzCQDMCAIJAKQDAQUJd2luUmVzdWx0CQDMCAIJAKQDAQUJdG90YWxSZWdzCQDMCAIJAKQDAQUNdG90YWxBdHRlbXB0cwUDbmlsBQNTRVABBnByb2xvZwAJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AgpzYXZlTGFzdFR4BQNuaWwFA25pbAEMZHVja0J5Q2FsbGVyAQZjYWxsZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQUGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBgFpARBjcmVhdGVUb3VybmFtZW50BQlzdGFydFRpbWUHZW5kVGltZQxyZWdpc3RlckNvc3QLYXR0ZW1wdENvc3QJbnVtR3JhbmRzBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUKYWRtaW5zTGlzdAUGY2FsbGVyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEBmxhc3RJZAkAnwgBBQ1sYXN0VG91cklkS2V5BAN0SWQDCQEJaXNEZWZpbmVkAQUGbGFzdElkBApsYXN0VG91cklkCQEFdmFsdWUBBQZsYXN0SWQEB2R5bmFtaWMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFCmxhc3RUb3VySWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFCmxhc3RUb3VySWQCBSBkYXRhBAZzdGF0dXMJAJEDAgkAtQkCBQdkeW5hbWljBQNTRVAFDnREeW5hbWljU3RhdHVzAwkBAiE9AgUGc3RhdHVzAghBUkNISVZFRAkAAgEJAKwCAgIsQ3VycmVudCB0b3VybmVtZW50IGlzIG5vdCBjb21wbGV0ZWQsIHN0YXR1cz0FBnN0YXR1cwkAZAIFCmxhc3RUb3VySWQAAQABBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkAZgIFA25vdwUJc3RhcnRUaW1lCQACAQkArAICCQCsAgIJAKwCAgIKc3RhcnRUaW1lPQkApAMBBQlzdGFydFRpbWUCECA8IGNyZWF0aW9uVGltZT0JAKQDAQUDbm93AwkAZgIFCXN0YXJ0VGltZQUHZW5kVGltZQkAAgEJAKwCAgkArAICCQCsAgICCGVuZFRpbWU9CQCkAwEFB2VuZFRpbWUCDSA8IHN0YXJ0VGltZT0JAKQDAQUJc3RhcnRUaW1lAwkAZgIJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUFE01BWFRPVVJOQU1FTlRMRU5HVEgJAAIBCQCsAgIJAKwCAgkArAICAh9Ub3VybmFtZW50IHBlcmlvZCBleGNlZWRzIG1heDogCQCkAwEJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUCAyA+IAkApAMBBRNNQVhUT1VSTkFNRU5UTEVOR1RIAwMJAGcCAAAFDHJlZ2lzdGVyQ29zdAYJAGcCAAAFC2F0dGVtcHRDb3N0CQACAQkArAICCQCsAgIJAKwCAgIkQ29zdCBzaG91bGQgYmUgcG9zaXRpdmUsIGJ1dCBwYXNzZWQgCQCkAwEFDHJlZ2lzdGVyQ29zdAIFIGFuZCAJAKQDAQULYXR0ZW1wdENvc3QDCQBmAgAABQludW1HcmFuZHMJAAIBAi1OdW1iZXIgb2YgR3JhbmQgUHJpemVzIHNob3VsZCBiZSBub24tbmVnYXRpdmUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNbGFzdFRvdXJJZEtleQUDdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAQpzdGF0aWNEYXRhBwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQxyZWdpc3RlckNvc3QFC2F0dGVtcHRDb3N0BQNub3cFCXN0YXJ0VGltZQUHZW5kVGltZQUJbnVtR3JhbmRzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQELZHluYW1pY0RhdGEFAgdDUkVBVEVEAgEgAAAAAAAABQNuaWwFA3RJZAFpAQhyZWdpc3RlcgAEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGd2xnQW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCFVdMR09MRCBwYXltZW50cyBvbmx5IQMJAQIhPQIFCnBtdEFzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEEBmxhc3RJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFDWxhc3RUb3VySWRLZXkCFU5vIGFjdGl2ZSB0b3VybmFtZW50cwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEBnN0YXR1cwkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwMJAQEhAQMDAwkAAAIFBnN0YXR1cwIHQ1JFQVRFRAkAZgIFA25vdwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUMdFN0YXRpY1N0YXJ0BwkAZgIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQRIT1VSBQNub3cHBgMJAAACBQZzdGF0dXMCCklOUFJPR1JFU1MJAGYCCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUESE9VUgUDbm93BwkAAgECE0Nhbm5vdCByZWdpc3RlciBub3cEB3JlZ0Nvc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFE3RTdGF0aWNSZWdpc3RlckNvc3QDCQECIT0CBQZ3bGdBbXQFB3JlZ0Nvc3QJAAIBCQCsAgIJAKwCAgIQTmVlZCBwYXltZW50IG9mIAkBCmZpeGVkUG9pbnQCBQdyZWdDb3N0AAgCByBXTEdPTEQEC2R1Y2tBc3NldElkCQEMZHVja0J5Q2FsbGVyAQgFAWkMb3JpZ2luQ2FsbGVyBA1vbGRTY29yZUJvYXJkCQELdmFsdWVPckVsc2UCCQCiCAEJARNrZXlTY29yZUJvYXJkQnlUb3VyAQUGbGFzdElkAgADAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEca2V5SXNSZWdpc3RlcmVkQnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQHBgkBCGNvbnRhaW5zAgUNb2xkU2NvcmVCb2FyZAULZHVja0Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAgpZb3VyIGR1Y2sgBQtkdWNrQXNzZXRJZAIlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBhdCB0b3VybmFtZW50IAkApAMBBQZsYXN0SWQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIKSU5QUk9HUkVTUwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5TGFzdFJlZ2lzdGVyZWRUb3VyQnlEdWNrAQULZHVja0Fzc2V0SWQFBmxhc3RJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBHGtleUlzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkBgkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5U2NvcmVCb2FyZEJ5VG91cgEFBmxhc3RJZAMJAAACBQ1vbGRTY29yZUJvYXJkAgAJAKwCAgULZHVja0Fzc2V0SWQCBDowMDAJAKwCAgkArAICCQCsAgIFDW9sZFNjb3JlQm9hcmQCAV8FC2R1Y2tBc3NldElkAgQ6MDAwCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUGbGFzdElkBRJ1cGRhdGVkRHluYW1pY0RhdGEFA25pbAUMcHJvbG9nUmVzdWx0AWkBCm5ld0F0dGVtcHQABAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBDGR1Y2tCeUNhbGxlcgEIBQFpDG9yaWdpbkNhbGxlcgQGbGFzdElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUNbGFzdFRvdXJJZEtleQIVTm8gYWN0aXZlIHRvdXJuYW1lbnRzBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUEdGhpcwUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQGc3RhdHVzCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAwkBASEBAwkAAAIFBnN0YXR1cwIKSU5QUk9HUkVTUwkAZgIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQRIT1VSBQNub3cHCQACAQIXQXR0ZW1wdCBpcyBub3QgcG9zc2libGUDCQEBIQEJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBHGtleUlzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkBwkAAgEJAKwCAgkArAICCQCsAgICCllvdXIgZHVjayAFC2R1Y2tBc3NldElkAiEgaXMgbm90IHJlZ2lzdGVyZWQgYXQgdG91cm5hbWVudCAJAKQDAQUGbGFzdElkBBNhdHRlbXB0c0l0ZXJhdG9yS2V5CQEba2V5TGFzdEF0dGVtcHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAQLbGFzdEF0dGVtcHQJAJ8IAQUTYXR0ZW1wdHNJdGVyYXRvcktleQQLJHQwNjEwNDY3MzYDCQEBIQEJAQlpc0RlZmluZWQBBQtsYXN0QXR0ZW1wdAkAlAoCAAAAAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIVV0xHT0xEIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUKcG10QXNzZXRJZAUKd2xnQXNzZXRJZAkAAgECFVdMR09MRCBwYXltZW50cyBvbmx5IQQHYXR0Q29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUSdFN0YXRpY0F0dGVtcHRDb3N0AwkBAiE9AgUGd2xnQW10BQdhdHRDb3N0CQACAQkArAICCQCsAgICEE5lZWQgcGF5bWVudCBvZiAJAQpmaXhlZFBvaW50AgUHYXR0Q29zdAAIAgcgV0xHT0xECQCUCgIJAGQCCQEFdmFsdWUBBQtsYXN0QXR0ZW1wdAABAAEEDXBheWVkQXR0ZW1wdHMIBQskdDA2MTA0NjczNgJfMQQJaW5jcmVtZW50CAULJHQwNjEwNDY3MzYCXzIEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIKSU5QUk9HUkVTUwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsQXR0ZW1wdHMFCWluY3JlbWVudAQHdG91ckxvYwkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCE2luaXREdWNrVG91ckF0dGVtcHQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2F0dGVtcHRzSXRlcmF0b3JLZXkFDXBheWVkQXR0ZW1wdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQZsYXN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQUDbmlsCQDMCAIFDHByb2xvZ1Jlc3VsdAkAzAgCBQ1wYXllZEF0dGVtcHRzCQDMCAIFB3RvdXJMb2MFA25pbAFpAQ5zYXZlRHVja1Jlc3VsdAILZHVja0Fzc2V0SWQLZHVja05ld0Jlc3QDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBmxhc3RJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFDWxhc3RUb3VySWRLZXkCFU5vIGFjdGl2ZSB0b3VybmFtZW50cwQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EDWJlc3RSZXN1bHRLZXkJARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQEDHN1bVNjb3Jlc0tleQkBEmtleVN1bVNjb3Jlc0J5VG91cgEFBmxhc3RJZAQMb2xkU3VtU2NvcmVzCQELdmFsdWVPckVsc2UCCQCfCAEFDHN1bVNjb3Jlc0tleQAAAwkBDmlzSW5Ub3VybmFtZW50AgUEdGhpcwULY3VyTG9jYXRpb24EC2R1Y2tPbGRCZXN0CQELdmFsdWVPckVsc2UCCQCfCAEFDWJlc3RSZXN1bHRLZXkAAAQIc2NvcmVLZXkJARNrZXlTY29yZUJvYXJkQnlUb3VyAQUGbGFzdElkBA1vbGRTY29yZUJvYXJkCQELdmFsdWVPckVsc2UCCQCiCAEFCHNjb3JlS2V5AgAEDCR0MDk1OTIxMDc1MwMJAGYCBQtkdWNrTmV3QmVzdAULZHVja09sZEJlc3QDCQEBIQEJAQhjb250YWlucwIFDW9sZFNjb3JlQm9hcmQFC2R1Y2tBc3NldElkCQACAQkArAICAhxzY29yZUJvYXJkIGRvZXMgbm90IGNvbnRhaW4gBQtkdWNrQXNzZXRJZAQHb2xkQmVzdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFEXREeW5hbWljV2luUmVzdWx0BAdsZWFkZXJzCQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwQOb2xkTGVhZGVyc0xpc3QDAwkAAAIFB2xlYWRlcnMCAAYJAAACBQdsZWFkZXJzAgEgBQNuaWwJALwJAgUHbGVhZGVycwIBLAQObmV3TGVhZGVyc0xpc3QDCQBmAgULZHVja05ld0Jlc3QFB29sZEJlc3QJAMwIAgULZHVja0Fzc2V0SWQFA25pbAMDCQBmAgUHb2xkQmVzdAULZHVja05ld0Jlc3QGCQEPY29udGFpbnNFbGVtZW50AgUOb2xkTGVhZGVyc0xpc3QFC2R1Y2tBc3NldElkBQ5vbGRMZWFkZXJzTGlzdAkAzQgCBQ5vbGRMZWFkZXJzTGlzdAULZHVja0Fzc2V0SWQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIKSU5QUk9HUkVTUwkAugkCBQ5uZXdMZWFkZXJzTGlzdAIBLAkAlgMBCQDMCAIFC2R1Y2tOZXdCZXN0CQDMCAIFB29sZEJlc3QFA25pbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwQFcGFydHMJAL0JAgUNb2xkU2NvcmVCb2FyZAULZHVja0Fzc2V0SWQJAJUKAwkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFBXBhcnRzAAAFC2R1Y2tBc3NldElkAgE6CQEEcGFkTAIFC2R1Y2tOZXdCZXN0AAMJALACAgkAkQMCBQVwYXJ0cwABAAQJAGUCCQBkAgUMb2xkU3VtU2NvcmVzBQtkdWNrTmV3QmVzdAULZHVja09sZEJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQZsYXN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQUDbmlsCQCVCgMFDW9sZFNjb3JlQm9hcmQFDG9sZFN1bVNjb3JlcwUDbmlsBA1uZXdTY29yZUJvYXJkCAUMJHQwOTU5MjEwNzUzAl8xBAxuZXdTdW1TY29yZXMIBQwkdDA5NTkyMTA3NTMCXzIEDWdsb2JhbEFjdGlvbnMIBQwkdDA5NTkyMTA3NTMCXzMJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1iZXN0UmVzdWx0S2V5CQCWAwEJAMwIAgULZHVja09sZEJlc3QJAMwIAgULZHVja05ld0Jlc3QFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMc3VtU2NvcmVzS2V5BQxuZXdTdW1TY29yZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgUIc2NvcmVLZXkFDW5ld1Njb3JlQm9hcmQFA25pbAUNZ2xvYmFsQWN0aW9ucwAACQCUCgIFA25pbAAAAWkBEXByb2Nlc3NUb3VybmFtZW50AQN0SWQEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQphZG1pbnNMaXN0BQZjYWxsZXIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFA3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEBnN0YXR1cwkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwMJAAACBQZzdGF0dXMCCEFSQ0hJVkVECQACAQkArAICCQCsAgICC1RvdXJuYW1lbnQgCQCkAwEFA3RJZAIUIGlzIGFscmVhZHkgQVJDSElWRUQDAwkAAAIFBnN0YXR1cwIKSU5QUk9HUkVTUwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcJAAIBCQCsAgIJAKwCAgILVG91cm5hbWVudCAJAKQDAQUDdElkAhAgaXMgbm90IG92ZXIgeWV0BBJ1cGRhdGVkRHluYW1pY0RhdGEJAQtkeW5hbWljRGF0YQUCClBST0NFU1NJTkcJAJEDAgUHZHluYW1pYwUPdER5bmFtaWNMZWFkZXJzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwURdER5bmFtaWNXaW5SZXN1bHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsQXR0ZW1wdHMJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAUSdXBkYXRlZER5bmFtaWNEYXRhBQNuaWwAAAFpARBmaW5pc2hUb3VybmFtZW50AQN0SWQEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQphZG1pbnNMaXN0BQZjYWxsZXIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFA3RJZAQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQGc3RhdHVzCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAwkAAAIFBnN0YXR1cwIIQVJDSElWRUQJAAIBCQCsAgIJAKwCAgILVG91cm5hbWVudCAJAKQDAQUDdElkAhQgaXMgYWxyZWFkeSBBUkNISVZFRAQSdXBkYXRlZER5bmFtaWNEYXRhCQELZHluYW1pY0RhdGEFAghBUkNISVZFRAkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkBRJ1cGRhdGVkRHluYW1pY0RhdGEFA25pbAAAAAVVQds=", "height": 2743319, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CcWe6nSyg5XsK2swkVP3k79v1Bcz5gZcbb9cm25Kq1xP Next: 8ZEdvgUApGJyayBBLykckYVwvowotejjpMVn5GnxwmwK Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "Africa_F_Africa"
55
6-func b (c) = ("stakedDuckByOwner_" + c)
6+let b = 0
7+
8+let c = 1
9+
10+func d (e) = ("stakedDuckByOwner_" + e)
711
812
9-func d (e) = ("duckLocation_" + e)
13+func f (g) = ("duckLocation_" + g)
1014
1115
12-let f = "%s__lastTourId"
16+let h = "%s__lastTourId"
1317
14-func g (h) = ("%s%d__tourStaticData__" + toString(h))
18+func i (j) = ("%s%d__tourStaticData__" + toString(j))
1519
1620
17-func i (h) = ("%s%d__tourDynamicData__" + toString(h))
21+func k (j) = ("%s%d__tourDynamicData__" + toString(j))
1822
1923
20-func j (h) = ("%s%d__scoreBoard__" + toString(h))
24+func l (j) = ("%s%d__scoreBoard__" + toString(j))
2125
2226
23-func k (h) = ("%s%d__sumScores__" + toString(h))
27+func m (j) = ("%s%d__sumScores__" + toString(j))
2428
2529
26-func l (h) = ("%s%d__winners__" + toString(h))
30+func n (g) = ("%s%s__lastRegisteredTourByDuck__" + g)
2731
2832
29-func m (e) = ("%s%s__lastRegisteredTourByDuck__" + e)
33+func o (j,g) = makeString(["%s%d%s__isRegisteredByTourAndDuck", toString(j), g], "__")
3034
3135
32-func n (h,e) = makeString(["%s%d%s__isRegisteredByTourAndDuck", toString(h), e], "__")
36+func p (j,g) = makeString(["%s%d%s__lastAttemptByTourAndDuck", toString(j), g], "__")
3337
3438
35-func o (h,e) = makeString(["%s%d%s__lastAttemptByTourAndDuck", toString(h), e], "__")
39+func q (j,g) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(j), g], "__")
3640
3741
38-func p (h,e) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(h), e], "__")
42+let r = 0
3943
44+let s = 1
4045
41-let q = 0
46+let t = 2
4247
43-let r = 1
48+let u = 3
4449
45-func s (t,h) = {
46- let u = split(valueOrErrorMessage(getString(t, g(h)), (("Error reading tournament " + toString(h)) + " data")), "__")
47- let v = split(valueOrErrorMessage(getString(t, i(h)), (("Error reading tournament " + toString(h)) + " data")), "__")
48-[u, v]
50+let v = 5
51+
52+let w = 6
53+
54+let x = 1
55+
56+let y = 2
57+
58+let z = 3
59+
60+let A = 4
61+
62+let B = 5
63+
64+func C (D,j) = {
65+ let E = split(valueOrErrorMessage(getString(D, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
66+ let F = split_4C(valueOrErrorMessage(getString(D, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
67+[E, F]
4968 }
5069
5170
52-let w = 2
71+func G (D,H) = {
72+ let I = valueOrElse(getInteger(D, h), 0)
73+ let J = split(H, "_")
74+ let K = lastBlock.timestamp
75+ let L = C(D, I)
76+ let E = L[r]
77+ let F = L[s]
78+ if (if (if ((J[c] == "T"))
79+ then (parseIntValue(J[b]) == I)
80+ else false)
81+ then (F[x] == "INPROGRESS")
82+ else false)
83+ then (parseIntValue(E[w]) > K)
84+ else false
85+ }
5386
54-let x = 3
5587
56-let y = 5
88+let M = take(drop(this.bytes, 1), 1)
5789
58-let z = 6
59-
60-let A = 1
61-
62-let B = 2
63-
64-let C = 3
65-
66-let D = 4
67-
68-let E = 5
69-
70-let F = 0
71-
72-let G = 1
73-
74-let H = take(drop(this.bytes, 1), 1)
75-
76-let I = {
77- let J = H
78- if ((base58'2W' == J))
90+let N = {
91+ let O = M
92+ if ((base58'2W' == O))
7993 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
80- else if ((base58'2T' == J))
94+ else if ((base58'2T' == O))
8195 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
8296 else throw("Unknown chain")
8397 }
8498
85-let K = "__"
99+let P = "__"
86100
87-func L (M,N) = valueOrErrorMessage(getString(M, N), makeString(["mandatory ", toString(M), ".", N, " is not defined"], ""))
101+func Q (R,S) = valueOrErrorMessage(getString(R, S), makeString(["mandatory ", toString(R), ".", S, " is not defined"], ""))
88102
89103
90-let O = 1
104+let T = 1
91105
92-let P = 4
106+let U = 4
93107
94-func Q () = "%s__restConfig"
108+func V () = "%s__restConfig"
95109
96110
97-func R () = "%s__restAddr"
111+func W () = "%s__restAddr"
98112
99113
100-func S (T) = split_4C(L(T, Q()), K)
114+func X (Y) = split_4C(Q(Y, V()), P)
101115
102116
103-func U (V,W) = valueOrErrorMessage(addressFromString(V[W]), ("Rest cfg doesn't contain address at index " + toString(W)))
117+func Z (aa,ab) = valueOrErrorMessage(addressFromString(aa[ab]), ("Rest cfg doesn't contain address at index " + toString(ab)))
104118
105119
106-let X = addressFromStringValue(valueOrElse(getString(this, R()), I))
120+let ac = addressFromStringValue(valueOrElse(getString(this, W()), N))
107121
108-let V = S(X)
122+let aa = X(ac)
109123
110-let Y = U(V, O)
124+let ad = Z(aa, T)
111125
112-let Z = U(V, P)
126+let ae = Z(aa, U)
113127
114-let aa = "wlg_assetId"
128+let af = "wlg_assetId"
115129
116-let ab = valueOrErrorMessage(getBinary(Z, aa), "Not initialized yet")
130+let ag = valueOrErrorMessage(getBinary(ae, af), "Not initialized yet")
117131
118-func ac (ad) = {
119- let J = ad
120- if ($isInstanceOf(J, "String"))
132+func ah (ai) = {
133+ let O = ai
134+ if ($isInstanceOf(O, "String"))
121135 then {
122- let ae = J
123- ae
136+ let aj = O
137+ aj
124138 }
125139 else throw("fail to cast into String")
126140 }
127141
128142
129-func af (ad) = {
130- let J = ad
131- if ($isInstanceOf(J, "Int"))
143+func ak (ai) = {
144+ let O = ai
145+ if ($isInstanceOf(O, "Int"))
132146 then {
133- let ag = J
134- ag
147+ let al = O
148+ al
135149 }
136150 else throw("fail to cast into Int")
137151 }
138152
139153
140-func ah (ai,aj) = {
141- let ak = pow(10, 0, aj, 0, 0, DOWN)
142- let al = toString((ai % ak))
143- let am = drop(toString(ak), (1 + size(al)))
144- (((toString((ai / ak)) + ".") + am) + al)
154+func am (an,ao) = {
155+ let ap = pow(10, 0, ao, 0, 0, DOWN)
156+ let aq = toString((an % ap))
157+ let ar = drop(toString(ap), (1 + size(aq)))
158+ (((toString((an / ap)) + ".") + ar) + aq)
145159 }
146160
147161
148-func an (ai,ao) = {
149- let ap = toString(ai)
150- let am = drop(toString(pow(10, 0, (ao - size(ap)), 0, 0, DOWN)), 1)
151- (am + ap)
162+func as (an,at) = {
163+ let au = toString(an)
164+ let ar = drop(toString(pow(10, 0, (at - size(au)), 0, 0, DOWN)), 1)
165+ (ar + au)
152166 }
153167
154168
155-let aq = 432000000
169+let av = 432000000
156170
157-let ar = 3600000
171+let aw = 3600000
158172
159-let as = [toString(this), {
160- let J = H
161- if ((base58'2W' == J))
173+let ax = [toString(this), {
174+ let O = M
175+ if ((base58'2W' == O))
162176 then "3PEe2RELUHCFCBsmSCNcBJ8N3URLVQende7"
163- else if ((base58'2T' == J))
177+ else if ((base58'2T' == O))
164178 then "3MtBgJTaLxPB3C7UJD1UE8qjkHthfKvFQYY"
165179 else throw("Unknown chain")
166180 }]
167181
168-func at (au,av,aw,ax,ay,az,aA) = makeString(["%s%d%d%d%d%d%d", au, toString(av), toString(aw), toString(ax), toString(ay), toString(az), toString(aA)], K)
182+func ay (az,aA,aB,aC,aD,aE,aF) = makeString(["%s%d%d%d%d%d%d", az, toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF)], P)
169183
170184
171-func aB (aC,aD,aE,aF,aG) = makeString(["%s%s%d%d%d", aC, aD, toString(aE), toString(aF), toString(aG)], K)
185+func aG (aH,aI,aJ,aK,aL) = makeString_2C(["%s%s%d%d%d", aH, aI, toString(aJ), toString(aK), toString(aL)], P)
172186
173187
174-func aH () = af(invoke(Y, "saveLastTx", nil, nil))
188+func aM () = ak(invoke(ad, "saveLastTx", nil, nil))
175189
176190
177-func aI (aJ) = valueOrErrorMessage(getString(Y, b(toString(aJ))), "You don't have a duck staked")
191+func aN (aO) = valueOrErrorMessage(getString(ad, d(toString(aO))), "You don't have a duck staked")
178192
179193
180-@Callable(aK)
181-func createTournament (ay,az,av,aw,aA) = {
182- let aJ = toString(aK.caller)
183- if (!(containsElement(as, aJ)))
194+@Callable(aP)
195+func createTournament (aD,aE,aA,aB,aF) = {
196+ let aO = toString(aP.caller)
197+ if (!(containsElement(ax, aO)))
184198 then throw("Permission denied")
185199 else {
186- let aL = getInteger(f)
187- let h = if (isDefined(aL))
200+ let I = getInteger(h)
201+ let j = if (isDefined(I))
188202 then {
189- let aM = value(aL)
190- let v = valueOrErrorMessage(getString(i(aM)), (("Error reading tournament " + toString(aM)) + " data"))
191- let aC = split(v, K)[A]
192- if ((aC != "ARCHIVED"))
193- then throw(("Current tournement is not completed, status=" + aC))
194- else (aM + 1)
203+ let aQ = value(I)
204+ let F = valueOrErrorMessage(getString(k(aQ)), (("Error reading tournament " + toString(aQ)) + " data"))
205+ let aH = split(F, P)[x]
206+ if ((aH != "ARCHIVED"))
207+ then throw(("Current tournement is not completed, status=" + aH))
208+ else (aQ + 1)
195209 }
196210 else 1
197- let aN = lastBlock.timestamp
198- if ((aN > ay))
199- then throw(((("startTime=" + toString(ay)) + " < creationTime=") + toString(aN)))
200- else if ((ay > az))
201- then throw(((("endTime=" + toString(az)) + " < startTime=") + toString(ay)))
202- else if (((az - ay) > aq))
203- then throw(((("Tournament period exceeds max: " + toString((az - ay))) + " > ") + toString(aq)))
204- else if (if ((0 >= av))
211+ let K = lastBlock.timestamp
212+ if ((K > aD))
213+ then throw(((("startTime=" + toString(aD)) + " < creationTime=") + toString(K)))
214+ else if ((aD > aE))
215+ then throw(((("endTime=" + toString(aE)) + " < startTime=") + toString(aD)))
216+ else if (((aE - aD) > av))
217+ then throw(((("Tournament period exceeds max: " + toString((aE - aD))) + " > ") + toString(av)))
218+ else if (if ((0 >= aA))
205219 then true
206- else (0 >= aw))
207- then throw(((("Cost should be positive, but passed " + toString(av)) + " and ") + toString(aw)))
208- else if ((0 > aA))
220+ else (0 >= aB))
221+ then throw(((("Cost should be positive, but passed " + toString(aA)) + " and ") + toString(aB)))
222+ else if ((0 > aF))
209223 then throw("Number of Grand Prizes should be non-negative")
210- else $Tuple2([IntegerEntry(f, h), StringEntry(g(h), at(toBase58String(aK.transactionId), av, aw, aN, ay, az, aA)), StringEntry(i(h), aB("CREATED", " ", 0, 0, 0))], h)
224+ else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), ay(toBase58String(aP.transactionId), aA, aB, K, aD, aE, aF)), StringEntry(k(j), aG("CREATED", " ", 0, 0, 0))], j)
211225 }
212226 }
213227
214228
215229
216-@Callable(aK)
230+@Callable(aP)
217231 func register () = {
218- let aO = aH()
219- if ((size(aK.payments) != 1))
232+ let aR = aM()
233+ if ((size(aP.payments) != 1))
220234 then throw("exactly 1 payment must be attached")
221235 else {
222- let aP = aK.payments[0]
223- let aQ = aP.amount
224- let aR = valueOrErrorMessage(aP.assetId, "WLGOLD payments only!")
225- if ((aR != ab))
236+ let aS = aP.payments[0]
237+ let aT = aS.amount
238+ let aU = valueOrErrorMessage(aS.assetId, "WLGOLD payments only!")
239+ if ((aU != ag))
226240 then throw("WLGOLD payments only!")
227241 else {
228- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
229- let aN = lastBlock.timestamp
230- let aS = s(this, aL)
231- let u = aS[q]
232- let v = aS[r]
233- let aC = v[A]
234- if (!(if (if (if ((aC == "CREATED"))
235- then (aN > parseIntValue(u[y]))
242+ let I = valueOrErrorMessage(getInteger(h), "No active tournaments")
243+ let K = lastBlock.timestamp
244+ let L = C(this, I)
245+ let E = L[r]
246+ let F = L[s]
247+ let aH = F[x]
248+ if (!(if (if (if ((aH == "CREATED"))
249+ then (K > parseIntValue(E[v]))
236250 else false)
237- then ((parseIntValue(u[z]) - ar) > aN)
251+ then ((parseIntValue(E[w]) - aw) > K)
238252 else false)
239253 then true
240- else if ((aC == "INPROGRESS"))
241- then ((parseIntValue(u[z]) - ar) > aN)
254+ else if ((aH == "INPROGRESS"))
255+ then ((parseIntValue(E[w]) - aw) > K)
242256 else false))
243257 then throw("Cannot register now")
244258 else {
245- let aT = parseIntValue(u[w])
246- if ((aQ != aT))
247- then throw((("Need payment of " + ah(aT, 8)) + " WLGOLD"))
259+ let aV = parseIntValue(E[t])
260+ if ((aT != aV))
261+ then throw((("Need payment of " + am(aV, 8)) + " WLGOLD"))
248262 else {
249- let e = aI(aK.originCaller)
250- let aU = valueOrElse(getString(j(aL)), "")
251- if (if (valueOrElse(getBoolean(n(aL, e)), false))
263+ let g = aN(aP.originCaller)
264+ let aW = valueOrElse(getString(l(I)), "")
265+ if (if (valueOrElse(getBoolean(o(I, g)), false))
252266 then true
253- else contains(aU, e))
254- then throw(((("Your duck " + e) + " is already registered at tournament ") + toString(aL)))
267+ else contains(aW, g))
268+ then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(I)))
255269 else {
256- let aV = aB("INPROGRESS", v[B], parseIntValue(v[C]), (parseIntValue(v[D]) + 1), parseIntValue(v[E]))
257- $Tuple2([IntegerEntry(m(e), aL), BooleanEntry(n(aL, e), true), StringEntry(j(aL), if ((aU == ""))
258- then (e + ":000")
259- else (((aU + "_") + e) + ":000")), StringEntry(i(aL), aV)], aO)
270+ let aX = aG("INPROGRESS", F[y], parseIntValue(F[z]), (parseIntValue(F[A]) + 1), parseIntValue(F[B]))
271+ $Tuple2([IntegerEntry(n(g), I), BooleanEntry(o(I, g), true), StringEntry(l(I), if ((aW == ""))
272+ then (g + ":000")
273+ else (((aW + "_") + g) + ":000")), StringEntry(k(I), aX)], aR)
260274 }
261275 }
262276 }
266280
267281
268282
269-@Callable(aK)
283+@Callable(aP)
270284 func newAttempt () = {
271- let aO = aH()
272- let e = aI(aK.originCaller)
273- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
274- let aN = lastBlock.timestamp
275- let aS = s(this, aL)
276- let u = aS[q]
277- let v = aS[r]
278- let aC = v[A]
279- if (!(if ((aC == "INPROGRESS"))
280- then ((parseIntValue(u[z]) - ar) > aN)
285+ let aR = aM()
286+ let g = aN(aP.originCaller)
287+ let I = valueOrErrorMessage(getInteger(h), "No active tournaments")
288+ let K = lastBlock.timestamp
289+ let L = C(this, I)
290+ let E = L[r]
291+ let F = L[s]
292+ let aH = F[x]
293+ if (!(if ((aH == "INPROGRESS"))
294+ then ((parseIntValue(E[w]) - aw) > K)
281295 else false))
282296 then throw("Attempt is not possible")
283- else if (!(valueOrElse(getBoolean(n(aL, e)), false)))
284- then throw(((("Your duck " + e) + " is not registered at tournament ") + toString(aL)))
297+ else if (!(valueOrElse(getBoolean(o(I, g)), false)))
298+ then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(I)))
285299 else {
286- let aW = o(aL, e)
287- let aX = getInteger(aW)
288- let aY = if (!(isDefined(aX)))
300+ let aY = p(I, g)
301+ let aZ = getInteger(aY)
302+ let ba = if (!(isDefined(aZ)))
289303 then $Tuple2(0, 0)
290- else if ((size(aK.payments) != 1))
304+ else if ((size(aP.payments) != 1))
291305 then throw("exactly 1 payment must be attached")
292306 else {
293- let aP = aK.payments[0]
294- let aQ = aP.amount
295- let aR = valueOrErrorMessage(aP.assetId, "WLGOLD payments only!")
296- if ((aR != ab))
307+ let aS = aP.payments[0]
308+ let aT = aS.amount
309+ let aU = valueOrErrorMessage(aS.assetId, "WLGOLD payments only!")
310+ if ((aU != ag))
297311 then throw("WLGOLD payments only!")
298312 else {
299- let aZ = parseIntValue(u[x])
300- if ((aQ != aZ))
301- then throw((("Need payment of " + ah(aZ, 8)) + " WLGOLD"))
302- else $Tuple2((value(aX) + 1), 1)
313+ let bb = parseIntValue(E[u])
314+ if ((aT != bb))
315+ then throw((("Need payment of " + am(bb, 8)) + " WLGOLD"))
316+ else $Tuple2((value(aZ) + 1), 1)
303317 }
304318 }
305- let ba = aY._1
306- let bb = aY._2
307- let aV = aB("INPROGRESS", v[B], parseIntValue(v[C]), parseIntValue(v[D]), (parseIntValue(v[E]) + bb))
308- let bc = ac(invoke(Y, "initDuckTourAttempt", [e], nil))
309- $Tuple2([IntegerEntry(aW, ba), StringEntry(i(aL), aV)], [aO, ba, bc])
319+ let bc = ba._1
320+ let bd = ba._2
321+ let aX = aG("INPROGRESS", F[y], parseIntValue(F[z]), parseIntValue(F[A]), (parseIntValue(F[B]) + bd))
322+ let be = ah(invoke(ad, "initDuckTourAttempt", [g], nil))
323+ $Tuple2([IntegerEntry(aY, bc), StringEntry(k(I), aX)], [aR, bc, be])
310324 }
311325 }
312326
313327
314328
315-@Callable(aK)
316-func updateDynamicData (e,bd) = if ((aK.caller != Y))
329+@Callable(aP)
330+func saveDuckResult (g,bf) = if ((aP.caller != ad))
317331 then throw("Access denied")
318332 else {
319- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
320- let aS = s(this, aL)
321- let u = aS[q]
322- let v = aS[r]
323- let be = parseIntValue(v[C])
324- if (if (if ((be > bd))
325- then true
326- else (v[A] != "INPROGRESS"))
327- then true
328- else (lastBlock.timestamp > parseIntValue(u[z])))
329- then $Tuple2(nil, 0)
330- else {
331- let bf = l(aL)
332- let bg = getString(bf)
333- let bh = if (!(isDefined(bg)))
334- then nil
335- else split_4C(value(bg), "_")
336- let bi = if ((bd > be))
337- then [e]
338- else if (containsElement(bh, e))
339- then bh
340- else (bh :+ e)
341- let aV = aB("INPROGRESS", e, bd, parseIntValue(v[D]), parseIntValue(v[E]))
342- $Tuple2([StringEntry(i(aL), aV), StringEntry(bf, makeString_2C(bi, "_"))], 0)
343- }
344- }
345-
346-
347-
348-@Callable(aK)
349-func saveDuckResult (e,bj) = if ((aK.caller != Y))
350- then throw("Access denied")
351- else {
352- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
353- let aS = s(this, aL)
354- let u = aS[q]
355- let v = aS[r]
356- let bk = split(valueOrElse(getString(Y, d(e)), a), "_")
357- let bl = p(aL, e)
358- let bm = k(aL)
359- let bn = valueOrElse(getInteger(bm), 0)
360- if (if (if (if ((bk[G] == "T"))
361- then (parseIntValue(bk[F]) == aL)
362- else false)
363- then (v[A] == "INPROGRESS")
364- else false)
365- then (parseIntValue(u[z]) >= lastBlock.timestamp)
366- else false)
333+ let I = valueOrErrorMessage(getInteger(h), "No active tournaments")
334+ let L = C(this, I)
335+ let E = L[r]
336+ let F = L[s]
337+ let bg = valueOrElse(getString(ad, f(g)), a)
338+ let bh = q(I, g)
339+ let bi = m(I)
340+ let bj = valueOrElse(getInteger(bi), 0)
341+ if (G(this, bg))
367342 then {
368- let bo = valueOrElse(getInteger(bl), 0)
369- let bp = j(aL)
370- let aU = valueOrElse(getString(bp), "")
371- let bq = if ((bj > bo))
372- then if (!(contains(aU, e)))
373- then throw(("scoreBoard does not contain " + e))
343+ let bk = valueOrElse(getInteger(bh), 0)
344+ let bl = l(I)
345+ let aW = valueOrElse(getString(bl), "")
346+ let bm = if ((bf > bk))
347+ then if (!(contains(aW, g)))
348+ then throw(("scoreBoard does not contain " + g))
374349 else {
375- let br = split_51C(aU, e)
376- $Tuple2(((((br[0] + e) + ":") + an(bj, 3)) + drop(br[1], 4)), ((bn + bj) - bo))
350+ let bn = parseIntValue(F[z])
351+ let aI = F[y]
352+ let bo = if (if ((aI == ""))
353+ then true
354+ else (aI == " "))
355+ then nil
356+ else split_4C(aI, ",")
357+ let bp = if ((bf > bn))
358+ then [g]
359+ else if (if ((bn > bf))
360+ then true
361+ else containsElement(bo, g))
362+ then bo
363+ else (bo :+ g)
364+ let aX = aG("INPROGRESS", makeString_2C(bp, ","), max([bf, bn]), parseIntValue(F[A]), parseIntValue(F[B]))
365+ let bq = split_51C(aW, g)
366+ $Tuple3(((((bq[0] + g) + ":") + as(bf, 3)) + drop(bq[1], 4)), ((bj + bf) - bk), [StringEntry(k(I), aX)])
377367 }
378- else $Tuple2(aU, bn)
379- let bs = bq._1
380- let bt = bq._2
381- $Tuple2([IntegerEntry(bl, max([bo, bj])), IntegerEntry(bm, bt), StringEntry(bp, bs)], 0)
368+ else $Tuple3(aW, bj, nil)
369+ let br = bm._1
370+ let bs = bm._2
371+ let bt = bm._3
372+ $Tuple2(([IntegerEntry(bh, max([bk, bf])), IntegerEntry(bi, bs), StringEntry(bl, br)] ++ bt), 0)
382373 }
383374 else $Tuple2(nil, 0)
384375 }
385376
386377
387378
388-@Callable(aK)
389-func processTournament (h) = {
390- let aJ = toString(aK.caller)
391- if (!(containsElement(as, aJ)))
379+@Callable(aP)
380+func processTournament (j) = {
381+ let aO = toString(aP.caller)
382+ if (!(containsElement(ax, aO)))
392383 then throw("Permission denied")
393384 else {
394- let aN = lastBlock.timestamp
395- let aS = s(this, h)
396- let u = aS[q]
397- let v = aS[r]
398- let aC = v[A]
399- if ((aC == "ARCHIVED"))
400- then throw((("Tournament " + toString(h)) + " is already ARCHIVED"))
401- else if (if ((aC == "INPROGRESS"))
402- then (parseIntValue(u[z]) > aN)
385+ let K = lastBlock.timestamp
386+ let L = C(this, j)
387+ let E = L[r]
388+ let F = L[s]
389+ let aH = F[x]
390+ if ((aH == "ARCHIVED"))
391+ then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
392+ else if (if ((aH == "INPROGRESS"))
393+ then (parseIntValue(E[w]) > K)
403394 else false)
404- then throw((("Tournament " + toString(h)) + " is not over yet"))
395+ then throw((("Tournament " + toString(j)) + " is not over yet"))
405396 else {
406- let aV = aB("PROCESSING", v[B], parseIntValue(v[C]), parseIntValue(v[D]), parseIntValue(v[E]))
407- $Tuple2([StringEntry(i(h), aV)], 0)
397+ let aX = aG("PROCESSING", F[y], parseIntValue(F[z]), parseIntValue(F[A]), parseIntValue(F[B]))
398+ $Tuple2([StringEntry(k(j), aX)], 0)
408399 }
409400 }
410401 }
411402
412403
413404
414-@Callable(aK)
415-func finishTournament (h) = {
416- let aJ = toString(aK.caller)
417- if (!(containsElement(as, aJ)))
405+@Callable(aP)
406+func finishTournament (j) = {
407+ let aO = toString(aP.caller)
408+ if (!(containsElement(ax, aO)))
418409 then throw("Permission denied")
419410 else {
420- let aS = s(this, h)
421- let v = aS[r]
422- let aC = v[A]
423- if ((aC == "ARCHIVED"))
424- then throw((("Tournament " + toString(h)) + " is already ARCHIVED"))
411+ let L = C(this, j)
412+ let F = L[s]
413+ let aH = F[x]
414+ if ((aH == "ARCHIVED"))
415+ then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
425416 else {
426- let aV = aB("ARCHIVED", v[B], parseIntValue(v[C]), parseIntValue(v[D]), parseIntValue(v[E]))
427- $Tuple2([StringEntry(i(h), aV)], 0)
417+ let aX = aG("ARCHIVED", F[y], parseIntValue(F[z]), parseIntValue(F[A]), parseIntValue(F[B]))
418+ $Tuple2([StringEntry(k(j), aX)], 0)
428419 }
429420 }
430421 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "Africa_F_Africa"
55
6-func b (c) = ("stakedDuckByOwner_" + c)
6+let b = 0
7+
8+let c = 1
9+
10+func d (e) = ("stakedDuckByOwner_" + e)
711
812
9-func d (e) = ("duckLocation_" + e)
13+func f (g) = ("duckLocation_" + g)
1014
1115
12-let f = "%s__lastTourId"
16+let h = "%s__lastTourId"
1317
14-func g (h) = ("%s%d__tourStaticData__" + toString(h))
18+func i (j) = ("%s%d__tourStaticData__" + toString(j))
1519
1620
17-func i (h) = ("%s%d__tourDynamicData__" + toString(h))
21+func k (j) = ("%s%d__tourDynamicData__" + toString(j))
1822
1923
20-func j (h) = ("%s%d__scoreBoard__" + toString(h))
24+func l (j) = ("%s%d__scoreBoard__" + toString(j))
2125
2226
23-func k (h) = ("%s%d__sumScores__" + toString(h))
27+func m (j) = ("%s%d__sumScores__" + toString(j))
2428
2529
26-func l (h) = ("%s%d__winners__" + toString(h))
30+func n (g) = ("%s%s__lastRegisteredTourByDuck__" + g)
2731
2832
29-func m (e) = ("%s%s__lastRegisteredTourByDuck__" + e)
33+func o (j,g) = makeString(["%s%d%s__isRegisteredByTourAndDuck", toString(j), g], "__")
3034
3135
32-func n (h,e) = makeString(["%s%d%s__isRegisteredByTourAndDuck", toString(h), e], "__")
36+func p (j,g) = makeString(["%s%d%s__lastAttemptByTourAndDuck", toString(j), g], "__")
3337
3438
35-func o (h,e) = makeString(["%s%d%s__lastAttemptByTourAndDuck", toString(h), e], "__")
39+func q (j,g) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(j), g], "__")
3640
3741
38-func p (h,e) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(h), e], "__")
42+let r = 0
3943
44+let s = 1
4045
41-let q = 0
46+let t = 2
4247
43-let r = 1
48+let u = 3
4449
45-func s (t,h) = {
46- let u = split(valueOrErrorMessage(getString(t, g(h)), (("Error reading tournament " + toString(h)) + " data")), "__")
47- let v = split(valueOrErrorMessage(getString(t, i(h)), (("Error reading tournament " + toString(h)) + " data")), "__")
48-[u, v]
50+let v = 5
51+
52+let w = 6
53+
54+let x = 1
55+
56+let y = 2
57+
58+let z = 3
59+
60+let A = 4
61+
62+let B = 5
63+
64+func C (D,j) = {
65+ let E = split(valueOrErrorMessage(getString(D, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
66+ let F = split_4C(valueOrErrorMessage(getString(D, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
67+[E, F]
4968 }
5069
5170
52-let w = 2
71+func G (D,H) = {
72+ let I = valueOrElse(getInteger(D, h), 0)
73+ let J = split(H, "_")
74+ let K = lastBlock.timestamp
75+ let L = C(D, I)
76+ let E = L[r]
77+ let F = L[s]
78+ if (if (if ((J[c] == "T"))
79+ then (parseIntValue(J[b]) == I)
80+ else false)
81+ then (F[x] == "INPROGRESS")
82+ else false)
83+ then (parseIntValue(E[w]) > K)
84+ else false
85+ }
5386
54-let x = 3
5587
56-let y = 5
88+let M = take(drop(this.bytes, 1), 1)
5789
58-let z = 6
59-
60-let A = 1
61-
62-let B = 2
63-
64-let C = 3
65-
66-let D = 4
67-
68-let E = 5
69-
70-let F = 0
71-
72-let G = 1
73-
74-let H = take(drop(this.bytes, 1), 1)
75-
76-let I = {
77- let J = H
78- if ((base58'2W' == J))
90+let N = {
91+ let O = M
92+ if ((base58'2W' == O))
7993 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
80- else if ((base58'2T' == J))
94+ else if ((base58'2T' == O))
8195 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
8296 else throw("Unknown chain")
8397 }
8498
85-let K = "__"
99+let P = "__"
86100
87-func L (M,N) = valueOrErrorMessage(getString(M, N), makeString(["mandatory ", toString(M), ".", N, " is not defined"], ""))
101+func Q (R,S) = valueOrErrorMessage(getString(R, S), makeString(["mandatory ", toString(R), ".", S, " is not defined"], ""))
88102
89103
90-let O = 1
104+let T = 1
91105
92-let P = 4
106+let U = 4
93107
94-func Q () = "%s__restConfig"
108+func V () = "%s__restConfig"
95109
96110
97-func R () = "%s__restAddr"
111+func W () = "%s__restAddr"
98112
99113
100-func S (T) = split_4C(L(T, Q()), K)
114+func X (Y) = split_4C(Q(Y, V()), P)
101115
102116
103-func U (V,W) = valueOrErrorMessage(addressFromString(V[W]), ("Rest cfg doesn't contain address at index " + toString(W)))
117+func Z (aa,ab) = valueOrErrorMessage(addressFromString(aa[ab]), ("Rest cfg doesn't contain address at index " + toString(ab)))
104118
105119
106-let X = addressFromStringValue(valueOrElse(getString(this, R()), I))
120+let ac = addressFromStringValue(valueOrElse(getString(this, W()), N))
107121
108-let V = S(X)
122+let aa = X(ac)
109123
110-let Y = U(V, O)
124+let ad = Z(aa, T)
111125
112-let Z = U(V, P)
126+let ae = Z(aa, U)
113127
114-let aa = "wlg_assetId"
128+let af = "wlg_assetId"
115129
116-let ab = valueOrErrorMessage(getBinary(Z, aa), "Not initialized yet")
130+let ag = valueOrErrorMessage(getBinary(ae, af), "Not initialized yet")
117131
118-func ac (ad) = {
119- let J = ad
120- if ($isInstanceOf(J, "String"))
132+func ah (ai) = {
133+ let O = ai
134+ if ($isInstanceOf(O, "String"))
121135 then {
122- let ae = J
123- ae
136+ let aj = O
137+ aj
124138 }
125139 else throw("fail to cast into String")
126140 }
127141
128142
129-func af (ad) = {
130- let J = ad
131- if ($isInstanceOf(J, "Int"))
143+func ak (ai) = {
144+ let O = ai
145+ if ($isInstanceOf(O, "Int"))
132146 then {
133- let ag = J
134- ag
147+ let al = O
148+ al
135149 }
136150 else throw("fail to cast into Int")
137151 }
138152
139153
140-func ah (ai,aj) = {
141- let ak = pow(10, 0, aj, 0, 0, DOWN)
142- let al = toString((ai % ak))
143- let am = drop(toString(ak), (1 + size(al)))
144- (((toString((ai / ak)) + ".") + am) + al)
154+func am (an,ao) = {
155+ let ap = pow(10, 0, ao, 0, 0, DOWN)
156+ let aq = toString((an % ap))
157+ let ar = drop(toString(ap), (1 + size(aq)))
158+ (((toString((an / ap)) + ".") + ar) + aq)
145159 }
146160
147161
148-func an (ai,ao) = {
149- let ap = toString(ai)
150- let am = drop(toString(pow(10, 0, (ao - size(ap)), 0, 0, DOWN)), 1)
151- (am + ap)
162+func as (an,at) = {
163+ let au = toString(an)
164+ let ar = drop(toString(pow(10, 0, (at - size(au)), 0, 0, DOWN)), 1)
165+ (ar + au)
152166 }
153167
154168
155-let aq = 432000000
169+let av = 432000000
156170
157-let ar = 3600000
171+let aw = 3600000
158172
159-let as = [toString(this), {
160- let J = H
161- if ((base58'2W' == J))
173+let ax = [toString(this), {
174+ let O = M
175+ if ((base58'2W' == O))
162176 then "3PEe2RELUHCFCBsmSCNcBJ8N3URLVQende7"
163- else if ((base58'2T' == J))
177+ else if ((base58'2T' == O))
164178 then "3MtBgJTaLxPB3C7UJD1UE8qjkHthfKvFQYY"
165179 else throw("Unknown chain")
166180 }]
167181
168-func at (au,av,aw,ax,ay,az,aA) = makeString(["%s%d%d%d%d%d%d", au, toString(av), toString(aw), toString(ax), toString(ay), toString(az), toString(aA)], K)
182+func ay (az,aA,aB,aC,aD,aE,aF) = makeString(["%s%d%d%d%d%d%d", az, toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF)], P)
169183
170184
171-func aB (aC,aD,aE,aF,aG) = makeString(["%s%s%d%d%d", aC, aD, toString(aE), toString(aF), toString(aG)], K)
185+func aG (aH,aI,aJ,aK,aL) = makeString_2C(["%s%s%d%d%d", aH, aI, toString(aJ), toString(aK), toString(aL)], P)
172186
173187
174-func aH () = af(invoke(Y, "saveLastTx", nil, nil))
188+func aM () = ak(invoke(ad, "saveLastTx", nil, nil))
175189
176190
177-func aI (aJ) = valueOrErrorMessage(getString(Y, b(toString(aJ))), "You don't have a duck staked")
191+func aN (aO) = valueOrErrorMessage(getString(ad, d(toString(aO))), "You don't have a duck staked")
178192
179193
180-@Callable(aK)
181-func createTournament (ay,az,av,aw,aA) = {
182- let aJ = toString(aK.caller)
183- if (!(containsElement(as, aJ)))
194+@Callable(aP)
195+func createTournament (aD,aE,aA,aB,aF) = {
196+ let aO = toString(aP.caller)
197+ if (!(containsElement(ax, aO)))
184198 then throw("Permission denied")
185199 else {
186- let aL = getInteger(f)
187- let h = if (isDefined(aL))
200+ let I = getInteger(h)
201+ let j = if (isDefined(I))
188202 then {
189- let aM = value(aL)
190- let v = valueOrErrorMessage(getString(i(aM)), (("Error reading tournament " + toString(aM)) + " data"))
191- let aC = split(v, K)[A]
192- if ((aC != "ARCHIVED"))
193- then throw(("Current tournement is not completed, status=" + aC))
194- else (aM + 1)
203+ let aQ = value(I)
204+ let F = valueOrErrorMessage(getString(k(aQ)), (("Error reading tournament " + toString(aQ)) + " data"))
205+ let aH = split(F, P)[x]
206+ if ((aH != "ARCHIVED"))
207+ then throw(("Current tournement is not completed, status=" + aH))
208+ else (aQ + 1)
195209 }
196210 else 1
197- let aN = lastBlock.timestamp
198- if ((aN > ay))
199- then throw(((("startTime=" + toString(ay)) + " < creationTime=") + toString(aN)))
200- else if ((ay > az))
201- then throw(((("endTime=" + toString(az)) + " < startTime=") + toString(ay)))
202- else if (((az - ay) > aq))
203- then throw(((("Tournament period exceeds max: " + toString((az - ay))) + " > ") + toString(aq)))
204- else if (if ((0 >= av))
211+ let K = lastBlock.timestamp
212+ if ((K > aD))
213+ then throw(((("startTime=" + toString(aD)) + " < creationTime=") + toString(K)))
214+ else if ((aD > aE))
215+ then throw(((("endTime=" + toString(aE)) + " < startTime=") + toString(aD)))
216+ else if (((aE - aD) > av))
217+ then throw(((("Tournament period exceeds max: " + toString((aE - aD))) + " > ") + toString(av)))
218+ else if (if ((0 >= aA))
205219 then true
206- else (0 >= aw))
207- then throw(((("Cost should be positive, but passed " + toString(av)) + " and ") + toString(aw)))
208- else if ((0 > aA))
220+ else (0 >= aB))
221+ then throw(((("Cost should be positive, but passed " + toString(aA)) + " and ") + toString(aB)))
222+ else if ((0 > aF))
209223 then throw("Number of Grand Prizes should be non-negative")
210- else $Tuple2([IntegerEntry(f, h), StringEntry(g(h), at(toBase58String(aK.transactionId), av, aw, aN, ay, az, aA)), StringEntry(i(h), aB("CREATED", " ", 0, 0, 0))], h)
224+ else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), ay(toBase58String(aP.transactionId), aA, aB, K, aD, aE, aF)), StringEntry(k(j), aG("CREATED", " ", 0, 0, 0))], j)
211225 }
212226 }
213227
214228
215229
216-@Callable(aK)
230+@Callable(aP)
217231 func register () = {
218- let aO = aH()
219- if ((size(aK.payments) != 1))
232+ let aR = aM()
233+ if ((size(aP.payments) != 1))
220234 then throw("exactly 1 payment must be attached")
221235 else {
222- let aP = aK.payments[0]
223- let aQ = aP.amount
224- let aR = valueOrErrorMessage(aP.assetId, "WLGOLD payments only!")
225- if ((aR != ab))
236+ let aS = aP.payments[0]
237+ let aT = aS.amount
238+ let aU = valueOrErrorMessage(aS.assetId, "WLGOLD payments only!")
239+ if ((aU != ag))
226240 then throw("WLGOLD payments only!")
227241 else {
228- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
229- let aN = lastBlock.timestamp
230- let aS = s(this, aL)
231- let u = aS[q]
232- let v = aS[r]
233- let aC = v[A]
234- if (!(if (if (if ((aC == "CREATED"))
235- then (aN > parseIntValue(u[y]))
242+ let I = valueOrErrorMessage(getInteger(h), "No active tournaments")
243+ let K = lastBlock.timestamp
244+ let L = C(this, I)
245+ let E = L[r]
246+ let F = L[s]
247+ let aH = F[x]
248+ if (!(if (if (if ((aH == "CREATED"))
249+ then (K > parseIntValue(E[v]))
236250 else false)
237- then ((parseIntValue(u[z]) - ar) > aN)
251+ then ((parseIntValue(E[w]) - aw) > K)
238252 else false)
239253 then true
240- else if ((aC == "INPROGRESS"))
241- then ((parseIntValue(u[z]) - ar) > aN)
254+ else if ((aH == "INPROGRESS"))
255+ then ((parseIntValue(E[w]) - aw) > K)
242256 else false))
243257 then throw("Cannot register now")
244258 else {
245- let aT = parseIntValue(u[w])
246- if ((aQ != aT))
247- then throw((("Need payment of " + ah(aT, 8)) + " WLGOLD"))
259+ let aV = parseIntValue(E[t])
260+ if ((aT != aV))
261+ then throw((("Need payment of " + am(aV, 8)) + " WLGOLD"))
248262 else {
249- let e = aI(aK.originCaller)
250- let aU = valueOrElse(getString(j(aL)), "")
251- if (if (valueOrElse(getBoolean(n(aL, e)), false))
263+ let g = aN(aP.originCaller)
264+ let aW = valueOrElse(getString(l(I)), "")
265+ if (if (valueOrElse(getBoolean(o(I, g)), false))
252266 then true
253- else contains(aU, e))
254- then throw(((("Your duck " + e) + " is already registered at tournament ") + toString(aL)))
267+ else contains(aW, g))
268+ then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(I)))
255269 else {
256- let aV = aB("INPROGRESS", v[B], parseIntValue(v[C]), (parseIntValue(v[D]) + 1), parseIntValue(v[E]))
257- $Tuple2([IntegerEntry(m(e), aL), BooleanEntry(n(aL, e), true), StringEntry(j(aL), if ((aU == ""))
258- then (e + ":000")
259- else (((aU + "_") + e) + ":000")), StringEntry(i(aL), aV)], aO)
270+ let aX = aG("INPROGRESS", F[y], parseIntValue(F[z]), (parseIntValue(F[A]) + 1), parseIntValue(F[B]))
271+ $Tuple2([IntegerEntry(n(g), I), BooleanEntry(o(I, g), true), StringEntry(l(I), if ((aW == ""))
272+ then (g + ":000")
273+ else (((aW + "_") + g) + ":000")), StringEntry(k(I), aX)], aR)
260274 }
261275 }
262276 }
263277 }
264278 }
265279 }
266280
267281
268282
269-@Callable(aK)
283+@Callable(aP)
270284 func newAttempt () = {
271- let aO = aH()
272- let e = aI(aK.originCaller)
273- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
274- let aN = lastBlock.timestamp
275- let aS = s(this, aL)
276- let u = aS[q]
277- let v = aS[r]
278- let aC = v[A]
279- if (!(if ((aC == "INPROGRESS"))
280- then ((parseIntValue(u[z]) - ar) > aN)
285+ let aR = aM()
286+ let g = aN(aP.originCaller)
287+ let I = valueOrErrorMessage(getInteger(h), "No active tournaments")
288+ let K = lastBlock.timestamp
289+ let L = C(this, I)
290+ let E = L[r]
291+ let F = L[s]
292+ let aH = F[x]
293+ if (!(if ((aH == "INPROGRESS"))
294+ then ((parseIntValue(E[w]) - aw) > K)
281295 else false))
282296 then throw("Attempt is not possible")
283- else if (!(valueOrElse(getBoolean(n(aL, e)), false)))
284- then throw(((("Your duck " + e) + " is not registered at tournament ") + toString(aL)))
297+ else if (!(valueOrElse(getBoolean(o(I, g)), false)))
298+ then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(I)))
285299 else {
286- let aW = o(aL, e)
287- let aX = getInteger(aW)
288- let aY = if (!(isDefined(aX)))
300+ let aY = p(I, g)
301+ let aZ = getInteger(aY)
302+ let ba = if (!(isDefined(aZ)))
289303 then $Tuple2(0, 0)
290- else if ((size(aK.payments) != 1))
304+ else if ((size(aP.payments) != 1))
291305 then throw("exactly 1 payment must be attached")
292306 else {
293- let aP = aK.payments[0]
294- let aQ = aP.amount
295- let aR = valueOrErrorMessage(aP.assetId, "WLGOLD payments only!")
296- if ((aR != ab))
307+ let aS = aP.payments[0]
308+ let aT = aS.amount
309+ let aU = valueOrErrorMessage(aS.assetId, "WLGOLD payments only!")
310+ if ((aU != ag))
297311 then throw("WLGOLD payments only!")
298312 else {
299- let aZ = parseIntValue(u[x])
300- if ((aQ != aZ))
301- then throw((("Need payment of " + ah(aZ, 8)) + " WLGOLD"))
302- else $Tuple2((value(aX) + 1), 1)
313+ let bb = parseIntValue(E[u])
314+ if ((aT != bb))
315+ then throw((("Need payment of " + am(bb, 8)) + " WLGOLD"))
316+ else $Tuple2((value(aZ) + 1), 1)
303317 }
304318 }
305- let ba = aY._1
306- let bb = aY._2
307- let aV = aB("INPROGRESS", v[B], parseIntValue(v[C]), parseIntValue(v[D]), (parseIntValue(v[E]) + bb))
308- let bc = ac(invoke(Y, "initDuckTourAttempt", [e], nil))
309- $Tuple2([IntegerEntry(aW, ba), StringEntry(i(aL), aV)], [aO, ba, bc])
319+ let bc = ba._1
320+ let bd = ba._2
321+ let aX = aG("INPROGRESS", F[y], parseIntValue(F[z]), parseIntValue(F[A]), (parseIntValue(F[B]) + bd))
322+ let be = ah(invoke(ad, "initDuckTourAttempt", [g], nil))
323+ $Tuple2([IntegerEntry(aY, bc), StringEntry(k(I), aX)], [aR, bc, be])
310324 }
311325 }
312326
313327
314328
315-@Callable(aK)
316-func updateDynamicData (e,bd) = if ((aK.caller != Y))
329+@Callable(aP)
330+func saveDuckResult (g,bf) = if ((aP.caller != ad))
317331 then throw("Access denied")
318332 else {
319- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
320- let aS = s(this, aL)
321- let u = aS[q]
322- let v = aS[r]
323- let be = parseIntValue(v[C])
324- if (if (if ((be > bd))
325- then true
326- else (v[A] != "INPROGRESS"))
327- then true
328- else (lastBlock.timestamp > parseIntValue(u[z])))
329- then $Tuple2(nil, 0)
330- else {
331- let bf = l(aL)
332- let bg = getString(bf)
333- let bh = if (!(isDefined(bg)))
334- then nil
335- else split_4C(value(bg), "_")
336- let bi = if ((bd > be))
337- then [e]
338- else if (containsElement(bh, e))
339- then bh
340- else (bh :+ e)
341- let aV = aB("INPROGRESS", e, bd, parseIntValue(v[D]), parseIntValue(v[E]))
342- $Tuple2([StringEntry(i(aL), aV), StringEntry(bf, makeString_2C(bi, "_"))], 0)
343- }
344- }
345-
346-
347-
348-@Callable(aK)
349-func saveDuckResult (e,bj) = if ((aK.caller != Y))
350- then throw("Access denied")
351- else {
352- let aL = valueOrErrorMessage(getInteger(f), "No active tournaments")
353- let aS = s(this, aL)
354- let u = aS[q]
355- let v = aS[r]
356- let bk = split(valueOrElse(getString(Y, d(e)), a), "_")
357- let bl = p(aL, e)
358- let bm = k(aL)
359- let bn = valueOrElse(getInteger(bm), 0)
360- if (if (if (if ((bk[G] == "T"))
361- then (parseIntValue(bk[F]) == aL)
362- else false)
363- then (v[A] == "INPROGRESS")
364- else false)
365- then (parseIntValue(u[z]) >= lastBlock.timestamp)
366- else false)
333+ let I = valueOrErrorMessage(getInteger(h), "No active tournaments")
334+ let L = C(this, I)
335+ let E = L[r]
336+ let F = L[s]
337+ let bg = valueOrElse(getString(ad, f(g)), a)
338+ let bh = q(I, g)
339+ let bi = m(I)
340+ let bj = valueOrElse(getInteger(bi), 0)
341+ if (G(this, bg))
367342 then {
368- let bo = valueOrElse(getInteger(bl), 0)
369- let bp = j(aL)
370- let aU = valueOrElse(getString(bp), "")
371- let bq = if ((bj > bo))
372- then if (!(contains(aU, e)))
373- then throw(("scoreBoard does not contain " + e))
343+ let bk = valueOrElse(getInteger(bh), 0)
344+ let bl = l(I)
345+ let aW = valueOrElse(getString(bl), "")
346+ let bm = if ((bf > bk))
347+ then if (!(contains(aW, g)))
348+ then throw(("scoreBoard does not contain " + g))
374349 else {
375- let br = split_51C(aU, e)
376- $Tuple2(((((br[0] + e) + ":") + an(bj, 3)) + drop(br[1], 4)), ((bn + bj) - bo))
350+ let bn = parseIntValue(F[z])
351+ let aI = F[y]
352+ let bo = if (if ((aI == ""))
353+ then true
354+ else (aI == " "))
355+ then nil
356+ else split_4C(aI, ",")
357+ let bp = if ((bf > bn))
358+ then [g]
359+ else if (if ((bn > bf))
360+ then true
361+ else containsElement(bo, g))
362+ then bo
363+ else (bo :+ g)
364+ let aX = aG("INPROGRESS", makeString_2C(bp, ","), max([bf, bn]), parseIntValue(F[A]), parseIntValue(F[B]))
365+ let bq = split_51C(aW, g)
366+ $Tuple3(((((bq[0] + g) + ":") + as(bf, 3)) + drop(bq[1], 4)), ((bj + bf) - bk), [StringEntry(k(I), aX)])
377367 }
378- else $Tuple2(aU, bn)
379- let bs = bq._1
380- let bt = bq._2
381- $Tuple2([IntegerEntry(bl, max([bo, bj])), IntegerEntry(bm, bt), StringEntry(bp, bs)], 0)
368+ else $Tuple3(aW, bj, nil)
369+ let br = bm._1
370+ let bs = bm._2
371+ let bt = bm._3
372+ $Tuple2(([IntegerEntry(bh, max([bk, bf])), IntegerEntry(bi, bs), StringEntry(bl, br)] ++ bt), 0)
382373 }
383374 else $Tuple2(nil, 0)
384375 }
385376
386377
387378
388-@Callable(aK)
389-func processTournament (h) = {
390- let aJ = toString(aK.caller)
391- if (!(containsElement(as, aJ)))
379+@Callable(aP)
380+func processTournament (j) = {
381+ let aO = toString(aP.caller)
382+ if (!(containsElement(ax, aO)))
392383 then throw("Permission denied")
393384 else {
394- let aN = lastBlock.timestamp
395- let aS = s(this, h)
396- let u = aS[q]
397- let v = aS[r]
398- let aC = v[A]
399- if ((aC == "ARCHIVED"))
400- then throw((("Tournament " + toString(h)) + " is already ARCHIVED"))
401- else if (if ((aC == "INPROGRESS"))
402- then (parseIntValue(u[z]) > aN)
385+ let K = lastBlock.timestamp
386+ let L = C(this, j)
387+ let E = L[r]
388+ let F = L[s]
389+ let aH = F[x]
390+ if ((aH == "ARCHIVED"))
391+ then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
392+ else if (if ((aH == "INPROGRESS"))
393+ then (parseIntValue(E[w]) > K)
403394 else false)
404- then throw((("Tournament " + toString(h)) + " is not over yet"))
395+ then throw((("Tournament " + toString(j)) + " is not over yet"))
405396 else {
406- let aV = aB("PROCESSING", v[B], parseIntValue(v[C]), parseIntValue(v[D]), parseIntValue(v[E]))
407- $Tuple2([StringEntry(i(h), aV)], 0)
397+ let aX = aG("PROCESSING", F[y], parseIntValue(F[z]), parseIntValue(F[A]), parseIntValue(F[B]))
398+ $Tuple2([StringEntry(k(j), aX)], 0)
408399 }
409400 }
410401 }
411402
412403
413404
414-@Callable(aK)
415-func finishTournament (h) = {
416- let aJ = toString(aK.caller)
417- if (!(containsElement(as, aJ)))
405+@Callable(aP)
406+func finishTournament (j) = {
407+ let aO = toString(aP.caller)
408+ if (!(containsElement(ax, aO)))
418409 then throw("Permission denied")
419410 else {
420- let aS = s(this, h)
421- let v = aS[r]
422- let aC = v[A]
423- if ((aC == "ARCHIVED"))
424- then throw((("Tournament " + toString(h)) + " is already ARCHIVED"))
411+ let L = C(this, j)
412+ let F = L[s]
413+ let aH = F[x]
414+ if ((aH == "ARCHIVED"))
415+ then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
425416 else {
426- let aV = aB("ARCHIVED", v[B], parseIntValue(v[C]), parseIntValue(v[D]), parseIntValue(v[E]))
427- $Tuple2([StringEntry(i(h), aV)], 0)
417+ let aX = aG("ARCHIVED", F[y], parseIntValue(F[z]), parseIntValue(F[A]), parseIntValue(F[B]))
418+ $Tuple2([StringEntry(k(j), aX)], 0)
428419 }
429420 }
430421 }
431422
432423

github/deemru/w8io/169f3d6 
139.08 ms