tx · hJBrS7xNYDxv92ejZFGaRW7KoEizuynVrSScY2sYobt

3N33m3JMhEN5QxhDKujcsbpFHo3UcHE4Jwt:  -0.03300000 Waves

2024.12.29 21:51 [3436188] smart account 3N33m3JMhEN5QxhDKujcsbpFHo3UcHE4Jwt > SELF 0.00000000 Waves

{ "type": 13, "id": "hJBrS7xNYDxv92ejZFGaRW7KoEizuynVrSScY2sYobt", "fee": 3300000, "feeAssetId": null, "timestamp": 1735498360150, "version": 2, "chainId": 84, "sender": "3N33m3JMhEN5QxhDKujcsbpFHo3UcHE4Jwt", "senderPublicKey": "9Rp4v3BUwexbq4Ta6b1K2wTRxefC3irpr2tHC51mSAjz", "proofs": [ "SUg2GQLsYWDNQ2rZidvhnksMJEZUneWZE6r8oF67eiVxw5HXtuji3yxj8v9eSDMnZqQVbcBnWNKKGZidrPU7URo" ], "script": "base64:AAIFAAAAAAAAADgIAhIECgIICBIDCgEIEgQKAggIEgUKAwgIARIDCgEIEgUKAwgEBBIDCgEIEgASAwoBCBIECgIICAAAAEEAAAAABVNjYWxlAAAAAAAF9eEAAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAHZ2V0Qm9vbAAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAACWlzVGVzdEVudgAAAAAJAQAAAAdnZXRCb29sAAAAAQIAAAAHVEVTVEVOVgEAAAAcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwAAAAACAAAAGXN0YXRpY19yZWZDb250cmFjdEFkZHJlc3MAAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAIAAAAZZ2xvYmFsX2xhc3RDaGVja19pbnRlcmVzdAEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAAUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAAAAAgAAABFzdGF0aWNfZWdnQXNzZXRJZAEAAAAac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAAYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAAAAAIAAAAVc3RhdGljX2JyZWVkZXJBZGRyZXNzAQAAABtzdGF0aWNLZXlfYWNjQm9vc3RlckFkZHJlc3MAAAAAAgAAABhzdGF0aWNfYWNjQm9vc3RlckFkZHJlc3MBAAAAGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwAAAAACAAAAFXN0YXRpY19jb3Vwb25zQWRkcmVzcwEAAAAVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAAAAAIAAAASc3RhdGljX2J1cm5BZGRyZXNzAQAAABJzdGF0aWNLZXlfZXh0cmFGZWUAAAAAAgAAAA9zdGF0aWNfZXh0cmFGZWUBAAAAF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAAAAAIAAAAUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IAAAAAD2tleUdsb2JhbEVhcm5lZAIAAAAPZ2xvYmFsX2Vhcm5pbmdzAQAAABJzdGF0aWNLZXlfcGVyY2hGZWUAAAAAAgAAAA9zdGF0aWNfcGVyY2hGZWUBAAAAGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwAAAAACAAAAFXN0YXRpY19yZWJpcnRoQWRkcmVzcwEAAAAec3RhdGljS2V5X3R1cnRsZVJlYmlydGhBZGRyZXNzAAAAAAIAAAAbc3RhdGljX3R1cnRsZVJlYmlydGhBZGRyZXNzAQAAABZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAAAAAIAAAATc3RhdGljX2l0ZW1zQWRkcmVzcwEAAAAOdG90YWxTdGFrZWRLZXkAAAAAAgAAAAx0b3RhbF9zdGFrZWQBAAAAH3N0YXRpY0tleV9wcm94eVN0YWtpbmdDb250cmFjdHMAAAAAAgAAABxzdGF0aWNfcHJveHlTdGFraW5nQ29udHJhY3RzAQAAABlzdGF0aWNLZXlfY2ZNYXN0ZXJBZGRyZXNzAAAAAAIAAAAWc3RhdGljX2NmTWFzdGVyQWRkcmVzcwEAAAATc3RhdGljS2V5X3BvdGlvbkZlZQAAAAACAAAAEHN0YXRpY19wb3Rpb25GZWUBAAAAHnN0YXRpY0tleV9jYW5pbmVTdGFraW5nQWRkcmVzcwAAAAACAAAAG3N0YXRpY19jYW5pbmVTdGFraW5nQWRkcmVzcwEAAAAac3RhdGljS2V5X3dlYXJhYmxlc0FkZHJlc3MAAAAAAgAAABdzdGF0aWNfd2VhcmFibGVzQWRkcmVzcwEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwAAAAABAAAADWdldEVnZ0Fzc2V0SWQAAAAACQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAAAAAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAAAAAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwAAAAABAAAAFGdldEFjY0Jvb3N0ZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAbc3RhdGljS2V5X2FjY0Jvb3N0ZXJBZGRyZXNzAAAAAAEAAAARZ2V0Q291cG9uc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAAAAAQAAAA5nZXRCdXJuQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFXN0YXRpY0tleV9idXJuQWRkcmVzcwAAAAABAAAAEGdldEZlZUFnZ3JlZ2F0b3IAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgAAAAABAAAAFWdldFJlZkNvbnRyYWN0QWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAHHN0YXRpY0tleV9yZWZDb250cmFjdEFkZHJlc3MAAAAAAQAAABdnZXRUdXJ0bGVSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAHnN0YXRpY0tleV90dXJ0bGVSZWJpcnRoQWRkcmVzcwAAAAABAAAAD2dldEl0ZW1zQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAAAAAQAAAA9nZXRQcm94eVN0YWtpbmcAAAAACQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAH3N0YXRpY0tleV9wcm94eVN0YWtpbmdDb250cmFjdHMAAAAAAQAAABJnZXRDZk1hc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABlzdGF0aWNLZXlfY2ZNYXN0ZXJBZGRyZXNzAAAAAAEAAAAMZ2V0UG90aW9uRmVlAAAAAAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABNzdGF0aWNLZXlfcG90aW9uRmVlAAAAAAEAAAAXZ2V0Q2FuaW5lU3Rha2luZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAAB5zdGF0aWNLZXlfY2FuaW5lU3Rha2luZ0FkZHJlc3MAAAAAAQAAABNnZXRXZWFyYWJsZXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAac3RhdGljS2V5X3dlYXJhYmxlc0FkZHJlc3MAAAAAAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAIAAAAHYWRkcmVzcwAAAAVhc3NldAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEl9sYXN0Q2hlY2tJbnRlcmVzdAEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACAAAAB2FkZHJlc3MAAAAFYXNzZXQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAA1fZmFybWluZ1Bvd2VyAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgAAAAdhZGRyZXNzAAAABWFzc2V0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAIX2NsYWltZWQBAAAAEnRvdGFsU3Rha2VkVXNlcktleQAAAAEAAAAHYWRkcmVzcwkAASwAAAACAgAAAA10b3RhbF9zdGFrZWRfBQAAAAdhZGRyZXNzAAAAAA1SZWZlcmVyUmV3YXJkAAAAAAAAAAAFAQAAABZjaGVja0FkZGl0aW9uYWxQYXltZW50AAAAAQAAAAdwYXltZW50AwkBAAAACWlz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ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUAAAAGcmFyaXR5AQAAABJ1cGRhdGVGYXJtaW5nUG93ZXIAAAADAAAAB2FkZHJlc3MAAAAFYXNzZXQAAAAMb3JpZ2luQ2FsbGVyBAAAAAt0b3RhbFN0YWtlZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAOdG90YWxTdGFrZWRLZXkAAAAABAAAAA90b3RhbFN0YWtlZFVzZXIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEnRvdGFsU3Rha2VkVXNlcktleQAAAAEFAAAAB2FkZHJlc3MEAAAACWN1cnJlbnRGUAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAQAAAAFbmV3RlAJAQAAAAphc0ludFR1cGxlAAAAAQkAA/wAAAAEBQAAAAR0aGlzAgAAABJjYWxjdWxhdGVGYXJtUG93ZXIJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgUAAAAMb3JpZ2luQ2FsbGVyBQAAAANuaWwFAAAAA25pbAMJAQAAAAIhPQAAAAIFAAAACWN1cnJlbnRGUAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvdGFsU3Rha2VkS2V5AAAAAAkAAGQAAAACCQAAZQAAAAIFAAAAC3RvdGFsU3Rha2VkBQAAAAljdXJyZW50RlAIBQAAAAVuZXdGUAAAAAJfMQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEnRvdGFsU3Rha2VkVXNlcktleQAAAAEFAAAAB2FkZHJlc3MJAABkAAAAAgkAAGUAAAACBQAAAA90b3RhbFN0YWtlZFVzZXIFAAAACWN1cnJlbnRGUAgFAAAABW5ld0ZQAAAAAl8xCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAgFAAAABW5ld0ZQAAAAAl8xBQAAAANuaWwFAAAAA25pbAEAAAASY2xhaW1TdGFraW5nUmVzdWx0AAAABQAAAAdhZGRyZXNzAAAABWFzc2V0AAAABnJlY2FsYwAAAA93YWxsZXRUb1JlY2VpdmUAAAALYm9udXNDYWxsZXIEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABVrZXlHbG9iYWxMYXN0SW50ZXJlc3QEAAAAEWxhc3RDaGVja0ludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BAAAAAxzdGFrZWRBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEWFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAACGZwVXBkYXRlAwUAAAAGcmVjYWxjCQEAAAASdXBkYXRlRmFybWluZ1Bvd2VyAAAAAwUAAAAHYWRkcmVzcwUAAAAFYXNzZXQFAAAAC2JvbnVzQ2FsbGVyBQAAAANuaWwDCQAAAAAAAAIFAAAACGZwVXBkYXRlBQAAAAhmcFVwZGF0ZQQAAAAGcmV3YXJkAwkAAGYAAAACBQAAABFsYXN0Q2hlY2tJbnRlcmVzdAAAAAAAAAAAAAkAAGsAAAADCQAAZQAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAARbGFzdENoZWNrSW50ZXJlc3QFAAAADHN0YWtlZEFtb3VudAUAAAAFU2NhbGUAAAAAAAAAAAAJAAUUAAAAAgkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAD3dhbGxldFRvUmVjZWl2ZQUAAAAGcmV3YXJkCQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAAA9jdXJyZW50SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgUAAAAPd2FsbGV0VG9SZWNlaXZlBQAAAAVhc3NldAkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgUAAAAPd2FsbGV0VG9SZWNlaXZlBQAAAAVhc3NldAUAAAAGcmV3YXJkBQAAAANuaWwFAAAACGZwVXBkYXRlBQAAAAZyZXdhcmQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAAlhc0Jvb2xlYW4AAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAAHYm9vbGVhbgUAAAAHJG1hdGNoMAUAAAAHYm9vbGVhbgkAAAIAAAABAgAAACJGQUI6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBCb29sZWFuAQAAABNjYWxjdWxhdGVQZXJjaFByaWNlAAAAAQAAAAdhZGRyZXNzBAAAABFoYXNBcnRlZmFjdFN0YWtlZAkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAAFGdldEFjY0Jvb3N0ZXJBZGRyZXNzAAAAAAkAASwAAAACCQABLAAAAAICAAAAC0FSVC1YTUlTVExfBQAAAAdhZGRyZXNzAgAAAAZfb3duZXIEAAAACnBlcmNoUHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAASc3RhdGljS2V5X3BlcmNoRmVlAAAAAAMJAAAAAAAAAgUAAAARaGFzQXJ0ZWZhY3RTdGFrZWQCAAAAAAUAAAAKcGVyY2hQcmljZQkAAGgAAAACCQAAaQAAAAIFAAAACnBlcmNoUHJpY2UAAAAAAAAAAAoAAAAAAAAAAAkBAAAAEGlzUHJveHlTdGFraW5nU2MAAAABAAAAB2FkZHJlc3MEAAAAEGFsbG93ZWRDb250cmFjdHMJAQAAAA9nZXRQcm94eVN0YWtpbmcAAAAABAAAABRhbGxvd2VkQ29udHJhY3RzTGlzdAkABLUAAAACBQAAABBhbGxvd2VkQ29udHJhY3RzAgAAAAE7CQEAAAACIT0AAAACCQAETwAAAAIFAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0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AAAGYW1vdW50BQAAAANuaWwCAAAAAAAAAAFpAQAAAA5taWdyYXRlUGVyY2hlcwAAAAEAAAAHYWRkcmVzcwQAAAAKb2xkRmFybWluZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19mYXJtaW5nQWRkcmVzcwoBAAAAF3RyeUdldEludGVnZXJPbGRGYXJtaW5nAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAKb2xkRmFybWluZwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAAEAAAADHBlcmNoQW1vdW50QgkBAAAAF3RyeUdldEludGVnZXJPbGRGYXJtaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABNfcGVyY2hlc0F2YWlsYWJsZV9CAwkAAAAAAAACBQAAAAxwZXJjaEFtb3VudEIFAAAADHBlcmNoQW1vdW50QgQAAAAMcGVyY2hBbW91bnRSCQEAAAAXdHJ5R2V0SW50ZWdlck9sZEZhcm1pbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAE19wZXJjaGVzQXZhaWxhYmxlX1IDCQAAAAAAAAIFAAAADHBlcmNoQW1vdW50UgUAAAAMcGVyY2hBbW91bnRSBAAAAAxwZXJjaEFtb3VudEcJAQAAABd0cnlHZXRJbnRlZ2VyT2xkRmFybWluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAATX3BlcmNoZXNBdmFpbGFibGVfRwMJAAAAAAAAAgUAAAAMcGVyY2hBbW91bnRHBQAAAAxwZXJjaEFtb3VudEcEAAAADHBlcmNoQW1vdW50WQkBAAAAF3RyeUdldEludGVnZXJPbGRGYXJtaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABNfcGVyY2hl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", "height": 3436188, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 68FRaBw93dsNeQFx1DF1fnvGxQsbzg7bCF7w4xdb38EE Next: none Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale = 100000000
55
66 func tryGetStringExternal (address,key) = match getString(address, key) {
77 case a: String =>
88 a
99 case _ =>
1010 ""
1111 }
1212
1313
1414 func tryGetString (key) = tryGetStringExternal(this, key)
1515
1616
1717 func getBool (key) = match getBoolean(this, key) {
1818 case b: Boolean =>
1919 b
2020 case _ =>
2121 false
2222 }
2323
2424
2525 func isTestEnv () = getBool("TESTENV")
2626
2727
2828 func staticKey_refContractAddress () = "static_refContractAddress"
2929
3030
3131 let keyGlobalLastInterest = "global_lastCheck_interest"
3232
3333 func staticKey_oracleAddress () = "static_oracleAddress"
3434
3535
3636 func staticKey_eggAssetId () = "static_eggAssetId"
3737
3838
3939 func staticKey_incubatorAddress () = "static_incubatorAddress"
4040
4141
4242 func staticKey_breederAddress () = "static_breederAddress"
4343
4444
4545 func staticKey_accBoosterAddress () = "static_accBoosterAddress"
4646
4747
4848 func staticKey_couponsAddress () = "static_couponsAddress"
4949
5050
5151 func staticKey_burnAddress () = "static_burnAddress"
5252
5353
5454 func staticKey_extraFee () = "static_extraFee"
5555
5656
5757 func staticKey_feeAggregator () = "static_feeAggregator"
5858
5959
6060 let keyGlobalEarned = "global_earnings"
6161
6262 func staticKey_perchFee () = "static_perchFee"
6363
6464
6565 func staticKey_rebirthAddress () = "static_rebirthAddress"
6666
6767
6868 func staticKey_turtleRebirthAddress () = "static_turtleRebirthAddress"
6969
7070
7171 func staticKey_itemsAddress () = "static_itemsAddress"
7272
7373
7474 func totalStakedKey () = "total_staked"
7575
7676
7777 func staticKey_proxyStakingContracts () = "static_proxyStakingContracts"
7878
7979
8080 func staticKey_cfMasterAddress () = "static_cfMasterAddress"
8181
8282
8383 func staticKey_potionFee () = "static_potionFee"
8484
8585
8686 func staticKey_canineStakingAddress () = "static_canineStakingAddress"
8787
8888
8989 func staticKey_wearablesAddress () = "static_wearablesAddress"
9090
9191
9292 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
9393
9494
9595 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rebirthAddress())))
9696
9797
9898 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
9999
100100
101101 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
102102
103103
104104 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
105105
106106
107107 func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_accBoosterAddress())))
108108
109109
110110 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
111111
112112
113113 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
114114
115115
116116 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
117117
118118
119119 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
120120
121121
122122 func getTurtleRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleRebirthAddress())))
123123
124124
125125 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
126126
127127
128128 func getProxyStaking () = tryGetStringExternal(getOracle(), staticKey_proxyStakingContracts())
129129
130130
131131 func getCfMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_cfMasterAddress())))
132132
133133
134134 func getPotionFee () = getIntegerValue(getOracle(), staticKey_potionFee())
135135
136136
137137 func getCanineStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineStakingAddress())))
138138
139139
140140 func getWearablesAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_wearablesAddress())))
141141
142142
143143 func keyLastCheckInterest (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest")
144144
145145
146146 func assetFarmingPower (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_farmingPower")
147147
148148
149149 func rewardClaimedKey (address,asset) = (((address + "_asset_") + asset) + "_claimed")
150150
151151
152152 func totalStakedUserKey (address) = ("total_staked_" + address)
153153
154154
155155 let RefererReward = 5
156156
157157 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
158158 then throw("FCAP: Please attach waves")
159159 else {
160160 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
161161 if ((payment.amount != feeAmount))
162162 then throw((("FCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
163163 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
164164 }
165165
166166
167167 func tryGetInteger (key) = match getInteger(this, key) {
168168 case b: Int =>
169169 b
170170 case _ =>
171171 0
172172 }
173173
174174
175175 func asInt (value) = match value {
176176 case int: Int =>
177177 int
178178 case _ =>
179179 throw("FAI: wrong type, expected: Int")
180180 }
181181
182182
183183 func asIntTuple (value) = match value {
184184 case int: (Int, Int) =>
185185 int
186186 case _ =>
187187 throw("FAI: wrong type, expected: (Int,Int)")
188188 }
189189
190190
191191 func handleStakingTopUp (amount) = {
192192 let currentInterest = tryGetInteger(keyGlobalLastInterest)
193193 let totalStakedAmount = tryGetInteger(totalStakedKey())
194194 let interestDelta = if ((totalStakedAmount > 0))
195195 then fraction(amount, Scale, totalStakedAmount)
196196 else 0
197197 [IntegerEntry(keyGlobalEarned, (tryGetInteger(keyGlobalEarned) + amount)), IntegerEntry(keyGlobalLastInterest, (currentInterest + interestDelta))]
198198 }
199199
200200
201201 func asString (value) = match value {
202202 case string: String =>
203203 string
204204 case _ =>
205205 throw("FAS: wrong type, expected: String")
206206 }
207207
208208
209209 func tryGetBoolean (key) = match getBoolean(this, key) {
210210 case b: Boolean =>
211211 b
212212 case _ =>
213213 false
214214 }
215215
216216
217217 func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
218218 case b: Boolean =>
219219 b
220220 case _ =>
221221 false
222222 }
223223
224224
225225 func getAssetOrigin (generation) = if ((generation == "G"))
226226 then getIncubatorAddress()
227227 else getBreederAddress()
228228
229229
230230 func getAssetRarity (genotype,generation) = {
231231 let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found"))
232232 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
233233 if ((power > 0))
234234 then power
235235 else 2
236236 }
237237
238238
239239 func getAssetRarityComplete (isJackpot,assetName) = {
240240 let rarity = if (isJackpot)
241241 then 100
242242 else {
243243 let generation = take(takeRight(assetName, 2), 1)
244244 let farmGen = asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
245245 if ((farmGen == farmGen))
246246 then getAssetRarity(farmGen, generation)
247247 else throw("Strict value is not equal to itself.")
248248 }
249249 rarity
250250 }
251251
252252
253253 func updateFarmingPower (address,asset,originCaller) = {
254254 let totalStaked = tryGetInteger(totalStakedKey())
255255 let totalStakedUser = tryGetInteger(totalStakedUserKey(address))
256256 let currentFP = tryGetInteger(assetFarmingPower(address, asset))
257257 let newFP = asIntTuple(invoke(this, "calculateFarmPower", [asset, originCaller], nil))
258258 if ((currentFP != 0))
259259 then [IntegerEntry(totalStakedKey(), ((totalStaked - currentFP) + newFP._1)), IntegerEntry(totalStakedUserKey(address), ((totalStakedUser - currentFP) + newFP._1)), IntegerEntry(assetFarmingPower(address, asset), newFP._1)]
260260 else nil
261261 }
262262
263263
264264 func claimStakingResult (address,asset,recalc,walletToReceive,bonusCaller) = {
265265 let currentInterest = tryGetInteger(keyGlobalLastInterest)
266266 let lastCheckInterest = tryGetInteger(keyLastCheckInterest(address, asset))
267267 let stakedAmount = tryGetInteger(assetFarmingPower(address, asset))
268268 let fpUpdate = if (recalc)
269269 then updateFarmingPower(address, asset, bonusCaller)
270270 else nil
271271 if ((fpUpdate == fpUpdate))
272272 then {
273273 let reward = if ((lastCheckInterest > 0))
274274 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
275275 else 0
276276 $Tuple2(([ScriptTransfer(addressFromStringValue(walletToReceive), reward, getEggAssetId()), IntegerEntry(keyLastCheckInterest(address, asset), currentInterest), IntegerEntry(rewardClaimedKey(walletToReceive, asset), (tryGetInteger(rewardClaimedKey(walletToReceive, asset)) + reward))] ++ fpUpdate), reward)
277277 }
278278 else throw("Strict value is not equal to itself.")
279279 }
280280
281281
282282 func asBoolean (value) = match value {
283283 case boolean: Boolean =>
284284 boolean
285285 case _ =>
286286 throw("FAB: wrong type, expected: Boolean")
287287 }
288288
289289
290290 func calculatePerchPrice (address) = {
291291 let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner"))
292292 let perchPrice = getIntegerValue(getOracle(), staticKey_perchFee())
293293 if ((hasArtefactStaked == ""))
294294 then perchPrice
295295 else ((perchPrice / 10) * 9)
296296 }
297297
298298
299299 func isProxyStakingSc (address) = {
300300 let allowedContracts = getProxyStaking()
301301 let allowedContractsList = split(allowedContracts, ";")
302302 (indexOf(allowedContractsList, address) != unit)
303303 }
304304
305305
306306 @Callable(i)
307307 func calculateFarmPower (assetId,bonusAddress) = if (!(if ((value(assetInfo(fromBase58String(assetId))).issuer == getBreederAddress()))
308308 then true
309309 else (value(assetInfo(fromBase58String(assetId))).issuer == getIncubatorAddress())))
310310 then throw("This does not seem like a valid Duck!")
311311 else if (if (tryGetBooleanExternal(getBreederAddress(), (assetId + "_blacklisted")))
312312 then true
313313 else tryGetBooleanExternal(getIncubatorAddress(), (assetId + "_blacklisted")))
314314 then throw("Screw urself")
315315 else {
316316 let assetName = value(assetInfo(fromBase58String(assetId))).name
317317 let gen = takeRight(assetName, 1)
318318 let isJackpot = (takeRight(assetName, 1) == "U")
319319 let rarity = getAssetRarityComplete(isJackpot, assetName)
320320 let genotype = split(dropRight(drop(assetName, 5), 3), "")
321321 func uniqueArrayFilter (accum,nextGen) = if (!(containsElement(accum, nextGen)))
322322 then (accum :+ nextGen)
323323 else accum
324324
325325 let uniqueList = {
326326 let $l = genotype
327327 let $s = size($l)
328328 let $acc0 = nil
329329 func $f0_1 ($a,$i) = if (($i >= $s))
330330 then $a
331331 else uniqueArrayFilter($a, $l[$i])
332332
333333 func $f0_2 ($a,$i) = if (($i >= $s))
334334 then $a
335335 else throw("List size exceeds 8")
336336
337337 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
338338 }
339339 let totalGenes = if ((gen == "U"))
340340 then 8
341341 else size(uniqueList)
342342 let power = pow(15, 1, totalGenes, 0, 2, DOWN)
343343 let baseBlock = if (isTestEnv())
344344 then 2500000
345345 else 3750000
346346 let multiplier = (((height - baseBlock) * 100) / (((60 * 24) * 30) * 3))
347347 let basePower = tryGetInteger((assetId + "_basePower"))
348348 let finalPower = if ((basePower > 0))
349349 then basePower
350350 else ((power * multiplier) / 100)
351351 let finalPowerRarity = ((finalPower * rarity) / 100)
352352 let farmBoost = asInt(invoke(getItemsAddress(), "calculateFarmingPowerBoost", [assetId, bonusAddress], nil))
353353 if ((farmBoost == farmBoost))
354354 then {
355355 let wearabledBoost = asInt(invoke(getWearablesAddress(), "calculateWearblesBoost", [assetId], nil))
356356 if ((wearabledBoost == wearabledBoost))
357357 then {
358358 let finalPowerRarityBoost = ((finalPowerRarity + ((finalPowerRarity * farmBoost) / 100)) + ((finalPowerRarity * wearabledBoost) / 1000))
359359 $Tuple2(nil, $Tuple2(finalPowerRarityBoost, finalPower))
360360 }
361361 else throw("Strict value is not equal to itself.")
362362 }
363363 else throw("Strict value is not equal to itself.")
364364 }
365365
366366
367367
368368 @Callable(i)
369369 func configureOracle (oracle) = if ((i.caller != this))
370370 then throw("FCO: admin only")
371371 else [StringEntry(staticKey_oracleAddress(), oracle)]
372372
373373
374374
375375 @Callable(i)
376376 func buyPerch (colorI,refererAddress) = {
377377 let validPayment = checkAdditionalPayment(i.payments[0])
378378 if ((validPayment == validPayment))
379379 then {
380380 let color = if ((colorI == "U"))
381381 then "B"
382382 else colorI
383383 if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
384384 then throw("you need to set color properly")
385385 else {
386386 let exactPrice = calculatePerchPrice(toString(i.caller))
387387 let leftToPay = if ((i.originCaller == i.caller))
388388 then {
389389 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
390390 if ((amountPaidByCoupons == amountPaidByCoupons))
391391 then (exactPrice - amountPaidByCoupons)
392392 else throw("Strict value is not equal to itself.")
393393 }
394394 else exactPrice
395395 let payment = if ((leftToPay != 0))
396396 then {
397397 let firstPayment = if ((size(i.payments) == 2))
398398 then value(i.payments[1])
399399 else value(i.payments[0])
400400 if ((firstPayment.assetId != getEggAssetId()))
401401 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
402402 else if ((firstPayment.amount != leftToPay))
403403 then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller)))
404404 else {
405405 let refererRewardForPerch = fraction(leftToPay, 5, 100)
406406 let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
407407 if ((refCall == refCall))
408408 then {
409409 let toBurn = if (refCall)
410410 then (leftToPay - refererRewardForPerch)
411411 else leftToPay
412412 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
413413 if ((burnCall == burnCall))
414414 then leftToPay
415415 else throw("Strict value is not equal to itself.")
416416 }
417417 else throw("Strict value is not equal to itself.")
418418 }
419419 }
420420 else 0
421421 if ((payment == payment))
422422 then {
423423 let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
424424 let perchAmount = tryGetInteger(perchAmountKey)
425425 ([IntegerEntry(perchAmountKey, (perchAmount + 1))] ++ validPayment)
426426 }
427427 else throw("Strict value is not equal to itself.")
428428 }
429429 }
430430 else throw("Strict value is not equal to itself.")
431431 }
432432
433433
434434
435435 @Callable(i)
436436 func addFreePerch (address,color,amount) = if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
437437 then throw("you need to set color properly")
438438 else if (if (if (if ((i.caller != getRebirthAddress()))
439439 then (i.caller != getTurtleRebirthAddress())
440440 else false)
441441 then (i.caller != this)
442442 else false)
443443 then (i.caller != getCouponsAddress())
444444 else false)
445445 then throw("rebirth and admin only")
446446 else {
447447 let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color)
448448 let perchAmount = tryGetInteger(perchAmountKey)
449449 $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + amount))], "")
450450 }
451451
452452
453453
454454 @Callable(i)
455455 func migratePerches (address) = {
456456 let oldFarming = addressFromStringValue(tryGetStringExternal(getOracle(), "static_farmingAddress"))
457457 func tryGetIntegerOldFarming (key) = match getInteger(oldFarming, key) {
458458 case b: Int =>
459459 b
460460 case _ =>
461461 0
462462 }
463463
464464 let perchAmountB = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_B"))
465465 if ((perchAmountB == perchAmountB))
466466 then {
467467 let perchAmountR = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_R"))
468468 if ((perchAmountR == perchAmountR))
469469 then {
470470 let perchAmountG = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_G"))
471471 if ((perchAmountG == perchAmountG))
472472 then {
473473 let perchAmountY = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_Y"))
474474 if ((perchAmountY == perchAmountY))
475475 then {
476476 let perchAmountBInvoke = invoke(this, "addFreePerch", [address, "B", perchAmountB], nil)
477477 if ((perchAmountBInvoke == perchAmountBInvoke))
478478 then {
479479 let perchAmountRInvoke = invoke(this, "addFreePerch", [address, "R", perchAmountR], nil)
480480 if ((perchAmountRInvoke == perchAmountRInvoke))
481481 then {
482482 let perchAmountGInvoke = invoke(this, "addFreePerch", [address, "G", perchAmountG], nil)
483483 if ((perchAmountGInvoke == perchAmountGInvoke))
484484 then {
485485 let perchAmountYInvoke = invoke(this, "addFreePerch", [address, "Y", perchAmountY], nil)
486486 if ((perchAmountYInvoke == perchAmountYInvoke))
487487 then if (if (if (if ((perchAmountB == 0))
488488 then (perchAmountR == 0)
489489 else false)
490490 then (perchAmountG == 0)
491491 else false)
492492 then (perchAmountY == 0)
493493 else false)
494494 then throw("Nothing to migrate")
495495 else {
496496 let invokePerchesDelete = invoke(oldFarming, "removePerches", [address], nil)
497497 if ((invokePerchesDelete == invokePerchesDelete))
498498 then nil
499499 else throw("Strict value is not equal to itself.")
500500 }
501501 else throw("Strict value is not equal to itself.")
502502 }
503503 else throw("Strict value is not equal to itself.")
504504 }
505505 else throw("Strict value is not equal to itself.")
506506 }
507507 else throw("Strict value is not equal to itself.")
508508 }
509509 else throw("Strict value is not equal to itself.")
510510 }
511511 else throw("Strict value is not equal to itself.")
512512 }
513513 else throw("Strict value is not equal to itself.")
514514 }
515515 else throw("Strict value is not equal to itself.")
516516 }
517517
518518
519519
520520 @Callable(i)
521521 func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (if (stakeWithoutPerch)
522522 then !(isProxyStakingSc(toString(i.caller)))
523523 else false)
524524 then throw("You can't stake without a perch")
525525 else {
526526 let validPayment = checkAdditionalPayment(i.payments[0])
527527 if ((validPayment == validPayment))
528528 then {
529529 let pmt = value(i.payments[1])
530530 let assetId = value(pmt.assetId)
531531 let assetName = value(value(assetInfo(assetId)).name)
532532 let isJackpot = (takeRight(assetName, 1) == "U")
533533 let address = toString(i.caller)
534534 let perchAddress = if (usePerchOrigin)
535535 then toString(i.originCaller)
536536 else address
537537 let perches = if (stakeWithoutPerch)
538538 then nil
539539 else {
540540 let color = if (isJackpot)
541541 then jColor
542542 else takeRight(assetName, 1)
543543 let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
544544 if ((0 >= availablePerches))
545545 then throw(("no perches available for the color " + color))
546546 else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
547547 }
548548 if ((perches == perches))
549549 then if ((pmt.amount != 1))
550550 then throw("NFT is not attached")
551551 else {
552552 let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId), toString(i.originCaller)], nil))
553553 if ((farmingPower == farmingPower))
554554 then {
555555 let result = claimStakingResult(address, toBase58String(assetId), false, address, toString(i.originCaller))
556556 if ((result == result))
557557 then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
558558 else throw("Strict value is not equal to itself.")
559559 }
560560 else throw("Strict value is not equal to itself.")
561561 }
562562 else throw("Strict value is not equal to itself.")
563563 }
564564 else throw("Strict value is not equal to itself.")
565565 }
566566
567567
568568
569569 @Callable(i)
570570 func unstakeNFT (asset) = {
571571 let address = toString(i.caller)
572572 if ((tryGetString((asset + "_owner")) != toString(i.caller)))
573573 then throw("You don't own this duck!!")
574574 else {
575575 let result = claimStakingResult(address, asset, false, address, toString(i.originCaller))
576576 if ((result == result))
577577 then {
578578 let validPayment = checkAdditionalPayment(i.payments[0])
579579 if ((validPayment == validPayment))
580580 then {
581581 let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
582582 let withoutPerch = tryGetBoolean((asset + "_without_perch"))
583583 let perches = if (withoutPerch)
584584 then nil
585585 else {
586586 let usePerchOrigin = tryGetBoolean((asset + "_use_origin"))
587587 let perchOwner = if (usePerchOrigin)
588588 then toString(i.originCaller)
589589 else address
590590 [IntegerEntry(((("address_" + perchOwner) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + perchOwner) + "_perchesAvailable_") + color)) + 1))]
591591 }
592592 if ((perches == perches))
593593 then {
594594 let assetFP = tryGetInteger(assetFarmingPower(address, asset))
595595 if ((assetFP == assetFP))
596596 then $Tuple2(((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) - assetFP)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) - assetFP)), DeleteEntry((asset + "_owner")), DeleteEntry(assetFarmingPower(address, asset)), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_perchColor")), DeleteEntry((asset + "_original_caller")), DeleteEntry((asset + "_use_origin")), DeleteEntry((asset + "_without_perch")), ScriptTransfer(Address(fromBase58String(address)), 1, fromBase58String(asset))] ++ validPayment) ++ perches) ++ result._1), result._2)
597597 else throw("Strict value is not equal to itself.")
598598 }
599599 else throw("Strict value is not equal to itself.")
600600 }
601601 else throw("Strict value is not equal to itself.")
602602 }
603603 else throw("Strict value is not equal to itself.")
604604 }
605605 }
606606
607607
608608
609609 @Callable(i)
610610 func topUpReward () = {
611611 let firstPayment = value(i.payments[0])
612612 if ((firstPayment.assetId != getEggAssetId()))
613613 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
614614 else {
615615 let resHandleStaking = handleStakingTopUp(firstPayment.amount)
616616 $Tuple2(resHandleStaking, true)
617617 }
618618 }
619619
620620
621621
622622 @Callable(i)
623623 func claimReward (assetId) = {
624624 let validPayment = if ((i.originCaller == getCfMasterAddress()))
625625 then nil
626626 else checkAdditionalPayment(i.payments[0])
627627 if ((validPayment == validPayment))
628628 then if (if ((tryGetString((assetId + "_owner")) != toString(i.caller)))
629629 then (tryGetString((assetId + "_original_caller")) != toString(i.caller))
630630 else false)
631631 then throw((("You don't own this duck (" + assetId) + ")!! "))
632632 else if ((size(i.payments) > 1))
633633 then throw("Please don't add extra payments")
634634 else {
635635 let toReceive = if ((i.originCaller != getCfMasterAddress()))
636636 then toString(i.caller)
637637 else tryGetString((assetId + "_original_caller"))
638638 let owner = if ((i.originCaller != getCfMasterAddress()))
639639 then toString(i.caller)
640640 else tryGetString((assetId + "_owner"))
641641 let origin = if ((i.originCaller != getCfMasterAddress()))
642642 then toString(i.originCaller)
643643 else tryGetString((assetId + "_original_caller"))
644644 let result = claimStakingResult(owner, assetId, true, toReceive, origin)
645645 $Tuple2((validPayment ++ result._1), result._2)
646646 }
647647 else throw("Strict value is not equal to itself.")
648648 }
649649
650650
651651
652652 @Callable(i)
653653 func redeemItem (type,nftAssetId) = {
654654 let wavesPayment = i.payments[0]
655655 if ((wavesPayment == wavesPayment))
656656 then {
657657 let potionPayment = value(i.payments[1])
658658 if ((potionPayment == potionPayment))
659659 then if ((potionPayment.amount != 1))
660660 then throw("You need to attach exactly 1 potion")
661661 else {
662662 let artefact = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(value(value(potionPayment).assetId))], nil))
663663 if ((artefact == artefact))
664664 then if ((artefact != "ART-POTION"))
665665 then throw("You need to attach a ART-POTION artefact")
666666 else if ((wavesPayment.assetId != unit))
667667 then throw("You need to attach waves")
668668 else if ((wavesPayment.amount != getPotionFee()))
669669 then throw((("You need to attach exactly " + toString(getPotionFee())) + " waves"))
670670 else {
671671 let sendToAggreGator = (wavesPayment.amount / 2)
672672 let topup = (wavesPayment.amount - sendToAggreGator)
673673 let basePower = tryGetInteger((nftAssetId + "_basePower"))
674674 if ((basePower == 0))
675675 then throw("This is not a valid duck or the duck waves never staked!")
676676 else if ((tryGetString((nftAssetId + "_owner")) != ""))
677677 then throw("Please usntake your duck first!!")
678678 else {
679679 let addMore = invoke(getCanineStakingAddress(), "addWavesAndStakeMore", nil, [AttachedPayment(unit, topup)])
680680 if ((addMore == addMore))
681681 then [ScriptTransfer(getFeeAggregator(), sendToAggreGator, unit), DeleteEntry((nftAssetId + "_basePower"))]
682682 else throw("Strict value is not equal to itself.")
683683 }
684684 }
685685 else throw("Strict value is not equal to itself.")
686686 }
687687 else throw("Strict value is not equal to itself.")
688688 }
689689 else throw("Strict value is not equal to itself.")
690690 }
691691
692692
693693 @Verifier(tx)
694694 func verify () = if (isTestEnv())
695695 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
696696 else {
697697 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
698698 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
699699 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
700700 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
701701 then 1
702702 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
703703 then 1
704704 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
705705 then 1
706706 else 0
707707 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
708708 then 1
709709 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
710710 then 1
711711 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
712712 then 1
713713 else 0
714714 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
715715 then 1
716716 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
717717 then 1
718718 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
719719 then 1
720720 else 0
721721 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
722722 match tx {
723723 case _ =>
724724 (signaturesCount >= 2)
725725 }
726726 }
727727

github/deemru/w8io/169f3d6 
58.33 ms