tx · 9rmjNpv6uaeLHdJ6kqY4SL8bgXh2DN7hC7xuV3BjP3MQ 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA: -0.01000000 Waves 2022.04.05 12:48 [3060382] smart account 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA > SELF 0.00000000 Waves
{ "type": 13, "id": "9rmjNpv6uaeLHdJ6kqY4SL8bgXh2DN7hC7xuV3BjP3MQ", "fee": 1000000, "feeAssetId": null, "timestamp": 1649152170610, "version": 2, "chainId": 87, "sender": "3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA", "senderPublicKey": "3GtkwhnMmG1yeozW51o4dJ1x3BDToPaLBXyBWKGdAc2e", "proofs": [ "5AHz915xMKYQYHa2751jY6Jxyt8g3M6YVnkY5dGHZXtF7miCdnp5UtiKwqbNW9yU1sYuD9iuXi8WyrRjMXp8srJj" ], "script": "base64:AAIFAAAAAAAAACsIAhIDCgEIEgASBAoCCAgSBAoCCAgSABIDCgEIEgMKAQgSAwoBCBIDCgEIAAAAHwAAAAAKcGVyY2hQcmljZQkAAGgAAAACAAAAAAAAAABkAAAAAAAAD0JAAAAAAAVzY2FsZQAAAAAAAAAnEAAAAAAGc2NhbGUyAAAAAAAAD0JAAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAARZ2V0UmViaXJ0aEFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19yZWJpcnRoQWRkcmVzcwEAAAATZ2V0U3dvcFByb21vQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAXc3RhdGljX3N3b3BQcm9tb0FkZHJlc3MBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABVzdGF0aWNfYnJlZWRlckFkZHJlc3MBAAAAFWdldFJlZkNvbnRyYWN0QWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAZc3RhdGljX3JlZkNvbnRyYWN0QWRkcmVzcwEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAAAAAA1SZWZlcmVyUmV3YXJkAAAAAAAAAAAFAQAAABFnZXRSZXdhcmRQZXJCbG9jawAAAAAAAAAAAAAAAqwBAAAACGlzTG9ja2VkAAAAAAQAAAANbWFzdGVyQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBV4iyBiHwgMpBojIAIx7/qYkiSDndcBbJCQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAA1tYXN0ZXJBZGRyZXNzAgAAAAdlZ2dsb2NrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAADXRyeUdldEludGVnZXIAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgAAAAAAAAAAAAEAAAARaXNVc2VyQmxhY2tsaXN0ZWQAAAABAAAAB2FkZHJlc3MHAQAAAA5nZXRBc3NldE9yaWdpbgAAAAEAAAAKZ2VuZXJhdGlvbgMJAAAAAAAAAgUAAAAKZ2VuZXJhdGlvbgIAAAABRwkBAAAAE2dldEluY3ViYXRvckFkZHJlc3MAAAAACQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAAAQAAAA5nZXRBc3NldFJhcml0eQAAAAIAAAAIZ2Vub3R5cGUAAAAKZ2VuZXJhdGlvbgQAAAAIcXVhbnRpdHkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACCQEAAAAOZ2V0QXNzZXRPcmlnaW4AAAABBQAAAApnZW5lcmF0aW9uCQABLAAAAAIJAAEsAAAAAgIAAAAGc3RhdHNfBQAAAAhnZW5vdHlwZQIAAAAJX3F1YW50aXR5CQABLAAAAAIJAAEsAAAAAgIAAAAGc3RhdHNfBQAAAAhnZW5vdHlwZQIAAAATX3F1YW50aXR5IG5vdCBmb3VuZAQAAAAFcG93ZXIJAABsAAAABgkAAGkAAAACAAAAAAAAACcQBQAAAAhxdWFudGl0eQAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAAAQAAAAAAAAAAAgUAAAAFRkxPT1IDCQAAZgAAAAIFAAAABXBvd2VyAAAAAAAAAAAABQAAAAVwb3dlcgAAAAAAAAAAAgEAAAAIYXNTdHJpbmcAAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAZzdHJpbmcFAAAAByRtYXRjaDAFAAAABnN0cmluZwkAAAIAAAABAgAAABx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nAQAAABRnZXRBc3NldEZhcm1pbmdQb3dlcgAAAAIAAAAHYXNzZXRJZAAAAAdhZGRyZXNzAwMJAAAAAAAAAggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAHYXNzZXRJZAAAAAZpc3N1ZXIJAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAAGCQAAAAAAAAIICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAB2Fzc2V0SWQAAAAGaXNzdWVyCQEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAEAAAACWFzc2V0TmFtZQgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAHYXNzZXRJZAAAAARuYW1lBAAAAApnZW5lcmF0aW9uCQABLwAAAAIJAQAAAAl0YWtlUmlnaHQAAAACBQAAAAlhc3NldE5hbWUAAAAAAAAAAAIAAAAAAAAAAAEEAAAAB2Zhcm1HZW4JAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAkBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAIAAAAOZ2V0R2VuRnJvbU5hbWUJAARMAAAAAgUAAAAJYXNzZXROYW1lBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAHZmFybUdlbgUAAAAHZmFybUdlbgQAAAAJZmFybUJvb3N0CQEAAAAIYXNTdHJpbmcAAAABCQAD/AAAAAQJAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAAAgAAABpjYWxjdWxhdGVGYXJtaW5nUG93ZXJCb29zdAkABEwAAAACCQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgUAAAAHYWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAACWZhcm1Cb29zdAUAAAAJZmFybUJvb3N0BAAAABF0b3RhbEZhcm1pbmdQb3dlcgkBAAAADmdldEFzc2V0UmFyaXR5AAAAAgUAAAAHZmFybUdlbgUAAAAKZ2VuZXJhdGlvbgkABRQAAAACBQAAAAdmYXJtR2VuBQAAABF0b3RhbEZhcm1pbmdQb3dlcgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAADW5vdCB2YWxpZCBORlQBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAHYXNzZXRJZAIAAAANX2Zhcm1pbmdQb3dlcgEAAAAOZ2V0QXNzZXRzQnlHZW4AAAABAAAAA2dlbgQAAAABcwkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgIAAAAHYXNzZXRzXwUAAAADZ2VuAwkAAAAAAAACBQAAAAFzAgAAAAAFAAAAA25pbAkABLUAAAACBQAAAAFzAgAAAAEsAQAAAAxjYWxjSW50ZXJlc3QAAAADAAAAEHByZXZpb3VzSW50ZXJlc3QAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAAAABF0b3RhbEZhcm1pbmdQb3dlcgkAAGQAAAACBQAAABBwcmV2aW91c0ludGVyZXN0CQAAaQAAAAIJAABoAAAAAgkAAGgAAAACBQAAAAVzY2FsZQkBAAAAEWdldFJld2FyZFBlckJsb2NrAAAAAAkAAGUAAAACBQAAAAZoZWlnaHQFAAAAFnByZXZpb3VzSW50ZXJlc3RIZWlnaHQFAAAAEXRvdGFsRmFybWluZ1Bvd2VyAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAAAwkAAGYAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgAAAAAAAAAAAAQAAAAQcHJldmlvdXNJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAQAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAB10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAQAAAARdG90YWxGYXJtaW5nUG93ZXIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyCQEAAAAMY2FsY0ludGVyZXN0AAAAAwUAAAAQcHJldmlvdXNJbnRlcmVzdAUAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAUAAAARdG90YWxGYXJtaW5nUG93ZXIDCQEAAAACIT0AAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEXRvdGFsX3N0YXJ0SGVpZ2h0AAAAAAAAAAAACQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0CQAAAgAAAAECAAAAHGZhcm1pbmcgaXMgbm90IGxhdW5jaGVkLCB5ZXQBAAAAFGNhbGNBc3NldFJld2FyZERlbHRhAAAAAwAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQAAAARYXNzZXRGYXJtaW5nUG93ZXIEAAAAFmxhc3RDaGVja0Fzc2V0SW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAHYXNzZXRJZAIAAAASX2xhc3RDaGVja0ludGVyZXN0BAAAAA9jdXJyZW50SW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAAaAAAAAIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAAZQAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAAWbGFzdENoZWNrQXNzZXRJbnRlcmVzdAEAAAAUYWRkQXNzZXRJZFRvR2VuRW50cnkAAAACAAAAB2Fzc2V0SWQAAAAIYXNzZXRHZW4EAAAADGN1cnJlbnRWYWx1ZQkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdhc3NldHNfBQAAAAhhc3NldEdlbgIAAAAHX2xvY2tlZAMJAAAAAAAAAgUAAAAMY3VycmVudFZhbHVlAgAAAAAFAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACBQAAAAxjdXJyZW50VmFsdWUCAAAAASwFAAAAB2Fzc2V0SWQBAAAADmdldFN0YWtlUmVzdWx0AAAAAwAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQAAAARYXNzZXRGYXJtaW5nUG93ZXIEAAAABWFzc2V0CQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0CQEAAAASZ2V0Q3VycmVudEludGVyZXN0AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAddG90YWxfbGFzdENoZWNrSW50ZXJlc3RIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAADV9mYXJtaW5nUG93ZXIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAASX2xhc3RDaGVja0ludGVyZXN0CQEAAAASZ2V0Q3VycmVudEludGVyZXN0AAAAAAUAAAADbmlsAQAAABBnZXRVbnN0YWtlUmVzdWx0AAAABQAAAAdhZGRyZXNzAAAAB2Fzc2V0SWQAAAALcmV3YXJkRGVsdGEAAAAPd2l0aGRyYXduQW1vdW50AAAAEWFzc2V0RmFybWluZ1Bvd2VyBAAAAAVhc3NldAkAAlgAAAABBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAA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bGFpbSB5b3VyIGZhcm1pbmcgcmV3YXJkcyB0aWxsIHRoZSBlbmQgb2YgRHVja1NxdWlkIGdhbWUuIFF1YWNrIGluIHBlYWNlIQMJAABmAAAAAgkBAAAACGlzTG9ja2VkAAAAAAAAAAAAAAAAAAkAAAIAAAABAgAAACVFR0cgb3BlcmF0aW9ucyBhcmUgdGVtcG9yYXJpbHkgbG9ja2VkBAAAAAdhc3NldElkCQACWQAAAAEFAAAABWFzc2V0BAAAAAdhZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAFY29sb3IJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAALX3BlcmNoQ29sb3IEAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQEAAAAdZ2V0TGFzdEtub3duQXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAQAAAAQYXNzZXRSZXdhcmREZWx0YQkBAAAAFGNhbGNBc3NldFJld2FyZERlbHRhAAAAAwUAAAAHYWRkcmVzcwUAAAAFYXNzZXQFAAAAEWFzc2V0RmFybWluZ1Bvd2VyBAAAAAxmYXJtZWRBbW91bnQJAABkAAAAAgUAAAAQYXNzZXRSZXdhcmREZWx0YQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAWX2xhc3RDaGVja0Zhcm1lZEFtb3VudAQAAAAPd2l0aGRyYXduQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABBfd2l0aGRyYXduQW1vdW50BAAAAAZyZXdhcmQJAABpAAAAAgkAAGUAAAACBQAAAAxmYXJtZWRBbW91bnQFAAAAD3dpdGhkcmF3bkFtb3VudAkAAGgAAAACBQAAAAVzY2FsZQAAAAAAAAAAZAMJAQAAAAIhPQAAAAIJAQAAAAl0YWtlUmlnaHQAAAACCQEAAAAFdmFsdWUAAAABCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAdhc3NldElkAAAABG5hbWUAAAAAAAAAAAECAAAAAVUJAAACAAAAAQIAAAAMamFja3BvdCBvbmx5AwkAAGYAAAACBQAAABFhc3NldEZhcm1pbmdQb3dlcgAAAAAAAAAAAAQAAAAGcmVzdWx0CQEAAAAQZ2V0VW5zdGFrZVJlc3VsdAAAAAUFAAAAB2FkZHJlc3MFAAAAB2Fzc2V0SWQFAAAAEGFzc2V0UmV3YXJkRGVsdGEFAAAABnJld2FyZAUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAAUUAAAAAgkABE4AAAACBQAAAAZyZXN1bHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAASX3BlcmNoZXNBdmFpbGFibGVfBQAAAAVjb2xvcgkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAASX3BlcmNoZXNBdmFpbGFibGVfBQAAAAVjb2xvcgAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAABoAAAAAgUAAAAGcmV3YXJkAAAAAAAAD0JACQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABBQAAAAdhc3NldElkBQAAAANuaWwJAABoAAAAAgUAAAAGcmV3YXJkAAAAAAAAD0JACQAAAgAAAAECAAAAAAAAAAFpAQAAAAtjbGFpbVJld2FyZAAAAAEAAAAFYXNzZXQDCQEAAAARaXNVc2VyQmxhY2tsaXN0ZWQAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAANNPb29wcywgbG9va3MgbGlrZSB5b3UgbG9zdCBpbiBvbmUgb2YgdGhlIER1Y2tzcXVpZCBnYW1lcyEgQXMgeW91IGFscmVhZHkga25vdywgYW55IGxvc3MgaGFzIGl0cyBjb25zZXF1ZW5jZXMsIHNvIHlvdSB3aWxsIGJlIG5vdCBhYmxlIHRvIGNsYWltIHlvdXIgZmFybWluZyByZXdhcmRzIHRpbGwgdGhlIGVuZCBvZiBEdWNrU3F1aWQgZ2FtZS4gUXVhY2sgaW4gcGVhY2UhAwkAAGYAAAACCQEAAAAIaXNMb2NrZWQAAAAAAAAAAAAAAAAACQAAAgAAAAECAAAAJUVHRyBvcGVyYXRpb25zIGFyZSB0ZW1wb3JhcmlseSBsb2NrZWQEAAAAB2FkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAdhc3NldElkCQACWQAAAAEFAAAABWFzc2V0BAAAABFhc3NldEZhcm1pbmdQb3dlcgkBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAMZmFybWVkQW1vdW50CQAAZAAAAAIFAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQEAAAAD3dpdGhkcmF3bkFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVkQW1vdW50BQAAAA93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAFc2NhbGUAAAAAAAAAAGQDCQAAZwAAAAIAAAAAAAAAAAAFAAAABnJld2FyZAkAAAIAAAABAgAAABx5b3UgaGF2ZSBubyBFR0dzIHRvIHdpdGhkcmF3CQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABBfd2l0aGRyYXduQW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEF93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAGcmV3YXJkBQAAAAZzY2FsZTIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAB2FkZHJlc3MJAABoAAAAAgUAAAAGcmV3YXJkAAAAAAAAD0JACQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAFAAAAA25pbAkAAGgAAAACBQAAAAZyZXdhcmQAAAAAAAAPQkAAAAAA4zCSEQ==", "height": 3060382, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Aemww9ndw22A7HsoYzoPSAQX8iggaeAhcgs2s2aEomdy Next: 8yYNfVWc2hKBEMWLd7DU7wBRFy2U6D2jAq15bYS1c8Ge Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let a = | |
4 | + | let a = (100 * 1000000) | |
5 | 5 | ||
6 | - | let b = | |
6 | + | let b = 10000 | |
7 | 7 | ||
8 | - | let c = | |
8 | + | let c = 1000000 | |
9 | 9 | ||
10 | - | let d = 1000000 | |
11 | - | ||
12 | - | let e = base58'3P6TwNU39Ykkbeqhn5TE4a2736xsA1vXemM' | |
13 | - | ||
14 | - | let f = base58'3P9REuLBnYBafDqtEu6hfzs2Rv2haSU158y' | |
15 | - | ||
16 | - | let g = base58'3P6s9C39Ak5FAQ3F5VapYJ3ULxgbsAReXWD' | |
17 | - | ||
18 | - | let h = base58'3PGZyyPg7Mx91yaNT8k3MWxSQzuzusMUyzX' | |
19 | - | ||
20 | - | let i = 5 | |
21 | - | ||
22 | - | let j = base58'3PKL9tfUmNciXvbSA3zpXr6PnDNnhn936ba' | |
23 | - | ||
24 | - | func k () = 684 | |
10 | + | func d (e,f) = { | |
11 | + | let g = getString(e, f) | |
12 | + | if ($isInstanceOf(g, "String")) | |
13 | + | then { | |
14 | + | let h = g | |
15 | + | h | |
16 | + | } | |
17 | + | else "" | |
18 | + | } | |
25 | 19 | ||
26 | 20 | ||
27 | - | func l () = { | |
28 | - | let m = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU') | |
29 | - | let n = getInteger(m, "egglock") | |
30 | - | if ($isInstanceOf(n, "Int")) | |
21 | + | func i (f) = d(this, f) | |
22 | + | ||
23 | + | ||
24 | + | func j () = Address(fromBase58String(i("static_oracleAddress"))) | |
25 | + | ||
26 | + | ||
27 | + | func k () = fromBase58String(d(j(), "static_eggAssetId")) | |
28 | + | ||
29 | + | ||
30 | + | func l () = Address(fromBase58String(d(j(), "static_incubatorAddress"))) | |
31 | + | ||
32 | + | ||
33 | + | func m () = Address(fromBase58String(d(j(), "static_rebirthAddress"))) | |
34 | + | ||
35 | + | ||
36 | + | func n () = Address(fromBase58String(d(j(), "static_swopPromoAddress"))) | |
37 | + | ||
38 | + | ||
39 | + | func o () = Address(fromBase58String(d(j(), "static_breederAddress"))) | |
40 | + | ||
41 | + | ||
42 | + | func p () = Address(fromBase58String(d(j(), "static_refContractAddress"))) | |
43 | + | ||
44 | + | ||
45 | + | func q () = Address(fromBase58String(d(j(), "static_itemsAddress"))) | |
46 | + | ||
47 | + | ||
48 | + | let r = 5 | |
49 | + | ||
50 | + | func s () = 684 | |
51 | + | ||
52 | + | ||
53 | + | func t () = { | |
54 | + | let u = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU') | |
55 | + | let g = getInteger(u, "egglock") | |
56 | + | if ($isInstanceOf(g, "Int")) | |
31 | 57 | then { | |
32 | - | let | |
33 | - | | |
58 | + | let v = g | |
59 | + | v | |
34 | 60 | } | |
35 | 61 | else 0 | |
36 | 62 | } | |
37 | 63 | ||
38 | 64 | ||
39 | - | func | |
40 | - | let | |
41 | - | if ($isInstanceOf( | |
65 | + | func w (f) = { | |
66 | + | let g = getInteger(this, f) | |
67 | + | if ($isInstanceOf(g, "Int")) | |
42 | 68 | then { | |
43 | - | let | |
44 | - | | |
69 | + | let v = g | |
70 | + | v | |
45 | 71 | } | |
46 | 72 | else 0 | |
47 | 73 | } | |
48 | 74 | ||
49 | 75 | ||
50 | - | func r (s,q) = { | |
51 | - | let n = getString(s, q) | |
52 | - | if ($isInstanceOf(n, "String")) | |
53 | - | then { | |
54 | - | let t = n | |
55 | - | t | |
56 | - | } | |
57 | - | else "" | |
58 | - | } | |
76 | + | func x (e) = false | |
59 | 77 | ||
60 | 78 | ||
61 | - | func u (q) = r(this, q) | |
79 | + | func y (z) = if ((z == "G")) | |
80 | + | then l() | |
81 | + | else o() | |
62 | 82 | ||
63 | 83 | ||
64 | - | func v () = fromBase58String(u("static_itemsAddress")) | |
65 | - | ||
66 | - | ||
67 | - | func w (s) = false | |
68 | - | ||
69 | - | ||
70 | - | func x (y) = if ((y == "G")) | |
71 | - | then e | |
72 | - | else f | |
73 | - | ||
74 | - | ||
75 | - | func z (A,y) = { | |
76 | - | let B = valueOrErrorMessage(getInteger(Address(x(y)), (("stats_" + A) + "_quantity")), (("stats_" + A) + "_quantity")) | |
77 | - | let C = pow((10000 / B), 4, 5, 1, 2, FLOOR) | |
78 | - | if ((C > 0)) | |
79 | - | then C | |
84 | + | func A (B,z) = { | |
85 | + | let C = valueOrErrorMessage(getInteger(y(z), (("stats_" + B) + "_quantity")), (("stats_" + B) + "_quantity not found")) | |
86 | + | let D = pow((10000 / C), 4, 5, 1, 2, FLOOR) | |
87 | + | if ((D > 0)) | |
88 | + | then D | |
80 | 89 | else 2 | |
81 | 90 | } | |
82 | 91 | ||
83 | 92 | ||
84 | - | func | |
85 | - | let | |
86 | - | if ($isInstanceOf( | |
93 | + | func E (F) = { | |
94 | + | let g = F | |
95 | + | if ($isInstanceOf(g, "String")) | |
87 | 96 | then { | |
88 | - | let | |
89 | - | | |
97 | + | let G = g | |
98 | + | G | |
90 | 99 | } | |
91 | 100 | else throw("wrong type, expected: String") | |
92 | 101 | } | |
93 | 102 | ||
94 | 103 | ||
95 | - | func | |
104 | + | func H (I,e) = if (if ((value(assetInfo(I)).issuer == o())) | |
96 | 105 | then true | |
97 | - | else (value(assetInfo( | |
106 | + | else (value(assetInfo(I)).issuer == l())) | |
98 | 107 | then { | |
99 | - | let I = value(assetInfo(H)).name | |
100 | - | let y = take(takeRight(I, 2), 1) | |
101 | - | let J = D(invoke(Address(f), "getGenFromName", [I], nil)) | |
102 | - | if ((J == J)) | |
103 | - | then $Tuple2(J, z(take(J, 8), y)) | |
108 | + | let J = value(assetInfo(I)).name | |
109 | + | let z = take(takeRight(J, 2), 1) | |
110 | + | let K = E(invoke(o(), "getGenFromName", [J], nil)) | |
111 | + | if ((K == K)) | |
112 | + | then { | |
113 | + | let L = E(invoke(q(), "calculateFarmingPowerBoost", [toBase58String(I), e], nil)) | |
114 | + | if ((L == L)) | |
115 | + | then { | |
116 | + | let M = A(K, z) | |
117 | + | $Tuple2(K, M) | |
118 | + | } | |
119 | + | else throw("Strict value is not equal to itself.") | |
120 | + | } | |
104 | 121 | else throw("Strict value is not equal to itself.") | |
105 | 122 | } | |
106 | 123 | else throw("not valid NFT") | |
107 | 124 | ||
108 | 125 | ||
109 | - | func | |
126 | + | func N (e,I) = w((((("address_" + e) + "_asset_") + I) + "_farmingPower")) | |
110 | 127 | ||
111 | 128 | ||
112 | - | func | |
113 | - | let | |
114 | - | if (( | |
129 | + | func O (P) = { | |
130 | + | let Q = i(("assets_" + P)) | |
131 | + | if ((Q == "")) | |
115 | 132 | then nil | |
116 | - | else split( | |
133 | + | else split(Q, ",") | |
117 | 134 | } | |
118 | 135 | ||
119 | 136 | ||
120 | - | func | |
137 | + | func R (S,T,M) = (S + (((b * s()) * (height - T)) / M)) | |
121 | 138 | ||
122 | 139 | ||
123 | - | func | |
140 | + | func U () = if ((w("total_farmingPower") > 0)) | |
124 | 141 | then { | |
125 | - | let | |
126 | - | let | |
127 | - | let | |
128 | - | | |
142 | + | let S = w("total_lastCheckInterest") | |
143 | + | let T = w("total_lastCheckInterestHeight") | |
144 | + | let M = w("total_farmingPower") | |
145 | + | R(S, T, M) | |
129 | 146 | } | |
130 | - | else if (( | |
131 | - | then | |
147 | + | else if ((w("total_startHeight") != 0)) | |
148 | + | then w("total_lastCheckInterest") | |
132 | 149 | else throw("farming is not launched, yet") | |
133 | 150 | ||
134 | 151 | ||
135 | - | func | |
136 | - | let | |
137 | - | let | |
138 | - | ( | |
152 | + | func V (e,I,W) = { | |
153 | + | let X = w((((("address_" + e) + "_asset_") + I) + "_lastCheckInterest")) | |
154 | + | let Y = U() | |
155 | + | (W * (Y - X)) | |
139 | 156 | } | |
140 | 157 | ||
141 | 158 | ||
142 | - | func | |
143 | - | let | |
144 | - | if (( | |
145 | - | then | |
146 | - | else (( | |
159 | + | func Z (I,aa) = { | |
160 | + | let ab = i((("assets_" + aa) + "_locked")) | |
161 | + | if ((ab == "")) | |
162 | + | then I | |
163 | + | else ((ab + ",") + I) | |
147 | 164 | } | |
148 | 165 | ||
149 | 166 | ||
150 | - | func | |
151 | - | let | |
152 | - | [IntegerEntry("total_farmingPower", ( | |
167 | + | func ac (e,I,W) = { | |
168 | + | let ad = toBase58String(I) | |
169 | + | [IntegerEntry("total_farmingPower", (w("total_farmingPower") + W)), IntegerEntry("total_lastCheckInterest", U()), IntegerEntry("total_lastCheckInterestHeight", height), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_farmingPower"), W), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_lastCheckInterest"), U())] | |
153 | 170 | } | |
154 | 171 | ||
155 | 172 | ||
156 | - | func | |
157 | - | let | |
158 | - | [IntegerEntry("total_farmingPower", ( | |
173 | + | func ae (e,I,af,ag,W) = { | |
174 | + | let ad = toBase58String(I) | |
175 | + | [IntegerEntry("total_farmingPower", (w("total_farmingPower") - W)), IntegerEntry("total_lastCheckInterest", U()), IntegerEntry("total_lastCheckInterestHeight", height), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_farmingPower"), 0), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_lastCheckInterest"), U()), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount"), (w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) + (ag * c))), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"), (w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount")) + af))] | |
159 | 176 | } | |
160 | 177 | ||
161 | 178 | ||
162 | - | func | |
163 | - | let | |
164 | - | if (( | |
165 | - | then | |
166 | - | else (( | |
179 | + | func ah (e) = { | |
180 | + | let ai = d(q(), (("ART-XMISTL_" + e) + "_owner")) | |
181 | + | if ((ai == "")) | |
182 | + | then a | |
183 | + | else ((a / 10) * 9) | |
167 | 184 | } | |
168 | 185 | ||
169 | 186 | ||
170 | - | @Callable(ah) | |
171 | - | func init () = if ((ah.caller != this)) | |
187 | + | @Callable(aj) | |
188 | + | func configureOracle (ak) = if ((aj.caller != this)) | |
189 | + | then throw("admin only") | |
190 | + | else [StringEntry("static_oracleAddress", ak)] | |
191 | + | ||
192 | + | ||
193 | + | ||
194 | + | @Callable(aj) | |
195 | + | func init () = if ((aj.caller != this)) | |
172 | 196 | then throw("admin only") | |
173 | 197 | else [IntegerEntry("total_startHeight", height)] | |
174 | 198 | ||
175 | 199 | ||
176 | 200 | ||
177 | - | @Callable( | |
178 | - | func buyPerch ( | |
201 | + | @Callable(aj) | |
202 | + | func buyPerch (al,am) = if ((t() > 0)) | |
179 | 203 | then throw("EGG operations are temporarily locked") | |
180 | - | else if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
204 | + | else if ((0 > value(indexOf(["B", "R", "G", "Y"], al)))) | |
181 | 205 | then throw("you need to set color properly") | |
182 | 206 | else { | |
183 | - | let | |
184 | - | let | |
185 | - | if (( | |
186 | - | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String( | |
187 | - | else if (( | |
188 | - | then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString( | |
207 | + | let an = value(aj.payments[0]) | |
208 | + | let ao = ah(toString(aj.caller)) | |
209 | + | if ((an.assetId != k())) | |
210 | + | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(k()))) | |
211 | + | else if ((an.amount != ao)) | |
212 | + | then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString(ao))) | |
189 | 213 | else { | |
190 | - | let | |
191 | - | let | |
192 | - | if (( | |
214 | + | let ap = fraction(an.amount, r, 100) | |
215 | + | let aq = invoke(p(), "refPayment", [am], [AttachedPayment(k(), ap)]) | |
216 | + | if ((aq == aq)) | |
193 | 217 | then { | |
194 | - | let | |
195 | - | let | |
196 | - | [IntegerEntry( | |
218 | + | let ar = ((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al) | |
219 | + | let as = w(ar) | |
220 | + | [IntegerEntry(ar, (as + 1))] | |
197 | 221 | } | |
198 | 222 | else throw("Strict value is not equal to itself.") | |
199 | 223 | } | |
201 | 225 | ||
202 | 226 | ||
203 | 227 | ||
204 | - | @Callable( | |
205 | - | func addFreePerch ( | |
228 | + | @Callable(aj) | |
229 | + | func addFreePerch (e,al) = if ((0 > value(indexOf(["B", "R", "G", "Y"], al)))) | |
206 | 230 | then throw("you need to set color properly") | |
207 | - | else if (if (if (( | |
208 | - | then ( | |
231 | + | else if (if (if ((aj.caller != m())) | |
232 | + | then (aj.caller != this) | |
209 | 233 | else false) | |
210 | - | then ( | |
234 | + | then (aj.caller != n()) | |
211 | 235 | else false) | |
212 | 236 | then throw("rebirth and swop promo only") | |
213 | 237 | else { | |
214 | - | let | |
215 | - | let | |
216 | - | $Tuple2([IntegerEntry( | |
238 | + | let ar = ((("address_" + e) + "_perchesAvailable_") + al) | |
239 | + | let as = w(ar) | |
240 | + | $Tuple2([IntegerEntry(ar, (as + 1))], "") | |
217 | 241 | } | |
218 | 242 | ||
219 | 243 | ||
220 | 244 | ||
221 | - | @Callable( | |
222 | - | func stakeNFT () = if (( | |
245 | + | @Callable(aj) | |
246 | + | func stakeNFT () = if ((t() > 0)) | |
223 | 247 | then throw("EGG operations are temporarily locked") | |
224 | 248 | else { | |
225 | - | let | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | if (( | |
249 | + | let at = value(aj.payments[0]) | |
250 | + | let I = value(value(aj.payments[0]).assetId) | |
251 | + | let e = toString(aj.caller) | |
252 | + | let al = takeRight(value(assetInfo(I)).name, 1) | |
253 | + | let au = w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) | |
254 | + | if ((at.amount != 1)) | |
231 | 255 | then throw("NFT is not attached") | |
232 | - | else if ((0 >= | |
233 | - | then throw(("no perches available for the color " + | |
256 | + | else if ((0 >= au)) | |
257 | + | then throw(("no perches available for the color " + al)) | |
234 | 258 | else { | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | ( | |
259 | + | let av = H(I, e) | |
260 | + | let aa = av._1 | |
261 | + | let W = av._2 | |
262 | + | let aw = V(e, toBase58String(I), W) | |
263 | + | (ac(e, I, W) ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (au - 1))]) | |
240 | 264 | } | |
241 | 265 | } | |
242 | 266 | ||
243 | 267 | ||
244 | 268 | ||
245 | - | @Callable( | |
246 | - | func unstakeNFT ( | |
269 | + | @Callable(aj) | |
270 | + | func unstakeNFT (ad) = if (x(toString(aj.caller))) | |
247 | 271 | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
248 | - | else if (( | |
272 | + | else if ((t() > 0)) | |
249 | 273 | then throw("EGG operations are temporarily locked") | |
250 | 274 | else { | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | if ((0 >= | |
275 | + | let I = fromBase58String(ad) | |
276 | + | let e = toString(aj.caller) | |
277 | + | let W = N(e, ad) | |
278 | + | let aw = V(e, ad, W) | |
279 | + | let ax = (aw + w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"))) | |
280 | + | let ag = w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) | |
281 | + | let ay = ((ax - ag) / (b * 100)) | |
282 | + | let al = takeRight(value(assetInfo(I)).name, 1) | |
283 | + | if ((0 >= W)) | |
260 | 284 | then throw("asset not available") | |
261 | - | else if (( | |
285 | + | else if ((al == "U")) | |
262 | 286 | then throw("use another function to unstake Jackpot NFT") | |
263 | 287 | else { | |
264 | - | let | |
265 | - | $Tuple2(( | |
288 | + | let az = ae(e, I, aw, ay, W) | |
289 | + | $Tuple2((az ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) + 1)), ScriptTransfer(aj.caller, (ay * 1000000), k()), ScriptTransfer(aj.caller, 1, I)]), (ay * 1000000)) | |
266 | 290 | } | |
267 | 291 | } | |
268 | 292 | ||
269 | 293 | ||
270 | 294 | ||
271 | - | @Callable( | |
272 | - | func stakeJackpot ( | |
295 | + | @Callable(aj) | |
296 | + | func stakeJackpot (al) = if ((t() > 0)) | |
273 | 297 | then throw("EGG operations are temporarily locked") | |
274 | 298 | else { | |
275 | - | let | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | let | |
280 | - | if (( | |
299 | + | let at = value(aj.payments[0]) | |
300 | + | let I = value(at.assetId) | |
301 | + | let e = toString(aj.caller) | |
302 | + | let au = w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) | |
303 | + | let aA = value(assetInfo(I)).issuer | |
304 | + | if ((at.amount != 1)) | |
281 | 305 | then throw("NFT is not attached") | |
282 | - | else if (if (( | |
306 | + | else if (if ((aA == l())) | |
283 | 307 | then true | |
284 | - | else ( | |
285 | - | then if ((takeRight(value(value(assetInfo( | |
308 | + | else (aA == o())) | |
309 | + | then if ((takeRight(value(value(assetInfo(I)).name), 1) != "U")) | |
286 | 310 | then throw("jackpot only") | |
287 | - | else if ((0 >= | |
288 | - | then throw(("no perches available for the color " + | |
289 | - | else ( | |
311 | + | else if ((0 >= au)) | |
312 | + | then throw(("no perches available for the color " + al)) | |
313 | + | else (ac(e, I, 100) ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (au - 1)), StringEntry((((("address_" + toString(aj.caller)) + "_asset_") + toBase58String(I)) + "_perchColor"), al)]) | |
290 | 314 | else throw("asset is not valid") | |
291 | 315 | } | |
292 | 316 | ||
293 | 317 | ||
294 | 318 | ||
295 | - | @Callable( | |
296 | - | func unstakeJackpot ( | |
319 | + | @Callable(aj) | |
320 | + | func unstakeJackpot (ad) = if (x(toString(aj.caller))) | |
297 | 321 | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
298 | - | else if (( | |
322 | + | else if ((t() > 0)) | |
299 | 323 | then throw("EGG operations are temporarily locked") | |
300 | 324 | else { | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | if ((takeRight(value(value(assetInfo( | |
325 | + | let I = fromBase58String(ad) | |
326 | + | let e = toString(aj.caller) | |
327 | + | let al = i((((("address_" + e) + "_asset_") + ad) + "_perchColor")) | |
328 | + | let W = N(e, ad) | |
329 | + | let aw = V(e, ad, W) | |
330 | + | let ax = (aw + w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"))) | |
331 | + | let ag = w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) | |
332 | + | let ay = ((ax - ag) / (b * 100)) | |
333 | + | if ((takeRight(value(value(assetInfo(I)).name), 1) != "U")) | |
310 | 334 | then throw("jackpot only") | |
311 | - | else if (( | |
335 | + | else if ((W > 0)) | |
312 | 336 | then { | |
313 | - | let | |
314 | - | $Tuple2(( | |
337 | + | let az = ae(e, I, aw, ay, W) | |
338 | + | $Tuple2((az ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) + 1)), ScriptTransfer(aj.caller, (ay * 1000000), k()), ScriptTransfer(aj.caller, 1, I)]), (ay * 1000000)) | |
315 | 339 | } | |
316 | 340 | else throw("") | |
317 | 341 | } | |
318 | 342 | ||
319 | 343 | ||
320 | 344 | ||
321 | - | @Callable( | |
322 | - | func claimReward ( | |
345 | + | @Callable(aj) | |
346 | + | func claimReward (ad) = if (x(toString(aj.caller))) | |
323 | 347 | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
324 | - | else if (( | |
348 | + | else if ((t() > 0)) | |
325 | 349 | then throw("EGG operations are temporarily locked") | |
326 | 350 | else { | |
327 | - | let | |
328 | - | let | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | if ((0 >= | |
351 | + | let e = toString(aj.caller) | |
352 | + | let I = fromBase58String(ad) | |
353 | + | let W = N(e, ad) | |
354 | + | let aw = V(e, ad, W) | |
355 | + | let ax = (aw + w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"))) | |
356 | + | let ag = w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) | |
357 | + | let ay = ((ax - ag) / (b * 100)) | |
358 | + | if ((0 >= ay)) | |
335 | 359 | then throw("you have no EGGs to withdraw") | |
336 | - | else $Tuple2([IntegerEntry((((("address_" + | |
360 | + | else $Tuple2([IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount"), (w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) + (ay * c))), ScriptTransfer(Address(fromBase58String(e)), (ay * 1000000), k())], (ay * 1000000)) | |
337 | 361 | } | |
338 | 362 | ||
339 | 363 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let a = | |
4 | + | let a = (100 * 1000000) | |
5 | 5 | ||
6 | - | let b = | |
6 | + | let b = 10000 | |
7 | 7 | ||
8 | - | let c = | |
8 | + | let c = 1000000 | |
9 | 9 | ||
10 | - | let d = 1000000 | |
11 | - | ||
12 | - | let e = base58'3P6TwNU39Ykkbeqhn5TE4a2736xsA1vXemM' | |
13 | - | ||
14 | - | let f = base58'3P9REuLBnYBafDqtEu6hfzs2Rv2haSU158y' | |
15 | - | ||
16 | - | let g = base58'3P6s9C39Ak5FAQ3F5VapYJ3ULxgbsAReXWD' | |
17 | - | ||
18 | - | let h = base58'3PGZyyPg7Mx91yaNT8k3MWxSQzuzusMUyzX' | |
19 | - | ||
20 | - | let i = 5 | |
21 | - | ||
22 | - | let j = base58'3PKL9tfUmNciXvbSA3zpXr6PnDNnhn936ba' | |
23 | - | ||
24 | - | func k () = 684 | |
10 | + | func d (e,f) = { | |
11 | + | let g = getString(e, f) | |
12 | + | if ($isInstanceOf(g, "String")) | |
13 | + | then { | |
14 | + | let h = g | |
15 | + | h | |
16 | + | } | |
17 | + | else "" | |
18 | + | } | |
25 | 19 | ||
26 | 20 | ||
27 | - | func l () = { | |
28 | - | let m = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU') | |
29 | - | let n = getInteger(m, "egglock") | |
30 | - | if ($isInstanceOf(n, "Int")) | |
21 | + | func i (f) = d(this, f) | |
22 | + | ||
23 | + | ||
24 | + | func j () = Address(fromBase58String(i("static_oracleAddress"))) | |
25 | + | ||
26 | + | ||
27 | + | func k () = fromBase58String(d(j(), "static_eggAssetId")) | |
28 | + | ||
29 | + | ||
30 | + | func l () = Address(fromBase58String(d(j(), "static_incubatorAddress"))) | |
31 | + | ||
32 | + | ||
33 | + | func m () = Address(fromBase58String(d(j(), "static_rebirthAddress"))) | |
34 | + | ||
35 | + | ||
36 | + | func n () = Address(fromBase58String(d(j(), "static_swopPromoAddress"))) | |
37 | + | ||
38 | + | ||
39 | + | func o () = Address(fromBase58String(d(j(), "static_breederAddress"))) | |
40 | + | ||
41 | + | ||
42 | + | func p () = Address(fromBase58String(d(j(), "static_refContractAddress"))) | |
43 | + | ||
44 | + | ||
45 | + | func q () = Address(fromBase58String(d(j(), "static_itemsAddress"))) | |
46 | + | ||
47 | + | ||
48 | + | let r = 5 | |
49 | + | ||
50 | + | func s () = 684 | |
51 | + | ||
52 | + | ||
53 | + | func t () = { | |
54 | + | let u = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU') | |
55 | + | let g = getInteger(u, "egglock") | |
56 | + | if ($isInstanceOf(g, "Int")) | |
31 | 57 | then { | |
32 | - | let | |
33 | - | | |
58 | + | let v = g | |
59 | + | v | |
34 | 60 | } | |
35 | 61 | else 0 | |
36 | 62 | } | |
37 | 63 | ||
38 | 64 | ||
39 | - | func | |
40 | - | let | |
41 | - | if ($isInstanceOf( | |
65 | + | func w (f) = { | |
66 | + | let g = getInteger(this, f) | |
67 | + | if ($isInstanceOf(g, "Int")) | |
42 | 68 | then { | |
43 | - | let | |
44 | - | | |
69 | + | let v = g | |
70 | + | v | |
45 | 71 | } | |
46 | 72 | else 0 | |
47 | 73 | } | |
48 | 74 | ||
49 | 75 | ||
50 | - | func r (s,q) = { | |
51 | - | let n = getString(s, q) | |
52 | - | if ($isInstanceOf(n, "String")) | |
53 | - | then { | |
54 | - | let t = n | |
55 | - | t | |
56 | - | } | |
57 | - | else "" | |
58 | - | } | |
76 | + | func x (e) = false | |
59 | 77 | ||
60 | 78 | ||
61 | - | func u (q) = r(this, q) | |
79 | + | func y (z) = if ((z == "G")) | |
80 | + | then l() | |
81 | + | else o() | |
62 | 82 | ||
63 | 83 | ||
64 | - | func v () = fromBase58String(u("static_itemsAddress")) | |
65 | - | ||
66 | - | ||
67 | - | func w (s) = false | |
68 | - | ||
69 | - | ||
70 | - | func x (y) = if ((y == "G")) | |
71 | - | then e | |
72 | - | else f | |
73 | - | ||
74 | - | ||
75 | - | func z (A,y) = { | |
76 | - | let B = valueOrErrorMessage(getInteger(Address(x(y)), (("stats_" + A) + "_quantity")), (("stats_" + A) + "_quantity")) | |
77 | - | let C = pow((10000 / B), 4, 5, 1, 2, FLOOR) | |
78 | - | if ((C > 0)) | |
79 | - | then C | |
84 | + | func A (B,z) = { | |
85 | + | let C = valueOrErrorMessage(getInteger(y(z), (("stats_" + B) + "_quantity")), (("stats_" + B) + "_quantity not found")) | |
86 | + | let D = pow((10000 / C), 4, 5, 1, 2, FLOOR) | |
87 | + | if ((D > 0)) | |
88 | + | then D | |
80 | 89 | else 2 | |
81 | 90 | } | |
82 | 91 | ||
83 | 92 | ||
84 | - | func | |
85 | - | let | |
86 | - | if ($isInstanceOf( | |
93 | + | func E (F) = { | |
94 | + | let g = F | |
95 | + | if ($isInstanceOf(g, "String")) | |
87 | 96 | then { | |
88 | - | let | |
89 | - | | |
97 | + | let G = g | |
98 | + | G | |
90 | 99 | } | |
91 | 100 | else throw("wrong type, expected: String") | |
92 | 101 | } | |
93 | 102 | ||
94 | 103 | ||
95 | - | func | |
104 | + | func H (I,e) = if (if ((value(assetInfo(I)).issuer == o())) | |
96 | 105 | then true | |
97 | - | else (value(assetInfo( | |
106 | + | else (value(assetInfo(I)).issuer == l())) | |
98 | 107 | then { | |
99 | - | let I = value(assetInfo(H)).name | |
100 | - | let y = take(takeRight(I, 2), 1) | |
101 | - | let J = D(invoke(Address(f), "getGenFromName", [I], nil)) | |
102 | - | if ((J == J)) | |
103 | - | then $Tuple2(J, z(take(J, 8), y)) | |
108 | + | let J = value(assetInfo(I)).name | |
109 | + | let z = take(takeRight(J, 2), 1) | |
110 | + | let K = E(invoke(o(), "getGenFromName", [J], nil)) | |
111 | + | if ((K == K)) | |
112 | + | then { | |
113 | + | let L = E(invoke(q(), "calculateFarmingPowerBoost", [toBase58String(I), e], nil)) | |
114 | + | if ((L == L)) | |
115 | + | then { | |
116 | + | let M = A(K, z) | |
117 | + | $Tuple2(K, M) | |
118 | + | } | |
119 | + | else throw("Strict value is not equal to itself.") | |
120 | + | } | |
104 | 121 | else throw("Strict value is not equal to itself.") | |
105 | 122 | } | |
106 | 123 | else throw("not valid NFT") | |
107 | 124 | ||
108 | 125 | ||
109 | - | func | |
126 | + | func N (e,I) = w((((("address_" + e) + "_asset_") + I) + "_farmingPower")) | |
110 | 127 | ||
111 | 128 | ||
112 | - | func | |
113 | - | let | |
114 | - | if (( | |
129 | + | func O (P) = { | |
130 | + | let Q = i(("assets_" + P)) | |
131 | + | if ((Q == "")) | |
115 | 132 | then nil | |
116 | - | else split( | |
133 | + | else split(Q, ",") | |
117 | 134 | } | |
118 | 135 | ||
119 | 136 | ||
120 | - | func | |
137 | + | func R (S,T,M) = (S + (((b * s()) * (height - T)) / M)) | |
121 | 138 | ||
122 | 139 | ||
123 | - | func | |
140 | + | func U () = if ((w("total_farmingPower") > 0)) | |
124 | 141 | then { | |
125 | - | let | |
126 | - | let | |
127 | - | let | |
128 | - | | |
142 | + | let S = w("total_lastCheckInterest") | |
143 | + | let T = w("total_lastCheckInterestHeight") | |
144 | + | let M = w("total_farmingPower") | |
145 | + | R(S, T, M) | |
129 | 146 | } | |
130 | - | else if (( | |
131 | - | then | |
147 | + | else if ((w("total_startHeight") != 0)) | |
148 | + | then w("total_lastCheckInterest") | |
132 | 149 | else throw("farming is not launched, yet") | |
133 | 150 | ||
134 | 151 | ||
135 | - | func | |
136 | - | let | |
137 | - | let | |
138 | - | ( | |
152 | + | func V (e,I,W) = { | |
153 | + | let X = w((((("address_" + e) + "_asset_") + I) + "_lastCheckInterest")) | |
154 | + | let Y = U() | |
155 | + | (W * (Y - X)) | |
139 | 156 | } | |
140 | 157 | ||
141 | 158 | ||
142 | - | func | |
143 | - | let | |
144 | - | if (( | |
145 | - | then | |
146 | - | else (( | |
159 | + | func Z (I,aa) = { | |
160 | + | let ab = i((("assets_" + aa) + "_locked")) | |
161 | + | if ((ab == "")) | |
162 | + | then I | |
163 | + | else ((ab + ",") + I) | |
147 | 164 | } | |
148 | 165 | ||
149 | 166 | ||
150 | - | func | |
151 | - | let | |
152 | - | [IntegerEntry("total_farmingPower", ( | |
167 | + | func ac (e,I,W) = { | |
168 | + | let ad = toBase58String(I) | |
169 | + | [IntegerEntry("total_farmingPower", (w("total_farmingPower") + W)), IntegerEntry("total_lastCheckInterest", U()), IntegerEntry("total_lastCheckInterestHeight", height), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_farmingPower"), W), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_lastCheckInterest"), U())] | |
153 | 170 | } | |
154 | 171 | ||
155 | 172 | ||
156 | - | func | |
157 | - | let | |
158 | - | [IntegerEntry("total_farmingPower", ( | |
173 | + | func ae (e,I,af,ag,W) = { | |
174 | + | let ad = toBase58String(I) | |
175 | + | [IntegerEntry("total_farmingPower", (w("total_farmingPower") - W)), IntegerEntry("total_lastCheckInterest", U()), IntegerEntry("total_lastCheckInterestHeight", height), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_farmingPower"), 0), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_lastCheckInterest"), U()), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount"), (w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) + (ag * c))), IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"), (w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount")) + af))] | |
159 | 176 | } | |
160 | 177 | ||
161 | 178 | ||
162 | - | func | |
163 | - | let | |
164 | - | if (( | |
165 | - | then | |
166 | - | else (( | |
179 | + | func ah (e) = { | |
180 | + | let ai = d(q(), (("ART-XMISTL_" + e) + "_owner")) | |
181 | + | if ((ai == "")) | |
182 | + | then a | |
183 | + | else ((a / 10) * 9) | |
167 | 184 | } | |
168 | 185 | ||
169 | 186 | ||
170 | - | @Callable(ah) | |
171 | - | func init () = if ((ah.caller != this)) | |
187 | + | @Callable(aj) | |
188 | + | func configureOracle (ak) = if ((aj.caller != this)) | |
189 | + | then throw("admin only") | |
190 | + | else [StringEntry("static_oracleAddress", ak)] | |
191 | + | ||
192 | + | ||
193 | + | ||
194 | + | @Callable(aj) | |
195 | + | func init () = if ((aj.caller != this)) | |
172 | 196 | then throw("admin only") | |
173 | 197 | else [IntegerEntry("total_startHeight", height)] | |
174 | 198 | ||
175 | 199 | ||
176 | 200 | ||
177 | - | @Callable( | |
178 | - | func buyPerch ( | |
201 | + | @Callable(aj) | |
202 | + | func buyPerch (al,am) = if ((t() > 0)) | |
179 | 203 | then throw("EGG operations are temporarily locked") | |
180 | - | else if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
204 | + | else if ((0 > value(indexOf(["B", "R", "G", "Y"], al)))) | |
181 | 205 | then throw("you need to set color properly") | |
182 | 206 | else { | |
183 | - | let | |
184 | - | let | |
185 | - | if (( | |
186 | - | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String( | |
187 | - | else if (( | |
188 | - | then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString( | |
207 | + | let an = value(aj.payments[0]) | |
208 | + | let ao = ah(toString(aj.caller)) | |
209 | + | if ((an.assetId != k())) | |
210 | + | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(k()))) | |
211 | + | else if ((an.amount != ao)) | |
212 | + | then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString(ao))) | |
189 | 213 | else { | |
190 | - | let | |
191 | - | let | |
192 | - | if (( | |
214 | + | let ap = fraction(an.amount, r, 100) | |
215 | + | let aq = invoke(p(), "refPayment", [am], [AttachedPayment(k(), ap)]) | |
216 | + | if ((aq == aq)) | |
193 | 217 | then { | |
194 | - | let | |
195 | - | let | |
196 | - | [IntegerEntry( | |
218 | + | let ar = ((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al) | |
219 | + | let as = w(ar) | |
220 | + | [IntegerEntry(ar, (as + 1))] | |
197 | 221 | } | |
198 | 222 | else throw("Strict value is not equal to itself.") | |
199 | 223 | } | |
200 | 224 | } | |
201 | 225 | ||
202 | 226 | ||
203 | 227 | ||
204 | - | @Callable( | |
205 | - | func addFreePerch ( | |
228 | + | @Callable(aj) | |
229 | + | func addFreePerch (e,al) = if ((0 > value(indexOf(["B", "R", "G", "Y"], al)))) | |
206 | 230 | then throw("you need to set color properly") | |
207 | - | else if (if (if (( | |
208 | - | then ( | |
231 | + | else if (if (if ((aj.caller != m())) | |
232 | + | then (aj.caller != this) | |
209 | 233 | else false) | |
210 | - | then ( | |
234 | + | then (aj.caller != n()) | |
211 | 235 | else false) | |
212 | 236 | then throw("rebirth and swop promo only") | |
213 | 237 | else { | |
214 | - | let | |
215 | - | let | |
216 | - | $Tuple2([IntegerEntry( | |
238 | + | let ar = ((("address_" + e) + "_perchesAvailable_") + al) | |
239 | + | let as = w(ar) | |
240 | + | $Tuple2([IntegerEntry(ar, (as + 1))], "") | |
217 | 241 | } | |
218 | 242 | ||
219 | 243 | ||
220 | 244 | ||
221 | - | @Callable( | |
222 | - | func stakeNFT () = if (( | |
245 | + | @Callable(aj) | |
246 | + | func stakeNFT () = if ((t() > 0)) | |
223 | 247 | then throw("EGG operations are temporarily locked") | |
224 | 248 | else { | |
225 | - | let | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | if (( | |
249 | + | let at = value(aj.payments[0]) | |
250 | + | let I = value(value(aj.payments[0]).assetId) | |
251 | + | let e = toString(aj.caller) | |
252 | + | let al = takeRight(value(assetInfo(I)).name, 1) | |
253 | + | let au = w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) | |
254 | + | if ((at.amount != 1)) | |
231 | 255 | then throw("NFT is not attached") | |
232 | - | else if ((0 >= | |
233 | - | then throw(("no perches available for the color " + | |
256 | + | else if ((0 >= au)) | |
257 | + | then throw(("no perches available for the color " + al)) | |
234 | 258 | else { | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | let | |
239 | - | ( | |
259 | + | let av = H(I, e) | |
260 | + | let aa = av._1 | |
261 | + | let W = av._2 | |
262 | + | let aw = V(e, toBase58String(I), W) | |
263 | + | (ac(e, I, W) ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (au - 1))]) | |
240 | 264 | } | |
241 | 265 | } | |
242 | 266 | ||
243 | 267 | ||
244 | 268 | ||
245 | - | @Callable( | |
246 | - | func unstakeNFT ( | |
269 | + | @Callable(aj) | |
270 | + | func unstakeNFT (ad) = if (x(toString(aj.caller))) | |
247 | 271 | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
248 | - | else if (( | |
272 | + | else if ((t() > 0)) | |
249 | 273 | then throw("EGG operations are temporarily locked") | |
250 | 274 | else { | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | if ((0 >= | |
275 | + | let I = fromBase58String(ad) | |
276 | + | let e = toString(aj.caller) | |
277 | + | let W = N(e, ad) | |
278 | + | let aw = V(e, ad, W) | |
279 | + | let ax = (aw + w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"))) | |
280 | + | let ag = w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) | |
281 | + | let ay = ((ax - ag) / (b * 100)) | |
282 | + | let al = takeRight(value(assetInfo(I)).name, 1) | |
283 | + | if ((0 >= W)) | |
260 | 284 | then throw("asset not available") | |
261 | - | else if (( | |
285 | + | else if ((al == "U")) | |
262 | 286 | then throw("use another function to unstake Jackpot NFT") | |
263 | 287 | else { | |
264 | - | let | |
265 | - | $Tuple2(( | |
288 | + | let az = ae(e, I, aw, ay, W) | |
289 | + | $Tuple2((az ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) + 1)), ScriptTransfer(aj.caller, (ay * 1000000), k()), ScriptTransfer(aj.caller, 1, I)]), (ay * 1000000)) | |
266 | 290 | } | |
267 | 291 | } | |
268 | 292 | ||
269 | 293 | ||
270 | 294 | ||
271 | - | @Callable( | |
272 | - | func stakeJackpot ( | |
295 | + | @Callable(aj) | |
296 | + | func stakeJackpot (al) = if ((t() > 0)) | |
273 | 297 | then throw("EGG operations are temporarily locked") | |
274 | 298 | else { | |
275 | - | let | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | let | |
280 | - | if (( | |
299 | + | let at = value(aj.payments[0]) | |
300 | + | let I = value(at.assetId) | |
301 | + | let e = toString(aj.caller) | |
302 | + | let au = w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) | |
303 | + | let aA = value(assetInfo(I)).issuer | |
304 | + | if ((at.amount != 1)) | |
281 | 305 | then throw("NFT is not attached") | |
282 | - | else if (if (( | |
306 | + | else if (if ((aA == l())) | |
283 | 307 | then true | |
284 | - | else ( | |
285 | - | then if ((takeRight(value(value(assetInfo( | |
308 | + | else (aA == o())) | |
309 | + | then if ((takeRight(value(value(assetInfo(I)).name), 1) != "U")) | |
286 | 310 | then throw("jackpot only") | |
287 | - | else if ((0 >= | |
288 | - | then throw(("no perches available for the color " + | |
289 | - | else ( | |
311 | + | else if ((0 >= au)) | |
312 | + | then throw(("no perches available for the color " + al)) | |
313 | + | else (ac(e, I, 100) ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (au - 1)), StringEntry((((("address_" + toString(aj.caller)) + "_asset_") + toBase58String(I)) + "_perchColor"), al)]) | |
290 | 314 | else throw("asset is not valid") | |
291 | 315 | } | |
292 | 316 | ||
293 | 317 | ||
294 | 318 | ||
295 | - | @Callable( | |
296 | - | func unstakeJackpot ( | |
319 | + | @Callable(aj) | |
320 | + | func unstakeJackpot (ad) = if (x(toString(aj.caller))) | |
297 | 321 | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
298 | - | else if (( | |
322 | + | else if ((t() > 0)) | |
299 | 323 | then throw("EGG operations are temporarily locked") | |
300 | 324 | else { | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | if ((takeRight(value(value(assetInfo( | |
325 | + | let I = fromBase58String(ad) | |
326 | + | let e = toString(aj.caller) | |
327 | + | let al = i((((("address_" + e) + "_asset_") + ad) + "_perchColor")) | |
328 | + | let W = N(e, ad) | |
329 | + | let aw = V(e, ad, W) | |
330 | + | let ax = (aw + w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"))) | |
331 | + | let ag = w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) | |
332 | + | let ay = ((ax - ag) / (b * 100)) | |
333 | + | if ((takeRight(value(value(assetInfo(I)).name), 1) != "U")) | |
310 | 334 | then throw("jackpot only") | |
311 | - | else if (( | |
335 | + | else if ((W > 0)) | |
312 | 336 | then { | |
313 | - | let | |
314 | - | $Tuple2(( | |
337 | + | let az = ae(e, I, aw, ay, W) | |
338 | + | $Tuple2((az ++ [IntegerEntry(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al), (w(((("address_" + toString(aj.caller)) + "_perchesAvailable_") + al)) + 1)), ScriptTransfer(aj.caller, (ay * 1000000), k()), ScriptTransfer(aj.caller, 1, I)]), (ay * 1000000)) | |
315 | 339 | } | |
316 | 340 | else throw("") | |
317 | 341 | } | |
318 | 342 | ||
319 | 343 | ||
320 | 344 | ||
321 | - | @Callable( | |
322 | - | func claimReward ( | |
345 | + | @Callable(aj) | |
346 | + | func claimReward (ad) = if (x(toString(aj.caller))) | |
323 | 347 | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
324 | - | else if (( | |
348 | + | else if ((t() > 0)) | |
325 | 349 | then throw("EGG operations are temporarily locked") | |
326 | 350 | else { | |
327 | - | let | |
328 | - | let | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | if ((0 >= | |
351 | + | let e = toString(aj.caller) | |
352 | + | let I = fromBase58String(ad) | |
353 | + | let W = N(e, ad) | |
354 | + | let aw = V(e, ad, W) | |
355 | + | let ax = (aw + w((((("address_" + e) + "_asset_") + ad) + "_lastCheckFarmedAmount"))) | |
356 | + | let ag = w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) | |
357 | + | let ay = ((ax - ag) / (b * 100)) | |
358 | + | if ((0 >= ay)) | |
335 | 359 | then throw("you have no EGGs to withdraw") | |
336 | - | else $Tuple2([IntegerEntry((((("address_" + | |
360 | + | else $Tuple2([IntegerEntry((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount"), (w((((("address_" + e) + "_asset_") + ad) + "_withdrawnAmount")) + (ay * c))), ScriptTransfer(Address(fromBase58String(e)), (ay * 1000000), k())], (ay * 1000000)) | |
337 | 361 | } | |
338 | 362 | ||
339 | 363 |
github/deemru/w8io/873ac7e 206.70 ms ◑