tx · 1azaHc3WhYnqtdcwn3xtg1i54oLoUB1xyQKxHgR88WK

3N33m3JMhEN5QxhDKujcsbpFHo3UcHE4Jwt:  -0.03200000 Waves

2024.10.16 18:11 [3329540] smart account 3N33m3JMhEN5QxhDKujcsbpFHo3UcHE4Jwt > SELF 0.00000000 Waves

{ "type": 13, "id": "1azaHc3WhYnqtdcwn3xtg1i54oLoUB1xyQKxHgR88WK", "fee": 3200000, "feeAssetId": null, "timestamp": 1729091515586, "version": 2, "chainId": 84, "sender": "3N33m3JMhEN5QxhDKujcsbpFHo3UcHE4Jwt", "senderPublicKey": "9Rp4v3BUwexbq4Ta6b1K2wTRxefC3irpr2tHC51mSAjz", "proofs": [ "of5QJb6qRdwBfRnv7SVuRopUpLefP4hZu99xtDeYGGQvhiygHkt5PJVxu47vKeJgjgK3QNwmHPTJcmdnzdxuHm5" ], "script": "base64:AAIFAAAAAAAAADgIAhIECgIICBIDCgEIEgQKAggIEgUKAwgIARIDCgEIEgUKAwgEBBIDCgEIEgASAwoBCBIECgIICAAAAD8AAAAABVNjYWxlAAAAAAAF9eEAAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAHZ2V0Qm9vbAAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAACWlzVGVzdEVudgAAAAAJAQAAAAdnZXRCb29sAAAAAQIAAAAHVEVTVEVOVgEAAAAcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwAAAAACAAAAGXN0YXRpY19yZWZDb250cmFjdEFkZHJlc3MAAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAIAAAAZZ2xvYmFsX2xhc3RDaGVja19pbnRlcmVzdAEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAAUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAAAAAgAAABFzdGF0aWNfZWdnQXNzZXRJZAEAAAAac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAAYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAAAAAIAAAAVc3RhdGljX2JyZWVkZXJBZGRyZXNzAQAAABtzdGF0aWNLZXlfYWNjQm9vc3RlckFkZHJlc3MAAAAAAgAAABhzdGF0aWNfYWNjQm9vc3RlckFkZHJlc3MBAAAAGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwAAAAACAAAAFXN0YXRpY19jb3Vwb25zQWRkcmVzcwEAAAAVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAAAAAIAAAASc3RhdGljX2J1cm5BZGRyZXNzAQAAABJzdGF0aWNLZXlfZXh0cmFGZWUAAAAAAgAAAA9zdGF0aWNfZXh0cmFGZWUBAAAAF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAAAAAIAAAAUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IAAAAAD2tleUdsb2JhbEVhcm5lZAIAAAAPZ2xvYmFsX2Vhcm5pbmdzAQAAABJzdGF0aWNLZXlfcGVyY2hGZWUAAAAAAgAAAA9zdGF0aWNfcGVyY2hGZWUBAAAAGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwAAAAACAAAAFXN0YXRpY19yZWJpcnRoQWRkcmVzcwEAAAAec3RhdGljS2V5X3R1cnRsZVJlYmlydGhBZGRyZXNzAAAAAAIAAAAbc3RhdGljX3R1cnRsZVJlYmlydGhBZGRyZXNzAQAAABZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAAAAAIAAAATc3RhdGljX2l0ZW1zQWRkcmVzcwEAAAAOdG90YWxTdGFrZWRLZXkAAAAAAgAAAAx0b3RhbF9zdGFrZWQBAAAAH3N0YXRpY0tleV9wcm94eVN0YWtpbmdDb250cmFjdHMAAAAAAgAAABxzdGF0aWNfcHJveHlTdGFraW5nQ29udHJhY3RzAQAAABlzdGF0aWNLZXlfY2ZNYXN0ZXJBZGRyZXNzAAAAAAIAAAAWc3RhdGljX2NmTWFzdGVyQWRkcmVzcwEAAAATc3RhdGljS2V5X3BvdGlvbkZlZQAAAAACAAAAEHN0YXRpY19wb3Rpb25GZWUBAAAAHnN0YXRpY0tleV9jYW5pbmVTdGFraW5nQWRkcmVzcwAAAAACAAAAG3N0YXRpY19jYW5pbmVTdGFraW5nQWRkcmVzcwEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwAAAAABAAAADWdldEVnZ0Fzc2V0SWQAAAAACQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAAAAAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAAAAAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwAAAAABAAAAFGdldEFjY0Jvb3N0ZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAbc3RhdGljS2V5X2FjY0Jvb3N0ZXJBZGRyZXNzAAAAAAEAAAARZ2V0Q291cG9uc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAAAAAQAAAA5nZXRCdXJuQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFXN0YXRpY0tleV9idXJuQWRkcmVzcwAAAAABAAAAEGdldEZlZUFnZ3JlZ2F0b3IAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgAAAAABAAAAFWdldFJlZkNvbnRyYWN0QWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAHHN0YXRpY0tleV9yZWZDb250cmFjdEFkZHJlc3MAAAAAAQAAABdnZXRUdXJ0bGVSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAHnN0YXRpY0tleV90dXJ0bGVSZWJpcnRoQWRkcmVzcwAAAAABAAAAD2dldEl0ZW1zQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAAAAAQAAAA9nZXRQcm94eVN0YWtpbmcAAAAACQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAH3N0YXRpY0tleV9wcm94eVN0YWtpbmdDb250cmFjdHMAAAAAAQAAABJnZXRDZk1hc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABlzdGF0aWNLZXlfY2ZNYXN0ZXJBZGRyZXNzAAAAAAEAAAAMZ2V0UG90aW9uRmVlAAAAAAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABNzdGF0aWNLZXlfcG90aW9uRmVlAAAAAAEAAAAXZ2V0Q2FuaW5lU3Rha2luZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAAB5zdGF0aWNLZXlfY2FuaW5lU3Rha2luZ0FkZHJlc3MAAAAAAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAIAAAAHYWRkcmVzcwAAAAVhc3NldAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEl9sYXN0Q2hlY2tJbnRlcmVzdAEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACAAAAB2FkZHJlc3MAAAAFYXNzZXQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAA1fZmFybWluZ1Bvd2VyAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgAAAAdhZGRyZXNzAAAABWFzc2V0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAIX2NsYWltZWQBAAAAEnRvdGFsU3Rha2VkVXNlcktleQAAAAEAAAAHYWRkcmVzcwkAASwAAAACAgAAAA10b3RhbF9zdGFrZWRfBQAAAAdhZGRyZXNzAAAAAA1SZWZlcmVyUmV3YXJkAAAAAAAAAAAFAQAAABZjaGVja0FkZGl0aW9uYWxQYXltZW50AAAAAQAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAZRkNBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQAAAAJZmVlQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAEnN0YXRpY0tleV9leHRyYUZlZQAAAAADCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAACWZlZUFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAcRkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkAAaQAAAABBQAAAAlmZWVBbW91bnQCAAAAEyBhbW91bnQgb2Ygd2F2ZWxldHMJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEGdldEZlZUFnZ3JlZ2F0b3IAAAAABQAAAAlmZWVBbW91bnQFAAAABHVuaXQFAAAAA25pbAEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAVhc0ludAAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAUAAAADaW50CQAAAgAAAAECAAAAHkZBSTogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEAAAAKYXNJbnRUdXBsZQAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAooSW50LCBJbnQpBAAAAANpbnQFAAAAByRtYXRjaDAFAAAAA2ludAkAAAIAAAABAgAAACRGQUk6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiAoSW50LEludCkBAAAAEmhhbmRsZVN0YWtpbmdUb3BVcAAAAAEAAAAGYW1vdW50BAAAAA9jdXJyZW50SW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAVa2V5R2xvYmFsTGFzdEludGVyZXN0BAAAABF0b3RhbFN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAOdG90YWxTdGFrZWRLZXkAAAAABAAAAA1pbnRlcmVzdERlbHRhAwkAAGYAAAACBQAAABF0b3RhbFN0YWtlZEFtb3VudAAAAAAAAAAAAAkAAGsAAAADBQAAAAZhbW91bnQFAAAABVNjYWxlBQAAABF0b3RhbFN0YWtlZEFtb3VudAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPa2V5R2xvYmFsRWFybmVkCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAPa2V5R2xvYmFsRWFybmVkBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAkAAGQAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAADWludGVyZXN0RGVsdGEFAAAAA25pbAEAAAAIYXNTdHJpbmcAAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAZzdHJpbmcFAAAAByRtYXRjaDAFAAAABnN0cmluZwkAAAIAAAABAgAAACFGQVM6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBAAAADXRyeUdldEJvb2xlYW4AAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIHAQAAABV0cnlHZXRCb29sZWFuRXh0ZXJuYWwAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAADmdldEFzc2V0T3JpZ2luAAAAAQAAAApnZW5lcmF0aW9uAwkAAAAAAAACBQAAAApnZW5lcmF0aW9uAgAAAAFHCQEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAJAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAABAAAADmdldEFzc2V0UmFyaXR5AAAAAgAAAAhnZW5vdHlwZQAAAApnZW5lcmF0aW9uBAAAAAhxdWFudGl0eQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIJAQAAAA5nZXRBc3NldE9yaWdpbgAAAAEFAAAACmdlbmVyYXRpb24JAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAACGdlbm90eXBlAgAAAAlfcXVhbnRpdHkJAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAACGdlbm90eXBlAgAAABNfcXVhbnRpdHkgbm90IGZvdW5kBAAAAAVwb3dlcgkAAGwAAAAGCQAAaQAAAAIAAAAAAAAAJxAFAAAACHF1YW50aXR5AAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAABAAAAAAAAAAACBQAAAAVGTE9PUgMJAABmAAAAAgUAAAAFcG93ZXIAAAAAAAAAAAAFAAAABXBvd2VyAAAAAAAAAAACAQAAABZnZXRBc3NldFJhcml0eUNvbXBsZXRlAAAAAgAAAAlpc0phY2twb3QAAAAJYXNzZXROYW1lBAAAAAZyYXJpdHkDBQAAAAlpc0phY2twb3QAAAAAAAAAAGQEAAAACmdlbmVyYXRpb24JAAEvAAAAAgkBAAAACXRha2VSaWdodAAAAAIFAAAACWFzc2V0TmFtZQAAAAAAAAAAAgAAAAAAAAAAAQQAAAAHZmFybUdlbgkBAAAACGFzU3RyaW5nAAAAAQkAA/wAAAAECQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAAAgAAAA5nZXRHZW5Gcm9tTmFtZQkABEwAAAACBQAAAAlhc3NldE5hbWUFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAdmYXJtR2VuBQAAAAdmYXJtR2VuCQEAAAAOZ2V0QXNzZXRSYXJpdHkAAAACBQAAAAdmYXJtR2VuBQAAAApnZW5lcmF0aW9uCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUAAAAGcmFyaXR5AQAAABJ1cGRhdGVGYXJtaW5nUG93ZXIAAAADAAAAB2FkZHJlc3MAAAAFYXNzZXQAAAAMb3JpZ2luQ2FsbGVyBAAAAAt0b3RhbFN0YWtlZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAOdG90YWxTdGFrZWRLZXkAAAAABAAAAA90b3RhbFN0YWtlZFVzZXIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEnRvdGFsU3Rha2VkVXNlcktleQAAAAEFAAAAB2FkZHJlc3MEAAAACWN1cnJlbnRGUAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAQAAAAFbmV3RlAJAQAAAAphc0ludFR1cGxlAAAAAQkAA/wAAAAEBQAAAAR0aGlzAgAAABJjYWxjdWxhdGVGYXJtUG93ZXIJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgUAAAAMb3JpZ2luQ2FsbGVyBQAAAANuaWwFAAAAA25pbAMJAQAAAAIhPQAAAAIFAAAACWN1cnJlbnRGUAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvdGFsU3Rha2VkS2V5AAAAAAkAAGQAAAACCQAAZQAAAAIFAAAAC3RvdGFsU3Rha2VkBQAAAAljdXJyZW50RlAIBQAAAAVuZXdGUAAAAAJfMQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEnRvdGFsU3Rha2VkVXNlcktleQAAAAEFAAAAB2FkZHJlc3MJAABkAAAAAgkAAGUAAAACBQAAAA90b3RhbFN0YWtlZFVzZXIFAAAACWN1cnJlbnRGUAgFAAAABW5ld0ZQAAAAAl8xCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAgFAAAABW5ld0ZQAAAAAl8xBQAAAANuaWwFAAAAA25pbAEAAAASY2xhaW1TdGFraW5nUmVzdWx0AAAABQAAAAdhZGRyZXNzAAAABWFzc2V0AAAABnJlY2FsYwAAAA93YWxsZXRUb1JlY2VpdmUAAAALYm9udXNDYWxsZXIEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABVrZXlHbG9iYWxMYXN0SW50ZXJlc3QEAAAAEWxhc3RDaGVja0ludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BAAAAAxzdGFrZWRBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEWFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAACGZwVXBkYXRlAwUAAAAGcmVjYWxjCQEAAAASdXBkYXRlRmFybWluZ1Bvd2VyAAAAAwUAAAAHYWRkcmVzcwUAAAAFYXNzZXQFAAAAC2JvbnVzQ2FsbGVyBQAAAANuaWwDCQAAAAAAAAIFAAAACGZwVXBkYXRlBQAAAAhmcFVwZGF0ZQQAAAAGcmV3YXJkAwkAAGYAAAACBQAAABFsYXN0Q2hlY2tJbnRlcmVzdAAAAAAAAAAAAAkAAGsAAAADCQAAZQAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAARbGFzdENoZWNrSW50ZXJlc3QFAAAADHN0YWtlZEFtb3VudAUAAAAFU2NhbGUAAAAAAAAAAAAJAAUUAAAAAgkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAD3dhbGxldFRvUmVjZWl2ZQUAAAAGcmV3YXJkCQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAAA9jdXJyZW50SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgUAAAAPd2FsbGV0VG9SZWNlaXZlBQAAAAVhc3NldAkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgUAAAAPd2FsbGV0VG9SZWNlaXZlBQAAAAVhc3NldAUAAAAGcmV3YXJkBQAAAANuaWwFAAAACGZwVXBkYXRlBQAAAAZyZXdhcmQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAAlhc0Jvb2xlYW4AAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAAHYm9vbGVhbgUAAAAHJG1hdGNoMAUAAAAHYm9vbGVhbgkAAAIAAAABAgAAACJGQUI6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBCb29sZWFuAQAAABNjYWxjdWxhdGVQZXJjaFByaWNlAAAAAQAAAAdhZGRyZXNzBAAAABFoYXNBcnRlZmFjdFN0YWtlZAkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAAFGdldEFjY0Jvb3N0ZXJBZGRyZXNzAAAAAAkAASwAAAACCQABLAAAAAICAAAAC0FSVC1YTUlTVExfBQAAAAdhZGRyZXNzAgAAAAZfb3duZXIEAAAACnBlcmNoUHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAASc3RhdGljS2V5X3BlcmNoRmVlAAAAAAMJAAAAAAAAAgUAAAARaGFzQXJ0ZWZhY3RTdGFrZWQCAAAAAAUAAAAKcGVyY2hQcmljZQkAAGgAAAACCQAAaQAAAAIFAAAACnBlcmNoUHJpY2UAAAAAAAAAAAoAAAAAAAAAAAkBAAAAEGlzUHJveHlTdGFraW5nU2MAAAABAAAAB2FkZHJlc3MEAAAAEGFsbG93ZWRDb250cmFjdHMJAQAAAA9nZXRQcm94eVN0YWtpbmcAAAAABAAAABRhbGxvd2VkQ29udHJhY3RzTGlzdAkABLUAAAACBQAAABBhbGxvd2VkQ29udHJhY3RzAgAAAAE7CQEAAAACIT0AAAACCQAETwAAAAIFAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0BQAAAAdhZGRyZXNzBQAAAAR1bml0AAAACgAAAAFpAQAAABJjYWxjdWxhdGVGYXJtUG93ZXIAAAACAAAAB2Fzc2V0SWQAAAAMYm9udXNBZGRyZXNzAwkBAAAAASEAAAABAwkAAAAAAAACCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABCQACWQAAAAEFAAAAB2Fzc2V0SWQAAAAGaXNzdWVyCQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAABgkAAAAAAAACCAkBAAAA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cnlHZXRJbnRlZ2VyAAAAAQUAAAAOcGVyY2hBbW91bnRLZXkJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOcGVyY2hBbW91bnRLZXkJAABkAAAAAgUAAAALcGVyY2hBbW91bnQFAAAABmFtb3VudAUAAAADbmlsAgAAAAAAAAABaQEAAAAObWlncmF0ZVBlcmNoZXMAAAABAAAAB2FkZHJlc3MEAAAACm9sZEZhcm1pbmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABVzdGF0aWNfZmFybWluZ0FkZHJlc3MKAQAAABd0cnlHZXRJbnRlZ2VyT2xkRmFybWluZwAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAACm9sZEZhcm1pbmcFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAABAAAAAxwZXJjaEFtb3VudEIJAQAAABd0cnlHZXRJbnRlZ2VyT2xkRmFybWluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAATX3BlcmNoZXNBdmFpbGFibGVfQgMJAAAAAAAAAgUAAAAMcGVyY2hBbW91bnRCBQAAAAxwZXJjaEFtb3VudEIEAAAADHBlcmNoQW1vdW50UgkBAAAAF3RyeUdldEludGVnZXJPbGRGYXJtaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABNfcGVyY2hlc0F2YWlsYWJsZV9SAwkAAAAAAAACBQAAAAxwZXJjaEFtb3VudFIFAAAADHBlcmNoQW1vdW50UgQAAAAMcGVyY2hBbW91bnRHCQEAAAAXdHJ5R2V0SW50ZWdlck9sZEZhcm1pbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAE19wZXJjaGVzQXZhaWxhYmxlX0cDCQAAAAAAAAIFAAAADHBlcmNoQW1vdW50RwUA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", "height": 3329540, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H4PuzC3osGwRrYve2J1sKRU1gUs4HsaYqFzNAYD9xHiF Next: F4j42U56yjKoGDm4MKitVGQvkTtLwogvjh2tGAaRDKBM Diff:
OldNewDifferences
330330 then 8
331331 else size(uniqueList)
332332 let power = pow(15, 1, totalGenes, 0, 2, DOWN)
333- let multiplier = (((height - 3750000) * 100) / (((60 * 24) * 30) * 3))
333+ let baseBlock = if (isTestEnv())
334+ then 2500000
335+ else 3750000
336+ let multiplier = (((height - baseBlock) * 100) / (((60 * 24) * 30) * 3))
334337 let basePower = tryGetInteger((assetId + "_basePower"))
335338 let finalPower = if ((basePower > 0))
336339 then basePower
498501
499502
500503 @Callable(i)
501-func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (if (stakeWithoutPerch)
502- then !(isProxyStakingSc(toString(i.caller)))
503- else false)
504- then throw("You can't stake without a perch")
505- else {
506- let validPayment = checkAdditionalPayment(i.payments[0])
507- if ((validPayment == validPayment))
508- then {
509- let pmt = value(i.payments[1])
510- let assetId = value(pmt.assetId)
511- let assetName = value(value(assetInfo(assetId)).name)
512- let isJackpot = (takeRight(assetName, 1) == "U")
513- let address = toString(i.caller)
514- let perchAddress = if (usePerchOrigin)
515- then toString(i.originCaller)
516- else address
517- let perches = if (stakeWithoutPerch)
518- then nil
519- else {
520- let color = if (isJackpot)
521- then jColor
522- else takeRight(assetName, 1)
523- let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
524- if ((0 >= availablePerches))
525- then throw(("no perches available for the color " + color))
526- else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
527- }
528- if ((perches == perches))
529- then if ((pmt.amount != 1))
530- then throw("NFT is not attached")
504+func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (true)
505+ then throw("Staking is disabled")
506+ else if (if (stakeWithoutPerch)
507+ then !(isProxyStakingSc(toString(i.caller)))
508+ else false)
509+ then throw("You can't stake without a perch")
510+ else {
511+ let validPayment = checkAdditionalPayment(i.payments[0])
512+ if ((validPayment == validPayment))
513+ then {
514+ let pmt = value(i.payments[1])
515+ let assetId = value(pmt.assetId)
516+ let assetName = value(value(assetInfo(assetId)).name)
517+ let isJackpot = (takeRight(assetName, 1) == "U")
518+ let address = toString(i.caller)
519+ let perchAddress = if (usePerchOrigin)
520+ then toString(i.originCaller)
521+ else address
522+ let perches = if (stakeWithoutPerch)
523+ then nil
531524 else {
532- let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId), toString(i.originCaller)], nil))
533- if ((farmingPower == farmingPower))
534- then {
535- let result = claimStakingResult(address, toBase58String(assetId), false, address, toString(i.originCaller))
536- if ((result == result))
537- then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
538- else throw("Strict value is not equal to itself.")
539- }
540- else throw("Strict value is not equal to itself.")
525+ let color = if (isJackpot)
526+ then jColor
527+ else takeRight(assetName, 1)
528+ let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
529+ if ((0 >= availablePerches))
530+ then throw(("no perches available for the color " + color))
531+ else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
541532 }
542- else throw("Strict value is not equal to itself.")
543- }
544- else throw("Strict value is not equal to itself.")
545- }
533+ if ((perches == perches))
534+ then if ((pmt.amount != 1))
535+ then throw("NFT is not attached")
536+ else {
537+ let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId), toString(i.originCaller)], nil))
538+ if ((farmingPower == farmingPower))
539+ then {
540+ let result = claimStakingResult(address, toBase58String(assetId), false, address, toString(i.originCaller))
541+ if ((result == result))
542+ then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
543+ else throw("Strict value is not equal to itself.")
544+ }
545+ else throw("Strict value is not equal to itself.")
546+ }
547+ else throw("Strict value is not equal to itself.")
548+ }
549+ else throw("Strict value is not equal to itself.")
550+ }
546551
547552
548553
587592
588593
589594 @Callable(i)
590-func topUpReward () = {
591- let firstPayment = value(i.payments[0])
592- if ((firstPayment.assetId != getEggAssetId()))
593- then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
594- else {
595- let resHandleStaking = handleStakingTopUp(firstPayment.amount)
596- $Tuple2(resHandleStaking, true)
597- }
598- }
595+func topUpReward () = if (true)
596+ then throw("Staking is disabled")
597+ else {
598+ let firstPayment = value(i.payments[0])
599+ if ((firstPayment.assetId != getEggAssetId()))
600+ then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
601+ else {
602+ let resHandleStaking = handleStakingTopUp(firstPayment.amount)
603+ $Tuple2(resHandleStaking, true)
604+ }
605+ }
599606
600607
601608
602609 @Callable(i)
603-func claimReward (assetId) = {
604- let validPayment = if ((i.originCaller == getCfMasterAddress()))
605- then nil
606- else checkAdditionalPayment(i.payments[0])
607- if ((validPayment == validPayment))
608- then if (if ((tryGetString((assetId + "_owner")) != toString(i.caller)))
609- then (tryGetString((assetId + "_original_caller")) != toString(i.caller))
610- else false)
611- then throw((("You don't own this duck (" + assetId) + ")!! "))
612- else if ((size(i.payments) > 1))
613- then throw("Please don't add extra payments")
614- else {
615- let toReceive = if ((i.originCaller != getCfMasterAddress()))
616- then toString(i.caller)
617- else tryGetString((assetId + "_original_caller"))
618- let owner = if ((i.originCaller != getCfMasterAddress()))
619- then toString(i.caller)
620- else tryGetString((assetId + "_owner"))
621- let origin = if ((i.originCaller != getCfMasterAddress()))
622- then toString(i.originCaller)
623- else tryGetString((assetId + "_original_caller"))
624- let result = claimStakingResult(owner, assetId, true, toReceive, origin)
625- $Tuple2((validPayment ++ result._1), result._2)
626- }
627- else throw("Strict value is not equal to itself.")
628- }
610+func claimReward (assetId) = if (true)
611+ then throw("Staking is disabled")
612+ else {
613+ let validPayment = if ((i.originCaller == getCfMasterAddress()))
614+ then nil
615+ else checkAdditionalPayment(i.payments[0])
616+ if ((validPayment == validPayment))
617+ then if (if ((tryGetString((assetId + "_owner")) != toString(i.caller)))
618+ then (tryGetString((assetId + "_original_caller")) != toString(i.caller))
619+ else false)
620+ then throw((("You don't own this duck (" + assetId) + ")!! "))
621+ else if ((size(i.payments) > 1))
622+ then throw("Please don't add extra payments")
623+ else {
624+ let toReceive = if ((i.originCaller != getCfMasterAddress()))
625+ then toString(i.caller)
626+ else tryGetString((assetId + "_original_caller"))
627+ let owner = if ((i.originCaller != getCfMasterAddress()))
628+ then toString(i.caller)
629+ else tryGetString((assetId + "_owner"))
630+ let origin = if ((i.originCaller != getCfMasterAddress()))
631+ then toString(i.originCaller)
632+ else tryGetString((assetId + "_original_caller"))
633+ let result = claimStakingResult(owner, assetId, true, toReceive, origin)
634+ $Tuple2((validPayment ++ result._1), result._2)
635+ }
636+ else throw("Strict value is not equal to itself.")
637+ }
629638
630639
631640
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale = 100000000
55
66 func tryGetStringExternal (address,key) = match getString(address, key) {
77 case a: String =>
88 a
99 case _ =>
1010 ""
1111 }
1212
1313
1414 func tryGetString (key) = tryGetStringExternal(this, key)
1515
1616
1717 func getBool (key) = match getBoolean(this, key) {
1818 case b: Boolean =>
1919 b
2020 case _ =>
2121 false
2222 }
2323
2424
2525 func isTestEnv () = getBool("TESTENV")
2626
2727
2828 func staticKey_refContractAddress () = "static_refContractAddress"
2929
3030
3131 let keyGlobalLastInterest = "global_lastCheck_interest"
3232
3333 func staticKey_oracleAddress () = "static_oracleAddress"
3434
3535
3636 func staticKey_eggAssetId () = "static_eggAssetId"
3737
3838
3939 func staticKey_incubatorAddress () = "static_incubatorAddress"
4040
4141
4242 func staticKey_breederAddress () = "static_breederAddress"
4343
4444
4545 func staticKey_accBoosterAddress () = "static_accBoosterAddress"
4646
4747
4848 func staticKey_couponsAddress () = "static_couponsAddress"
4949
5050
5151 func staticKey_burnAddress () = "static_burnAddress"
5252
5353
5454 func staticKey_extraFee () = "static_extraFee"
5555
5656
5757 func staticKey_feeAggregator () = "static_feeAggregator"
5858
5959
6060 let keyGlobalEarned = "global_earnings"
6161
6262 func staticKey_perchFee () = "static_perchFee"
6363
6464
6565 func staticKey_rebirthAddress () = "static_rebirthAddress"
6666
6767
6868 func staticKey_turtleRebirthAddress () = "static_turtleRebirthAddress"
6969
7070
7171 func staticKey_itemsAddress () = "static_itemsAddress"
7272
7373
7474 func totalStakedKey () = "total_staked"
7575
7676
7777 func staticKey_proxyStakingContracts () = "static_proxyStakingContracts"
7878
7979
8080 func staticKey_cfMasterAddress () = "static_cfMasterAddress"
8181
8282
8383 func staticKey_potionFee () = "static_potionFee"
8484
8585
8686 func staticKey_canineStakingAddress () = "static_canineStakingAddress"
8787
8888
8989 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
9090
9191
9292 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rebirthAddress())))
9393
9494
9595 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
9696
9797
9898 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
9999
100100
101101 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
102102
103103
104104 func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_accBoosterAddress())))
105105
106106
107107 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
108108
109109
110110 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
111111
112112
113113 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
114114
115115
116116 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
117117
118118
119119 func getTurtleRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleRebirthAddress())))
120120
121121
122122 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
123123
124124
125125 func getProxyStaking () = tryGetStringExternal(getOracle(), staticKey_proxyStakingContracts())
126126
127127
128128 func getCfMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_cfMasterAddress())))
129129
130130
131131 func getPotionFee () = getIntegerValue(getOracle(), staticKey_potionFee())
132132
133133
134134 func getCanineStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineStakingAddress())))
135135
136136
137137 func keyLastCheckInterest (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest")
138138
139139
140140 func assetFarmingPower (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_farmingPower")
141141
142142
143143 func rewardClaimedKey (address,asset) = (((address + "_asset_") + asset) + "_claimed")
144144
145145
146146 func totalStakedUserKey (address) = ("total_staked_" + address)
147147
148148
149149 let RefererReward = 5
150150
151151 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
152152 then throw("FCAP: Please attach waves")
153153 else {
154154 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
155155 if ((payment.amount != feeAmount))
156156 then throw((("FCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
157157 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
158158 }
159159
160160
161161 func tryGetInteger (key) = match getInteger(this, key) {
162162 case b: Int =>
163163 b
164164 case _ =>
165165 0
166166 }
167167
168168
169169 func asInt (value) = match value {
170170 case int: Int =>
171171 int
172172 case _ =>
173173 throw("FAI: wrong type, expected: Int")
174174 }
175175
176176
177177 func asIntTuple (value) = match value {
178178 case int: (Int, Int) =>
179179 int
180180 case _ =>
181181 throw("FAI: wrong type, expected: (Int,Int)")
182182 }
183183
184184
185185 func handleStakingTopUp (amount) = {
186186 let currentInterest = tryGetInteger(keyGlobalLastInterest)
187187 let totalStakedAmount = tryGetInteger(totalStakedKey())
188188 let interestDelta = if ((totalStakedAmount > 0))
189189 then fraction(amount, Scale, totalStakedAmount)
190190 else 0
191191 [IntegerEntry(keyGlobalEarned, (tryGetInteger(keyGlobalEarned) + amount)), IntegerEntry(keyGlobalLastInterest, (currentInterest + interestDelta))]
192192 }
193193
194194
195195 func asString (value) = match value {
196196 case string: String =>
197197 string
198198 case _ =>
199199 throw("FAS: wrong type, expected: String")
200200 }
201201
202202
203203 func tryGetBoolean (key) = match getBoolean(this, key) {
204204 case b: Boolean =>
205205 b
206206 case _ =>
207207 false
208208 }
209209
210210
211211 func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
212212 case b: Boolean =>
213213 b
214214 case _ =>
215215 false
216216 }
217217
218218
219219 func getAssetOrigin (generation) = if ((generation == "G"))
220220 then getIncubatorAddress()
221221 else getBreederAddress()
222222
223223
224224 func getAssetRarity (genotype,generation) = {
225225 let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found"))
226226 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
227227 if ((power > 0))
228228 then power
229229 else 2
230230 }
231231
232232
233233 func getAssetRarityComplete (isJackpot,assetName) = {
234234 let rarity = if (isJackpot)
235235 then 100
236236 else {
237237 let generation = take(takeRight(assetName, 2), 1)
238238 let farmGen = asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
239239 if ((farmGen == farmGen))
240240 then getAssetRarity(farmGen, generation)
241241 else throw("Strict value is not equal to itself.")
242242 }
243243 rarity
244244 }
245245
246246
247247 func updateFarmingPower (address,asset,originCaller) = {
248248 let totalStaked = tryGetInteger(totalStakedKey())
249249 let totalStakedUser = tryGetInteger(totalStakedUserKey(address))
250250 let currentFP = tryGetInteger(assetFarmingPower(address, asset))
251251 let newFP = asIntTuple(invoke(this, "calculateFarmPower", [asset, originCaller], nil))
252252 if ((currentFP != 0))
253253 then [IntegerEntry(totalStakedKey(), ((totalStaked - currentFP) + newFP._1)), IntegerEntry(totalStakedUserKey(address), ((totalStakedUser - currentFP) + newFP._1)), IntegerEntry(assetFarmingPower(address, asset), newFP._1)]
254254 else nil
255255 }
256256
257257
258258 func claimStakingResult (address,asset,recalc,walletToReceive,bonusCaller) = {
259259 let currentInterest = tryGetInteger(keyGlobalLastInterest)
260260 let lastCheckInterest = tryGetInteger(keyLastCheckInterest(address, asset))
261261 let stakedAmount = tryGetInteger(assetFarmingPower(address, asset))
262262 let fpUpdate = if (recalc)
263263 then updateFarmingPower(address, asset, bonusCaller)
264264 else nil
265265 if ((fpUpdate == fpUpdate))
266266 then {
267267 let reward = if ((lastCheckInterest > 0))
268268 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
269269 else 0
270270 $Tuple2(([ScriptTransfer(addressFromStringValue(walletToReceive), reward, getEggAssetId()), IntegerEntry(keyLastCheckInterest(address, asset), currentInterest), IntegerEntry(rewardClaimedKey(walletToReceive, asset), (tryGetInteger(rewardClaimedKey(walletToReceive, asset)) + reward))] ++ fpUpdate), reward)
271271 }
272272 else throw("Strict value is not equal to itself.")
273273 }
274274
275275
276276 func asBoolean (value) = match value {
277277 case boolean: Boolean =>
278278 boolean
279279 case _ =>
280280 throw("FAB: wrong type, expected: Boolean")
281281 }
282282
283283
284284 func calculatePerchPrice (address) = {
285285 let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner"))
286286 let perchPrice = getIntegerValue(getOracle(), staticKey_perchFee())
287287 if ((hasArtefactStaked == ""))
288288 then perchPrice
289289 else ((perchPrice / 10) * 9)
290290 }
291291
292292
293293 func isProxyStakingSc (address) = {
294294 let allowedContracts = getProxyStaking()
295295 let allowedContractsList = split(allowedContracts, ";")
296296 (indexOf(allowedContractsList, address) != unit)
297297 }
298298
299299
300300 @Callable(i)
301301 func calculateFarmPower (assetId,bonusAddress) = if (!(if ((value(assetInfo(fromBase58String(assetId))).issuer == getBreederAddress()))
302302 then true
303303 else (value(assetInfo(fromBase58String(assetId))).issuer == getIncubatorAddress())))
304304 then throw("This does not seem like a valid Duck!")
305305 else {
306306 let assetName = value(assetInfo(fromBase58String(assetId))).name
307307 let gen = takeRight(assetName, 1)
308308 let isJackpot = (takeRight(assetName, 1) == "U")
309309 let rarity = getAssetRarityComplete(isJackpot, assetName)
310310 let genotype = split(dropRight(drop(assetName, 5), 3), "")
311311 func uniqueArrayFilter (accum,nextGen) = if (!(containsElement(accum, nextGen)))
312312 then (accum :+ nextGen)
313313 else accum
314314
315315 let uniqueList = {
316316 let $l = genotype
317317 let $s = size($l)
318318 let $acc0 = nil
319319 func $f0_1 ($a,$i) = if (($i >= $s))
320320 then $a
321321 else uniqueArrayFilter($a, $l[$i])
322322
323323 func $f0_2 ($a,$i) = if (($i >= $s))
324324 then $a
325325 else throw("List size exceeds 8")
326326
327327 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
328328 }
329329 let totalGenes = if ((gen == "U"))
330330 then 8
331331 else size(uniqueList)
332332 let power = pow(15, 1, totalGenes, 0, 2, DOWN)
333- let multiplier = (((height - 3750000) * 100) / (((60 * 24) * 30) * 3))
333+ let baseBlock = if (isTestEnv())
334+ then 2500000
335+ else 3750000
336+ let multiplier = (((height - baseBlock) * 100) / (((60 * 24) * 30) * 3))
334337 let basePower = tryGetInteger((assetId + "_basePower"))
335338 let finalPower = if ((basePower > 0))
336339 then basePower
337340 else ((power * multiplier) / 100)
338341 let finalPowerRarity = ((finalPower * rarity) / 100)
339342 let farmBoost = asInt(invoke(getItemsAddress(), "calculateFarmingPowerBoost", [assetId, bonusAddress], nil))
340343 if ((farmBoost == farmBoost))
341344 then {
342345 let finalPowerRarityBoost = (finalPowerRarity + ((finalPowerRarity * farmBoost) / 100))
343346 $Tuple2(nil, $Tuple2(finalPowerRarityBoost, finalPower))
344347 }
345348 else throw("Strict value is not equal to itself.")
346349 }
347350
348351
349352
350353 @Callable(i)
351354 func configureOracle (oracle) = if ((i.caller != this))
352355 then throw("FCO: admin only")
353356 else [StringEntry(staticKey_oracleAddress(), oracle)]
354357
355358
356359
357360 @Callable(i)
358361 func buyPerch (colorI,refererAddress) = {
359362 let validPayment = checkAdditionalPayment(i.payments[0])
360363 if ((validPayment == validPayment))
361364 then {
362365 let color = if ((colorI == "U"))
363366 then "B"
364367 else colorI
365368 if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
366369 then throw("you need to set color properly")
367370 else {
368371 let exactPrice = calculatePerchPrice(toString(i.caller))
369372 let leftToPay = if ((i.originCaller == i.caller))
370373 then {
371374 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
372375 if ((amountPaidByCoupons == amountPaidByCoupons))
373376 then (exactPrice - amountPaidByCoupons)
374377 else throw("Strict value is not equal to itself.")
375378 }
376379 else exactPrice
377380 let payment = if ((leftToPay != 0))
378381 then {
379382 let firstPayment = if ((size(i.payments) == 2))
380383 then value(i.payments[1])
381384 else value(i.payments[0])
382385 if ((firstPayment.assetId != getEggAssetId()))
383386 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
384387 else if ((firstPayment.amount != leftToPay))
385388 then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller)))
386389 else {
387390 let refererRewardForPerch = fraction(leftToPay, 5, 100)
388391 let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
389392 if ((refCall == refCall))
390393 then {
391394 let toBurn = if (refCall)
392395 then (leftToPay - refererRewardForPerch)
393396 else leftToPay
394397 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
395398 if ((burnCall == burnCall))
396399 then leftToPay
397400 else throw("Strict value is not equal to itself.")
398401 }
399402 else throw("Strict value is not equal to itself.")
400403 }
401404 }
402405 else 0
403406 if ((payment == payment))
404407 then {
405408 let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
406409 let perchAmount = tryGetInteger(perchAmountKey)
407410 ([IntegerEntry(perchAmountKey, (perchAmount + 1))] ++ validPayment)
408411 }
409412 else throw("Strict value is not equal to itself.")
410413 }
411414 }
412415 else throw("Strict value is not equal to itself.")
413416 }
414417
415418
416419
417420 @Callable(i)
418421 func addFreePerch (address,color,amount) = if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
419422 then throw("you need to set color properly")
420423 else if (if (if ((i.caller != getRebirthAddress()))
421424 then (i.caller != getTurtleRebirthAddress())
422425 else false)
423426 then (i.caller != this)
424427 else false)
425428 then throw("rebirth and admin only")
426429 else {
427430 let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color)
428431 let perchAmount = tryGetInteger(perchAmountKey)
429432 $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + amount))], "")
430433 }
431434
432435
433436
434437 @Callable(i)
435438 func migratePerches (address) = {
436439 let oldFarming = addressFromStringValue(tryGetStringExternal(getOracle(), "static_farmingAddress"))
437440 func tryGetIntegerOldFarming (key) = match getInteger(oldFarming, key) {
438441 case b: Int =>
439442 b
440443 case _ =>
441444 0
442445 }
443446
444447 let perchAmountB = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_B"))
445448 if ((perchAmountB == perchAmountB))
446449 then {
447450 let perchAmountR = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_R"))
448451 if ((perchAmountR == perchAmountR))
449452 then {
450453 let perchAmountG = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_G"))
451454 if ((perchAmountG == perchAmountG))
452455 then {
453456 let perchAmountY = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_Y"))
454457 if ((perchAmountY == perchAmountY))
455458 then {
456459 let perchAmountBInvoke = invoke(this, "addFreePerch", [address, "B", perchAmountB], nil)
457460 if ((perchAmountBInvoke == perchAmountBInvoke))
458461 then {
459462 let perchAmountRInvoke = invoke(this, "addFreePerch", [address, "R", perchAmountR], nil)
460463 if ((perchAmountRInvoke == perchAmountRInvoke))
461464 then {
462465 let perchAmountGInvoke = invoke(this, "addFreePerch", [address, "G", perchAmountG], nil)
463466 if ((perchAmountGInvoke == perchAmountGInvoke))
464467 then {
465468 let perchAmountYInvoke = invoke(this, "addFreePerch", [address, "Y", perchAmountY], nil)
466469 if ((perchAmountYInvoke == perchAmountYInvoke))
467470 then if (if (if (if ((perchAmountB == 0))
468471 then (perchAmountR == 0)
469472 else false)
470473 then (perchAmountG == 0)
471474 else false)
472475 then (perchAmountY == 0)
473476 else false)
474477 then throw("Nothing to migrate")
475478 else {
476479 let invokePerchesDelete = invoke(oldFarming, "removePerches", [address], nil)
477480 if ((invokePerchesDelete == invokePerchesDelete))
478481 then nil
479482 else throw("Strict value is not equal to itself.")
480483 }
481484 else throw("Strict value is not equal to itself.")
482485 }
483486 else throw("Strict value is not equal to itself.")
484487 }
485488 else throw("Strict value is not equal to itself.")
486489 }
487490 else throw("Strict value is not equal to itself.")
488491 }
489492 else throw("Strict value is not equal to itself.")
490493 }
491494 else throw("Strict value is not equal to itself.")
492495 }
493496 else throw("Strict value is not equal to itself.")
494497 }
495498 else throw("Strict value is not equal to itself.")
496499 }
497500
498501
499502
500503 @Callable(i)
501-func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (if (stakeWithoutPerch)
502- then !(isProxyStakingSc(toString(i.caller)))
503- else false)
504- then throw("You can't stake without a perch")
505- else {
506- let validPayment = checkAdditionalPayment(i.payments[0])
507- if ((validPayment == validPayment))
508- then {
509- let pmt = value(i.payments[1])
510- let assetId = value(pmt.assetId)
511- let assetName = value(value(assetInfo(assetId)).name)
512- let isJackpot = (takeRight(assetName, 1) == "U")
513- let address = toString(i.caller)
514- let perchAddress = if (usePerchOrigin)
515- then toString(i.originCaller)
516- else address
517- let perches = if (stakeWithoutPerch)
518- then nil
519- else {
520- let color = if (isJackpot)
521- then jColor
522- else takeRight(assetName, 1)
523- let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
524- if ((0 >= availablePerches))
525- then throw(("no perches available for the color " + color))
526- else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
527- }
528- if ((perches == perches))
529- then if ((pmt.amount != 1))
530- then throw("NFT is not attached")
504+func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (true)
505+ then throw("Staking is disabled")
506+ else if (if (stakeWithoutPerch)
507+ then !(isProxyStakingSc(toString(i.caller)))
508+ else false)
509+ then throw("You can't stake without a perch")
510+ else {
511+ let validPayment = checkAdditionalPayment(i.payments[0])
512+ if ((validPayment == validPayment))
513+ then {
514+ let pmt = value(i.payments[1])
515+ let assetId = value(pmt.assetId)
516+ let assetName = value(value(assetInfo(assetId)).name)
517+ let isJackpot = (takeRight(assetName, 1) == "U")
518+ let address = toString(i.caller)
519+ let perchAddress = if (usePerchOrigin)
520+ then toString(i.originCaller)
521+ else address
522+ let perches = if (stakeWithoutPerch)
523+ then nil
531524 else {
532- let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId), toString(i.originCaller)], nil))
533- if ((farmingPower == farmingPower))
534- then {
535- let result = claimStakingResult(address, toBase58String(assetId), false, address, toString(i.originCaller))
536- if ((result == result))
537- then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
538- else throw("Strict value is not equal to itself.")
539- }
540- else throw("Strict value is not equal to itself.")
525+ let color = if (isJackpot)
526+ then jColor
527+ else takeRight(assetName, 1)
528+ let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
529+ if ((0 >= availablePerches))
530+ then throw(("no perches available for the color " + color))
531+ else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
541532 }
542- else throw("Strict value is not equal to itself.")
543- }
544- else throw("Strict value is not equal to itself.")
545- }
533+ if ((perches == perches))
534+ then if ((pmt.amount != 1))
535+ then throw("NFT is not attached")
536+ else {
537+ let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId), toString(i.originCaller)], nil))
538+ if ((farmingPower == farmingPower))
539+ then {
540+ let result = claimStakingResult(address, toBase58String(assetId), false, address, toString(i.originCaller))
541+ if ((result == result))
542+ then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
543+ else throw("Strict value is not equal to itself.")
544+ }
545+ else throw("Strict value is not equal to itself.")
546+ }
547+ else throw("Strict value is not equal to itself.")
548+ }
549+ else throw("Strict value is not equal to itself.")
550+ }
546551
547552
548553
549554 @Callable(i)
550555 func unstakeNFT (asset) = {
551556 let address = toString(i.caller)
552557 if ((tryGetString((asset + "_owner")) != toString(i.caller)))
553558 then throw("You don't own this duck!!")
554559 else {
555560 let result = claimStakingResult(address, asset, false, address, toString(i.originCaller))
556561 if ((result == result))
557562 then {
558563 let validPayment = checkAdditionalPayment(i.payments[0])
559564 if ((validPayment == validPayment))
560565 then {
561566 let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
562567 let withoutPerch = tryGetBoolean((asset + "_without_perch"))
563568 let perches = if (withoutPerch)
564569 then nil
565570 else {
566571 let usePerchOrigin = tryGetBoolean((asset + "_use_origin"))
567572 let perchOwner = if (usePerchOrigin)
568573 then toString(i.originCaller)
569574 else address
570575 [IntegerEntry(((("address_" + perchOwner) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + perchOwner) + "_perchesAvailable_") + color)) + 1))]
571576 }
572577 if ((perches == perches))
573578 then {
574579 let assetFP = tryGetInteger(assetFarmingPower(address, asset))
575580 if ((assetFP == assetFP))
576581 then $Tuple2(((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) - assetFP)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) - assetFP)), DeleteEntry((asset + "_owner")), DeleteEntry(assetFarmingPower(address, asset)), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_perchColor")), DeleteEntry((asset + "_original_caller")), DeleteEntry((asset + "_use_origin")), DeleteEntry((asset + "_without_perch")), ScriptTransfer(Address(fromBase58String(address)), 1, fromBase58String(asset))] ++ validPayment) ++ perches) ++ result._1), result._2)
577582 else throw("Strict value is not equal to itself.")
578583 }
579584 else throw("Strict value is not equal to itself.")
580585 }
581586 else throw("Strict value is not equal to itself.")
582587 }
583588 else throw("Strict value is not equal to itself.")
584589 }
585590 }
586591
587592
588593
589594 @Callable(i)
590-func topUpReward () = {
591- let firstPayment = value(i.payments[0])
592- if ((firstPayment.assetId != getEggAssetId()))
593- then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
594- else {
595- let resHandleStaking = handleStakingTopUp(firstPayment.amount)
596- $Tuple2(resHandleStaking, true)
597- }
598- }
595+func topUpReward () = if (true)
596+ then throw("Staking is disabled")
597+ else {
598+ let firstPayment = value(i.payments[0])
599+ if ((firstPayment.assetId != getEggAssetId()))
600+ then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
601+ else {
602+ let resHandleStaking = handleStakingTopUp(firstPayment.amount)
603+ $Tuple2(resHandleStaking, true)
604+ }
605+ }
599606
600607
601608
602609 @Callable(i)
603-func claimReward (assetId) = {
604- let validPayment = if ((i.originCaller == getCfMasterAddress()))
605- then nil
606- else checkAdditionalPayment(i.payments[0])
607- if ((validPayment == validPayment))
608- then if (if ((tryGetString((assetId + "_owner")) != toString(i.caller)))
609- then (tryGetString((assetId + "_original_caller")) != toString(i.caller))
610- else false)
611- then throw((("You don't own this duck (" + assetId) + ")!! "))
612- else if ((size(i.payments) > 1))
613- then throw("Please don't add extra payments")
614- else {
615- let toReceive = if ((i.originCaller != getCfMasterAddress()))
616- then toString(i.caller)
617- else tryGetString((assetId + "_original_caller"))
618- let owner = if ((i.originCaller != getCfMasterAddress()))
619- then toString(i.caller)
620- else tryGetString((assetId + "_owner"))
621- let origin = if ((i.originCaller != getCfMasterAddress()))
622- then toString(i.originCaller)
623- else tryGetString((assetId + "_original_caller"))
624- let result = claimStakingResult(owner, assetId, true, toReceive, origin)
625- $Tuple2((validPayment ++ result._1), result._2)
626- }
627- else throw("Strict value is not equal to itself.")
628- }
610+func claimReward (assetId) = if (true)
611+ then throw("Staking is disabled")
612+ else {
613+ let validPayment = if ((i.originCaller == getCfMasterAddress()))
614+ then nil
615+ else checkAdditionalPayment(i.payments[0])
616+ if ((validPayment == validPayment))
617+ then if (if ((tryGetString((assetId + "_owner")) != toString(i.caller)))
618+ then (tryGetString((assetId + "_original_caller")) != toString(i.caller))
619+ else false)
620+ then throw((("You don't own this duck (" + assetId) + ")!! "))
621+ else if ((size(i.payments) > 1))
622+ then throw("Please don't add extra payments")
623+ else {
624+ let toReceive = if ((i.originCaller != getCfMasterAddress()))
625+ then toString(i.caller)
626+ else tryGetString((assetId + "_original_caller"))
627+ let owner = if ((i.originCaller != getCfMasterAddress()))
628+ then toString(i.caller)
629+ else tryGetString((assetId + "_owner"))
630+ let origin = if ((i.originCaller != getCfMasterAddress()))
631+ then toString(i.originCaller)
632+ else tryGetString((assetId + "_original_caller"))
633+ let result = claimStakingResult(owner, assetId, true, toReceive, origin)
634+ $Tuple2((validPayment ++ result._1), result._2)
635+ }
636+ else throw("Strict value is not equal to itself.")
637+ }
629638
630639
631640
632641 @Callable(i)
633642 func redeemItem (type,nftAssetId) = {
634643 let wavesPayment = i.payments[0]
635644 if ((wavesPayment == wavesPayment))
636645 then {
637646 let potionPayment = value(i.payments[1])
638647 if ((potionPayment == potionPayment))
639648 then if ((potionPayment.amount != 1))
640649 then throw("You need to attach exactly 1 potion")
641650 else {
642651 let artefact = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(value(value(potionPayment).assetId))], nil))
643652 if ((artefact == artefact))
644653 then if ((artefact != "ART-POTION"))
645654 then throw("You need to attach a ART-POTION artefact")
646655 else if ((wavesPayment.assetId != unit))
647656 then throw("You need to attach waves")
648657 else if ((wavesPayment.amount != getPotionFee()))
649658 then throw((("You need to attach exactly " + toString(getPotionFee())) + " waves"))
650659 else {
651660 let sendToAggreGator = (wavesPayment.amount / 2)
652661 let topup = (wavesPayment.amount - sendToAggreGator)
653662 let basePower = tryGetInteger((nftAssetId + "_basePower"))
654663 if ((basePower == 0))
655664 then throw("This is not a valid duck or the duck waves never staked!")
656665 else if ((tryGetString((nftAssetId + "_owner")) != ""))
657666 then throw("Please usntake your duck first!!")
658667 else {
659668 let addMore = invoke(getCanineStakingAddress(), "addWavesAndStakeMore", nil, [AttachedPayment(unit, topup)])
660669 if ((addMore == addMore))
661670 then [ScriptTransfer(getFeeAggregator(), sendToAggreGator, unit), DeleteEntry((nftAssetId + "_basePower"))]
662671 else throw("Strict value is not equal to itself.")
663672 }
664673 }
665674 else throw("Strict value is not equal to itself.")
666675 }
667676 else throw("Strict value is not equal to itself.")
668677 }
669678 else throw("Strict value is not equal to itself.")
670679 }
671680
672681
673682 @Verifier(tx)
674683 func verify () = if (isTestEnv())
675684 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
676685 else {
677686 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
678687 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
679688 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
680689 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
681690 then 1
682691 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
683692 then 1
684693 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
685694 then 1
686695 else 0
687696 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
688697 then 1
689698 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
690699 then 1
691700 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
692701 then 1
693702 else 0
694703 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
695704 then 1
696705 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
697706 then 1
698707 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
699708 then 1
700709 else 0
701710 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
702711 match tx {
703712 case _ =>
704713 (signaturesCount >= 2)
705714 }
706715 }
707716

github/deemru/w8io/c3f4982 
68.16 ms