tx · C1WjZXv9nKdoDi4pbJa388QKjQg9Gcoyx1gMWRHnJM4r

3P96rN9M2g7E8WtgLC6XQgoJ2rz341tpkbG:  -0.01300000 Waves

2024.02.24 17:19 [4056218] smart account 3P96rN9M2g7E8WtgLC6XQgoJ2rz341tpkbG > SELF 0.00000000 Waves

{ "type": 13, "id": "C1WjZXv9nKdoDi4pbJa388QKjQg9Gcoyx1gMWRHnJM4r", "fee": 1300000, "feeAssetId": null, "timestamp": 1708784444894, "version": 2, "chainId": 87, "sender": "3P96rN9M2g7E8WtgLC6XQgoJ2rz341tpkbG", "senderPublicKey": "D627TuphR2x4Z5yLbJjyhoM9KBhfjUPSRgKAUiQthmoi", "proofs": [ "27EfaEWB4VGG9W4Wv5vjchGwM1B5NgDhJaNdPKMF4wUvCjzfgM4kNG2oqWuYDmETJBB4wXjJD5ytTFwTFqeP96vC" ], "script": "base64:BgI8CAISAwoBCBIGCgQICAgIEgMKAQgSABIAEgMKAQgSABIDCgEIEgMKAQgSBAoCCAgSAwoBCBIGCgQIAQQINgENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEVa2V5RHVja1BsYXlVbmxvY2tUaW1lAQdhc3NldElkCQCsAgIJAKwCAgIFZHVja18JANgEAQUHYXNzZXRJZAILX3VubG9ja1RpbWUBF2tleUR1Y2tGaW5pc2hVbmxvY2tUaW1lAQdhc3NldElkCQCsAgIJAKwCAgIFZHVja18JANgEAQUHYXNzZXRJZAIRZmluaXNoX3VubG9ja1RpbWUBDGtleUR1Y2tPd25lcgEHYXNzZXRJZAkArAICCQCsAgICBWR1Y2tfCQDYBAEFB2Fzc2V0SWQCBl9vd25lcgEOa2V5U3BvdHNCb3VnaHQBCmFkZHJlc3NTdHIJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIMX3Nwb3RzQm91Z2h0AQxrZXlTcG90c0J1c3kBCmFkZHJlc3NTdHIJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIKX3Nwb3RzQnVzeQETa2V5TG9ja2VkRHVja1N0YXR1cwIKYWRkcmVzc1N0cgphc3NldElkU3RyCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgxfbG9ja2VkRHVja18FCmFzc2V0SWRTdHICB19zdGF0dXMBCWtleUR1Y2tWMgIKYWRkcmVzc1N0cgphc3NldElkU3RyCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgxfbG9ja2VkRHVja18FCmFzc2V0SWRTdHICA192MgEOZ2V0RHVja0RldGFpbHMBB2Fzc2V0SWQECWFzc2V0TmFtZQkBBXZhbHVlAQgJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZARuYW1lBA5hc3NldE5hbWVQYXJ0cwkAtQkCBQlhc3NldE5hbWUCAAQJaXNKYWNrcG90CQAAAgkAkQMCBQ5hc3NldE5hbWVQYXJ0cwkAZQIJAJADAQUOYXNzZXROYW1lUGFydHMAAgIBSgQKYXNzZXRDb2xvcgMFCWlzSmFja3BvdAIBQgkAkQMCBQ5hc3NldE5hbWVQYXJ0cwkAZQIJAJADAQUOYXNzZXROYW1lUGFydHMAAQkAlAoCBQphc3NldENvbG9yBQlpc0phY2twb3QBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAoAgBBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBFHN0YXRpY0tleV9lZ2dBc3NldElkAAIRc3RhdGljX2VnZ0Fzc2V0SWQBGnN0YXRpY0tleV9pbmN1YmF0b3JBZGRyZXNzAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEYc3RhdGljS2V5X2Zhcm1pbmdBZGRyZXNzAAIVc3RhdGljX2Zhcm1pbmdBZGRyZXNzARhzdGF0aWNLZXlfcmVudGluZ0FkZHJlc3MAAhVzdGF0aWNfcmVudGluZ0FkZHJlc3MBF3N0YXRpY0tleV9zaG9ydEdhbWVOYW1lAAIUc3RhdGljX3Nob3J0R2FtZU5hbWUBFnN0YXRpY0tleV9sb25nR2FtZU5hbWUAAhNzdGF0aWNfbG9uZ0dhbWVOYW1lARFzdGF0aWNLZXlfbmZ0TmFtZQACDnN0YXRpY19uZnROYW1lARdzdGF0aWNLZXlfYmFja2VuZFB1YktleQACFHN0YXRpY19iYWNrZW5kUHViS2V5ARtzdGF0aWNLZXlfYWNjZXNzSXRlbUFzc2V0SWQAAhhzdGF0aWNfYWNjZXNzSXRlbUFzc2V0SWQBGXN0YXRpY0tleV9hY2Nlc3NJdGVtUHJpY2UAAhZzdGF0aWNfYWNjZXNzSXRlbVByaWNlARlzdGF0aWNLZXlfbWluTG9ja0R1cmF0aW9uAAIWc3RhdGljX21pbkxvY2tEdXJhdGlvbgEYc3RhdGljS2V5X1VubG9ja0R1cmF0aW9uAAIVc3RhdGljX1VubG9ja0R1cmF0aW9uARtzdGF0aWNLZXlfYm9vc3RlckJ1eUFzc2V0SWQAAhhzdGF0aWNfYm9vc3RlckJ1eUFzc2V0SWQBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAhRzdGF0aWNfZmVlQWdncmVnYXRvcgEbc3RhdGljS2V5X2Jvb3N0ZXJQcmljZUxldmVsAQVsZXZlbAkArAICAhlzdGF0aWNfYm9vc3RlclByaWNlTGV2ZWxfBQVsZXZlbAEVc3RhdGljS2V5X2Jvb3N0ZXJOYW1lAQVsZXZlbAkArAICAhNzdGF0aWNfYm9vc3Rlck5hbWVfBQVsZXZlbAEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAQtnZXRHYW1lTmFtZQAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEXc3RhdGljS2V5X3Nob3J0R2FtZU5hbWUAAiQzR0dOOiBUaGVyZSBpcyBubyBnYW1lIG5hbWUgZGVmaW5lZCEBD2dldExvbmdHYW1lTmFtZQAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEWc3RhdGljS2V5X2xvbmdHYW1lTmFtZQACKjNHTEdOOiBUaGVyZSBpcyBubyBsb25nIGdhbWUgbmFtZSBkZWZpbmVkIQEKZ2V0TkZUTmFtZQAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQERc3RhdGljS2V5X25mdE5hbWUAAiMzR05OOiBUaGVyZSBpcyBubyBuZnQgbmFtZSBkZWZpbmVkIQETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGnN0YXRpY0tleV9pbmN1YmF0b3JBZGRyZXNzAAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAARFnZXRSZW50aW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9yZW50aW5nQWRkcmVzcwABEWdldEZhcm1pbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2Zhcm1pbmdBZGRyZXNzAAENZ2V0RWdnQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARRzdGF0aWNLZXlfZWdnQXNzZXRJZAABEGdldEJhY2tlbmRQdWJLZXkACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2JhY2tlbmRQdWJLZXkAARBnZXRGZWVBZ2dyZWdhdG9yAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAJANkEAQkBDHRyeUdldFN0cmluZwEJARtzdGF0aWNLZXlfYWNjZXNzSXRlbUFzc2V0SWQAARJnZXRBY2Nlc3NJdGVtUHJpY2UACQENdHJ5R2V0SW50ZWdlcgEJARlzdGF0aWNLZXlfYWNjZXNzSXRlbVByaWNlAAESZ2V0TWluTG9ja0R1cmF0aW9uAAkBDXRyeUdldEludGVnZXIBCQEZc3RhdGljS2V5X21pbkxvY2tEdXJhdGlvbgABEWdldFVubG9ja0R1cmF0aW9uAAkBDXRyeUdldEludGVnZXIBCQEYc3RhdGljS2V5X1VubG9ja0R1cmF0aW9uAAETZ2V0Qm9zdGVyQnV5QXNzZXRJZAAJANkEAQkBDHRyeUdldFN0cmluZwEJARtzdGF0aWNLZXlfYm9vc3RlckJ1eUFzc2V0SWQAARZnZXRCb3N0ZXJQcmljZUZvckxldmVsAQVsZXZlbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARtzdGF0aWNLZXlfYm9vc3RlclByaWNlTGV2ZWwBCQCkAwEFBWxldmVsAjkzR0JQRkw6IFRoZXJlIGlzIG5vIHByaWNlIHZhbHVlIGZvciB0aGlzIGxldmVsIG9mIGJvb3N0ZXIBFWdldEJvc3Rlck5hbWVGb3JMZXZlbAEFbGV2ZWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVc3RhdGljS2V5X2Jvb3N0ZXJOYW1lAQkApAMBBQVsZXZlbAIgM0dCTkZMOiBUaGVyZSBpcyBubyBzdWNoIGJvb3N0ZXIBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBB3BheW1lbnQDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECGVJDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIcUkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQlmZWVBbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQlmZWVBbW91bnQFBHVuaXQFA25pbAEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIhM0FTOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nARBsb2NrRHVja0ludGVybmFsAwphZGRyZXNzU3RyDXRha2VTcG90c0Zyb20DcG10BAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEC2Fzc2V0SXNzdWVyCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQ10YWtlU3BvdHNGcm9tBAlzcG90c0J1c3kJAQ10cnlHZXRJbnRlZ2VyAQUKa1Nwb3RzQnVzeQQMa1Nwb3RzQm91Z2h0CQEOa2V5U3BvdHNCb3VnaHQBBQ10YWtlU3BvdHNGcm9tBBVhZGRyZXNzU3BvdHNBdmFpbGFibGUJAGUCCQENdHJ5R2V0SW50ZWdlcgEFDGtTcG90c0JvdWdodAUJc3BvdHNCdXN5AwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQDAwkBAiE9AgULYXNzZXRJc3N1ZXIJARNnZXRJbmN1YmF0b3JBZGRyZXNzAAkBAiE9AgULYXNzZXRJc3N1ZXIJARFnZXRCcmVlZGVyQWRkcmVzcwAHCQACAQITaXZhbGlkIE5GVCBhdHRhY2hlZAMJAGcCAAAFFWFkZHJlc3NTcG90c0F2YWlsYWJsZQkAAgEJAKwCAgIgTm8gc3BvdHMgYXZhaWxhYmxlIGluIGh1bnQgZm9yOiAFDXRha2VTcG90c0Zyb20EEWtQZXJjaGVzQXZhaWxhYmxlCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBBQR0aGlzAhJfcGVyY2hlc0F2YWlsYWJsZV8FCmFzc2V0Q29sb3IEEHBlcmNoZXNBdmFpbGFibGUEByRtYXRjaDAJAJoIAgkBEWdldEZhcm1pbmdBZGRyZXNzAAURa1BlcmNoZXNBdmFpbGFibGUDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAADCQAAAgUQcGVyY2hlc0F2YWlsYWJsZQUQcGVyY2hlc0F2YWlsYWJsZQQKZWdnQXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprU3BvdHNCdXN5CQBkAgUJc3BvdHNCdXN5AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tPd25lcgEFB2Fzc2V0SWQFCmFkZHJlc3NTdHIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARNrZXlMb2NrZWREdWNrU3RhdHVzAgUKYWRkcmVzc1N0cgkA2AQBBQdhc3NldElkBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleUR1Y2tQbGF5VW5sb2NrVGltZQEFB2Fzc2V0SWQJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkBEmdldE1pbkxvY2tEdXJhdGlvbgAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQlrZXlEdWNrVjICBQphZGRyZXNzU3RyCQDYBAEFB2Fzc2V0SWQGBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmluaXRVbmxvY2tEdWNrAgphc3NldElkU3RyCmFkZHJlc3NTdHIEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQphZGRyZXNzU3RyBAprRHVja093bmVyCQEMa2V5RHVja093bmVyAQUHYXNzZXRJZAQScmVtYWluaW5nRm9yVW5sb2NrCQBlAgkBDXRyeUdldEludGVnZXIBCQEVa2V5RHVja1BsYXlVbmxvY2tUaW1lAQUHYXNzZXRJZAgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQEMdHJ5R2V0U3RyaW5nAQUKa0R1Y2tPd25lcgUKYWRkcmVzc1N0cgkAAgECHDNJVUxEOiBUaGUgZHVjayBpcyBub3QgeW91cnMDCQBmAgUScmVtYWluaW5nRm9yVW5sb2NrAAAJAAIBCQCsAgIJAKwCAgIhM0lVTDogWW91IG5lZWQgdG8gd2FpdCB0byB1bmxvY2sgCQCkAwEJAGkCBRJyZW1haW5pbmdGb3JVbmxvY2sA6AcCCCBzZWNvbmRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5RHVja0ZpbmlzaFVubG9ja1RpbWUBBQdhc3NldElkCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAJARFnZXRVbmxvY2tEdXJhdGlvbgAFA25pbAELdW5zdGFrZUR1Y2sDCmFzc2V0SWRTdHIKYWRkcmVzc1N0cg9hZGRTcG90c1Rvd2FyZHMEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQMdER1Y2tEZXRhaWxzCQEOZ2V0RHVja0RldGFpbHMBBQdhc3NldElkBAphc3NldENvbG9yCAUMdER1Y2tEZXRhaWxzAl8xBAlpc0phY2twb3QIBQx0RHVja0RldGFpbHMCXzIECmtTcG90c0J1c3kJAQxrZXlTcG90c0J1c3kBBQ9hZGRTcG90c1Rvd2FyZHMECmtEdWNrT3duZXIJAQxrZXlEdWNrT3duZXIBBQdhc3NldElkBBJyZW1haW5pbmdGb3JVbmxvY2sJAGUCCQENdHJ5R2V0SW50ZWdlcgEJARdrZXlEdWNrRmluaXNoVW5sb2NrVGltZQEFB2Fzc2V0SWQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkBAiE9AgkBDHRyeUdldFN0cmluZwEFCmtEdWNrT3duZXIFCmFkZHJlc3NTdHIJAAIBAhozVUQ6IFRoZSBkdWNrIGlzIG5vdCB5b3VycwMJAGYCBRJyZW1haW5pbmdGb3JVbmxvY2sAAAkAAgEJAKwCAgkArAICAiAzVUQ6IFlvdSBuZWVkIHRvIHdhaXQgdG8gdW5sb2NrIAkApAMBCQBpAgUScmVtYWluaW5nRm9yVW5sb2NrAOgHAgggc2Vjb25kcwQEaXNWMgkBDXRyeUdldEJvb2xlYW4BCQEJa2V5RHVja1YyAgUKYWRkcmVzc1N0cgUKYXNzZXRJZFN0cgQJZG9VbnN0YWtlAwUEaXNWMgUDbmlsBA91bnN0YWtlRnVuY05hbWUDCQAAAgUJaXNKYWNrcG90BgIddW5zdGFrZUphY2twb3RXaXRob3V0Q2xhaW1FZ2cCFnVuc3Rha2VORlRXaXRob3V0Q2xhaW0EBGludjEJAPwHBAkBEWdldEZhcm1pbmdBZGRyZXNzAAUPdW5zdGFrZUZ1bmNOYW1lCQDMCAIFCmFzc2V0SWRTdHIFA25pbAUDbmlsAwkAAAIFBGludjEFBGludjEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQlkb1Vuc3Rha2UFCWRvVW5zdGFrZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUKYWRkcmVzc1N0cgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARNrZXlMb2NrZWREdWNrU3RhdHVzAgUKYWRkcmVzc1N0cgUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBBQprRHVja093bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprU3BvdHNCdXN5CQBlAgkBDXRyeUdldEludGVnZXIBBQprU3BvdHNCdXN5AAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgwBaQEVYnV5QWNjZXNzSXRlbUludGVybmFsAQphZGRyZXNzU3RyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIYM0JBSUk6IGludGVybmFsIHVzZSBvbmx5BA9pc3N1ZUFjY2Vzc0l0ZW0JAMIIBQkArAICAgdBQ0NFU1MtCQELZ2V0R2FtZU5hbWUACQCsAgIJAKwCAgkArAICAglbQWNjZXNzXSAJAQ9nZXRMb25nR2FtZU5hbWUAAhAgYWNjZXNzIE5GVCBmb3IgCQEKZ2V0TkZUTmFtZQAAAQAABwQRYWNjZXNzUmFjZUFzc2V0SWQJANgEAQkAuAgBBQ9pc3N1ZUFjY2Vzc0l0ZW0EDGtTcG90c0JvdWdodAkBDmtleVNwb3RzQm91Z2h0AQUKYWRkcmVzc1N0cgkAlAoCCQDMCAIFD2lzc3VlQWNjZXNzSXRlbQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgILYWNjZXNzSXRlbV8FEWFjY2Vzc1JhY2VBc3NldElkAgZfb3duZXIFCmFkZHJlc3NTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgdfb3duaW5nBRFhY2Nlc3NSYWNlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1Nwb3RzQm91Z2h0CQBkAgkBDXRyeUdldEludGVnZXIBBQxrU3BvdHNCb3VnaHQAAQUDbmlsBRFhY2Nlc3NSYWNlQXNzZXRJZAFpAQ9jb25maWd1cmVPcmFjbGUEBm9yYWNsZQlzaG9ydG5hbWUIbG9uZ25hbWUHbmZ0TmFtZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDzNDTzogYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19zaG9ydEdhbWVOYW1lBQlzaG9ydG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgITc3RhdGljX2xvbmdHYW1lTmFtZQUIbG9uZ25hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgIOc3RhdGljX25mdE5hbWUFB25mdE5hbWUFA25pbAFpAQ1kZWxldGVTZXR0aW5nAQNrZXkDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiwzRFM6IE9ubHkgYWRtaW5pc3RyYXRvciBjYW4gY2FsbCB0aGlzIG1ldGhvZAkAzAgCCQELRGVsZXRlRW50cnkBBQNrZXkFA25pbAFpARhidXlBY2Nlc3NJdGVtQW5kTG9ja0R1Y2sABAplZ2dQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEC2R1Y2tQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEECmFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAwkBAiE9AggFCmVnZ1BheW1lbnQHYXNzZXRJZAkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAkAAgECGjNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAiE9AggFCmVnZ1BheW1lbnQGYW1vdW50CQESZ2V0QWNjZXNzSXRlbVByaWNlAAkAAgECJTNCQUk6IFdyb25nIGFtb3VudCBvZiBhc3NldHMgYXR0YWNoZWQEDmFjY2Vzc0l0ZW1EYXRhCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAkAzAgCBQphZGRyZXNzU3RyBQNuaWwFA25pbAMJAAACBQ5hY2Nlc3NJdGVtRGF0YQUOYWNjZXNzSXRlbURhdGEEDHZhbGlkUGF5bWVudAMJAAACCAUBaQZjYWxsZXIJARFnZXRSZW50aW5nQWRkcmVzcwAFA25pbAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAIDCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQECGxvY2tEYXRhCQDOCAIJARBsb2NrRHVja0ludGVybmFsAwUKYWRkcmVzc1N0cgUKYWRkcmVzc1N0cgULZHVja1BheW1lbnQFDHZhbGlkUGF5bWVudAkAlAoCBQhsb2NrRGF0YQUOYWNjZXNzSXRlbURhdGEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENYnV5QWNjZXNzSXRlbQAECmFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAplZ2dQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUKZWdnUGF5bWVudAdhc3NldElkCQEUZ2V0QWNjZXNzSXRlbUFzc2V0SWQACQACAQkArAICAhszQkFJOiBXcm9uZyBhc3NldCBhdHRhY2hlZCAJANgEAQkBFGdldEFjY2Vzc0l0ZW1Bc3NldElkAAMJAQIhPQIIBQplZ2dQYXltZW50BmFtb3VudAkBEmdldEFjY2Vzc0l0ZW1QcmljZQAJAAIBAiUzQkFJOiBXcm9uZyBhbW91bnQgb2YgYXNzZXRzIGF0dGFjaGVkBA5hY2Nlc3NJdGVtRGF0YQkBCGFzU3RyaW5nAQkA/AcEBQR0aGlzAhVidXlBY2Nlc3NJdGVtSW50ZXJuYWwJAMwIAgUKYWRkcmVzc1N0cgUDbmlsBQNuaWwDCQAAAgUOYWNjZXNzSXRlbURhdGEFDmFjY2Vzc0l0ZW1EYXRhBAx2YWxpZFBheW1lbnQDCQAAAggFAWkGY2FsbGVyCQERZ2V0UmVudGluZ0FkZHJlc3MABQNuaWwJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwABAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50CQCUCgIFDHZhbGlkUGF5bWVudAUOYWNjZXNzSXRlbURhdGEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESYnV5QWNjZXNzSXRlbU90aGVyAQxhZGRyZXNzT3RoZXIECmVnZ1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQplZ2dQYXltZW50B2Fzc2V0SWQJARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAJAAIBAhozQkFJOiBXcm9uZyBhc3NldCBhdHRhY2hlZAMJAQIhPQIIBQplZ2dQYXltZW50BmFtb3VudAkBEmdldEFjY2Vzc0l0ZW1QcmljZQAJAAIBAiUzQkFJOiBXcm9uZyBhbW91bnQgb2YgYXNzZXRzIGF0dGFjaGVkBA5hY2Nlc3NJdGVtRGF0YQkBCGFzU3RyaW5nAQkA/AcEBQR0aGlzAhVidXlBY2Nlc3NJdGVtSW50ZXJuYWwJAMwIAgUMYWRkcmVzc090aGVyBQNuaWwFA25pbAMJAAACBQ5hY2Nlc3NJdGVtRGF0YQUOYWNjZXNzSXRlbURhdGEJAJQKAgUDbmlsBQ5hY2Nlc3NJdGVtRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhsb2NrRHVjawAECmFkZHJlc3NTdHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwABAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50CQDOCAIJARBsb2NrRHVja0ludGVybmFsAwUKYWRkcmVzc1N0cgUKYWRkcmVzc1N0cgULZHVja1BheW1lbnQFDHZhbGlkUGF5bWVudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQppbml0VW5sb2NrAQphc3NldElkU3RyBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAAMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAkAzggCCQEOaW5pdFVubG9ja0R1Y2sCBQphc3NldElkU3RyBQphZGRyZXNzU3RyBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPbG9ja0R1Y2tSZW50aW5nARRhZGRyZXNzVGFrZVNwb3RzRnJvbQMJAQIhPQIIBQFpBmNhbGxlcgkBEWdldFJlbnRpbmdBZGRyZXNzAAkAAgECEzNVRE86IFJlbnRpbmcgb25seSEECmFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAACQEQbG9ja0R1Y2tJbnRlcm5hbAMFCmFkZHJlc3NTdHIFFGFkZHJlc3NUYWtlU3BvdHNGcm9tBQtkdWNrUGF5bWVudAFpARF1bmxvY2tEdWNrUmVudGluZwIKYXNzZXRJZFN0cg9hZGRTcG90c1Rvd2FyZHMDCQECIT0CCAUBaQZjYWxsZXIJARFnZXRSZW50aW5nQWRkcmVzcwAJAAIBAhMzVURPOiBSZW50aW5nIG9ubHkhBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgkBC3Vuc3Rha2VEdWNrAwUKYXNzZXRJZFN0cgUKYWRkcmVzc1N0cgUPYWRkU3BvdHNUb3dhcmRzAWkBD3VubG9ja0R1Y2tPdGhlcgEKYXNzZXRJZFN0cgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECETNVRE86IEFkbWluIG9ubHkhBAhvd25lcktleQkBDHRyeUdldFN0cmluZwEJAQxrZXlEdWNrT3duZXIBCQDZBAEFCmFzc2V0SWRTdHIJAQt1bnN0YWtlRHVjawMFCmFzc2V0SWRTdHIFCG93bmVyS2V5BQhvd25lcktleQFpAQp1bmxvY2tEdWNrBAphc3NldElkU3RyAnRzB2FsbG93ZWQJc2lnbmF0dXJlAwkBAiE9AgUHYWxsb3dlZAYJAAIBAiQzVUQ6IE5vdCBhbGxvd2VkIHRvIHVubG9jayB0aGUgZHVjayEECE1TSU5IT1VSAIDd2wEECWN1cnJlbnRUcwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQBmAgUJY3VycmVudFRzCQBkAgUCdHMFCE1TSU5IT1VSCQACAQIYM1VEOiBPdXRkYXRlZCBzaWduYXR1cmUhBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQEdGV4dAkAuQkCCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgkApAMBBQJ0cwkAzAgCCQClAwEFB2FsbG93ZWQFA25pbAIBOwMJAQEhAQkAxBMDCQCbAwEFBHRleHQJANkEAQUJc2lnbmF0dXJlCQEQZ2V0QmFja2VuZFB1YktleQAJAAIBCQCsAgIJAKwCAgkArAICAiMzVUQ6IEludmFsaWQgcHJvb2YgZnJvbSBiYWNrZW5kIGtleQkA2AQBCQEQZ2V0QmFja2VuZFB1YktleQACASAFBHRleHQEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAADCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQJAM4IAgkBC3Vuc3Rha2VEdWNrAwUKYXNzZXRJZFN0cgUKYWRkcmVzc1N0cgUKYWRkcmVzc1N0cgUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuABrSJ/0=", "height": 4056218, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F3PmfKXrYusfyg6kqPf3aAthz1i6fmvvrsqvdGWNccEb Next: 3YQyHw4iN44AMZsa9mn4fWsUwmV3PrTLEnosAoKHJrdG Diff:
OldNewDifferences
266266 then nil
267267 else throw("Strict value is not equal to itself.")
268268 }
269-[ScriptTransfer(Address(fromBase58String(addressStr)), 1, assetId), DeleteEntry(keyLockedDuckStatus(addressStr, assetIdStr)), DeleteEntry(kDuckOwner), IntegerEntry(kSpotsBusy, (tryGetInteger(kSpotsBusy) - 1))]
269+ if ((doUnstake == doUnstake))
270+ then [ScriptTransfer(Address(fromBase58String(addressStr)), 1, assetId), DeleteEntry(keyLockedDuckStatus(addressStr, assetIdStr)), DeleteEntry(kDuckOwner), IntegerEntry(kSpotsBusy, (tryGetInteger(kSpotsBusy) - 1))]
271+ else throw("Strict value is not equal to itself.")
270272 }
271273 }
272274
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 keyDuckPlayUnlockTime (assetId) = (("duck_" + toBase58String(assetId)) + "_unlockTime")
1313
1414
1515 func keyDuckFinishUnlockTime (assetId) = (("duck_" + toBase58String(assetId)) + "finish_unlockTime")
1616
1717
1818 func keyDuckOwner (assetId) = (("duck_" + toBase58String(assetId)) + "_owner")
1919
2020
2121 func keySpotsBought (addressStr) = (("address_" + addressStr) + "_spotsBought")
2222
2323
2424 func keySpotsBusy (addressStr) = (("address_" + addressStr) + "_spotsBusy")
2525
2626
2727 func keyLockedDuckStatus (addressStr,assetIdStr) = (((("address_" + addressStr) + "_lockedDuck_") + assetIdStr) + "_status")
2828
2929
3030 func keyDuckV2 (addressStr,assetIdStr) = (((("address_" + addressStr) + "_lockedDuck_") + assetIdStr) + "_v2")
3131
3232
3333 func getDuckDetails (assetId) = {
3434 let assetName = value(value(assetInfo(assetId)).name)
3535 let assetNameParts = split(assetName, "")
3636 let isJackpot = (assetNameParts[(size(assetNameParts) - 2)] == "J")
3737 let assetColor = if (isJackpot)
3838 then "B"
3939 else assetNameParts[(size(assetNameParts) - 1)]
4040 $Tuple2(assetColor, isJackpot)
4141 }
4242
4343
4444 func tryGetStringExternal (address,key) = match getString(address, key) {
4545 case a: String =>
4646 a
4747 case _ =>
4848 ""
4949 }
5050
5151
5252 func tryGetBoolean (key) = match getBoolean(key) {
5353 case b: Boolean =>
5454 b
5555 case _ =>
5656 false
5757 }
5858
5959
6060 func tryGetString (key) = tryGetStringExternal(this, key)
6161
6262
6363 func staticKey_oracleAddress () = "static_oracleAddress"
6464
6565
6666 func staticKey_eggAssetId () = "static_eggAssetId"
6767
6868
6969 func staticKey_incubatorAddress () = "static_incubatorAddress"
7070
7171
7272 func staticKey_breederAddress () = "static_breederAddress"
7373
7474
7575 func staticKey_farmingAddress () = "static_farmingAddress"
7676
7777
7878 func staticKey_rentingAddress () = "static_rentingAddress"
7979
8080
8181 func staticKey_shortGameName () = "static_shortGameName"
8282
8383
8484 func staticKey_longGameName () = "static_longGameName"
8585
8686
8787 func staticKey_nftName () = "static_nftName"
8888
8989
9090 func staticKey_backendPubKey () = "static_backendPubKey"
9191
9292
9393 func staticKey_accessItemAssetId () = "static_accessItemAssetId"
9494
9595
9696 func staticKey_accessItemPrice () = "static_accessItemPrice"
9797
9898
9999 func staticKey_minLockDuration () = "static_minLockDuration"
100100
101101
102102 func staticKey_UnlockDuration () = "static_UnlockDuration"
103103
104104
105105 func staticKey_boosterBuyAssetId () = "static_boosterBuyAssetId"
106106
107107
108108 func staticKey_extraFee () = "static_extraFee"
109109
110110
111111 func staticKey_feeAggregator () = "static_feeAggregator"
112112
113113
114114 func staticKey_boosterPriceLevel (level) = ("static_boosterPriceLevel_" + level)
115115
116116
117117 func staticKey_boosterName (level) = ("static_boosterName_" + level)
118118
119119
120120 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
121121
122122
123123 func getGameName () = valueOrErrorMessage(getString(staticKey_shortGameName()), "3GGN: There is no game name defined!")
124124
125125
126126 func getLongGameName () = valueOrErrorMessage(getString(staticKey_longGameName()), "3GLGN: There is no long game name defined!")
127127
128128
129129 func getNFTName () = valueOrErrorMessage(getString(staticKey_nftName()), "3GNN: There is no nft name defined!")
130130
131131
132132 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
133133
134134
135135 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
136136
137137
138138 func getRentingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rentingAddress())))
139139
140140
141141 func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_farmingAddress())))
142142
143143
144144 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
145145
146146
147147 func getBackendPubKey () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_backendPubKey()))
148148
149149
150150 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
151151
152152
153153 func getAccessItemAssetId () = fromBase58String(tryGetString(staticKey_accessItemAssetId()))
154154
155155
156156 func getAccessItemPrice () = tryGetInteger(staticKey_accessItemPrice())
157157
158158
159159 func getMinLockDuration () = tryGetInteger(staticKey_minLockDuration())
160160
161161
162162 func getUnlockDuration () = tryGetInteger(staticKey_UnlockDuration())
163163
164164
165165 func getBosterBuyAssetId () = fromBase58String(tryGetString(staticKey_boosterBuyAssetId()))
166166
167167
168168 func getBosterPriceForLevel (level) = valueOrErrorMessage(getInteger(staticKey_boosterPriceLevel(toString(level))), "3GBPFL: There is no price value for this level of booster")
169169
170170
171171 func getBosterNameForLevel (level) = valueOrErrorMessage(getString(staticKey_boosterName(toString(level))), "3GBNFL: There is no such booster")
172172
173173
174174 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
175175 then throw("RCAP: Please attach waves")
176176 else {
177177 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
178178 if ((payment.amount != feeAmount))
179179 then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
180180 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
181181 }
182182
183183
184184 func asString (value) = match value {
185185 case string: String =>
186186 string
187187 case _ =>
188188 throw("3AS: wrong type, expected: String")
189189 }
190190
191191
192192 func lockDuckInternal (addressStr,takeSpotsFrom,pmt) = {
193193 let assetId = value(pmt.assetId)
194194 let assetIssuer = value(assetInfo(assetId)).issuer
195195 let tDuckDetails = getDuckDetails(assetId)
196196 let assetColor = tDuckDetails._1
197197 let isJackpot = tDuckDetails._2
198198 let kSpotsBusy = keySpotsBusy(takeSpotsFrom)
199199 let spotsBusy = tryGetInteger(kSpotsBusy)
200200 let kSpotsBought = keySpotsBought(takeSpotsFrom)
201201 let addressSpotsAvailable = (tryGetInteger(kSpotsBought) - spotsBusy)
202202 if ((pmt.amount != 1))
203203 then throw("NFT is not attached")
204204 else if (if ((assetIssuer != getIncubatorAddress()))
205205 then (assetIssuer != getBreederAddress())
206206 else false)
207207 then throw("ivalid NFT attached")
208208 else if ((0 >= addressSpotsAvailable))
209209 then throw(("No spots available in hunt for: " + takeSpotsFrom))
210210 else {
211211 let kPerchesAvailable = ((("address_" + toString(this)) + "_perchesAvailable_") + assetColor)
212212 let perchesAvailable = match getInteger(getFarmingAddress(), kPerchesAvailable) {
213213 case b: Int =>
214214 b
215215 case _ =>
216216 0
217217 }
218218 if ((perchesAvailable == perchesAvailable))
219219 then {
220220 let eggAssetId = getEggAssetId()
221221 [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)]
222222 }
223223 else throw("Strict value is not equal to itself.")
224224 }
225225 }
226226
227227
228228 func initUnlockDuck (assetIdStr,addressStr) = {
229229 let assetId = fromBase58String(assetIdStr)
230230 let tDuckDetails = getDuckDetails(assetId)
231231 let assetColor = tDuckDetails._1
232232 let isJackpot = tDuckDetails._2
233233 let kSpotsBusy = keySpotsBusy(addressStr)
234234 let kDuckOwner = keyDuckOwner(assetId)
235235 let remainingForUnlock = (tryGetInteger(keyDuckPlayUnlockTime(assetId)) - lastBlock.timestamp)
236236 if ((tryGetString(kDuckOwner) != addressStr))
237237 then throw("3IULD: The duck is not yours")
238238 else if ((remainingForUnlock > 0))
239239 then throw((("3IUL: You need to wait to unlock " + toString((remainingForUnlock / 1000))) + " seconds"))
240240 else [IntegerEntry(keyDuckFinishUnlockTime(assetId), (lastBlock.timestamp + getUnlockDuration()))]
241241 }
242242
243243
244244 func unstakeDuck (assetIdStr,addressStr,addSpotsTowards) = {
245245 let assetId = fromBase58String(assetIdStr)
246246 let tDuckDetails = getDuckDetails(assetId)
247247 let assetColor = tDuckDetails._1
248248 let isJackpot = tDuckDetails._2
249249 let kSpotsBusy = keySpotsBusy(addSpotsTowards)
250250 let kDuckOwner = keyDuckOwner(assetId)
251251 let remainingForUnlock = (tryGetInteger(keyDuckFinishUnlockTime(assetId)) - lastBlock.timestamp)
252252 if ((tryGetString(kDuckOwner) != addressStr))
253253 then throw("3UD: The duck is not yours")
254254 else if ((remainingForUnlock > 0))
255255 then throw((("3UD: You need to wait to unlock " + toString((remainingForUnlock / 1000))) + " seconds"))
256256 else {
257257 let isV2 = tryGetBoolean(keyDuckV2(addressStr, assetIdStr))
258258 let doUnstake = if (isV2)
259259 then nil
260260 else {
261261 let unstakeFuncName = if ((isJackpot == true))
262262 then "unstakeJackpotWithoutClaimEgg"
263263 else "unstakeNFTWithoutClaim"
264264 let inv1 = invoke(getFarmingAddress(), unstakeFuncName, [assetIdStr], nil)
265265 if ((inv1 == inv1))
266266 then nil
267267 else throw("Strict value is not equal to itself.")
268268 }
269-[ScriptTransfer(Address(fromBase58String(addressStr)), 1, assetId), DeleteEntry(keyLockedDuckStatus(addressStr, assetIdStr)), DeleteEntry(kDuckOwner), IntegerEntry(kSpotsBusy, (tryGetInteger(kSpotsBusy) - 1))]
269+ if ((doUnstake == doUnstake))
270+ then [ScriptTransfer(Address(fromBase58String(addressStr)), 1, assetId), DeleteEntry(keyLockedDuckStatus(addressStr, assetIdStr)), DeleteEntry(kDuckOwner), IntegerEntry(kSpotsBusy, (tryGetInteger(kSpotsBusy) - 1))]
271+ else throw("Strict value is not equal to itself.")
270272 }
271273 }
272274
273275
274276 @Callable(i)
275277 func buyAccessItemInternal (addressStr) = if ((i.caller != this))
276278 then throw("3BAII: internal use only")
277279 else {
278280 let issueAccessItem = Issue(("ACCESS-" + getGameName()), ((("[Access] " + getLongGameName()) + " access NFT for ") + getNFTName()), 1, 0, false)
279281 let accessRaceAssetId = toBase58String(calculateAssetId(issueAccessItem))
280282 let kSpotsBought = keySpotsBought(addressStr)
281283 $Tuple2([issueAccessItem, StringEntry((("accessItem_" + accessRaceAssetId) + "_owner"), addressStr), StringEntry((("address_" + addressStr) + "_owning"), accessRaceAssetId), IntegerEntry(kSpotsBought, (tryGetInteger(kSpotsBought) + 1))], accessRaceAssetId)
282284 }
283285
284286
285287
286288 @Callable(i)
287289 func configureOracle (oracle,shortname,longname,nftName) = if ((i.caller != this))
288290 then throw("3CO: admin only")
289291 else [StringEntry("static_oracleAddress", oracle), StringEntry("static_shortGameName", shortname), StringEntry("static_longGameName", longname), StringEntry("static_nftName", nftName)]
290292
291293
292294
293295 @Callable(i)
294296 func deleteSetting (key) = if ((i.caller != this))
295297 then throw("3DS: Only administrator can call this method")
296298 else [DeleteEntry(key)]
297299
298300
299301
300302 @Callable(i)
301303 func buyAccessItemAndLockDuck () = {
302304 let eggPayment = value(i.payments[0])
303305 let duckPayment = value(i.payments[1])
304306 let addressStr = toString(i.originCaller)
305307 if ((eggPayment.assetId != getAccessItemAssetId()))
306308 then throw("3BAI: Wrong asset attached")
307309 else if ((eggPayment.amount != getAccessItemPrice()))
308310 then throw("3BAI: Wrong amount of assets attached")
309311 else {
310312 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
311313 if ((accessItemData == accessItemData))
312314 then {
313315 let validPayment = if ((i.caller == getRentingAddress()))
314316 then nil
315317 else checkAdditionalPayment(i.payments[2])
316318 if ((validPayment == validPayment))
317319 then {
318320 let lockData = (lockDuckInternal(addressStr, addressStr, duckPayment) ++ validPayment)
319321 $Tuple2(lockData, accessItemData)
320322 }
321323 else throw("Strict value is not equal to itself.")
322324 }
323325 else throw("Strict value is not equal to itself.")
324326 }
325327 }
326328
327329
328330
329331 @Callable(i)
330332 func buyAccessItem () = {
331333 let addressStr = toString(i.originCaller)
332334 let eggPayment = value(i.payments[0])
333335 if ((eggPayment.assetId != getAccessItemAssetId()))
334336 then throw(("3BAI: Wrong asset attached " + toBase58String(getAccessItemAssetId())))
335337 else if ((eggPayment.amount != getAccessItemPrice()))
336338 then throw("3BAI: Wrong amount of assets attached")
337339 else {
338340 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
339341 if ((accessItemData == accessItemData))
340342 then {
341343 let validPayment = if ((i.caller == getRentingAddress()))
342344 then nil
343345 else checkAdditionalPayment(i.payments[1])
344346 if ((validPayment == validPayment))
345347 then $Tuple2(validPayment, accessItemData)
346348 else throw("Strict value is not equal to itself.")
347349 }
348350 else throw("Strict value is not equal to itself.")
349351 }
350352 }
351353
352354
353355
354356 @Callable(i)
355357 func buyAccessItemOther (addressOther) = {
356358 let eggPayment = value(i.payments[0])
357359 if ((eggPayment.assetId != getAccessItemAssetId()))
358360 then throw("3BAI: Wrong asset attached")
359361 else if ((eggPayment.amount != getAccessItemPrice()))
360362 then throw("3BAI: Wrong amount of assets attached")
361363 else {
362364 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressOther], nil))
363365 if ((accessItemData == accessItemData))
364366 then $Tuple2(nil, accessItemData)
365367 else throw("Strict value is not equal to itself.")
366368 }
367369 }
368370
369371
370372
371373 @Callable(i)
372374 func lockDuck () = {
373375 let addressStr = toString(i.originCaller)
374376 let duckPayment = value(i.payments[0])
375377 let validPayment = checkAdditionalPayment(i.payments[1])
376378 if ((validPayment == validPayment))
377379 then (lockDuckInternal(addressStr, addressStr, duckPayment) ++ validPayment)
378380 else throw("Strict value is not equal to itself.")
379381 }
380382
381383
382384
383385 @Callable(i)
384386 func initUnlock (assetIdStr) = {
385387 let addressStr = toString(i.caller)
386388 let validPayment = checkAdditionalPayment(i.payments[0])
387389 if ((validPayment == validPayment))
388390 then (initUnlockDuck(assetIdStr, addressStr) ++ validPayment)
389391 else throw("Strict value is not equal to itself.")
390392 }
391393
392394
393395
394396 @Callable(i)
395397 func lockDuckRenting (addressTakeSpotsFrom) = if ((i.caller != getRentingAddress()))
396398 then throw("3UDO: Renting only!")
397399 else {
398400 let addressStr = toString(i.caller)
399401 let duckPayment = value(i.payments[0])
400402 lockDuckInternal(addressStr, addressTakeSpotsFrom, duckPayment)
401403 }
402404
403405
404406
405407 @Callable(i)
406408 func unlockDuckRenting (assetIdStr,addSpotsTowards) = if ((i.caller != getRentingAddress()))
407409 then throw("3UDO: Renting only!")
408410 else {
409411 let addressStr = toString(i.caller)
410412 unstakeDuck(assetIdStr, addressStr, addSpotsTowards)
411413 }
412414
413415
414416
415417 @Callable(i)
416418 func unlockDuckOther (assetIdStr) = if ((i.caller != this))
417419 then throw("3UDO: Admin only!")
418420 else {
419421 let ownerKey = tryGetString(keyDuckOwner(fromBase58String(assetIdStr)))
420422 unstakeDuck(assetIdStr, ownerKey, ownerKey)
421423 }
422424
423425
424426
425427 @Callable(i)
426428 func unlockDuck (assetIdStr,ts,allowed,signature) = if ((allowed != true))
427429 then throw("3UD: Not allowed to unlock the duck!")
428430 else {
429431 let MSINHOUR = 3600000
430432 let currentTs = lastBlock.timestamp
431433 if ((currentTs > (ts + MSINHOUR)))
432434 then throw("3UD: Outdated signature!")
433435 else {
434436 let addressStr = toString(i.caller)
435437 let text = makeString([assetIdStr, toString(ts), toString(allowed)], ";")
436438 if (!(sigVerify_8Kb(toBytes(text), fromBase58String(signature), getBackendPubKey())))
437439 then throw(((("3UD: Invalid proof from backend key" + toBase58String(getBackendPubKey())) + " ") + text))
438440 else {
439441 let validPayment = checkAdditionalPayment(i.payments[0])
440442 if ((validPayment == validPayment))
441443 then (unstakeDuck(assetIdStr, addressStr, addressStr) ++ validPayment)
442444 else throw("Strict value is not equal to itself.")
443445 }
444446 }
445447 }
446448
447449

github/deemru/w8io/873ac7e 
216.72 ms