tx · 4FXjSab1qm4E5BcjycXizB9nzp9diyrkjhKKaNNCGrSB 3MworqnVwkDBPMuvk2kEBUxoirkDWWivUM9: -0.02100000 Waves 2025.02.20 19:31 [3512260] smart account 3MworqnVwkDBPMuvk2kEBUxoirkDWWivUM9 > SELF 0.00000000 Waves
{ "type": 13, "id": "4FXjSab1qm4E5BcjycXizB9nzp9diyrkjhKKaNNCGrSB", "fee": 2100000, "feeAssetId": null, "timestamp": 1740069184137, "version": 2, "chainId": 84, "sender": "3MworqnVwkDBPMuvk2kEBUxoirkDWWivUM9", "senderPublicKey": "DGKd7CjuT79jcRcEzxfreioxhqcJohLhgCLVUb9KwkGg", "proofs": [ "yH5tde2V8wbi3RBsYGNXiuyXSb1EcwMKzKArpgYvYr5bjXGRBHXWQ6YJpHvtkysfns156TzepohChQmhPrZ26j2" ], "script": "base64:AAIFAAAAAAAAAC8IAhIECgIICBIECgIICBIDCgEIEgUKAwgICBIECgIICBIDCgEBEgMKAQgSAwoBCAAAACYBAAAAB2dldEJvb2wAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIHAQAAAAhhc1N0cmluZwAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABcwUAAAAHJG1hdGNoMAkAAAIAAAABAgAAACZ3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nLCBnb3Q6IEludAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABcwUAAAAHJG1hdGNoMAkAAAIAAAABAgAAACd3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nLCBnb3Q6IFVuaXQJAAACAAAAAQIAAAAcd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEAAAAJaXNUZXN0RW52AAAAAAkBAAAAB2dldEJvb2wAAAABAgAAAAdURVNURU5WAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAASc3RhdGljS2V5X2V4dHJhRmVlAAAAAAIAAAAPc3RhdGljX2V4dHJhRmVlAQAAABdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgAAAAACAAAAFHN0YXRpY19mZWVBZ2dyZWdhdG9yAQAAABxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAAAAAIAAAAZc3RhdGljX3JlZkNvbnRyYWN0QWRkcmVzcwEAAAAcc3RhdGljS2V5X2VhZ2xSZWJpcnRoQWRkcmVzcwAAAAACAAAAGnN0YXRpY19lYWdsZVJlYmlydGhBZGRyZXNzAQAAABxzdGF0aWNLZXlfZWFnbEZhcm1pbmdBZGRyZXNzAAAAAAIAAAAac3RhdGljX2VhZ2xlU3Rha2luZ0FkZHJlc3MBAAAAFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAQAAABdzdGF0aWNLZXlfcHV6emxlQXNzZXRJZAAAAAACAAAAFHN0YXRpY19wdXp6bGVBc3NldElkAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAABdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAAAAABAAAAEGdldEZlZUFnZ3JlZ2F0b3IAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgAAAAABAAAADmdldE1pbnRBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAF3N0YXRpY0tleV9wdXp6bGVBc3NldElkAAAAAAEAAAAOZ2V0QnVybkFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEnN0YXRpY19idXJuQWRkcmVzcwEAAAAVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwAAAAABAAAAFWdldEVhZ2xSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAHHN0YXRpY0tleV9lYWdsUmViaXJ0aEFkZHJlc3MAAAAAAQAAABVnZXRFYWdsRmFybWluZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABxzdGF0aWNLZXlfZWFnbEZhcm1pbmdBZGRyZXNzAAAAAAEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwAAAAABAAAAFmNoZWNrQWRkaXRpb25hbFBheW1lbnQAAAABAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAABpCRENBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQAAAAJZmVlQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAEnN0YXRpY0tleV9leHRyYUZlZQAAAAADCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAACWZlZUFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAdQkRDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAAGkAAAAAQUAAAAJZmVlQW1vdW50AgAAABMgYW1vdW50IG9mIHdhdmVsZXRzCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABBnZXRGZWVB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BmNhbGxlcgUAAAAEdGhpcwcJAAACAAAAAQIAAAAaSVNKOiBhZG1pbiBvciByZWJpcnRoIG9ubHkEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAARaGF0Y2hpbmdTdGF0dXNLZXkJAQAAABRnZXRIYXRjaGluZ1N0YXR1c0tleQAAAAIFAAAAB2FkZHJlc3MFAAAABHR4SWQEAAAAD2ZpbmlzaEhlaWdodEtleQkBAAAAGmdldEhhdGNoaW5nRmluaXNoSGVpZ2h0S2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAEdHhJZAQAAAAQdG90YWxEdWNrc0Ftb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAAtlYWdsX2Ftb3VudAQAAAAKZWdnc05lZWRlZAkBAAAAFWNvdW50RWdnc05lZWRlZEFtb3VudAAAAAEFAAAAEHRvdGFsRHVja3NBbW91bnQEAAAACyR0MDcwNjU3MTE3CQAFFAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVFQUdMLQUAAAADZ2VuAgAAAAMtSlUCAAAABDhXLUoEAAAAB2R1Y2tHZW4IBQAAAAskdDA3MDY1NzExNwAAAAJfMQQAAAAHZmFybUdlbggFAAAACyR0MDcwNjU3MTE3AAAAAl8yBAAAAAtkZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAICAAAADnsiZ2Vub3R5cGUiOiAiBQAAAAdkdWNrR2VuAgAAABkiLCAiY3Jvc3NicmVlZGluZyI6IHRydWV9BAAAAAVhc3NldAkABEMAAAAHBQAAAAdkdWNrR2VuBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAQAAAAAAAAAAAAcFAAAABHVuaXQFAAAABmhlaWdodAQAAAAHYXNzZXRJZAkABDgAAAABBQAAAAVhc3NldAQAAAAJZHVja0lkS2V5CQEAAAAMZ2V0RUFHTElkS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAEdHhJZAQAAAATdmFsdWVEdWNrSWRLZXlFeGl0cwkBAAAADHRyeUdldFN0cmluZwAAAAEFAAAACWR1Y2tJZEtleQMJAQAAAAIhPQAAAAIFAAAAE3ZhbHVlRHVja0lkS2V5RXhpdHMCAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAApSVNKOiBZb3Ugd2lsbCBvdmVycmlkZSBmb2xsb3dpbmcgZHVja0lkIDoFAAAACWR1Y2tJZEtleQIAAAAkIG1ha2Ugc3VyZSB0aGF0IHlvdXIgdHhJZCBpcyB1bmlxdWUhCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIFAAAAB2FkZHJlc3MFAAAABHR4SWQFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAALZWFnbF9hbW91bnQJAABkAAAAAgUAAAAQdG90YWxEdWNrc0Ftb3VudAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAPZWFnbF9sYXN0X3ByaWNlCQAAaQAAAAIFAAAACmVnZ3NOZWVkZWQAAAAAAAAW42AJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARaGF0Y2hpbmdTdGF0dXNLZXkFAAAAEEhhdGNoaW5nRmluaXNoZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJZHVja0lkS2V5CQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAAlgAAAABBQAAAAdhc3NldElkBQAAAAlkdWNrSWRLZXkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9nZXRFQUdMU3RhdHNLZXkAAAABBQAAAAdkdWNrR2VuCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAD2dldEVBR0xTdGF0c0tleQAAAAEFAAAAB2R1Y2tHZW4AAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAAB2Zhcm1HZW4CAAAACV9xdWFudGl0eQkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAAB2Zhcm1HZW4CAAAACV9xdWFudGl0eQAAAAAAAAAAAQkABEwAAAACBQAAAAVhc3NldAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAFdmFsdWUAAAABCQAEJgAAAAEFAAAAB2FkZHJlc3MAAAAAAAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAlgAAAABBQAAAAdhc3NldElkAAAAAWkBAAAACWlzc3VlRnJlZQAAAAIAAAAHYWRkcmVzcwAAAAd0eElkU3RyAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyCQEAAAAVZ2V0RWFnbFJlYmlydGhBZGRyZXNzAAAAAAkAAAIAAAABAgAAABFDSUY6IHJlYmlydGggb25seQQAAAAEdHhJZAkAAlkAAAABBQAAAAd0eElkU3RyBAAAABFoYXRjaGluZ1N0YXR1c0tleQkBAAAAFGdldEhhdGNoaW5nU3RhdHVzS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAEdHhJZAQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkBAAAABB0b3RhbER1Y2tzQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAC2VhZ2xfYW1vdW50BAAAAAplZ2dzTmVlZGVkCQEAAAAVY291bnRFZ2dzTmVlZGVkQW1vdW50AAAAAQUAAAAQdG90YWxEdWNrc0Ftb3VudAQAAAALJHQwODY5OTg4NDcJAQAAAA1nZXRSYW5kb21OYW1lAAAAAwUAAAAEdHhJZAkAAGQAAAACCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPpAAAAAQUAAAAEdHhJZAkAASwAAAACCQABLAAAAAIFAAAAB3R4SWRTdHICAAAACyBub3QgZm91bmQgCQACWAAAAAEFAAAABHR4SWQAAAAAAAAAAAEGBAAAAAdFQUdMR2VuCAUAAAALJHQwODY5OTg4NDcAAAACXzEEAAAAB2Zhcm1HZW4IBQAAAAskdDA4Njk5ODg0NwAAAAJfMgQAAAALZGVzY3JpcHRpb24JAAEsAAAAAgkAASwAAAACAgAAAA57Imdlbm90eXBlIjogIgUAAAAHRUFHTEdlbgIAAAAZIiwgImNyb3NzYnJlZWRpbmciOiB0cnVlfQQAAAAFYXNzZXQJAARDAAAABwUAAAAHRUFHTEdlbgUAAAALZGVzY3JpcHRpb24AAAAAAAAAAAEAAAAAAAAAAAAHBQAAAAR1bml0BQAAAAZoZWlnaHQEAAAAB2Fzc2V0SWQJAAQ4AAAAAQUAAAAFYXNzZXQEAAAABmFtb3VudAkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAA9nZXRFQUdMU3RhdHNLZXkAAAABBQAAAAdFQUdMR2VuAAAAAAAAAAABBAAAAAlkdWNrSWRLZXkJAQAAAAxnZXRFQUdMSWRLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIFAAAAB2FkZHJlc3MFAAAABHR4SWQFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAALZWFnbF9hbW91bnQJAABkAAAAAgUAAAAQdG90YWxEdWNrc0Ftb3VudAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAPZWFnbF9sYXN0X3ByaWNlCQAAaQAAAAIFAAAACmVnZ3NOZWVkZWQAAAAAAAAW42AJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARaGF0Y2hpbmdTdGF0dXNLZXkFAAAAEEhhdGNoaW5nRmluaXNoZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJZHVja0lkS2V5CQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAAlgAAAABBQAAAAdhc3NldElkBQAAAAlkdWNrSWRLZXkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9nZXRFQUdMU3RhdHNLZXkAAAABBQAAAAdFQUdMR2VuBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAAB2Zhcm1HZW4CAAAACV9xdWFudGl0eQkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZzdGF0c18FAAAAB2Zhcm1HZW4CAAAACV9xdWFudGl0eQAAAAAAAAAAAQkABEwAAAACBQAAAAVhc3NldAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAFdmFsdWUAAAABCQAEJgAAAAEFAAAAB2FkZHJlc3MAAAAAAAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAlgAAAABBQAAAAdhc3NldElkAAAAAWkBAAAAC3NldERpc2NvdW50AAAAAQAAAAN2YWwDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAKYWRtaW5fb25seQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAATZGlzY291bnRDb2VmZmljaWVudAUAAAADdmFsBQAAAANuaWwAAAABaQEAAAANc3RhcnRIYXRjaGluZwAAAAEAAAAOcmVmZXJlckFkZHJlc3MEAAAAC2ZlZVZhbGlkYXRlCQEAAAAWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQAAAAAAAAIFAAAAC2ZlZVZhbGlkYXRlBQAAAAtmZWVWYWxpZGF0ZQMJAABmAAAAAgkBAAAACGlzTG9ja2VkAAAAAAAAAAAAAAAAAAkAAAIAAAABAgAAACVFR0cgb3BlcmF0aW9ucyBhcmUgdGVtcG9yYXJpbHkgbG9ja2VkBAAAAA90b3RhbENhbmlBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAALZWFnbF9hbW91bnQEAAAACmVnZ3NOZWVkZWQJAQAAABVjb3VudEVnZ3NOZWVkZWRBbW91bnQAAAABBQAAAA90b3RhbENhbmlBbW91bnQEAAAAB3Jlc3VsdHMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGdldEhhdGNoaW5nU3RhdHVzS2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAD0hhdGNoaW5nU3RhcnRlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGmdldEhhdGNoaW5nRmluaXNoSGVpZ2h0S2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABBkZWxheUZvckhhdGNoaW5nCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAtlYWdsX2Ftb3VudAkAAGQAAAACBQAAAA90b3RhbENhbmlBbW91bnQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD2VhZ2xfbGFzdF9wcmljZQkAAGkAAAACBQAAAAplZ2dzTmVlZGVkAAAAAAAAFuNgBQAAAANuaWwEAAAADGZpcnN0UGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQQAAAAJbGVmdFRvUGF5BQAAAAplZ2dzTmVlZGVkAwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkCQEAAAAOZ2V0TWludEFzc2V0SWQAAAAACQAAAgAAAAECAAAAHlRCOiBZb3UgY2FuIGF0dGFjaCBvbmx5IFB1enpsZQMJAABmAAAAAgUAAAAJbGVmdFRvUGF5CAUAAAAMZmlyc3RQYXltZW50AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADZUQjogVG8gYnJlZWQgYSBDYW5pbmUgeW91IGZvbGxvd2luZyBhbW91bnQgb2YgUHV6emxlOiAJAAGkAAAAAQUAAAAJbGVmdFRvUGF5AgAAAAEgCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAHYWRkTW9yZQkAA/wAAAAECQEAAAAVZ2V0RWFnbEZhcm1pbmdBZGRyZXNzAAAAAAIAAAAVYWRkUHV6emxlQW5kU3Rha2VNb3JlBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIJAQAAAA5nZXRNaW50QXNzZXRJZAAAAAAFAAAACWxlZnRUb1BheQUAAAADbmlsAwkAAAAAAAACBQAAAAdhZGRNb3JlBQAAAAdhZGRNb3JlBAAAAAZyZWZ1bmQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQAAZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAUAAAAJbGVmdFRvUGF5CQEAAAAOZ2V0TWludEFzc2V0SWQAAAAABQAAAANuaWwFAAAAA25pbAkABE4AAAACCQAETgAAAAIFAAAAB3Jlc3VsdHMFAAAABnJlZnVuZAUAAAALZmVlVmFsaWRhdGUJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5maW5pc2hIYXRjaGluZwAAAAEAAAAHdHhJZFN0cgQAAAALZmVlVmFsaWRhdGUJAQAAABZjaGVja0FkZGl0aW9uYWxQYXltZW50AAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAAAAAAAAAgUAAAALZmVlVmFsaWRhdGUFAAAAC2ZlZVZhbGlkYXRlBAAAAAR0eElkCQACWQAAAAEFAAAAB3R4SWRTdHIEAAAAEWhhdGNoaW5nU3RhdHVzS2V5CQEAAAAUZ2V0SGF0Y2hpbmdTdGF0dXNLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAQAAAAJRUFHTElkS2V5CQEAAAAMZ2V0RUFHTElkS2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABHR4SWQEAAAAEGhhdGNoaW5nVHhTdGF0dXMJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAAEWhhdGNoaW5nU3RhdHVzS2V5BAAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPZmluaXNoSGVpZ2h0S2V5AwkAAAAAAAACBQAAABBoYXRjaGluZ1R4U3RhdHVzBQAAABBIYXRjaGluZ0ZpbmlzaGVkBAAAAAZFQUdMSWQJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAQAAAAxnZXRFQUdMSWRLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAkAAAIAAAABCQABLAAAAAICAAAAQVRoZSBFYWdsZSB3YXMgaGF0Y2hlZCBhbmQgY2xhaW1lZCBhbHJlYWR5LCBoZXJlIGlzIHRoZSBmb2xvd2luZzogBQAAAAZFQUdMSWQDCQAAZgAAAAIFAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1IYXRjaGluZyBpcyBub3QgZmluaXNoZWQgeWV0IAkAAaQAAAABCQAAZQAAAAIFAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQCAAAAJyBibG9ja3MgcmVtYWluaW5nLCBpdCB3aWxsIHRha2UgYXJvdW5kIAkAAaQAAAABCQAAZQAAAAIFAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQCAAAACCBtaW51dGVzBAAAAA0kdDAxMjcxOTEyNzkyCQEAAAANZ2V0UmFuZG9tTmFtZQAAAAMFAAAABHR4SWQFAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0BwQAAAAHRUFHTEdlbggFAAAADSR0MDEyNzE5MTI3OTIAAAACXzEEAAAAB2Zhcm1HZW4IBQAAAA0kdDAxMjcxOTEyNzkyAAAAAl8yBAAAAAtkZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAICAAAADnsiZ2Vub3R5cGUiOiAiBQAAAAdFQUdMR2VuAgAAABkiLCAiY3Jvc3NicmVlZGluZyI6IHRydWV9BAAAAAVhc3NldAkABEMAAAAH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", "height": 3512260, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func getBool (key) = match getBoolean(this, key) { | |
5 | + | case b: Boolean => | |
6 | + | b | |
7 | + | case _ => | |
8 | + | false | |
9 | + | } | |
10 | + | ||
11 | + | ||
12 | + | func asString (value) = match value { | |
13 | + | case s: String => | |
14 | + | s | |
15 | + | case s: Int => | |
16 | + | throw("wrong type, expected: String, got: Int") | |
17 | + | case s: Unit => | |
18 | + | throw("wrong type, expected: String, got: Unit") | |
19 | + | case _ => | |
20 | + | throw("wrong type, expected: String") | |
21 | + | } | |
22 | + | ||
23 | + | ||
24 | + | func isTestEnv () = getBool("TESTENV") | |
25 | + | ||
26 | + | ||
27 | + | func tryGetStringExternal (address,key) = match getString(address, key) { | |
28 | + | case a: String => | |
29 | + | a | |
30 | + | case _ => | |
31 | + | "" | |
32 | + | } | |
33 | + | ||
34 | + | ||
35 | + | func tryGetString (key) = tryGetStringExternal(this, key) | |
36 | + | ||
37 | + | ||
38 | + | func staticKey_oracleAddress () = "static_oracleAddress" | |
39 | + | ||
40 | + | ||
41 | + | func staticKey_extraFee () = "static_extraFee" | |
42 | + | ||
43 | + | ||
44 | + | func staticKey_feeAggregator () = "static_feeAggregator" | |
45 | + | ||
46 | + | ||
47 | + | func staticKey_refContractAddress () = "static_refContractAddress" | |
48 | + | ||
49 | + | ||
50 | + | func staticKey_eaglRebirthAddress () = "static_eagleRebirthAddress" | |
51 | + | ||
52 | + | ||
53 | + | func staticKey_eaglFarmingAddress () = "static_eagleStakingAddress" | |
54 | + | ||
55 | + | ||
56 | + | func staticKey_itemsAddress () = "static_itemsAddress" | |
57 | + | ||
58 | + | ||
59 | + | func staticKey_puzzleAssetId () = "static_puzzleAssetId" | |
60 | + | ||
61 | + | ||
62 | + | func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress()))) | |
63 | + | ||
64 | + | ||
65 | + | func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator()))) | |
66 | + | ||
67 | + | ||
68 | + | func getMintAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_puzzleAssetId())) | |
69 | + | ||
70 | + | ||
71 | + | func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress"))) | |
72 | + | ||
73 | + | ||
74 | + | func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress()))) | |
75 | + | ||
76 | + | ||
77 | + | func getEaglRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_eaglRebirthAddress()))) | |
78 | + | ||
79 | + | ||
80 | + | func getEaglFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_eaglFarmingAddress()))) | |
81 | + | ||
82 | + | ||
83 | + | func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress()))) | |
84 | + | ||
85 | + | ||
86 | + | func checkAdditionalPayment (payment) = if (isDefined(payment.assetId)) | |
87 | + | then throw("BDCAP: Please attach waves") | |
88 | + | else { | |
89 | + | let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee()) | |
90 | + | if ((payment.amount != feeAmount)) | |
91 | + | then throw((("BDCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets")) | |
92 | + | else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)] | |
93 | + | } | |
94 | + | ||
95 | + | ||
96 | + | let delayForHatching = 2 | |
97 | + | ||
98 | + | let HatchingStarted = "HATCHING_STARTED" | |
99 | + | ||
100 | + | let HatchingFinished = "HATCHING_FINISHED" | |
101 | + | ||
102 | + | func isLocked () = { | |
103 | + | let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU') | |
104 | + | match getInteger(masterAddress, "egglock") { | |
105 | + | case b: Int => | |
106 | + | b | |
107 | + | case _ => | |
108 | + | 0 | |
109 | + | } | |
110 | + | } | |
111 | + | ||
112 | + | ||
113 | + | func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status") | |
114 | + | ||
115 | + | ||
116 | + | func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh") | |
117 | + | ||
118 | + | ||
119 | + | func getEAGLIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di") | |
120 | + | ||
121 | + | ||
122 | + | func getEAGLStatsKey (genString) = (("stats_" + genString) + "_amount") | |
123 | + | ||
124 | + | ||
125 | + | func tryGetInteger (key) = { | |
126 | + | let val = match getInteger(this, key) { | |
127 | + | case b: Int => | |
128 | + | b | |
129 | + | case _ => | |
130 | + | 0 | |
131 | + | } | |
132 | + | val | |
133 | + | } | |
134 | + | ||
135 | + | ||
136 | + | let discountCoefficient = tryGetInteger("discountCoefficient") | |
137 | + | ||
138 | + | func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = { | |
139 | + | let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1))) | |
140 | + | let randomHash = sha256((txId + value(randomSeedBlock.vrf))) | |
141 | + | (toInt(randomHash, (offset * 8)) % variants) | |
142 | + | } | |
143 | + | ||
144 | + | ||
145 | + | func select (color) = { | |
146 | + | let oldGenes = nil | |
147 | + | let newGenes = [$Tuple2(("EAGL-AAAAAAAA-G" + color), "8A-G"), $Tuple2(("EAGL-BBBBBBBB-G" + color), "8E-G"), $Tuple2(("EAGL-CCCCCCCC-G" + color), "8C-G"), $Tuple2(("EAGL-DDDDDDDD-G" + color), "8D-G")] | |
148 | + | $Tuple2((oldGenes ++ newGenes), newGenes) | |
149 | + | } | |
150 | + | ||
151 | + | ||
152 | + | func getRandomName (txId,hatchingFinishHeight,all) = { | |
153 | + | let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1) | |
154 | + | let color = ["A", "B", "C", "D"][colorRandom] | |
155 | + | let colorSelect = select(color) | |
156 | + | let toPickFrom = if (all) | |
157 | + | then colorSelect._1 | |
158 | + | else colorSelect._2 | |
159 | + | let typeRandom = getRandomNumber(size(toPickFrom), txId, hatchingFinishHeight, 0) | |
160 | + | toPickFrom[typeRandom] | |
161 | + | } | |
162 | + | ||
163 | + | ||
164 | + | let typesAmount = (size(select("R")._2) - 1) | |
165 | + | ||
166 | + | func countEggsNeededAmount (totalEAGLsAmount) = { | |
167 | + | let n = totalEAGLsAmount | |
168 | + | let g = discountCoefficient | |
169 | + | let t = typesAmount | |
170 | + | let price = (pow((100 + ((n * g) / (10 * t))), 2, 5, 1, 2, DOWN) + 600) | |
171 | + | (price * 1500000) | |
172 | + | } | |
173 | + | ||
174 | + | ||
175 | + | func asBoolean (value) = match value { | |
176 | + | case boolean: Boolean => | |
177 | + | boolean | |
178 | + | case _ => | |
179 | + | throw("TI: wrong type, expected: Boolean") | |
180 | + | } | |
181 | + | ||
182 | + | ||
183 | + | @Callable(i) | |
184 | + | func reduceRarity (assetId,fGen) = { | |
185 | + | let asset = fromBase58String(assetId) | |
186 | + | if (if ((i.caller != getEaglRebirthAddress())) | |
187 | + | then (i.caller != this) | |
188 | + | else false) | |
189 | + | then throw("IRR: admin or rebirth only") | |
190 | + | else { | |
191 | + | let duckGen = value(assetInfo(asset)).name | |
192 | + | let letter = takeRight(take(duckGen, 6), 1) | |
193 | + | let farmGen = (("8" + letter) + "-G") | |
194 | + | [IntegerEntry(getEAGLStatsKey(duckGen), (tryGetInteger(getEAGLStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))] | |
195 | + | } | |
196 | + | } | |
197 | + | ||
198 | + | ||
199 | + | ||
200 | + | @Callable(i) | |
201 | + | func increaseRarity (assetId,fGen) = { | |
202 | + | let asset = fromBase58String(assetId) | |
203 | + | if (if ((i.caller != getEaglRebirthAddress())) | |
204 | + | then (i.caller != this) | |
205 | + | else false) | |
206 | + | then throw("IRR: admin or rebirth only") | |
207 | + | else { | |
208 | + | let duckGen = value(assetInfo(asset)).name | |
209 | + | let letter = takeRight(take(duckGen, 6), 1) | |
210 | + | let farmGen = (("8" + letter) + "-G") | |
211 | + | [IntegerEntry(getEAGLStatsKey(duckGen), (tryGetInteger(getEAGLStatsKey(duckGen)) + 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1))] | |
212 | + | } | |
213 | + | } | |
214 | + | ||
215 | + | ||
216 | + | ||
217 | + | @Callable(i) | |
218 | + | func configureOracle (oracle) = if ((i.caller != this)) | |
219 | + | then throw("ICU: admin only") | |
220 | + | else [StringEntry("static_oracleAddress", oracle)] | |
221 | + | ||
222 | + | ||
223 | + | ||
224 | + | @Callable(i) | |
225 | + | func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != getEaglRebirthAddress())) | |
226 | + | then (i.caller != this) | |
227 | + | else false) | |
228 | + | then throw("ISJ: admin or rebirth only") | |
229 | + | else { | |
230 | + | let txId = fromBase58String(txIdStr) | |
231 | + | let hatchingStatusKey = getHatchingStatusKey(address, txId) | |
232 | + | let finishHeightKey = getHatchingFinishHeightKey(address, txId) | |
233 | + | let totalDucksAmount = tryGetInteger("eagl_amount") | |
234 | + | let eggsNeeded = countEggsNeededAmount(totalDucksAmount) | |
235 | + | let $t070657117 = $Tuple2((("EAGL-" + gen) + "-JU"), "8W-J") | |
236 | + | let duckGen = $t070657117._1 | |
237 | + | let farmGen = $t070657117._2 | |
238 | + | let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}") | |
239 | + | let asset = Issue(duckGen, description, 1, 0, false, unit, height) | |
240 | + | let assetId = calculateAssetId(asset) | |
241 | + | let duckIdKey = getEAGLIdKey(address, txId) | |
242 | + | let valueDuckIdKeyExits = tryGetString(duckIdKey) | |
243 | + | if ((valueDuckIdKeyExits != "")) | |
244 | + | then throw((("ISJ: You will override following duckId :" + duckIdKey) + " make sure that your txId is unique!")) | |
245 | + | else $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("eagl_amount", (totalDucksAmount + 1)), IntegerEntry("eagl_last_price", (eggsNeeded / 1500000)), StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getEAGLStatsKey(duckGen), (tryGetInteger(getEAGLStatsKey(duckGen)) + 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId)) | |
246 | + | } | |
247 | + | ||
248 | + | ||
249 | + | ||
250 | + | @Callable(i) | |
251 | + | func issueFree (address,txIdStr) = if ((i.caller != getEaglRebirthAddress())) | |
252 | + | then throw("CIF: rebirth only") | |
253 | + | else { | |
254 | + | let txId = fromBase58String(txIdStr) | |
255 | + | let hatchingStatusKey = getHatchingStatusKey(address, txId) | |
256 | + | let finishHeightKey = getHatchingFinishHeightKey(address, txId) | |
257 | + | let totalDucksAmount = tryGetInteger("eagl_amount") | |
258 | + | let eggsNeeded = countEggsNeededAmount(totalDucksAmount) | |
259 | + | let $t086998847 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1), true) | |
260 | + | let EAGLGen = $t086998847._1 | |
261 | + | let farmGen = $t086998847._2 | |
262 | + | let description = (("{\"genotype\": \"" + EAGLGen) + "\", \"crossbreeding\": true}") | |
263 | + | let asset = Issue(EAGLGen, description, 1, 0, false, unit, height) | |
264 | + | let assetId = calculateAssetId(asset) | |
265 | + | let amount = (tryGetInteger(getEAGLStatsKey(EAGLGen)) + 1) | |
266 | + | let duckIdKey = getEAGLIdKey(address, txId) | |
267 | + | $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("eagl_amount", (totalDucksAmount + 1)), IntegerEntry("eagl_last_price", (eggsNeeded / 1500000)), StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getEAGLStatsKey(EAGLGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId)) | |
268 | + | } | |
269 | + | ||
270 | + | ||
271 | + | ||
272 | + | @Callable(i) | |
273 | + | func setDiscount (val) = if ((i.caller != this)) | |
274 | + | then throw("admin_only") | |
275 | + | else [IntegerEntry("discountCoefficient", val)] | |
276 | + | ||
277 | + | ||
278 | + | ||
279 | + | @Callable(i) | |
280 | + | func startHatching (refererAddress) = { | |
281 | + | let feeValidate = checkAdditionalPayment(i.payments[0]) | |
282 | + | if ((feeValidate == feeValidate)) | |
283 | + | then if ((isLocked() > 0)) | |
284 | + | then throw("EGG operations are temporarily locked") | |
285 | + | else { | |
286 | + | let totalCaniAmount = tryGetInteger("eagl_amount") | |
287 | + | let eggsNeeded = countEggsNeededAmount(totalCaniAmount) | |
288 | + | let results = [StringEntry(getHatchingStatusKey(toString(i.originCaller), i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(toString(i.originCaller), i.transactionId), (height + delayForHatching)), IntegerEntry("eagl_amount", (totalCaniAmount + 1)), IntegerEntry("eagl_last_price", (eggsNeeded / 1500000))] | |
289 | + | let firstPayment = value(i.payments[1]) | |
290 | + | let leftToPay = eggsNeeded | |
291 | + | if ((firstPayment.assetId != getMintAssetId())) | |
292 | + | then throw("TB: You can attach only Puzzle") | |
293 | + | else if ((leftToPay > firstPayment.amount)) | |
294 | + | then throw(((("TB: To breed a Canine you following amount of Puzzle: " + toString(leftToPay)) + " ") + toString(i.caller))) | |
295 | + | else { | |
296 | + | let addMore = invoke(getEaglFarmingAddress(), "addPuzzleAndStakeMore", nil, [AttachedPayment(getMintAssetId(), leftToPay)]) | |
297 | + | if ((addMore == addMore)) | |
298 | + | then { | |
299 | + | let refund = if ((size(i.payments) == 2)) | |
300 | + | then [ScriptTransfer(i.caller, (i.payments[1].amount - leftToPay), getMintAssetId())] | |
301 | + | else nil | |
302 | + | ((results ++ refund) ++ feeValidate) | |
303 | + | } | |
304 | + | else throw("Strict value is not equal to itself.") | |
305 | + | } | |
306 | + | } | |
307 | + | else throw("Strict value is not equal to itself.") | |
308 | + | } | |
309 | + | ||
310 | + | ||
311 | + | ||
312 | + | @Callable(i) | |
313 | + | func finishHatching (txIdStr) = { | |
314 | + | let feeValidate = checkAdditionalPayment(i.payments[0]) | |
315 | + | if ((feeValidate == feeValidate)) | |
316 | + | then { | |
317 | + | let txId = fromBase58String(txIdStr) | |
318 | + | let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId) | |
319 | + | let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId) | |
320 | + | let EAGLIdKey = getEAGLIdKey(toString(i.caller), txId) | |
321 | + | let hatchingTxStatus = getStringValue(this, hatchingStatusKey) | |
322 | + | let hatchingFinishHeight = getIntegerValue(this, finishHeightKey) | |
323 | + | if ((hatchingTxStatus == HatchingFinished)) | |
324 | + | then { | |
325 | + | let EAGLId = getStringValue(this, getEAGLIdKey(toString(i.caller), txId)) | |
326 | + | throw(("The Eagle was hatched and claimed already, here is the folowing: " + EAGLId)) | |
327 | + | } | |
328 | + | else if ((hatchingFinishHeight > height)) | |
329 | + | then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes")) | |
330 | + | else { | |
331 | + | let $t01271912792 = getRandomName(txId, hatchingFinishHeight, false) | |
332 | + | let EAGLGen = $t01271912792._1 | |
333 | + | let farmGen = $t01271912792._2 | |
334 | + | let description = (("{\"genotype\": \"" + EAGLGen) + "\", \"crossbreeding\": true}") | |
335 | + | let asset = Issue(EAGLGen, description, 1, 0, false, unit, hatchingFinishHeight) | |
336 | + | let assetId = calculateAssetId(asset) | |
337 | + | let amount = (tryGetInteger(getEAGLStatsKey(EAGLGen)) + 1) | |
338 | + | ([StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(EAGLIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), EAGLIdKey), IntegerEntry(getEAGLStatsKey(EAGLGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(i.caller, 1, assetId)] ++ feeValidate) | |
339 | + | } | |
340 | + | } | |
341 | + | else throw("Strict value is not equal to itself.") | |
342 | + | } | |
343 | + | ||
344 | + | ||
345 | + | @Verifier(tx) | |
346 | + | func verify () = if (isTestEnv()) | |
347 | + | then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
348 | + | else { | |
349 | + | let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4' | |
350 | + | let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8' | |
351 | + | let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3' | |
352 | + | let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser)) | |
353 | + | then 1 | |
354 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser)) | |
355 | + | then 1 | |
356 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser)) | |
357 | + | then 1 | |
358 | + | else 0 | |
359 | + | let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser)) | |
360 | + | then 1 | |
361 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser)) | |
362 | + | then 1 | |
363 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser)) | |
364 | + | then 1 | |
365 | + | else 0 | |
366 | + | let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser)) | |
367 | + | then 1 | |
368 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser)) | |
369 | + | then 1 | |
370 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser)) | |
371 | + | then 1 | |
372 | + | else 0 | |
373 | + | let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned) | |
374 | + | match tx { | |
375 | + | case _ => | |
376 | + | (signaturesCount >= 1) | |
377 | + | } | |
378 | + | } | |
379 | + |
github/deemru/w8io/169f3d6 34.15 ms ◑![]()