tx · 8Wt8G9Y4s7vAsviL4koNi23THBRxGVaCoFQLc7cAHubF

3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph:  -0.01400000 Waves

2022.01.15 13:26 [1879956] smart account 3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph > SELF 0.00000000 Waves

{ "type": 13, "id": "8Wt8G9Y4s7vAsviL4koNi23THBRxGVaCoFQLc7cAHubF", "fee": 1400000, "feeAssetId": null, "timestamp": 1642242523037, "version": 2, "chainId": 84, "sender": "3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph", "senderPublicKey": "G7cNXePvAHUHmZfXa1eHnvFeH6DuykPC5wm9v9djTKgD", "proofs": [ "2czujt9RezUoRhpw9aEZMnMsGjuV7jGyUwReHgBT5Yn3By6dTjPRmg6qoYR2ZLyRqgG7uxswRSBpkXVZNi9s9PUk", "5X5so2aGtLPPBEUhrmLMhNF6NbMNAdC8HN6LmButvLj4x7uqyqVRUTYpz7X68DchKPcmF8xGGh9KRmbfR6oVc3cM", "45mNMSYjqAYZy9zmXmejxtTEMZJkEkzJYMD1bTeCn1tJYBoVKnc9RoH3MEm7kW5oRqF1JuKRXiV31VpYXZ9C4HjT" ], "script": "base64:AAIFAAAAAAAAB9IIAhIGCgQYGBgREgMKARgSBgoECAgBARIAEgMKAQgSAwoBCBIECgIYFBoTCgFBEg50cmFuc2ZlclRvVXNlchoLCgFCEgZhbW91bnQaDAoBQxIHYXNzZXRJZBoJCgFEEgR0eXBlGhUKAUUSEGRBcHBTdGFrZWRUb2tlbnMaFAoBRhIPYXNzZXRJZFF1YW50aXR5GgoKAUcSBWFzc2V0GhkKAUgSFHRyYW5zZmVyVG9Vc2VyQW1vdW50GgYKAUkSAWkaCgoBShIFcG9vbHMaFAoBSxIPbGlxdWlkaXR5VG9rZW5zGhIKAUwSDXNlcnZpY2VUb2tlbnMaGwoBTRIWbGlxdWlkaXR5VG9rZW5EZWNpbWFscxoVCgFOEhBnZW5lcmF0ZVBvb2xLZXlzGhAKAU8SC2FjY3VtdWxhdGVkGiMKAVASHmdlbmVyYXRlUG9vbExpcXVpZGl0eVRva2VuS2V5cxoOCgFREglwb29sSW5kZXgaEwoBUhIObGlxdWlkaXR5VG9rZW4aIQoBUxIcZ2VuZXJhdGVQb29sU2VydmljZVRva2VuS2V5cxoqCgFUEiVnZW5lcmF0ZVBvb2xMaXF1aWRpdHlUb2tlbkRlY2ltYWxLZXlzGhsKAVUSFmdlbmVyYXRlUG9vbEFjdGl2ZUtleXMaFAoBVhIPcG9vbEJhbGFuY2VLZXlzGgcKAVcSAiRsGgcKAVgSAiRzGgoKAVkSBSRhY2MwGgoKAVoSBSRmMF8xGg8KAWESCmRlcG9zaXRGZWUaEwoCYUESDXBvb2xBbW91bnRLZXkaEQoCYUISC3VzZXJBZGRyZXNzGhcKAmFDEhF1c2VyUG9vbEFtb3VudEtleRoWCgJhRBIQZEFwcEFzc2V0QWRkcmVzcxobCgJhRRIVbGlxdWlkdXR5QXNzZXRBZGRyZXNzGhsKAmFGEhVsaXF1aWRpdHlUb2tlbkRlY2ltYWwaEAoCYUcSCnBvb2xBbW91bnQaEAoCYUgSCnVzZXJBbW91bnQaCQoCYUkSA2ludBoaCgJhShIUdXNlckFtb3VudFdpdGhvdXRGZWUaCQoCYUsSA2ZlZRoTCgJhTBINbmV3UG9vbEFtb3VudBoXCgJhTRIRbmV3VXNlclBvb2xBbW91bnQaEwoCYU4SDWxvY2tUb2tlbnNLZXkaDgoCYU8SCHN0YXR1c2VzGgwKAmFQEgZzdGF0dXMaCAoCYVESAnR4GgwKAmFSEgZ2ZXJpZnkaCQoCYVMSA2ludhoVCgJhVBIPbG9ja1NoYXJlVG9rZW5zGhEKAmFVEgtkQXBwQWRkcmVzcxoNCgJhVhIHJG1hdGNoMRoKCgJhVxIEZEFwcBoTCgJhWBINcG9vbEZ1bmN0aW9ucxoTCgJhWRINc2lnbmVkQnlBZG1pbhoQCgJhWhIKYWRtMVNpZ25lZBoICgJhYRICJGEaCAoCYWISAiRpGgsKAmFjEgUkZjBfMhocCgJhZBIWcG9vbExpcXVpZGl0eVRva2VuS2V5cxoLCgJhZRIFJGYxXzEaCwoCYWYSBSRmMV8yGhoKAmFnEhRwb29sU2VydmljZVRva2VuS2V5cxoLCgJhaBIFJGYyXzEaCwoCYWkSBSRmMl8yGiMKAmFqEh1wb29sTGlxdWlkaXR5VG9rZW5EZWNpbWFsS2V5cxoLCgJhaxIFJGYzXzEaCwoCYWwSBSRmM18yGhQKAmFtEg5wb29sQWN0aXZlS2V5cxoLCgJhbhIFJGY0XzEaCwoCYW8SBSRmNF8yGg0KAmFwEgdyZWNvcmRzGhoKAmFxEhRnZW5lcmF0ZURlbGV0aW5nS2V5cxoMCgJhchIGcmVjb3JkGhAKAmFzEgpkZWxldGVLZXlzGgoKAmF0EgRuYW1lGhEKAmF1EgtkZXNjcmlwdGlvbhoOCgJhdhIIcXVhbnRpdHkaDgoCYXcSCGRlY2ltYWxzGggKAmF4EgJhOBoTCgJheRINYXNzZXRJZFN0cmluZxoICgJhehICaWQaEgoBYhINY29udHJvbGxlckZlZRoQCgJiYRIKYWRtMlNpZ25lZBoQCgJiYhIKYWRtM1NpZ25lZBoQCgFjEgtwbGF0Zm9ybUZlZRoRCgFkEgxhZG1pblB1YktleTEaEQoBZRIMYWRtaW5QdWJLZXkyGhEKAWYSDGFkbWluUHViS2V5MxoRCgFnEgxhZG1pblB1YktleTQaFgoBaBIRZ292ZXJtYW5jZUFkZHJlc3MaEAoBaRILZGVwb3NpdFR5cGUaEQoBahIMd2l0aGRyYXdUeXBlGhMKAWsSDmZhcm1pbmdBZGRyZXNzGhAKAWwSC3N3b3BGaVBvb2xzGhQKAW0SD3N3b3BGaUZ1bmN0aW9ucxoRCgFuEgxpc1Bvb2xBY3RpdmUaCQoBbxIEcG9vbBoMCgFwEgdrQWN0aXZlGg0KAXESCGlzQWN0aXZlGgwKAXISByRtYXRjaDAaDAoBcxIHYm9vbGVhbhoYCgF0EhNnZXREQXBwQXNzZXRBZGRyZXNzGgsKAXUSBnN0cmluZxoMCgF2Egdub3RoaW5nGh0KAXcSGGdldExpcXVpZHV0eUFzc2V0QWRkcmVzcxoUCgF4Eg9nZXRTdGFrZWRBbW91bnQaEAoBeRILcG9vbEFkZHJlc3MaCwoBehIGc3Rha2VkAAAAEgAAAAABYQAAAAAAAAAD6AAAAAABYgAAAAAAAAAnEAAAAAABYwAAAAAAAAAnEAAAAAABZAEAAAAgTC9F1XzqFGGdLucFXlrRY8ZeleddBPtyCBFVfBI5UHgAAAAAAWUBAAAAIKNY4ZyvC53Z2TeeJDtpRS+31kZVSLjrrbWqfndSxAQ9AAAAAAFmAQAAACCK0LT5MEsa8VS1dms5d3Y/ANGsCGMTMJjd1OVqZKQfKQAAAAABZwEAAAAgitC0+TBLGvFUtXZrOXd2PwDRrAhjEzCY3dTlamSkHykAAAAAAWgJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVS+DCt6Z99veUsnXaba1OpoLOPABfg/uE0AAAAAAWkCAAAAB2RlcG9zaXQAAAAAAWoCAAAACHdpdGhkcmF3AAAAAAFrCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU7F9tx8nvlFAxrScqcDemwXYarJNmRbL3AAAAAAFsCQAETAAAAAICAAAAIzNQUEg3eDdpcW9iVzV6aXlpUkNpYzE5clFxS3I2blBZYUsxCQAETAAAAAICAAAAIzNQS3kybVpxbnZUMkV0cHdEaW05TWdzNll2Q1JlNHM4NW5YCQAETAAAAAICAAAAIzNQMjdTOVYzNmt3Mk1jaldSWjM3QXhUeDhpd2tkN0hYdzZXBQAAAANuaWwAAAAAAW0JAARMAAAAAgIAAAAWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwkABEwAAAACAgAAAAhleGNoYW5nZQUAAAADbmlsAQAAAAFuAAAAAQAAAAFvBAAAAAFwCQABLAAAAAIFAAAAAW8CAAAAB19hY3RpdmUEAAAAAXEEAAAAAXIJAAQbAAAAAgUAAAAEdGhpcwUAAAABcAMJAAABAAAAAgUAAAABcgIAAAAHQm9vbGVhbgQAAAABcwUAAAABcgUAAAABcwkAAAIAAAABAgAAABNQb29sIGlzIG5vdCBhY3RpdmUhBQAAAAFxAQAAAAF0AAAAAQAAAAFvBAAAAAFyCQAEIgAAAAEJAAEsAAAAAgUAAAABbwIAAAAOX3NlcnZpY2VfdG9rZW4DCQAAAQAAAAIFAAAAAXICAAAABlN0cmluZwQAAAABdQUAAAABcgUAAAABdQQAAAABdgUAAAABcgkAAAIAAAABAgAAACZZb3UgdHJ5IHRvIGRlcG9zaXQgb24gdW5zdXBwb3J0ZWQgcG9vbAEAAAABdwAAAAEAAAABbwQAAAABcgkABCIAAAABCQABLAAAAAIFAAAAAW8CAAAAEF9saXF1aWRpdHlfdG9rZW4DCQAAAQAAAAIFAAAAAXICAAAABlN0cmluZwQAAAABdQUAAAABcgUAAAABdQQAAAABdgUAAAABcgkAAAIAAAABAgAAAClZb3UgdHJ5IHRvIHdpdGhkcmF3IGZyb20gdW5zdXBwb3J0ZWQgcG9vbAEAAAABeAAAAAEAAAABeQQAAAABcgkABBoAAAACBQAAAAFrCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAF5AgAAAAFfCQAEJQAAAAEFAAAABHRoaXMCAAAAFF9zaGFyZV90b2tlbnNfbG9ja2VkAwkAAAEAAAACBQAAAAFyAgAAAANJbnQEAAAAAXoFAAAAAXIFAAAAAXoDCQAAAQAAAAIFAAAAAXICAAAABFVuaXQEAAAAAXYFAAAAAXIAAAAAAAAAAAAJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAAUEAAAAEAAAAAUIAAAABQwAAAAF5AAAAAUQEAAAAAUUJAQAAAAF4AAAAAQUAAAABeQQAAAABRgQAAAABcgkAA+wAAAABBQAAAAFDAwkAAAEAAAACBQAAAAFyAgAAAAVBc3NldAQAAAABRwUAAAABcggFAAAAAUcAAAAIcXVhbnRpdHkJAAACAAAAAQIAAAAQQ2FuJ3QgZmluZCBhc3NldAMJAAAAAAAAAgUAAAABRQAAAAAAAAAAAAUAAAABQgMJAAAAAAAAAgUAAAABRAUAAAABaQQAAAABSAkAAGsAAAADBQAAAAFCBQAAAAFGBQAAAAFFBQAAAAFIBAAAAAFICQAAawAAAAMFAAAAAUIFAAAAAUUFAAAAAUYFAAAAAUgAAAAHAAAAAUkBAAAACGFkZFBvb2xzAAAABAAAAAFKAAAAAUsAAAABTAAAAAFNAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAABZAkABEwAAAACBQAAAAFlCQAETAAAAAIFAAAAAWYFAAAAA25pbAgFAAAAAUkAAAAPY2FsbGVyUHVibGljS2V5CgEAAAABTgAAAAIAAAABTwAAAAFvCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAW8CAAAADl9hc3NldF9iYWxhbmNlAAAAAAAAAAAABQAAAAFPCgEAAAABUAAAAAIAAAABTwAAAAFvBAAAAAFRCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAAAUoFAAAAAW8EAAAAAVIJAAGRAAAAAgUAAAABSwUAAAABUQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAAAW8CAAAAEF9saXF1aWRpdHlfdG9rZW4FAAAAAVIFAAAAAU8KAQAAAAFTAAAAAgAAAAFPAAAAAW8EAAAAAVEJAQAAAAV2YWx1ZQAAAAEJAARPAAAAAgUAAAABSgUAAAABbwQAAAABUgkAAZEAAAACBQAAAAFMBQAAAAFRCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAABbwIAAAAOX3NlcnZpY2VfdG9rZW4FAAAAAVIFAAAAAU8KAQAAAAFUAAAAAgAAAAFPAAAAAW8EAAAAAVEJAQAAAAV2YWx1ZQAAAAEJAARPAAAAAgUAAAABSgUAAAABbwQAAAABUgkAAZEAAAACBQAAAAFNBQAAAAFRCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAW8CAAAAFl9zZXJ2aWNlX3Rva2VuX2RlY2ltYWwFAAAAAVIFAAAAAU8KAQAAAAFVAAAAAgAAAAFPAAAAAW8JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgUAAAABbwIAAAAHX2FjdGl2ZQYFAAAAAU8EAAAAAVYKAAAAAAFXBQAAAAFKCgAAAAABWAkAAZAAAAABBQAAAAFXCgAAAAABWQUAAAADbmlsCgEAAAABWgAAAAIAAAACYWEAAAACYWIDCQAAZwAAAAIFAAAAAmFiBQAAAAFYBQAAAAJhYQkBAAAAAU4AAAACBQAAAAJhYQkAAZEAAAACBQAAAAFXBQAAAAJhYgoBAAAAAmFjAAAAAgAAAAJhYQAAAAJhYgMJAABnAAAAAgUAAAACYWIFAAAAAVgFAAAAAmFhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEAAAACYWMAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgUAAAABWQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgAAAAAAAAAACwAAAAAAAAAADAAAAAAAAAAADQAAAAAAAAAADgAAAAAAAAAADwAAAAAAAAAAEAAAAAAAAAAAEQAAAAAAAAAAEgAAAAAAAAAAEwAAAAAAAAAAFAQAAAACYWQKAAAAAAFXBQAAAAFKCgAAAAABWAkAAZAAAAABBQAAAAFXCgAAAAABWQUAAAADbmlsCgEAAAACYWUAAAACAAAAAmFhAAAAAmFiAwkAAGcAAAACBQAAAAJhYgUAAAABWAUAAAACYWEJAQAAAAFQAAAAAgUAAAACYWEJAAGRAAAAAgUAAAABVwUAAAACYWIKAQAAAAJhZgAAAAIAAAACYWEAAAACYWIDCQAAZwAAAAIFAAAAAmFiBQAAAAFYBQAAAAJhYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyAyMAkBAAAAAmFmAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgkBAAAAAmFlAAAAAgUAAAABWQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgAAAAAAAAAACwAAAAAAAAAADAAAAAAAAAAADQAAAAAAAAAADgAAAAAAAAAADwAAAAAAAAAAEAAAAAAAAAAAEQAAAAAAAAAAEgAAAAAAAAAAEwAAAAAAAAAAFAQAAAACYWcKAAAAAAFXBQAAAAFKCgAAAAABWAkAAZAAAAABBQAAAAFXCgAAAAABWQUAAAADbmlsCgEAAAACYWgAAAACAAAAAmFhAAAAAmFiAwkAAGcAAAACBQAAAAJhYgUAAAABWAUAAAACYWEJAQAAAAFTAAAAAgUAAAACYWEJAAGRAAAAAgUAAAABVwUAAAACYWIKAQAAAAJhaQAAAAIAAAACYWEAAAACYWIDCQAAZwAAAAIFAAAAAmFiBQAAAAFYBQAAAAJhYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyAyMAkBAAAAAmFpAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgkBAAAAAmFoAAAAAgUAAAABWQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgAAAAAAAAAACwAAAAAAAAAADAAAAAAAAAAADQAAAAAAAAAADgAAAAAAAAAADwAAAAAAAAAAEAAAAAAAAAAAEQAAAAAAAAAAEgAAAAAAAAAAEwAAAAAAAAAAFAQAAAACYWoKAAAAAAFXBQAAAAFKCgAAAAABWAkAAZAAAAABBQAAAAFXCgAAAAABWQUAAAADbmlsCgEAAAACYWsAAAACAAAAAmFhAAAAAmFiAwkAAGcAAAACBQAAAAJhYgUAAAABWAUAAAACYWEJAQAAAAFUAAAAAgUAAAACYWEJAAGRAAAAAgUAAAABVwUAAAACYWIKAQAAAAJhbAAAAAIAAAACYWEAAAACYWIDCQAAZwAAAAIFAAAAAmFiBQAAAAFYBQAAAAJhYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyAyMAkBAAAAAmFsAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgkBAAAAAmFrAAAAAgUAAAABWQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgAAAAAAAAAACwAAAAAAAAAADAAAAAAAAAAADQAAAAAAAAAADgAAAAAAAAAADwAAAAAAAAAAEAAAAAAAAAAAEQAAAAAAAAAAEgAAAAAAAAAAEwAAAAAAAAAAFAQAAAACYW0KAAAAAAFXBQAAAAFKCgAAAAABWAkAAZAAAAABBQAAAAFX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AAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACBQAAAAFZAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALAAAAAAAAAAAMAAAAAAAAAAANAAAAAAAAAAAOAAAAAAAAAAAPAAAAAAAAAAAQAAAAAAAAAAARAAAAAAAAAAASAAAAAAAAAAATAAAAAAAAAAAUAAAAAAAAAAAVAAAAAAAAAAAWAAAAAAAAAAAXAAAAAAAAAAAYAAAAAAAAAAAZAAAAAAAAAAAaAAAAAAAAAAAbAAAAAAAAAAAcAAAAAAAAAAAdAAAAAAAAAAAeAAAAAAAAAAAfAAAAAAAAAAAgAAAAAAAAAAAhAAAAAAAAAAAiAAAAAAAAAAAjAAAAAAAAAAAkAAAAAAAAAAAlAAAAAAAAAAAmAAAAAAAAAAAnAAAA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AAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACCQEAAAABWgAAAAIJAQAAAAFaAAAAAgkBAAAAAVoAAAACBQAAAAFZAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALAAAAAAAAAAAMAAAAAAAAAAANAAAAAAAAAAAOAAAAAAAAAAAPAAAAAAAAAAAQAAAAAAAAAAARAAAAAAAAAAASAAAAAAAAAAATAAAAAAAAAAAUAAAAAAAAAAAVAAAAAAAAAAAWAAAAAAAAAAAXAAAAAAAAAAAYAAAAAAAAAAAZAAAAAAAAAAAaAAAAAAAAAAAbAAAAAAAAAAAcAAAAAAAAAAAdAAAAAAAAAAAeAAAAAAAAAAAfAAAAAAAAAAAgAAAAAAAAAAAhAAAAAAAAAAAiAAAAAAAAAAAjAAAAAAAAAAAkAAAAAAAAAAAlAAAAAAAAAAAmAAAAAAAAAAAnAAAAAAAAAAAoAAAAAAAAAAApAAAAAAAAAAAqAAAAAAAAAAArAAAAAAAAAAAsAAAAAAAAAAAtAAAAAAAAAAAuAAAAAAAA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", "height": 1879956, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9geSeobvSjdTMtjczoKTUS2UWBcNiv6GjXEqDY5HPqq6 Next: 7JGivjj9bn4Snc1ZcCjCHw2xVgVY8vRwf1eHoPqicUd Diff:
OldNewDifferences
1616 let adminPubKey4 = base58'ALsqwPqiUP3bVbM7grozc1Y5oHVBAGKqACRJ5J8RXceC'
1717
1818 let govermanceAddress = Address(base58'3N7ExjwfofPYTvNBv2zqtAtLcMxqjTxS7iL')
19+
20+let depositType = "deposit"
21+
22+let withdrawType = "withdraw"
1923
2024 let farmingAddress = Address(base58'3NBTuZhn2CwAgWGL99qpGDjZQ4Wtbg56iDL')
2125
6165 }
6266
6367
64-func transferToUser (amount,assetId,poolAddress) = {
68+func transferToUser (amount,assetId,poolAddress,type) = {
6569 let dAppStakedTokens = getStakedAmount(poolAddress)
6670 let assetIdQuantity = match assetInfo(assetId) {
6771 case asset: Asset =>
7175 }
7276 if ((dAppStakedTokens == 0))
7377 then amount
74- else {
75- let transferToUserAmount = fraction(amount, assetIdQuantity, dAppStakedTokens)
76- transferToUserAmount
77- }
78+ else if ((type == depositType))
79+ then {
80+ let transferToUserAmount = fraction(amount, assetIdQuantity, dAppStakedTokens)
81+ transferToUserAmount
82+ }
83+ else {
84+ let transferToUserAmount = fraction(amount, dAppStakedTokens, assetIdQuantity)
85+ transferToUserAmount
86+ }
7887 }
7988
8089
260269 0
261270 }
262271 let userAmountWithoutFee = ((amount - fraction(amount, 1, depositFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
263- let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(dAppAssetAddress), pool)
272+ let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(dAppAssetAddress), pool, depositType)
264273 let fee = (amount - userAmountWithoutFee)
265274 let newPoolAmount = ((poolAmount + amount) - fee)
266275 let newUserPoolAmount = (userAmount + transferToUserAmount)
303312 let liquidutyAssetAddress = getLiquidutyAssetAddress(pool)
304313 let poolAmount = getIntegerValue(this, poolAmountKey)
305314 let userAmountWithoutFee = ((amount - fraction(amount, 1, platformFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
306- let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(assetIdString), pool)
315+ let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(assetIdString), pool, withdrawType)
307316 let newPoolAmount = (poolAmount - userAmountWithoutFee)
308317 let fee = (amount - userAmountWithoutFee)
309318 let newUserPoolAmount = (userAmount - amount)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let depositFee = 1000
55
66 let controllerFee = 10000
77
88 let platformFee = 10000
99
1010 let adminPubKey1 = base58'68Po1k24uP6goKr7RDmXPg4QkMiKuyTMEirao14rif8s'
1111
1212 let adminPubKey2 = base58'Bze4aurT9WmLgBT6swA9CajaZFtUwhtwCri6XGAjnAkt'
1313
1414 let adminPubKey3 = base58'ALsqwPqiUP3bVbM7grozc1Y5oHVBAGKqACRJ5J8RXceC'
1515
1616 let adminPubKey4 = base58'ALsqwPqiUP3bVbM7grozc1Y5oHVBAGKqACRJ5J8RXceC'
1717
1818 let govermanceAddress = Address(base58'3N7ExjwfofPYTvNBv2zqtAtLcMxqjTxS7iL')
19+
20+let depositType = "deposit"
21+
22+let withdrawType = "withdraw"
1923
2024 let farmingAddress = Address(base58'3NBTuZhn2CwAgWGL99qpGDjZQ4Wtbg56iDL')
2125
2226 let swopFiPools = ["3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1", "3PKy2mZqnvT2EtpwDim9Mgs6YvCRe4s85nX", "3P27S9V36kw2McjWRZ37AxTx8iwkd7HXw6W"]
2327
2428 let swopFiFunctions = ["replenishWithTwoTokens", "exchange"]
2529
2630 func isPoolActive (pool) = {
2731 let kActive = (pool + "_active")
2832 let isActive = match getBoolean(this, kActive) {
2933 case boolean: Boolean =>
3034 boolean
3135 case _ =>
3236 throw("Pool is not active!")
3337 }
3438 isActive
3539 }
3640
3741
3842 func getDAppAssetAddress (pool) = match getString((pool + "_service_token")) {
3943 case string: String =>
4044 string
4145 case nothing =>
4246 throw("You try to deposit on unsupported pool")
4347 }
4448
4549
4650 func getLiquidutyAssetAddress (pool) = match getString((pool + "_liquidity_token")) {
4751 case string: String =>
4852 string
4953 case nothing =>
5054 throw("You try to withdraw from unsupported pool")
5155 }
5256
5357
5458 func getStakedAmount (poolAddress) = match getInteger(farmingAddress, (((poolAddress + "_") + toString(this)) + "_share_tokens_locked")) {
5559 case staked: Int =>
5660 staked
5761 case nothing: Unit =>
5862 0
5963 case _ =>
6064 throw("Match error")
6165 }
6266
6367
64-func transferToUser (amount,assetId,poolAddress) = {
68+func transferToUser (amount,assetId,poolAddress,type) = {
6569 let dAppStakedTokens = getStakedAmount(poolAddress)
6670 let assetIdQuantity = match assetInfo(assetId) {
6771 case asset: Asset =>
6872 asset.quantity
6973 case _ =>
7074 throw("Can't find asset")
7175 }
7276 if ((dAppStakedTokens == 0))
7377 then amount
74- else {
75- let transferToUserAmount = fraction(amount, assetIdQuantity, dAppStakedTokens)
76- transferToUserAmount
77- }
78+ else if ((type == depositType))
79+ then {
80+ let transferToUserAmount = fraction(amount, assetIdQuantity, dAppStakedTokens)
81+ transferToUserAmount
82+ }
83+ else {
84+ let transferToUserAmount = fraction(amount, dAppStakedTokens, assetIdQuantity)
85+ transferToUserAmount
86+ }
7887 }
7988
8089
8190 @Callable(i)
8291 func addPools (pools,liquidityTokens,serviceTokens,liquidityTokenDecimals) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
8392 then {
8493 func generatePoolKeys (accumulated,pool) = IntegerEntry((pool + "_asset_balance"), 0) :: accumulated
8594
8695 func generatePoolLiquidityTokenKeys (accumulated,pool) = {
8796 let poolIndex = value(indexOf(pools, pool))
8897 let liquidityToken = liquidityTokens[poolIndex]
8998 StringEntry((pool + "_liquidity_token"), liquidityToken) :: accumulated
9099 }
91100
92101 func generatePoolServiceTokenKeys (accumulated,pool) = {
93102 let poolIndex = value(indexOf(pools, pool))
94103 let liquidityToken = serviceTokens[poolIndex]
95104 StringEntry((pool + "_service_token"), liquidityToken) :: accumulated
96105 }
97106
98107 func generatePoolLiquidityTokenDecimalKeys (accumulated,pool) = {
99108 let poolIndex = value(indexOf(pools, pool))
100109 let liquidityToken = liquidityTokenDecimals[poolIndex]
101110 IntegerEntry((pool + "_service_token_decimal"), liquidityToken) :: accumulated
102111 }
103112
104113 func generatePoolActiveKeys (accumulated,pool) = BooleanEntry((pool + "_active"), true) :: accumulated
105114
106115 let poolBalanceKeys = {
107116 let $l = pools
108117 let $s = size($l)
109118 let $acc0 = nil
110119 func $f0_1 ($a,$i) = if (($i >= $s))
111120 then $a
112121 else generatePoolKeys($a, $l[$i])
113122
114123 func $f0_2 ($a,$i) = if (($i >= $s))
115124 then $a
116125 else throw("List size exceeds 20")
117126
118127 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($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), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
119128 }
120129 let poolLiquidityTokenKeys = {
121130 let $l = pools
122131 let $s = size($l)
123132 let $acc0 = nil
124133 func $f1_1 ($a,$i) = if (($i >= $s))
125134 then $a
126135 else generatePoolLiquidityTokenKeys($a, $l[$i])
127136
128137 func $f1_2 ($a,$i) = if (($i >= $s))
129138 then $a
130139 else throw("List size exceeds 20")
131140
132141 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
133142 }
134143 let poolServiceTokenKeys = {
135144 let $l = pools
136145 let $s = size($l)
137146 let $acc0 = nil
138147 func $f2_1 ($a,$i) = if (($i >= $s))
139148 then $a
140149 else generatePoolServiceTokenKeys($a, $l[$i])
141150
142151 func $f2_2 ($a,$i) = if (($i >= $s))
143152 then $a
144153 else throw("List size exceeds 20")
145154
146155 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
147156 }
148157 let poolLiquidityTokenDecimalKeys = {
149158 let $l = pools
150159 let $s = size($l)
151160 let $acc0 = nil
152161 func $f3_1 ($a,$i) = if (($i >= $s))
153162 then $a
154163 else generatePoolLiquidityTokenDecimalKeys($a, $l[$i])
155164
156165 func $f3_2 ($a,$i) = if (($i >= $s))
157166 then $a
158167 else throw("List size exceeds 20")
159168
160169 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
161170 }
162171 let poolActiveKeys = {
163172 let $l = pools
164173 let $s = size($l)
165174 let $acc0 = nil
166175 func $f4_1 ($a,$i) = if (($i >= $s))
167176 then $a
168177 else generatePoolActiveKeys($a, $l[$i])
169178
170179 func $f4_2 ($a,$i) = if (($i >= $s))
171180 then $a
172181 else throw("List size exceeds 20")
173182
174183 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
175184 }
176185 ((((poolBalanceKeys ++ poolLiquidityTokenKeys) ++ poolServiceTokenKeys) ++ poolLiquidityTokenDecimalKeys) ++ poolActiveKeys)
177186 }
178187 else throw("Only admin can call this function")
179188
180189
181190
182191 @Callable(i)
183192 func deleteDepositLockRecords (records) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
184193 then {
185194 func generateDeletingKeys (accumulated,record) = DeleteEntry((record + "_locked")) :: accumulated
186195
187196 let deleteKeys = {
188197 let $l = records
189198 let $s = size($l)
190199 let $acc0 = nil
191200 func $f0_1 ($a,$i) = if (($i >= $s))
192201 then $a
193202 else generateDeletingKeys($a, $l[$i])
194203
195204 func $f0_2 ($a,$i) = if (($i >= $s))
196205 then $a
197206 else throw("List size exceeds 100")
198207
199208 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($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), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
200209 }
201210 deleteKeys
202211 }
203212 else throw("Only admin can call this function")
204213
205214
206215
207216 @Callable(i)
208217 func issueToken (name,description,quantity,decimals) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
209218 then [Issue(name, description, quantity, decimals, true, unit, 0)]
210219 else throw("Only admin can call this function")
211220
212221
213222
214223 @Callable(a8)
215224 func call () = [DeleteEntry("3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1_3N5viYFhnu1ew4FRZ9nujme9edr918FkT1a_current_reward")]
216225
217226
218227
219228 @Callable(i)
220229 func deposit (pool) = if ((size(i.payments) != 1))
221230 then throw("One attached payment expected")
222231 else {
223232 let amount = i.payments[0].amount
224233 let assetId = i.payments[0].assetId
225234 let assetIdString = match assetId {
226235 case id: ByteVector =>
227236 toBase58String(id)
228237 case _ =>
229238 throw("Match error")
230239 }
231240 if ((0 >= amount))
232241 then throw(("Deposit amount must be positive. Actual: " + toString(amount)))
233242 else {
234243 let poolAmountKey = (pool + "_asset_balance")
235244 let userAddress = toString(i.caller)
236245 let userPoolAmountKey = (((pool + "_") + userAddress) + "_asset_balance")
237246 let dAppAssetAddress = getDAppAssetAddress(pool)
238247 let liquidutyAssetAddress = match getString((pool + "_liquidity_token")) {
239248 case string: String =>
240249 string
241250 case nothing =>
242251 throw("You try to deposit on unsupported pool")
243252 }
244253 if (isPoolActive(pool))
245254 then {
246255 let liquidityTokenDecimal = match assetInfo(fromBase58String(liquidutyAssetAddress)) {
247256 case asset: Asset =>
248257 asset.decimals
249258 case _ =>
250259 throw("Can't find asset")
251260 }
252261 if ((liquidutyAssetAddress != assetIdString))
253262 then throw("You attached wrong liquidity token from Swop.fi")
254263 else {
255264 let poolAmount = getIntegerValue(this, poolAmountKey)
256265 let userAmount = match getInteger(userPoolAmountKey) {
257266 case int: Int =>
258267 int
259268 case nothing =>
260269 0
261270 }
262271 let userAmountWithoutFee = ((amount - fraction(amount, 1, depositFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
263- let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(dAppAssetAddress), pool)
272+ let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(dAppAssetAddress), pool, depositType)
264273 let fee = (amount - userAmountWithoutFee)
265274 let newPoolAmount = ((poolAmount + amount) - fee)
266275 let newUserPoolAmount = (userAmount + transferToUserAmount)
267276 let lockTokensKey = (((((pool + "_") + userAddress) + "_") + toBase58String(i.transactionId)) + "_locked")
268277 [Reissue(fromBase58String(dAppAssetAddress), transferToUserAmount, true), ScriptTransfer(i.caller, transferToUserAmount, fromBase58String(dAppAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(lockTokensKey, userAmountWithoutFee), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount)]
269278 }
270279 }
271280 else throw("Pool is not active!")
272281 }
273282 }
274283
275284
276285
277286 @Callable(i)
278287 func withdraw (pool) = if ((size(i.payments) != 1))
279288 then throw("One attached payment expected")
280289 else {
281290 let amount = i.payments[0].amount
282291 let assetId = i.payments[0].assetId
283292 let assetIdString = match assetId {
284293 case id: ByteVector =>
285294 toBase58String(id)
286295 case _ =>
287296 throw("Match error")
288297 }
289298 if ((0 >= amount))
290299 then throw(("Deposit amount must be positive. Actual: " + toString(amount)))
291300 else if (isPoolActive(pool))
292301 then {
293302 let poolAmountKey = (pool + "_asset_balance")
294303 let userAddress = toString(i.caller)
295304 let userPoolAmountKey = (((pool + "_") + userAddress) + "_asset_balance")
296305 let userAmount = match getInteger(userPoolAmountKey) {
297306 case int: Int =>
298307 int
299308 case nothing =>
300309 0
301310 }
302311 let dAppAssetAddress = getDAppAssetAddress(pool)
303312 let liquidutyAssetAddress = getLiquidutyAssetAddress(pool)
304313 let poolAmount = getIntegerValue(this, poolAmountKey)
305314 let userAmountWithoutFee = ((amount - fraction(amount, 1, platformFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
306- let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(assetIdString), pool)
315+ let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(assetIdString), pool, withdrawType)
307316 let newPoolAmount = (poolAmount - userAmountWithoutFee)
308317 let fee = (amount - userAmountWithoutFee)
309318 let newUserPoolAmount = (userAmount - amount)
310319 [Burn(fromBase58String(dAppAssetAddress), transferToUserAmount), ScriptTransfer(i.caller, transferToUserAmount, fromBase58String(liquidutyAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount)]
311320 }
312321 else throw("Pool is not active!")
313322 }
314323
315324
316325
317326 @Callable(i)
318327 func poolActivating (pools,statuses) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
319328 then {
320329 func generatePoolActiveKeys (accumulated,pool) = {
321330 let poolIndex = value(indexOf(pools, pool))
322331 let status = statuses[poolIndex]
323332 BooleanEntry((pool + "_active"), status) :: accumulated
324333 }
325334
326335 let poolActiveKeys = {
327336 let $l = pools
328337 let $s = size($l)
329338 let $acc0 = nil
330339 func $f0_1 ($a,$i) = if (($i >= $s))
331340 then $a
332341 else generatePoolActiveKeys($a, $l[$i])
333342
334343 func $f0_2 ($a,$i) = if (($i >= $s))
335344 then $a
336345 else throw("List size exceeds 100")
337346
338347 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($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), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
339348 }
340349 poolActiveKeys
341350 }
342351 else throw("Only admin can call this function")
343352
344353
345354 @Verifier(tx)
346355 func verify () = match tx {
347356 case inv: InvokeScriptTransaction =>
348357 let lockShareTokens = if ((inv.dApp == farmingAddress))
349358 then if (if ((inv.function == "lockShareTokens"))
350359 then true
351360 else (inv.function == "claim"))
352361 then true
353362 else (inv.function == "withdrawShareTokens")
354363 else false
355364 let dAppAddress = match inv.dApp {
356365 case dApp: Address =>
357366 toString(dApp)
358367 case _ =>
359368 throw("Transaction must have only address")
360369 }
361370 let poolFunctions = if (containsElement(swopFiPools, dAppAddress))
362371 then containsElement(swopFiFunctions, inv.function)
363372 else false
364373 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
365374 then true
366375 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
367376 then true
368377 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey4))
369378 then true
370379 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
371380 if (if (lockShareTokens)
372381 then true
373382 else poolFunctions)
374383 then signedByAdmin
375384 else false
376385 case _ =>
377386 let adm1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
378387 then 1
379388 else 0
380389 let adm2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
381390 then 1
382391 else 0
383392 let adm3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
384393 then 1
385394 else 0
386395 (((adm1Signed + adm2Signed) + adm3Signed) >= 2)
387396 }
388397

github/deemru/w8io/03bedc9 
65.28 ms