tx · GvUgWHes5VNq7BRp7SR6anDxHc7iScv1MqFiMv2AeCSg

3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA:  -0.02300000 Waves

2022.12.28 11:30 [3445396] smart account 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA > SELF 0.00000000 Waves

{ "type": 13, "id": "GvUgWHes5VNq7BRp7SR6anDxHc7iScv1MqFiMv2AeCSg", "fee": 2300000, "feeAssetId": null, "timestamp": 1672216279071, "version": 2, "chainId": 87, "sender": "3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA", "senderPublicKey": "3GtkwhnMmG1yeozW51o4dJ1x3BDToPaLBXyBWKGdAc2e", "proofs": [ "5CCPodVZkFouFyQ8bxUMmexTp83v1u4v3JNmLS2RsuEkYxqc9DsqDkYBr1ZhaSvw9PjPgbQsav3pWQwAJQdgyQg5" ], "script": "base64:AAIFAAAAAAAAADwIAhIDCgEIEgASBAoCCAgSBAoCCAgSABIAEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAAuAAAAAApwZXJjaFByaWNlCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAPQkAAAAAABXNjYWxlAAAAAAAAACcQAAAAAAZzY2FsZTIAAAAAAAAPQkABAAAACmlzU2lja0R1Y2sAAAABAAAABmR1Y2tJZAkAASwAAAACBQAAAAZkdWNrSWQCAAAABV9zaWNrAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAARZ2V0UmViaXJ0aEFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19yZWJpcnRoQWRkcmVzcwEAAAATZ2V0U3dvcFByb21vQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAXc3RhdGljX3N3b3BQcm9tb0FkZHJlc3MBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABVzdGF0aWNfYnJlZWRlckFkZHJlc3MBAAAAFWdldFJlZkNvbnRyYWN0QWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAZc3RhdGljX3JlZkNvbnRyYWN0QWRkcmVzcwEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAQAAABJnZXRNZXRhcmFjZUFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFnN0YXRpY19tZXRhUmFjZUFkZHJlc3MBAAAAFGdldEFjY0Jvb3N0ZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABhzdGF0aWNfYWNjQm9vc3RlckFkZHJlc3MBAAAAD2dldFByb3h5U3Rha2luZwAAAAAJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABxzdGF0aWNfcHJveHlTdGFraW5nQ29udHJhY3RzAQAAAA5nZXRNYWludGVuYW5jZQAAAAAJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABJzdGF0aWNfbWFpbnRlbmFuY2UBAAAAEmdldENmTWFzdGVyQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAWc3RhdGljX2NmTWFzdGVyQWRkcmVzcwEAAAAQZ2V0RHVja1dyYXBwZXJTYwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAASc3RhdGljX2R1Y2tXcmFwcGVyAQAAABFnZXRDb3Vwb25zQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX2NvdXBvbnNBZGRyZXNzAQAAAA5nZXRCdXJuQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAASc3RhdGljX2J1cm5BZGRyZXNzAAAAAA1SZWZlcmVyUmV3YXJkAAAAAAAAAAAFAQAAABFnZXRSZXdhcmRQZXJCbG9jawAAAAAAAAAAAAAAAqwBAAAACGlzTG9ja2VkAAAAAAMJAQAAAAIhPQAAAAIJAQAAAA5nZXRNYWludGVuYW5jZQAAAAACAAAAAAkAAAIAAAABCQEAAAAOZ2V0TWFpbnRlbmFuY2UAAAAAAAAAAAAAAAAAAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAADXRyeUdldEJvb2xlYW4AAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIHAQAAABV0cnlHZXRCb29sZWFuRXh0ZXJuYWwAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAADmdldEFzc2V0T3JpZ2luAAAAAQAAAApnZW5lcmF0aW9uAwkAAAAAAAACBQAAAApnZW5lcmF0aW9uAgAAAAFHCQEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAJAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAABAAAADmdldEFzc2V0UmFyaXR5AAAAAgAAAAhnZW5vdHlwZQAAAApnZW5lcmF0aW9uBAAAAAhxdWFudGl0eQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIJAQAAAA5nZXRBc3NldE9yaWdpbgAAAAEFAAAACmdlbmVyYXRpb24JAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAACGdlbm90eXBlAgAAAAlfcXVhbnRpdHkJAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAACGdlbm90eXBlAgAAABNfcXVhbnRpdHkgbm90IGZvdW5kBAAAAAVwb3dlcgkAAGwAAAAGCQAAaQAAAAIAAAAAAAAAJxAFAAAACHF1YW50aXR5AAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAABAAAAAAAAAAACBQAAAAVGTE9PUgMJAABmAAAAAgUAAAAFcG93ZXIAAAAAAAAAAAAFAAAABXBvd2VyAAAAAAAAAAACAQAAAAhhc1N0cmluZwAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAUAAAAGc3RyaW5nCQAAAgAAAAECAAAAIUZBUzogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEAAAAFYXNJbnQAAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAANpbnQFAAAAByRtYXRjaDAFAAAAA2ludAkAAAIAAAABAgAAAB5GQUk6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBAAAACWFzQm9vbGVhbgAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAdib29sZWFuBQAAAAckbWF0Y2gwBQAAAAdib29sZWFuCQAAAgAAAAECAAAAIkZBQjogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEJvb2xlYW4BAAAAFGdldEFzc2V0RmFybWluZ1Bvd2VyAAAAAgAAAAdhc3NldElkAAAAB2FkZHJlc3MDAwkAAAAAAAACCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAdhc3NldElkAAAABmlzc3VlcgkBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAYJAAAAAAAAAggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAHYXNzZXRJZAAAAAZpc3N1ZXIJAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAQAAAAJZmFybUJvb3N0CQEAAAAFYXNJbnQAAAABCQAD/AAAAAQJAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAAAgAAABpjYWxjdWxhdGVGYXJtaW5nUG93ZXJCb29zdAkABEwAAAACCQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgUAAAAHYWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAACWZhcm1Cb29zdAUAAAAJZmFybUJvb3N0BAAAAAlhc3NldE5hbWUICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAB2Fzc2V0SWQAAAAEbmFtZQQAAAAJaXNKYWNrcG90CQAAAAAAAAIJAQAAAAl0YWtlUmlnaHQAAAACCQEAAAAFdmFsdWUAAAABBQAAAAlhc3NldE5hbWUAAAAAAAAAAAECAAAAAVUEAAAAB2Zhcm1HZW4DBQAAAAlpc0phY2twb3QCAAAAAAkBAAAACGFzU3RyaW5nAAAAAQkAA/wAAAAECQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAAAgAAAA5nZXRHZW5Gcm9tTmFtZQkABEwAAAACBQAAAAlhc3NldE5hbWUFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAdmYXJtR2VuBQAAAAdmYXJtR2VuBAAAAAZyYXJpdHkDBQAAAAlpc0phY2twb3QAAAAAAAAAAGQEAAAACmdlbmVyYXRpb24JAAEvAAAAAgkBAAAACXRha2VSaWdodAAAAAIFAAAACWFzc2V0TmFtZQAAAAAAAAAAAgAAAAAAAAAAAQkBAAAADmdldEFzc2V0UmFyaXR5AAAAAgUAAAAHZmFybUdlbgUAAAAKZ2VuZXJhdGlvbgQAAAARdG90YWxGYXJtaW5nUG93ZXIJAABkAAAAAgUAAAAGcmFyaXR5CQAAawAAAAMFAAAABnJhcml0eQUAAAAJZmFybUJvb3N0AAAAAAAAAABkCQAFFAAAAAIFAAAAB2Zhcm1HZW4FAAAAEXRvdGFsRmFybWluZ1Bvd2VyCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAANbm90IHZhbGlkIE5GVAEAAAAdZ2V0TGFzdEtub3duQXNzZXRGYXJtaW5nUG93ZXIAAAACAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAdhc3NldElkAgAAAA1fZmFybWluZ1Bvd2VyAQAAAA5nZXRBc3NldHNCeUdlbgAAAAEAAAADZ2VuBAAAAAFzCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACAgAAAAdhc3NldHNfBQAAAANnZW4DCQAAAAAAAAIFAAAAAXMCAAAAAAUAAAADbmlsCQAEtQAAAAIFAAAAAXMCAAAAASwBAAAADGNhbGNJbnRlcmVzdAAAAAMAAAAQcHJldmlvdXNJbnRlcmVzdAAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0AAAAEXRvdGFsRmFybWluZ1Bvd2VyCQAAZAAAAAIFAAAAEHByZXZpb3VzSW50ZXJlc3QJAABpAAAAAgkAAGgAAAACCQAAaAAAAAIFAAAABXNjYWxlCQEAAAARZ2V0UmV3YXJkUGVyQmxvY2sAAAAACQAAZQAAAAIFAAAABmhlaWdodAUAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAUAAAARdG90YWxGYXJtaW5nUG93ZXIBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAADCQAAZgAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyAAAAAAAAAAAABAAAABBwcmV2aW91c0ludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0BAAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BAAAABF0b3RhbEZhcm1pbmdQb3dlcgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIJAQAAAAxjYWxjSW50ZXJlc3QAAAADBQAAABBwcmV2aW91c0ludGVyZXN0BQAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0BQAAABF0b3RhbEZhcm1pbmdQb3dlcgMJAQAAAAIhPQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAARdG90YWxfc3RhcnRIZWlnaHQAAAAAAAAAAAAJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJAAACAAAAAQIAAAAcZmFybWluZyBpcyBub3QgbGF1bmNoZWQsIHlldAEAAAAUY2FsY0Fzc2V0UmV3YXJkRGVsdGEAAAADAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAWbGFzdENoZWNrQXNzZXRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAdhc3NldElkAgAAABJfbGFzdENoZWNrSW50ZXJlc3QEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAABoAAAAAgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAABlAAAAAgUAAAAPY3VycmVudEludGVyZXN0BQAAABZsYXN0Q2hlY2tBc3NldEludGVyZXN0AQAAABRhZGRBc3NldElkVG9HZW5FbnRyeQAAAAIAAAAHYXNzZXRJZAAAAAhhc3NldEdlbgQAAAAMY3VycmVudFZhbHVlCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2Fzc2V0c18FAAAACGFzc2V0R2VuAgAAAAdfbG9ja2VkAwkAAAAAAAACBQAAAAxjdXJyZW50VmFsdWUCAAAAAAUAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIFAAAADGN1cnJlbnRWYWx1ZQIAAAABLAUAAAAHYXNzZXRJZAEAAAAOZ2V0U3Rha2VSZXN1bHQAAAAEAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAABFhc3NldEZhcm1pbmdQb3dlcgAAAAh1bnN0YWtlcgQAAAAFYXNzZXQJAAJYAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAASdG90YWxfZmFybWluZ1Bvd2VyCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyBQAAABFhc3NldEZhcm1pbmdQb3dlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAB10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZhc3NldF8FAAAABWFzc2V0AgAAAAZfb3duZXIFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAA1fZmFybWluZ1Bvd2VyBQAAABFhc3NldEZhcm1pbmdQb3dlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEl9sYXN0Q2hlY2tJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAACV91bnN0YWtlcgUAAAAIdW5zdGFrZXIFAAAAA25pbAEAAAAQZ2V0VW5zdGFrZVJlc3VsdAAAAAYAAAAHYWRkcmVzcwAAAAdhc3NldElkAAAABWNvbG9yAAAABmNhbGxlcgAAAApyZWFsQ2FsbGVyAAAACWNsYWltRWdncwQAAAAGbG9ja2VkCQEAAAAIaXNMb2NrZWQAAAAAAwkAAAAAAAACBQAAAAZsb2NrZWQFAAAABmxvY2tlZAQAAAAFYXNzZXQJAAJYAAAAAQUAAAAHYXNzZXRJZAQAAAAIdW5zdGFrZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAJX3Vuc3Rha2VyAwMJAQAAAAIhPQAAAAIFAAAACHVuc3Rha2VyAgAAAAAJAQAAAAIhPQAAAAIFAAAACHVuc3Rha2VyBQAAAApyZWFsQ2FsbGVyBwkAAAIAAAABAgAAAFdGVU46IEl0IHNlZW1zIGR1Y2sgd2FzIHN0YWtlZCB0aHJvdWggYSBkYXBwLCBub3QgZGlyZWN0bHksIHBsZWFzZSB1bnN0YWtlIHRocm91Z2ggZGFwcCEEAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQEAAAAdZ2V0TGFzdEtub3duQXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAMJAQAAAAEhAAAAAQkAAGYAAAACBQAAABFhc3NldEZhcm1pbmdQb3dlcgAAAAAAAAAAAAkAAAIAAAABAgAAACpGR1U6IEFzc2V0IGZhcm1pbmcgcG93ZXIgbm90IGJpZ2dlciB0aGVuIDAEAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAMZmFybWVkQW1vdW50CQAAZAAAAAIFAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQEAAAAEm9sZFdpdGhkcmF3bkFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVkQW1vdW50BQAAABJvbGRXaXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAFc2NhbGUAAAAAAAAAAGQEAAAADmlzV2l0aG91dFBlcmNoCQEAAAANdHJ5R2V0Qm9vbGVhbgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8F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ABBfd2l0aGRyYXduQW1vdW50CQAAaAAAAAIFAAAAE3Jld2FyZEFmdGVyU2lja05lc3MFAAAABnNjYWxlMgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAWX2xhc3RDaGVja0Zhcm1lZEFtb3VudAUAAAAQYXNzZXRSZXdhcmREZWx0YQUAAAADbmlsBQAAAA1hcHBlbmRQZXJjaGVzCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABmNhbGxlcgAAAAAAAAAAAQUAAAAHYXNzZXRJZAUAAAADbmlsCAUAAAAGc2VuZFR4AAAAAl8xCAUAAAAGc2VuZFR4AAAAAl8yCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAATY2FsY3VsYXRlUGVyY2hQcmljZQAAAAEAAAAHYWRkcmVzcwQAAAARaGFzQXJ0ZWZhY3RTdGFrZWQJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAABRnZXRBY2NCb29zdGVyQWRkcmVzcwAAAAAJAAEsAAAAAgkAASwAAAACAgAAAAtBUlQtWE1JU1RMXwUAAAAHYWRkcmVzcwIAAAAGX293bmVyAwkAAAAAAAACBQAAABFoYXNBcnRlZmFjdFN0YWtlZAIAAAAABQAAAApwZXJjaFByaWNlCQAAaAAAAAIJAABpAAAAAgUAAAAKcGVyY2hQcmljZQAAAAAAAAAACgAAAAAAAAAACQEAAAAQaXNQcm94eVN0YWtpbmdTYwAAAAEAAAAHYWRkcmVzcwQAAAAQYWxsb3dlZENvbnRyYWN0cwkBAAAAD2dldFByb3h5U3Rha2luZwAAAAAEAAAA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ZXQEAAAADXNpY2tuZXNzQ2hlY2sHAwUAAAANc2lja25lc3NDaGVjawQAAAARYXNzZXRGYXJtaW5nUG93ZXIJAQAAAB1nZXRMYXN0S25vd25Bc3NldEZhcm1pbmdQb3dlcgAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAANX2Zhcm1pbmdQb3dlcgAAAAAAAAAAAAUAAAADbmlsBAAAABFhc3NldEZhcm1pbmdQb3dlcgkBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAMZmFybWVkQW1vdW50CQAAZAAAAAIFAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQEAAAAD3dpdGhkcmF3bkFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVkQW1vdW50BQAAAA93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAFc2NhbGUAAAAAAAAAAGQDCQAAZwAAAAIAAAAAAAAAAAAFAAAABnJld2FyZAkAAAIAAAABAgAAACFGQ1I6IHlvdSBoYXZlIG5vIEVHR3MgdG8gd2l0aGRyYXcJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEF93aXRoZHJhd25BbW91bnQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAkAAGgAAAACBQAAAAZyZXdhcmQFAAAABnNjYWxlMgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAHYWRkcmVzcwkAAGgAAAACBQAAAAZyZXdhcmQAAAAAAAAPQkAJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAUAAAADbmlsCQAAaAAAAAIFAAAABnJld2FyZAAAAAAAAA9CQAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIaGVhbER1Y2sAAAABAAAABmR1Y2tJZAQAAAAHYWRkcmVzcwMJAQAAABBpc1Byb3h5U3Rha2luZ1NjAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAMZmFybWluZ1Bvd2VyCAkBAAAAFGdldEFzc2V0RmFybWluZ1Bvd2VyAAAAAgkAAZsAAAABBQAAAAZkdWNrSWQFAAAAB2FkZHJlc3MAAAACXzIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgUAAAAMZmFybWluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAZkdWNrSWQCAAAADV9mYXJtaW5nUG93ZXIFAAAADGZhcm1pbmdQb3dlcgUAAAADbmlsAAAAAAhdnz8=", "height": 3445396, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8ppigzwHut4yNobnfrYK1rxge9YYmD94hZT2mjfH7NYb Next: 3CTrUqFetAemXcyj5wiCmYAPumxYspnX2EKzrgdu36G5 Diff:
OldNewDifferences
6767
6868
6969 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
70-
71-
72-func getSicknessAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_sicknessAddress")))
7370
7471
7572 let RefererReward = 5
215212 }
216213
217214
218-func getStakeResult (address,assetId,assetFarmingPower,unstaker) = if (tryGetBooleanExternal(getSicknessAddress(), isSickDuck(toBase58String(assetId))))
219- then throw("FGSR: Please first heal your duck!")
220- else {
221- let asset = toBase58String(assetId)
215+func getStakeResult (address,assetId,assetFarmingPower,unstaker) = {
216+ let asset = toBase58String(assetId)
222217 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), StringEntry((("asset_" + asset) + "_owner"), address), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), assetFarmingPower), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), StringEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker"), unstaker)]
223- }
218+ }
224219
225220
226-func getUnstakeResult (address,assetId,color,caller,realCaller) = {
221+func getUnstakeResult (address,assetId,color,caller,realCaller,claimEggs) = {
227222 let locked = isLocked()
228223 if ((locked == locked))
229224 then {
240235 else {
241236 let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
242237 let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
243- let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
244- let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
238+ let oldWithdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
239+ let reward = ((farmedAmount - oldWithdrawnAmount) / (scale * 100))
245240 let isWithoutPerch = tryGetBoolean((((("address_" + address) + "_asset_") + asset) + "_without_perch"))
246- let sicknessCheck = asBoolean(invoke(getSicknessAddress(), "checkIfDuckGetSick", [asset], nil))
247- if ((sicknessCheck == sicknessCheck))
248- then {
249- let rewardAfterSickNess = if (sicknessCheck)
250- then 0
251- else reward
252- let appendPerches = if (isWithoutPerch)
253- then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))]
254- else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
255- $Tuple2((([IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + asset) + "_owner")), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker")), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (withdrawnAmount * scale2))), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")) + assetRewardDelta))] ++ appendPerches) ++ [ScriptTransfer(caller, (rewardAfterSickNess * 1000000), getEggAssetId()), ScriptTransfer(caller, 1, assetId)]), (rewardAfterSickNess * 1000000))
256- }
257- else throw("Strict value is not equal to itself.")
241+ let sicknessCheck = false
242+ let rewardAfterSickNess = if (sicknessCheck)
243+ then 0
244+ else reward
245+ let appendPerches = if (isWithoutPerch)
246+ then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))]
247+ else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
248+ let sendTx = if (claimEggs)
249+ then $Tuple2([ScriptTransfer(caller, (rewardAfterSickNess * 1000000), getEggAssetId())], (rewardAfterSickNess * 1000000))
250+ else $Tuple2(nil, 0)
251+ $Tuple2(((([IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + asset) + "_owner")), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker")), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (rewardAfterSickNess * scale2))), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")) + assetRewardDelta))] ++ appendPerches) ++ [ScriptTransfer(caller, 1, assetId)]) ++ sendTx._1), sendTx._2)
258252 }
259253 }
260254 }
274268 let allowedContracts = getProxyStaking()
275269 let allowedContractsList = split(allowedContracts, ";")
276270 (indexOf(allowedContractsList, address) != unit)
271+ }
272+
273+
274+func unstakeNFTInternal (asset,i,claimEgg) = {
275+ let assetId = fromBase58String(asset)
276+ let realCaller = toString(i.caller)
277+ let address = if (isProxyStakingSc(toString(i.caller)))
278+ then toString(i.originCaller)
279+ else realCaller
280+ let color = takeRight(value(assetInfo(assetId)).name, 1)
281+ if ((color == "U"))
282+ then throw("FUN: use another function to unstake Jackpot NFT")
283+ else {
284+ let result = getUnstakeResult(address, assetId, color, i.caller, realCaller, claimEgg)
285+ result
286+ }
287+ }
288+
289+
290+func unstakeJackpotInternal (asset,i,claimEgg) = {
291+ let assetId = fromBase58String(asset)
292+ let realCaller = toString(i.caller)
293+ let address = if (isProxyStakingSc(toString(i.caller)))
294+ then toString(i.originCaller)
295+ else realCaller
296+ let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
297+ if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U"))
298+ then throw("jackpot only")
299+ else {
300+ let result = getUnstakeResult(address, assetId, color, i.caller, realCaller, claimEgg)
301+ result
302+ }
277303 }
278304
279305
381407 else if ((0 >= availablePerches))
382408 then throw(("no perches available for the color " + color))
383409 else {
384- let $t01347113544 = getAssetFarmingPower(assetId, address)
385- let assetGen = $t01347113544._1
386- let assetFarmingPower = $t01347113544._2
410+ let $t01475514828 = getAssetFarmingPower(assetId, address)
411+ let assetGen = $t01475514828._1
412+ let assetFarmingPower = $t01475514828._2
387413 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1))])
388414 }
389415 }
407433 if ((pmt.amount != 1))
408434 then throw("NFT is not attached")
409435 else {
410- let $t01416814241 = getAssetFarmingPower(assetId, address)
411- let assetGen = $t01416814241._1
412- let assetFarmingPower = $t01416814241._2
436+ let $t01545215525 = getAssetFarmingPower(assetId, address)
437+ let assetGen = $t01545215525._1
438+ let assetFarmingPower = $t01545215525._2
413439 let asset = toBase58String(assetId)
414440 let realCaller = toString(i.caller)
415441 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [BooleanEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"), true)])
422448
423449
424450 @Callable(i)
425-func unstakeNFT (asset) = {
426- let assetId = fromBase58String(asset)
427- let realCaller = toString(i.caller)
428- let address = if (isProxyStakingSc(toString(i.caller)))
429- then toString(i.originCaller)
430- else realCaller
431- let color = takeRight(value(assetInfo(assetId)).name, 1)
432- if ((color == "U"))
433- then throw("FUN: use another function to unstake Jackpot NFT")
434- else {
435- let result = getUnstakeResult(address, assetId, color, i.caller, realCaller)
436- result
437- }
438- }
451+func unstakeNFT (asset) = unstakeNFTInternal(asset, i, true)
452+
453+
454+
455+@Callable(i)
456+func unstakeNFTWithoutClaim (asset) = unstakeNFTInternal(asset, i, false)
439457
440458
441459
473491
474492
475493 @Callable(i)
476-func unstakeJackpot (asset) = {
477- let assetId = fromBase58String(asset)
478- let realCaller = toString(i.caller)
479- let address = if (isProxyStakingSc(toString(i.caller)))
480- then toString(i.originCaller)
481- else realCaller
482- let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
483- if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U"))
484- then throw("jackpot only")
485- else {
486- let result = getUnstakeResult(address, assetId, color, i.caller, realCaller)
487- result
488- }
489- }
494+func unstakeJackpot (asset) = unstakeJackpotInternal(asset, i, true)
495+
496+
497+
498+@Callable(i)
499+func unstakeJackpotWithoutClaimEgg (asset) = unstakeJackpotInternal(asset, i, false)
490500
491501
492502
499509 then toString(i.caller)
500510 else toString(i.originCaller)
501511 let assetId = fromBase58String(asset)
502- let sicknessCheck = asBoolean(invoke(getSicknessAddress(), "checkIfDuckGetSick", [asset], nil))
503- if ((sicknessCheck == sicknessCheck))
504- then if (sicknessCheck)
505- then {
506- let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
512+ let sicknessCheck = false
513+ if (sicknessCheck)
514+ then {
515+ let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
507516 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0)]
508- }
509- else {
510- let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
511- let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
512- let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
513- let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
514- let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
515- if ((0 >= reward))
516- then throw("FCR: you have no EGGs to withdraw")
517- else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), getEggAssetId())], (reward * 1000000))
518- }
519- else throw("Strict value is not equal to itself.")
517+ }
518+ else {
519+ let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
520+ let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
521+ let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
522+ let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
523+ let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
524+ if ((0 >= reward))
525+ then throw("FCR: you have no EGGs to withdraw")
526+ else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), getEggAssetId())], (reward * 1000000))
527+ }
520528 }
521529 else throw("Strict value is not equal to itself.")
522530 }
525533
526534 @Callable(i)
527535 func healDuck (duckId) = {
528- let sicknessCheck = asBoolean(invoke(getSicknessAddress(), "healDuck", [duckId], i.payments))
529- if ((sicknessCheck == sicknessCheck))
530- then {
531- let address = if (isProxyStakingSc(toString(i.caller)))
532- then toString(i.originCaller)
533- else toString(i.caller)
534- let farmingPower = getAssetFarmingPower(toBytes(duckId), address)._2
536+ let address = if (isProxyStakingSc(toString(i.caller)))
537+ then toString(i.originCaller)
538+ else toString(i.caller)
539+ let farmingPower = getAssetFarmingPower(toBytes(duckId), address)._2
535540 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + farmingPower)), IntegerEntry((((("address_" + address) + "_asset_") + duckId) + "_farmingPower"), farmingPower)]
536- }
537- else throw("Strict value is not equal to itself.")
538541 }
539542
540543
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let perchPrice = (100 * 1000000)
55
66 let scale = 10000
77
88 let scale2 = 1000000
99
1010 func isSickDuck (duckId) = (duckId + "_sick")
1111
1212
1313 func tryGetStringExternal (address,key) = match getString(address, key) {
1414 case a: String =>
1515 a
1616 case _ =>
1717 ""
1818 }
1919
2020
2121 func tryGetString (key) = tryGetStringExternal(this, key)
2222
2323
2424 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
2525
2626
2727 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
2828
2929
3030 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
3131
3232
3333 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
3434
3535
3636 func getSwopPromoAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_swopPromoAddress")))
3737
3838
3939 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
4040
4141
4242 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
4343
4444
4545 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
4646
4747
4848 func getMetaraceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_metaRaceAddress")))
4949
5050
5151 func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_accBoosterAddress")))
5252
5353
5454 func getProxyStaking () = tryGetStringExternal(getOracle(), "static_proxyStakingContracts")
5555
5656
5757 func getMaintenance () = tryGetStringExternal(getOracle(), "static_maintenance")
5858
5959
6060 func getCfMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_cfMasterAddress")))
6161
6262
6363 func getDuckWrapperSc () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_duckWrapper")))
6464
6565
6666 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
6767
6868
6969 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
70-
71-
72-func getSicknessAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_sicknessAddress")))
7370
7471
7572 let RefererReward = 5
7673
7774 func getRewardPerBlock () = 684
7875
7976
8077 func isLocked () = if ((getMaintenance() != ""))
8178 then throw(getMaintenance())
8279 else 0
8380
8481
8582 func tryGetInteger (key) = match getInteger(this, key) {
8683 case b: Int =>
8784 b
8885 case _ =>
8986 0
9087 }
9188
9289
9390 func tryGetBoolean (key) = match getBoolean(this, key) {
9491 case b: Boolean =>
9592 b
9693 case _ =>
9794 false
9895 }
9996
10097
10198 func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
10299 case b: Boolean =>
103100 b
104101 case _ =>
105102 false
106103 }
107104
108105
109106 func getAssetOrigin (generation) = if ((generation == "G"))
110107 then getIncubatorAddress()
111108 else getBreederAddress()
112109
113110
114111 func getAssetRarity (genotype,generation) = {
115112 let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found"))
116113 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
117114 if ((power > 0))
118115 then power
119116 else 2
120117 }
121118
122119
123120 func asString (value) = match value {
124121 case string: String =>
125122 string
126123 case _ =>
127124 throw("FAS: wrong type, expected: String")
128125 }
129126
130127
131128 func asInt (value) = match value {
132129 case int: Int =>
133130 int
134131 case _ =>
135132 throw("FAI: wrong type, expected: Int")
136133 }
137134
138135
139136 func asBoolean (value) = match value {
140137 case boolean: Boolean =>
141138 boolean
142139 case _ =>
143140 throw("FAB: wrong type, expected: Boolean")
144141 }
145142
146143
147144 func getAssetFarmingPower (assetId,address) = if (if ((value(assetInfo(assetId)).issuer == getBreederAddress()))
148145 then true
149146 else (value(assetInfo(assetId)).issuer == getIncubatorAddress()))
150147 then {
151148 let farmBoost = asInt(invoke(getItemsAddress(), "calculateFarmingPowerBoost", [toBase58String(assetId), address], nil))
152149 if ((farmBoost == farmBoost))
153150 then {
154151 let assetName = value(assetInfo(assetId)).name
155152 let isJackpot = (takeRight(value(assetName), 1) == "U")
156153 let farmGen = if (isJackpot)
157154 then ""
158155 else asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
159156 if ((farmGen == farmGen))
160157 then {
161158 let rarity = if (isJackpot)
162159 then 100
163160 else {
164161 let generation = take(takeRight(assetName, 2), 1)
165162 getAssetRarity(farmGen, generation)
166163 }
167164 let totalFarmingPower = (rarity + fraction(rarity, farmBoost, 100))
168165 $Tuple2(farmGen, totalFarmingPower)
169166 }
170167 else throw("Strict value is not equal to itself.")
171168 }
172169 else throw("Strict value is not equal to itself.")
173170 }
174171 else throw("not valid NFT")
175172
176173
177174 func getLastKnownAssetFarmingPower (address,assetId) = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_farmingPower"))
178175
179176
180177 func getAssetsByGen (gen) = {
181178 let s = tryGetString(("assets_" + gen))
182179 if ((s == ""))
183180 then nil
184181 else split(s, ",")
185182 }
186183
187184
188185 func calcInterest (previousInterest,previousInterestHeight,totalFarmingPower) = (previousInterest + (((scale * getRewardPerBlock()) * (height - previousInterestHeight)) / totalFarmingPower))
189186
190187
191188 func getCurrentInterest () = if ((tryGetInteger("total_farmingPower") > 0))
192189 then {
193190 let previousInterest = tryGetInteger("total_lastCheckInterest")
194191 let previousInterestHeight = tryGetInteger("total_lastCheckInterestHeight")
195192 let totalFarmingPower = tryGetInteger("total_farmingPower")
196193 calcInterest(previousInterest, previousInterestHeight, totalFarmingPower)
197194 }
198195 else if ((tryGetInteger("total_startHeight") != 0))
199196 then tryGetInteger("total_lastCheckInterest")
200197 else throw("farming is not launched, yet")
201198
202199
203200 func calcAssetRewardDelta (address,assetId,assetFarmingPower) = {
204201 let lastCheckAssetInterest = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_lastCheckInterest"))
205202 let currentInterest = getCurrentInterest()
206203 (assetFarmingPower * (currentInterest - lastCheckAssetInterest))
207204 }
208205
209206
210207 func addAssetIdToGenEntry (assetId,assetGen) = {
211208 let currentValue = tryGetString((("assets_" + assetGen) + "_locked"))
212209 if ((currentValue == ""))
213210 then assetId
214211 else ((currentValue + ",") + assetId)
215212 }
216213
217214
218-func getStakeResult (address,assetId,assetFarmingPower,unstaker) = if (tryGetBooleanExternal(getSicknessAddress(), isSickDuck(toBase58String(assetId))))
219- then throw("FGSR: Please first heal your duck!")
220- else {
221- let asset = toBase58String(assetId)
215+func getStakeResult (address,assetId,assetFarmingPower,unstaker) = {
216+ let asset = toBase58String(assetId)
222217 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), StringEntry((("asset_" + asset) + "_owner"), address), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), assetFarmingPower), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), StringEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker"), unstaker)]
223- }
218+ }
224219
225220
226-func getUnstakeResult (address,assetId,color,caller,realCaller) = {
221+func getUnstakeResult (address,assetId,color,caller,realCaller,claimEggs) = {
227222 let locked = isLocked()
228223 if ((locked == locked))
229224 then {
230225 let asset = toBase58String(assetId)
231226 let unstaker = tryGetString((((("address_" + address) + "_asset_") + asset) + "_unstaker"))
232227 if (if ((unstaker != ""))
233228 then (unstaker != realCaller)
234229 else false)
235230 then throw("FUN: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!")
236231 else {
237232 let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
238233 if (!((assetFarmingPower > 0)))
239234 then throw("FGU: Asset farming power not bigger then 0")
240235 else {
241236 let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
242237 let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
243- let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
244- let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
238+ let oldWithdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
239+ let reward = ((farmedAmount - oldWithdrawnAmount) / (scale * 100))
245240 let isWithoutPerch = tryGetBoolean((((("address_" + address) + "_asset_") + asset) + "_without_perch"))
246- let sicknessCheck = asBoolean(invoke(getSicknessAddress(), "checkIfDuckGetSick", [asset], nil))
247- if ((sicknessCheck == sicknessCheck))
248- then {
249- let rewardAfterSickNess = if (sicknessCheck)
250- then 0
251- else reward
252- let appendPerches = if (isWithoutPerch)
253- then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))]
254- else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
255- $Tuple2((([IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + asset) + "_owner")), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker")), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (withdrawnAmount * scale2))), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")) + assetRewardDelta))] ++ appendPerches) ++ [ScriptTransfer(caller, (rewardAfterSickNess * 1000000), getEggAssetId()), ScriptTransfer(caller, 1, assetId)]), (rewardAfterSickNess * 1000000))
256- }
257- else throw("Strict value is not equal to itself.")
241+ let sicknessCheck = false
242+ let rewardAfterSickNess = if (sicknessCheck)
243+ then 0
244+ else reward
245+ let appendPerches = if (isWithoutPerch)
246+ then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))]
247+ else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
248+ let sendTx = if (claimEggs)
249+ then $Tuple2([ScriptTransfer(caller, (rewardAfterSickNess * 1000000), getEggAssetId())], (rewardAfterSickNess * 1000000))
250+ else $Tuple2(nil, 0)
251+ $Tuple2(((([IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + asset) + "_owner")), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker")), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (rewardAfterSickNess * scale2))), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")) + assetRewardDelta))] ++ appendPerches) ++ [ScriptTransfer(caller, 1, assetId)]) ++ sendTx._1), sendTx._2)
258252 }
259253 }
260254 }
261255 else throw("Strict value is not equal to itself.")
262256 }
263257
264258
265259 func calculatePerchPrice (address) = {
266260 let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner"))
267261 if ((hasArtefactStaked == ""))
268262 then perchPrice
269263 else ((perchPrice / 10) * 9)
270264 }
271265
272266
273267 func isProxyStakingSc (address) = {
274268 let allowedContracts = getProxyStaking()
275269 let allowedContractsList = split(allowedContracts, ";")
276270 (indexOf(allowedContractsList, address) != unit)
271+ }
272+
273+
274+func unstakeNFTInternal (asset,i,claimEgg) = {
275+ let assetId = fromBase58String(asset)
276+ let realCaller = toString(i.caller)
277+ let address = if (isProxyStakingSc(toString(i.caller)))
278+ then toString(i.originCaller)
279+ else realCaller
280+ let color = takeRight(value(assetInfo(assetId)).name, 1)
281+ if ((color == "U"))
282+ then throw("FUN: use another function to unstake Jackpot NFT")
283+ else {
284+ let result = getUnstakeResult(address, assetId, color, i.caller, realCaller, claimEgg)
285+ result
286+ }
287+ }
288+
289+
290+func unstakeJackpotInternal (asset,i,claimEgg) = {
291+ let assetId = fromBase58String(asset)
292+ let realCaller = toString(i.caller)
293+ let address = if (isProxyStakingSc(toString(i.caller)))
294+ then toString(i.originCaller)
295+ else realCaller
296+ let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
297+ if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U"))
298+ then throw("jackpot only")
299+ else {
300+ let result = getUnstakeResult(address, assetId, color, i.caller, realCaller, claimEgg)
301+ result
302+ }
277303 }
278304
279305
280306 @Callable(i)
281307 func configureOracle (oracle) = if ((i.caller != this))
282308 then throw("FCO: admin only")
283309 else [StringEntry("static_oracleAddress", oracle)]
284310
285311
286312
287313 @Callable(i)
288314 func init () = if ((i.caller != this))
289315 then throw("FI: admin only")
290316 else [IntegerEntry("total_startHeight", height)]
291317
292318
293319
294320 @Callable(i)
295321 func buyPerch (color,refererAddress) = {
296322 let locked = isLocked()
297323 if ((locked == locked))
298324 then if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
299325 then throw("you need to set color properly")
300326 else {
301327 let exactPrice = calculatePerchPrice(toString(i.caller))
302328 let leftToPay = if ((i.originCaller == i.caller))
303329 then {
304330 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
305331 if ((amountPaidByCoupons == amountPaidByCoupons))
306332 then (exactPrice - amountPaidByCoupons)
307333 else throw("Strict value is not equal to itself.")
308334 }
309335 else exactPrice
310336 let payment = if ((leftToPay != 0))
311337 then {
312338 let firstPayment = value(i.payments[0])
313339 if ((firstPayment.assetId != getEggAssetId()))
314340 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
315341 else if ((firstPayment.amount != leftToPay))
316342 then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller)))
317343 else {
318344 let refererRewardForPerch = fraction(leftToPay, RefererReward, 100)
319345 let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
320346 if ((refCall == refCall))
321347 then {
322348 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))])
323349 if ((burnCall == burnCall))
324350 then leftToPay
325351 else throw("Strict value is not equal to itself.")
326352 }
327353 else throw("Strict value is not equal to itself.")
328354 }
329355 }
330356 else 0
331357 if ((payment == payment))
332358 then {
333359 let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
334360 let perchAmount = tryGetInteger(perchAmountKey)
335361 [IntegerEntry(perchAmountKey, (perchAmount + 1))]
336362 }
337363 else throw("Strict value is not equal to itself.")
338364 }
339365 else throw("Strict value is not equal to itself.")
340366 }
341367
342368
343369
344370 @Callable(i)
345371 func addFreePerch (address,color) = {
346372 let locked = isLocked()
347373 if ((locked == locked))
348374 then if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
349375 then throw("you need to set color properly")
350376 else if (if (if ((i.caller != getRebirthAddress()))
351377 then (i.caller != this)
352378 else false)
353379 then (i.caller != getSwopPromoAddress())
354380 else false)
355381 then throw("rebirth and swop promo only")
356382 else {
357383 let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color)
358384 let perchAmount = tryGetInteger(perchAmountKey)
359385 $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + 1))], "")
360386 }
361387 else throw("Strict value is not equal to itself.")
362388 }
363389
364390
365391
366392 @Callable(i)
367393 func stakeNFT () = {
368394 let locked = isLocked()
369395 if ((locked == locked))
370396 then {
371397 let pmt = value(i.payments[0])
372398 let assetId = value(value(i.payments[0]).assetId)
373399 let realCaller = toString(i.caller)
374400 let address = if (isProxyStakingSc(toString(i.caller)))
375401 then toString(i.originCaller)
376402 else realCaller
377403 let color = takeRight(value(assetInfo(assetId)).name, 1)
378404 let availablePerches = tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color))
379405 if ((pmt.amount != 1))
380406 then throw("NFT is not attached")
381407 else if ((0 >= availablePerches))
382408 then throw(("no perches available for the color " + color))
383409 else {
384- let $t01347113544 = getAssetFarmingPower(assetId, address)
385- let assetGen = $t01347113544._1
386- let assetFarmingPower = $t01347113544._2
410+ let $t01475514828 = getAssetFarmingPower(assetId, address)
411+ let assetGen = $t01475514828._1
412+ let assetFarmingPower = $t01475514828._2
387413 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1))])
388414 }
389415 }
390416 else throw("Strict value is not equal to itself.")
391417 }
392418
393419
394420
395421 @Callable(i)
396422 func stakeNFTWithoutPerch () = {
397423 let locked = isLocked()
398424 if ((locked == locked))
399425 then {
400426 let dappToCall = toString(i.caller)
401427 if (!(isProxyStakingSc(dappToCall)))
402428 then throw("FSNWP: Only trusted smart contracts can stake without a perch!")
403429 else {
404430 let pmt = value(i.payments[0])
405431 let assetId = value(value(i.payments[0]).assetId)
406432 let address = toString(i.originCaller)
407433 if ((pmt.amount != 1))
408434 then throw("NFT is not attached")
409435 else {
410- let $t01416814241 = getAssetFarmingPower(assetId, address)
411- let assetGen = $t01416814241._1
412- let assetFarmingPower = $t01416814241._2
436+ let $t01545215525 = getAssetFarmingPower(assetId, address)
437+ let assetGen = $t01545215525._1
438+ let assetFarmingPower = $t01545215525._2
413439 let asset = toBase58String(assetId)
414440 let realCaller = toString(i.caller)
415441 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [BooleanEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"), true)])
416442 }
417443 }
418444 }
419445 else throw("Strict value is not equal to itself.")
420446 }
421447
422448
423449
424450 @Callable(i)
425-func unstakeNFT (asset) = {
426- let assetId = fromBase58String(asset)
427- let realCaller = toString(i.caller)
428- let address = if (isProxyStakingSc(toString(i.caller)))
429- then toString(i.originCaller)
430- else realCaller
431- let color = takeRight(value(assetInfo(assetId)).name, 1)
432- if ((color == "U"))
433- then throw("FUN: use another function to unstake Jackpot NFT")
434- else {
435- let result = getUnstakeResult(address, assetId, color, i.caller, realCaller)
436- result
437- }
438- }
451+func unstakeNFT (asset) = unstakeNFTInternal(asset, i, true)
452+
453+
454+
455+@Callable(i)
456+func unstakeNFTWithoutClaim (asset) = unstakeNFTInternal(asset, i, false)
439457
440458
441459
442460 @Callable(i)
443461 func stakeJackpot (color) = {
444462 let locked = isLocked()
445463 if ((locked == locked))
446464 then {
447465 let pmt = value(i.payments[0])
448466 let assetId = value(pmt.assetId)
449467 let realCaller = toString(i.caller)
450468 let address = if (isProxyStakingSc(toString(i.caller)))
451469 then toString(i.originCaller)
452470 else realCaller
453471 let availablePerches = tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color))
454472 let assetIssuer = value(assetInfo(assetId)).issuer
455473 if ((pmt.amount != 1))
456474 then throw("NFT is not attached")
457475 else if (if ((assetIssuer == getIncubatorAddress()))
458476 then true
459477 else (assetIssuer == getBreederAddress()))
460478 then if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U"))
461479 then throw("jackpot only")
462480 else if ((0 >= availablePerches))
463481 then throw(("FSJ: no perches available for the color " + color))
464482 else {
465483 let farmingPower = getAssetFarmingPower(assetId, address)
466484 (getStakeResult(address, assetId, farmingPower._2, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)])
467485 }
468486 else throw("asset is not valid")
469487 }
470488 else throw("Strict value is not equal to itself.")
471489 }
472490
473491
474492
475493 @Callable(i)
476-func unstakeJackpot (asset) = {
477- let assetId = fromBase58String(asset)
478- let realCaller = toString(i.caller)
479- let address = if (isProxyStakingSc(toString(i.caller)))
480- then toString(i.originCaller)
481- else realCaller
482- let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
483- if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U"))
484- then throw("jackpot only")
485- else {
486- let result = getUnstakeResult(address, assetId, color, i.caller, realCaller)
487- result
488- }
489- }
494+func unstakeJackpot (asset) = unstakeJackpotInternal(asset, i, true)
495+
496+
497+
498+@Callable(i)
499+func unstakeJackpotWithoutClaimEgg (asset) = unstakeJackpotInternal(asset, i, false)
490500
491501
492502
493503 @Callable(i)
494504 func claimReward (asset) = {
495505 let locked = isLocked()
496506 if ((locked == locked))
497507 then {
498508 let address = if ((i.originCaller == getCfMasterAddress()))
499509 then toString(i.caller)
500510 else toString(i.originCaller)
501511 let assetId = fromBase58String(asset)
502- let sicknessCheck = asBoolean(invoke(getSicknessAddress(), "checkIfDuckGetSick", [asset], nil))
503- if ((sicknessCheck == sicknessCheck))
504- then if (sicknessCheck)
505- then {
506- let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
512+ let sicknessCheck = false
513+ if (sicknessCheck)
514+ then {
515+ let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
507516 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0)]
508- }
509- else {
510- let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
511- let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
512- let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
513- let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
514- let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
515- if ((0 >= reward))
516- then throw("FCR: you have no EGGs to withdraw")
517- else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), getEggAssetId())], (reward * 1000000))
518- }
519- else throw("Strict value is not equal to itself.")
517+ }
518+ else {
519+ let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
520+ let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
521+ let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
522+ let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
523+ let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
524+ if ((0 >= reward))
525+ then throw("FCR: you have no EGGs to withdraw")
526+ else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), getEggAssetId())], (reward * 1000000))
527+ }
520528 }
521529 else throw("Strict value is not equal to itself.")
522530 }
523531
524532
525533
526534 @Callable(i)
527535 func healDuck (duckId) = {
528- let sicknessCheck = asBoolean(invoke(getSicknessAddress(), "healDuck", [duckId], i.payments))
529- if ((sicknessCheck == sicknessCheck))
530- then {
531- let address = if (isProxyStakingSc(toString(i.caller)))
532- then toString(i.originCaller)
533- else toString(i.caller)
534- let farmingPower = getAssetFarmingPower(toBytes(duckId), address)._2
536+ let address = if (isProxyStakingSc(toString(i.caller)))
537+ then toString(i.originCaller)
538+ else toString(i.caller)
539+ let farmingPower = getAssetFarmingPower(toBytes(duckId), address)._2
535540 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + farmingPower)), IntegerEntry((((("address_" + address) + "_asset_") + duckId) + "_farmingPower"), farmingPower)]
536- }
537- else throw("Strict value is not equal to itself.")
538541 }
539542
540543

github/deemru/w8io/3ef1775 
79.19 ms