tx · 5MEhA5YgjZuoVAevLAmArFDrywbTn71YfuYeVbBmx1fM

3P9aopM5MRxr6g3B7orbz31dJmTsNZVpKMp:  -0.21000000 Waves

2024.04.16 21:38 [4131666] smart account 3P9aopM5MRxr6g3B7orbz31dJmTsNZVpKMp > SELF 0.00000000 Waves

{ "type": 13, "id": "5MEhA5YgjZuoVAevLAmArFDrywbTn71YfuYeVbBmx1fM", "fee": 21000000, "feeAssetId": null, "timestamp": 1713292714174, "version": 2, "chainId": 87, "sender": "3P9aopM5MRxr6g3B7orbz31dJmTsNZVpKMp", "senderPublicKey": "GAt6SYASzC3XnhiQMiHk8MKvTTe6y2MsYfVKzD3eKTtV", "proofs": [ "4MPmxeobwuD7d2cPmQEvTR4Sa9sDfaDL38qzcbhZ4MrQ7BWTa9xS16J3f3rM7APZZbR9LF83XjhTZKYhycu44npi" ], "script": "base64:AAIFAAAAAAAAACwIAhIDCgEIEgMKAQgSBAoCCAgSBQoDCAgBEgUKAwgEBBIDCgEIEgASAwoBCAAAADcAAAAABVNjYWxlAAAAAAAF9eEAAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwAAAAACAAAAGXN0YXRpY19yZWZDb250cmFjdEFkZHJlc3MAAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAIAAAAZZ2xvYmFsX2xhc3RDaGVja19pbnRlcmVzdAEAAAAXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAAAAAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAAUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAAAAAgAAABFzdGF0aWNfZWdnQXNzZXRJZAEAAAAac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAAYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAAAAAIAAAAVc3RhdGljX2JyZWVkZXJBZGRyZXNzAQAAABtzdGF0aWNLZXlfYWNjQm9vc3RlckFkZHJlc3MAAAAAAgAAABhzdGF0aWNfYWNjQm9vc3RlckFkZHJlc3MBAAAAGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwAAAAACAAAAFXN0YXRpY19jb3Vwb25zQWRkcmVzcwEAAAAVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAAAAAIAAAASc3RhdGljX2J1cm5BZGRyZXNzAQAAABJzdGF0aWNLZXlfZXh0cmFGZWUAAAAAAgAAAA9zdGF0aWNfZXh0cmFGZWUBAAAAF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAAAAAIAAAAUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IAAAAAD2tleUdsb2JhbEVhcm5lZAIAAAAPZ2xvYmFsX2Vhcm5pbmdzAQAAABJzdGF0aWNLZXlfcGVyY2hGZWUAAAAAAgAAAA9zdGF0aWNfcGVyY2hGZWUBAAAAGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwAAAAACAAAAFXN0YXRpY19yZWJpcnRoQWRkcmVzcwEAAAAec3RhdGljS2V5X3R1cnRsZVJlYmlydGhBZGRyZXNzAAAAAAIAAAAbc3RhdGljX3R1cnRsZVJlYmlydGhBZGRyZXNzAQAAABZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAAAAAIAAAATc3RhdGljX2l0ZW1zQWRkcmVzcwEAAAAOdG90YWxTdGFrZWRLZXkAAAAAAgAAAAx0b3RhbF9zdGFrZWQBAAAAH3N0YXRpY0tleV9wcm94eVN0YWtpbmdDb250cmFjdHMAAAAAAgAAABxzdGF0aWNfcHJveHlTdGFraW5nQ29udHJhY3RzAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAABdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAAAAABAAAAEWdldFJlYmlydGhBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAYc3RhdGljS2V5X3JlYmlydGhBZGRyZXNzAAAAAAEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABRzdGF0aWNLZXlfZWdnQXNzZXRJZAAAAAABAAAAE2dldEluY3ViYXRvckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABpzdGF0aWNLZXlfaW5jdWJhdG9yQWRkcmVzcwAAAAABAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAAAAAEAAAAUZ2V0QWNjQm9vc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABtzdGF0aWNLZXlfYWNjQm9vc3RlckFkZHJlc3MAAAAAAQAAABFnZXRDb3Vwb25zQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwAAAAABAAAADmdldEJ1cm5BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAAAAAEAAAAQZ2V0RmVlQWdncmVnYXRvcgAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAAAAAEAAAAVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwAAAAABAAAAF2dldFR1cnRsZVJlYmlydGhBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAec3RhdGljS2V5X3R1cnRsZVJlYmlydGhBZGRyZXNzAAAAAAEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwAAAAABAAAAD2dldFByb3h5U3Rha2luZwAAAAAJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAfc3RhdGljS2V5X3Byb3h5U3Rha2luZ0NvbnRyYWN0cwAAAAABAAAAFGtleUxhc3RDaGVja0ludGVyZXN0AAAAAgAAAAdhZGRyZXNzAAAABWFzc2V0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAASX2xhc3RDaGVja0ludGVyZXN0AQAAABFhc3NldEZhcm1pbmdQb3dlcgAAAAIAAAAHYWRkcmVzcwAAAAVhc3NldAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAADV9mYXJtaW5nUG93ZXIBAAAAEHJld2FyZENsYWltZWRLZXkAAAACAAAAB2FkZHJlc3MAAAAFYXNzZXQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAAhfY2xhaW1lZAEAAAASdG90YWxTdGFrZWRVc2VyS2V5AAAAAQAAAAdhZGRyZXNzCQABLAAAAAICAAAADXRvdGFsX3N0YWtlZF8FAAAAB2FkZHJlc3MAAAAADVJlZmVyZXJSZXdhcmQAAAAAAAAAAAUBAAAAFmNoZWNrQWRkaXRpb25hbFBheW1lbnQAAAABAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAABlGQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAAAAAlmZWVBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAASc3RhdGljS2V5X2V4dHJhRmVlAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAJZmVlQW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABxGQ0FQOiBQbGVhc2UgYXR0YWNoIGV4YWN0bHkgCQABpAAAAAEFAAAACWZlZUFtb3VudAIAAAATIGFtb3VudCBvZiB3YXZlbGV0cwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAQZ2V0RmVlQWdncmVnYXRvcgAAAAAFAAAACWZlZUFtb3VudAUAAAAEdW5pdAUAAAADbmlsAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAeRkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQAAAAphc0ludFR1cGxlAAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACihJbnQsIEludCkEAAAAA2ludAUAAAAHJG1hdGNoMAUAAAADaW50CQAAAgAAAAECAAAAJEZBSTogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IChJbnQsSW50KQEAAAASaGFuZGxlU3Rha2luZ1RvcFVwAAAAAQAAAAZhbW91bnQEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABVrZXlHbG9iYWxMYXN0SW50ZXJlc3QEAAAAEXRvdGFsU3Rha2VkQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAA50b3RhbFN0YWtlZEtleQAAAAAEAAAADWludGVyZXN0RGVsdGEDCQAAZgAAAAIFAAAAEXRvdGFsU3Rha2VkQW1vdW50AAAAAAAAAAAACQAAawAAAAMFAAAABmFtb3VudAUAAAAFU2NhbGUFAAAAEXRvdGFsU3Rha2VkQW1vdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rZXlHbG9iYWxFYXJuZWQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAA9rZXlHbG9iYWxFYXJuZWQFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAVa2V5R2xvYmFsTGFzdEludGVyZXN0CQAAZAAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAANaW50ZXJlc3REZWx0YQUAAAADbmlsAQAAAAhhc1N0cmluZwAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAUAAAAGc3RyaW5nCQAAAgAAAAECAAAAIUZBUzogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEAAAANdHJ5R2V0Qm9vbGVhbgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAAFXRyeUdldEJvb2xlYW5FeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiBwEAAAAOZ2V0QXNzZXRPcmlnaW4AAAABAAAACmdlbmVyYXRpb24DCQAAAAAAAAIFAAAACmdlbmVyYXRpb24CAAAAAUcJAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAEAAAAOZ2V0QXNzZXRSYXJpdHkAAAACAAAACGdlbm90eXBlAAAACmdlbmVyYXRpb24EAAAACHF1YW50aXR5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgkBAAAADmdldEFzc2V0T3JpZ2luAAAAAQUAAAAKZ2VuZXJhdGlvbgkAASwAAAACCQABLAAAAAICAAAABnN0YXRzXwUAAAAIZ2Vub3R5cGUCAAAACV9xdWFudGl0eQkAASwAAAACCQABLAAAAAICAAAABnN0YXRzXwUAAAAIZ2Vub3R5cGUCAAAAE19xdWFudGl0eSBub3QgZm91bmQEAAAABXBvd2VyCQAAbAAAAAYJAABpAAAAAgAAAAAAAAAnEAUAAAAIcXVhbnRpdHkAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAEAAAAAAAAAAAIFAAAABUZMT09SAwkAAGYAAAACBQAAAAVwb3dlcgAAAAAAAAAAAAUAAAAFcG93ZXIAAAAAAAAAAAIBAAAAFmdldEFzc2V0UmFyaXR5Q29tcGxldGUAAAACAAAACWlzSmFja3BvdAAAAAlhc3NldE5hbWUEAAAABnJhcml0eQMFAAAACWlzSmFja3BvdAAAAAAAAAAAZAQAAAAKZ2VuZXJhdGlvbgkAAS8AAAACCQEAAAAJdGFrZVJpZ2h0AAAAAgUAAAAJYXNzZXROYW1lAAAAAAAAAAACAAAAAAAAAAABBAAAAAdmYXJtR2VuCQEAAAAIYXNTdHJpbmcAAAABCQAD/AAAAAQJAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAACAAAADmdldEdlbkZyb21OYW1lCQAETAAAAAIFAAAACWFzc2V0TmFtZQUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAB2Zhcm1HZW4FAAAAB2Zhcm1HZW4JAQAAAA5nZXRBc3NldFJhcml0eQAAAAIFAAAAB2Zhcm1HZW4FAAAACmdlbmVyYXRpb24JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQAAAAZyYXJpdHkBAAAAEnVwZGF0ZUZhcm1pbmdQb3dlcgAAAAIAAAAHYWRkcmVzcwAAAAVhc3NldAQAAAALdG90YWxTdGFrZWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAADnRvdGFsU3Rha2VkS2V5AAAAAAQAAAAPdG90YWxTdGFrZWRVc2VyCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABJ0b3RhbFN0YWtlZFVzZXJLZXkAAAABBQAAAAdhZGRyZXNzBAAAAAljdXJyZW50RlAJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEWFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAABW5ld0ZQCQEAAAAKYXNJbnRUdXBsZQAAAAEJAAP8AAAABAUAAAAEdGhpcwIAAAASY2FsY3VsYXRlRmFybVBvd2VyCQAETAAAAAIFAAAABWFzc2V0BQAAAANuaWwFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvdGFsU3Rha2VkS2V5AAAAAAkAAGQAAAACCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAADnRvdGFsU3Rha2VkS2V5AAAAAAUAAAAJY3VycmVudEZQCAUAAAAFbmV3RlAAAAACXzEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJ0b3RhbFN0YWtlZFVzZXJLZXkAAAABBQAAAAdhZGRyZXNzCQAAZAAAAAIJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAASdG90YWxTdGFrZWRVc2VyS2V5AAAAAQUAAAAHYWRkcmVzcwUAAAAJY3VycmVudEZQCAUAAAAFbmV3RlAAAAACXzEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFhc3NldEZhcm1pbmdQb3dlcgAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0CAUAAAAFbmV3RlAAAAACXzEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD0RFQlVHX2N1cnJlbnRGUAUAAAAJY3VycmVudEZQCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAtERUJVR19uZXdGUAgFAAAABW5ld0ZQAAAAAl8xBQAAAANuaWwBAAAAEmNsYWltU3Rha2luZ1Jlc3VsdAAAAAIAAAAHYWRkcmVzcwAAAAVhc3NldAQAAAAPY3VycmVudEludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAQAAAARbGFzdENoZWNrSW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAFGtleUxhc3RDaGVja0ludGVyZXN0AAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAADHN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAQAAAAIZnBVcGRhdGUJAQAAABJ1cGRhdGVGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAQAAAAGcmV3YXJkAwkAAGYAAAACBQAAABFsYXN0Q2hlY2tJbnRlcmVzdAAAAAAAAAAAAAkAAGsAAAADCQAAZQAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAARbGFzdENoZWNrSW50ZXJlc3QFAAAADHN0YWtlZEFtb3VudAUAAAAFU2NhbGUAAAAAAAAAAAAJAAUUAAAAAgkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAdhZGRyZXNzBQAAAAZyZXdhcmQJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFGtleUxhc3RDaGVja0ludGVyZXN0AAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQFAAAAD2N1cnJlbnRJbnRlcmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEHJld2FyZENsYWltZWRLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQFAAAABnJld2FyZAUAAAADbmlsBQAAAAhmcFVwZGF0ZQUAAAAGcmV3YXJkAQAAAAlhc0Jvb2xlYW4AAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAAHYm9vbGVhbgUAAAAHJG1hdGNoMAUAAAAHYm9vbGVhbgkAAAIAAAABAgAAACJGQUI6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBCb29sZWFuAQAAABNjYWxjdWxhdGVQZXJjaFByaWNlAAAAAQAAAAdhZGRyZXNzBAAAABFoYXNBcnRlZmFjdFN0YWtlZAkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAAFGdldEFjY0Jvb3N0ZXJBZGRyZXNzAAAAAAkAASwAAAACCQABLAAAAAICAAAAC0FSVC1YTUlTVExfBQAAAAdhZGRyZXNzAgAAAAZfb3duZXIEAAAACnBlcmNoUHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAASc3RhdGljS2V5X3BlcmNoRmVlAAAAAAMJAAAAAAAAAgUAAAARaGFzQXJ0ZWZhY3RTdGFrZWQCAAAAAAUAAAAKcGVyY2hQcmljZQkAAGgAAAACCQAAaQAAAAIFAAAACnBlcmNoUHJpY2UAAAAAAAAAAAoAAAAAAAAAAAkBAAAAEGlzUHJveHlTdGFraW5nU2MAAAABAAAAB2FkZHJlc3MEAAAAEGFsbG93ZWRDb250cmFjdHMJAQAAAA9nZXRQcm94eVN0YWtpbmcAAAAABAAAABRhbGxvd2VkQ29udHJhY3RzTGlzdAkABLUAAAACBQAAABBhbGxvd2VkQ29udHJhY3RzAgAAAAE7CQEAAAACIT0AAAACCQAETwAAAAIFAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0BQAAAAdhZGRyZXNzBQAAAAR1bml0AAAACAAAAAFpAQAAABJjYWxjdWxhdGVGYXJtUG93ZXIAAAABAAAAB2Fzc2V0SWQDCQEAAAABIQAAAAEDCQAAAAAAAAIICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAAHYXNzZXRJZAAAAAZpc3N1ZXIJAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAAGCQAAAAAAAAIICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAAHYXNzZXRJZAAAAAZpc3N1ZXIJAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkAAAIAAAABAgAAACVUaGlzIGRvZXMgbm90IHNlZW0gbGlrZSBhIHZhbGlkIER1Y2shBAAAAAlhc3NldE5hbWUICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAAHYXNzZXRJZAAAAARuYW1lBAAAAANnZW4JAQAAAAl0YWtlUmlnaHQAAAACBQAAAAlhc3NldE5hbWUAAAAAAAAAAAEEAAAACWlzSmFja3BvdAkAAAAAAAACCQEAAAAJdGFrZVJpZ2h0AAAAAgUAAAAJYXNzZXROYW1lAAAAAAAAAAABAgAAAAFVBAAAAAZyYXJpdHkJAQAAABZnZXRBc3NldFJhcml0eUNvbXBsZXRlAAAAAgUAAAAJaXNKYWNrcG90BQAAAAlhc3NldE5hbWUEAAAACGdlbm90eXBlCQAEtQAAAAIJAQAAAAlkcm9wUmlnaHQAAAACCQABMAAAAAIFAAAACWFzc2V0TmFtZQAAAAAAAAAABQAAAAAAAAAAAwIAAAAACgEAAAARdW5pcXVlQXJyYXlGaWx0ZXIAAAACAAAABWFjY3VtAAAAB25leHRHZW4DCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAVhY2N1bQUAAAAHbmV4dEdlbgkABE0AAAACBQAAAAVhY2N1bQUAAAAHbmV4dEdlbgUAAAAFYWNjdW0EAAAACnVuaXF1ZUxpc3QKAAAAAAIkbAUAAAAIZ2Vub3R5cGUKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAABF1bmlxdWVBcnJheUZpbHRlcgAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABNMaXN0IHNpemUgZXhjZWVkcyA4CQEAAAAFJGYwXzIAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAQAAAAKdG90YWxHZW5lcwMJAAAAAAAAAgUAAAADZ2VuAgAAAAFVAAAAAAAAAAAICQABkAAAAAEFAAAACnVuaXF1ZUxpc3QEAAAABXBvd2VyCQAAbAAAAAYAAAAAAAAAAA8AAAAAAAAAAAEFAAAACnRvdGFsR2VuZXMAAAAAAAAAAAAAAAAAAAAAAAIFAAAABERPV04EAAAACm11bHRpcGxpZXIJAABpAAAAAgkAAGgAAAACCQAAZQAAAAIFAAAABmhlaWdodAAAAAAAADk4cAAAAAAAAAAAZAkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAPAAAAAAAAAAAGAAAAAAAAAAAHgAAAAAAAAAAAwQAAAAJYmFzZVBvd2VyCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAHYXNzZXRJZAIAAAAKX2Jhc2VQb3dlcgQAAAAKZmluYWxQb3dlcgMJAABmAAAAAgUAAAAJYmFzZVBvd2VyAAAAAAAAAAAABQAAAAliYXNlUG93ZXIJAABpAAAAAgkAAGgAAAACBQAAAAVwb3dlcgUAAAAKbXVsdGlwbGllcgAAAAAAAAAAZAQAAAAQZmluYWxQb3dlclJhcml0eQkAAGkAAAACCQAAaAAAAAIFAAAACmZpbmFsUG93ZXIFAAAABnJhcml0eQAAAAAAAAAAZAQAAAAJZmFybUJvb3N0CQEAAAAFYXNJbnQAAAABCQAD/AAAAAQJAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAAAgAAABpjYWxjdWxhdGVGYXJtaW5nUG93ZXJCb29zdAkABEwAAAACBQAAAAdhc3NldElkCQAETAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAJZmFybUJvb3N0BQAAAAlmYXJtQm9vc3QEAAAAFWZpbmFsUG93ZXJSYXJpdHlCb29zdAkAAGQAAAACBQAAABBmaW5hbFBvd2VyUmFyaXR5CQAAaQAAAAIJAABoAAAAAgUAAAAQZmluYWxQb3dlclJhcml0eQUAAAAJZmFybUJvb3N0AAAAAAAAAABkCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAGREVCVUdfBQAAAAlhc3NldE5hbWUFAAAACmZpbmFsUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMREVCVUdfUkFSSVRZBQAAAAlhc3NldE5hbWUFAAAABnJhcml0eQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA9ERUJVR19GUFJBUklUWV8FAAAACWFzc2V0TmFtZQUAAAAQZmluYWxQb3dlclJhcml0eQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABBERUJVR19CQVNFUE9XRVJfBQAAAAlhc3NldE5hbWUFAAAACWJhc2VQb3dlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABJERUJVR19DT0VGRklDSUVOVF8FAAAACWFzc2V0TmFtZQUAAAAKbXVsdGlwbGllcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAAxERUJVR19CT09TVF8FAAAACWFzc2V0TmFtZQUAAAAJZmFybUJvb3N0BQAAAANuaWwJAAUUAAAAAgUAAAAVZmluYWxQb3dlclJhcml0eUJvb3N0BQAAAApmaW5hbFBvd2VyCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA9jb25maWd1cmVPcmFjbGUAAAAB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", "height": 4131666, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5QyKEweiWDpXNK8JEeE3NqLpdRnYeZWUA6BmwkV6cu8Z Next: 2WwTniCE7oDZJNYrDKAX43C6N44wZV9znm4LqQjKUmop Diff:
OldNewDifferences
422422 else {
423423 let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId)], nil))
424424 if ((farmingPower == farmingPower))
425- 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)
425+ then {
426+ let result = claimStakingResult(address, toBase58String(assetId))
427+ ((([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)
428+ }
426429 else throw("Strict value is not equal to itself.")
427430 }
428431 else throw("Strict value is not equal to itself.")
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 staticKey_refContractAddress () = "static_refContractAddress"
1818
1919
2020 let keyGlobalLastInterest = "global_lastCheck_interest"
2121
2222 func staticKey_oracleAddress () = "static_oracleAddress"
2323
2424
2525 func staticKey_eggAssetId () = "static_eggAssetId"
2626
2727
2828 func staticKey_incubatorAddress () = "static_incubatorAddress"
2929
3030
3131 func staticKey_breederAddress () = "static_breederAddress"
3232
3333
3434 func staticKey_accBoosterAddress () = "static_accBoosterAddress"
3535
3636
3737 func staticKey_couponsAddress () = "static_couponsAddress"
3838
3939
4040 func staticKey_burnAddress () = "static_burnAddress"
4141
4242
4343 func staticKey_extraFee () = "static_extraFee"
4444
4545
4646 func staticKey_feeAggregator () = "static_feeAggregator"
4747
4848
4949 let keyGlobalEarned = "global_earnings"
5050
5151 func staticKey_perchFee () = "static_perchFee"
5252
5353
5454 func staticKey_rebirthAddress () = "static_rebirthAddress"
5555
5656
5757 func staticKey_turtleRebirthAddress () = "static_turtleRebirthAddress"
5858
5959
6060 func staticKey_itemsAddress () = "static_itemsAddress"
6161
6262
6363 func totalStakedKey () = "total_staked"
6464
6565
6666 func staticKey_proxyStakingContracts () = "static_proxyStakingContracts"
6767
6868
6969 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
7070
7171
7272 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rebirthAddress())))
7373
7474
7575 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
7676
7777
7878 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
7979
8080
8181 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
8282
8383
8484 func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_accBoosterAddress())))
8585
8686
8787 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
8888
8989
9090 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
9191
9292
9393 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
9494
9595
9696 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
9797
9898
9999 func getTurtleRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleRebirthAddress())))
100100
101101
102102 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
103103
104104
105105 func getProxyStaking () = tryGetStringExternal(getOracle(), staticKey_proxyStakingContracts())
106106
107107
108108 func keyLastCheckInterest (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest")
109109
110110
111111 func assetFarmingPower (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_farmingPower")
112112
113113
114114 func rewardClaimedKey (address,asset) = (((address + "_asset_") + asset) + "_claimed")
115115
116116
117117 func totalStakedUserKey (address) = ("total_staked_" + address)
118118
119119
120120 let RefererReward = 5
121121
122122 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
123123 then throw("FCAP: Please attach waves")
124124 else {
125125 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
126126 if ((payment.amount != feeAmount))
127127 then throw((("FCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
128128 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
129129 }
130130
131131
132132 func tryGetInteger (key) = match getInteger(this, key) {
133133 case b: Int =>
134134 b
135135 case _ =>
136136 0
137137 }
138138
139139
140140 func asInt (value) = match value {
141141 case int: Int =>
142142 int
143143 case _ =>
144144 throw("FAI: wrong type, expected: Int")
145145 }
146146
147147
148148 func asIntTuple (value) = match value {
149149 case int: (Int, Int) =>
150150 int
151151 case _ =>
152152 throw("FAI: wrong type, expected: (Int,Int)")
153153 }
154154
155155
156156 func handleStakingTopUp (amount) = {
157157 let currentInterest = tryGetInteger(keyGlobalLastInterest)
158158 let totalStakedAmount = tryGetInteger(totalStakedKey())
159159 let interestDelta = if ((totalStakedAmount > 0))
160160 then fraction(amount, Scale, totalStakedAmount)
161161 else 0
162162 [IntegerEntry(keyGlobalEarned, (tryGetInteger(keyGlobalEarned) + amount)), IntegerEntry(keyGlobalLastInterest, (currentInterest + interestDelta))]
163163 }
164164
165165
166166 func asString (value) = match value {
167167 case string: String =>
168168 string
169169 case _ =>
170170 throw("FAS: wrong type, expected: String")
171171 }
172172
173173
174174 func tryGetBoolean (key) = match getBoolean(this, key) {
175175 case b: Boolean =>
176176 b
177177 case _ =>
178178 false
179179 }
180180
181181
182182 func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
183183 case b: Boolean =>
184184 b
185185 case _ =>
186186 false
187187 }
188188
189189
190190 func getAssetOrigin (generation) = if ((generation == "G"))
191191 then getIncubatorAddress()
192192 else getBreederAddress()
193193
194194
195195 func getAssetRarity (genotype,generation) = {
196196 let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found"))
197197 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
198198 if ((power > 0))
199199 then power
200200 else 2
201201 }
202202
203203
204204 func getAssetRarityComplete (isJackpot,assetName) = {
205205 let rarity = if (isJackpot)
206206 then 100
207207 else {
208208 let generation = take(takeRight(assetName, 2), 1)
209209 let farmGen = asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
210210 if ((farmGen == farmGen))
211211 then getAssetRarity(farmGen, generation)
212212 else throw("Strict value is not equal to itself.")
213213 }
214214 rarity
215215 }
216216
217217
218218 func updateFarmingPower (address,asset) = {
219219 let totalStaked = tryGetInteger(totalStakedKey())
220220 let totalStakedUser = tryGetInteger(totalStakedUserKey(address))
221221 let currentFP = tryGetInteger(assetFarmingPower(address, asset))
222222 let newFP = asIntTuple(invoke(this, "calculateFarmPower", [asset], nil))
223223 [IntegerEntry(totalStakedKey(), ((tryGetInteger(totalStakedKey()) - currentFP) + newFP._1)), IntegerEntry(totalStakedUserKey(address), ((tryGetInteger(totalStakedUserKey(address)) - currentFP) + newFP._1)), IntegerEntry(assetFarmingPower(address, asset), newFP._1), IntegerEntry("DEBUG_currentFP", currentFP), IntegerEntry("DEBUG_newFP", newFP._1)]
224224 }
225225
226226
227227 func claimStakingResult (address,asset) = {
228228 let currentInterest = tryGetInteger(keyGlobalLastInterest)
229229 let lastCheckInterest = tryGetInteger(keyLastCheckInterest(address, asset))
230230 let stakedAmount = tryGetInteger(assetFarmingPower(address, asset))
231231 let fpUpdate = updateFarmingPower(address, asset)
232232 let reward = if ((lastCheckInterest > 0))
233233 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
234234 else 0
235235 $Tuple2(([ScriptTransfer(Address(fromBase58String(address)), reward, getEggAssetId()), IntegerEntry(keyLastCheckInterest(address, asset), currentInterest), IntegerEntry(rewardClaimedKey(address, asset), (tryGetInteger(rewardClaimedKey(address, asset)) + reward))] ++ fpUpdate), reward)
236236 }
237237
238238
239239 func asBoolean (value) = match value {
240240 case boolean: Boolean =>
241241 boolean
242242 case _ =>
243243 throw("FAB: wrong type, expected: Boolean")
244244 }
245245
246246
247247 func calculatePerchPrice (address) = {
248248 let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner"))
249249 let perchPrice = getIntegerValue(getOracle(), staticKey_perchFee())
250250 if ((hasArtefactStaked == ""))
251251 then perchPrice
252252 else ((perchPrice / 10) * 9)
253253 }
254254
255255
256256 func isProxyStakingSc (address) = {
257257 let allowedContracts = getProxyStaking()
258258 let allowedContractsList = split(allowedContracts, ";")
259259 (indexOf(allowedContractsList, address) != unit)
260260 }
261261
262262
263263 @Callable(i)
264264 func calculateFarmPower (assetId) = if (!(if ((value(assetInfo(fromBase58String(assetId))).issuer == getBreederAddress()))
265265 then true
266266 else (value(assetInfo(fromBase58String(assetId))).issuer == getIncubatorAddress())))
267267 then throw("This does not seem like a valid Duck!")
268268 else {
269269 let assetName = value(assetInfo(fromBase58String(assetId))).name
270270 let gen = takeRight(assetName, 1)
271271 let isJackpot = (takeRight(assetName, 1) == "U")
272272 let rarity = getAssetRarityComplete(isJackpot, assetName)
273273 let genotype = split(dropRight(drop(assetName, 5), 3), "")
274274 func uniqueArrayFilter (accum,nextGen) = if (!(containsElement(accum, nextGen)))
275275 then (accum :+ nextGen)
276276 else accum
277277
278278 let uniqueList = {
279279 let $l = genotype
280280 let $s = size($l)
281281 let $acc0 = nil
282282 func $f0_1 ($a,$i) = if (($i >= $s))
283283 then $a
284284 else uniqueArrayFilter($a, $l[$i])
285285
286286 func $f0_2 ($a,$i) = if (($i >= $s))
287287 then $a
288288 else throw("List size exceeds 8")
289289
290290 $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)
291291 }
292292 let totalGenes = if ((gen == "U"))
293293 then 8
294294 else size(uniqueList)
295295 let power = pow(15, 1, totalGenes, 0, 2, DOWN)
296296 let multiplier = (((height - 3750000) * 100) / (((60 * 24) * 30) * 3))
297297 let basePower = tryGetInteger((assetId + "_basePower"))
298298 let finalPower = if ((basePower > 0))
299299 then basePower
300300 else ((power * multiplier) / 100)
301301 let finalPowerRarity = ((finalPower * rarity) / 100)
302302 let farmBoost = asInt(invoke(getItemsAddress(), "calculateFarmingPowerBoost", [assetId, toString(i.originCaller)], nil))
303303 if ((farmBoost == farmBoost))
304304 then {
305305 let finalPowerRarityBoost = (finalPowerRarity + ((finalPowerRarity * farmBoost) / 100))
306306 $Tuple2([IntegerEntry(("DEBUG_" + assetName), finalPower), IntegerEntry(("DEBUG_RARITY" + assetName), rarity), IntegerEntry(("DEBUG_FPRARITY_" + assetName), finalPowerRarity), IntegerEntry(("DEBUG_BASEPOWER_" + assetName), basePower), IntegerEntry(("DEBUG_COEFFICIENT_" + assetName), multiplier), IntegerEntry(("DEBUG_BOOST_" + assetName), farmBoost)], $Tuple2(finalPowerRarityBoost, finalPower))
307307 }
308308 else throw("Strict value is not equal to itself.")
309309 }
310310
311311
312312
313313 @Callable(i)
314314 func configureOracle (oracle) = if ((i.caller != this))
315315 then throw("FCO: admin only")
316316 else [StringEntry(staticKey_oracleAddress(), oracle)]
317317
318318
319319
320320 @Callable(i)
321321 func buyPerch (colorI,refererAddress) = {
322322 let validPayment = checkAdditionalPayment(i.payments[0])
323323 if ((validPayment == validPayment))
324324 then {
325325 let color = if ((colorI == "U"))
326326 then "B"
327327 else colorI
328328 if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
329329 then throw("you need to set color properly")
330330 else {
331331 let exactPrice = calculatePerchPrice(toString(i.caller))
332332 let leftToPay = if ((i.originCaller == i.caller))
333333 then {
334334 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
335335 if ((amountPaidByCoupons == amountPaidByCoupons))
336336 then (exactPrice - amountPaidByCoupons)
337337 else throw("Strict value is not equal to itself.")
338338 }
339339 else exactPrice
340340 let firstPayment = if ((size(i.payments) == 2))
341341 then value(i.payments[1])
342342 else value(i.payments[0])
343343 if ((firstPayment.assetId != getEggAssetId()))
344344 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
345345 else if ((firstPayment.amount != leftToPay))
346346 then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller)))
347347 else {
348348 let refererRewardForPerch = fraction(leftToPay, 5, 100)
349349 let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
350350 if ((refCall == refCall))
351351 then {
352352 let toBurn = if (refCall)
353353 then (leftToPay - refererRewardForPerch)
354354 else leftToPay
355355 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
356356 if ((burnCall == burnCall))
357357 then {
358358 let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
359359 let perchAmount = tryGetInteger(perchAmountKey)
360360 ([IntegerEntry(perchAmountKey, (perchAmount + 1))] ++ validPayment)
361361 }
362362 else throw("Strict value is not equal to itself.")
363363 }
364364 else throw("Strict value is not equal to itself.")
365365 }
366366 }
367367 }
368368 else throw("Strict value is not equal to itself.")
369369 }
370370
371371
372372
373373 @Callable(i)
374374 func addFreePerch (address,color,amount) = if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
375375 then throw("you need to set color properly")
376376 else if (if (if ((i.caller != getRebirthAddress()))
377377 then (i.caller != getTurtleRebirthAddress())
378378 else false)
379379 then (i.caller != this)
380380 else false)
381381 then throw("rebirth and admin only")
382382 else {
383383 let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color)
384384 let perchAmount = tryGetInteger(perchAmountKey)
385385 $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + amount))], "")
386386 }
387387
388388
389389
390390 @Callable(i)
391391 func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (if (stakeWithoutPerch)
392392 then !(isProxyStakingSc(toString(i.caller)))
393393 else false)
394394 then throw("You can't stake without a perch")
395395 else {
396396 let validPayment = checkAdditionalPayment(i.payments[0])
397397 if ((validPayment == validPayment))
398398 then {
399399 let pmt = value(i.payments[1])
400400 let assetId = value(pmt.assetId)
401401 let assetName = value(value(assetInfo(assetId)).name)
402402 let isJackpot = (takeRight(assetName, 1) == "U")
403403 let address = toString(i.caller)
404404 let perchAddress = if (usePerchOrigin)
405405 then toString(i.originCaller)
406406 else address
407407 let rarity = getAssetRarityComplete(isJackpot, assetName)
408408 let perches = if (stakeWithoutPerch)
409409 then nil
410410 else {
411411 let color = if (isJackpot)
412412 then jColor
413413 else takeRight(assetName, 1)
414414 let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
415415 if ((0 >= availablePerches))
416416 then throw(("no perches available for the color " + color))
417417 else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((("address_" + toBase58String(assetId)) + "_perchColor"), color)]
418418 }
419419 if ((perches == perches))
420420 then if ((pmt.amount != 1))
421421 then throw("NFT is not attached")
422422 else {
423423 let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId)], nil))
424424 if ((farmingPower == farmingPower))
425- 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)
425+ then {
426+ let result = claimStakingResult(address, toBase58String(assetId))
427+ ((([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)
428+ }
426429 else throw("Strict value is not equal to itself.")
427430 }
428431 else throw("Strict value is not equal to itself.")
429432 }
430433 else throw("Strict value is not equal to itself.")
431434 }
432435
433436
434437
435438 @Callable(i)
436439 func unstakeNFT (asset) = {
437440 let address = toString(i.caller)
438441 let validPayment = checkAdditionalPayment(i.payments[0])
439442 if ((validPayment == validPayment))
440443 then {
441444 let assetFP = tryGetInteger(assetFarmingPower(address, asset))
442445 let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
443446 let withoutPerch = tryGetBoolean((asset + "_without_perch"))
444447 let perches = if (withoutPerch)
445448 then nil
446449 else {
447450 let usePerchOrigin = tryGetBoolean((asset + "_use_origin"))
448451 let perchOwner = if (usePerchOrigin)
449452 then toString(i.originCaller)
450453 else address
451454 [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
452455 }
453456 if ((perches == perches))
454457 then {
455458 let result = claimStakingResult(address, asset)
456459 $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"))] ++ validPayment) ++ perches) ++ result._1), result._2)
457460 }
458461 else throw("Strict value is not equal to itself.")
459462 }
460463 else throw("Strict value is not equal to itself.")
461464 }
462465
463466
464467
465468 @Callable(i)
466469 func topUpReward () = {
467470 let firstPayment = value(i.payments[0])
468471 if ((firstPayment.assetId != getEggAssetId()))
469472 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
470473 else {
471474 let resHandleStaking = handleStakingTopUp(firstPayment.amount)
472475 $Tuple2(resHandleStaking, true)
473476 }
474477 }
475478
476479
477480
478481 @Callable(i)
479482 func claimReward (assetId) = {
480483 let validPayment = checkAdditionalPayment(i.payments[0])
481484 if ((validPayment == validPayment))
482485 then if ((tryGetString((assetId + "_owner")) != toString(i.caller)))
483486 then throw("You don't own this duck!!")
484487 else if ((size(i.payments) > 1))
485488 then throw("Please don't add extra payments")
486489 else {
487490 let result = claimStakingResult(toString(i.caller), assetId)
488491 $Tuple2((validPayment ++ result._1), result._2)
489492 }
490493 else throw("Strict value is not equal to itself.")
491494 }
492495
493496

github/deemru/w8io/6500d08 
55.99 ms