tx · 8NJ8iKQHbbmDSqzgDbyDUgB7Bt8k5xz1SwVVbGEzdqi7

3MzYJ5tJs1rdz6Pzr7zvyfezTLPuVxFSRvT:  -0.01800000 Waves

2024.11.21 02:00 [3380401] smart account 3MzYJ5tJs1rdz6Pzr7zvyfezTLPuVxFSRvT > SELF 0.00000000 Waves

{ "type": 13, "id": "8NJ8iKQHbbmDSqzgDbyDUgB7Bt8k5xz1SwVVbGEzdqi7", "fee": 1800000, "feeAssetId": null, "timestamp": 1732143622222, "version": 2, "chainId": 84, "sender": "3MzYJ5tJs1rdz6Pzr7zvyfezTLPuVxFSRvT", "senderPublicKey": "FvkktUPDqYCGhXKDauJAZkkkVp1b5yKhS6NUf7vhP3tR", "proofs": [ "4C1LqarBitXvB72R8Q51NeD112ksePAKD8A19axJC41fWvmU92HSNzy8o2jfRvaTu8BFAevX91ikjWDoat9y4xjM" ], "script": "base64:BgI8CAISAwoBCBIGCgQICAgIEgMKAQgSABIAEgMKAQgSABIDCgEIEgMKAQgSBAoCCAgSAwoBCBIGCgQIAQQIOQENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEJaXNUZXN0RW52AAQHdGVzdGVudgQHJG1hdGNoMAkAmwgCBQR0aGlzAgdURVNURU5WAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXgFByRtYXRjaDAFAXgHBQd0ZXN0ZW52ARVrZXlEdWNrUGxheVVubG9ja1RpbWUBB2Fzc2V0SWQJAKwCAgkArAICAgVkdWNrXwkA2AQBBQdhc3NldElkAgtfdW5sb2NrVGltZQEXa2V5RHVja0ZpbmlzaFVubG9ja1RpbWUBB2Fzc2V0SWQJAKwCAgkArAICAgVkdWNrXwkA2AQBBQdhc3NldElkAhFmaW5pc2hfdW5sb2NrVGltZQEMa2V5RHVja093bmVyAQdhc3NldElkCQCsAgIJAKwCAgIFZHVja18JANgEAQUHYXNzZXRJZAIGX293bmVyAQ5rZXlTcG90c0JvdWdodAEKYWRkcmVzc1N0cgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgxfc3BvdHNCb3VnaHQBDGtleVNwb3RzQnVzeQEKYWRkcmVzc1N0cgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgpfc3BvdHNCdXN5ARNrZXlMb2NrZWREdWNrU3RhdHVzAgphZGRyZXNzU3RyCmFzc2V0SWRTdHIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICDF9sb2NrZWREdWNrXwUKYXNzZXRJZFN0cgIHX3N0YXR1cwEJa2V5RHVja1YyAgphZGRyZXNzU3RyCmFzc2V0SWRTdHIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICDF9sb2NrZWREdWNrXwUKYXNzZXRJZFN0cgIDX3YyAQ5nZXREdWNrRGV0YWlscwEHYXNzZXRJZAQJYXNzZXROYW1lCQEFdmFsdWUBCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUEDmFzc2V0TmFtZVBhcnRzCQC1CQIFCWFzc2V0TmFtZQIABAlpc0phY2twb3QJAAACCQCRAwIFDmFzc2V0TmFtZVBhcnRzCQBlAgkAkAMBBQ5hc3NldE5hbWVQYXJ0cwACAgFKBAphc3NldENvbG9yAwUJaXNKYWNrcG90AgFCCQCRAwIFDmFzc2V0TmFtZVBhcnRzCQBlAgkAkAMBBQ5hc3NldE5hbWVQYXJ0cwABCQCUCgIFCmFzc2V0Q29sb3IFCWlzSmFja3BvdAEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCgCAEFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEMdHJ5R2V0U3RyaW5nAQNrZXkJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIFBHRoaXMFA2tleQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAhFzdGF0aWNfZWdnQXNzZXRJZAEac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAhdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAIVc3RhdGljX2JyZWVkZXJBZGRyZXNzARhzdGF0aWNLZXlfZmFybWluZ0FkZHJlc3MAAhVzdGF0aWNfZmFybWluZ0FkZHJlc3MBGHN0YXRpY0tleV9yZW50aW5nQWRkcmVzcwACFXN0YXRpY19yZW50aW5nQWRkcmVzcwEXc3RhdGljS2V5X3Nob3J0R2FtZU5hbWUAAhRzdGF0aWNfc2hvcnRHYW1lTmFtZQEWc3RhdGljS2V5X2xvbmdHYW1lTmFtZQACE3N0YXRpY19sb25nR2FtZU5hbWUBEXN0YXRpY0tleV9uZnROYW1lAAIOc3RhdGljX25mdE5hbWUBF3N0YXRpY0tleV9iYWNrZW5kUHViS2V5AAIUc3RhdGljX2JhY2tlbmRQdWJLZXkBG3N0YXRpY0tleV9hY2Nlc3NJdGVtQXNzZXRJZAACGHN0YXRpY19hY2Nlc3NJdGVtQXNzZXRJZAEZc3RhdGljS2V5X2FjY2Vzc0l0ZW1QcmljZQACFnN0YXRpY19hY2Nlc3NJdGVtUHJpY2UBGXN0YXRpY0tleV9taW5Mb2NrRHVyYXRpb24AAhZzdGF0aWNfbWluTG9ja0R1cmF0aW9uARhzdGF0aWNLZXlfVW5sb2NrRHVyYXRpb24AAhVzdGF0aWNfVW5sb2NrRHVyYXRpb24BG3N0YXRpY0tleV9ib29zdGVyQnV5QXNzZXRJZAACGHN0YXRpY19ib29zdGVyQnV5QXNzZXRJZAESc3RhdGljS2V5X2V4dHJhRmVlAAIPc3RhdGljX2V4dHJhRmVlARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yARtzdGF0aWNLZXlfYm9vc3RlclByaWNlTGV2ZWwBBWxldmVsCQCsAgICGXN0YXRpY19ib29zdGVyUHJpY2VMZXZlbF8FBWxldmVsARVzdGF0aWNLZXlfYm9vc3Rlck5hbWUBBWxldmVsCQCsAgICE3N0YXRpY19ib29zdGVyTmFtZV8FBWxldmVsARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAhJzdGF0aWNfYnVybkFkZHJlc3MBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAELZ2V0R2FtZU5hbWUACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBF3N0YXRpY0tleV9zaG9ydEdhbWVOYW1lAAIkM0dHTjogVGhlcmUgaXMgbm8gZ2FtZSBuYW1lIGRlZmluZWQhAQ9nZXRMb25nR2FtZU5hbWUACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFnN0YXRpY0tleV9sb25nR2FtZU5hbWUAAiozR0xHTjogVGhlcmUgaXMgbm8gbG9uZyBnYW1lIG5hbWUgZGVmaW5lZCEBCmdldE5GVE5hbWUACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEXN0YXRpY0tleV9uZnROYW1lAAIjM0dOTjogVGhlcmUgaXMgbm8gbmZ0IG5hbWUgZGVmaW5lZCEBE2dldEluY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARpzdGF0aWNLZXlfaW5jdWJhdG9yQWRkcmVzcwABEWdldEJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAERZ2V0UmVudGluZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfcmVudGluZ0FkZHJlc3MAARFnZXRGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9mYXJtaW5nQWRkcmVzcwABDWdldEVnZ0Fzc2V0SWQACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAARBnZXRCYWNrZW5kUHViS2V5AAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9iYWNrZW5kUHViS2V5AAEQZ2V0RmVlQWdncmVnYXRvcgAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAEOZ2V0QnVybkFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAJANkEAQkBDHRyeUdldFN0cmluZwEJARtzdGF0aWNLZXlfYWNjZXNzSXRlbUFzc2V0SWQAARJnZXRBY2Nlc3NJdGVtUHJpY2UACQENdHJ5R2V0SW50ZWdlcgEJARlzdGF0aWNLZXlfYWNjZXNzSXRlbVByaWNlAAESZ2V0TWluTG9ja0R1cmF0aW9uAAkBDXRyeUdldEludGVnZXIBCQEZc3RhdGljS2V5X21pbkxvY2tEdXJhdGlvbgABEWdldFVubG9ja0R1cmF0aW9uAAkBDXRyeUdldEludGVnZXIBCQEYc3RhdGljS2V5X1VubG9ja0R1cmF0aW9uAAETZ2V0Qm9zdGVyQnV5QXNzZXRJZAAJANkEAQkBDHRyeUdldFN0cmluZwEJARtzdGF0aWNLZXlfYm9vc3RlckJ1eUFzc2V0SWQAARZnZXRCb3N0ZXJQcmljZUZvckxldmVsAQVsZXZlbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARtzdGF0aWNLZXlfYm9vc3RlclByaWNlTGV2ZWwBCQCkAwEFBWxldmVsAjkzR0JQRkw6IFRoZXJlIGlzIG5vIHByaWNlIHZhbHVlIGZvciB0aGlzIGxldmVsIG9mIGJvb3N0ZXIBFWdldEJvc3Rlck5hbWVGb3JMZXZlbAEFbGV2ZWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVc3RhdGljS2V5X2Jvb3N0ZXJOYW1lAQkApAMBBQVsZXZlbAIgM0dCTkZMOiBUaGVyZSBpcyBubyBzdWNoIGJvb3N0ZXIBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBB3BheW1lbnQDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECGVJDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIcUkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQlmZWVBbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQlmZWVBbW91bnQFBHVuaXQFA25pbAEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIhM0FTOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nARBsb2NrRHVja0ludGVybmFsAwphZGRyZXNzU3RyDXRha2VTcG90c0Zyb20DcG10BAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEC2Fzc2V0SXNzdWVyCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQ10YWtlU3BvdHNGcm9tBAlzcG90c0J1c3kJAQ10cnlHZXRJbnRlZ2VyAQUKa1Nwb3RzQnVzeQQMa1Nwb3RzQm91Z2h0CQEOa2V5U3BvdHNCb3VnaHQBBQ10YWtlU3BvdHNGcm9tBBVhZGRyZXNzU3BvdHNBdmFpbGFibGUJAGUCCQENdHJ5R2V0SW50ZWdlcgEFDGtTcG90c0JvdWdodAUJc3BvdHNCdXN5AwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQDAwkBAiE9AgULYXNzZXRJc3N1ZXIJARNnZXRJbmN1YmF0b3JBZGRyZXNzAAkBAiE9AgULYXNzZXRJc3N1ZXIJARFnZXRCcmVlZGVyQWRkcmVzcwAHCQACAQITaXZhbGlkIE5GVCBhdHRhY2hlZAMJAGcCAAAFFWFkZHJlc3NTcG90c0F2YWlsYWJsZQkAAgEJAKwCAgIgTm8gc3BvdHMgYXZhaWxhYmxlIGluIGh1bnQgZm9yOiAFDXRha2VTcG90c0Zyb20EEWtQZXJjaGVzQXZhaWxhYmxlCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBBQR0aGlzAhJfcGVyY2hlc0F2YWlsYWJsZV8FCmFzc2V0Q29sb3IEEHBlcmNoZXNBdmFpbGFibGUEByRtYXRjaDAJAJoIAgkBEWdldEZhcm1pbmdBZGRyZXNzAAURa1BlcmNoZXNBdmFpbGFibGUDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAADCQAAAgUQcGVyY2hlc0F2YWlsYWJsZQUQcGVyY2hlc0F2YWlsYWJsZQQKZWdnQXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprU3BvdHNCdXN5CQBkAgUJc3BvdHNCdXN5AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tPd25lcgEFB2Fzc2V0SWQFCmFkZHJlc3NTdHIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARNrZXlMb2NrZWREdWNrU3RhdHVzAgUKYWRkcmVzc1N0cgkA2AQBBQdhc3NldElkBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleUR1Y2tQbGF5VW5sb2NrVGltZQEFB2Fzc2V0SWQJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkBEmdldE1pbkxvY2tEdXJhdGlvbgAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQlrZXlEdWNrVjICBQphZGRyZXNzU3RyCQDYBAEFB2Fzc2V0SWQGBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmluaXRVbmxvY2tEdWNrAgphc3NldElkU3RyCmFkZHJlc3NTdHIEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQphZGRyZXNzU3RyBAprRHVja093bmVyCQEMa2V5RHVja093bmVyAQUHYXNzZXRJZAQScmVtYWluaW5nRm9yVW5sb2NrCQBlAgkBDXRyeUdldEludGVnZXIBCQEVa2V5RHVja1BsYXlVbmxvY2tUaW1lAQUHYXNzZXRJZAgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQEMdHJ5R2V0U3RyaW5nAQUKa0R1Y2tPd25lcgUKYWRkcmVzc1N0cgkAAgECHDNJVUxEOiBUaGUgZHVjayBpcyBub3QgeW91cnMDCQBmAgUScmVtYWluaW5nRm9yVW5sb2NrAAAJAAIBCQCsAgIJAKwCAgIhM0lVTDogWW91IG5lZWQgdG8gd2FpdCB0byB1bmxvY2sgCQCkAwEJAGkCBRJyZW1haW5pbmdGb3JVbmxvY2sA6AcCCCBzZWNvbmRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5RHVja0ZpbmlzaFVubG9ja1RpbWUBBQdhc3NldElkCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAJARFnZXRVbmxvY2tEdXJhdGlvbgAFA25pbAELdW5zdGFrZUR1Y2sDCmFzc2V0SWRTdHIKYWRkcmVzc1N0cg9hZGRTcG90c1Rvd2FyZHMEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQ9hZGRTcG90c1Rvd2FyZHMECmtEdWNrT3duZXIJAQxrZXlEdWNrT3duZXIBBQdhc3NldElkBBJyZW1haW5pbmdGb3JVbmxvY2sJAGUCCQENdHJ5R2V0SW50ZWdlcgEJARdrZXlEdWNrRmluaXNoVW5sb2NrVGltZQEFB2Fzc2V0SWQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkBAiE9AgkBDHRyeUdldFN0cmluZwEFCmtEdWNrT3duZXIFCmFkZHJlc3NTdHIJAAIBAhozVUQ6IFRoZSBkdWNrIGlzIG5vdCB5b3VycwMJAGYCBRJyZW1haW5pbmdGb3JVbmxvY2sAAAkAAgEJAKwCAgkArAICAiAzVUQ6IFlvdSBuZWVkIHRvIHdhaXQgdG8gdW5sb2NrIAkApAMBCQBpAgUScmVtYWluaW5nRm9yVW5sb2NrAOgHAgggc2Vjb25kcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUKYWRkcmVzc1N0cgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARNrZXlMb2NrZWREdWNrU3RhdHVzAgUKYWRkcmVzc1N0cgUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBBQprRHVja093bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprU3BvdHNCdXN5CQBlAgkBDXRyeUdldEludGVnZXIBBQprU3BvdHNCdXN5AAEFA25pbAwBaQEVYnV5QWNjZXNzSXRlbUludGVybmFsAQphZGRyZXNzU3RyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIYM0JBSUk6IGludGVybmFsIHVzZSBvbmx5BA9pc3N1ZUFjY2Vzc0l0ZW0JAMIIBQkArAICAgdBQ0NFU1MtCQELZ2V0R2FtZU5hbWUACQCsAgIJAKwCAgkArAICAglbQWNjZXNzXSAJAQ9nZXRMb25nR2FtZU5hbWUAAhAgYWNjZXNzIE5GVCBmb3IgCQEKZ2V0TkZUTmFtZQAAAQAABwQRYWNjZXNzUmFjZUFzc2V0SWQJANgEAQkAuAgBBQ9pc3N1ZUFjY2Vzc0l0ZW0EDGtTcG90c0JvdWdodAkBDmtleVNwb3RzQm91Z2h0AQUKYWRkcmVzc1N0cgkAlAoCCQDMCAIFD2lzc3VlQWNjZXNzSXRlbQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgILYWNjZXNzSXRlbV8FEWFjY2Vzc1JhY2VBc3NldElkAgZfb3duZXIFCmFkZHJlc3NTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgdfb3duaW5nBRFhY2Nlc3NSYWNlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1Nwb3RzQm91Z2h0CQBkAgkBDXRyeUdldEludGVnZXIBBQxrU3BvdHNCb3VnaHQAAQUDbmlsBRFhY2Nlc3NSYWNlQXNzZXRJZAFpAQ9jb25maWd1cmVPcmFjbGUEBm9yYWNsZQlzaG9ydG5hbWUIbG9uZ25hbWUHbmZ0TmFtZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDzNDTzogYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19zaG9ydEdhbWVOYW1lBQlzaG9ydG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgITc3RhdGljX2xvbmdHYW1lTmFtZQUIbG9uZ25hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgIOc3RhdGljX25mdE5hbWUFB25mdE5hbWUFA25pbAFpAQ1kZWxldGVTZXR0aW5nAQNrZXkDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiwzRFM6IE9ubHkgYWRtaW5pc3RyYXRvciBjYW4gY2FsbCB0aGlzIG1ldGhvZAkAzAgCCQELRGVsZXRlRW50cnkBBQNrZXkFA25pbAFpARhidXlBY2Nlc3NJdGVtQW5kTG9ja0R1Y2sABAplZ2dQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEC2R1Y2tQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEECmFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAkAAgECGjNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAiE9AggFCmVnZ1BheW1lbnQGYW1vdW50CQESZ2V0QWNjZXNzSXRlbVByaWNlAAkAAgECJTNCQUk6IFdyb25nIGFtb3VudCBvZiBhc3NldHMgYXR0YWNoZWQEDmFjY2Vzc0l0ZW1EYXRhCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAkAzAgCBQphZGRyZXNzU3RyBQNuaWwFA25pbAMJAAACBQ5hY2Nlc3NJdGVtRGF0YQUOYWNjZXNzSXRlbURhdGEECGJ1cm5DYWxsCQD8BwQJAQ5nZXRCdXJuQWRkcmVzcwACFGJ1cm5BdHRhY2hlZFBheW1lbnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRFZ2dBc3NldElkAAgFCmVnZ1BheW1lbnQGYW1vdW50BQNuaWwDCQAAAgUIYnVybkNhbGwFCGJ1cm5DYWxsBAx2YWxpZFBheW1lbnQDCQAAAggFAWkGY2FsbGVyCQERZ2V0UmVudGluZ0FkZHJlc3MABQNuaWwJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwACAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50BAhsb2NrRGF0YQkAzggCCQEQbG9ja0R1Y2tJbnRlcm5hbAMFCmFkZHJlc3NTdHIFCmFkZHJlc3NTdHIFC2R1Y2tQYXltZW50BQx2YWxpZFBheW1lbnQJAJQKAgUIbG9ja0RhdGEFDmFjY2Vzc0l0ZW1EYXRhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDWJ1eUFjY2Vzc0l0ZW0ABAphZGRyZXNzU3RyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQKZWdnUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAkAAgEJAKwCAgIbM0JBSTogV3JvbmcgYXNzZXQgYXR0YWNoZWQgCQDYBAEJARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAADCQECIT0CCAUKZWdnUGF5bWVudAZhbW91bnQJARJnZXRBY2Nlc3NJdGVtUHJpY2UACQACAQIlM0JBSTogV3JvbmcgYW1vdW50IG9mIGFzc2V0cyBhdHRhY2hlZAQOYWNjZXNzSXRlbURhdGEJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIVYnV5QWNjZXNzSXRlbUludGVybmFsCQDMCAIFCmFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAAIFDmFjY2Vzc0l0ZW1EYXRhBQ5hY2Nlc3NJdGVtRGF0YQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQACAUKZWdnUGF5bWVudAZhbW91bnQFA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwEDHZhbGlkUGF5bWVudAMJAAACCAUBaQZjYWxsZXIJARFnZXRSZW50aW5nQWRkcmVzcwAFA25pbAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAEDCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQJAJQKAgUMdmFsaWRQYXltZW50BQ5hY2Nlc3NJdGVtRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJidXlBY2Nlc3NJdGVtT3RoZXIBDGFkZHJlc3NPdGhlcgQKZWdnUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAkAAgECGjNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAiE9AggFCmVnZ1BheW1lbnQGYW1vdW50CQESZ2V0QWNjZXNzSXRlbVByaWNlAAkAAgECJTNCQUk6IFdyb25nIGFtb3VudCBvZiBhc3NldHMgYXR0YWNoZWQEDmFjY2Vzc0l0ZW1EYXRhCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAkAzAgCBQxhZGRyZXNzT3RoZXIFA25pbAUDbmlsAwkAAAIFDmFjY2Vzc0l0ZW1EYXRhBQ5hY2Nlc3NJdGVtRGF0YQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQACAUKZWdnUGF5bWVudAZhbW91bnQFA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwJAJQKAgUDbmlsBQ5hY2Nlc3NJdGVtRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhsb2NrRHVjawAECmFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwABAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50CQDOCAIJARBsb2NrRHVja0ludGVybmFsAwUKYWRkcmVzc1N0cgUKYWRkcmVzc1N0cgULZHVja1BheW1lbnQFDHZhbGlkUGF5bWVudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQppbml0VW5sb2NrAQphc3NldElkU3RyBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAAMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAkAzggCCQEOaW5pdFVubG9ja0R1Y2sCBQphc3NldElkU3RyBQphZGRyZXNzU3RyBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPbG9ja0R1Y2tSZW50aW5nARRhZGRyZXNzVGFrZVNwb3RzRnJvbQMJAQIhPQIIBQFpBmNhbGxlcgkBEWdldFJlbnRpbmdBZGRyZXNzAAkAAgECEzNVRE86IFJlbnRpbmcgb25seSEECmFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAACQEQbG9ja0R1Y2tJbnRlcm5hbAMFCmFkZHJlc3NTdHIFFGFkZHJlc3NUYWtlU3BvdHNGcm9tBQtkdWNrUGF5bWVudAFpARF1bmxvY2tEdWNrUmVudGluZwIKYXNzZXRJZFN0cg9hZGRTcG90c1Rvd2FyZHMDCQECIT0CCAUBaQZjYWxsZXIJARFnZXRSZW50aW5nQWRkcmVzcwAJAAIBAhMzVURPOiBSZW50aW5nIG9ubHkhBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgkBC3Vuc3Rha2VEdWNrAwUKYXNzZXRJZFN0cgUKYWRkcmVzc1N0cgUPYWRkU3BvdHNUb3dhcmRzAWkBD3VubG9ja0R1Y2tPdGhlcgEKYXNzZXRJZFN0cgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECETNVRE86IEFkbWluIG9ubHkhBAhvd25lcktleQkBDHRyeUdldFN0cmluZwEJAQxrZXlEdWNrT3duZXIBCQDZBAEFCmFzc2V0SWRTdHIJAQt1bnN0YWtlRHVjawMFCmFzc2V0SWRTdHIFCG93bmVyS2V5BQhvd25lcktleQFpAQp1bmxvY2tEdWNrBAphc3NldElkU3RyAnRzB2FsbG93ZWQJc2lnbmF0dXJlAwkBAiE9AgUHYWxsb3dlZAYJAAIBAiQzVUQ6IE5vdCBhbGxvd2VkIHRvIHVubG9jayB0aGUgZHVjayEECE1TSU5IT1VSAIDd2wEECWN1cnJlbnRUcwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQBmAgUJY3VycmVudFRzCQBkAgUCdHMFCE1TSU5IT1VSCQACAQIYM1VEOiBPdXRkYXRlZCBzaWduYXR1cmUhBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQEdGV4dAkAuQkCCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgkApAMBBQJ0cwkAzAgCCQClAwEFB2FsbG93ZWQFA25pbAIBOwMJAQEhAQkAxBMDCQCbAwEFBHRleHQJANkEAQUJc2lnbmF0dXJlCQEQZ2V0QmFja2VuZFB1YktleQAJAAIBCQCsAgIJAKwCAgkArAICAiMzVUQ6IEludmFsaWQgcHJvb2YgZnJvbSBiYWNrZW5kIGtleQkA2AQBCQEQZ2V0QmFja2VuZFB1YktleQACASAFBHRleHQEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAADCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQJAM4IAgkBC3Vuc3Rha2VEdWNrAwUKYXNzZXRJZFN0cgUKYWRkcmVzc1N0cgUKYWRkcmVzc1N0cgUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAMJAQlpc1Rlc3RFbnYACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAlmaXJzdFVzZXIBIFEc5P1m/xJp0vFaFJ87suL0O3/By2gnojRebDjXV91tBApzZWNvbmRVc2VyASBccg5LrvEhT2bmGUX6aqKx7bE2KVlfGczMsOFNQYhqfQQJdGhpcmRVc2VyASCgr5HlLXlDYWEyEq2OufoYWVGdLVNJNsPQo/eoYBk7TgQPZmlyc3RVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJZmlyc3RVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCWZpcnN0VXNlcgABAAAEEHNlY29uZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQpzZWNvbmRVc2VyAAEAAAQPdGhpcmRVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJdGhpcmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCXRoaXJkVXNlcgABAAAED3NpZ25hdHVyZXNDb3VudAkAZAIJAGQCBQ9maXJzdFVzZXJTaWduZWQFEHNlY29uZFVzZXJTaWduZWQFD3RoaXJkVXNlclNpZ25lZAQHJG1hdGNoMAUCdHgJAGcCBQ9zaWduYXR1cmVzQ291bnQAAiS2xRI=", "height": 3380401, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Ae1tuMekqp2Bkcwyxm1gMK5jhNZ8PRuazWjp21kbD9Wv Next: E2n6qHrmu3kzuQ7FatbZ2UAsLH1Mr5tQ3wohjSGByAQN Diff:
OldNewDifferences
1212 }
1313
1414
15-func e (f) = (("duck_" + toBase58String(f)) + "_unlockTime")
16-
17-
18-func g (f) = (("duck_" + toBase58String(f)) + "finish_unlockTime")
19-
20-
21-func h (f) = (("duck_" + toBase58String(f)) + "_owner")
22-
23-
24-func i (j) = (("address_" + j) + "_spotsBought")
25-
26-
27-func k (j) = (("address_" + j) + "_spotsBusy")
28-
29-
30-func l (j,m) = (((("address_" + j) + "_lockedDuck_") + m) + "_status")
31-
32-
33-func n (j,m) = (((("address_" + j) + "_lockedDuck_") + m) + "_v2")
34-
35-
36-func o (f) = {
37- let p = value(value(assetInfo(f)).name)
38- let q = split(p, "")
39- let r = (q[(size(q) - 2)] == "J")
40- let s = if (r)
41- then "B"
42- else q[(size(q) - 1)]
43- $Tuple2(s, r)
15+func e () = {
16+ let f = {
17+ let c = getBoolean(this, "TESTENV")
18+ if ($isInstanceOf(c, "Boolean"))
19+ then {
20+ let g = c
21+ g
22+ }
23+ else false
24+ }
25+ f
4426 }
4527
4628
47-func t (u,b) = {
48- let c = getString(u, b)
29+func h (i) = (("duck_" + toBase58String(i)) + "_unlockTime")
30+
31+
32+func j (i) = (("duck_" + toBase58String(i)) + "finish_unlockTime")
33+
34+
35+func k (i) = (("duck_" + toBase58String(i)) + "_owner")
36+
37+
38+func l (m) = (("address_" + m) + "_spotsBought")
39+
40+
41+func n (m) = (("address_" + m) + "_spotsBusy")
42+
43+
44+func o (m,p) = (((("address_" + m) + "_lockedDuck_") + p) + "_status")
45+
46+
47+func q (m,p) = (((("address_" + m) + "_lockedDuck_") + p) + "_v2")
48+
49+
50+func r (i) = {
51+ let s = value(value(assetInfo(i)).name)
52+ let t = split(s, "")
53+ let u = (t[(size(t) - 2)] == "J")
54+ let v = if (u)
55+ then "B"
56+ else t[(size(t) - 1)]
57+ $Tuple2(v, u)
58+ }
59+
60+
61+func w (x,b) = {
62+ let c = getString(x, b)
4963 if ($isInstanceOf(c, "String"))
5064 then {
51- let v = c
52- v
65+ let y = c
66+ y
5367 }
5468 else ""
5569 }
5670
5771
58-func w (b) = {
72+func z (b) = {
5973 let c = getBoolean(b)
6074 if ($isInstanceOf(c, "Boolean"))
6175 then {
6680 }
6781
6882
69-func x (b) = t(this, b)
83+func A (b) = w(this, b)
7084
7185
72-func y () = "static_oracleAddress"
86+func B () = "static_oracleAddress"
7387
7488
75-func z () = "static_eggAssetId"
89+func C () = "static_eggAssetId"
7690
7791
78-func A () = "static_incubatorAddress"
92+func D () = "static_incubatorAddress"
7993
8094
81-func B () = "static_breederAddress"
95+func E () = "static_breederAddress"
8296
8397
84-func C () = "static_farmingAddress"
98+func F () = "static_farmingAddress"
8599
86100
87-func D () = "static_rentingAddress"
101+func G () = "static_rentingAddress"
88102
89103
90-func E () = "static_shortGameName"
104+func H () = "static_shortGameName"
91105
92106
93-func F () = "static_longGameName"
107+func I () = "static_longGameName"
94108
95109
96-func G () = "static_nftName"
110+func J () = "static_nftName"
97111
98112
99-func H () = "static_backendPubKey"
113+func K () = "static_backendPubKey"
100114
101115
102-func I () = "static_accessItemAssetId"
116+func L () = "static_accessItemAssetId"
103117
104118
105-func J () = "static_accessItemPrice"
119+func M () = "static_accessItemPrice"
106120
107121
108-func K () = "static_minLockDuration"
122+func N () = "static_minLockDuration"
109123
110124
111-func L () = "static_UnlockDuration"
125+func O () = "static_UnlockDuration"
112126
113127
114-func M () = "static_boosterBuyAssetId"
128+func P () = "static_boosterBuyAssetId"
115129
116130
117-func N () = "static_extraFee"
131+func Q () = "static_extraFee"
118132
119133
120-func O () = "static_feeAggregator"
134+func R () = "static_feeAggregator"
121135
122136
123-func P (Q) = ("static_boosterPriceLevel_" + Q)
137+func S (T) = ("static_boosterPriceLevel_" + T)
124138
125139
126-func R (Q) = ("static_boosterName_" + Q)
140+func U (T) = ("static_boosterName_" + T)
127141
128142
129-func S () = "static_burnAddress"
143+func V () = "static_burnAddress"
130144
131145
132-func T () = Address(fromBase58String(x(y())))
146+func W () = Address(fromBase58String(A(B())))
133147
134148
135-func U () = valueOrErrorMessage(getString(E()), "3GGN: There is no game name defined!")
149+func X () = valueOrErrorMessage(getString(H()), "3GGN: There is no game name defined!")
136150
137151
138-func V () = valueOrErrorMessage(getString(F()), "3GLGN: There is no long game name defined!")
152+func Y () = valueOrErrorMessage(getString(I()), "3GLGN: There is no long game name defined!")
139153
140154
141-func W () = valueOrErrorMessage(getString(G()), "3GNN: There is no nft name defined!")
155+func Z () = valueOrErrorMessage(getString(J()), "3GNN: There is no nft name defined!")
142156
143157
144-func X () = Address(fromBase58String(t(T(), A())))
158+func aa () = Address(fromBase58String(w(W(), D())))
145159
146160
147-func Y () = Address(fromBase58String(t(T(), B())))
161+func ab () = Address(fromBase58String(w(W(), E())))
148162
149163
150-func Z () = Address(fromBase58String(t(T(), D())))
164+func ac () = Address(fromBase58String(w(W(), G())))
151165
152166
153-func aa () = Address(fromBase58String(t(T(), C())))
167+func ad () = Address(fromBase58String(w(W(), F())))
154168
155169
156-func ab () = fromBase58String(t(T(), z()))
170+func ae () = fromBase58String(w(W(), C()))
157171
158172
159-func ac () = fromBase58String(t(T(), H()))
173+func af () = fromBase58String(w(W(), K()))
160174
161175
162-func ad () = Address(fromBase58String(t(T(), O())))
176+func ag () = Address(fromBase58String(w(W(), R())))
163177
164178
165-func ae () = Address(fromBase58String(t(T(), S())))
179+func ah () = Address(fromBase58String(w(W(), V())))
166180
167181
168-func af () = fromBase58String(x(I()))
182+func ai () = fromBase58String(A(L()))
169183
170184
171-func ag () = a(J())
185+func aj () = a(M())
172186
173187
174-func ah () = a(K())
188+func ak () = a(N())
175189
176190
177-func ai () = a(L())
191+func al () = a(O())
178192
179193
180-func aj () = fromBase58String(x(M()))
194+func am () = fromBase58String(A(P()))
181195
182196
183-func ak (Q) = valueOrErrorMessage(getInteger(P(toString(Q))), "3GBPFL: There is no price value for this level of booster")
197+func an (T) = valueOrErrorMessage(getInteger(S(toString(T))), "3GBPFL: There is no price value for this level of booster")
184198
185199
186-func al (Q) = valueOrErrorMessage(getString(R(toString(Q))), "3GBNFL: There is no such booster")
200+func ao (T) = valueOrErrorMessage(getString(U(toString(T))), "3GBNFL: There is no such booster")
187201
188202
189-func am (an) = if (isDefined(an.assetId))
203+func ap (aq) = if (isDefined(aq.assetId))
190204 then throw("RCAP: Please attach waves")
191205 else {
192- let ao = getIntegerValue(T(), N())
193- if ((an.amount != ao))
194- then throw((("RCAP: Please attach exactly " + toString(ao)) + " amount of wavelets"))
195- else [ScriptTransfer(ad(), ao, unit)]
206+ let ar = getIntegerValue(W(), Q())
207+ if ((aq.amount != ar))
208+ then throw((("RCAP: Please attach exactly " + toString(ar)) + " amount of wavelets"))
209+ else [ScriptTransfer(ag(), ar, unit)]
196210 }
197211
198212
199-func ap (aq) = {
200- let c = aq
213+func as (at) = {
214+ let c = at
201215 if ($isInstanceOf(c, "String"))
202216 then {
203- let ar = c
204- ar
217+ let au = c
218+ au
205219 }
206220 else throw("3AS: wrong type, expected: String")
207221 }
208222
209223
210-func as (j,at,au) = {
211- let f = value(au.assetId)
212- let av = value(assetInfo(f)).issuer
213- let aw = o(f)
214- let s = aw._1
215- let r = aw._2
216- let ax = k(at)
217- let ay = a(ax)
218- let az = i(at)
219- let aA = (a(az) - ay)
220- if ((au.amount != 1))
224+func av (m,aw,ax) = {
225+ let i = value(ax.assetId)
226+ let ay = value(assetInfo(i)).issuer
227+ let az = r(i)
228+ let v = az._1
229+ let u = az._2
230+ let aA = n(aw)
231+ let aB = a(aA)
232+ let aC = l(aw)
233+ let aD = (a(aC) - aB)
234+ if ((ax.amount != 1))
221235 then throw("NFT is not attached")
222- else if (if ((av != X()))
223- then (av != Y())
236+ else if (if ((ay != aa()))
237+ then (ay != ab())
224238 else false)
225239 then throw("ivalid NFT attached")
226- else if ((0 >= aA))
227- then throw(("No spots available in hunt for: " + at))
240+ else if ((0 >= aD))
241+ then throw(("No spots available in hunt for: " + aw))
228242 else {
229- let aB = ((("address_" + toString(this)) + "_perchesAvailable_") + s)
230- let aC = {
231- let c = getInteger(aa(), aB)
243+ let aE = ((("address_" + toString(this)) + "_perchesAvailable_") + v)
244+ let aF = {
245+ let c = getInteger(ad(), aE)
232246 if ($isInstanceOf(c, "Int"))
233247 then {
234248 let d = c
236250 }
237251 else 0
238252 }
239- if ((aC == aC))
253+ if ((aF == aF))
240254 then {
241- let aD = ab()
242-[IntegerEntry(ax, (ay + 1)), StringEntry(h(f), j), BooleanEntry(l(j, toBase58String(f)), true), IntegerEntry(e(f), (lastBlock.timestamp + ah())), BooleanEntry(n(j, toBase58String(f)), true)]
255+ let aG = ae()
256+[IntegerEntry(aA, (aB + 1)), StringEntry(k(i), m), BooleanEntry(o(m, toBase58String(i)), true), IntegerEntry(h(i), (lastBlock.timestamp + ak())), BooleanEntry(q(m, toBase58String(i)), true)]
243257 }
244258 else throw("Strict value is not equal to itself.")
245259 }
246260 }
247261
248262
249-func aE (m,j) = {
250- let f = fromBase58String(m)
251- let aw = o(f)
252- let s = aw._1
253- let r = aw._2
254- let ax = k(j)
255- let aF = h(f)
256- let aG = (a(e(f)) - lastBlock.timestamp)
257- if ((x(aF) != j))
263+func aH (p,m) = {
264+ let i = fromBase58String(p)
265+ let az = r(i)
266+ let v = az._1
267+ let u = az._2
268+ let aA = n(m)
269+ let aI = k(i)
270+ let aJ = (a(h(i)) - lastBlock.timestamp)
271+ if ((A(aI) != m))
258272 then throw("3IULD: The duck is not yours")
259- else if ((aG > 0))
260- then throw((("3IUL: You need to wait to unlock " + toString((aG / 1000))) + " seconds"))
261- else [IntegerEntry(g(f), (lastBlock.timestamp + ai()))]
273+ else if ((aJ > 0))
274+ then throw((("3IUL: You need to wait to unlock " + toString((aJ / 1000))) + " seconds"))
275+ else [IntegerEntry(j(i), (lastBlock.timestamp + al()))]
262276 }
263277
264278
265-func aH (m,j,aI) = {
266- let f = fromBase58String(m)
267- let aw = o(f)
268- let s = aw._1
269- let r = aw._2
270- let ax = k(aI)
271- let aF = h(f)
272- let aG = (a(g(f)) - lastBlock.timestamp)
273- if ((x(aF) != j))
279+func aK (p,m,aL) = {
280+ let i = fromBase58String(p)
281+ let az = r(i)
282+ let v = az._1
283+ let u = az._2
284+ let aA = n(aL)
285+ let aI = k(i)
286+ let aJ = (a(j(i)) - lastBlock.timestamp)
287+ if ((A(aI) != m))
274288 then throw("3UD: The duck is not yours")
275- else if ((aG > 0))
276- then throw((("3UD: You need to wait to unlock " + toString((aG / 1000))) + " seconds"))
277- else [ScriptTransfer(Address(fromBase58String(j)), 1, f), DeleteEntry(l(j, m)), DeleteEntry(aF), IntegerEntry(ax, (a(ax) - 1))]
289+ else if ((aJ > 0))
290+ then throw((("3UD: You need to wait to unlock " + toString((aJ / 1000))) + " seconds"))
291+ else [ScriptTransfer(Address(fromBase58String(m)), 1, i), DeleteEntry(o(m, p)), DeleteEntry(aI), IntegerEntry(aA, (a(aA) - 1))]
278292 }
279293
280294
281-@Callable(aJ)
282-func buyAccessItemInternal (j) = if ((aJ.caller != this))
295+@Callable(aM)
296+func buyAccessItemInternal (m) = if ((aM.caller != this))
283297 then throw("3BAII: internal use only")
284298 else {
285- let aK = Issue(("ACCESS-" + U()), ((("[Access] " + V()) + " access NFT for ") + W()), 1, 0, false)
286- let aL = toBase58String(calculateAssetId(aK))
287- let az = i(j)
288- $Tuple2([aK, StringEntry((("accessItem_" + aL) + "_owner"), j), StringEntry((("address_" + j) + "_owning"), aL), IntegerEntry(az, (a(az) + 1))], aL)
299+ let aN = Issue(("ACCESS-" + X()), ((("[Access] " + Y()) + " access NFT for ") + Z()), 1, 0, false)
300+ let aO = toBase58String(calculateAssetId(aN))
301+ let aC = l(m)
302+ $Tuple2([aN, StringEntry((("accessItem_" + aO) + "_owner"), m), StringEntry((("address_" + m) + "_owning"), aO), IntegerEntry(aC, (a(aC) + 1))], aO)
289303 }
290304
291305
292306
293-@Callable(aJ)
294-func configureOracle (aM,aN,aO,aP) = if ((aJ.caller != this))
307+@Callable(aM)
308+func configureOracle (aP,aQ,aR,aS) = if ((aM.caller != this))
295309 then throw("3CO: admin only")
296- else [StringEntry("static_oracleAddress", aM), StringEntry("static_shortGameName", aN), StringEntry("static_longGameName", aO), StringEntry("static_nftName", aP)]
310+ else [StringEntry("static_oracleAddress", aP), StringEntry("static_shortGameName", aQ), StringEntry("static_longGameName", aR), StringEntry("static_nftName", aS)]
297311
298312
299313
300-@Callable(aJ)
301-func deleteSetting (b) = if ((aJ.caller != this))
314+@Callable(aM)
315+func deleteSetting (b) = if ((aM.caller != this))
302316 then throw("3DS: Only administrator can call this method")
303317 else [DeleteEntry(b)]
304318
305319
306320
307-@Callable(aJ)
321+@Callable(aM)
308322 func buyAccessItemAndLockDuck () = {
309- let aQ = value(aJ.payments[0])
310- let aR = value(aJ.payments[1])
311- let j = toString(aJ.originCaller)
312- if ((aQ.assetId != af()))
323+ let aT = value(aM.payments[0])
324+ let aU = value(aM.payments[1])
325+ let m = toString(aM.originCaller)
326+ if ((aT.assetId != ai()))
313327 then throw("3BAI: Wrong asset attached")
314- else if ((aQ.amount != ag()))
328+ else if ((aT.amount != aj()))
315329 then throw("3BAI: Wrong amount of assets attached")
316330 else {
317- let aS = ap(invoke(this, "buyAccessItemInternal", [j], nil))
318- if ((aS == aS))
331+ let aV = as(invoke(this, "buyAccessItemInternal", [m], nil))
332+ if ((aV == aV))
319333 then {
320- let aT = invoke(ae(), "burnAttachedPayments", nil, [AttachedPayment(ab(), aQ.amount)])
321- if ((aT == aT))
334+ let aW = invoke(ah(), "burnAttachedPayments", nil, [AttachedPayment(ae(), aT.amount)])
335+ if ((aW == aW))
322336 then {
323- let aU = if ((aJ.caller == Z()))
337+ let aX = if ((aM.caller == ac()))
324338 then nil
325- else am(aJ.payments[2])
326- if ((aU == aU))
339+ else ap(aM.payments[2])
340+ if ((aX == aX))
327341 then {
328- let aV = (as(j, j, aR) ++ aU)
329- $Tuple2(aV, aS)
342+ let aY = (av(m, m, aU) ++ aX)
343+ $Tuple2(aY, aV)
330344 }
331345 else throw("Strict value is not equal to itself.")
332346 }
338352
339353
340354
341-@Callable(aJ)
355+@Callable(aM)
342356 func buyAccessItem () = {
343- let j = toString(aJ.originCaller)
344- let aQ = value(aJ.payments[0])
345- if ((aQ.assetId != af()))
346- then throw(("3BAI: Wrong asset attached " + toBase58String(af())))
347- else if ((aQ.amount != ag()))
357+ let m = toString(aM.originCaller)
358+ let aT = value(aM.payments[0])
359+ if ((aT.assetId != ai()))
360+ then throw(("3BAI: Wrong asset attached " + toBase58String(ai())))
361+ else if ((aT.amount != aj()))
348362 then throw("3BAI: Wrong amount of assets attached")
349363 else {
350- let aS = ap(invoke(this, "buyAccessItemInternal", [j], nil))
351- if ((aS == aS))
364+ let aV = as(invoke(this, "buyAccessItemInternal", [m], nil))
365+ if ((aV == aV))
352366 then {
353- let aT = invoke(ae(), "burnAttachedPayments", nil, [AttachedPayment(ab(), aQ.amount)])
354- if ((aT == aT))
367+ let aW = invoke(ah(), "burnAttachedPayments", nil, [AttachedPayment(ae(), aT.amount)])
368+ if ((aW == aW))
355369 then {
356- let aU = if ((aJ.caller == Z()))
370+ let aX = if ((aM.caller == ac()))
357371 then nil
358- else am(aJ.payments[1])
359- if ((aU == aU))
360- then $Tuple2(aU, aS)
372+ else ap(aM.payments[1])
373+ if ((aX == aX))
374+ then $Tuple2(aX, aV)
361375 else throw("Strict value is not equal to itself.")
362376 }
363377 else throw("Strict value is not equal to itself.")
368382
369383
370384
371-@Callable(aJ)
372-func buyAccessItemOther (aW) = {
373- let aQ = value(aJ.payments[0])
374- if ((aQ.assetId != af()))
385+@Callable(aM)
386+func buyAccessItemOther (aZ) = {
387+ let aT = value(aM.payments[0])
388+ if ((aT.assetId != ai()))
375389 then throw("3BAI: Wrong asset attached")
376- else if ((aQ.amount != ag()))
390+ else if ((aT.amount != aj()))
377391 then throw("3BAI: Wrong amount of assets attached")
378392 else {
379- let aS = ap(invoke(this, "buyAccessItemInternal", [aW], nil))
380- if ((aS == aS))
393+ let aV = as(invoke(this, "buyAccessItemInternal", [aZ], nil))
394+ if ((aV == aV))
381395 then {
382- let aT = invoke(ae(), "burnAttachedPayments", nil, [AttachedPayment(ab(), aQ.amount)])
383- if ((aT == aT))
384- then $Tuple2(nil, aS)
396+ let aW = invoke(ah(), "burnAttachedPayments", nil, [AttachedPayment(ae(), aT.amount)])
397+ if ((aW == aW))
398+ then $Tuple2(nil, aV)
385399 else throw("Strict value is not equal to itself.")
386400 }
387401 else throw("Strict value is not equal to itself.")
390404
391405
392406
393-@Callable(aJ)
407+@Callable(aM)
394408 func lockDuck () = {
395- let j = toString(aJ.originCaller)
396- let aR = value(aJ.payments[0])
397- let aU = am(aJ.payments[1])
398- if ((aU == aU))
399- then (as(j, j, aR) ++ aU)
409+ let m = toString(aM.originCaller)
410+ let aU = value(aM.payments[0])
411+ let aX = ap(aM.payments[1])
412+ if ((aX == aX))
413+ then (av(m, m, aU) ++ aX)
400414 else throw("Strict value is not equal to itself.")
401415 }
402416
403417
404418
405-@Callable(aJ)
406-func initUnlock (m) = {
407- let j = toString(aJ.caller)
408- let aU = am(aJ.payments[0])
409- if ((aU == aU))
410- then (aE(m, j) ++ aU)
419+@Callable(aM)
420+func initUnlock (p) = {
421+ let m = toString(aM.caller)
422+ let aX = ap(aM.payments[0])
423+ if ((aX == aX))
424+ then (aH(p, m) ++ aX)
411425 else throw("Strict value is not equal to itself.")
412426 }
413427
414428
415429
416-@Callable(aJ)
417-func lockDuckRenting (aX) = if ((aJ.caller != Z()))
430+@Callable(aM)
431+func lockDuckRenting (ba) = if ((aM.caller != ac()))
418432 then throw("3UDO: Renting only!")
419433 else {
420- let j = toString(aJ.caller)
421- let aR = value(aJ.payments[0])
422- as(j, aX, aR)
434+ let m = toString(aM.caller)
435+ let aU = value(aM.payments[0])
436+ av(m, ba, aU)
423437 }
424438
425439
426440
427-@Callable(aJ)
428-func unlockDuckRenting (m,aI) = if ((aJ.caller != Z()))
441+@Callable(aM)
442+func unlockDuckRenting (p,aL) = if ((aM.caller != ac()))
429443 then throw("3UDO: Renting only!")
430444 else {
431- let j = toString(aJ.caller)
432- aH(m, j, aI)
445+ let m = toString(aM.caller)
446+ aK(p, m, aL)
433447 }
434448
435449
436450
437-@Callable(aJ)
438-func unlockDuckOther (m) = if ((aJ.caller != this))
451+@Callable(aM)
452+func unlockDuckOther (p) = if ((aM.caller != this))
439453 then throw("3UDO: Admin only!")
440454 else {
441- let aY = x(h(fromBase58String(m)))
442- aH(m, aY, aY)
455+ let bb = A(k(fromBase58String(p)))
456+ aK(p, bb, bb)
443457 }
444458
445459
446460
447-@Callable(aJ)
448-func unlockDuck (m,aZ,ba,bb) = if ((ba != true))
461+@Callable(aM)
462+func unlockDuck (p,bc,bd,be) = if ((bd != true))
449463 then throw("3UD: Not allowed to unlock the duck!")
450464 else {
451- let bc = 3600000
452- let bd = lastBlock.timestamp
453- if ((bd > (aZ + bc)))
465+ let bf = 3600000
466+ let bg = lastBlock.timestamp
467+ if ((bg > (bc + bf)))
454468 then throw("3UD: Outdated signature!")
455469 else {
456- let j = toString(aJ.caller)
457- let be = makeString([m, toString(aZ), toString(ba)], ";")
458- if (!(sigVerify_8Kb(toBytes(be), fromBase58String(bb), ac())))
459- then throw(((("3UD: Invalid proof from backend key" + toBase58String(ac())) + " ") + be))
470+ let m = toString(aM.caller)
471+ let bh = makeString([p, toString(bc), toString(bd)], ";")
472+ if (!(sigVerify_8Kb(toBytes(bh), fromBase58String(be), af())))
473+ then throw(((("3UD: Invalid proof from backend key" + toBase58String(af())) + " ") + bh))
460474 else {
461- let aU = am(aJ.payments[0])
462- if ((aU == aU))
463- then (aH(m, j, j) ++ aU)
475+ let aX = ap(aM.payments[0])
476+ if ((aX == aX))
477+ then (aK(p, m, m) ++ aX)
464478 else throw("Strict value is not equal to itself.")
465479 }
466480 }
467481 }
468482
469483
484+@Verifier(bi)
485+func bj () = if (e())
486+ then sigVerify(bi.bodyBytes, bi.proofs[0], bi.senderPublicKey)
487+ else {
488+ let bk = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
489+ let bl = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
490+ let bm = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
491+ let bn = if (sigVerify(bi.bodyBytes, bi.proofs[0], bk))
492+ then 1
493+ else if (sigVerify(bi.bodyBytes, bi.proofs[1], bk))
494+ then 1
495+ else if (sigVerify(bi.bodyBytes, bi.proofs[2], bk))
496+ then 1
497+ else 0
498+ let bo = if (sigVerify(bi.bodyBytes, bi.proofs[0], bl))
499+ then 1
500+ else if (sigVerify(bi.bodyBytes, bi.proofs[1], bl))
501+ then 1
502+ else if (sigVerify(bi.bodyBytes, bi.proofs[2], bl))
503+ then 1
504+ else 0
505+ let bp = if (sigVerify(bi.bodyBytes, bi.proofs[0], bm))
506+ then 1
507+ else if (sigVerify(bi.bodyBytes, bi.proofs[1], bm))
508+ then 1
509+ else if (sigVerify(bi.bodyBytes, bi.proofs[2], bm))
510+ then 1
511+ else 0
512+ let bq = ((bn + bo) + bp)
513+ let c = bi
514+ (bq >= 2)
515+ }
516+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = {
55 let c = getInteger(this, b)
66 if ($isInstanceOf(c, "Int"))
77 then {
88 let d = c
99 d
1010 }
1111 else 0
1212 }
1313
1414
15-func e (f) = (("duck_" + toBase58String(f)) + "_unlockTime")
16-
17-
18-func g (f) = (("duck_" + toBase58String(f)) + "finish_unlockTime")
19-
20-
21-func h (f) = (("duck_" + toBase58String(f)) + "_owner")
22-
23-
24-func i (j) = (("address_" + j) + "_spotsBought")
25-
26-
27-func k (j) = (("address_" + j) + "_spotsBusy")
28-
29-
30-func l (j,m) = (((("address_" + j) + "_lockedDuck_") + m) + "_status")
31-
32-
33-func n (j,m) = (((("address_" + j) + "_lockedDuck_") + m) + "_v2")
34-
35-
36-func o (f) = {
37- let p = value(value(assetInfo(f)).name)
38- let q = split(p, "")
39- let r = (q[(size(q) - 2)] == "J")
40- let s = if (r)
41- then "B"
42- else q[(size(q) - 1)]
43- $Tuple2(s, r)
15+func e () = {
16+ let f = {
17+ let c = getBoolean(this, "TESTENV")
18+ if ($isInstanceOf(c, "Boolean"))
19+ then {
20+ let g = c
21+ g
22+ }
23+ else false
24+ }
25+ f
4426 }
4527
4628
47-func t (u,b) = {
48- let c = getString(u, b)
29+func h (i) = (("duck_" + toBase58String(i)) + "_unlockTime")
30+
31+
32+func j (i) = (("duck_" + toBase58String(i)) + "finish_unlockTime")
33+
34+
35+func k (i) = (("duck_" + toBase58String(i)) + "_owner")
36+
37+
38+func l (m) = (("address_" + m) + "_spotsBought")
39+
40+
41+func n (m) = (("address_" + m) + "_spotsBusy")
42+
43+
44+func o (m,p) = (((("address_" + m) + "_lockedDuck_") + p) + "_status")
45+
46+
47+func q (m,p) = (((("address_" + m) + "_lockedDuck_") + p) + "_v2")
48+
49+
50+func r (i) = {
51+ let s = value(value(assetInfo(i)).name)
52+ let t = split(s, "")
53+ let u = (t[(size(t) - 2)] == "J")
54+ let v = if (u)
55+ then "B"
56+ else t[(size(t) - 1)]
57+ $Tuple2(v, u)
58+ }
59+
60+
61+func w (x,b) = {
62+ let c = getString(x, b)
4963 if ($isInstanceOf(c, "String"))
5064 then {
51- let v = c
52- v
65+ let y = c
66+ y
5367 }
5468 else ""
5569 }
5670
5771
58-func w (b) = {
72+func z (b) = {
5973 let c = getBoolean(b)
6074 if ($isInstanceOf(c, "Boolean"))
6175 then {
6276 let d = c
6377 d
6478 }
6579 else false
6680 }
6781
6882
69-func x (b) = t(this, b)
83+func A (b) = w(this, b)
7084
7185
72-func y () = "static_oracleAddress"
86+func B () = "static_oracleAddress"
7387
7488
75-func z () = "static_eggAssetId"
89+func C () = "static_eggAssetId"
7690
7791
78-func A () = "static_incubatorAddress"
92+func D () = "static_incubatorAddress"
7993
8094
81-func B () = "static_breederAddress"
95+func E () = "static_breederAddress"
8296
8397
84-func C () = "static_farmingAddress"
98+func F () = "static_farmingAddress"
8599
86100
87-func D () = "static_rentingAddress"
101+func G () = "static_rentingAddress"
88102
89103
90-func E () = "static_shortGameName"
104+func H () = "static_shortGameName"
91105
92106
93-func F () = "static_longGameName"
107+func I () = "static_longGameName"
94108
95109
96-func G () = "static_nftName"
110+func J () = "static_nftName"
97111
98112
99-func H () = "static_backendPubKey"
113+func K () = "static_backendPubKey"
100114
101115
102-func I () = "static_accessItemAssetId"
116+func L () = "static_accessItemAssetId"
103117
104118
105-func J () = "static_accessItemPrice"
119+func M () = "static_accessItemPrice"
106120
107121
108-func K () = "static_minLockDuration"
122+func N () = "static_minLockDuration"
109123
110124
111-func L () = "static_UnlockDuration"
125+func O () = "static_UnlockDuration"
112126
113127
114-func M () = "static_boosterBuyAssetId"
128+func P () = "static_boosterBuyAssetId"
115129
116130
117-func N () = "static_extraFee"
131+func Q () = "static_extraFee"
118132
119133
120-func O () = "static_feeAggregator"
134+func R () = "static_feeAggregator"
121135
122136
123-func P (Q) = ("static_boosterPriceLevel_" + Q)
137+func S (T) = ("static_boosterPriceLevel_" + T)
124138
125139
126-func R (Q) = ("static_boosterName_" + Q)
140+func U (T) = ("static_boosterName_" + T)
127141
128142
129-func S () = "static_burnAddress"
143+func V () = "static_burnAddress"
130144
131145
132-func T () = Address(fromBase58String(x(y())))
146+func W () = Address(fromBase58String(A(B())))
133147
134148
135-func U () = valueOrErrorMessage(getString(E()), "3GGN: There is no game name defined!")
149+func X () = valueOrErrorMessage(getString(H()), "3GGN: There is no game name defined!")
136150
137151
138-func V () = valueOrErrorMessage(getString(F()), "3GLGN: There is no long game name defined!")
152+func Y () = valueOrErrorMessage(getString(I()), "3GLGN: There is no long game name defined!")
139153
140154
141-func W () = valueOrErrorMessage(getString(G()), "3GNN: There is no nft name defined!")
155+func Z () = valueOrErrorMessage(getString(J()), "3GNN: There is no nft name defined!")
142156
143157
144-func X () = Address(fromBase58String(t(T(), A())))
158+func aa () = Address(fromBase58String(w(W(), D())))
145159
146160
147-func Y () = Address(fromBase58String(t(T(), B())))
161+func ab () = Address(fromBase58String(w(W(), E())))
148162
149163
150-func Z () = Address(fromBase58String(t(T(), D())))
164+func ac () = Address(fromBase58String(w(W(), G())))
151165
152166
153-func aa () = Address(fromBase58String(t(T(), C())))
167+func ad () = Address(fromBase58String(w(W(), F())))
154168
155169
156-func ab () = fromBase58String(t(T(), z()))
170+func ae () = fromBase58String(w(W(), C()))
157171
158172
159-func ac () = fromBase58String(t(T(), H()))
173+func af () = fromBase58String(w(W(), K()))
160174
161175
162-func ad () = Address(fromBase58String(t(T(), O())))
176+func ag () = Address(fromBase58String(w(W(), R())))
163177
164178
165-func ae () = Address(fromBase58String(t(T(), S())))
179+func ah () = Address(fromBase58String(w(W(), V())))
166180
167181
168-func af () = fromBase58String(x(I()))
182+func ai () = fromBase58String(A(L()))
169183
170184
171-func ag () = a(J())
185+func aj () = a(M())
172186
173187
174-func ah () = a(K())
188+func ak () = a(N())
175189
176190
177-func ai () = a(L())
191+func al () = a(O())
178192
179193
180-func aj () = fromBase58String(x(M()))
194+func am () = fromBase58String(A(P()))
181195
182196
183-func ak (Q) = valueOrErrorMessage(getInteger(P(toString(Q))), "3GBPFL: There is no price value for this level of booster")
197+func an (T) = valueOrErrorMessage(getInteger(S(toString(T))), "3GBPFL: There is no price value for this level of booster")
184198
185199
186-func al (Q) = valueOrErrorMessage(getString(R(toString(Q))), "3GBNFL: There is no such booster")
200+func ao (T) = valueOrErrorMessage(getString(U(toString(T))), "3GBNFL: There is no such booster")
187201
188202
189-func am (an) = if (isDefined(an.assetId))
203+func ap (aq) = if (isDefined(aq.assetId))
190204 then throw("RCAP: Please attach waves")
191205 else {
192- let ao = getIntegerValue(T(), N())
193- if ((an.amount != ao))
194- then throw((("RCAP: Please attach exactly " + toString(ao)) + " amount of wavelets"))
195- else [ScriptTransfer(ad(), ao, unit)]
206+ let ar = getIntegerValue(W(), Q())
207+ if ((aq.amount != ar))
208+ then throw((("RCAP: Please attach exactly " + toString(ar)) + " amount of wavelets"))
209+ else [ScriptTransfer(ag(), ar, unit)]
196210 }
197211
198212
199-func ap (aq) = {
200- let c = aq
213+func as (at) = {
214+ let c = at
201215 if ($isInstanceOf(c, "String"))
202216 then {
203- let ar = c
204- ar
217+ let au = c
218+ au
205219 }
206220 else throw("3AS: wrong type, expected: String")
207221 }
208222
209223
210-func as (j,at,au) = {
211- let f = value(au.assetId)
212- let av = value(assetInfo(f)).issuer
213- let aw = o(f)
214- let s = aw._1
215- let r = aw._2
216- let ax = k(at)
217- let ay = a(ax)
218- let az = i(at)
219- let aA = (a(az) - ay)
220- if ((au.amount != 1))
224+func av (m,aw,ax) = {
225+ let i = value(ax.assetId)
226+ let ay = value(assetInfo(i)).issuer
227+ let az = r(i)
228+ let v = az._1
229+ let u = az._2
230+ let aA = n(aw)
231+ let aB = a(aA)
232+ let aC = l(aw)
233+ let aD = (a(aC) - aB)
234+ if ((ax.amount != 1))
221235 then throw("NFT is not attached")
222- else if (if ((av != X()))
223- then (av != Y())
236+ else if (if ((ay != aa()))
237+ then (ay != ab())
224238 else false)
225239 then throw("ivalid NFT attached")
226- else if ((0 >= aA))
227- then throw(("No spots available in hunt for: " + at))
240+ else if ((0 >= aD))
241+ then throw(("No spots available in hunt for: " + aw))
228242 else {
229- let aB = ((("address_" + toString(this)) + "_perchesAvailable_") + s)
230- let aC = {
231- let c = getInteger(aa(), aB)
243+ let aE = ((("address_" + toString(this)) + "_perchesAvailable_") + v)
244+ let aF = {
245+ let c = getInteger(ad(), aE)
232246 if ($isInstanceOf(c, "Int"))
233247 then {
234248 let d = c
235249 d
236250 }
237251 else 0
238252 }
239- if ((aC == aC))
253+ if ((aF == aF))
240254 then {
241- let aD = ab()
242-[IntegerEntry(ax, (ay + 1)), StringEntry(h(f), j), BooleanEntry(l(j, toBase58String(f)), true), IntegerEntry(e(f), (lastBlock.timestamp + ah())), BooleanEntry(n(j, toBase58String(f)), true)]
255+ let aG = ae()
256+[IntegerEntry(aA, (aB + 1)), StringEntry(k(i), m), BooleanEntry(o(m, toBase58String(i)), true), IntegerEntry(h(i), (lastBlock.timestamp + ak())), BooleanEntry(q(m, toBase58String(i)), true)]
243257 }
244258 else throw("Strict value is not equal to itself.")
245259 }
246260 }
247261
248262
249-func aE (m,j) = {
250- let f = fromBase58String(m)
251- let aw = o(f)
252- let s = aw._1
253- let r = aw._2
254- let ax = k(j)
255- let aF = h(f)
256- let aG = (a(e(f)) - lastBlock.timestamp)
257- if ((x(aF) != j))
263+func aH (p,m) = {
264+ let i = fromBase58String(p)
265+ let az = r(i)
266+ let v = az._1
267+ let u = az._2
268+ let aA = n(m)
269+ let aI = k(i)
270+ let aJ = (a(h(i)) - lastBlock.timestamp)
271+ if ((A(aI) != m))
258272 then throw("3IULD: The duck is not yours")
259- else if ((aG > 0))
260- then throw((("3IUL: You need to wait to unlock " + toString((aG / 1000))) + " seconds"))
261- else [IntegerEntry(g(f), (lastBlock.timestamp + ai()))]
273+ else if ((aJ > 0))
274+ then throw((("3IUL: You need to wait to unlock " + toString((aJ / 1000))) + " seconds"))
275+ else [IntegerEntry(j(i), (lastBlock.timestamp + al()))]
262276 }
263277
264278
265-func aH (m,j,aI) = {
266- let f = fromBase58String(m)
267- let aw = o(f)
268- let s = aw._1
269- let r = aw._2
270- let ax = k(aI)
271- let aF = h(f)
272- let aG = (a(g(f)) - lastBlock.timestamp)
273- if ((x(aF) != j))
279+func aK (p,m,aL) = {
280+ let i = fromBase58String(p)
281+ let az = r(i)
282+ let v = az._1
283+ let u = az._2
284+ let aA = n(aL)
285+ let aI = k(i)
286+ let aJ = (a(j(i)) - lastBlock.timestamp)
287+ if ((A(aI) != m))
274288 then throw("3UD: The duck is not yours")
275- else if ((aG > 0))
276- then throw((("3UD: You need to wait to unlock " + toString((aG / 1000))) + " seconds"))
277- else [ScriptTransfer(Address(fromBase58String(j)), 1, f), DeleteEntry(l(j, m)), DeleteEntry(aF), IntegerEntry(ax, (a(ax) - 1))]
289+ else if ((aJ > 0))
290+ then throw((("3UD: You need to wait to unlock " + toString((aJ / 1000))) + " seconds"))
291+ else [ScriptTransfer(Address(fromBase58String(m)), 1, i), DeleteEntry(o(m, p)), DeleteEntry(aI), IntegerEntry(aA, (a(aA) - 1))]
278292 }
279293
280294
281-@Callable(aJ)
282-func buyAccessItemInternal (j) = if ((aJ.caller != this))
295+@Callable(aM)
296+func buyAccessItemInternal (m) = if ((aM.caller != this))
283297 then throw("3BAII: internal use only")
284298 else {
285- let aK = Issue(("ACCESS-" + U()), ((("[Access] " + V()) + " access NFT for ") + W()), 1, 0, false)
286- let aL = toBase58String(calculateAssetId(aK))
287- let az = i(j)
288- $Tuple2([aK, StringEntry((("accessItem_" + aL) + "_owner"), j), StringEntry((("address_" + j) + "_owning"), aL), IntegerEntry(az, (a(az) + 1))], aL)
299+ let aN = Issue(("ACCESS-" + X()), ((("[Access] " + Y()) + " access NFT for ") + Z()), 1, 0, false)
300+ let aO = toBase58String(calculateAssetId(aN))
301+ let aC = l(m)
302+ $Tuple2([aN, StringEntry((("accessItem_" + aO) + "_owner"), m), StringEntry((("address_" + m) + "_owning"), aO), IntegerEntry(aC, (a(aC) + 1))], aO)
289303 }
290304
291305
292306
293-@Callable(aJ)
294-func configureOracle (aM,aN,aO,aP) = if ((aJ.caller != this))
307+@Callable(aM)
308+func configureOracle (aP,aQ,aR,aS) = if ((aM.caller != this))
295309 then throw("3CO: admin only")
296- else [StringEntry("static_oracleAddress", aM), StringEntry("static_shortGameName", aN), StringEntry("static_longGameName", aO), StringEntry("static_nftName", aP)]
310+ else [StringEntry("static_oracleAddress", aP), StringEntry("static_shortGameName", aQ), StringEntry("static_longGameName", aR), StringEntry("static_nftName", aS)]
297311
298312
299313
300-@Callable(aJ)
301-func deleteSetting (b) = if ((aJ.caller != this))
314+@Callable(aM)
315+func deleteSetting (b) = if ((aM.caller != this))
302316 then throw("3DS: Only administrator can call this method")
303317 else [DeleteEntry(b)]
304318
305319
306320
307-@Callable(aJ)
321+@Callable(aM)
308322 func buyAccessItemAndLockDuck () = {
309- let aQ = value(aJ.payments[0])
310- let aR = value(aJ.payments[1])
311- let j = toString(aJ.originCaller)
312- if ((aQ.assetId != af()))
323+ let aT = value(aM.payments[0])
324+ let aU = value(aM.payments[1])
325+ let m = toString(aM.originCaller)
326+ if ((aT.assetId != ai()))
313327 then throw("3BAI: Wrong asset attached")
314- else if ((aQ.amount != ag()))
328+ else if ((aT.amount != aj()))
315329 then throw("3BAI: Wrong amount of assets attached")
316330 else {
317- let aS = ap(invoke(this, "buyAccessItemInternal", [j], nil))
318- if ((aS == aS))
331+ let aV = as(invoke(this, "buyAccessItemInternal", [m], nil))
332+ if ((aV == aV))
319333 then {
320- let aT = invoke(ae(), "burnAttachedPayments", nil, [AttachedPayment(ab(), aQ.amount)])
321- if ((aT == aT))
334+ let aW = invoke(ah(), "burnAttachedPayments", nil, [AttachedPayment(ae(), aT.amount)])
335+ if ((aW == aW))
322336 then {
323- let aU = if ((aJ.caller == Z()))
337+ let aX = if ((aM.caller == ac()))
324338 then nil
325- else am(aJ.payments[2])
326- if ((aU == aU))
339+ else ap(aM.payments[2])
340+ if ((aX == aX))
327341 then {
328- let aV = (as(j, j, aR) ++ aU)
329- $Tuple2(aV, aS)
342+ let aY = (av(m, m, aU) ++ aX)
343+ $Tuple2(aY, aV)
330344 }
331345 else throw("Strict value is not equal to itself.")
332346 }
333347 else throw("Strict value is not equal to itself.")
334348 }
335349 else throw("Strict value is not equal to itself.")
336350 }
337351 }
338352
339353
340354
341-@Callable(aJ)
355+@Callable(aM)
342356 func buyAccessItem () = {
343- let j = toString(aJ.originCaller)
344- let aQ = value(aJ.payments[0])
345- if ((aQ.assetId != af()))
346- then throw(("3BAI: Wrong asset attached " + toBase58String(af())))
347- else if ((aQ.amount != ag()))
357+ let m = toString(aM.originCaller)
358+ let aT = value(aM.payments[0])
359+ if ((aT.assetId != ai()))
360+ then throw(("3BAI: Wrong asset attached " + toBase58String(ai())))
361+ else if ((aT.amount != aj()))
348362 then throw("3BAI: Wrong amount of assets attached")
349363 else {
350- let aS = ap(invoke(this, "buyAccessItemInternal", [j], nil))
351- if ((aS == aS))
364+ let aV = as(invoke(this, "buyAccessItemInternal", [m], nil))
365+ if ((aV == aV))
352366 then {
353- let aT = invoke(ae(), "burnAttachedPayments", nil, [AttachedPayment(ab(), aQ.amount)])
354- if ((aT == aT))
367+ let aW = invoke(ah(), "burnAttachedPayments", nil, [AttachedPayment(ae(), aT.amount)])
368+ if ((aW == aW))
355369 then {
356- let aU = if ((aJ.caller == Z()))
370+ let aX = if ((aM.caller == ac()))
357371 then nil
358- else am(aJ.payments[1])
359- if ((aU == aU))
360- then $Tuple2(aU, aS)
372+ else ap(aM.payments[1])
373+ if ((aX == aX))
374+ then $Tuple2(aX, aV)
361375 else throw("Strict value is not equal to itself.")
362376 }
363377 else throw("Strict value is not equal to itself.")
364378 }
365379 else throw("Strict value is not equal to itself.")
366380 }
367381 }
368382
369383
370384
371-@Callable(aJ)
372-func buyAccessItemOther (aW) = {
373- let aQ = value(aJ.payments[0])
374- if ((aQ.assetId != af()))
385+@Callable(aM)
386+func buyAccessItemOther (aZ) = {
387+ let aT = value(aM.payments[0])
388+ if ((aT.assetId != ai()))
375389 then throw("3BAI: Wrong asset attached")
376- else if ((aQ.amount != ag()))
390+ else if ((aT.amount != aj()))
377391 then throw("3BAI: Wrong amount of assets attached")
378392 else {
379- let aS = ap(invoke(this, "buyAccessItemInternal", [aW], nil))
380- if ((aS == aS))
393+ let aV = as(invoke(this, "buyAccessItemInternal", [aZ], nil))
394+ if ((aV == aV))
381395 then {
382- let aT = invoke(ae(), "burnAttachedPayments", nil, [AttachedPayment(ab(), aQ.amount)])
383- if ((aT == aT))
384- then $Tuple2(nil, aS)
396+ let aW = invoke(ah(), "burnAttachedPayments", nil, [AttachedPayment(ae(), aT.amount)])
397+ if ((aW == aW))
398+ then $Tuple2(nil, aV)
385399 else throw("Strict value is not equal to itself.")
386400 }
387401 else throw("Strict value is not equal to itself.")
388402 }
389403 }
390404
391405
392406
393-@Callable(aJ)
407+@Callable(aM)
394408 func lockDuck () = {
395- let j = toString(aJ.originCaller)
396- let aR = value(aJ.payments[0])
397- let aU = am(aJ.payments[1])
398- if ((aU == aU))
399- then (as(j, j, aR) ++ aU)
409+ let m = toString(aM.originCaller)
410+ let aU = value(aM.payments[0])
411+ let aX = ap(aM.payments[1])
412+ if ((aX == aX))
413+ then (av(m, m, aU) ++ aX)
400414 else throw("Strict value is not equal to itself.")
401415 }
402416
403417
404418
405-@Callable(aJ)
406-func initUnlock (m) = {
407- let j = toString(aJ.caller)
408- let aU = am(aJ.payments[0])
409- if ((aU == aU))
410- then (aE(m, j) ++ aU)
419+@Callable(aM)
420+func initUnlock (p) = {
421+ let m = toString(aM.caller)
422+ let aX = ap(aM.payments[0])
423+ if ((aX == aX))
424+ then (aH(p, m) ++ aX)
411425 else throw("Strict value is not equal to itself.")
412426 }
413427
414428
415429
416-@Callable(aJ)
417-func lockDuckRenting (aX) = if ((aJ.caller != Z()))
430+@Callable(aM)
431+func lockDuckRenting (ba) = if ((aM.caller != ac()))
418432 then throw("3UDO: Renting only!")
419433 else {
420- let j = toString(aJ.caller)
421- let aR = value(aJ.payments[0])
422- as(j, aX, aR)
434+ let m = toString(aM.caller)
435+ let aU = value(aM.payments[0])
436+ av(m, ba, aU)
423437 }
424438
425439
426440
427-@Callable(aJ)
428-func unlockDuckRenting (m,aI) = if ((aJ.caller != Z()))
441+@Callable(aM)
442+func unlockDuckRenting (p,aL) = if ((aM.caller != ac()))
429443 then throw("3UDO: Renting only!")
430444 else {
431- let j = toString(aJ.caller)
432- aH(m, j, aI)
445+ let m = toString(aM.caller)
446+ aK(p, m, aL)
433447 }
434448
435449
436450
437-@Callable(aJ)
438-func unlockDuckOther (m) = if ((aJ.caller != this))
451+@Callable(aM)
452+func unlockDuckOther (p) = if ((aM.caller != this))
439453 then throw("3UDO: Admin only!")
440454 else {
441- let aY = x(h(fromBase58String(m)))
442- aH(m, aY, aY)
455+ let bb = A(k(fromBase58String(p)))
456+ aK(p, bb, bb)
443457 }
444458
445459
446460
447-@Callable(aJ)
448-func unlockDuck (m,aZ,ba,bb) = if ((ba != true))
461+@Callable(aM)
462+func unlockDuck (p,bc,bd,be) = if ((bd != true))
449463 then throw("3UD: Not allowed to unlock the duck!")
450464 else {
451- let bc = 3600000
452- let bd = lastBlock.timestamp
453- if ((bd > (aZ + bc)))
465+ let bf = 3600000
466+ let bg = lastBlock.timestamp
467+ if ((bg > (bc + bf)))
454468 then throw("3UD: Outdated signature!")
455469 else {
456- let j = toString(aJ.caller)
457- let be = makeString([m, toString(aZ), toString(ba)], ";")
458- if (!(sigVerify_8Kb(toBytes(be), fromBase58String(bb), ac())))
459- then throw(((("3UD: Invalid proof from backend key" + toBase58String(ac())) + " ") + be))
470+ let m = toString(aM.caller)
471+ let bh = makeString([p, toString(bc), toString(bd)], ";")
472+ if (!(sigVerify_8Kb(toBytes(bh), fromBase58String(be), af())))
473+ then throw(((("3UD: Invalid proof from backend key" + toBase58String(af())) + " ") + bh))
460474 else {
461- let aU = am(aJ.payments[0])
462- if ((aU == aU))
463- then (aH(m, j, j) ++ aU)
475+ let aX = ap(aM.payments[0])
476+ if ((aX == aX))
477+ then (aK(p, m, m) ++ aX)
464478 else throw("Strict value is not equal to itself.")
465479 }
466480 }
467481 }
468482
469483
484+@Verifier(bi)
485+func bj () = if (e())
486+ then sigVerify(bi.bodyBytes, bi.proofs[0], bi.senderPublicKey)
487+ else {
488+ let bk = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
489+ let bl = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
490+ let bm = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
491+ let bn = if (sigVerify(bi.bodyBytes, bi.proofs[0], bk))
492+ then 1
493+ else if (sigVerify(bi.bodyBytes, bi.proofs[1], bk))
494+ then 1
495+ else if (sigVerify(bi.bodyBytes, bi.proofs[2], bk))
496+ then 1
497+ else 0
498+ let bo = if (sigVerify(bi.bodyBytes, bi.proofs[0], bl))
499+ then 1
500+ else if (sigVerify(bi.bodyBytes, bi.proofs[1], bl))
501+ then 1
502+ else if (sigVerify(bi.bodyBytes, bi.proofs[2], bl))
503+ then 1
504+ else 0
505+ let bp = if (sigVerify(bi.bodyBytes, bi.proofs[0], bm))
506+ then 1
507+ else if (sigVerify(bi.bodyBytes, bi.proofs[1], bm))
508+ then 1
509+ else if (sigVerify(bi.bodyBytes, bi.proofs[2], bm))
510+ then 1
511+ else 0
512+ let bq = ((bn + bo) + bp)
513+ let c = bi
514+ (bq >= 2)
515+ }
516+

github/deemru/w8io/169f3d6 
158.58 ms