tx · E2n6qHrmu3kzuQ7FatbZ2UAsLH1Mr5tQ3wohjSGByAQN

3MzYJ5tJs1rdz6Pzr7zvyfezTLPuVxFSRvT:  -0.01800000 Waves

2024.11.25 23:54 [3387450] smart account 3MzYJ5tJs1rdz6Pzr7zvyfezTLPuVxFSRvT > SELF 0.00000000 Waves

{ "type": 13, "id": "E2n6qHrmu3kzuQ7FatbZ2UAsLH1Mr5tQ3wohjSGByAQN", "fee": 1800000, "feeAssetId": null, "timestamp": 1732568100096, "version": 2, "chainId": 84, "sender": "3MzYJ5tJs1rdz6Pzr7zvyfezTLPuVxFSRvT", "senderPublicKey": "FvkktUPDqYCGhXKDauJAZkkkVp1b5yKhS6NUf7vhP3tR", "proofs": [ "3W6hEsCbKrscQdJRoN4mhxeGybSFJZFyqjRYZHV6wtRz8my3d2Ruz7VXnEg1gmUL8DYLFujBJK5KMCJDsFjeFuzL" ], "script": "base64:BgI8CAISAwoBCBIGCgQICAgIEgMKAQgSABIAEgMKAQgSABIDCgEIEgMKAQgSBAoCCAgSAwoBCBIGCgQIAQQIOQENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEJaXNUZXN0RW52AAQHdGVzdGVudgQHJG1hdGNoMAkAmwgCBQR0aGlzAgdURVNURU5WAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXgFByRtYXRjaDAFAXgHBQd0ZXN0ZW52ARVrZXlEdWNrUGxheVVubG9ja1RpbWUBB2Fzc2V0SWQJAKwCAgkArAICAgVkdWNrXwkA2AQBBQdhc3NldElkAgtfdW5sb2NrVGltZQEXa2V5RHVja0ZpbmlzaFVubG9ja1RpbWUBB2Fzc2V0SWQJAKwCAgkArAICAgVkdWNrXwkA2AQBBQdhc3NldElkAhFmaW5pc2hfdW5sb2NrVGltZQEMa2V5RHVja093bmVyAQdhc3NldElkCQCsAgIJAKwCAgIFZHVja18JANgEAQUHYXNzZXRJZAIGX293bmVyAQ5rZXlTcG90c0JvdWdodAEKYWRkcmVzc1N0cgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgxfc3BvdHNCb3VnaHQBDGtleVNwb3RzQnVzeQEKYWRkcmVzc1N0cgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgpfc3BvdHNCdXN5ARNrZXlMb2NrZWREdWNrU3RhdHVzAgphZGRyZXNzU3RyCmFzc2V0SWRTdHIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICDF9sb2NrZWREdWNrXwUKYXNzZXRJZFN0cgIHX3N0YXR1cwEJa2V5RHVja1YyAgphZGRyZXNzU3RyCmFzc2V0SWRTdHIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICDF9sb2NrZWREdWNrXwUKYXNzZXRJZFN0cgIDX3YyAQ5nZXREdWNrRGV0YWlscwEHYXNzZXRJZAQJYXNzZXROYW1lCQEFdmFsdWUBCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUEDmFzc2V0TmFtZVBhcnRzCQC1CQIFCWFzc2V0TmFtZQIABAlpc0phY2twb3QJAAACCQCRAwIFDmFzc2V0TmFtZVBhcnRzCQBlAgkAkAMBBQ5hc3NldE5hbWVQYXJ0cwACAgFKBAphc3NldENvbG9yAwUJaXNKYWNrcG90AgFCCQCRAwIFDmFzc2V0TmFtZVBhcnRzCQBlAgkAkAMBBQ5hc3NldE5hbWVQYXJ0cwABCQCUCgIFCmFzc2V0Q29sb3IFCWlzSmFja3BvdAEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCgCAEFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEMdHJ5R2V0U3RyaW5nAQNrZXkJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIFBHRoaXMFA2tleQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAhFzdGF0aWNfZWdnQXNzZXRJZAEac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAhdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAIVc3RhdGljX2JyZWVkZXJBZGRyZXNzARhzdGF0aWNLZXlfZmFybWluZ0FkZHJlc3MAAhVzdGF0aWNfZmFybWluZ0FkZHJlc3MBGHN0YXRpY0tleV9yZW50aW5nQWRkcmVzcwACFXN0YXRpY19yZW50aW5nQWRkcmVzcwEXc3RhdGljS2V5X3Nob3J0R2FtZU5hbWUAAhRzdGF0aWNfc2hvcnRHYW1lTmFtZQEWc3RhdGljS2V5X2xvbmdHYW1lTmFtZQACE3N0YXRpY19sb25nR2FtZU5hbWUBEXN0YXRpY0tleV9uZnROYW1lAAIOc3RhdGljX25mdE5hbWUBF3N0YXRpY0tleV9iYWNrZW5kUHViS2V5AAIUc3RhdGljX2JhY2tlbmRQdWJLZXkBG3N0YXRpY0tleV9hY2Nlc3NJdGVtQXNzZXRJZAACGHN0YXRpY19hY2Nlc3NJdGVtQXNzZXRJZAEZc3RhdGljS2V5X2FjY2Vzc0l0ZW1QcmljZQACFnN0YXRpY19hY2Nlc3NJdGVtUHJpY2UBGXN0YXRpY0tleV9taW5Mb2NrRHVyYXRpb24AAhZzdGF0aWNfbWluTG9ja0R1cmF0aW9uARhzdGF0aWNLZXlfVW5sb2NrRHVyYXRpb24AAhVzdGF0aWNfVW5sb2NrRHVyYXRpb24BG3N0YXRpY0tleV9ib29zdGVyQnV5QXNzZXRJZAACGHN0YXRpY19ib29zdGVyQnV5QXNzZXRJZAESc3RhdGljS2V5X2V4dHJhRmVlAAIPc3RhdGljX2V4dHJhRmVlARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yARtzdGF0aWNLZXlfYm9vc3RlclByaWNlTGV2ZWwBBWxldmVsCQCsAgICGXN0YXRpY19ib29zdGVyUHJpY2VMZXZlbF8FBWxldmVsARVzdGF0aWNLZXlfYm9vc3Rlck5hbWUBBWxldmVsCQCsAgICE3N0YXRpY19ib29zdGVyTmFtZV8FBWxldmVsARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAhJzdGF0aWNfYnVybkFkZHJlc3MBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAELZ2V0R2FtZU5hbWUACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBF3N0YXRpY0tleV9zaG9ydEdhbWVOYW1lAAIkM0dHTjogVGhlcmUgaXMgbm8gZ2FtZSBuYW1lIGRlZmluZWQhAQ9nZXRMb25nR2FtZU5hbWUACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFnN0YXRpY0tleV9sb25nR2FtZU5hbWUAAiozR0xHTjogVGhlcmUgaXMgbm8gbG9uZyBnYW1lIG5hbWUgZGVmaW5lZCEBCmdldE5GVE5hbWUACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEXN0YXRpY0tleV9uZnROYW1lAAIjM0dOTjogVGhlcmUgaXMgbm8gbmZ0IG5hbWUgZGVmaW5lZCEBE2dldEluY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARpzdGF0aWNLZXlfaW5jdWJhdG9yQWRkcmVzcwABEWdldEJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAERZ2V0UmVudGluZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfcmVudGluZ0FkZHJlc3MAARFnZXRGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9mYXJtaW5nQWRkcmVzcwABDWdldEVnZ0Fzc2V0SWQACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAARBnZXRCYWNrZW5kUHViS2V5AAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9iYWNrZW5kUHViS2V5AAEQZ2V0RmVlQWdncmVnYXRvcgAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAEOZ2V0QnVybkFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAJANkEAQkBDHRyeUdldFN0cmluZwEJARtzdGF0aWNLZXlfYWNjZXNzSXRlbUFzc2V0SWQAARJnZXRBY2Nlc3NJdGVtUHJpY2UACQENdHJ5R2V0SW50ZWdlcgEJARlzdGF0aWNLZXlfYWNjZXNzSXRlbVByaWNlAAESZ2V0TWluTG9ja0R1cmF0aW9uAAkBDXRyeUdldEludGVnZXIBCQEZc3RhdGljS2V5X21pbkxvY2tEdXJhdGlvbgABEWdldFVubG9ja0R1cmF0aW9uAAkBDXRyeUdldEludGVnZXIBCQEYc3RhdGljS2V5X1VubG9ja0R1cmF0aW9uAAETZ2V0Qm9zdGVyQnV5QXNzZXRJZAAJANkEAQkBDHRyeUdldFN0cmluZwEJARtzdGF0aWNLZXlfYm9vc3RlckJ1eUFzc2V0SWQAARZnZXRCb3N0ZXJQcmljZUZvckxldmVsAQVsZXZlbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARtzdGF0aWNLZXlfYm9vc3RlclByaWNlTGV2ZWwBCQCkAwEFBWxldmVsAjkzR0JQRkw6IFRoZXJlIGlzIG5vIHByaWNlIHZhbHVlIGZvciB0aGlzIGxldmVsIG9mIGJvb3N0ZXIBFWdldEJvc3Rlck5hbWVGb3JMZXZlbAEFbGV2ZWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVc3RhdGljS2V5X2Jvb3N0ZXJOYW1lAQkApAMBBQVsZXZlbAIgM0dCTkZMOiBUaGVyZSBpcyBubyBzdWNoIGJvb3N0ZXIBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBB3BheW1lbnQDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECGVJDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIcUkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQlmZWVBbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQlmZWVBbW91bnQFBHVuaXQFA25pbAEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIhM0FTOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nARBsb2NrRHVja0ludGVybmFsAwphZGRyZXNzU3RyDXRha2VTcG90c0Zyb20DcG10BAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEC2Fzc2V0SXNzdWVyCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQ10YWtlU3BvdHNGcm9tBAlzcG90c0J1c3kJAQ10cnlHZXRJbnRlZ2VyAQUKa1Nwb3RzQnVzeQQMa1Nwb3RzQm91Z2h0CQEOa2V5U3BvdHNCb3VnaHQBBQ10YWtlU3BvdHNGcm9tBBVhZGRyZXNzU3BvdHNBdmFpbGFibGUJAGUCCQENdHJ5R2V0SW50ZWdlcgEFDGtTcG90c0JvdWdodAUJc3BvdHNCdXN5AwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQDAwkBAiE9AgULYXNzZXRJc3N1ZXIJARNnZXRJbmN1YmF0b3JBZGRyZXNzAAkBAiE9AgULYXNzZXRJc3N1ZXIJARFnZXRCcmVlZGVyQWRkcmVzcwAHCQACAQITaXZhbGlkIE5GVCBhdHRhY2hlZAMJAGcCAAAFFWFkZHJlc3NTcG90c0F2YWlsYWJsZQkAAgEJAKwCAgIgTm8gc3BvdHMgYXZhaWxhYmxlIGluIGh1bnQgZm9yOiAFDXRha2VTcG90c0Zyb20EEWtQZXJjaGVzQXZhaWxhYmxlCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBBQR0aGlzAhJfcGVyY2hlc0F2YWlsYWJsZV8FCmFzc2V0Q29sb3IEEHBlcmNoZXNBdmFpbGFibGUEByRtYXRjaDAJAJoIAgkBEWdldEZhcm1pbmdBZGRyZXNzAAURa1BlcmNoZXNBdmFpbGFibGUDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAADCQAAAgUQcGVyY2hlc0F2YWlsYWJsZQUQcGVyY2hlc0F2YWlsYWJsZQQKZWdnQXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprU3BvdHNCdXN5CQBkAgUJc3BvdHNCdXN5AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tPd25lcgEFB2Fzc2V0SWQFCmFkZHJlc3NTdHIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARNrZXlMb2NrZWREdWNrU3RhdHVzAgUKYWRkcmVzc1N0cgkA2AQBBQdhc3NldElkBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleUR1Y2tQbGF5VW5sb2NrVGltZQEFB2Fzc2V0SWQJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkBEmdldE1pbkxvY2tEdXJhdGlvbgAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQlrZXlEdWNrVjICBQphZGRyZXNzU3RyCQDYBAEFB2Fzc2V0SWQGBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmluaXRVbmxvY2tEdWNrAgphc3NldElkU3RyCmFkZHJlc3NTdHIEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQphZGRyZXNzU3RyBAprRHVja093bmVyCQEMa2V5RHVja093bmVyAQUHYXNzZXRJZAQScmVtYWluaW5nRm9yVW5sb2NrCQBlAgkBDXRyeUdldEludGVnZXIBCQEVa2V5RHVja1BsYXlVbmxvY2tUaW1lAQUHYXNzZXRJZAgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQEMdHJ5R2V0U3RyaW5nAQUKa0R1Y2tPd25lcgUKYWRkcmVzc1N0cgkAAgECHDNJVUxEOiBUaGUgZHVjayBpcyBub3QgeW91cnMDCQBmAgUScmVtYWluaW5nRm9yVW5sb2NrAAAJAAIBCQCsAgIJAKwCAgIhM0lVTDogWW91IG5lZWQgdG8gd2FpdCB0byB1bmxvY2sgCQCkAwEJAGkCBRJyZW1haW5pbmdGb3JVbmxvY2sA6AcCCCBzZWNvbmRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5RHVja0ZpbmlzaFVubG9ja1RpbWUBBQdhc3NldElkCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAJARFnZXRVbmxvY2tEdXJhdGlvbgAFA25pbAELdW5zdGFrZUR1Y2sDCmFzc2V0SWRTdHIKYWRkcmVzc1N0cg9hZGRTcG90c1Rvd2FyZHMEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQ9hZGRTcG90c1Rvd2FyZHMECmtEdWNrT3duZXIJAQxrZXlEdWNrT3duZXIBBQdhc3NldElkBBJyZW1haW5pbmdGb3JVbmxvY2sJAGUCCQENdHJ5R2V0SW50ZWdlcgEJARdrZXlEdWNrRmluaXNoVW5sb2NrVGltZQEFB2Fzc2V0SWQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkBAiE9AgkBDHRyeUdldFN0cmluZwEFCmtEdWNrT3duZXIFCmFkZHJlc3NTdHIJAAIBAhozVUQ6IFRoZSBkdWNrIGlzIG5vdCB5b3VycwMJAGYCBRJyZW1haW5pbmdGb3JVbmxvY2sAAAkAAgEJAKwCAgkArAICAiAzVUQ6IFlvdSBuZWVkIHRvIHdhaXQgdG8gdW5sb2NrIAkApAMBCQBpAgUScmVtYWluaW5nRm9yVW5sb2NrAOgHAgggc2Vjb25kcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUKYWRkcmVzc1N0cgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARNrZXlMb2NrZWREdWNrU3RhdHVzAgUKYWRkcmVzc1N0cgUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBBQprRHVja093bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprU3BvdHNCdXN5CQBlAgkBDXRyeUdldEludGVnZXIBBQprU3BvdHNCdXN5AAEFA25pbAwBaQEVYnV5QWNjZXNzSXRlbUludGVybmFsAQphZGRyZXNzU3RyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIYM0JBSUk6IGludGVybmFsIHVzZSBvbmx5BA9pc3N1ZUFjY2Vzc0l0ZW0JAMIIBQkArAICAgdBQ0NFU1MtCQELZ2V0R2FtZU5hbWUACQCsAgIJAKwCAgkArAICAglbQWNjZXNzXSAJAQ9nZXRMb25nR2FtZU5hbWUAAhAgYWNjZXNzIE5GVCBmb3IgCQEKZ2V0TkZUTmFtZQAAAQAABwQRYWNjZXNzUmFjZUFzc2V0SWQJANgEAQkAuAgBBQ9pc3N1ZUFjY2Vzc0l0ZW0EDGtTcG90c0JvdWdodAkBDmtleVNwb3RzQm91Z2h0AQUKYWRkcmVzc1N0cgkAlAoCCQDMCAIFD2lzc3VlQWNjZXNzSXRlbQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgILYWNjZXNzSXRlbV8FEWFjY2Vzc1JhY2VBc3NldElkAgZfb3duZXIFCmFkZHJlc3NTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgdfb3duaW5nBRFhY2Nlc3NSYWNlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1Nwb3RzQm91Z2h0CQBkAgkBDXRyeUdldEludGVnZXIBBQxrU3BvdHNCb3VnaHQAAQUDbmlsBRFhY2Nlc3NSYWNlQXNzZXRJZAFpAQ9jb25maWd1cmVPcmFjbGUEBm9yYWNsZQlzaG9ydG5hbWUIbG9uZ25hbWUHbmZ0TmFtZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDzNDTzogYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19zaG9ydEdhbWVOYW1lBQlzaG9ydG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgITc3RhdGljX2xvbmdHYW1lTmFtZQUIbG9uZ25hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgIOc3RhdGljX25mdE5hbWUFB25mdE5hbWUFA25pbAFpAQ1kZWxldGVTZXR0aW5nAQNrZXkDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiwzRFM6IE9ubHkgYWRtaW5pc3RyYXRvciBjYW4gY2FsbCB0aGlzIG1ldGhvZAkAzAgCCQELRGVsZXRlRW50cnkBBQNrZXkFA25pbAFpARhidXlBY2Nlc3NJdGVtQW5kTG9ja0R1Y2sABAplZ2dQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEC2R1Y2tQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEECmFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAkAAgECGjNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAiE9AggFCmVnZ1BheW1lbnQGYW1vdW50CQESZ2V0QWNjZXNzSXRlbVByaWNlAAkAAgECJTNCQUk6IFdyb25nIGFtb3VudCBvZiBhc3NldHMgYXR0YWNoZWQEDmFjY2Vzc0l0ZW1EYXRhCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAkAzAgCBQphZGRyZXNzU3RyBQNuaWwFA25pbAMJAAACBQ5hY2Nlc3NJdGVtRGF0YQUOYWNjZXNzSXRlbURhdGEECGJ1cm5DYWxsCQD8BwQJAQ5nZXRCdXJuQWRkcmVzcwACFGJ1cm5BdHRhY2hlZFBheW1lbnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRFZ2dBc3NldElkAAgFCmVnZ1BheW1lbnQGYW1vdW50BQNuaWwDCQAAAgUIYnVybkNhbGwFCGJ1cm5DYWxsBAx2YWxpZFBheW1lbnQDCQAAAggFAWkGY2FsbGVyCQERZ2V0UmVudGluZ0FkZHJlc3MABQNuaWwJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwACAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50BAhsb2NrRGF0YQkAzggCCQEQbG9ja0R1Y2tJbnRlcm5hbAMFCmFkZHJlc3NTdHIFCmFkZHJlc3NTdHIFC2R1Y2tQYXltZW50BQx2YWxpZFBheW1lbnQJAJQKAgUIbG9ja0RhdGEFDmFjY2Vzc0l0ZW1EYXRhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDWJ1eUFjY2Vzc0l0ZW0ABAphZGRyZXNzU3RyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQKZWdnUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAkAAgEJAKwCAgIbM0JBSTogV3JvbmcgYXNzZXQgYXR0YWNoZWQgCQDYBAEJARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAADCQECIT0CCAUKZWdnUGF5bWVudAZhbW91bnQJARJnZXRBY2Nlc3NJdGVtUHJpY2UACQACAQIlM0JBSTogV3JvbmcgYW1vdW50IG9mIGFzc2V0cyBhdHRhY2hlZAQOYWNjZXNzSXRlbURhdGEJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIVYnV5QWNjZXNzSXRlbUludGVybmFsCQDMCAIFCmFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAAIFDmFjY2Vzc0l0ZW1EYXRhBQ5hY2Nlc3NJdGVtRGF0YQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQACAUKZWdnUGF5bWVudAZhbW91bnQFA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwEDHZhbGlkUGF5bWVudAMJAAACCAUBaQZjYWxsZXIJARFnZXRSZW50aW5nQWRkcmVzcwAFA25pbAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAEDCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQJAJQKAgUMdmFsaWRQYXltZW50BQ5hY2Nlc3NJdGVtRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJidXlBY2Nlc3NJdGVtT3RoZXIBDGFkZHJlc3NPdGhlcgQKZWdnUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAkAAgECGjNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAiE9AggFCmVnZ1BheW1lbnQGYW1vdW50CQESZ2V0QWNjZXNzSXRlbVByaWNlAAkAAgECJTNCQUk6IFdyb25nIGFtb3VudCBvZiBhc3NldHMgYXR0YWNoZWQEDmFjY2Vzc0l0ZW1EYXRhCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAkAzAgCBQxhZGRyZXNzT3RoZXIFA25pbAUDbmlsAwkAAAIFDmFjY2Vzc0l0ZW1EYXRhBQ5hY2Nlc3NJdGVtRGF0YQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQACAUKZWdnUGF5bWVudAZhbW91bnQFA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwJAJQKAgUDbmlsBQ5hY2Nlc3NJdGVtRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhsb2NrRHVjawAECmFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwABAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50CQDOCAIJARBsb2NrRHVja0ludGVybmFsAwUKYWRkcmVzc1N0cgUKYWRkcmVzc1N0cgULZHVja1BheW1lbnQFDHZhbGlkUGF5bWVudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQppbml0VW5sb2NrAQphc3NldElkU3RyBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAAMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAkAzggCCQEOaW5pdFVubG9ja0R1Y2sCBQphc3NldElkU3RyBQphZGRyZXNzU3RyBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPbG9ja0R1Y2tSZW50aW5nARRhZGRyZXNzVGFrZVNwb3RzRnJvbQMJAQIhPQIIBQFpBmNhbGxlcgkBEWdldFJlbnRpbmdBZGRyZXNzAAkAAgECEzNVRE86IFJlbnRpbmcgb25seSEECmFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAACQEQbG9ja0R1Y2tJbnRlcm5hbAMFCmFkZHJlc3NTdHIFFGFkZHJlc3NUYWtlU3BvdHNGcm9tBQtkdWNrUGF5bWVudAFpARF1bmxvY2tEdWNrUmVudGluZwIKYXNzZXRJZFN0cg9hZGRTcG90c1Rvd2FyZHMDCQECIT0CCAUBaQZjYWxsZXIJARFnZXRSZW50aW5nQWRkcmVzcwAJAAIBAhMzVURPOiBSZW50aW5nIG9ubHkhBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgkBC3Vuc3Rha2VEdWNrAwUKYXNzZXRJZFN0cgUKYWRkcmVzc1N0cgUPYWRkU3BvdHNUb3dhcmRzAWkBD3VubG9ja0R1Y2tPdGhlcgEKYXNzZXRJZFN0cgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECETNVRE86IEFkbWluIG9ubHkhBAhvd25lcktleQkBDHRyeUdldFN0cmluZwEJAQxrZXlEdWNrT3duZXIBCQDZBAEFCmFzc2V0SWRTdHIJAQt1bnN0YWtlRHVjawMFCmFzc2V0SWRTdHIFCG93bmVyS2V5BQhvd25lcktleQFpAQp1bmxvY2tEdWNrBAphc3NldElkU3RyAnRzB2FsbG93ZWQJc2lnbmF0dXJlAwkBAiE9AgUHYWxsb3dlZAYJAAIBAiQzVUQ6IE5vdCBhbGxvd2VkIHRvIHVubG9jayB0aGUgZHVjayEECE1TSU5IT1VSAIDd2wEECWN1cnJlbnRUcwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQBmAgUJY3VycmVudFRzCQBkAgUCdHMFCE1TSU5IT1VSCQACAQIYM1VEOiBPdXRkYXRlZCBzaWduYXR1cmUhBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQEdGV4dAkAuQkCCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgkApAMBBQJ0cwkAzAgCCQClAwEFB2FsbG93ZWQFA25pbAIBOwMJAQEhAQkAxBMDCQCbAwEFBHRleHQJANkEAQUJc2lnbmF0dXJlCQEQZ2V0QmFja2VuZFB1YktleQAJAAIBCQCsAgIJAKwCAgkArAICAiMzVUQ6IEludmFsaWQgcHJvb2YgZnJvbSBiYWNrZW5kIGtleQkA2AQBCQEQZ2V0QmFja2VuZFB1YktleQACASAFBHRleHQEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAADCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQJAM4IAgkBC3Vuc3Rha2VEdWNrAwUKYXNzZXRJZFN0cgUKYWRkcmVzc1N0cgUKYWRkcmVzc1N0cgUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAMJAQlpc1Rlc3RFbnYACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAlmaXJzdFVzZXIBIFEc5P1m/xJp0vFaFJ87suL0O3/By2gnojRebDjXV91tBApzZWNvbmRVc2VyASBccg5LrvEhT2bmGUX6aqKx7bE2KVlfGczMsOFNQYhqfQQJdGhpcmRVc2VyASCgr5HlLXlDYWEyEq2OufoYWVGdLVNJNsPQo/eoYBk7TgQPZmlyc3RVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJZmlyc3RVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCWZpcnN0VXNlcgABAAAEEHNlY29uZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQpzZWNvbmRVc2VyAAEAAAQPdGhpcmRVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJdGhpcmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCXRoaXJkVXNlcgABAAAED3NpZ25hdHVyZXNDb3VudAkAZAIJAGQCBQ9maXJzdFVzZXJTaWduZWQFEHNlY29uZFVzZXJTaWduZWQFD3RoaXJkVXNlclNpZ25lZAQHJG1hdGNoMAUCdHgJAGcCBQ9zaWduYXR1cmVzQ291bnQAAiS2xRI=", "height": 3387450, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8NJ8iKQHbbmDSqzgDbyDUgB7Bt8k5xz1SwVVbGEzdqi7 Next: E61npmFxMbufrx1Fuwn81t8SBVuoo2oMF28GNSFN5N11 Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetInteger (key) = match getInteger(this, key) {
55 case b: Int =>
66 b
77 case _ =>
88 0
99 }
1010
1111
1212 func isTestEnv () = {
1313 let testenv = match getBoolean(this, "TESTENV") {
1414 case x: Boolean =>
1515 x
1616 case _ =>
1717 false
1818 }
1919 testenv
2020 }
2121
2222
2323 func keyDuckPlayUnlockTime (assetId) = (("duck_" + toBase58String(assetId)) + "_unlockTime")
2424
2525
2626 func keyDuckFinishUnlockTime (assetId) = (("duck_" + toBase58String(assetId)) + "finish_unlockTime")
2727
2828
2929 func keyDuckOwner (assetId) = (("duck_" + toBase58String(assetId)) + "_owner")
3030
3131
3232 func keySpotsBought (addressStr) = (("address_" + addressStr) + "_spotsBought")
3333
3434
3535 func keySpotsBusy (addressStr) = (("address_" + addressStr) + "_spotsBusy")
3636
3737
3838 func keyLockedDuckStatus (addressStr,assetIdStr) = (((("address_" + addressStr) + "_lockedDuck_") + assetIdStr) + "_status")
3939
4040
4141 func keyDuckV2 (addressStr,assetIdStr) = (((("address_" + addressStr) + "_lockedDuck_") + assetIdStr) + "_v2")
4242
4343
4444 func getDuckDetails (assetId) = {
4545 let assetName = value(value(assetInfo(assetId)).name)
4646 let assetNameParts = split(assetName, "")
4747 let isJackpot = (assetNameParts[(size(assetNameParts) - 2)] == "J")
4848 let assetColor = if (isJackpot)
4949 then "B"
5050 else assetNameParts[(size(assetNameParts) - 1)]
5151 $Tuple2(assetColor, isJackpot)
5252 }
5353
5454
5555 func tryGetStringExternal (address,key) = match getString(address, key) {
5656 case a: String =>
5757 a
5858 case _ =>
5959 ""
6060 }
6161
6262
6363 func tryGetBoolean (key) = match getBoolean(key) {
6464 case b: Boolean =>
6565 b
6666 case _ =>
6767 false
6868 }
6969
7070
7171 func tryGetString (key) = tryGetStringExternal(this, key)
7272
7373
7474 func staticKey_oracleAddress () = "static_oracleAddress"
7575
7676
7777 func staticKey_eggAssetId () = "static_eggAssetId"
7878
7979
8080 func staticKey_incubatorAddress () = "static_incubatorAddress"
8181
8282
8383 func staticKey_breederAddress () = "static_breederAddress"
8484
8585
8686 func staticKey_farmingAddress () = "static_farmingAddress"
8787
8888
8989 func staticKey_rentingAddress () = "static_rentingAddress"
9090
9191
9292 func staticKey_shortGameName () = "static_shortGameName"
9393
9494
9595 func staticKey_longGameName () = "static_longGameName"
9696
9797
9898 func staticKey_nftName () = "static_nftName"
9999
100100
101101 func staticKey_backendPubKey () = "static_backendPubKey"
102102
103103
104104 func staticKey_accessItemAssetId () = "static_accessItemAssetId"
105105
106106
107107 func staticKey_accessItemPrice () = "static_accessItemPrice"
108108
109109
110110 func staticKey_minLockDuration () = "static_minLockDuration"
111111
112112
113113 func staticKey_UnlockDuration () = "static_UnlockDuration"
114114
115115
116116 func staticKey_boosterBuyAssetId () = "static_boosterBuyAssetId"
117117
118118
119119 func staticKey_extraFee () = "static_extraFee"
120120
121121
122122 func staticKey_feeAggregator () = "static_feeAggregator"
123123
124124
125125 func staticKey_boosterPriceLevel (level) = ("static_boosterPriceLevel_" + level)
126126
127127
128128 func staticKey_boosterName (level) = ("static_boosterName_" + level)
129129
130130
131131 func staticKey_burnAddress () = "static_burnAddress"
132132
133133
134134 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
135135
136136
137137 func getGameName () = valueOrErrorMessage(getString(staticKey_shortGameName()), "3GGN: There is no game name defined!")
138138
139139
140140 func getLongGameName () = valueOrErrorMessage(getString(staticKey_longGameName()), "3GLGN: There is no long game name defined!")
141141
142142
143143 func getNFTName () = valueOrErrorMessage(getString(staticKey_nftName()), "3GNN: There is no nft name defined!")
144144
145145
146146 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
147147
148148
149149 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
150150
151151
152152 func getRentingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rentingAddress())))
153153
154154
155155 func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_farmingAddress())))
156156
157157
158158 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
159159
160160
161161 func getBackendPubKey () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_backendPubKey()))
162162
163163
164164 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
165165
166166
167167 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
168168
169169
170170 func getAccessItemAssetId () = fromBase58String(tryGetString(staticKey_accessItemAssetId()))
171171
172172
173173 func getAccessItemPrice () = tryGetInteger(staticKey_accessItemPrice())
174174
175175
176176 func getMinLockDuration () = tryGetInteger(staticKey_minLockDuration())
177177
178178
179179 func getUnlockDuration () = tryGetInteger(staticKey_UnlockDuration())
180180
181181
182182 func getBosterBuyAssetId () = fromBase58String(tryGetString(staticKey_boosterBuyAssetId()))
183183
184184
185185 func getBosterPriceForLevel (level) = valueOrErrorMessage(getInteger(staticKey_boosterPriceLevel(toString(level))), "3GBPFL: There is no price value for this level of booster")
186186
187187
188188 func getBosterNameForLevel (level) = valueOrErrorMessage(getString(staticKey_boosterName(toString(level))), "3GBNFL: There is no such booster")
189189
190190
191191 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
192192 then throw("RCAP: Please attach waves")
193193 else {
194194 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
195195 if ((payment.amount != feeAmount))
196196 then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
197197 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
198198 }
199199
200200
201201 func asString (value) = match value {
202202 case string: String =>
203203 string
204204 case _ =>
205205 throw("3AS: wrong type, expected: String")
206206 }
207207
208208
209209 func lockDuckInternal (addressStr,takeSpotsFrom,pmt) = {
210210 let assetId = value(pmt.assetId)
211211 let assetIssuer = value(assetInfo(assetId)).issuer
212212 let tDuckDetails = getDuckDetails(assetId)
213213 let assetColor = tDuckDetails._1
214214 let isJackpot = tDuckDetails._2
215215 let kSpotsBusy = keySpotsBusy(takeSpotsFrom)
216216 let spotsBusy = tryGetInteger(kSpotsBusy)
217217 let kSpotsBought = keySpotsBought(takeSpotsFrom)
218218 let addressSpotsAvailable = (tryGetInteger(kSpotsBought) - spotsBusy)
219219 if ((pmt.amount != 1))
220220 then throw("NFT is not attached")
221221 else if (if ((assetIssuer != getIncubatorAddress()))
222222 then (assetIssuer != getBreederAddress())
223223 else false)
224224 then throw("ivalid NFT attached")
225225 else if ((0 >= addressSpotsAvailable))
226226 then throw(("No spots available in hunt for: " + takeSpotsFrom))
227227 else {
228228 let kPerchesAvailable = ((("address_" + toString(this)) + "_perchesAvailable_") + assetColor)
229229 let perchesAvailable = match getInteger(getFarmingAddress(), kPerchesAvailable) {
230230 case b: Int =>
231231 b
232232 case _ =>
233233 0
234234 }
235235 if ((perchesAvailable == perchesAvailable))
236236 then {
237237 let eggAssetId = getEggAssetId()
238238 [IntegerEntry(kSpotsBusy, (spotsBusy + 1)), StringEntry(keyDuckOwner(assetId), addressStr), BooleanEntry(keyLockedDuckStatus(addressStr, toBase58String(assetId)), true), IntegerEntry(keyDuckPlayUnlockTime(assetId), (lastBlock.timestamp + getMinLockDuration())), BooleanEntry(keyDuckV2(addressStr, toBase58String(assetId)), true)]
239239 }
240240 else throw("Strict value is not equal to itself.")
241241 }
242242 }
243243
244244
245245 func initUnlockDuck (assetIdStr,addressStr) = {
246246 let assetId = fromBase58String(assetIdStr)
247247 let tDuckDetails = getDuckDetails(assetId)
248248 let assetColor = tDuckDetails._1
249249 let isJackpot = tDuckDetails._2
250250 let kSpotsBusy = keySpotsBusy(addressStr)
251251 let kDuckOwner = keyDuckOwner(assetId)
252252 let remainingForUnlock = (tryGetInteger(keyDuckPlayUnlockTime(assetId)) - lastBlock.timestamp)
253253 if ((tryGetString(kDuckOwner) != addressStr))
254254 then throw("3IULD: The duck is not yours")
255255 else if ((remainingForUnlock > 0))
256256 then throw((("3IUL: You need to wait to unlock " + toString((remainingForUnlock / 1000))) + " seconds"))
257257 else [IntegerEntry(keyDuckFinishUnlockTime(assetId), (lastBlock.timestamp + getUnlockDuration()))]
258258 }
259259
260260
261261 func unstakeDuck (assetIdStr,addressStr,addSpotsTowards) = {
262262 let assetId = fromBase58String(assetIdStr)
263263 let tDuckDetails = getDuckDetails(assetId)
264264 let assetColor = tDuckDetails._1
265265 let isJackpot = tDuckDetails._2
266266 let kSpotsBusy = keySpotsBusy(addSpotsTowards)
267267 let kDuckOwner = keyDuckOwner(assetId)
268268 let remainingForUnlock = (tryGetInteger(keyDuckFinishUnlockTime(assetId)) - lastBlock.timestamp)
269269 if ((tryGetString(kDuckOwner) != addressStr))
270270 then throw("3UD: The duck is not yours")
271271 else if ((remainingForUnlock > 0))
272272 then throw((("3UD: You need to wait to unlock " + toString((remainingForUnlock / 1000))) + " seconds"))
273273 else [ScriptTransfer(Address(fromBase58String(addressStr)), 1, assetId), DeleteEntry(keyLockedDuckStatus(addressStr, assetIdStr)), DeleteEntry(kDuckOwner), IntegerEntry(kSpotsBusy, (tryGetInteger(kSpotsBusy) - 1))]
274274 }
275275
276276
277277 @Callable(i)
278278 func buyAccessItemInternal (addressStr) = if ((i.caller != this))
279279 then throw("3BAII: internal use only")
280280 else {
281281 let issueAccessItem = Issue(("ACCESS-" + getGameName()), ((("[Access] " + getLongGameName()) + " access NFT for ") + getNFTName()), 1, 0, false)
282282 let accessRaceAssetId = toBase58String(calculateAssetId(issueAccessItem))
283283 let kSpotsBought = keySpotsBought(addressStr)
284284 $Tuple2([issueAccessItem, StringEntry((("accessItem_" + accessRaceAssetId) + "_owner"), addressStr), StringEntry((("address_" + addressStr) + "_owning"), accessRaceAssetId), IntegerEntry(kSpotsBought, (tryGetInteger(kSpotsBought) + 1))], accessRaceAssetId)
285285 }
286286
287287
288288
289289 @Callable(i)
290290 func configureOracle (oracle,shortname,longname,nftName) = if ((i.caller != this))
291291 then throw("3CO: admin only")
292292 else [StringEntry("static_oracleAddress", oracle), StringEntry("static_shortGameName", shortname), StringEntry("static_longGameName", longname), StringEntry("static_nftName", nftName)]
293293
294294
295295
296296 @Callable(i)
297297 func deleteSetting (key) = if ((i.caller != this))
298298 then throw("3DS: Only administrator can call this method")
299299 else [DeleteEntry(key)]
300300
301301
302302
303303 @Callable(i)
304304 func buyAccessItemAndLockDuck () = {
305305 let eggPayment = value(i.payments[0])
306306 let duckPayment = value(i.payments[1])
307307 let addressStr = toString(i.originCaller)
308308 if ((eggPayment.assetId != getAccessItemAssetId()))
309309 then throw("3BAI: Wrong asset attached")
310310 else if ((eggPayment.amount != getAccessItemPrice()))
311311 then throw("3BAI: Wrong amount of assets attached")
312312 else {
313313 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
314314 if ((accessItemData == accessItemData))
315315 then {
316316 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), eggPayment.amount)])
317317 if ((burnCall == burnCall))
318318 then {
319319 let validPayment = if ((i.caller == getRentingAddress()))
320320 then nil
321321 else checkAdditionalPayment(i.payments[2])
322322 if ((validPayment == validPayment))
323323 then {
324324 let lockData = (lockDuckInternal(addressStr, addressStr, duckPayment) ++ validPayment)
325325 $Tuple2(lockData, accessItemData)
326326 }
327327 else throw("Strict value is not equal to itself.")
328328 }
329329 else throw("Strict value is not equal to itself.")
330330 }
331331 else throw("Strict value is not equal to itself.")
332332 }
333333 }
334334
335335
336336
337337 @Callable(i)
338338 func buyAccessItem () = {
339339 let addressStr = toString(i.originCaller)
340340 let eggPayment = value(i.payments[0])
341341 if ((eggPayment.assetId != getAccessItemAssetId()))
342342 then throw(("3BAI: Wrong asset attached " + toBase58String(getAccessItemAssetId())))
343343 else if ((eggPayment.amount != getAccessItemPrice()))
344344 then throw("3BAI: Wrong amount of assets attached")
345345 else {
346346 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
347347 if ((accessItemData == accessItemData))
348348 then {
349349 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), eggPayment.amount)])
350350 if ((burnCall == burnCall))
351351 then {
352352 let validPayment = if ((i.caller == getRentingAddress()))
353353 then nil
354354 else checkAdditionalPayment(i.payments[1])
355355 if ((validPayment == validPayment))
356356 then $Tuple2(validPayment, accessItemData)
357357 else throw("Strict value is not equal to itself.")
358358 }
359359 else throw("Strict value is not equal to itself.")
360360 }
361361 else throw("Strict value is not equal to itself.")
362362 }
363363 }
364364
365365
366366
367367 @Callable(i)
368368 func buyAccessItemOther (addressOther) = {
369369 let eggPayment = value(i.payments[0])
370370 if ((eggPayment.assetId != getAccessItemAssetId()))
371371 then throw("3BAI: Wrong asset attached")
372372 else if ((eggPayment.amount != getAccessItemPrice()))
373373 then throw("3BAI: Wrong amount of assets attached")
374374 else {
375375 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressOther], nil))
376376 if ((accessItemData == accessItemData))
377377 then {
378378 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), eggPayment.amount)])
379379 if ((burnCall == burnCall))
380380 then $Tuple2(nil, accessItemData)
381381 else throw("Strict value is not equal to itself.")
382382 }
383383 else throw("Strict value is not equal to itself.")
384384 }
385385 }
386386
387387
388388
389389 @Callable(i)
390390 func lockDuck () = {
391391 let addressStr = toString(i.originCaller)
392392 let duckPayment = value(i.payments[0])
393393 let validPayment = checkAdditionalPayment(i.payments[1])
394394 if ((validPayment == validPayment))
395395 then (lockDuckInternal(addressStr, addressStr, duckPayment) ++ validPayment)
396396 else throw("Strict value is not equal to itself.")
397397 }
398398
399399
400400
401401 @Callable(i)
402402 func initUnlock (assetIdStr) = {
403403 let addressStr = toString(i.caller)
404404 let validPayment = checkAdditionalPayment(i.payments[0])
405405 if ((validPayment == validPayment))
406406 then (initUnlockDuck(assetIdStr, addressStr) ++ validPayment)
407407 else throw("Strict value is not equal to itself.")
408408 }
409409
410410
411411
412412 @Callable(i)
413413 func lockDuckRenting (addressTakeSpotsFrom) = if ((i.caller != getRentingAddress()))
414414 then throw("3UDO: Renting only!")
415415 else {
416416 let addressStr = toString(i.caller)
417417 let duckPayment = value(i.payments[0])
418418 lockDuckInternal(addressStr, addressTakeSpotsFrom, duckPayment)
419419 }
420420
421421
422422
423423 @Callable(i)
424424 func unlockDuckRenting (assetIdStr,addSpotsTowards) = if ((i.caller != getRentingAddress()))
425425 then throw("3UDO: Renting only!")
426426 else {
427427 let addressStr = toString(i.caller)
428428 unstakeDuck(assetIdStr, addressStr, addSpotsTowards)
429429 }
430430
431431
432432
433433 @Callable(i)
434434 func unlockDuckOther (assetIdStr) = if ((i.caller != this))
435435 then throw("3UDO: Admin only!")
436436 else {
437437 let ownerKey = tryGetString(keyDuckOwner(fromBase58String(assetIdStr)))
438438 unstakeDuck(assetIdStr, ownerKey, ownerKey)
439439 }
440440
441441
442442
443443 @Callable(i)
444444 func unlockDuck (assetIdStr,ts,allowed,signature) = if ((allowed != true))
445445 then throw("3UD: Not allowed to unlock the duck!")
446446 else {
447447 let MSINHOUR = 3600000
448448 let currentTs = lastBlock.timestamp
449449 if ((currentTs > (ts + MSINHOUR)))
450450 then throw("3UD: Outdated signature!")
451451 else {
452452 let addressStr = toString(i.caller)
453453 let text = makeString([assetIdStr, toString(ts), toString(allowed)], ";")
454454 if (!(sigVerify_8Kb(toBytes(text), fromBase58String(signature), getBackendPubKey())))
455455 then throw(((("3UD: Invalid proof from backend key" + toBase58String(getBackendPubKey())) + " ") + text))
456456 else {
457457 let validPayment = checkAdditionalPayment(i.payments[0])
458458 if ((validPayment == validPayment))
459459 then (unstakeDuck(assetIdStr, addressStr, addressStr) ++ validPayment)
460460 else throw("Strict value is not equal to itself.")
461461 }
462462 }
463463 }
464464
465465
466466 @Verifier(tx)
467467 func verify () = if (isTestEnv())
468468 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
469469 else {
470470 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
471471 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
472472 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
473473 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
474474 then 1
475475 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
476476 then 1
477477 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
478478 then 1
479479 else 0
480480 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
481481 then 1
482482 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
483483 then 1
484484 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
485485 then 1
486486 else 0
487487 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
488488 then 1
489489 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
490490 then 1
491491 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
492492 then 1
493493 else 0
494494 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
495495 match tx {
496496 case _ =>
497497 (signaturesCount >= 2)
498498 }
499499 }
500500

github/deemru/w8io/026f985 
67.35 ms