tx · 6U3sR1H1EKBorGnsBCEp9vLN4zEWnV7rU7RTXDDon5hs 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.01100000 Waves 2022.12.08 23:20 [2351821] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "6U3sR1H1EKBorGnsBCEp9vLN4zEWnV7rU7RTXDDon5hs", "fee": 1100000, "feeAssetId": null, "timestamp": 1670530819053, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "5yoMn711HWMhNVMmdqKLH4qL26y11g1UgmWSK6EXNrMmFnbNEdAwnfbGU9kh4w9vG89mYQteHii1yW4L5fmWXAUd" ], "script": "base64:BgIoCAISABIDCgEIEgASAwoBCBIECgIBCBIECgICAhIECgIBCBIECgIICCkAC3VzZG5Bc3NldElkASD3dur394PKZdtuE+4CO89YKZWpwdGN8kvabNgdYoDI3gANaW5jdWJhdG9yQWRkcgUEdGhpcwALYnJlZWRlckFkZHIFBHRoaXMAC2JhY2tFbmRBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzTjVTcFgyMVIzUjc1UW80ZWIzTXdGRnZXN1RVenlodmF2dgALZWNvbm9teUFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNOOHk0d3hYM0pDNFRkckNKQlhYMTZTaldmNlgyNTZocmVwAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAPREFJTFlSRVNCWVBJRUNFAID40gEACURBWU1JTExJUwCAuJkpABFGSVZFTUlOVVRFU01JTExJUwDgpxIBEWtleUFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEOa2V5TGFuZFRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAEaWR4QQAAAARpZHhCAAEABGlkeEMAAgAEaWR4RAADAARpZHhFAAQABGlkeEYABQENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAAZAwkAAAICAU0FByRtYXRjaDAAZAMJAAACAgFMBQckbWF0Y2gwAOEBAwkAAAICAlhMBQckbWF0Y2gwAJADAwkAAAICA1hYTAUHJG1hdGNoMADxBAkAAgECEVVua25vd24gbGFuZCBzaXplAQZhZGRSZXMDCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGsDBQlkZWx0YVRpbWUFD0RBSUxZUkVTQllQSUVDRQUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwgBaQEJc3Rha2VMYW5kAAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkxBTkRQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFBHRoaXMJAAIBAhdVbmtub3duIGlzc3VlciBvZiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkxBTkRQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpMQU5EUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQLbGFuZE51bVNpemUJALACAggFBWFzc2V0BG5hbWUABAQHbGFuZE51bQMJAQhjb250YWlucwIFC2xhbmROdW1TaXplAgNYWEwJALMCAgULbGFuZE51bVNpemUAAwMJAQhjb250YWlucwIFC2xhbmROdW1TaXplAgJYTAkAswICBQtsYW5kTnVtU2l6ZQACCQCzAgIFC2xhbmROdW1TaXplAAEDCQEBIQEJAQlpc0RlZmluZWQBCQC2CQEFB2xhbmROdW0JAAIBCQCsAgICHkNhbm5vdCBwYXJzZSBsYW5kIG51bWJlciBmcm9tIAgFBWFzc2V0BG5hbWUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlBc3NldElkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5TGFuZFRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzBQNuaWwBaQELdW5zdGFrZUxhbmQBC2xhbmRBc3NldElkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIkdW5zdGFrZSBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAdhc3NldElkCQDZBAEFC2xhbmRBc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFBHRoaXMJAAIBAhdVbmtub3duIGlzc3VlciBvZiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkxBTkRQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpMQU5EUFJFRklYAhcgdG9rZW5zIGNhbiBiZSB1bnN0YWtlZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARFrZXlBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzBQNuaWwBaQEJc3Rha2VEdWNrAAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAZoZWFsdGgJAJ8IAQUJa2V5SGVhbHRoBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFBmhlYWx0aAUDbmlsCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aABkBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIPMDowXzBfMF8wXzBfMDo6BQNuaWwBaQELdW5zdGFrZUR1Y2sBCmFzc2V0SWRTdHIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAiR1bnN0YWtlIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQACAQkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIGIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCFyB0b2tlbnMgY2FuIGJlIHVuc3Rha2VkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEJANgEAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50C2xhbmRBc3NldElkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIlY2xhaW1SZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICBE5GVCAFCkxBTkRQUkVGSVgCICB0b2tlbiBzaG91bGQgYmUgcGFzc2VkIGFzIHBhcmFtBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAJ8IAQUHdGltZUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFCXNhdmVkVGltZQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQERa2V5QXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQEZHVjawkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAwkBASEBCQEJaXNEZWZpbmVkAQUEZHVjawkAAgECHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEDmR1Y2tBc3NldElkU3RyCQEFdmFsdWUBBQRkdWNrBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQUOZHVja0Fzc2V0SWRTdHIFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFER1Y2sgbG9jYXRpb24gaWQgaXMgCQCRAwIFA2xvYwUIbG9jSWR4SWQCECwgYnV0IHNob3VsZCBiZSAFC2xhbmRBc3NldElkBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkBBXZhbHVlAQUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQkBBXZhbHVlAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBAhhdmFpbFJlcwkAaAIJAGsDBQlkZWx0YVRpbWUFD0RBSUxZUkVTQllQSUVDRQUJREFZTUlMTElTBQZwaWVjZXMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFBnBpZWNlcwUPREFJTFlSRVNCWVBJRUNFBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUOZHVja0Fzc2V0SWRTdHIEC2N1cnJlbnRQYWNrCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFYnBLZXkCDzA6MF8wXzBfMF8wXzA6OgIBOgQKY3VycmVudFJlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQFYnBSZXMJAQZhZGRSZXMDBQpjdXJyZW50UmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkFB25ld1BhY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUFb3duZXIFDG5ld1RpbWVzdGFtcAUDbmlsBQR1bml0AWkBBmZsaWdodAIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAiNmbGlnaHQgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAJocAkAtQkCCQCRAwIJALUJAgkAkQMCBQVwYXJ0cwAAAgF8AAACAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBA1uZXdMb2NBbmRUaW1lCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgUNbmV3TG9jQW5kVGltZQAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUNbmV3TG9jQW5kVGltZQABAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBAhJzaWduYXR1cmUgb3V0ZGF0ZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFAEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAAACBQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIFBW5ld0hQAAAFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAUDbmlsBQR1bml0AWkBCXNldEhlYWx0aAIGaGVhbHRoC2R1Y2tBc3NldElkBA5kdWNrQXNzZXRJZFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwMJAGYCAAAFBmhlYWx0aAYJAGYCBQZoZWFsdGgAZAkAAgECGkhQIHNob3VsZCBiZSB3aXRoaW4gMC4uMTAwCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQZoZWFsdGgFA25pbAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgULZWNvbm9teUFkZHIJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sAtkyx3Q==", "height": 2351821, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4JnworN4PmXuiwCviRg9hdgBSX6uJS82yw2c8cYVhpKv Next: DQ9ByJxk7nao3tceAMGQAbW7ZD9B5eTTEBempsLqTL4w Diff:
Old | New | Differences | |
---|---|---|---|
331 | 331 | else { | |
332 | 332 | let aR = split(toUtf8String(aP), ";") | |
333 | 333 | let aS = split(split(aR[0], "|")[0], "_") | |
334 | - | let aT = parseIntValue(aS[ | |
334 | + | let aT = parseIntValue(aS[0]) | |
335 | 335 | let aU = parseIntValue(aS[1]) | |
336 | 336 | let aV = split(aR[1], ":") | |
337 | 337 | let aW = aV[0] | |
338 | 338 | let aX = parseIntValue(aV[1]) | |
339 | - | if (if ((aX > lastBlock.timestamp)) | |
339 | + | if (if ((aX > (lastBlock.timestamp + l))) | |
340 | 340 | then true | |
341 | 341 | else ((lastBlock.timestamp - l) > aX)) | |
342 | 342 | then throw("signature outdated") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ' | |
5 | 5 | ||
6 | 6 | let b = this | |
7 | 7 | ||
8 | 8 | let c = this | |
9 | 9 | ||
10 | 10 | let d = addressFromStringValue("3N5SpX21R3R75Qo4eb3MwFFvW7TUzyhvavv") | |
11 | 11 | ||
12 | 12 | let e = addressFromStringValue("3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep") | |
13 | 13 | ||
14 | 14 | let f = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
15 | 15 | ||
16 | 16 | let g = "LAND" | |
17 | 17 | ||
18 | 18 | let h = "DUCK" | |
19 | 19 | ||
20 | 20 | let i = "Africa_F_Africa" | |
21 | 21 | ||
22 | 22 | let j = 3456000 | |
23 | 23 | ||
24 | 24 | let k = 86400000 | |
25 | 25 | ||
26 | 26 | let l = 300000 | |
27 | 27 | ||
28 | 28 | func m (n) = ("nftOwner_" + n) | |
29 | 29 | ||
30 | 30 | ||
31 | 31 | func o (n) = ("duckOwner_" + n) | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func p (n) = ("stakedTime_" + n) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func q (r) = ("stakedDuckByOwner_" + r) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func s (t,n,r) = ((((("stakedTimeByTypeAssetIdAndOwner_" + t) + "_") + n) + "_") + r) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func u (v) = ("landOwner_" + v) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func w (x) = ("backPack_" + x) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func y (x) = ("duckLocation_" + x) | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func z (x) = ("duckHealth_" + x) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | let A = 0 | |
56 | 56 | ||
57 | 57 | let B = 1 | |
58 | 58 | ||
59 | 59 | let C = 2 | |
60 | 60 | ||
61 | 61 | let D = 3 | |
62 | 62 | ||
63 | 63 | let E = 0 | |
64 | 64 | ||
65 | 65 | let F = 1 | |
66 | 66 | ||
67 | 67 | let G = 2 | |
68 | 68 | ||
69 | 69 | let H = 0 | |
70 | 70 | ||
71 | 71 | let I = 1 | |
72 | 72 | ||
73 | 73 | let J = 2 | |
74 | 74 | ||
75 | 75 | let K = 3 | |
76 | 76 | ||
77 | 77 | let L = 0 | |
78 | 78 | ||
79 | 79 | let M = 1 | |
80 | 80 | ||
81 | 81 | let N = 2 | |
82 | 82 | ||
83 | 83 | let O = 3 | |
84 | 84 | ||
85 | 85 | let P = 4 | |
86 | 86 | ||
87 | 87 | let Q = 5 | |
88 | 88 | ||
89 | 89 | func R (S) = [(size(split(S, "A")) - 1), (size(split(S, "B")) - 1), (size(split(S, "C")) - 1), (size(split(S, "D")) - 1), (size(split(S, "E")) - 1), (size(split(S, "F")) - 1)] | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | func T (U) = { | |
93 | 93 | let V = U | |
94 | 94 | if (("S" == V)) | |
95 | 95 | then 25 | |
96 | 96 | else if (("M" == V)) | |
97 | 97 | then 100 | |
98 | 98 | else if (("L" == V)) | |
99 | 99 | then 225 | |
100 | 100 | else if (("XL" == V)) | |
101 | 101 | then 400 | |
102 | 102 | else if (("XXL" == V)) | |
103 | 103 | then 625 | |
104 | 104 | else throw("Unknown land size") | |
105 | 105 | } | |
106 | 106 | ||
107 | 107 | ||
108 | 108 | func W (X,Y,Z) = { | |
109 | 109 | func aa (ab,ac) = { | |
110 | 110 | let ad = (fraction(Z, j, k) * Y[ac]) | |
111 | 111 | (ab :+ toString((parseIntValue(X[ac]) + ad))) | |
112 | 112 | } | |
113 | 113 | ||
114 | 114 | let ae = { | |
115 | 115 | let af = [0, 1, 2, 3, 4, 5] | |
116 | 116 | let ag = size(af) | |
117 | 117 | let ah = nil | |
118 | 118 | func ai (aj,ak) = if ((ak >= ag)) | |
119 | 119 | then aj | |
120 | 120 | else aa(aj, af[ak]) | |
121 | 121 | ||
122 | 122 | func al (aj,ak) = if ((ak >= ag)) | |
123 | 123 | then aj | |
124 | 124 | else throw("List size exceeds 6") | |
125 | 125 | ||
126 | 126 | al(ai(ai(ai(ai(ai(ai(ah, 0), 1), 2), 3), 4), 5), 6) | |
127 | 127 | } | |
128 | 128 | makeString(ae, "_") | |
129 | 129 | } | |
130 | 130 | ||
131 | 131 | ||
132 | 132 | @Callable(ac) | |
133 | 133 | func stakeLand () = { | |
134 | 134 | let am = value(ac.payments[0]) | |
135 | 135 | let n = value(am.assetId) | |
136 | 136 | let an = toString(ac.caller) | |
137 | 137 | if ((am.amount != 1)) | |
138 | 138 | then throw((("NFT " + g) + " token should be attached as payment")) | |
139 | 139 | else { | |
140 | 140 | let ao = value(assetInfo(n)) | |
141 | 141 | if ((ao.issuer != this)) | |
142 | 142 | then throw("Unknown issuer of token") | |
143 | 143 | else if (!(contains(ao.name, g))) | |
144 | 144 | then throw((("Only NFT " + g) + " tokens are accepted")) | |
145 | 145 | else { | |
146 | 146 | let ap = drop(ao.name, 4) | |
147 | 147 | let v = if (contains(ap, "XXL")) | |
148 | 148 | then dropRight(ap, 3) | |
149 | 149 | else if (contains(ap, "XL")) | |
150 | 150 | then dropRight(ap, 2) | |
151 | 151 | else dropRight(ap, 1) | |
152 | 152 | if (!(isDefined(parseInt(v)))) | |
153 | 153 | then throw(("Cannot parse land number from " + ao.name)) | |
154 | 154 | else { | |
155 | 155 | let aq = p(toBase58String(n)) | |
156 | 156 | if (isDefined(getInteger(aq))) | |
157 | 157 | then throw((("NFT " + ao.name) + " is already staked")) | |
158 | 158 | else [IntegerEntry(aq, lastBlock.timestamp), IntegerEntry(s(g, toBase58String(n), an), lastBlock.timestamp), StringEntry(m(toBase58String(n)), an), StringEntry(u(v), an)] | |
159 | 159 | } | |
160 | 160 | } | |
161 | 161 | } | |
162 | 162 | } | |
163 | 163 | ||
164 | 164 | ||
165 | 165 | ||
166 | 166 | @Callable(ac) | |
167 | 167 | func unstakeLand (ar) = if ((size(ac.payments) != 0)) | |
168 | 168 | then throw("unstake doesn't require any payments") | |
169 | 169 | else { | |
170 | 170 | let n = fromBase58String(ar) | |
171 | 171 | let an = toString(ac.caller) | |
172 | 172 | let ao = value(assetInfo(n)) | |
173 | 173 | if ((ao.issuer != this)) | |
174 | 174 | then throw("Unknown issuer of token") | |
175 | 175 | else if (!(contains(ao.name, g))) | |
176 | 176 | then throw((("Only NFT " + g) + " tokens can be unstaked")) | |
177 | 177 | else { | |
178 | 178 | let aq = p(ar) | |
179 | 179 | if (!(isDefined(aq))) | |
180 | 180 | then throw((("NFT " + ao.name) + " is not staked")) | |
181 | 181 | else { | |
182 | 182 | let as = valueOrErrorMessage(getString(m(ar)), (("NFT " + ao.name) + " is orphaned")) | |
183 | 183 | if ((as != an)) | |
184 | 184 | then throw("Staked NFT is not yours") | |
185 | 185 | else [ScriptTransfer(ac.caller, 1, n), DeleteEntry(aq), DeleteEntry(s(g, ar, an))] | |
186 | 186 | } | |
187 | 187 | } | |
188 | 188 | } | |
189 | 189 | ||
190 | 190 | ||
191 | 191 | ||
192 | 192 | @Callable(ac) | |
193 | 193 | func stakeDuck () = { | |
194 | 194 | let am = value(ac.payments[0]) | |
195 | 195 | let n = value(am.assetId) | |
196 | 196 | let an = toString(ac.caller) | |
197 | 197 | if ((am.amount != 1)) | |
198 | 198 | then throw((("NFT " + h) + " token should be attached as payment")) | |
199 | 199 | else { | |
200 | 200 | let ao = value(assetInfo(n)) | |
201 | 201 | if (if ((ao.issuer != b)) | |
202 | 202 | then (ao.issuer != c) | |
203 | 203 | else false) | |
204 | 204 | then throw((("Unknown issuer of " + h) + " token")) | |
205 | 205 | else if (!(contains(ao.name, h))) | |
206 | 206 | then throw((("Only NFT " + h) + " tokens are accepted")) | |
207 | 207 | else { | |
208 | 208 | let at = toBase58String(n) | |
209 | 209 | let aq = p(at) | |
210 | 210 | if (isDefined(getInteger(aq))) | |
211 | 211 | then throw((("NFT " + ao.name) + " is already staked")) | |
212 | 212 | else if (isDefined(getString(q(an)))) | |
213 | 213 | then throw(("You already staked one duck: " + ao.name)) | |
214 | 214 | else { | |
215 | 215 | let au = y(at) | |
216 | 216 | let av = getString(au) | |
217 | 217 | let aw = z(at) | |
218 | 218 | let ax = getInteger(aw) | |
219 | 219 | let ay = w(at) | |
220 | 220 | let az = getString(ay) | |
221 | 221 | ([IntegerEntry(aq, lastBlock.timestamp), IntegerEntry(s(h, toBase58String(n), an), lastBlock.timestamp), StringEntry(o(at), an), StringEntry(q(an), at)] ++ (if (isDefined(av)) | |
222 | 222 | then nil | |
223 | 223 | else ([StringEntry(au, i)] ++ (if (isDefined(ax)) | |
224 | 224 | then nil | |
225 | 225 | else ([IntegerEntry(aw, 100)] ++ (if (isDefined(az)) | |
226 | 226 | then nil | |
227 | 227 | else [StringEntry(ay, "0:0_0_0_0_0_0::")])))))) | |
228 | 228 | } | |
229 | 229 | } | |
230 | 230 | } | |
231 | 231 | } | |
232 | 232 | ||
233 | 233 | ||
234 | 234 | ||
235 | 235 | @Callable(ac) | |
236 | 236 | func unstakeDuck (at) = if ((size(ac.payments) != 0)) | |
237 | 237 | then throw("unstake doesn't require any payments") | |
238 | 238 | else { | |
239 | 239 | let n = fromBase58String(at) | |
240 | 240 | let an = toString(ac.caller) | |
241 | 241 | let ao = value(assetInfo(n)) | |
242 | 242 | if (if ((ao.issuer != b)) | |
243 | 243 | then (ao.issuer != c) | |
244 | 244 | else false) | |
245 | 245 | then throw((("Unknown issuer of " + h) + " token")) | |
246 | 246 | else if (!(contains(ao.name, h))) | |
247 | 247 | then throw((("Only NFT " + h) + " tokens can be unstaked")) | |
248 | 248 | else { | |
249 | 249 | let aq = p(toBase58String(n)) | |
250 | 250 | if (!(isDefined(aq))) | |
251 | 251 | then throw((("NFT " + ao.name) + " is not staked")) | |
252 | 252 | else if (!(isDefined(q(an)))) | |
253 | 253 | then throw((("The duck " + ao.name) + " is not staked")) | |
254 | 254 | else { | |
255 | 255 | let as = valueOrErrorMessage(getString(o(toBase58String(n))), (("NFT " + ao.name) + " is orphaned")) | |
256 | 256 | if ((as != an)) | |
257 | 257 | then throw("Staked NFT is not yours") | |
258 | 258 | else [ScriptTransfer(ac.caller, 1, n), DeleteEntry(aq), DeleteEntry(y(at)), DeleteEntry(s(h, at, an)), DeleteEntry(q(an))] | |
259 | 259 | } | |
260 | 260 | } | |
261 | 261 | } | |
262 | 262 | ||
263 | 263 | ||
264 | 264 | ||
265 | 265 | @Callable(ac) | |
266 | 266 | func claimRes (aA,ar) = if ((size(ac.payments) != 0)) | |
267 | 267 | then throw("claimRes doesn't require any payments") | |
268 | 268 | else { | |
269 | 269 | let aB = toString(ac.caller) | |
270 | 270 | let ao = value(assetInfo(fromBase58String(ar))) | |
271 | 271 | if (!(contains(ao.name, g))) | |
272 | 272 | then throw((("NFT " + g) + " token should be passed as param")) | |
273 | 273 | else { | |
274 | 274 | let aq = p(ar) | |
275 | 275 | let aC = getInteger(aq) | |
276 | 276 | if (!(isDefined(aC))) | |
277 | 277 | then throw((("NFT " + ao.name) + " is not staked")) | |
278 | 278 | else { | |
279 | 279 | let as = getStringValue(m(ar)) | |
280 | 280 | if ((as != aB)) | |
281 | 281 | then throw((g + " is not yours")) | |
282 | 282 | else { | |
283 | 283 | let aD = split(ao.description, "_") | |
284 | 284 | let U = aD[B] | |
285 | 285 | let Y = R(aD[C]) | |
286 | 286 | let aE = getString(q(aB)) | |
287 | 287 | if (!(isDefined(aE))) | |
288 | 288 | then throw("You don't have a duck staked") | |
289 | 289 | else { | |
290 | 290 | let aF = value(aE) | |
291 | 291 | let aG = valueOrElse(getString(y(aF)), i) | |
292 | 292 | let aH = split(value(aG), "_") | |
293 | 293 | if ((aH[F] != "L")) | |
294 | 294 | then throw((("Duck location type is " + aH[F]) + ", but should be L")) | |
295 | 295 | else if ((aH[G] != ar)) | |
296 | 296 | then throw(((("Duck location id is " + aH[G]) + ", but should be ") + ar)) | |
297 | 297 | else { | |
298 | 298 | let Z = (lastBlock.timestamp - value(aC)) | |
299 | 299 | if ((0 > Z)) | |
300 | 300 | then throw(((("Saved timestamp is in future, saved = " + toString(value(aC))) + ", current = ") + toString(lastBlock.timestamp))) | |
301 | 301 | else { | |
302 | 302 | let aI = T(U) | |
303 | 303 | let aJ = (fraction(Z, j, k) * aI) | |
304 | 304 | if ((aA > aJ)) | |
305 | 305 | then throw(((("Not enough resources, available = " + toString(aJ)) + ", requested = ") + toString(aA))) | |
306 | 306 | else { | |
307 | 307 | let aK = fraction((aJ - aA), k, (aI * j)) | |
308 | 308 | let aL = (lastBlock.timestamp - aK) | |
309 | 309 | let ay = w(aF) | |
310 | 310 | let aM = split(valueOrElse(getString(ay), "0:0_0_0_0_0_0::"), ":") | |
311 | 311 | let X = split(aM[I], "_") | |
312 | 312 | let aN = W(X, Y, (Z - aK)) | |
313 | 313 | let aO = makeString([aM[H], aN, aM[J], aM[K]], ":") | |
314 | 314 | $Tuple2([StringEntry(ay, aO), IntegerEntry(aq, aL), IntegerEntry(s(g, ar, as), aL)], unit) | |
315 | 315 | } | |
316 | 316 | } | |
317 | 317 | } | |
318 | 318 | } | |
319 | 319 | } | |
320 | 320 | } | |
321 | 321 | } | |
322 | 322 | } | |
323 | 323 | ||
324 | 324 | ||
325 | 325 | ||
326 | 326 | @Callable(ac) | |
327 | 327 | func flight (aP,aQ) = if (!(sigVerify_8Kb(aP, aQ, f))) | |
328 | 328 | then throw("signature does not match") | |
329 | 329 | else if ((size(ac.payments) != 0)) | |
330 | 330 | then throw("flight doesn't require any payments") | |
331 | 331 | else { | |
332 | 332 | let aR = split(toUtf8String(aP), ";") | |
333 | 333 | let aS = split(split(aR[0], "|")[0], "_") | |
334 | - | let aT = parseIntValue(aS[ | |
334 | + | let aT = parseIntValue(aS[0]) | |
335 | 335 | let aU = parseIntValue(aS[1]) | |
336 | 336 | let aV = split(aR[1], ":") | |
337 | 337 | let aW = aV[0] | |
338 | 338 | let aX = parseIntValue(aV[1]) | |
339 | - | if (if ((aX > lastBlock.timestamp)) | |
339 | + | if (if ((aX > (lastBlock.timestamp + l))) | |
340 | 340 | then true | |
341 | 341 | else ((lastBlock.timestamp - l) > aX)) | |
342 | 342 | then throw("signature outdated") | |
343 | 343 | else { | |
344 | 344 | let x = valueOrErrorMessage(getString(q(toString(ac.caller))), "You don't have a duck staked") | |
345 | 345 | let aw = z(x) | |
346 | 346 | let aY = valueOrElse(getInteger(aw), 100) | |
347 | 347 | if ((aY != aT)) | |
348 | 348 | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(aw), 100))) + " from state does not match one from flight log=") + toString(aT))) | |
349 | 349 | else { | |
350 | 350 | let au = y(x) | |
351 | 351 | let aG = valueOrElse(getString(au), i) | |
352 | 352 | if ((aW == aG)) | |
353 | 353 | then throw("You can't fly to the same location") | |
354 | 354 | else $Tuple2([StringEntry(au, if ((aU > 0)) | |
355 | 355 | then aW | |
356 | 356 | else aG), IntegerEntry(aw, aU)], unit) | |
357 | 357 | } | |
358 | 358 | } | |
359 | 359 | } | |
360 | 360 | ||
361 | 361 | ||
362 | 362 | ||
363 | 363 | @Callable(ac) | |
364 | 364 | func setHealth (ax,x) = { | |
365 | 365 | let aF = valueOrErrorMessage(getString(q(toString(ac.caller))), "You don't have a duck staked") | |
366 | 366 | if (if ((0 > ax)) | |
367 | 367 | then true | |
368 | 368 | else (ax > 100)) | |
369 | 369 | then throw("HP should be within 0..100") | |
370 | 370 | else [IntegerEntry(z(x), ax)] | |
371 | 371 | } | |
372 | 372 | ||
373 | 373 | ||
374 | 374 | ||
375 | 375 | @Callable(ac) | |
376 | 376 | func updateBackpack (x,aO) = if ((ac.caller != e)) | |
377 | 377 | then throw("permission denied") | |
378 | 378 | else $Tuple2([StringEntry(w(x), aO)], aO) | |
379 | 379 | ||
380 | 380 |
github/deemru/w8io/169f3d6 411.44 ms ◑![]()