tx · EgK4GbdigMSNaGKwk9VwBp5kAQY1M2bui3adXP8qbZQJ

3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA:  -0.01400000 Waves

2022.06.01 13:38 [3142681] smart account 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA > SELF 0.00000000 Waves

{ "type": 13, "id": "EgK4GbdigMSNaGKwk9VwBp5kAQY1M2bui3adXP8qbZQJ", "fee": 1400000, "feeAssetId": null, "timestamp": 1654079920957, "version": 2, "chainId": 87, "sender": "3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA", "senderPublicKey": "3GtkwhnMmG1yeozW51o4dJ1x3BDToPaLBXyBWKGdAc2e", "proofs": [ "3rBM4HxyzdN6jBsJDvpjKRwVrBHChrs58zHVc8HcgcbVVQaDRovcP3dNEndX1CicewhXL9984zcq5vW7q1ipAjrN" ], "script": "base64:AAIFAAAAAAAAAC0IAhIDCgEIEgASBAoCCAgSBAoCCAgSABIAEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAAoAAAAAApwZXJjaFByaWNlCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAPQkAAAAAABXNjYWxlAAAAAAAAACcQAAAAAAZzY2FsZTIAAAAAAAAPQkABAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAlnZXRPcmFjbGUAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAARc3RhdGljX2VnZ0Fzc2V0SWQBAAAAE2dldEluY3ViYXRvckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX3JlYmlydGhBZGRyZXNzAQAAABNnZXRTd29wUHJvbW9BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfc3dvcFByb21vQWRkcmVzcwEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19icmVlZGVyQWRkcmVzcwEAAAAVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABlzdGF0aWNfcmVmQ29udHJhY3RBZGRyZXNzAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAE3N0YXRpY19pdGVtc0FkZHJlc3MBAAAAEmdldE1ldGFyYWNlQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAWc3RhdGljX21ldGFSYWNlQWRkcmVzcwEAAAAUZ2V0QWNjQm9vc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAGHN0YXRpY19hY2NCb29zdGVyQWRkcmVzcwEAAAATZ2V0VHJ1c3RlZENvbnRyYWN0cwAAAAAJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfdHJ1c3RlZENvbnRyYWN0cwEAAAAOZ2V0TWFpbnRlbmFuY2UAAAAACQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAASc3RhdGljX21haW50ZW5hbmNlAQAAABJnZXRDZk1hc3RlckFk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ACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAANbm90IHZhbGlkIE5GVAEAAAAdZ2V0TGFzdEtub3duQXNzZXRGYXJtaW5nUG93ZXIAAAACAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAdhc3NldElkAgAAAA1fZmFybWluZ1Bvd2VyAQAAAA5nZXRBc3NldHNCeUdlbgAAAAEAAAADZ2VuBAAAAAFzCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACAgAAAAdhc3NldHNfBQAAAANnZW4DCQAAAAAAAAIFAAAAAXMCAAAAAAUAAAADbmlsCQAEtQAAAAIFAAAAAXMCAAAAASwBAAAADGNhbGNJbnRlcmVzdAAAAAMAAAAQcHJldmlvdXNJbnRlcmVzdAAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0AAAAEXRvdGFsRmFybWluZ1Bvd2VyCQAAZAAAAAIFAAAAEHByZXZpb3VzSW50ZXJlc3QJAABpAAAAAgkAAGgAAAACCQAAaAAAAAIFAAAABXNjYWxlCQEAAAARZ2V0UmV3YXJkUGVyQmxvY2sAAAAACQAAZQAAAAIFAAAABmhlaWdodAUAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAUAAAARdG90YWxGYXJtaW5nUG93ZXIBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAADCQAAZgAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyAAAAAAAAAAAABAAAABBwcmV2aW91c0ludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0BAAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BAAAABF0b3RhbEZhcm1pbmdQb3dlcgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIJAQAAAAxjYWxjSW50ZXJlc3QAAAADBQAAABBwcmV2aW91c0ludGVyZXN0BQAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0BQAAABF0b3RhbEZhcm1pbmdQb3dlcgMJAQAAAAIhPQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAARdG90YWxfc3RhcnRIZWlnaHQAAAAAAAAAAAAJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJAAACAAAAAQIAAAAcZmFybWluZyBpcyBub3QgbGF1bmNoZWQsIHlldAEAAAAUY2FsY0Fzc2V0UmV3YXJkRGVsdGEAAAADAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAWbGFzdENoZWNrQXNzZXRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAdhc3NldElkAgAAABJfbGFzdENoZWNrSW50ZXJlc3QEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAABoAAAAAgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAABlAAAAAgUAAAAPY3VycmVudEludGVyZXN0BQAAABZsYXN0Q2hlY2tBc3NldEludGVyZXN0AQAAABRhZGRBc3NldElkVG9HZW5FbnRyeQAAAAIAAAAHYXNzZXRJZAAAAAhhc3NldEdlbgQAAAAMY3VycmVudFZhbHVlCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2Fzc2V0c18FAAAACGFzc2V0R2VuAgAAAAdfbG9ja2VkAwkAAAAAAAACBQAAAAxjdXJyZW50VmFsdWUCAAAAAAUAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIFAAAADGN1cnJlbnRWYWx1ZQIAAAABLAUAAAAHYXNzZXRJZAEAAAAOZ2V0U3Rha2VSZXN1bHQAAAAEAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAABFhc3NldEZhcm1pbmdQb3dlcgAAAAh1bnN0YWtlcgQAAAAFYXNzZXQJAAJYAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAASdG90YWxfZmFybWluZ1Bvd2VyCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyBQAAABFhc3NldEZhcm1pbmdQb3dlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAB10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZhc3NldF8FAAAABWFzc2V0AgAAAAZfb3duZXIFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAA1fZmFybWluZ1Bvd2VyBQAAABFhc3NldEZhcm1pbmdQb3dlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEl9sYXN0Q2hlY2tJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAACV91bnN0YWtlcgUAAAAIdW5zdGFrZXIFAAAAA25pbAEAAAAQZ2V0VW5zdGFrZVJlc3VsdAAAAAUAAAAHYWRkcmVzcwAAAAdhc3NldElkAAAAC3Jld2FyZERlbHRhAAAAD3dpdGhkcmF3bkFtb3VudAAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAFYXNzZXQJAAJYAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAASdG90YWxfZmFybWluZ1Bvd2VyCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyBQAAABFhc3NldEZhcm1pbmdQb3dlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAB10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZhc3NldF8FAAAABWFzc2V0AgAAAAZfb3duZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAA1fZmFybWluZ1Bvd2VyAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAASX2xhc3RDaGVja0ludGVyZXN0CQEAAAASZ2V0Q3VycmVudEludGVyZXN0AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUA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UGVyY2hlcwkAAAIAAAABCQABLAAAAAICAAAAI25vIHBlcmNoZXMgYXZhaWxhYmxlIGZvciB0aGUgY29sb3IgBQAAAAVjb2xvcgQAAAANJHQwMTA5NDcxMTAyMAkBAAAAFGdldEFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYXNzZXRJZAUAAAAHYWRkcmVzcwQAAAAIYXNzZXRHZW4IBQAAAA0kdDAxMDk0NzExMDIwAAAAAl8xBAAAABFhc3NldEZhcm1pbmdQb3dlcggFAAAADSR0MDEwOTQ3MTEwMjAAAAACXzIJAAROAAAAAgkBAAAADmdldFN0YWtlUmVzdWx0AAAABAUAAAAHYWRkcmVzcwUAAAAHYXNzZXRJZAUAAAARYXNzZXRGYXJtaW5nUG93ZXIFAAAACnJlYWxDYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABJfcGVyY2hlc0F2YWlsYWJsZV8FAAAABWNvbG9yCQAAZQAAAAIFAAAAEGF2YWlsYWJsZVBlcmNoZXMAAAAAAAAAAAEFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAUc3Rha2VORlRXaXRob3V0UGVyY2gAAAAABAAAAAZsb2NrZWQJAQAAAAhpc0xvY2tlZAAAAAADCQAAAAAAAAIFAAAABmxvY2tlZAUAAAAGbG9ja2VkBAAAABBhbGxvd2VkQ29udHJhY3RzCQEAAAATZ2V0VHJ1c3RlZENvbnRyYWN0cwAAAAAEAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0CQAEtQAAAAIFAAAAEGFsbG93ZWRDb250cmFjdHMCAAAAATsEAAAACmRhcHBUb0NhbGwJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAAAAAAACCQAETwAAAAIFAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0BQAAAApkYXBwVG9DYWxsBQAAAAR1bml0CQAAAgAAAAECAAAAN09ubHkgdHJ1c3RlZCBzbWFydCBjb250cmFjdHMgY2FuIHN0YWtlIHdpdGhvdXQgYSBwZXJjaCEEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAHYXNzZXRJZAkBAAAABXZhbHVlAAAAAQgJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAHYWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIDCQEAAAACIT0AAAACCAUAAAADcG10AAAABmFtb3VudAAAAAAAAAAAAQkAAAIAAAABAgAAABNORlQgaXMgbm90IGF0dGFjaGVkBAAAAA0kdDAxMTc2MDExODMzCQEAAAAUZ2V0QXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhc3NldElkBQAAAAdhZGRyZXNzBAAAAAhhc3NldEdlbggFAAAADSR0MDExNzYwMTE4MzMAAAACXzEEAAAAEWFzc2V0RmFybWluZ1Bvd2VyCAUAAAANJHQwMTE3NjAxMTgzMwAAAAJfMgQAAAAFYXNzZXQJAAJYAAAAAQUAAAAHYXNzZXRJZAQAAAAKcmVhbENhbGxlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAROAAAAAgkBAAAADmdldFN0YWtlUmVzdWx0AAAABAUAAAAHYWRkcmVzcwUAAAAHYXNzZXRJZAUAAAARYXNzZXRGYXJtaW5nUG93ZXIFAAAACnJlYWxDYWxsZXIJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAA5fd2l0aG91dF9wZXJjaAYFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKdW5zdGFrZU5GVAAAAAEAAAAFYXNzZXQEAAAABmxvY2tlZAkBAAAACGlzTG9ja2VkAAAAAAMJAAAAAAAAAgUAAAAGbG9ja2VkBQAAAAZsb2NrZWQEAAAAA2FkZAkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIDCQEAAAARaXNVc2VyQmxhY2tsaXN0ZWQAAAABBQAAAANhZGQJAAACAAAAAQIAAADTT29vcHMsIGxvb2tzIGxpa2UgeW91IGxvc3QgaW4gb25lIG9mIHRoZSBEdWNrc3F1aWQgZ2FtZXMhIEFzIHlvdSBhbHJlYWR5IGtub3csIGFueSBsb3NzIGhhcyBpdHMgY29uc2VxdWVuY2VzLCBzbyB5b3Ugd2lsbCBiZSBub3QgYWJsZSB0byBjbGFpbSB5b3VyIGZhcm1pbmcgcmV3YXJkcyB0aWxsIHRoZSBlbmQgb2YgRHVja1NxdWlkIGdhbWUuIFF1YWNrIGluIHBlYWNlIQQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAVhc3NldAQAAAAIdW5zdGFrZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAANhZGQCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAAlfdW5zdGFrZXIEAAAAB2FkZHJlc3MDAwkAAAAAAAACCQEAAAASZ2V0TWV0YXJhY2VBZGRyZXNzAAAAAAgFAAAAAWkAAAAGY2FsbGVyBgkAAAAAAAACCQEAAAAQZ2V0RHVja1dyYXBwZXJTYwAAAAAIBQAAAAFpAAAABmNhbGxlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAA2FkZAQAAAARYXNzZXRGYXJtaW5nUG93ZXIJAQAAAB1nZXRMYXN0S25vd25Bc3NldEZhcm1pbmdQb3dlcgAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BAAAABBhc3NldFJld2FyZERlbHRhCQEAAAAUY2FsY0Fzc2V0UmV3YXJkRGVsdGEAAAADBQAAAAdhZGRyZXNzBQAAAAVhc3NldAUAAAARYXNzZXRGYXJtaW5nUG93ZXIEAAAADGZhcm1lZEFtb3VudAkAAGQAAAACBQAAABBhc3NldFJld2FyZERlbHRhCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFz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b3BzLCBsb29rcyBsaWtlIHlvdSBsb3N0IGluIG9uZSBvZiB0aGUgRHVja3NxdWlkIGdhbWVzISBBcyB5b3UgYWxyZWFkeSBrbm93LCBhbnkgbG9zcyBoYXMgaXRzIGNvbnNlcXVlbmNlcywgc28geW91IHdpbGwgYmUgbm90IGFibGUgdG8gY2xhaW0geW91ciBmYXJtaW5nIHJld2FyZHMgdGlsbCB0aGUgZW5kIG9mIER1Y2tTcXVpZCBnYW1lLiBRdWFjayBpbiBwZWFjZSEEAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAFYXNzZXQEAAAABWNvbG9yCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAC19wZXJjaENvbG9yBAAAABFhc3NldEZhcm1pbmdQb3dlcgkBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAMZmFybWVkQW1vdW50CQAAZAAAAAIFAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQEAAAAD3dpdGhkcmF3bkFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVk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AAAHYWRkcmVzcwkAAAIAAAABAgAAANNPb29wcywgbG9va3MgbGlrZSB5b3UgbG9zdCBpbiBvbmUgb2YgdGhlIER1Y2tzcXVpZCBnYW1lcyEgQXMgeW91IGFscmVhZHkga25vdywgYW55IGxvc3MgaGFzIGl0cyBjb25zZXF1ZW5jZXMsIHNvIHlvdSB3aWxsIGJlIG5vdCBhYmxlIHRvIGNsYWltIHlvdXIgZmFybWluZyByZXdhcmRzIHRpbGwgdGhlIGVuZCBvZiBEdWNrU3F1aWQgZ2FtZS4gUXVhY2sgaW4gcGVhY2UhBAAAAAdhc3NldElkCQACWQAAAAEFAAAABWFzc2V0BAAAABFhc3NldEZhcm1pbmdQb3dlcgkBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAMZmFybWVkQW1vdW50CQAAZAAAAAIFAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQEAAAAD3dpdGhkcmF3bkFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVkQW1vdW50BQAAAA93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAFc2NhbGUAAAAAAAAAAGQDCQAAZwAAAAIAAAAAAAAAAAAFAAAABnJld2FyZAkAAAIAAAABAgAAABx5b3UgaGF2ZSBubyBFR0dzIHRvIHdpdGhkcmF3CQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABBfd2l0aGRyYXduQW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEF93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAGcmV3YXJkBQAAAAZzY2FsZTIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAB2FkZHJlc3MJAABoAAAAAgUAAAAGcmV3YXJkAAAAAAAAD0JACQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAFAAAAA25pbAkAAGgAAAACBQAAAAZyZXdhcmQAAAAAAAAPQkAJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAANyV3X0=", "height": 3142681, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FgUJZ93ou3BM56ppVCpMfzp4jQeX8zzQxjQjeYbq9Uwx Next: 49HFdCE23qpe6RY5EmCzuvuTsMuLyEuDvuXZtpkvSDY2 Diff:
OldNewDifferences
5858
5959
6060 func getDuckWrapperSc () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_duckWrapper")))
61+
62+
63+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
6164
6265
6366 let RefererReward = 5
231234 then if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
232235 then throw("you need to set color properly")
233236 else {
234- let firstPayment = value(i.payments[0])
235237 let exactPrice = calculatePerchPrice(toString(i.caller))
236- if ((firstPayment.assetId != getEggAssetId()))
237- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
238- else if ((firstPayment.amount != exactPrice))
239- then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString(exactPrice)))
240- else {
241- let refererRewardForPerch = fraction(firstPayment.amount, RefererReward, 100)
242- let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
243- if ((refCall == refCall))
244- then {
245- let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
246- let perchAmount = tryGetInteger(perchAmountKey)
238+ let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
239+ if ((amountPaidByCoupons == amountPaidByCoupons))
240+ then {
241+ let leftToPay = (exactPrice - amountPaidByCoupons)
242+ let payment = if ((leftToPay != 0))
243+ then {
244+ let firstPayment = value(i.payments[0])
245+ if ((firstPayment.assetId != getEggAssetId()))
246+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
247+ else if ((firstPayment.amount != leftToPay))
248+ then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString(exactPrice)))
249+ else {
250+ let refererRewardForPerch = fraction(leftToPay, RefererReward, 100)
251+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
252+ if ((refCall == refCall))
253+ then leftToPay
254+ else throw("Strict value is not equal to itself.")
255+ }
256+ }
257+ else 0
258+ if ((payment == payment))
259+ then {
260+ let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
261+ let perchAmount = tryGetInteger(perchAmountKey)
247262 [IntegerEntry(perchAmountKey, (perchAmount + 1))]
248- }
249- else throw("Strict value is not equal to itself.")
250- }
263+ }
264+ else throw("Strict value is not equal to itself.")
265+ }
266+ else throw("Strict value is not equal to itself.")
251267 }
252268 else throw("Strict value is not equal to itself.")
253269 }
296312 else if ((0 >= availablePerches))
297313 then throw(("no perches available for the color " + color))
298314 else {
299- let $t01061710690 = getAssetFarmingPower(assetId, address)
300- let assetGen = $t01061710690._1
301- let assetFarmingPower = $t01061710690._2
315+ let $t01094711020 = getAssetFarmingPower(assetId, address)
316+ let assetGen = $t01094711020._1
317+ let assetFarmingPower = $t01094711020._2
302318 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1))])
303319 }
304320 }
324340 if ((pmt.amount != 1))
325341 then throw("NFT is not attached")
326342 else {
327- let $t01143011503 = getAssetFarmingPower(assetId, address)
328- let assetGen = $t01143011503._1
329- let assetFarmingPower = $t01143011503._2
343+ let $t01176011833 = getAssetFarmingPower(assetId, address)
344+ let assetGen = $t01176011833._1
345+ let assetFarmingPower = $t01176011833._2
330346 let asset = toBase58String(assetId)
331347 let realCaller = toString(i.caller)
332348 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [BooleanEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"), true)])
458474 else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
459475 $Tuple2(((result ++ appendPerches) ++ [ScriptTransfer(i.caller, (reward * 1000000), getEggAssetId()), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000))
460476 }
461- else throw("")
477+ else throw("Asset farming power not bigger then 0")
462478 }
463479 }
464480 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 perchPrice = (100 * 1000000)
55
66 let scale = 10000
77
88 let scale2 = 1000000
99
1010 func tryGetStringExternal (address,key) = match getString(address, key) {
1111 case a: String =>
1212 a
1313 case _ =>
1414 ""
1515 }
1616
1717
1818 func tryGetString (key) = tryGetStringExternal(this, key)
1919
2020
2121 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
2222
2323
2424 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
2525
2626
2727 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
2828
2929
3030 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
3131
3232
3333 func getSwopPromoAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_swopPromoAddress")))
3434
3535
3636 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
3737
3838
3939 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
4040
4141
4242 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
4343
4444
4545 func getMetaraceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_metaRaceAddress")))
4646
4747
4848 func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_accBoosterAddress")))
4949
5050
5151 func getTrustedContracts () = tryGetStringExternal(getOracle(), "static_trustedContracts")
5252
5353
5454 func getMaintenance () = tryGetStringExternal(getOracle(), "static_maintenance")
5555
5656
5757 func getCfMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_cfMasterAddress")))
5858
5959
6060 func getDuckWrapperSc () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_duckWrapper")))
61+
62+
63+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
6164
6265
6366 let RefererReward = 5
6467
6568 func getRewardPerBlock () = 684
6669
6770
6871 func isLocked () = if ((getMaintenance() != ""))
6972 then throw(getMaintenance())
7073 else 0
7174
7275
7376 func tryGetInteger (key) = match getInteger(this, key) {
7477 case b: Int =>
7578 b
7679 case _ =>
7780 0
7881 }
7982
8083
8184 func tryGetBoolean (key) = match getBoolean(this, key) {
8285 case b: Boolean =>
8386 b
8487 case _ =>
8588 false
8689 }
8790
8891
8992 func isUserBlacklisted (address) = false
9093
9194
9295 func getAssetOrigin (generation) = if ((generation == "G"))
9396 then getIncubatorAddress()
9497 else getBreederAddress()
9598
9699
97100 func getAssetRarity (genotype,generation) = {
98101 let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found"))
99102 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
100103 if ((power > 0))
101104 then power
102105 else 2
103106 }
104107
105108
106109 func asString (value) = match value {
107110 case string: String =>
108111 string
109112 case _ =>
110113 throw("wrong type, expected: String")
111114 }
112115
113116
114117 func asInt (value) = match value {
115118 case int: Int =>
116119 int
117120 case _ =>
118121 throw("wrong type, expected: Int")
119122 }
120123
121124
122125 func getAssetFarmingPower (assetId,address) = if (if ((value(assetInfo(assetId)).issuer == getBreederAddress()))
123126 then true
124127 else (value(assetInfo(assetId)).issuer == getIncubatorAddress()))
125128 then {
126129 let farmBoost = asInt(invoke(getItemsAddress(), "calculateFarmingPowerBoost", [toBase58String(assetId), address], nil))
127130 if ((farmBoost == farmBoost))
128131 then {
129132 let assetName = value(assetInfo(assetId)).name
130133 let isJackpot = (takeRight(value(assetName), 1) == "U")
131134 let farmGen = if (isJackpot)
132135 then ""
133136 else asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
134137 if ((farmGen == farmGen))
135138 then {
136139 let rarity = if (isJackpot)
137140 then 100
138141 else {
139142 let generation = take(takeRight(assetName, 2), 1)
140143 getAssetRarity(farmGen, generation)
141144 }
142145 let totalFarmingPower = (rarity + fraction(rarity, farmBoost, 100))
143146 $Tuple2(farmGen, totalFarmingPower)
144147 }
145148 else throw("Strict value is not equal to itself.")
146149 }
147150 else throw("Strict value is not equal to itself.")
148151 }
149152 else throw("not valid NFT")
150153
151154
152155 func getLastKnownAssetFarmingPower (address,assetId) = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_farmingPower"))
153156
154157
155158 func getAssetsByGen (gen) = {
156159 let s = tryGetString(("assets_" + gen))
157160 if ((s == ""))
158161 then nil
159162 else split(s, ",")
160163 }
161164
162165
163166 func calcInterest (previousInterest,previousInterestHeight,totalFarmingPower) = (previousInterest + (((scale * getRewardPerBlock()) * (height - previousInterestHeight)) / totalFarmingPower))
164167
165168
166169 func getCurrentInterest () = if ((tryGetInteger("total_farmingPower") > 0))
167170 then {
168171 let previousInterest = tryGetInteger("total_lastCheckInterest")
169172 let previousInterestHeight = tryGetInteger("total_lastCheckInterestHeight")
170173 let totalFarmingPower = tryGetInteger("total_farmingPower")
171174 calcInterest(previousInterest, previousInterestHeight, totalFarmingPower)
172175 }
173176 else if ((tryGetInteger("total_startHeight") != 0))
174177 then tryGetInteger("total_lastCheckInterest")
175178 else throw("farming is not launched, yet")
176179
177180
178181 func calcAssetRewardDelta (address,assetId,assetFarmingPower) = {
179182 let lastCheckAssetInterest = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_lastCheckInterest"))
180183 let currentInterest = getCurrentInterest()
181184 (assetFarmingPower * (currentInterest - lastCheckAssetInterest))
182185 }
183186
184187
185188 func addAssetIdToGenEntry (assetId,assetGen) = {
186189 let currentValue = tryGetString((("assets_" + assetGen) + "_locked"))
187190 if ((currentValue == ""))
188191 then assetId
189192 else ((currentValue + ",") + assetId)
190193 }
191194
192195
193196 func getStakeResult (address,assetId,assetFarmingPower,unstaker) = {
194197 let asset = toBase58String(assetId)
195198 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), StringEntry((("asset_" + asset) + "_owner"), address), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), assetFarmingPower), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), StringEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker"), unstaker)]
196199 }
197200
198201
199202 func getUnstakeResult (address,assetId,rewardDelta,withdrawnAmount,assetFarmingPower) = {
200203 let asset = toBase58String(assetId)
201204 [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + asset) + "_owner")), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (withdrawnAmount * scale2))), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")) + rewardDelta))]
202205 }
203206
204207
205208 func calculatePerchPrice (address) = {
206209 let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner"))
207210 if ((hasArtefactStaked == ""))
208211 then perchPrice
209212 else ((perchPrice / 10) * 9)
210213 }
211214
212215
213216 @Callable(i)
214217 func configureOracle (oracle) = if ((i.caller != this))
215218 then throw("admin only")
216219 else [StringEntry("static_oracleAddress", oracle)]
217220
218221
219222
220223 @Callable(i)
221224 func init () = if ((i.caller != this))
222225 then throw("admin only")
223226 else [IntegerEntry("total_startHeight", height)]
224227
225228
226229
227230 @Callable(i)
228231 func buyPerch (color,refererAddress) = {
229232 let locked = isLocked()
230233 if ((locked == locked))
231234 then if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
232235 then throw("you need to set color properly")
233236 else {
234- let firstPayment = value(i.payments[0])
235237 let exactPrice = calculatePerchPrice(toString(i.caller))
236- if ((firstPayment.assetId != getEggAssetId()))
237- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
238- else if ((firstPayment.amount != exactPrice))
239- then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString(exactPrice)))
240- else {
241- let refererRewardForPerch = fraction(firstPayment.amount, RefererReward, 100)
242- let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
243- if ((refCall == refCall))
244- then {
245- let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
246- let perchAmount = tryGetInteger(perchAmountKey)
238+ let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
239+ if ((amountPaidByCoupons == amountPaidByCoupons))
240+ then {
241+ let leftToPay = (exactPrice - amountPaidByCoupons)
242+ let payment = if ((leftToPay != 0))
243+ then {
244+ let firstPayment = value(i.payments[0])
245+ if ((firstPayment.assetId != getEggAssetId()))
246+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
247+ else if ((firstPayment.amount != leftToPay))
248+ then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString(exactPrice)))
249+ else {
250+ let refererRewardForPerch = fraction(leftToPay, RefererReward, 100)
251+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
252+ if ((refCall == refCall))
253+ then leftToPay
254+ else throw("Strict value is not equal to itself.")
255+ }
256+ }
257+ else 0
258+ if ((payment == payment))
259+ then {
260+ let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
261+ let perchAmount = tryGetInteger(perchAmountKey)
247262 [IntegerEntry(perchAmountKey, (perchAmount + 1))]
248- }
249- else throw("Strict value is not equal to itself.")
250- }
263+ }
264+ else throw("Strict value is not equal to itself.")
265+ }
266+ else throw("Strict value is not equal to itself.")
251267 }
252268 else throw("Strict value is not equal to itself.")
253269 }
254270
255271
256272
257273 @Callable(i)
258274 func addFreePerch (address,color) = {
259275 let locked = isLocked()
260276 if ((locked == locked))
261277 then if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
262278 then throw("you need to set color properly")
263279 else if (if (if ((i.caller != getRebirthAddress()))
264280 then (i.caller != this)
265281 else false)
266282 then (i.caller != getSwopPromoAddress())
267283 else false)
268284 then throw("rebirth and swop promo only")
269285 else {
270286 let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color)
271287 let perchAmount = tryGetInteger(perchAmountKey)
272288 $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + 1))], "")
273289 }
274290 else throw("Strict value is not equal to itself.")
275291 }
276292
277293
278294
279295 @Callable(i)
280296 func stakeNFT () = {
281297 let locked = isLocked()
282298 if ((locked == locked))
283299 then {
284300 let pmt = value(i.payments[0])
285301 let assetId = value(value(i.payments[0]).assetId)
286302 let realCaller = toString(i.caller)
287303 let address = if (if ((getMetaraceAddress() == i.caller))
288304 then true
289305 else (getDuckWrapperSc() == i.caller))
290306 then realCaller
291307 else toString(i.originCaller)
292308 let color = takeRight(value(assetInfo(assetId)).name, 1)
293309 let availablePerches = tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color))
294310 if ((pmt.amount != 1))
295311 then throw("NFT is not attached")
296312 else if ((0 >= availablePerches))
297313 then throw(("no perches available for the color " + color))
298314 else {
299- let $t01061710690 = getAssetFarmingPower(assetId, address)
300- let assetGen = $t01061710690._1
301- let assetFarmingPower = $t01061710690._2
315+ let $t01094711020 = getAssetFarmingPower(assetId, address)
316+ let assetGen = $t01094711020._1
317+ let assetFarmingPower = $t01094711020._2
302318 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1))])
303319 }
304320 }
305321 else throw("Strict value is not equal to itself.")
306322 }
307323
308324
309325
310326 @Callable(i)
311327 func stakeNFTWithoutPerch () = {
312328 let locked = isLocked()
313329 if ((locked == locked))
314330 then {
315331 let allowedContracts = getTrustedContracts()
316332 let allowedContractsList = split(allowedContracts, ";")
317333 let dappToCall = toString(i.caller)
318334 if ((indexOf(allowedContractsList, dappToCall) == unit))
319335 then throw("Only trusted smart contracts can stake without a perch!")
320336 else {
321337 let pmt = value(i.payments[0])
322338 let assetId = value(value(i.payments[0]).assetId)
323339 let address = toString(i.originCaller)
324340 if ((pmt.amount != 1))
325341 then throw("NFT is not attached")
326342 else {
327- let $t01143011503 = getAssetFarmingPower(assetId, address)
328- let assetGen = $t01143011503._1
329- let assetFarmingPower = $t01143011503._2
343+ let $t01176011833 = getAssetFarmingPower(assetId, address)
344+ let assetGen = $t01176011833._1
345+ let assetFarmingPower = $t01176011833._2
330346 let asset = toBase58String(assetId)
331347 let realCaller = toString(i.caller)
332348 (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [BooleanEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"), true)])
333349 }
334350 }
335351 }
336352 else throw("Strict value is not equal to itself.")
337353 }
338354
339355
340356
341357 @Callable(i)
342358 func unstakeNFT (asset) = {
343359 let locked = isLocked()
344360 if ((locked == locked))
345361 then {
346362 let add = toString(i.originCaller)
347363 if (isUserBlacklisted(add))
348364 then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!")
349365 else {
350366 let assetId = fromBase58String(asset)
351367 let unstaker = tryGetString((((("address_" + add) + "_asset_") + asset) + "_unstaker"))
352368 let address = if (if ((getMetaraceAddress() == i.caller))
353369 then true
354370 else (getDuckWrapperSc() == i.caller))
355371 then toString(i.caller)
356372 else add
357373 let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
358374 let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
359375 let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
360376 let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
361377 let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
362378 let color = takeRight(value(assetInfo(assetId)).name, 1)
363379 let realCaller = toString(i.caller)
364380 if (if ((unstaker != ""))
365381 then (unstaker != realCaller)
366382 else false)
367383 then throw("It seems duck was staked throuh a dapp, not directly, please unstake through dapp!")
368384 else if ((0 >= assetFarmingPower))
369385 then throw("asset not available")
370386 else {
371387 let isWithoutPerch = tryGetBoolean((((("address_" + address) + "_asset_") + asset) + "_without_perch"))
372388 if ((color == "U"))
373389 then throw("use another function to unstake Jackpot NFT")
374390 else {
375391 let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower)
376392 let appendPerches = if (isWithoutPerch)
377393 then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))]
378394 else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
379395 $Tuple2(((result ++ [ScriptTransfer(i.caller, (reward * 1000000), getEggAssetId()), ScriptTransfer(i.caller, 1, assetId)]) ++ appendPerches), (reward * 1000000))
380396 }
381397 }
382398 }
383399 }
384400 else throw("Strict value is not equal to itself.")
385401 }
386402
387403
388404
389405 @Callable(i)
390406 func stakeJackpot (color) = {
391407 let locked = isLocked()
392408 if ((locked == locked))
393409 then {
394410 let pmt = value(i.payments[0])
395411 let assetId = value(pmt.assetId)
396412 let realCaller = toString(i.caller)
397413 let address = if (if ((getMetaraceAddress() == i.caller))
398414 then true
399415 else (getDuckWrapperSc() == i.caller))
400416 then realCaller
401417 else toString(i.originCaller)
402418 let availablePerches = tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color))
403419 let assetIssuer = value(assetInfo(assetId)).issuer
404420 if ((pmt.amount != 1))
405421 then throw("NFT is not attached")
406422 else if (if ((assetIssuer == getIncubatorAddress()))
407423 then true
408424 else (assetIssuer == getBreederAddress()))
409425 then if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U"))
410426 then throw("jackpot only")
411427 else if ((0 >= availablePerches))
412428 then throw(("no perches available for the color " + color))
413429 else {
414430 let farmingPower = getAssetFarmingPower(assetId, address)
415431 (getStakeResult(address, assetId, farmingPower._2, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)])
416432 }
417433 else throw("asset is not valid")
418434 }
419435 else throw("Strict value is not equal to itself.")
420436 }
421437
422438
423439
424440 @Callable(i)
425441 func unstakeJackpot (asset) = {
426442 let locked = isLocked()
427443 if ((locked == locked))
428444 then {
429445 let realCaller = toString(i.caller)
430446 let address = if (if ((getMetaraceAddress() == i.caller))
431447 then true
432448 else (getDuckWrapperSc() == i.caller))
433449 then realCaller
434450 else toString(i.originCaller)
435451 if (isUserBlacklisted(address))
436452 then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!")
437453 else {
438454 let assetId = fromBase58String(asset)
439455 let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
440456 let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
441457 let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
442458 let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
443459 let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
444460 let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
445461 let unstaker = tryGetString((((("address_" + address) + "_asset_") + asset) + "_unstaker"))
446462 if (if ((unstaker != ""))
447463 then (unstaker != realCaller)
448464 else false)
449465 then throw("It seems duck was staked throuh a dapp, not directly, please unstake through dapp!")
450466 else if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U"))
451467 then throw("jackpot only")
452468 else if ((assetFarmingPower > 0))
453469 then {
454470 let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower)
455471 let isWithoutPerch = tryGetBoolean((((("address_" + address) + "_asset_") + asset) + "_without_perch"))
456472 let appendPerches = if (isWithoutPerch)
457473 then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))]
458474 else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
459475 $Tuple2(((result ++ appendPerches) ++ [ScriptTransfer(i.caller, (reward * 1000000), getEggAssetId()), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000))
460476 }
461- else throw("")
477+ else throw("Asset farming power not bigger then 0")
462478 }
463479 }
464480 else throw("Strict value is not equal to itself.")
465481 }
466482
467483
468484
469485 @Callable(i)
470486 func claimReward (asset) = {
471487 let locked = isLocked()
472488 if ((locked == locked))
473489 then {
474490 let address = if ((i.originCaller == getCfMasterAddress()))
475491 then toString(i.caller)
476492 else toString(i.originCaller)
477493 if (isUserBlacklisted(address))
478494 then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!")
479495 else {
480496 let assetId = fromBase58String(asset)
481497 let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset)
482498 let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower)
483499 let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")))
484500 let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"))
485501 let reward = ((farmedAmount - withdrawnAmount) / (scale * 100))
486502 if ((0 >= reward))
487503 then throw("you have no EGGs to withdraw")
488504 else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), getEggAssetId())], (reward * 1000000))
489505 }
490506 }
491507 else throw("Strict value is not equal to itself.")
492508 }
493509
494510

github/deemru/w8io/3ef1775 
82.85 ms