tx · F8nTKySWeVnKND6Bu5ni6jf9ACcQi1PwhLTi9xUQP2aT 3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo: -0.14000000 Waves 2022.06.26 11:36 [3178762] smart account 3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo > SELF 0.00000000 Waves
{ "type": 13, "id": "F8nTKySWeVnKND6Bu5ni6jf9ACcQi1PwhLTi9xUQP2aT", "fee": 14000000, "feeAssetId": null, "timestamp": 1656233094711, "version": 1, "sender": "3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo", "senderPublicKey": "BRnVwSVctnV8pge5vRpsJdWnkjWEJspFb6QvrmZvu3Ht", "proofs": [ "5VEVnTUQAHEkUtujYwEamnNyNgCmSMs5j1hcwkLt5vkm5zoXYZtkVDjeyrtZAUXrSESQbVSvtgyuusrkfbBYprxZ", "2UGLHJ2NVijv2Cu9mUcF4EHEXnkeGhnuJx7BsHyXRSKrvWnjnTcCyJTDUqNAgCmCzj4bauJqvAy58HiiHWSNSNgY", "5QL7Mz5y6oSSgtg7MLS6HZU7ZbEc2oZzRejsVPzuLcbmkBbiUbxmph5mg1kk1FSKsVrNVKWMi3SLa4TADiveGeHh", "44JK3pu5Gk69xSeiy3NmFchcVXSCRtwFJDzcwUpwjoupTZgh9NqfgDKZPGLgYiW8Sz93K6MUQ1uUVo3huZ6sxx9b" ], "script": "base64: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ZXRBbW91bnQAAAAAAAAAAAAAAAAADElkeEZlZUFtb3VudAAAAAAAAAAAAQAAAAAOSWR4R3Jvc3NBbW91bnQAAAAAAAAAAAIAAAAAEk5ldXRyaW5vQXNzZXRJZEtleQIAAAARbmV1dHJpbm9fYXNzZXRfaWQAAAAADkJvbmRBc3NldElkS2V5AgAAAA1ib25kX2Fzc2V0X2lkAAAAABJBdWN0aW9uQ29udHJhY3RLZXkCAAAAEGF1Y3Rpb25fY29udHJhY3QAAAAAFk5zYnRTdGFraW5nQ29udHJhY3RLZXkCAAAAE25zYnRTdGFraW5nQ29udHJhY3QAAAAAFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkCAAAAFGxpcXVpZGF0aW9uX2NvbnRyYWN0AAAAAA5SUERDb250cmFjdEtleQIAAAAMcnBkX2NvbnRyYWN0AAAAABFDb250b2xDb250cmFjdEtleQIAAAAQY29udHJvbF9jb250cmFjdAAAAAAPTWF0aENvbnRyYWN0S2V5AgAAAA1tYXRoX2NvbnRyYWN0AAAAABtCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxLZXkCAAAAG2JhbGFuY2Vfd2F2ZXNfbG9ja19pbnRlcnZhbAAAAAAeQmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsS2V5AgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwAAAAAFU1pbldhdmVzU3dhcEFtb3VudEtleQIAAAAVbWluX3dhdmVzX3N3YXBfYW1vdW50AAAAABhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkCAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAAAAAAbTm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5S2V5AgAAABRub2RlX29yYWNsZV9wcm92aWRlcgAAAAAVTmV1dHJpbm9PdXRGZWVQYXJ0S2V5AgAAABhuZXV0cmlub091dF9zd2FwX2ZlZVBhcnQAAAAAEldhdmVzT3V0RmVlUGFydEtleQIAAAAVd2F2ZXNPdXRfc3dhcF9mZWVQYXJ0AAAAABVGZWVzTWFuYWdlckFkZHJlc3NLZXkCAAAAFGZlZXNfbWFuYWdlcl9hZGRyZXNzAQAAAA9rZXlOb2RlUmVnaXN0cnkAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgIAAAAEJXNfXwUAAAAHYWRkcmVzcwAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAAA1QcmljZUluZGV4S2V5AgAAAAtwcmljZV9pbmRleAAAAAAMSXNCbG9ja2VkS2V5AgAAAAppc19ibG9ja2VkAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAGGdldEhlaWdodFByaWNlQnlJbmRleEtleQAAAAEAAAAFaW5kZXgJAAEsAAAAAgkAASwAAAACBQAAAA1QcmljZUluZGV4S2V5AgAAAAFfCQABpAAAAAEFAAAABWluZGV4AQAAABVnZXRTdGFraW5nTm9kZUJ5SW5kZXgAAAABAAAAA2lkeAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkABLkAAAACCQAETAAAAAICAAAABiVzJWQlcwkABEwAAAACAgAAAAVsZWFzZQkABEwAAAACCQABpAAAAAEFAAAAA2lkeAkABEwAAAACAgAAAAtub2RlQWRkcmVzcwUAAAADbmlsBQAAAANTRVABAAAAHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgAAAABAAAAA2lkeAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAFWdldFN0YWtpbmdOb2RlQnlJbmRleAAAAAEFAAAAA2lkeAEAAAAfZ2V0UmVzZXJ2ZWRBbW91bnRGb3JTcG9uc29yc2hpcAAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkABLkAAAACCQAETAAAAAICAAAABCVzJXMJAARMAAAAAgIAAAAFbGVhc2UJAARMAAAAAgIAAAAXc3BvbnNvcnNoaXBXYXZlc1Jlc2VydmUFAAAAA25pbAUAAAADU0VQCQAAaAAAAAIAAAAAAAAAA+gFAAAAB1dBVkVMRVQBAAAAGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQAAAAEAAAAFb3duZXIJAAEsAAAAAgIAAAAVYmFsYW5jZV91bmxvY2tfYmxvY2tfBQAAAAVvd25lcgEAAAANZ2V0TGVhc2VJZEtleQAAAAEAAAAJbm9kZUluZGV4CQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlZCVzCQAETAAAAAICAAAABWxlYXNlCQAETAAAAAIJAAGkAAAAAQUAAAAJbm9kZUluZGV4CQAETAAAAAICAAAAAmlkBQAAAANuaWwFAAAAA1NFUAEAAAAWZ2V0TGVhc2VJZEJ5QWRkcmVzc0tleQAAAAEAAAALbm9kZUFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgIAAAAObGVhc2VCeUFkZHJlc3MJAARMAAAAAgUAAAALbm9kZUFkZHJlc3MJAARMAAAAAgIAAAACaWQFAAAAA25pbAUAAAADU0VQAQAAABFnZXRMZWFzZUFtb3VudEtleQAAAAEAAAAJbm9kZUluZGV4CQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlZCVzCQAETAAAAAICAAAABWxlYXNlCQAETAAAAAIJAAGkAAAAAQUAAAAJbm9kZUluZGV4CQAETAAAAAICAAAABmFtb3VudAUAAAADbmlsBQAAAANTRVABAAAAGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AAAAAQAAAAtub2RlQWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAABiVzJXMlcwkABEwAAAACAgAAAA5sZWFzZUJ5QWRkcmVzcwkABEwAAAACBQAAAAtub2RlQWRkcmVzcwkABEwAAAACAgAAAAZhbW91bnQFAAAAA25pbAUAAAADU0VQAQAAABhnZXRMZWFzZUdyb3VwTm9kZUxpc3RLZXkAAAABAAAACGdyb3VwTnVtCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlZCVzCQAETAAAAAICAAAACmxlYXNlR3JvdXAJAARMAAAAAgkAAaQAAAABBQAAAAhncm91cE51bQkABEwAAAACAgAAAAhub2RlTGlzdAUAAAADbmlsBQAAAANTRVABAAAAEG1pblN3YXBBbW91bnRLRVkAAAABAAAACHN3YXBUeXBlCQABLAAAAAIJAAEsAAAAAgIAAAAEbWluXwUAAAAIc3dhcFR5cGUCAAAADF9zd2FwX2Ftb3VudAEAAAAOdG90YWxMb2NrZWRLRVkAAAABAAAACHN3YXBUeXBlCQABLAAAAAICAAAADWJhbGFuY2VfbG9ja18FAAAACHN3YXBUeXBlAQAAABR0b3RhbExvY2tlZEJ5VXNlcktFWQAAAAIAAAAIc3dhcFR5cGUAAAAFb3duZXIJAAS5AAAAAgkABEwAAAACAgAAAAxiYWxhbmNlX2xvY2sJAARMAAAAAgUAAAAIc3dhcFR5cGUJAARMAAAAAgUAAAAFb3duZXIFAAAAA25pbAIAAAABXwEAAAAWYmFsYW5jZUxvY2tJbnRlcnZhbEtFWQAAAAEAAAAIc3dhcFR5cGUJAAEsAAAAAgkAASwAAAACAgAAAAhiYWxhbmNlXwUAAAAIc3dhcFR5cGUCAAAADl9sb2NrX2ludGVydmFsAQAAABpub2RlQmFsYW5jZUxvY2tJbnRlcnZhbEtFWQAAAAACAAAAGmJhbGFuY2Vfbm9kZV9sb2NrX2ludGVydmFsAQAAAA1vdXRGZWVQYXJ0S0VZAAAAAQAAAAhzd2FwVHlwZQkAASwAAAACBQAAAAhzd2FwVHlwZQIAAAAQT3V0X3N3YXBfZmVlUGFydAEAAAARc3dhcHNUaW1lZnJhbWVLRVkAAAAAAgAAAA9zd2Fwc190aW1lZnJhbWUBAAAAEW1pblN3YXBBbW91bnRSRUFEAAAAAQAAAAhzd2FwVHlwZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAQbWluU3dhcEFtb3VudEtFWQAAAAEFAAAACHN3YXBUeXBlAAAAAAAAAAAAAQAAABJzd2Fwc1RpbWVmcmFtZVJFQUQAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABFzd2Fwc1RpbWVmcmFtZUtFWQAAAAAAAAAAAAAABaABAAAAD3RvdGFsTG9ja2VkUkVBRAAAAAEAAAAIc3dhcFR5cGUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAADnRvdGFsTG9ja2VkS0VZAAAAAQUAAAAIc3dhcFR5cGUAAAAAAAAAAAABAAAAFXRvdGFsTG9ja2VkQnlVc2VyUkVBRAAAAAIAAAAIc3dhcFR5cGUAAAAFb3duZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFHRvdGFsTG9ja2VkQnlVc2VyS0VZAAAAAgUAAAAIc3dhcFR5cGUFAAAABW93bmVyAAAAAAAAAAAAAQAAABdiYWxhbmNlTG9ja0ludGVydmFsUkVBRAAAAAEAAAAIc3dhcFR5cGUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmJhbGFuY2VMb2NrSW50ZXJ2YWxLRVkAAAABBQAAAAhzd2FwVHlwZQAAAAAAAAAFoAEAAAAbbm9kZUJhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAabm9kZUJhbGFuY2VMb2NrSW50ZXJ2YWxLRVkAAAAAAAAAAAAAAAABAQAAABhrZXlTd2FwVXNlclNwZW50SW5QZXJpb2QAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAABVzd2FwVXNlclNwZW50SW5QZXJpb2QJAARMAAAAAgUAAAALdXNlckFkZHJlc3MFAAAAA25pbAUAAAADU0VQAQAAABVrZXlVc2VyTGFzdFN3YXBIZWlnaHQAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAABJ1c2VyTGFzdFN3YXBIZWlnaHQJAARMAAAAAgUAAAALdXNlckFkZHJlc3MFAAAAA25pbAUAAAADU0VQAQAAABVmZWVNYW5hZ2VyQWRkcmVzc1JFQUQAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAFUZlZXNNYW5hZ2VyQWRkcmVzc0tleQkAASwAAAACBQAAABVGZWVzTWFuYWdlckFkZHJlc3NLZXkCAAAAESBpcyBub3Qgc3BlY2lmaWVkCQABLAAAAAIFAAAAFUZlZXNNYW5hZ2VyQWRkcmVzc0tleQIAAAAXIGludmFsaWQgYWRkcmVzcyBmb3JtYXQBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGsAAAADCQAAawAAAAMFAAAABmFtb3VudAUAAAAIUFJJQ0VMRVQFAAAABXByaWNlBQAAAAdXQVZFTEVUBQAAAAVQQVVMSQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIAAAAGYW1vdW50AAAABXByaWNlCQAAawAAAAMJAABrAAAAAwUAAAAGYW1vdW50BQAAAAVwcmljZQUAAAAIUFJJQ0VMRVQFAAAABVBBVUxJBQAAAAdXQVZFTEVUAQAAABJjb252ZXJ0V2F2ZXNUb0JvbmQAAAACAAAABmFtb3VudAAAAAVwcmljZQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAZhbW91bnQFAAAABXByaWNlAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQAAAAlqc29uQXJyYXkJAAS1AAAAAgUAAAAJanNvbkFycmF5AgAAAAEsAQAAABFtaW5Td2FwQW1vdW50RkFJTAAAAAIAAAAIc3dhcFR5cGUAAAANbWluU3dhcEFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABhUaGUgc3BlY2lmaWVkIGFtb3VudCBpbiAFAAAACHN3YXBUeXBlAgAAACsgc3dhcCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVpcmVkIG1pbmltdW0gb2YgCQABpAAAAAEFAAAADW1pblN3YXBBbW91bnQBAAAAFWVtZXJnZW5jeVNodXRkb3duRkFJTAAAAAAJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAQAAAA5wcmljZUluZGV4RkFJTAAAAAUAAAAFaW5kZXgAAAAKcHJpY2VJbmRleAAAAAtpbmRleEhlaWdodAAAAAx1bmxvY2tIZWlnaHQAAAAPcHJldkluZGV4SGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI2ludmFsaWQgcHJpY2UgaGlzdG9yeSBpbmRleDogaW5kZXg9CQABpAAAAAEFAAAABWluZGV4AgAAAAwgcHJpY2VJbmRleD0JAAGkAAAAAQUAAAAKcHJpY2VJbmRleAIAAAANIGluZGV4SGVpZ2h0PQkAAaQAAAABBQAAAAtpbmRleEhlaWdodAIAAAAOIHVubG9ja0hlaWdodD0JAAGkAAAAAQUAAAAMdW5sb2NrSGVpZ2h0AgAAABEgcHJldkluZGV4SGVpZ2h0PQkAAaQAAAABBQAAAA9wcmV2SW5kZXhIZWlnaHQAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkAAAAAFm5zYnRTdGFraW5nQ29udHJhY3RTdHIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAFk5zYnRTdGFraW5nQ29udHJhY3RLZXkAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABJOZXV0cmlub0Fzc2V0SWRLZXkAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASQXVjdGlvbkNvbnRyYWN0S2V5AAAAAAtycGRDb250cmFjdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAOUlBEQ29udHJhY3RLZXkAAAAAEmNvbnRyb2xDb250cmFjdFN0cgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAARQ29udG9sQ29udHJhY3RLZXkAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAASY29udHJvbENvbnRyYWN0U3RyAAAAABNtYXRoQ29udHJhY3RBZGRyZXNzCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA9NYXRoQ29udHJhY3RLZXkAAAAACnByaWNlSW5kZXgJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAABJjb250cm9sQ29udHJhY3RTdHIFAAAADVByaWNlSW5kZXhLZXkAAAAACWlzQmxvY2tlZAkBAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACBQAAABJjb250cm9sQ29udHJhY3RTdHIFAAAADElzQmxvY2tlZEtleQAAAAAYbm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5CQACWQAAAAEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAG05vZGVPcmFjbGVQcm92aWRlclB1YktleUtleQAAAAALYm9uZEFzc2V0SWQJAAJZAAAAAQIAAAAsNm5TcFZ5Tkg3eU02OWVnNDQ2d3JRUjk0aXBiYmNtWk1VMUVOUHdhbkM5N2cAAAAAFWRlcHJlY2F0ZWRCb25kQXNzZXRJZAkAAlkAAAABAgAAACw5NzVha1pCZm5NajUxM1U3TVphSEt6UXJtc0V4NWFFM3dkV0tUckhCaGJqRgAAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAEdGhpcwAAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABNtYXRoQ29udHJhY3RBZGRyZXNzAAAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABZuc2J0U3Rha2luZ0NvbnRyYWN0U3RyAAAAAAxjdXJyZW50UHJpY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAABJjb250cm9sQ29udHJhY3RTdHIFAAAACFByaWNlS2V5AQAAABtjaGVja0lzVmFsaWRNaW5TcG9uc29yZWRGZWUAAAABAAAAAnR4BAAAAA5NSU5UUkFOU0ZFUkZFRQAAAAAAAAGGoAQAAAAWU3BvbnNvcmVkRmVlVXBwZXJCb3VuZAAAAAAAAAAD6AQAAAAPcmVhbE5ldXRyaW5vRmVlCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAADk1JTlRSQU5TRkVSRkVFBQAAAAxjdXJyZW50UHJpY2UEAAAADm1pbk5ldXRyaW5vRmVlCQAAaAAAAAIFAAAAD3JlYWxOZXV0cmlub0ZlZQAAAAAAAAAAAgQAAAAObWF4TmV1dHJpbm9GZWUJAABrAAAAAwUAAAAPcmVhbE5ldXRyaW5vRmVlBQAAABZTcG9uc29yZWRGZWVVcHBlckJvdW5kAAAAAAAAAABkBAAAAAhpbnB1dEZlZQkBAAAABXZhbHVlAAAAAQgFAAAAAnR4AAAAFG1pblNwb25zb3JlZEFzc2V0RmVlAwMJAABnAAAAAgUAAAAIaW5wdXRGZWUFAAAADm1pbk5ldXRyaW5vRmVlCQAAZwAAAAIFAAAADm1heE5ldXRyaW5vRmVlBQAAAAhpbnB1dEZlZQcJAAAAAAAAAggFAAAAAnR4AAAAB2Fzc2V0SWQFAAAAD25ldXRyaW5vQXNzZXRJZAcBAAAAD2dldFByaWNlSGlzdG9yeQAAAAEAAAAFYmxvY2sJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAABJjb250cm9sQ29udHJhY3RTdHIJAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABBQAAAAVibG9jawEAAAAVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AAAAAQAAAAVpbmRleAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAEmNvbnRyb2xDb250cmFjdFN0cgkBAAAAGGdldEhlaWdodFByaWNlQnlJbmRleEtleQAAAAEFAAAABWluZGV4AQAAABZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AAAAAQAAAAt1c2VyQWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAABiVzJXMlcwkABEwAAAACAgAAAAtwYXJhbUJ5VXNlcgkABEwAAAACBQAAAAt1c2VyQWRkcmVzcwkABEwAAAACAgAAAAZhbW91bnQFAAAAA25pbAUAAAADU0VQAAAAAAxzSWR4U3dhcFR5cGUAAAAAAAAAAAEAAAAACnNJZHhTdGF0dXMAAAAAAAAAAAIAAAAADHNJZHhJbkFtb3VudAAAAAAAAAAAAwAAAAAJc0lkeFByaWNlAAAAAAAAAAAEAAAAABBzSWR4T3V0TmV0QW1vdW50AAAAAAAAAAAFAAAAABBzSWR4T3V0RmVlQW1vdW50AAAAAAAAAAAGAAAAAA9zSWR4U3RhcnRIZWlnaHQAAAAAAAAAAAcAAAAAEnNJZHhTdGFydFRpbWVzdGFtcAAAAAAAAAAACAAAAAANc0lkeEVuZEhlaWdodAAAAAAAAAAACQAAAAAQc0lkeEVuZFRpbWVzdGFtcAAAAAAAAAAACgAAAAAUc0lkeFNlbGZVbmxvY2tIZWlnaHQAAAAAAAAAAAsAAAAAFHNJZHhSYW5kVW5sb2NrSGVpZ2h0AAAAAAAAAAAMAAAAAAlzSWR4SW5kZXgAAAAAAAAAAA0AAAAAEHNJZHhXaXRoZHJhd1R4SWQAAAAAAAAAAA4AAAAAC3NJZHhNaW5SYW5kAAAAAAAAAAAPAAAAAAtzSWR4TWF4UmFuZAAAAAAAAAAAEAEAAAAHc3dhcEtFWQAAAAIAAAALdXNlckFkZHJlc3MAAAAEdHhJZAkABLkAAAACCQAETAAAAAICAAAABCVzJXMJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgUAAAAEdHhJZAUAAAADbmlsBQAAAANTRVABAAAAC3N0clN3YXBEQVRBAAAAEAAAAAhzd2FwVHlwZQAAAAZzdGF0dXMAAAAIaW5BbW91bnQAAAAFcHJpY2UAAAAMb3V0TmV0QW1vdW50AAAADG91dEZlZUFtb3VudAAAAAtzdGFydEhlaWdodAAAAA5zdGFydFRpbWVzdGFtcAAAAAllbmRIZWlnaHQAAAAMZW5kVGltZXN0YW1wAAAAEHNlbGZVbmxvY2tIZWlnaHQAAAAQcmFuZFVubG9ja0hlaWdodAAAAAVpbmRleAAAAAx3aXRoZHJhd1R4SWQAAAAHcmFuZE1pbgAAAAdyYW5kTWF4CQAEuQAAAAIJAARMAAAAAgIAAAAcJXMlcyVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlcwkABEwAAAACBQAAAAhzd2FwVHlwZQkABEwAAAACBQAAAAZzdGF0dXMJAARMAAAAAgUAAAAIaW5BbW91bnQJAARMAAAAAgUAAAAFcHJpY2UJAARMAAAAAgUAAAAMb3V0TmV0QW1vdW50CQAETAAAAAIFAAAADG91dEZlZUFtb3VudAkABEwAAAACBQAAAAtzdGFydEhlaWdodAkABEwAAAACBQAAAA5zdGFydFRpbWVzdGFtcAkABEwAAAACBQAAAAllbmRIZWlnaHQJAARMAAAAAgUAAAAMZW5kVGltZXN0YW1wCQAETAAAAAIFAAAAEHNlbGZVbmxvY2tIZWlnaHQJAARMAAAAAgUAAAAQcmFuZFVubG9ja0hlaWdodAkABEwAAAACBQAAAAVpbmRleAkABEwAAAACBQAAAAx3aXRoZHJhd1R4SWQJAARMAAAAAgUAAAAHcmFuZE1pbgkABEwAAAACBQAAAAdyYW5kTWF4BQAAAANuaWwFAAAAA1NFUAEAAAAPcGVuZGluZ1N3YXBEQVRBAAAAAwAAAAhzd2FwVHlwZQAAAA1pbkFzc2V0QW1vdW50AAAAEHNlbGZVbmxvY2tIZWlnaHQJAQAAAAtzdHJTd2FwREFUQQAAABAFAAAACHN3YXBUeXBlAgAAAAdQRU5ESU5HCQABpAAAAAEFAAAADWluQXNzZXRBbW91bnQCAAAAATACAAAAATACAAAAATAJAAGkAAAAAQUAAAAGaGVpZ2h0CQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAgAAAAEwAgAAAAEwCQABpAAAAAEFAAAAEHNlbGZVbmxvY2tIZWlnaHQCAAAAATACAAAAATACAAAABE5VTEwCAAAAATACAAAAATABAAAADmZpbmlzaFN3YXBEQVRBAAAABwAAAAlkYXRhQXJyYXkAAAAFcHJpY2UAAAAMb3V0TmV0QW1vdW50AAAADG91dEZlZUFtb3VudAAAABByYW5kVW5sb2NrSGVpZ2h0AAAABWluZGV4AAAADHdpdGhkcmF3VHhJZAkBAAAAC3N0clN3YXBEQVRBAAAAEAkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAADHNJZHhTd2FwVHlwZQIAAAAIRklOSVNIRUQJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAAAxzSWR4SW5BbW91bnQJAAGkAAAAAQUAAAAFcHJpY2UJAAGkAAAAAQUAAAAMb3V0TmV0QW1vdW50CQABpAAAAAEFAAAADG91dEZlZUFtb3VudAkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAD3NJZHhTdGFydEhlaWdodAkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAEnNJZHhTdGFydFRpbWVzdGFtcAkAAaQAAAABBQAAAAZoZWlnaHQJAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABRzSWR4U2VsZlVubG9ja0hlaWdodAkAAaQAAAABBQAAABByYW5kVW5sb2NrSGVpZ2h0CQABpAAAAAEFAAAABWluZGV4BQAAAAx3aXRoZHJhd1R4SWQJAAGRAAAA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CQEAAAALTGVhc2VDYW5jZWwAAAABCQEAAAAFdmFsdWUAAAABBQAAAAhvbGRMZWFzZQUAAAADbmlsBQAAAANuaWwEAAAADmxlYXNlQW1vdW50S2V5CQEAAAARZ2V0TGVhc2VBbW91bnRLZXkAAAABBQAAAAlub2RlSW5kZXgEAAAABWxlYXNlCQAERAAAAAIJAQAAABxnZXRTdGFraW5nTm9kZUFkZHJlc3NCeUluZGV4AAAAAQUAAAAJbm9kZUluZGV4BQAAAA5uZXdMZWFzZUFtb3VudAkABE4AAAACBQAAAA51bmxlYXNlT3JFbXB0eQkABEwAAAACBQAAAAVsZWFzZQkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACBQAAAApsZWFzZUlkS2V5CQEAAAAFbGNhbGMAAAABBQAAAAVsZWFzZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldExlYXNlQW1vdW50S2V5AAAAAQUAAAAJbm9kZUluZGV4BQAAAA5uZXdMZWFzZUFtb3VudAUAAAADbmlsBQAAAANuaWwBAAAADHJlYWROb2RlSW5mbwAAAAEAAAAHbm9kZUlkeAQAAAALbm9kZUFkZHJlc3MJAQAAABxnZXRTdGFraW5nTm9kZUFkZHJlc3NCeUluZGV4AAAAAQUAAAAHbm9kZUlkeAQAAAAMbGVhc2VkQW10S0VZCQEAAAARZ2V0TGVhc2VBbW91bnRLZXkAAAABBQAAAAdub2RlSWR4BAAAAAlsZWFzZWRBbXQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAADGxlYXNlZEFtdEtFWQQAAAAKbGVhc2VJZEtFWQkBAAAADWdldExlYXNlSWRLZXkAAAABBQAAAAdub2RlSWR4BAAAAAdsZWFzZUlkCQEAAAAFdmFsdWUAAAABCQAEHAAAAAIFAAAABHRoaXMFAAAACmxlYXNlSWRLRVkJAAUXAAAABQUAAAALbm9kZUFkZHJlc3MFAAAADGxlYXNlZEFtdEtFWQUAAAAJbGVhc2VkQW10BQAAAApsZWFzZUlkS0VZBQAAAAdsZWFzZUlkAQAAAApjb21tb25Td2FwAAAABQAAAAhzd2FwVHlwZQAAAAlwbXRBbW91bnQAAAAOdXNlckFkZHJlc3NTdHIAAAAGdHhJZDU4AAAAG3N3YXBQYXJhbXNCeVVzZXJTWVNSRUFET05MWQQAAAANJHQwMTY2NDkxNjcyOQUAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZBAAAAAxzd2FwTGltaXRNYXgIBQAAAA0kdDAxNjY0OTE2NzI5AAAAAl8xBAAAAA5zd2FwTGltaXRTcGVudAgFAAAADSR0MDE2NjQ5MTY3MjkAAAACXzIEAAAADmJsY2tzMkxtdFJlc2V0CAUAAAANJHQwMTY2NDkxNjcyOQAAAAJfMwQAAAANbWluU3dhcEFtb3VudAkBAAAAEW1pblN3YXBBbW91bnRSRUFEAAAAAQUAAAAIc3dhcFR5cGUEAAAAC3RvdGFsTG9ja2VkCQEAAAAPdG90YWxMb2NrZWRSRUFEAAAAAQUAAAAIc3dhcFR5cGUEAAAAEXRvdGFsTG9ja2VkQnlVc2VyCQEAAAAVdG90YWxMb2NrZWRCeVVzZXJSRUFEAAAAAgUAAAAIc3dhcFR5cGUFAAAADnVzZXJBZGRyZXNzU3RyBAAAAAtub2RlQWRkcmVzcwkBAAAAFWdldFN0YWtpbmdOb2RlQnlJbmRleAAAAAEAAAAAAAAAAAAEAAAADHByaWNlQnlJbmRleAkBAAAAD2dldFByaWNlSGlzdG9yeQAAAAEJAQAAABVnZXRIZWlnaHRQcmljZUJ5SW5kZXgAAAABBQAAAApwcmljZUluZGV4BAAAAAxpc1N3YXBCeU5vZGUJAAAAAAAAAgUAAAALbm9kZUFkZHJlc3MFAAAADnVzZXJBZGRyZXNzU3RyBAAAABZiYWxhbmNlTG9ja01heEludGVydmFsAwUAAAAMaXNTd2FwQnlOb2RlCQEAAAAbbm9kZUJhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAAAAAAkBAAAAF2JhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAAAAAQUAAAAIc3dhcFR5cGUEAAAAEHNlbGZVbmxvY2tIZWlnaHQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABZiYWxhbmNlTG9ja01heEludGVydmFsBAAAAA5zd2FwVXNkblZvbHVtZQMJAAAAAAAAAgUAAAAIc3dhcFR5cGUCAAAACG5ldXRyaW5vBQAAAAlwbXRBbW91bnQJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAJcG10QW1vdW50BQAAAAxwcmljZUJ5SW5kZXgDCQAAZgAAAAIFAAAADW1pblN3YXBBbW91bnQFAAAACXBtdEFtb3VudAkBAAAAEW1pblN3YXBBbW91bnRGQUlMAAAAAgUAAAAIc3dhcFR5cGUFAAAADW1pblN3YXBBbW91bnQDAwkBAAAAASEAAAABBQAAAAxpc1N3YXBCeU5vZGUJAABmAAAAAgUAAAAOc3dhcExpbWl0U3BlbnQAAAAAAAAAAAAHCQAAAgAAAAEJAAEsAAAAAgIAAAA6WW91IGhhdmUgZXhjZWVkZWQgc3dhcCBsaW1pdCEgTmV4dCBhbGxvd2VkIHN3YXAgaGVpZ2h0IGlzIAkAAaQAAAABCQAAZAAAAAIFAAAABmhlaWdodAUAAAAOYmxja3MyTG10UmVzZXQDAwkBAAAAASEAAAABBQAAAAxpc1N3YXBCeU5vZGUJAABmAAAAAgUAAAAOc3dhcFVzZG5Wb2x1bWUFAAAADHN3YXBMaW1pdE1heAcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAuWW91IGhhdmUgZXhjZWVkZWQgeW91ciBzd2FwIGxpbWl0ISBSZXF1ZXN0ZWQ6IAkAAaQAAAABBQAAAA5zd2FwVXNkblZvbHVtZQIAAAANLCBhdmFpbGFibGU6IAkAAaQAAAABBQAAAAxzd2FwTGltaXRNYXgDBQAAAAlpc0Jsb2NrZWQJAQAAABVlbWVyZ2VuY3lTaHV0ZG93bkZBSUwAAAAABAAAAAlsZWFzZVBhcnQDCQAAAAAAAAIFAAAACHN3YXBUeXBlAgAAAAV3YXZlcwkBAAAAFnByZXBhcmVVbmxlYXNlQW5kTGVhc2UAAAABAAAAAAAAAAAABQAAAANuaWwJAAUUAAAAAgkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAYa2V5U3dhcFVzZXJTcGVudEluUGVyaW9kAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIFAAAADnN3YXBVc2RuVm9sdW1lCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVa2V5VXNlckxhc3RTd2FwSGVpZ2h0AAAAAQUAAAAOdXNlckFkZHJlc3NTdHIFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFHRvdGFsTG9ja2VkQnlVc2VyS0VZAAAAAgUAAAAIc3dhcFR5cGUFAAAADnVzZXJBZGRyZXNzU3RyCQAAZAAAAAIFAAAAEXRvdGFsTG9ja2VkQnlVc2VyBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAQc2VsZlVubG9ja0hlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvdGFsTG9ja2VkS0VZAAAAAQUAAAAIc3dhcFR5cGUJAABkAAAAAgUAAAALdG90YWxMb2NrZWQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAHc3dhcEtFWQAAAAIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAZ0eElkNTgJAQAAAA9wZW5kaW5nU3dhcERBVEEAAAADBQAAAAhzd2FwVHlwZQUAAAAJcG10QW1vdW50BQAAABBzZWxmVW5sb2NrSGVpZ2h0BQAAAANuaWwFAAAACWxlYXNlUGFydAUAAAAEdW5pdAEAAAAOY29tbW9uV2l0aGRyYXcAAAAEAAAAB2FjY291bnQAAAAFaW5kZXgAAAAIc3dhcFR4SWQAAAAMd2l0aGRyYXdUeElkBAAAAAt1c2VyQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAHYWNjb3VudAQAAAARZmVlTWFuYWdlckFkZHJlc3MJAQAAABVmZWVNYW5hZ2VyQWRkcmVzc1JFQUQAAAAABAAAAAlkYXRhQXJyYXkJAQAAABJzd2FwRGF0YUZhaWxPclJFQUQAAAACBQAAAAdhY2NvdW50BQAAAAhzd2FwVHhJZAQAAAAQc2VsZlVubG9ja0hlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAAUc0lkeFNlbGZVbmxvY2tIZWlnaHQEAAAACHN3YXBUeXBlCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAAMc0lkeFN3YXBUeXBlBAAAAAhpbkFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAAMc0lkeEluQW1vdW50BAAAAApzd2FwU3RhdHVzCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAAKc0lkeFN0YXR1cwQAAAALc3RhcnRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAD3NJZHhTdGFydEhlaWdodAQAAAAKb3V0RmVlUGFydAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAANb3V0RmVlUGFydEtFWQAAAAEFAAAACHN3YXBUeXBlBQAAAA5ERUZBVUxUU1dBUEZFRQQAAAALdG90YWxMb2NrZWQJAQAAAA90b3RhbExvY2tlZFJFQUQAAAABBQAAAAhzd2FwVHlwZQQAAAARdG90YWxMb2NrZWRCeVVzZXIJAQAAABV0b3RhbExvY2tlZEJ5VXNlclJFQUQAAAACBQAAAAhzd2FwVHlwZQUAAAAHYWNjb3VudAQAAAAMdW5sb2NrSGVpZ2h0BQAAABBzZWxmVW5sb2NrSGVpZ2h0BAAAAAtpbmRleEhlaWdodAkBAAAAFWdldEhlaWdodFByaWNlQnlJbmRleAAAAAEFAAAABWluZGV4BAAAAA9wcmV2SW5kZXhIZWlnaHQJAQAAABVnZXRIZWlnaHRQcmljZUJ5SW5kZXgAAAABCQAAZQAAAAIFAAAABWluZGV4AAAAAAAAAAABBAAAAAxwcmljZUJ5SW5kZXgJAQAAAA9nZXRQcmljZUhpc3RvcnkAAAABBQAAAAtpbmRleEhlaWdodAQAAAATb3V0QW1vdW50R3Jvc3NUdXBsZQMJAAAAAAAAAgUAAAAIc3dhcFR5cGUCAAAABXdhdmVzCQAFFAAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAIaW5BbW91bnQFAAAADHByaWNlQnlJbmRleAUAAAAPbmV1dHJpbm9Bc3NldElkAwkAAAAAAAACBQAAAAhzd2FwVHlwZQIAAAAIbmV1dHJpbm8JAAUUAAAAAgkBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACBQAAAAhpbkFtb3VudAUAAAAMcHJpY2VCeUluZGV4BQAAAAR1bml0CQAAAgAAAAEJAAEsAAAAAgIAAAAWVW5zdXBwb3J0ZWQgc3dhcCB0eXBlIAUAAAAIc3dhcFR5cGUEAAAADHBheW91dHNBcnJheQkBAAAACWFwcGx5RmVlcwAAAAIIBQAAABNvdXRBbW91bnRHcm9zc1R1cGxlAAAAAl8xBQAAAApvdXRGZWVQYXJ0BAAAAAxvdXROZXRBbW91bnQJAAGRAAAAAgUAAAAMcGF5b3V0c0FycmF5BQAAAAxJZHhOZXRBbW91bnQEAAAADG91dEZlZUFtb3VudAkAAZEAAAACBQAAAAxwYXlvdXRzQXJyYXkFAAAADElkeEZlZUFtb3VudAMFAAAACWlzQmxvY2tlZAkBAAAAFWVtZXJnZW5jeVNodXRkb3duRkFJTAAAAAADCQEAAAACIT0AAAACBQAAAApzd2FwU3RhdHVzAgAAAAdQRU5ESU5HCQAAAgAAAAECAAAAH3N3YXAgaGFzIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWQDCQAAZgAAAAIFAAAADHVubG9ja0hlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFwbGVhc2Ugd2FpdCBmb3I6IAkAAaQAAAABBQAAAAx1bmxvY2tIZWlnaHQCAAAAHyBibG9jayBoZWlnaHQgdG8gd2l0aGRyYXcgZnVuZHMDAwMJAABmAAAAAgUAAAAFaW5kZXgFAAAACnByaWNlSW5kZXgGCQAAZgAAAAIFAAAADHVubG9ja0hlaWdodAUAAAALaW5kZXhIZWlnaHQGAwkBAAAAAiE9AAAAAgUAAAAPcHJldkluZGV4SGVpZ2h0AAAAAAAAAAAACQAAZwAAAAIFAAAAD3ByZXZJbmRleEhlaWdodAUAAAAMdW5sb2NrSGVpZ2h0BwkBAAAADnByaWNlSW5kZXhGQUlMAAAABQUAAAAFaW5kZXgFAAAACnByaWNlSW5kZXgFAAAAC2luZGV4SGVpZ2h0BQAAAAx1bmxvY2tIZWlnaHQFAAAAD3ByZXZJbmRleEhlaWdodAMJAABnAAAAAgAAAAAAAAAAAAkAAZEAAAACBQAAAAxwYXlvdXRzQXJyYXkFAAAADklkeEdyb3NzQW1vdW50CQAAAgAAAAECAAAAE2JhbGFuY2UgZXF1YWxzIHplcm8DAwkAAGYAAAACAAAAAAAAAAAABQAAAApvdXRGZWVQYXJ0BgkAAGcAAAACBQAAAApvdXRGZWVQYXJ0BQAAAAVQQVVMSQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB5pbnZhbGlkIG91dEZlZVBhcnQgY29uZmlnIGZvciAFAAAACHN3YXBUeXBlAgAAABIgc3dhcDogb3V0RmVlUGFydD0JAAGkAAAAAQUAAAAKb3V0RmVlUGFydAQAAAANdW5sZWFzZUFtb3VudAMDCQAAAAAAAAIFAAAACHN3YXBUeXBlAgAAAAhuZXV0cmlubwkAAGYAAAACCAUAAAATb3V0QW1vdW50R3Jvc3NUdXBsZQAAAAJfMQAAAAAAAAAAAAcIBQAAABNvdXRBbW91bnRHcm9zc1R1cGxlAAAAAl8xAAAAAAAAAAAABAAAAAVzdGF0ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFHRvdGFsTG9ja2VkQnlVc2VyS0VZAAAAAgUAAAAIc3dhcFR5cGUFAAAAB2FjY291bnQJAABlAAAAAgUAAAARdG90YWxMb2NrZWRCeVVzZXIFAAAACGluQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG90YWxMb2NrZWRLRVkAAAABBQAAAAhzd2FwVHlwZQkAAGUAAAACBQAAAAt0b3RhbExvY2tlZAUAAAAIaW5BbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MFAAAADG91dE5ldEFtb3VudAgFAAAAE291dEFtb3VudEdyb3NzVHVwbGUAAAACXzIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAB3N3YXBLRVkAAAACBQAAAAdhY2NvdW50BQAAAAhzd2FwVHhJZAkBAAAADmZpbmlzaFN3YXBEQVRBAAAABwUAAAAJZGF0YUFycmF5BQAAAAxwcmljZUJ5SW5kZXgFAAAADG91dE5ldEFtb3VudAUAAAAMb3V0RmVlQW1vdW50BQAAAAx1bmxvY2tIZWlnaHQFAAAABWluZGV4BQAAAAx3aXRoZHJhd1R4SWQFAAAAA25pbAkABRUAAAADBQAAAAVzdGF0ZQkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIIBQAAABNvdXRBbW91bnRHcm9zc1R1cGxlAAAAAl8yBQAAAAxvdXRGZWVBbW91bnQFAAAADXVubGVhc2VBbW91bnQAAAAKAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAADAAAABJuZXV0cmlub0Fzc2V0SWRQcm0AAAAOYm9uZEFzc2V0SWRQcm0AAAASYXVjdGlvbkNvbnRyYWN0UHJtAAAAFmxpcXVpZGF0aW9uQ29udHJhY3RQcm0AAAAOcnBkQ29udHJhY3RQcm0AAAAbbm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5UHJtAAAAG2JhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbFBybQAAAB5iYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWxQcm0AAAAVbWluV2F2ZXNTd2FwQW1vdW50UHJtAAAAGG1pbk5ldXRyaW5vU3dhcEFtb3VudFBybQAAABVuZXV0cmlub091dEZlZVBhcnRQcm0AAAASd2F2ZXNPdXRGZWVQYXJ0UHJtBAAAAAtjaGVja0NhbGxlcgkBAAAACHRoaXNPbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABNubyBwYXltZW50cyBhbGxvd2VkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEk5ldXRyaW5vQXNzZXRJZEtleQUAAAASbmV1dHJpbm9Bc3NldElkUHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADkJvbmRBc3NldElkS2V5BQAAAA5ib25kQXNzZXRJZFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABJBdWN0aW9uQ29udHJhY3RLZXkFAAAAEmF1Y3Rpb25Db250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABZMaXF1aWRhdGlvbkNvbnRyYWN0S2V5BQAAABZsaXF1aWRhdGlvbkNvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADlJQRENvbnRyYWN0S2V5BQAAAA5ycGRDb250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkFAAAAG25vZGVPcmFjbGVQcm92aWRlclB1YktleVBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAbQmFsYW5jZVdhdmVzTG9ja0ludGVydmFsS2V5BQAAABtiYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxQcm0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAHkJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbEtleQUAAAAeYmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsUHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVNaW5XYXZlc1N3YXBBbW91bnRLZXkFAAAAFW1pbldhdmVzU3dhcEFtb3VudFBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAYTWluTmV1dHJpbm9Td2FwQW1vdW50S2V5BQAAABhtaW5OZXV0cmlub1N3YXBBbW91bnRQcm0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFU5ldXRyaW5vT3V0RmVlUGFydEtleQUAAAAVbmV1dHJpbm9PdXRGZWVQYXJ0UHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJXYXZlc091dEZlZVBhcnRLZXkFAAAAEndhdmVzT3V0RmVlUGFydFBybQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1jb25zdHJ1Y3RvclYyAAAAAwAAAAxtYXRoQ29udHJhY3QAAAATbnNidFN0YWtpbmdDb250cmFjdAAAABRzd2Fwc1RpbWVmcmFtZUJsb2NrcwQAAAALY2hlY2tDYWxsZXIJAQAAAAh0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RWxzZQAAAAIJAAQiAAAAAQIAAAAcJXMlc19fY2ZnX19sZWFzaW5nTWFuYWdlclB1YgIAAAAsN0FVTVg1NHVrWU1ZdlBtbWE3eW9GZjVOalpoczRCdTVuejNFejlFVjhzdXIEAAAABm1uZ1B1YgkAAlkAAAABBQAAAAdtbmdQdWJTBAAAAA5ub2RlUmVnQWRkclN0cgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCIAAAABAgAAAB8lcyVzX19jZmdfX25vZGVzUmVnaXN0cnlBZGRyZXNzAgAAACMzUDl2S3FRS2pVZG1wWEFmaVdhdThrclJFWUFZMVhyNjlwRQQAAAALbm9kZVJlZ0FkZHIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADm5vZGVSZWdBZGRyU3RyBAAAABFsR3JvdXBOb2RlTGlzdEtFWQkBAAAAGGdldExlYXNlR3JvdXBOb2RlTGlzdEtleQAAAAEFAAAACGdyb3VwTnVtBAAAAApsR3JOb2RlT3B0CQAEHQAAAAIFAAAABHRoaXMFAAAAEWxHcm91cE5vZGVMaXN0S0VZAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAACmxHck5vZGVPcHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAABmdyb3VwIAkAAaQAAAABBQAAAAhncm91cE51bQIAAAAUIGFscmVhZHkgaW5pdGlhbGl6ZWQEAAAABW5MaXN0CQAEtQAAAAIFAAAABm5MaXN0UwUAAAADU0VQBAAAAAhleHBDb3VudAkAAZAAAAABBQAAAAVuSWR4cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAGbW5nUHViCQAAAgAAAAECAAAAHmFwcHJvdmVMZWFzaW5ncyBub3QgYXV0aG9yaXplZAQAAAANJHQwMjcyNDIyNzMwNAkBAAAADHJlYWROb2RlSW5mbwAAAAEAAAAAAAAAAAAEAAAABm5BZGRyMAgFAAAADSR0MDI3MjQyMjczMDQAAAACXzEEAAAACGxBbXRLRVkwCAUAAAANJHQwMjcyNDIyNzMwNAAAAAJfMgQAAAAFbEFtdDAIBQAAAA0kdDAyNzI0MjI3MzA0AAAAAl8zBAAAAAdsSWRLRVkwCAUAAAANJHQwMjcyNDIy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AAAAAgUAAAAGaGVpZ2h0BQAAAA5sYXN0U3dhcEhlaWdodAQAAAARaXNTd2FwVGltZWxpZmVOZXcJAABnAAAAAgUAAAAZcGFzc2VkQmxvY2tzQWZ0ZXJMYXN0U3dhcAUAAAAXc3dhcExpbWl0VGltZWxpZmVCbG9ja3MEAAAADnN3YXBMaW1pdFNwZW50AwUAAAARaXNTd2FwVGltZWxpZmVOZXcAAAAAAAAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGGtleVN3YXBVc2VyU3BlbnRJblBlcmlvZAAAAAEFAAAADnVzZXJBZGRyZXNzU3RyAAAAAAAAAAAABAAAAA5ibGNrczJMbXRSZXNldAMFAAAAEWlzU3dhcFRpbWVsaWZlTmV3AAAAAAAAAAAACQAAZQAAAAIFAAAAF3N3YXBMaW1pdFRpbWVsaWZlQmxvY2tzBQAAABlwYXNzZWRCbG9ja3NBZnRlckxhc3RTd2FwCQAFFAAAAAIFAAAAA25pbAkABRcAAAAFBQAAAAxzd2FwTGltaXRNYXgFAAAADnN3YXBMaW1pdFNwZW50BQAAAA5ibGNrczJMbXRSZXNldAUAAAAIZ25zYnRBbXQFAAAADWduc2J0QW10VG90YWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAACaWQJAAJYAAAAAQgFAAAAAnR4AAAAAmlkBAAAABNwdWJLZXlBZG1pbnNMaXN0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAsR0pkTFNhTGl2NUs3eHVlamFjOG1jUmNIb3lvM2RQckVTcnZrdEczYTZNQVIJAARMAAAAAgIAAAAsRVl3Wm1VUmQ1S0thUVJCanNWYTZnOERQaXNGb1M2U292Ukp0RmlMNWdNSFUJAARMAAAAAgIAAAAsRHRtQWZ1RGRDckhLOHNwZEFlQVl6cTZNc1plZ2VEOWduc3JwdVRSa0NiVkEJAARMAAAAAgIAAAAsNVdSWEZTandjVGJOZktjSnM4WnFYbVNTV1lzU1ZKVXRNdk1xWmo1aEg0TmMFAAAAA25pbAUAAAADU0VQBAAAABBwdWJLZXlBZG1pbnNMaXN0CQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAPY29udHJvbENvbnRyYWN0AgAAAAwlc19fbXVsdGlzaWcFAAAAE3B1YktleUFkbWluc0xpc3RTdHIFAAAAA1NFUAQAAAAFY291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAgkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAwkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAMAAAAAAAAAAAIAAAAAAAAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABVTcG9uc29yRmVlVHJhbnNhY3Rpb24EAAAACXNwb25zb3JUeAUAAAAHJG1hdGNoMAMJAQAAABtjaGVja0lzVmFsaWRNaW5TcG9uc29yZWRGZWUAAAABBQAAAAlzcG9uc29yVHgJAABnAAAAAgUAAAAFY291bnQAAAAAAAAAAAMHCQAAZwAAAAIFAAAABWNvdW50AAAAAAAAAAADXIXJug==", "chainId": 87, "height": 3178762, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DGXi5G7e3V7w9tE5cozZBow8awPHPhgjJbDHU4bXrn5U Next: CXT7k9xw21RWt7bJJzsd33bqgs9kTBEZZUwQqYr1fDHe Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | func a (b,c) = valueOrErrorMessage(getString(b, c), (("Mandatory this." + c) + " is not defined")) | |
4 | + | let a = "b3ff7472a1d54a9f0c8f6d6665c4458c36a31e48" | |
5 | + | ||
6 | + | func b (c,d) = valueOrErrorMessage(getString(c, d), (("Mandatory this." + d) + " is not defined")) | |
5 | 7 | ||
6 | 8 | ||
7 | - | func | |
9 | + | func e (f) = calculateLeaseId(f) | |
8 | 10 | ||
9 | 11 | ||
10 | - | func | |
12 | + | func g (d) = valueOrElse(getInteger(this, d), 0) | |
11 | 13 | ||
12 | 14 | ||
13 | - | func | |
15 | + | func h (d) = valueOrElse(getString(this, d), "") | |
14 | 16 | ||
15 | 17 | ||
16 | - | func | |
18 | + | func i (d) = valueOrElse(getBoolean(this, d), false) | |
17 | 19 | ||
18 | 20 | ||
19 | - | func | |
21 | + | func j (c,d) = valueOrElse(getInteger(addressFromStringValue(c), d), 0) | |
20 | 22 | ||
21 | 23 | ||
22 | - | func | |
24 | + | func k (c,d) = valueOrElse(getString(addressFromStringValue(c), d), "") | |
23 | 25 | ||
24 | 26 | ||
25 | - | func | |
27 | + | func l (c,d) = valueOrElse(getBoolean(addressFromStringValue(c), d), false) | |
26 | 28 | ||
27 | 29 | ||
28 | - | func | |
29 | - | let | |
30 | - | if ($isInstanceOf( | |
30 | + | func m (n) = { | |
31 | + | let o = n | |
32 | + | if ($isInstanceOf(o, "List[Any]")) | |
31 | 33 | then { | |
32 | - | let | |
33 | - | | |
34 | + | let f = o | |
35 | + | f | |
34 | 36 | } | |
35 | 37 | else throw("fail to cast into List[Any]") | |
36 | 38 | } | |
37 | 39 | ||
38 | 40 | ||
39 | - | func p ( | |
40 | - | let | |
41 | - | if ($isInstanceOf( | |
41 | + | func p (n) = { | |
42 | + | let o = n | |
43 | + | if ($isInstanceOf(o, "String")) | |
42 | 44 | then { | |
43 | - | let q = | |
45 | + | let q = o | |
44 | 46 | q | |
45 | 47 | } | |
46 | 48 | else throw("fail to cast into String") | |
47 | 49 | } | |
48 | 50 | ||
49 | 51 | ||
50 | - | func r ( | |
51 | - | let | |
52 | - | if ($isInstanceOf( | |
52 | + | func r (n) = { | |
53 | + | let o = n | |
54 | + | if ($isInstanceOf(o, "Int")) | |
53 | 55 | then { | |
54 | - | let s = | |
56 | + | let s = o | |
55 | 57 | s | |
56 | 58 | } | |
57 | 59 | else throw("fail to cast into Int") | |
58 | 60 | } | |
59 | 61 | ||
60 | 62 | ||
61 | - | func t ( | |
62 | - | let | |
63 | - | if ($isInstanceOf( | |
63 | + | func t (n) = { | |
64 | + | let o = n | |
65 | + | if ($isInstanceOf(o, "AttachedPayment")) | |
64 | 66 | then { | |
65 | - | let u = | |
67 | + | let u = o | |
66 | 68 | u | |
69 | + | } | |
70 | + | else throw("fail to cast into AttachedPayment") | |
71 | + | } | |
72 | + | ||
73 | + | ||
74 | + | func v (n) = { | |
75 | + | let o = n | |
76 | + | if ($isInstanceOf(o, "(Int, Int, Int, Int, Int)")) | |
77 | + | then { | |
78 | + | let w = o | |
79 | + | w | |
67 | 80 | } | |
68 | 81 | else throw("fail to cast into Int") | |
69 | 82 | } | |
70 | 83 | ||
71 | 84 | ||
72 | - | let | |
85 | + | let x = "__" | |
73 | 86 | ||
74 | - | let w = "__" | |
75 | - | ||
76 | - | let x = 100000000 | |
77 | - | ||
78 | - | let y = 1000000 | |
87 | + | let y = 100000000 | |
79 | 88 | ||
80 | 89 | let z = 1000000 | |
81 | 90 | ||
82 | - | let A = | |
91 | + | let A = 1000000 | |
83 | 92 | ||
84 | - | let B = | |
93 | + | let B = 20000 | |
85 | 94 | ||
86 | - | let C = | |
95 | + | let C = 0 | |
87 | 96 | ||
88 | - | let D = | |
97 | + | let D = 1 | |
89 | 98 | ||
90 | - | let E = | |
99 | + | let E = 2 | |
91 | 100 | ||
92 | - | let F = " | |
101 | + | let F = "neutrino_asset_id" | |
93 | 102 | ||
94 | - | let G = " | |
103 | + | let G = "bond_asset_id" | |
95 | 104 | ||
96 | - | let H = " | |
105 | + | let H = "auction_contract" | |
97 | 106 | ||
98 | - | let I = " | |
107 | + | let I = "nsbtStakingContract" | |
99 | 108 | ||
100 | - | let J = " | |
109 | + | let J = "liquidation_contract" | |
101 | 110 | ||
102 | - | let K = " | |
111 | + | let K = "rpd_contract" | |
103 | 112 | ||
104 | - | let L = " | |
113 | + | let L = "control_contract" | |
105 | 114 | ||
106 | - | let M = " | |
115 | + | let M = "math_contract" | |
107 | 116 | ||
108 | - | let N = "balance_ | |
117 | + | let N = "balance_waves_lock_interval" | |
109 | 118 | ||
110 | - | let O = " | |
119 | + | let O = "balance_neutrino_lock_interval" | |
111 | 120 | ||
112 | - | let P = "min_ | |
121 | + | let P = "min_waves_swap_amount" | |
113 | 122 | ||
114 | - | let Q = " | |
123 | + | let Q = "min_neutrino_swap_amount" | |
115 | 124 | ||
116 | - | let R = " | |
125 | + | let R = "node_oracle_provider" | |
117 | 126 | ||
118 | - | let S = " | |
127 | + | let S = "neutrinoOut_swap_feePart" | |
119 | 128 | ||
120 | - | let T = " | |
129 | + | let T = "wavesOut_swap_feePart" | |
121 | 130 | ||
122 | - | func U (b) = ("%s__" + b) | |
131 | + | let U = "fees_manager_address" | |
132 | + | ||
133 | + | func V (c) = ("%s__" + c) | |
123 | 134 | ||
124 | 135 | ||
125 | - | let | |
136 | + | let W = "price" | |
126 | 137 | ||
127 | - | let | |
138 | + | let X = "price_index" | |
128 | 139 | ||
129 | - | let | |
140 | + | let Y = "is_blocked" | |
130 | 141 | ||
131 | - | func | |
142 | + | func Z (aa) = ((W + "_") + toString(aa)) | |
132 | 143 | ||
133 | 144 | ||
134 | - | func | |
145 | + | func ab (ac) = ((X + "_") + toString(ac)) | |
135 | 146 | ||
136 | 147 | ||
137 | - | func | |
148 | + | func ad (ae) = h(makeString(["%s%d%s", "lease", toString(ae), "nodeAddress"], x)) | |
138 | 149 | ||
139 | 150 | ||
140 | - | func | |
151 | + | func af (ae) = addressFromStringValue(ad(ae)) | |
141 | 152 | ||
142 | 153 | ||
143 | - | func | |
154 | + | func ag () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], x)), (1000 * y)) | |
144 | 155 | ||
145 | 156 | ||
146 | - | func | |
157 | + | func ah (ai) = ("balance_unlock_block_" + ai) | |
147 | 158 | ||
148 | 159 | ||
149 | - | func | |
160 | + | func aj (ak) = makeString(["%s%d%s", "lease", toString(ak), "id"], x) | |
150 | 161 | ||
151 | 162 | ||
152 | - | func | |
163 | + | func al (am) = makeString(["%s%s%s", "leaseByAddress", am, "id"], x) | |
153 | 164 | ||
154 | 165 | ||
155 | - | func | |
166 | + | func an (ak) = makeString(["%s%d%s", "lease", toString(ak), "amount"], x) | |
156 | 167 | ||
157 | 168 | ||
158 | - | func | |
169 | + | func ao (am) = makeString(["%s%s%s", "leaseByAddress", am, "amount"], x) | |
159 | 170 | ||
160 | 171 | ||
161 | - | func | |
172 | + | func ap (aq) = makeString(["%s%d%s", "leaseGroup", toString(aq), "nodeList"], x) | |
162 | 173 | ||
163 | 174 | ||
164 | - | func | |
175 | + | func ar (as) = (("min_" + as) + "_swap_amount") | |
165 | 176 | ||
166 | 177 | ||
167 | - | func | |
178 | + | func at (as) = ("balance_lock_" + as) | |
168 | 179 | ||
169 | 180 | ||
170 | - | func | |
181 | + | func au (as,ai) = makeString(["balance_lock", as, ai], "_") | |
171 | 182 | ||
172 | 183 | ||
173 | - | func | |
184 | + | func av (as) = (("balance_" + as) + "_lock_interval") | |
174 | 185 | ||
175 | 186 | ||
176 | - | func | |
187 | + | func aw () = "balance_node_lock_interval" | |
177 | 188 | ||
178 | 189 | ||
179 | - | func | |
190 | + | func ax (as) = (as + "Out_swap_feePart") | |
180 | 191 | ||
181 | 192 | ||
182 | - | func | |
193 | + | func ay () = "swaps_timeframe" | |
183 | 194 | ||
184 | 195 | ||
185 | - | func | |
196 | + | func az (as) = valueOrElse(getInteger(this, ar(as)), 0) | |
186 | 197 | ||
187 | 198 | ||
188 | - | func | |
199 | + | func aA () = valueOrElse(getInteger(this, ay()), 1440) | |
189 | 200 | ||
190 | 201 | ||
191 | - | func | |
202 | + | func aB (as) = valueOrElse(getInteger(this, at(as)), 0) | |
192 | 203 | ||
193 | 204 | ||
194 | - | func | |
205 | + | func aC (as,ai) = valueOrElse(getInteger(this, au(as, ai)), 0) | |
195 | 206 | ||
196 | 207 | ||
197 | - | func | |
208 | + | func aD (as) = valueOrElse(getInteger(this, av(as)), 1440) | |
198 | 209 | ||
199 | 210 | ||
200 | - | func | |
211 | + | func aE () = valueOrElse(getInteger(this, aw()), 1) | |
201 | 212 | ||
202 | 213 | ||
203 | - | func | |
214 | + | func aF (aG) = makeString(["%s%s", "swapUserSpentInPeriod", aG], x) | |
204 | 215 | ||
205 | 216 | ||
206 | - | func | |
217 | + | func aH (aG) = makeString(["%s%s", "userLastSwapHeight", aG], x) | |
207 | 218 | ||
208 | 219 | ||
209 | - | func | |
220 | + | func aI () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, U), (U + " is not specified"))), (U + " invalid address format")) | |
210 | 221 | ||
211 | 222 | ||
212 | - | func | |
223 | + | func aJ (aK,aL) = fraction(fraction(aK, A, aL), y, z) | |
213 | 224 | ||
214 | 225 | ||
215 | - | func | |
226 | + | func aM (aK,aL) = fraction(fraction(aK, aL, A), z, y) | |
216 | 227 | ||
217 | 228 | ||
218 | - | func | |
229 | + | func aN (aK,aL) = aM(aK, aL) | |
219 | 230 | ||
220 | 231 | ||
221 | - | func | |
232 | + | func aO (aP) = split(aP, ",") | |
222 | 233 | ||
223 | 234 | ||
224 | - | func | |
235 | + | func aQ (as,aR) = throw(((("The specified amount in " + as) + " swap is less than the required minimum of ") + toString(aR))) | |
225 | 236 | ||
226 | 237 | ||
227 | - | func | |
238 | + | func aS () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles") | |
228 | 239 | ||
229 | 240 | ||
230 | - | func | |
241 | + | func aT (ac,aU,aV,aW,aX) = throw(((((((((("invalid price history index: index=" + toString(ac)) + " priceIndex=") + toString(aU)) + " indexHeight=") + toString(aV)) + " unlockHeight=") + toString(aW)) + " prevIndexHeight=") + toString(aX))) | |
231 | 242 | ||
232 | 243 | ||
233 | - | let | |
244 | + | let aY = h(J) | |
234 | 245 | ||
235 | - | let | |
246 | + | let aZ = h(I) | |
236 | 247 | ||
237 | - | let | |
248 | + | let ba = fromBase58String(h(F)) | |
238 | 249 | ||
239 | - | let | |
250 | + | let bb = h(H) | |
240 | 251 | ||
241 | - | let | |
252 | + | let bc = h(K) | |
242 | 253 | ||
243 | - | let | |
254 | + | let bd = h(L) | |
244 | 255 | ||
245 | - | let | |
256 | + | let be = addressFromStringValue(bd) | |
246 | 257 | ||
247 | - | let | |
258 | + | let bf = h(M) | |
248 | 259 | ||
249 | - | let | |
260 | + | let aU = j(bd, X) | |
250 | 261 | ||
251 | - | let | |
262 | + | let bg = l(bd, Y) | |
252 | 263 | ||
253 | - | let | |
264 | + | let bh = fromBase58String(h(R)) | |
254 | 265 | ||
255 | - | let | |
266 | + | let bi = fromBase58String("6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g") | |
256 | 267 | ||
257 | - | let | |
268 | + | let bj = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF") | |
258 | 269 | ||
259 | - | let | |
270 | + | let bk = this | |
260 | 271 | ||
261 | - | let | |
272 | + | let bl = addressFromStringValue(bf) | |
262 | 273 | ||
263 | - | let | |
274 | + | let bm = addressFromStringValue(aZ) | |
264 | 275 | ||
265 | - | func bm (bn) = { | |
266 | - | let bo = 100000 | |
267 | - | let bp = 1000 | |
268 | - | let bq = aL(bo, bl) | |
269 | - | let br = (bq * 2) | |
270 | - | let bs = fraction(bq, bp, 100) | |
271 | - | let bt = value(bn.minSponsoredAssetFee) | |
272 | - | if (if ((bt >= br)) | |
273 | - | then (bs >= bt) | |
276 | + | let bn = j(bd, W) | |
277 | + | ||
278 | + | func bo (bp) = { | |
279 | + | let bq = 100000 | |
280 | + | let br = 1000 | |
281 | + | let bs = aM(bq, bn) | |
282 | + | let bt = (bs * 2) | |
283 | + | let bu = fraction(bs, br, 100) | |
284 | + | let bv = value(bp.minSponsoredAssetFee) | |
285 | + | if (if ((bv >= bt)) | |
286 | + | then (bu >= bv) | |
274 | 287 | else false) | |
275 | - | then ( | |
288 | + | then (bp.assetId == ba) | |
276 | 289 | else false | |
277 | 290 | } | |
278 | 291 | ||
279 | 292 | ||
280 | - | func | |
293 | + | func bw (aa) = j(bd, Z(aa)) | |
281 | 294 | ||
282 | 295 | ||
283 | - | func | |
296 | + | func bx (ac) = j(bd, ab(ac)) | |
284 | 297 | ||
285 | 298 | ||
286 | - | func | |
299 | + | func by (aG) = makeString(["%s%s%s", "paramByUser", aG, "amount"], x) | |
287 | 300 | ||
288 | 301 | ||
289 | - | let | |
302 | + | let bz = 1 | |
290 | 303 | ||
291 | - | let | |
304 | + | let bA = 2 | |
292 | 305 | ||
293 | - | let | |
306 | + | let bB = 3 | |
294 | 307 | ||
295 | - | let | |
308 | + | let bC = 4 | |
296 | 309 | ||
297 | - | let | |
310 | + | let bD = 5 | |
298 | 311 | ||
299 | - | let | |
312 | + | let bE = 6 | |
300 | 313 | ||
301 | - | let | |
314 | + | let bF = 7 | |
302 | 315 | ||
303 | - | let | |
316 | + | let bG = 8 | |
304 | 317 | ||
305 | - | let | |
318 | + | let bH = 9 | |
306 | 319 | ||
307 | - | let | |
320 | + | let bI = 10 | |
308 | 321 | ||
309 | - | let | |
322 | + | let bJ = 11 | |
310 | 323 | ||
311 | - | let | |
324 | + | let bK = 12 | |
312 | 325 | ||
313 | - | let | |
326 | + | let bL = 13 | |
314 | 327 | ||
315 | - | let | |
328 | + | let bM = 14 | |
316 | 329 | ||
317 | - | let | |
330 | + | let bN = 15 | |
318 | 331 | ||
319 | - | let | |
332 | + | let bO = 16 | |
320 | 333 | ||
321 | - | func | |
334 | + | func bP (aG,bQ) = makeString(["%s%s", aG, bQ], x) | |
322 | 335 | ||
323 | 336 | ||
324 | - | func | |
337 | + | func bR (as,bS,bT,aL,bU,bV,bW,bX,bY,bZ,ca,cb,ac,cc,cd,ce) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s", as, bS, bT, aL, bU, bV, bW, bX, bY, bZ, ca, cb, ac, cc, cd, ce], x) | |
325 | 338 | ||
326 | 339 | ||
327 | - | func | |
340 | + | func cf (as,cg,ca) = bR(as, "PENDING", toString(cg), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(ca), "0", "0", "NULL", "0", "0") | |
328 | 341 | ||
329 | 342 | ||
330 | - | func | |
343 | + | func ch (ci,aL,bU,bV,cb,ac,cc) = bR(ci[bz], "FINISHED", ci[bB], toString(aL), toString(bU), toString(bV), ci[bF], ci[bG], toString(height), toString(lastBlock.timestamp), ci[bJ], toString(cb), toString(ac), cc, ci[bN], ci[bO]) | |
331 | 344 | ||
332 | 345 | ||
333 | - | func | |
334 | - | let | |
335 | - | split(valueOrErrorMessage(getString(this, | |
346 | + | func cj (aG,ck) = { | |
347 | + | let cl = bP(aG, ck) | |
348 | + | split(valueOrErrorMessage(getString(this, cl), ("no swap data for " + cl)), x) | |
336 | 349 | } | |
337 | 350 | ||
338 | 351 | ||
339 | - | func | |
340 | - | let | |
341 | - | [( | |
352 | + | func cm (cn,co) = { | |
353 | + | let cp = fraction(cn, co, z) | |
354 | + | [(cn - cp), cp, cn] | |
342 | 355 | } | |
343 | 356 | ||
344 | 357 | ||
345 | - | func | |
346 | - | then -( | |
347 | - | else | |
358 | + | func cq (cr) = if ((0 > cr)) | |
359 | + | then -(cr) | |
360 | + | else cr | |
348 | 361 | ||
349 | 362 | ||
350 | - | func | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | if (if (( | |
363 | + | func cs (ct) = { | |
364 | + | let cu = ((wavesBalance(bk).available - ct) - ag()) | |
365 | + | let cv = g(an(0)) | |
366 | + | let cw = g(an(1)) | |
367 | + | let cx = (cu + cv) | |
368 | + | let cy = (cu + cw) | |
369 | + | if (if ((cx > 0)) | |
357 | 370 | then true | |
358 | - | else ( | |
371 | + | else (cy > 0)) | |
359 | 372 | then { | |
360 | - | let | |
361 | - | let | |
362 | - | if (( | |
363 | - | then $Tuple2(0, | |
364 | - | else $Tuple2(1, | |
373 | + | let cz = cq((cx - cw)) | |
374 | + | let cA = cq((cy - cv)) | |
375 | + | if ((cA >= cz)) | |
376 | + | then $Tuple2(0, cx) | |
377 | + | else $Tuple2(1, cy) | |
365 | 378 | } | |
366 | 379 | else $Tuple2(-1, 0) | |
367 | 380 | } | |
368 | 381 | ||
369 | 382 | ||
370 | - | func | |
383 | + | func cB (s) = if ((s.caller != this)) | |
371 | 384 | then throw("Permission denied: this contract only allowed") | |
372 | 385 | else true | |
373 | 386 | ||
374 | 387 | ||
375 | - | func | |
376 | - | let | |
377 | - | let | |
378 | - | let | |
379 | - | if (( | |
388 | + | func cC (ct) = { | |
389 | + | let cD = cs(ct) | |
390 | + | let ak = cD._1 | |
391 | + | let cE = cD._2 | |
392 | + | if ((cE > 0)) | |
380 | 393 | then { | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | then [LeaseCancel(value( | |
394 | + | let cF = aj(ak) | |
395 | + | let cG = getBinary(this, cF) | |
396 | + | let cH = if (isDefined(cG)) | |
397 | + | then [LeaseCancel(value(cG))] | |
385 | 398 | else nil | |
386 | - | let | |
387 | - | let | |
388 | - | ( | |
399 | + | let cI = an(ak) | |
400 | + | let cJ = Lease(af(ak), cE) | |
401 | + | (cH ++ [cJ, BinaryEntry(cF, e(cJ)), IntegerEntry(an(ak), cE)]) | |
389 | 402 | } | |
390 | 403 | else nil | |
391 | 404 | } | |
392 | 405 | ||
393 | 406 | ||
394 | - | func cJ (ar,cK,cL,cM,cN) = { | |
395 | - | let cO = cN | |
396 | - | let cP = cO._1 | |
397 | - | let cQ = cO._2 | |
398 | - | let cR = cO._3 | |
399 | - | let aQ = ay(ar) | |
400 | - | let cS = aA(ar) | |
401 | - | let cT = aB(ar, cL) | |
402 | - | let al = ac(0) | |
403 | - | let cU = bu(bv(aT)) | |
404 | - | let cV = (al == cL) | |
405 | - | let cW = if (cV) | |
406 | - | then aD() | |
407 | - | else aC(ar) | |
408 | - | let bY = (height + cW) | |
409 | - | let cX = if ((ar == "neutrino")) | |
410 | - | then cK | |
411 | - | else aL(cK, cU) | |
412 | - | if ((aQ > cK)) | |
413 | - | then aP(ar, aQ) | |
414 | - | else if (if (!(cV)) | |
415 | - | then (cQ > 0) | |
407 | + | func cK (cL) = { | |
408 | + | let am = af(cL) | |
409 | + | let cM = an(cL) | |
410 | + | let cN = g(cM) | |
411 | + | let cO = aj(cL) | |
412 | + | let cP = value(getBinary(this, cO)) | |
413 | + | $Tuple5(am, cM, cN, cO, cP) | |
414 | + | } | |
415 | + | ||
416 | + | ||
417 | + | func cQ (as,cR,cS,cT,cU) = { | |
418 | + | let cV = cU | |
419 | + | let cW = cV._1 | |
420 | + | let cX = cV._2 | |
421 | + | let cY = cV._3 | |
422 | + | let aR = az(as) | |
423 | + | let cZ = aB(as) | |
424 | + | let da = aC(as, cS) | |
425 | + | let am = ad(0) | |
426 | + | let db = bw(bx(aU)) | |
427 | + | let dc = (am == cS) | |
428 | + | let dd = if (dc) | |
429 | + | then aE() | |
430 | + | else aD(as) | |
431 | + | let ca = (height + dd) | |
432 | + | let de = if ((as == "neutrino")) | |
433 | + | then cR | |
434 | + | else aM(cR, db) | |
435 | + | if ((aR > cR)) | |
436 | + | then aQ(as, aR) | |
437 | + | else if (if (!(dc)) | |
438 | + | then (cX > 0) | |
416 | 439 | else false) | |
417 | - | then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + | |
418 | - | else if (if (!( | |
419 | - | then ( | |
440 | + | then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + cY)))) | |
441 | + | else if (if (!(dc)) | |
442 | + | then (de > cW) | |
420 | 443 | else false) | |
421 | - | then throw(((("You have exceeded your swap limit! Requested: " + toString( | |
422 | - | else if ( | |
423 | - | then | |
444 | + | then throw(((("You have exceeded your swap limit! Requested: " + toString(de)) + ", available: ") + toString(cW))) | |
445 | + | else if (bg) | |
446 | + | then aS() | |
424 | 447 | else { | |
425 | - | let | |
426 | - | then | |
448 | + | let df = if ((as == "waves")) | |
449 | + | then cC(0) | |
427 | 450 | else nil | |
428 | - | $Tuple2(([IntegerEntry( | |
451 | + | $Tuple2(([IntegerEntry(aF(cS), de), IntegerEntry(aH(cS), height), IntegerEntry(au(as, cS), (da + cR)), IntegerEntry(ah(cS), ca), IntegerEntry(at(as), (cZ + cR)), StringEntry(bP(cS, cT), cf(as, cR, ca))] ++ df), unit) | |
429 | 452 | } | |
430 | 453 | } | |
431 | 454 | ||
432 | 455 | ||
433 | - | func | |
434 | - | let | |
435 | - | let | |
436 | - | let | |
437 | - | let | |
438 | - | let | |
439 | - | let | |
440 | - | let | |
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | let | |
449 | - | let | |
450 | - | then $Tuple2( | |
451 | - | else if (( | |
452 | - | then $Tuple2( | |
453 | - | else throw(("Unsupported swap type " + | |
454 | - | let | |
455 | - | let | |
456 | - | let | |
457 | - | if ( | |
458 | - | then | |
459 | - | else if (( | |
456 | + | func dg (dh,ac,ck,cc) = { | |
457 | + | let aG = addressFromStringValue(dh) | |
458 | + | let di = aI() | |
459 | + | let ci = cj(dh, ck) | |
460 | + | let ca = parseIntValue(ci[bJ]) | |
461 | + | let as = ci[bz] | |
462 | + | let bT = parseIntValue(ci[bB]) | |
463 | + | let dj = ci[bA] | |
464 | + | let bW = parseIntValue(ci[bF]) | |
465 | + | let dk = valueOrElse(getInteger(this, ax(as)), B) | |
466 | + | let cZ = aB(as) | |
467 | + | let da = aC(as, dh) | |
468 | + | let aW = ca | |
469 | + | let aV = bx(ac) | |
470 | + | let aX = bx((ac - 1)) | |
471 | + | let db = bw(aV) | |
472 | + | let dl = if ((as == "waves")) | |
473 | + | then $Tuple2(aM(bT, db), ba) | |
474 | + | else if ((as == "neutrino")) | |
475 | + | then $Tuple2(aJ(bT, db), unit) | |
476 | + | else throw(("Unsupported swap type " + as)) | |
477 | + | let dm = cm(dl._1, dk) | |
478 | + | let bU = dm[C] | |
479 | + | let bV = dm[D] | |
480 | + | if (bg) | |
481 | + | then aS() | |
482 | + | else if ((dj != "PENDING")) | |
460 | 483 | then throw("swap has been already processed") | |
461 | - | else if (( | |
462 | - | then throw((("please wait for: " + toString( | |
463 | - | else if (if (if (( | |
484 | + | else if ((aW > height)) | |
485 | + | then throw((("please wait for: " + toString(aW)) + " block height to withdraw funds")) | |
486 | + | else if (if (if ((ac > aU)) | |
464 | 487 | then true | |
465 | - | else ( | |
488 | + | else (aW > aV)) | |
466 | 489 | then true | |
467 | - | else if (( | |
468 | - | then ( | |
490 | + | else if ((aX != 0)) | |
491 | + | then (aX >= aW) | |
469 | 492 | else false) | |
470 | - | then | |
471 | - | else if ((0 >= | |
493 | + | then aT(ac, aU, aV, aW, aX) | |
494 | + | else if ((0 >= dm[E])) | |
472 | 495 | then throw("balance equals zero") | |
473 | - | else if (if ((0 > | |
496 | + | else if (if ((0 > dk)) | |
474 | 497 | then true | |
475 | - | else ( | |
476 | - | then throw(((("invalid outFeePart config for " + | |
498 | + | else (dk >= z)) | |
499 | + | then throw(((("invalid outFeePart config for " + as) + " swap: outFeePart=") + toString(dk))) | |
477 | 500 | else { | |
478 | - | let | |
479 | - | then ( | |
501 | + | let ct = if (if ((as == "neutrino")) | |
502 | + | then (dl._1 > 0) | |
480 | 503 | else false) | |
481 | - | then | |
482 | - | else | |
483 | - | let | |
484 | - | $ | |
504 | + | then dl._1 | |
505 | + | else 0 | |
506 | + | let dn = [IntegerEntry(au(as, dh), (da - bT)), IntegerEntry(at(as), (cZ - bT)), ScriptTransfer(aG, bU, dl._2), StringEntry(bP(dh, ck), ch(ci, db, bU, bV, aW, ac, cc))] | |
507 | + | $Tuple3(dn, AttachedPayment(dl._2, bV), ct) | |
485 | 508 | } | |
486 | 509 | } | |
487 | 510 | ||
488 | 511 | ||
489 | - | func dh (di) = { | |
490 | - | let al = ae(di) | |
491 | - | let dj = am(di) | |
492 | - | let dk = f(dj) | |
493 | - | let dl = ai(di) | |
494 | - | let dm = value(getBinary(this, dl)) | |
495 | - | $Tuple5(al, dj, dk, dl, dm) | |
496 | - | } | |
497 | - | ||
498 | - | ||
499 | - | @Callable(cA) | |
500 | - | func constructor (dn,do,dp,dq,dr,ds,dt,du,dv,dw,dx,dy) = { | |
501 | - | let dz = cz(cA) | |
502 | - | if ((dz == dz)) | |
503 | - | then if ((size(cA.payments) != 0)) | |
512 | + | @Callable(s) | |
513 | + | func constructor (do,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz) = { | |
514 | + | let dA = cB(s) | |
515 | + | if ((dA == dA)) | |
516 | + | then if ((size(s.payments) != 0)) | |
504 | 517 | then throw("no payments allowed") | |
505 | - | else [ | |
518 | + | else [StringEntry(F, do), StringEntry(G, dp), StringEntry(H, dq), StringEntry(J, dr), StringEntry(K, ds), StringEntry(R, dt), IntegerEntry(N, du), IntegerEntry(O, dv), IntegerEntry(P, dw), IntegerEntry(Q, dx), IntegerEntry(S, dy), IntegerEntry(T, dz)] | |
506 | 519 | else throw("Strict value is not equal to itself.") | |
507 | 520 | } | |
508 | 521 | ||
509 | 522 | ||
510 | 523 | ||
511 | - | @Callable( | |
512 | - | func constructorV2 ( | |
513 | - | let | |
514 | - | if (( | |
515 | - | then if ((size( | |
524 | + | @Callable(s) | |
525 | + | func constructorV2 (bl,bm,dB) = { | |
526 | + | let dA = cB(s) | |
527 | + | if ((dA == dA)) | |
528 | + | then if ((size(s.payments) != 0)) | |
516 | 529 | then throw("no payments allowed") | |
517 | - | else [StringEntry( | |
530 | + | else [StringEntry(M, bl), StringEntry(I, bm), IntegerEntry(ay(), dB)] | |
518 | 531 | else throw("Strict value is not equal to itself.") | |
519 | 532 | } | |
520 | 533 | ||
521 | 534 | ||
522 | 535 | ||
523 | - | @Callable( | |
524 | - | func swapWavesToNeutrino () = if ((size( | |
536 | + | @Callable(s) | |
537 | + | func swapWavesToNeutrino () = if ((size(s.payments) != 1)) | |
525 | 538 | then throw("swapWavesToNeutrino require only one payment") | |
526 | 539 | else { | |
527 | - | let | |
528 | - | if (isDefined( | |
540 | + | let dC = value(s.payments[0]) | |
541 | + | if (isDefined(dC.assetId)) | |
529 | 542 | then throw("Only Waves token is allowed for swapping.") | |
530 | 543 | else { | |
531 | - | let | |
532 | - | let | |
533 | - | let | |
534 | - | let | |
535 | - | | |
544 | + | let aG = toString(s.caller) | |
545 | + | let cT = toBase58String(s.transactionId) | |
546 | + | let dD = v(invoke(this, "swapParamsByUserSYSREADONLY", [aG, 0], nil)) | |
547 | + | let dE = cQ("waves", dC.amount, aG, cT, dD) | |
548 | + | dE | |
536 | 549 | } | |
537 | 550 | } | |
538 | 551 | ||
539 | 552 | ||
540 | 553 | ||
541 | - | @Callable( | |
542 | - | func swapNeutrinoToWaves () = if ((size( | |
554 | + | @Callable(s) | |
555 | + | func swapNeutrinoToWaves () = if ((size(s.payments) != 1)) | |
543 | 556 | then throw("swapNeutrinoToWaves require only one payment") | |
544 | 557 | else { | |
545 | - | let | |
546 | - | if (( | |
558 | + | let dC = value(s.payments[0]) | |
559 | + | if ((dC.assetId != ba)) | |
547 | 560 | then throw("Only appropriate Neutrino tokens are allowed for swapping.") | |
548 | 561 | else { | |
549 | - | let | |
550 | - | let | |
551 | - | let | |
552 | - | let | |
553 | - | | |
562 | + | let aG = toString(s.caller) | |
563 | + | let cT = toBase58String(s.transactionId) | |
564 | + | let dD = v(invoke(this, "swapParamsByUserSYSREADONLY", [aG, 0], nil)) | |
565 | + | let dE = cQ("neutrino", dC.amount, aG, cT, dD) | |
566 | + | dE | |
554 | 567 | } | |
555 | 568 | } | |
556 | 569 | ||
557 | 570 | ||
558 | 571 | ||
559 | - | @Callable(cA) | |
560 | - | func withdraw (da,ab,ci) = if ((size(cA.payments) != 0)) | |
561 | - | then throw("no payments allowed") | |
562 | - | else { | |
563 | - | let dE = cZ(da, ab, ci, toBase58String(cA.transactionId)) | |
564 | - | let dg = dE._1 | |
565 | - | let dF = dE._2 | |
566 | - | let dG = invoke(bk, "deposit", nil, [dF]) | |
567 | - | if ((dG == dG)) | |
568 | - | then dg | |
569 | - | else throw("Strict value is not equal to itself.") | |
570 | - | } | |
572 | + | @Callable(s) | |
573 | + | func withdraw (dh,ac,ck) = { | |
574 | + | let bQ = toBase58String(s.transactionId) | |
575 | + | if ((size(s.payments) != 0)) | |
576 | + | then throw("no payments allowed") | |
577 | + | else { | |
578 | + | let dF = dg(dh, ac, ck, bQ) | |
579 | + | let dn = dF._1 | |
580 | + | let dG = dF._2 | |
581 | + | let dH = dF._3 | |
582 | + | let dI = invoke(this, "internalUnleaseAndLease", [dH], nil) | |
583 | + | if ((dI == dI)) | |
584 | + | then if ((0 >= dG.amount)) | |
585 | + | then dn | |
586 | + | else { | |
587 | + | let dJ = invoke(bm, "deposit", nil, [dG]) | |
588 | + | if ((dJ == dJ)) | |
589 | + | then dn | |
590 | + | else throw("Strict value is not equal to itself.") | |
591 | + | } | |
592 | + | else throw("Strict value is not equal to itself.") | |
593 | + | } | |
594 | + | } | |
571 | 595 | ||
572 | 596 | ||
573 | 597 | ||
574 | - | @Callable(cA) | |
575 | - | func transferToAuction () = if ((size(cA.payments) != 0)) | |
576 | - | then throw("no payments allowed") | |
577 | - | else { | |
578 | - | let dH = l(invoke(bj, "calcNeutinoMetricsREADONLY", nil, nil)) | |
579 | - | let dI = r(dH[3]) | |
580 | - | let dJ = r(dH[5]) | |
581 | - | let dK = r(dH[6]) | |
582 | - | let dL = r(dH[9]) | |
583 | - | let dM = (dJ - assetBalance(addressFromStringValue(ba), bg)) | |
584 | - | let dN = (dK - assetBalance(addressFromStringValue(aX), aZ)) | |
585 | - | if (be) | |
586 | - | then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles") | |
587 | - | else if ((dM > (1 * y))) | |
588 | - | then [ScriptTransfer(addressFromStringValue(ba), dM, bg)] | |
589 | - | else if ((dN >= (1 * y))) | |
590 | - | then [ScriptTransfer(addressFromStringValue(aX), dN, aZ)] | |
591 | - | else throw(((((((("bond were generated or do not need it. Deficit:" + toString(dM)) + "|") + toString(0)) + ". Surplus:") + toString(dN)) + "|") + toString(dK))) | |
592 | - | } | |
598 | + | @Callable(s) | |
599 | + | func internalUnleaseAndLease (ct) = if ((s.caller != this)) | |
600 | + | then throw("internalUnleaseAndLease is not public method") | |
601 | + | else cC(ct) | |
593 | 602 | ||
594 | 603 | ||
595 | 604 | ||
596 | - | @Callable( | |
597 | - | func transferUsdnToUser ( | |
605 | + | @Callable(s) | |
606 | + | func transferUsdnToUser (aK,dK) = if ((s.caller != addressFromStringValue(bb))) | |
598 | 607 | then throw("Only auction contract is authorized") | |
599 | - | else [ScriptTransfer(addressFromStringValue( | |
608 | + | else [ScriptTransfer(addressFromStringValue(dK), aK, ba)] | |
600 | 609 | ||
601 | 610 | ||
602 | 611 | ||
603 | - | @Callable( | |
604 | - | func acceptWaves () = if (( | |
612 | + | @Callable(s) | |
613 | + | func acceptWaves () = if ((s.caller != addressFromStringValue(bb))) | |
605 | 614 | then throw("Currently only auction contract is allowed to call") | |
606 | - | else $Tuple2( | |
615 | + | else $Tuple2(cC(0), "success") | |
607 | 616 | ||
608 | 617 | ||
609 | 618 | ||
610 | - | @Callable( | |
611 | - | func approveLeasings ( | |
612 | - | let | |
613 | - | let | |
614 | - | let | |
615 | - | let | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | if (isDefined( | |
621 | - | then throw((("group " + toString( | |
619 | + | @Callable(s) | |
620 | + | func approveLeasings (dL,aq) = { | |
621 | + | let dM = (500000 * y) | |
622 | + | let dN = [0, 1, 2, 3, 4, 5, 6, 7] | |
623 | + | let dO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur") | |
624 | + | let dP = fromBase58String(dO) | |
625 | + | let dQ = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE") | |
626 | + | let dR = addressFromStringValue(dQ) | |
627 | + | let dS = ap(aq) | |
628 | + | let dT = getString(this, dS) | |
629 | + | if (isDefined(dT)) | |
630 | + | then throw((("group " + toString(aq)) + " already initialized")) | |
622 | 631 | else { | |
623 | - | let | |
624 | - | let | |
625 | - | if (( | |
632 | + | let dU = split(dL, x) | |
633 | + | let dV = size(dN) | |
634 | + | if ((s.callerPublicKey != dP)) | |
626 | 635 | then throw("approveLeasings not authorized") | |
627 | 636 | else { | |
628 | - | let | |
629 | - | let | |
630 | - | let | |
631 | - | let | |
632 | - | let | |
633 | - | let | |
634 | - | let | |
635 | - | let | |
636 | - | let | |
637 | - | let | |
638 | - | let | |
639 | - | let | |
640 | - | let | |
641 | - | let | |
642 | - | let | |
643 | - | if (( | |
637 | + | let dW = cK(0) | |
638 | + | let dX = dW._1 | |
639 | + | let dY = dW._2 | |
640 | + | let dZ = dW._3 | |
641 | + | let ea = dW._4 | |
642 | + | let eb = dW._5 | |
643 | + | let ec = cK(1) | |
644 | + | let ed = ec._1 | |
645 | + | let ee = ec._2 | |
646 | + | let ef = ec._3 | |
647 | + | let eg = ec._4 | |
648 | + | let eh = ec._5 | |
649 | + | let ei = Lease(dX, (dZ - ((dM * dV) / 2))) | |
650 | + | let ej = Lease(ed, (ef - ((dM * dV) / 2))) | |
651 | + | let ek = invoke(dR, "validateAndApproveLeasings", [dL], nil) | |
652 | + | if ((ek == ek)) | |
644 | 653 | then { | |
645 | - | func | |
646 | - | let | |
647 | - | let | |
648 | - | ( | |
654 | + | func el (em,s) = { | |
655 | + | let en = dU[s] | |
656 | + | let eo = Lease(addressFromStringValue(en), dM) | |
657 | + | (em ++ [eo, BinaryEntry(al(en), e(eo)), IntegerEntry(ao(en), dM)]) | |
649 | 658 | } | |
650 | 659 | ||
651 | - | ([StringEntry( | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | func | |
656 | - | then | |
657 | - | else | |
660 | + | ([StringEntry(dS, dL), BinaryEntry(ea, e(ei)), BinaryEntry(eg, e(ej)), IntegerEntry(dY, ei.amount), IntegerEntry(ee, ej.amount), LeaseCancel(eb), LeaseCancel(eh), ei, ej] ++ { | |
661 | + | let ep = dN | |
662 | + | let eq = size(ep) | |
663 | + | let er = nil | |
664 | + | func es (et,eu) = if ((eu >= eq)) | |
665 | + | then et | |
666 | + | else el(et, ep[eu]) | |
658 | 667 | ||
659 | - | func | |
660 | - | then | |
668 | + | func ev (et,eu) = if ((eu >= eq)) | |
669 | + | then et | |
661 | 670 | else throw("List size exceeds 8") | |
662 | 671 | ||
663 | - | | |
672 | + | ev(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
664 | 673 | }) | |
665 | 674 | } | |
666 | 675 | else throw("Strict value is not equal to itself.") | |
670 | 679 | ||
671 | 680 | ||
672 | 681 | ||
673 | - | @Callable( | |
674 | - | func swapParamsByUserSYSREADONLY ( | |
675 | - | let | |
676 | - | if (( | |
682 | + | @Callable(s) | |
683 | + | func swapParamsByUserSYSREADONLY (cS,ew) = { | |
684 | + | let ex = m(invoke(bm, "nsbtStakingSYSREADONLY", [cS], nil)) | |
685 | + | if ((ex == ex)) | |
677 | 686 | then { | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | let | |
682 | - | let | |
683 | - | let | |
684 | - | let | |
685 | - | let | |
687 | + | let ey = (r(ex[0]) + ew) | |
688 | + | let ez = (r(ex[1]) + ew) | |
689 | + | let cW = r(invoke(bl, "calcSwapLimitREADONLY", [ey], nil)) | |
690 | + | let eA = valueOrElse(getInteger(this, aH(cS)), 0) | |
691 | + | let eB = aA() | |
692 | + | let eC = (height - eA) | |
693 | + | let eD = (eC >= eB) | |
694 | + | let cX = if (eD) | |
686 | 695 | then 0 | |
687 | - | else valueOrElse(getInteger(this, | |
688 | - | let | |
696 | + | else valueOrElse(getInteger(this, aF(cS)), 0) | |
697 | + | let cY = if (eD) | |
689 | 698 | then 0 | |
690 | - | else ( | |
691 | - | $Tuple2(nil, $Tuple5( | |
699 | + | else (eB - eC) | |
700 | + | $Tuple2(nil, $Tuple5(cW, cX, cY, ey, ez)) | |
692 | 701 | } | |
693 | 702 | else throw("Strict value is not equal to itself.") | |
694 | 703 | } | |
695 | 704 | ||
696 | 705 | ||
697 | - | @Verifier(bn) | |
698 | - | func eI () = { | |
699 | - | let eJ = toBase58String(bn.id) | |
700 | - | let eK = ((((if (sigVerify(bn.bodyBytes, bn.proofs[0], fromBase58String(v[0]))) | |
706 | + | @Verifier(bp) | |
707 | + | func eE () = { | |
708 | + | let eF = toBase58String(bp.id) | |
709 | + | let eG = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], x) | |
710 | + | let eH = split(valueOrElse(getString(be, "%s__multisig"), eG), x) | |
711 | + | let eI = ((((if (sigVerify(bp.bodyBytes, bp.proofs[0], fromBase58String(eH[0]))) | |
701 | 712 | then 1 | |
702 | - | else 0) + (if (sigVerify( | |
713 | + | else 0) + (if (sigVerify(bp.bodyBytes, bp.proofs[1], fromBase58String(eH[1]))) | |
703 | 714 | then 1 | |
704 | - | else 0)) + (if (sigVerify( | |
715 | + | else 0)) + (if (sigVerify(bp.bodyBytes, bp.proofs[2], fromBase58String(eH[2]))) | |
705 | 716 | then 1 | |
706 | - | else 0)) + (if (sigVerify( | |
717 | + | else 0)) + (if (sigVerify(bp.bodyBytes, bp.proofs[3], fromBase58String(eH[3]))) | |
707 | 718 | then 2 | |
708 | 719 | else 0)) | |
709 | - | let | |
710 | - | if ($isInstanceOf( | |
720 | + | let o = bp | |
721 | + | if ($isInstanceOf(o, "SponsorFeeTransaction")) | |
711 | 722 | then { | |
712 | - | let | |
713 | - | if ( | |
714 | - | then ( | |
723 | + | let eJ = o | |
724 | + | if (bo(eJ)) | |
725 | + | then (eI >= 3) | |
715 | 726 | else false | |
716 | 727 | } | |
717 | - | else ( | |
728 | + | else (eI >= 3) | |
718 | 729 | } | |
719 | 730 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | func a (b,c) = valueOrErrorMessage(getString(b, c), (("Mandatory this." + c) + " is not defined")) | |
4 | + | let a = "b3ff7472a1d54a9f0c8f6d6665c4458c36a31e48" | |
5 | + | ||
6 | + | func b (c,d) = valueOrErrorMessage(getString(c, d), (("Mandatory this." + d) + " is not defined")) | |
5 | 7 | ||
6 | 8 | ||
7 | - | func | |
9 | + | func e (f) = calculateLeaseId(f) | |
8 | 10 | ||
9 | 11 | ||
10 | - | func | |
12 | + | func g (d) = valueOrElse(getInteger(this, d), 0) | |
11 | 13 | ||
12 | 14 | ||
13 | - | func | |
15 | + | func h (d) = valueOrElse(getString(this, d), "") | |
14 | 16 | ||
15 | 17 | ||
16 | - | func | |
18 | + | func i (d) = valueOrElse(getBoolean(this, d), false) | |
17 | 19 | ||
18 | 20 | ||
19 | - | func | |
21 | + | func j (c,d) = valueOrElse(getInteger(addressFromStringValue(c), d), 0) | |
20 | 22 | ||
21 | 23 | ||
22 | - | func | |
24 | + | func k (c,d) = valueOrElse(getString(addressFromStringValue(c), d), "") | |
23 | 25 | ||
24 | 26 | ||
25 | - | func | |
27 | + | func l (c,d) = valueOrElse(getBoolean(addressFromStringValue(c), d), false) | |
26 | 28 | ||
27 | 29 | ||
28 | - | func | |
29 | - | let | |
30 | - | if ($isInstanceOf( | |
30 | + | func m (n) = { | |
31 | + | let o = n | |
32 | + | if ($isInstanceOf(o, "List[Any]")) | |
31 | 33 | then { | |
32 | - | let | |
33 | - | | |
34 | + | let f = o | |
35 | + | f | |
34 | 36 | } | |
35 | 37 | else throw("fail to cast into List[Any]") | |
36 | 38 | } | |
37 | 39 | ||
38 | 40 | ||
39 | - | func p ( | |
40 | - | let | |
41 | - | if ($isInstanceOf( | |
41 | + | func p (n) = { | |
42 | + | let o = n | |
43 | + | if ($isInstanceOf(o, "String")) | |
42 | 44 | then { | |
43 | - | let q = | |
45 | + | let q = o | |
44 | 46 | q | |
45 | 47 | } | |
46 | 48 | else throw("fail to cast into String") | |
47 | 49 | } | |
48 | 50 | ||
49 | 51 | ||
50 | - | func r ( | |
51 | - | let | |
52 | - | if ($isInstanceOf( | |
52 | + | func r (n) = { | |
53 | + | let o = n | |
54 | + | if ($isInstanceOf(o, "Int")) | |
53 | 55 | then { | |
54 | - | let s = | |
56 | + | let s = o | |
55 | 57 | s | |
56 | 58 | } | |
57 | 59 | else throw("fail to cast into Int") | |
58 | 60 | } | |
59 | 61 | ||
60 | 62 | ||
61 | - | func t ( | |
62 | - | let | |
63 | - | if ($isInstanceOf( | |
63 | + | func t (n) = { | |
64 | + | let o = n | |
65 | + | if ($isInstanceOf(o, "AttachedPayment")) | |
64 | 66 | then { | |
65 | - | let u = | |
67 | + | let u = o | |
66 | 68 | u | |
69 | + | } | |
70 | + | else throw("fail to cast into AttachedPayment") | |
71 | + | } | |
72 | + | ||
73 | + | ||
74 | + | func v (n) = { | |
75 | + | let o = n | |
76 | + | if ($isInstanceOf(o, "(Int, Int, Int, Int, Int)")) | |
77 | + | then { | |
78 | + | let w = o | |
79 | + | w | |
67 | 80 | } | |
68 | 81 | else throw("fail to cast into Int") | |
69 | 82 | } | |
70 | 83 | ||
71 | 84 | ||
72 | - | let | |
85 | + | let x = "__" | |
73 | 86 | ||
74 | - | let w = "__" | |
75 | - | ||
76 | - | let x = 100000000 | |
77 | - | ||
78 | - | let y = 1000000 | |
87 | + | let y = 100000000 | |
79 | 88 | ||
80 | 89 | let z = 1000000 | |
81 | 90 | ||
82 | - | let A = | |
91 | + | let A = 1000000 | |
83 | 92 | ||
84 | - | let B = | |
93 | + | let B = 20000 | |
85 | 94 | ||
86 | - | let C = | |
95 | + | let C = 0 | |
87 | 96 | ||
88 | - | let D = | |
97 | + | let D = 1 | |
89 | 98 | ||
90 | - | let E = | |
99 | + | let E = 2 | |
91 | 100 | ||
92 | - | let F = " | |
101 | + | let F = "neutrino_asset_id" | |
93 | 102 | ||
94 | - | let G = " | |
103 | + | let G = "bond_asset_id" | |
95 | 104 | ||
96 | - | let H = " | |
105 | + | let H = "auction_contract" | |
97 | 106 | ||
98 | - | let I = " | |
107 | + | let I = "nsbtStakingContract" | |
99 | 108 | ||
100 | - | let J = " | |
109 | + | let J = "liquidation_contract" | |
101 | 110 | ||
102 | - | let K = " | |
111 | + | let K = "rpd_contract" | |
103 | 112 | ||
104 | - | let L = " | |
113 | + | let L = "control_contract" | |
105 | 114 | ||
106 | - | let M = " | |
115 | + | let M = "math_contract" | |
107 | 116 | ||
108 | - | let N = "balance_ | |
117 | + | let N = "balance_waves_lock_interval" | |
109 | 118 | ||
110 | - | let O = " | |
119 | + | let O = "balance_neutrino_lock_interval" | |
111 | 120 | ||
112 | - | let P = "min_ | |
121 | + | let P = "min_waves_swap_amount" | |
113 | 122 | ||
114 | - | let Q = " | |
123 | + | let Q = "min_neutrino_swap_amount" | |
115 | 124 | ||
116 | - | let R = " | |
125 | + | let R = "node_oracle_provider" | |
117 | 126 | ||
118 | - | let S = " | |
127 | + | let S = "neutrinoOut_swap_feePart" | |
119 | 128 | ||
120 | - | let T = " | |
129 | + | let T = "wavesOut_swap_feePart" | |
121 | 130 | ||
122 | - | func U (b) = ("%s__" + b) | |
131 | + | let U = "fees_manager_address" | |
132 | + | ||
133 | + | func V (c) = ("%s__" + c) | |
123 | 134 | ||
124 | 135 | ||
125 | - | let | |
136 | + | let W = "price" | |
126 | 137 | ||
127 | - | let | |
138 | + | let X = "price_index" | |
128 | 139 | ||
129 | - | let | |
140 | + | let Y = "is_blocked" | |
130 | 141 | ||
131 | - | func | |
142 | + | func Z (aa) = ((W + "_") + toString(aa)) | |
132 | 143 | ||
133 | 144 | ||
134 | - | func | |
145 | + | func ab (ac) = ((X + "_") + toString(ac)) | |
135 | 146 | ||
136 | 147 | ||
137 | - | func | |
148 | + | func ad (ae) = h(makeString(["%s%d%s", "lease", toString(ae), "nodeAddress"], x)) | |
138 | 149 | ||
139 | 150 | ||
140 | - | func | |
151 | + | func af (ae) = addressFromStringValue(ad(ae)) | |
141 | 152 | ||
142 | 153 | ||
143 | - | func | |
154 | + | func ag () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], x)), (1000 * y)) | |
144 | 155 | ||
145 | 156 | ||
146 | - | func | |
157 | + | func ah (ai) = ("balance_unlock_block_" + ai) | |
147 | 158 | ||
148 | 159 | ||
149 | - | func | |
160 | + | func aj (ak) = makeString(["%s%d%s", "lease", toString(ak), "id"], x) | |
150 | 161 | ||
151 | 162 | ||
152 | - | func | |
163 | + | func al (am) = makeString(["%s%s%s", "leaseByAddress", am, "id"], x) | |
153 | 164 | ||
154 | 165 | ||
155 | - | func | |
166 | + | func an (ak) = makeString(["%s%d%s", "lease", toString(ak), "amount"], x) | |
156 | 167 | ||
157 | 168 | ||
158 | - | func | |
169 | + | func ao (am) = makeString(["%s%s%s", "leaseByAddress", am, "amount"], x) | |
159 | 170 | ||
160 | 171 | ||
161 | - | func | |
172 | + | func ap (aq) = makeString(["%s%d%s", "leaseGroup", toString(aq), "nodeList"], x) | |
162 | 173 | ||
163 | 174 | ||
164 | - | func | |
175 | + | func ar (as) = (("min_" + as) + "_swap_amount") | |
165 | 176 | ||
166 | 177 | ||
167 | - | func | |
178 | + | func at (as) = ("balance_lock_" + as) | |
168 | 179 | ||
169 | 180 | ||
170 | - | func | |
181 | + | func au (as,ai) = makeString(["balance_lock", as, ai], "_") | |
171 | 182 | ||
172 | 183 | ||
173 | - | func | |
184 | + | func av (as) = (("balance_" + as) + "_lock_interval") | |
174 | 185 | ||
175 | 186 | ||
176 | - | func | |
187 | + | func aw () = "balance_node_lock_interval" | |
177 | 188 | ||
178 | 189 | ||
179 | - | func | |
190 | + | func ax (as) = (as + "Out_swap_feePart") | |
180 | 191 | ||
181 | 192 | ||
182 | - | func | |
193 | + | func ay () = "swaps_timeframe" | |
183 | 194 | ||
184 | 195 | ||
185 | - | func | |
196 | + | func az (as) = valueOrElse(getInteger(this, ar(as)), 0) | |
186 | 197 | ||
187 | 198 | ||
188 | - | func | |
199 | + | func aA () = valueOrElse(getInteger(this, ay()), 1440) | |
189 | 200 | ||
190 | 201 | ||
191 | - | func | |
202 | + | func aB (as) = valueOrElse(getInteger(this, at(as)), 0) | |
192 | 203 | ||
193 | 204 | ||
194 | - | func | |
205 | + | func aC (as,ai) = valueOrElse(getInteger(this, au(as, ai)), 0) | |
195 | 206 | ||
196 | 207 | ||
197 | - | func | |
208 | + | func aD (as) = valueOrElse(getInteger(this, av(as)), 1440) | |
198 | 209 | ||
199 | 210 | ||
200 | - | func | |
211 | + | func aE () = valueOrElse(getInteger(this, aw()), 1) | |
201 | 212 | ||
202 | 213 | ||
203 | - | func | |
214 | + | func aF (aG) = makeString(["%s%s", "swapUserSpentInPeriod", aG], x) | |
204 | 215 | ||
205 | 216 | ||
206 | - | func | |
217 | + | func aH (aG) = makeString(["%s%s", "userLastSwapHeight", aG], x) | |
207 | 218 | ||
208 | 219 | ||
209 | - | func | |
220 | + | func aI () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, U), (U + " is not specified"))), (U + " invalid address format")) | |
210 | 221 | ||
211 | 222 | ||
212 | - | func | |
223 | + | func aJ (aK,aL) = fraction(fraction(aK, A, aL), y, z) | |
213 | 224 | ||
214 | 225 | ||
215 | - | func | |
226 | + | func aM (aK,aL) = fraction(fraction(aK, aL, A), z, y) | |
216 | 227 | ||
217 | 228 | ||
218 | - | func | |
229 | + | func aN (aK,aL) = aM(aK, aL) | |
219 | 230 | ||
220 | 231 | ||
221 | - | func | |
232 | + | func aO (aP) = split(aP, ",") | |
222 | 233 | ||
223 | 234 | ||
224 | - | func | |
235 | + | func aQ (as,aR) = throw(((("The specified amount in " + as) + " swap is less than the required minimum of ") + toString(aR))) | |
225 | 236 | ||
226 | 237 | ||
227 | - | func | |
238 | + | func aS () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles") | |
228 | 239 | ||
229 | 240 | ||
230 | - | func | |
241 | + | func aT (ac,aU,aV,aW,aX) = throw(((((((((("invalid price history index: index=" + toString(ac)) + " priceIndex=") + toString(aU)) + " indexHeight=") + toString(aV)) + " unlockHeight=") + toString(aW)) + " prevIndexHeight=") + toString(aX))) | |
231 | 242 | ||
232 | 243 | ||
233 | - | let | |
244 | + | let aY = h(J) | |
234 | 245 | ||
235 | - | let | |
246 | + | let aZ = h(I) | |
236 | 247 | ||
237 | - | let | |
248 | + | let ba = fromBase58String(h(F)) | |
238 | 249 | ||
239 | - | let | |
250 | + | let bb = h(H) | |
240 | 251 | ||
241 | - | let | |
252 | + | let bc = h(K) | |
242 | 253 | ||
243 | - | let | |
254 | + | let bd = h(L) | |
244 | 255 | ||
245 | - | let | |
256 | + | let be = addressFromStringValue(bd) | |
246 | 257 | ||
247 | - | let | |
258 | + | let bf = h(M) | |
248 | 259 | ||
249 | - | let | |
260 | + | let aU = j(bd, X) | |
250 | 261 | ||
251 | - | let | |
262 | + | let bg = l(bd, Y) | |
252 | 263 | ||
253 | - | let | |
264 | + | let bh = fromBase58String(h(R)) | |
254 | 265 | ||
255 | - | let | |
266 | + | let bi = fromBase58String("6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g") | |
256 | 267 | ||
257 | - | let | |
268 | + | let bj = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF") | |
258 | 269 | ||
259 | - | let | |
270 | + | let bk = this | |
260 | 271 | ||
261 | - | let | |
272 | + | let bl = addressFromStringValue(bf) | |
262 | 273 | ||
263 | - | let | |
274 | + | let bm = addressFromStringValue(aZ) | |
264 | 275 | ||
265 | - | func bm (bn) = { | |
266 | - | let bo = 100000 | |
267 | - | let bp = 1000 | |
268 | - | let bq = aL(bo, bl) | |
269 | - | let br = (bq * 2) | |
270 | - | let bs = fraction(bq, bp, 100) | |
271 | - | let bt = value(bn.minSponsoredAssetFee) | |
272 | - | if (if ((bt >= br)) | |
273 | - | then (bs >= bt) | |
276 | + | let bn = j(bd, W) | |
277 | + | ||
278 | + | func bo (bp) = { | |
279 | + | let bq = 100000 | |
280 | + | let br = 1000 | |
281 | + | let bs = aM(bq, bn) | |
282 | + | let bt = (bs * 2) | |
283 | + | let bu = fraction(bs, br, 100) | |
284 | + | let bv = value(bp.minSponsoredAssetFee) | |
285 | + | if (if ((bv >= bt)) | |
286 | + | then (bu >= bv) | |
274 | 287 | else false) | |
275 | - | then ( | |
288 | + | then (bp.assetId == ba) | |
276 | 289 | else false | |
277 | 290 | } | |
278 | 291 | ||
279 | 292 | ||
280 | - | func | |
293 | + | func bw (aa) = j(bd, Z(aa)) | |
281 | 294 | ||
282 | 295 | ||
283 | - | func | |
296 | + | func bx (ac) = j(bd, ab(ac)) | |
284 | 297 | ||
285 | 298 | ||
286 | - | func | |
299 | + | func by (aG) = makeString(["%s%s%s", "paramByUser", aG, "amount"], x) | |
287 | 300 | ||
288 | 301 | ||
289 | - | let | |
302 | + | let bz = 1 | |
290 | 303 | ||
291 | - | let | |
304 | + | let bA = 2 | |
292 | 305 | ||
293 | - | let | |
306 | + | let bB = 3 | |
294 | 307 | ||
295 | - | let | |
308 | + | let bC = 4 | |
296 | 309 | ||
297 | - | let | |
310 | + | let bD = 5 | |
298 | 311 | ||
299 | - | let | |
312 | + | let bE = 6 | |
300 | 313 | ||
301 | - | let | |
314 | + | let bF = 7 | |
302 | 315 | ||
303 | - | let | |
316 | + | let bG = 8 | |
304 | 317 | ||
305 | - | let | |
318 | + | let bH = 9 | |
306 | 319 | ||
307 | - | let | |
320 | + | let bI = 10 | |
308 | 321 | ||
309 | - | let | |
322 | + | let bJ = 11 | |
310 | 323 | ||
311 | - | let | |
324 | + | let bK = 12 | |
312 | 325 | ||
313 | - | let | |
326 | + | let bL = 13 | |
314 | 327 | ||
315 | - | let | |
328 | + | let bM = 14 | |
316 | 329 | ||
317 | - | let | |
330 | + | let bN = 15 | |
318 | 331 | ||
319 | - | let | |
332 | + | let bO = 16 | |
320 | 333 | ||
321 | - | func | |
334 | + | func bP (aG,bQ) = makeString(["%s%s", aG, bQ], x) | |
322 | 335 | ||
323 | 336 | ||
324 | - | func | |
337 | + | func bR (as,bS,bT,aL,bU,bV,bW,bX,bY,bZ,ca,cb,ac,cc,cd,ce) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s", as, bS, bT, aL, bU, bV, bW, bX, bY, bZ, ca, cb, ac, cc, cd, ce], x) | |
325 | 338 | ||
326 | 339 | ||
327 | - | func | |
340 | + | func cf (as,cg,ca) = bR(as, "PENDING", toString(cg), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(ca), "0", "0", "NULL", "0", "0") | |
328 | 341 | ||
329 | 342 | ||
330 | - | func | |
343 | + | func ch (ci,aL,bU,bV,cb,ac,cc) = bR(ci[bz], "FINISHED", ci[bB], toString(aL), toString(bU), toString(bV), ci[bF], ci[bG], toString(height), toString(lastBlock.timestamp), ci[bJ], toString(cb), toString(ac), cc, ci[bN], ci[bO]) | |
331 | 344 | ||
332 | 345 | ||
333 | - | func | |
334 | - | let | |
335 | - | split(valueOrErrorMessage(getString(this, | |
346 | + | func cj (aG,ck) = { | |
347 | + | let cl = bP(aG, ck) | |
348 | + | split(valueOrErrorMessage(getString(this, cl), ("no swap data for " + cl)), x) | |
336 | 349 | } | |
337 | 350 | ||
338 | 351 | ||
339 | - | func | |
340 | - | let | |
341 | - | [( | |
352 | + | func cm (cn,co) = { | |
353 | + | let cp = fraction(cn, co, z) | |
354 | + | [(cn - cp), cp, cn] | |
342 | 355 | } | |
343 | 356 | ||
344 | 357 | ||
345 | - | func | |
346 | - | then -( | |
347 | - | else | |
358 | + | func cq (cr) = if ((0 > cr)) | |
359 | + | then -(cr) | |
360 | + | else cr | |
348 | 361 | ||
349 | 362 | ||
350 | - | func | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | if (if (( | |
363 | + | func cs (ct) = { | |
364 | + | let cu = ((wavesBalance(bk).available - ct) - ag()) | |
365 | + | let cv = g(an(0)) | |
366 | + | let cw = g(an(1)) | |
367 | + | let cx = (cu + cv) | |
368 | + | let cy = (cu + cw) | |
369 | + | if (if ((cx > 0)) | |
357 | 370 | then true | |
358 | - | else ( | |
371 | + | else (cy > 0)) | |
359 | 372 | then { | |
360 | - | let | |
361 | - | let | |
362 | - | if (( | |
363 | - | then $Tuple2(0, | |
364 | - | else $Tuple2(1, | |
373 | + | let cz = cq((cx - cw)) | |
374 | + | let cA = cq((cy - cv)) | |
375 | + | if ((cA >= cz)) | |
376 | + | then $Tuple2(0, cx) | |
377 | + | else $Tuple2(1, cy) | |
365 | 378 | } | |
366 | 379 | else $Tuple2(-1, 0) | |
367 | 380 | } | |
368 | 381 | ||
369 | 382 | ||
370 | - | func | |
383 | + | func cB (s) = if ((s.caller != this)) | |
371 | 384 | then throw("Permission denied: this contract only allowed") | |
372 | 385 | else true | |
373 | 386 | ||
374 | 387 | ||
375 | - | func | |
376 | - | let | |
377 | - | let | |
378 | - | let | |
379 | - | if (( | |
388 | + | func cC (ct) = { | |
389 | + | let cD = cs(ct) | |
390 | + | let ak = cD._1 | |
391 | + | let cE = cD._2 | |
392 | + | if ((cE > 0)) | |
380 | 393 | then { | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | then [LeaseCancel(value( | |
394 | + | let cF = aj(ak) | |
395 | + | let cG = getBinary(this, cF) | |
396 | + | let cH = if (isDefined(cG)) | |
397 | + | then [LeaseCancel(value(cG))] | |
385 | 398 | else nil | |
386 | - | let | |
387 | - | let | |
388 | - | ( | |
399 | + | let cI = an(ak) | |
400 | + | let cJ = Lease(af(ak), cE) | |
401 | + | (cH ++ [cJ, BinaryEntry(cF, e(cJ)), IntegerEntry(an(ak), cE)]) | |
389 | 402 | } | |
390 | 403 | else nil | |
391 | 404 | } | |
392 | 405 | ||
393 | 406 | ||
394 | - | func cJ (ar,cK,cL,cM,cN) = { | |
395 | - | let cO = cN | |
396 | - | let cP = cO._1 | |
397 | - | let cQ = cO._2 | |
398 | - | let cR = cO._3 | |
399 | - | let aQ = ay(ar) | |
400 | - | let cS = aA(ar) | |
401 | - | let cT = aB(ar, cL) | |
402 | - | let al = ac(0) | |
403 | - | let cU = bu(bv(aT)) | |
404 | - | let cV = (al == cL) | |
405 | - | let cW = if (cV) | |
406 | - | then aD() | |
407 | - | else aC(ar) | |
408 | - | let bY = (height + cW) | |
409 | - | let cX = if ((ar == "neutrino")) | |
410 | - | then cK | |
411 | - | else aL(cK, cU) | |
412 | - | if ((aQ > cK)) | |
413 | - | then aP(ar, aQ) | |
414 | - | else if (if (!(cV)) | |
415 | - | then (cQ > 0) | |
407 | + | func cK (cL) = { | |
408 | + | let am = af(cL) | |
409 | + | let cM = an(cL) | |
410 | + | let cN = g(cM) | |
411 | + | let cO = aj(cL) | |
412 | + | let cP = value(getBinary(this, cO)) | |
413 | + | $Tuple5(am, cM, cN, cO, cP) | |
414 | + | } | |
415 | + | ||
416 | + | ||
417 | + | func cQ (as,cR,cS,cT,cU) = { | |
418 | + | let cV = cU | |
419 | + | let cW = cV._1 | |
420 | + | let cX = cV._2 | |
421 | + | let cY = cV._3 | |
422 | + | let aR = az(as) | |
423 | + | let cZ = aB(as) | |
424 | + | let da = aC(as, cS) | |
425 | + | let am = ad(0) | |
426 | + | let db = bw(bx(aU)) | |
427 | + | let dc = (am == cS) | |
428 | + | let dd = if (dc) | |
429 | + | then aE() | |
430 | + | else aD(as) | |
431 | + | let ca = (height + dd) | |
432 | + | let de = if ((as == "neutrino")) | |
433 | + | then cR | |
434 | + | else aM(cR, db) | |
435 | + | if ((aR > cR)) | |
436 | + | then aQ(as, aR) | |
437 | + | else if (if (!(dc)) | |
438 | + | then (cX > 0) | |
416 | 439 | else false) | |
417 | - | then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + | |
418 | - | else if (if (!( | |
419 | - | then ( | |
440 | + | then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + cY)))) | |
441 | + | else if (if (!(dc)) | |
442 | + | then (de > cW) | |
420 | 443 | else false) | |
421 | - | then throw(((("You have exceeded your swap limit! Requested: " + toString( | |
422 | - | else if ( | |
423 | - | then | |
444 | + | then throw(((("You have exceeded your swap limit! Requested: " + toString(de)) + ", available: ") + toString(cW))) | |
445 | + | else if (bg) | |
446 | + | then aS() | |
424 | 447 | else { | |
425 | - | let | |
426 | - | then | |
448 | + | let df = if ((as == "waves")) | |
449 | + | then cC(0) | |
427 | 450 | else nil | |
428 | - | $Tuple2(([IntegerEntry( | |
451 | + | $Tuple2(([IntegerEntry(aF(cS), de), IntegerEntry(aH(cS), height), IntegerEntry(au(as, cS), (da + cR)), IntegerEntry(ah(cS), ca), IntegerEntry(at(as), (cZ + cR)), StringEntry(bP(cS, cT), cf(as, cR, ca))] ++ df), unit) | |
429 | 452 | } | |
430 | 453 | } | |
431 | 454 | ||
432 | 455 | ||
433 | - | func | |
434 | - | let | |
435 | - | let | |
436 | - | let | |
437 | - | let | |
438 | - | let | |
439 | - | let | |
440 | - | let | |
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | let | |
449 | - | let | |
450 | - | then $Tuple2( | |
451 | - | else if (( | |
452 | - | then $Tuple2( | |
453 | - | else throw(("Unsupported swap type " + | |
454 | - | let | |
455 | - | let | |
456 | - | let | |
457 | - | if ( | |
458 | - | then | |
459 | - | else if (( | |
456 | + | func dg (dh,ac,ck,cc) = { | |
457 | + | let aG = addressFromStringValue(dh) | |
458 | + | let di = aI() | |
459 | + | let ci = cj(dh, ck) | |
460 | + | let ca = parseIntValue(ci[bJ]) | |
461 | + | let as = ci[bz] | |
462 | + | let bT = parseIntValue(ci[bB]) | |
463 | + | let dj = ci[bA] | |
464 | + | let bW = parseIntValue(ci[bF]) | |
465 | + | let dk = valueOrElse(getInteger(this, ax(as)), B) | |
466 | + | let cZ = aB(as) | |
467 | + | let da = aC(as, dh) | |
468 | + | let aW = ca | |
469 | + | let aV = bx(ac) | |
470 | + | let aX = bx((ac - 1)) | |
471 | + | let db = bw(aV) | |
472 | + | let dl = if ((as == "waves")) | |
473 | + | then $Tuple2(aM(bT, db), ba) | |
474 | + | else if ((as == "neutrino")) | |
475 | + | then $Tuple2(aJ(bT, db), unit) | |
476 | + | else throw(("Unsupported swap type " + as)) | |
477 | + | let dm = cm(dl._1, dk) | |
478 | + | let bU = dm[C] | |
479 | + | let bV = dm[D] | |
480 | + | if (bg) | |
481 | + | then aS() | |
482 | + | else if ((dj != "PENDING")) | |
460 | 483 | then throw("swap has been already processed") | |
461 | - | else if (( | |
462 | - | then throw((("please wait for: " + toString( | |
463 | - | else if (if (if (( | |
484 | + | else if ((aW > height)) | |
485 | + | then throw((("please wait for: " + toString(aW)) + " block height to withdraw funds")) | |
486 | + | else if (if (if ((ac > aU)) | |
464 | 487 | then true | |
465 | - | else ( | |
488 | + | else (aW > aV)) | |
466 | 489 | then true | |
467 | - | else if (( | |
468 | - | then ( | |
490 | + | else if ((aX != 0)) | |
491 | + | then (aX >= aW) | |
469 | 492 | else false) | |
470 | - | then | |
471 | - | else if ((0 >= | |
493 | + | then aT(ac, aU, aV, aW, aX) | |
494 | + | else if ((0 >= dm[E])) | |
472 | 495 | then throw("balance equals zero") | |
473 | - | else if (if ((0 > | |
496 | + | else if (if ((0 > dk)) | |
474 | 497 | then true | |
475 | - | else ( | |
476 | - | then throw(((("invalid outFeePart config for " + | |
498 | + | else (dk >= z)) | |
499 | + | then throw(((("invalid outFeePart config for " + as) + " swap: outFeePart=") + toString(dk))) | |
477 | 500 | else { | |
478 | - | let | |
479 | - | then ( | |
501 | + | let ct = if (if ((as == "neutrino")) | |
502 | + | then (dl._1 > 0) | |
480 | 503 | else false) | |
481 | - | then | |
482 | - | else | |
483 | - | let | |
484 | - | $ | |
504 | + | then dl._1 | |
505 | + | else 0 | |
506 | + | let dn = [IntegerEntry(au(as, dh), (da - bT)), IntegerEntry(at(as), (cZ - bT)), ScriptTransfer(aG, bU, dl._2), StringEntry(bP(dh, ck), ch(ci, db, bU, bV, aW, ac, cc))] | |
507 | + | $Tuple3(dn, AttachedPayment(dl._2, bV), ct) | |
485 | 508 | } | |
486 | 509 | } | |
487 | 510 | ||
488 | 511 | ||
489 | - | func dh (di) = { | |
490 | - | let al = ae(di) | |
491 | - | let dj = am(di) | |
492 | - | let dk = f(dj) | |
493 | - | let dl = ai(di) | |
494 | - | let dm = value(getBinary(this, dl)) | |
495 | - | $Tuple5(al, dj, dk, dl, dm) | |
496 | - | } | |
497 | - | ||
498 | - | ||
499 | - | @Callable(cA) | |
500 | - | func constructor (dn,do,dp,dq,dr,ds,dt,du,dv,dw,dx,dy) = { | |
501 | - | let dz = cz(cA) | |
502 | - | if ((dz == dz)) | |
503 | - | then if ((size(cA.payments) != 0)) | |
512 | + | @Callable(s) | |
513 | + | func constructor (do,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz) = { | |
514 | + | let dA = cB(s) | |
515 | + | if ((dA == dA)) | |
516 | + | then if ((size(s.payments) != 0)) | |
504 | 517 | then throw("no payments allowed") | |
505 | - | else [ | |
518 | + | else [StringEntry(F, do), StringEntry(G, dp), StringEntry(H, dq), StringEntry(J, dr), StringEntry(K, ds), StringEntry(R, dt), IntegerEntry(N, du), IntegerEntry(O, dv), IntegerEntry(P, dw), IntegerEntry(Q, dx), IntegerEntry(S, dy), IntegerEntry(T, dz)] | |
506 | 519 | else throw("Strict value is not equal to itself.") | |
507 | 520 | } | |
508 | 521 | ||
509 | 522 | ||
510 | 523 | ||
511 | - | @Callable( | |
512 | - | func constructorV2 ( | |
513 | - | let | |
514 | - | if (( | |
515 | - | then if ((size( | |
524 | + | @Callable(s) | |
525 | + | func constructorV2 (bl,bm,dB) = { | |
526 | + | let dA = cB(s) | |
527 | + | if ((dA == dA)) | |
528 | + | then if ((size(s.payments) != 0)) | |
516 | 529 | then throw("no payments allowed") | |
517 | - | else [StringEntry( | |
530 | + | else [StringEntry(M, bl), StringEntry(I, bm), IntegerEntry(ay(), dB)] | |
518 | 531 | else throw("Strict value is not equal to itself.") | |
519 | 532 | } | |
520 | 533 | ||
521 | 534 | ||
522 | 535 | ||
523 | - | @Callable( | |
524 | - | func swapWavesToNeutrino () = if ((size( | |
536 | + | @Callable(s) | |
537 | + | func swapWavesToNeutrino () = if ((size(s.payments) != 1)) | |
525 | 538 | then throw("swapWavesToNeutrino require only one payment") | |
526 | 539 | else { | |
527 | - | let | |
528 | - | if (isDefined( | |
540 | + | let dC = value(s.payments[0]) | |
541 | + | if (isDefined(dC.assetId)) | |
529 | 542 | then throw("Only Waves token is allowed for swapping.") | |
530 | 543 | else { | |
531 | - | let | |
532 | - | let | |
533 | - | let | |
534 | - | let | |
535 | - | | |
544 | + | let aG = toString(s.caller) | |
545 | + | let cT = toBase58String(s.transactionId) | |
546 | + | let dD = v(invoke(this, "swapParamsByUserSYSREADONLY", [aG, 0], nil)) | |
547 | + | let dE = cQ("waves", dC.amount, aG, cT, dD) | |
548 | + | dE | |
536 | 549 | } | |
537 | 550 | } | |
538 | 551 | ||
539 | 552 | ||
540 | 553 | ||
541 | - | @Callable( | |
542 | - | func swapNeutrinoToWaves () = if ((size( | |
554 | + | @Callable(s) | |
555 | + | func swapNeutrinoToWaves () = if ((size(s.payments) != 1)) | |
543 | 556 | then throw("swapNeutrinoToWaves require only one payment") | |
544 | 557 | else { | |
545 | - | let | |
546 | - | if (( | |
558 | + | let dC = value(s.payments[0]) | |
559 | + | if ((dC.assetId != ba)) | |
547 | 560 | then throw("Only appropriate Neutrino tokens are allowed for swapping.") | |
548 | 561 | else { | |
549 | - | let | |
550 | - | let | |
551 | - | let | |
552 | - | let | |
553 | - | | |
562 | + | let aG = toString(s.caller) | |
563 | + | let cT = toBase58String(s.transactionId) | |
564 | + | let dD = v(invoke(this, "swapParamsByUserSYSREADONLY", [aG, 0], nil)) | |
565 | + | let dE = cQ("neutrino", dC.amount, aG, cT, dD) | |
566 | + | dE | |
554 | 567 | } | |
555 | 568 | } | |
556 | 569 | ||
557 | 570 | ||
558 | 571 | ||
559 | - | @Callable(cA) | |
560 | - | func withdraw (da,ab,ci) = if ((size(cA.payments) != 0)) | |
561 | - | then throw("no payments allowed") | |
562 | - | else { | |
563 | - | let dE = cZ(da, ab, ci, toBase58String(cA.transactionId)) | |
564 | - | let dg = dE._1 | |
565 | - | let dF = dE._2 | |
566 | - | let dG = invoke(bk, "deposit", nil, [dF]) | |
567 | - | if ((dG == dG)) | |
568 | - | then dg | |
569 | - | else throw("Strict value is not equal to itself.") | |
570 | - | } | |
572 | + | @Callable(s) | |
573 | + | func withdraw (dh,ac,ck) = { | |
574 | + | let bQ = toBase58String(s.transactionId) | |
575 | + | if ((size(s.payments) != 0)) | |
576 | + | then throw("no payments allowed") | |
577 | + | else { | |
578 | + | let dF = dg(dh, ac, ck, bQ) | |
579 | + | let dn = dF._1 | |
580 | + | let dG = dF._2 | |
581 | + | let dH = dF._3 | |
582 | + | let dI = invoke(this, "internalUnleaseAndLease", [dH], nil) | |
583 | + | if ((dI == dI)) | |
584 | + | then if ((0 >= dG.amount)) | |
585 | + | then dn | |
586 | + | else { | |
587 | + | let dJ = invoke(bm, "deposit", nil, [dG]) | |
588 | + | if ((dJ == dJ)) | |
589 | + | then dn | |
590 | + | else throw("Strict value is not equal to itself.") | |
591 | + | } | |
592 | + | else throw("Strict value is not equal to itself.") | |
593 | + | } | |
594 | + | } | |
571 | 595 | ||
572 | 596 | ||
573 | 597 | ||
574 | - | @Callable(cA) | |
575 | - | func transferToAuction () = if ((size(cA.payments) != 0)) | |
576 | - | then throw("no payments allowed") | |
577 | - | else { | |
578 | - | let dH = l(invoke(bj, "calcNeutinoMetricsREADONLY", nil, nil)) | |
579 | - | let dI = r(dH[3]) | |
580 | - | let dJ = r(dH[5]) | |
581 | - | let dK = r(dH[6]) | |
582 | - | let dL = r(dH[9]) | |
583 | - | let dM = (dJ - assetBalance(addressFromStringValue(ba), bg)) | |
584 | - | let dN = (dK - assetBalance(addressFromStringValue(aX), aZ)) | |
585 | - | if (be) | |
586 | - | then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles") | |
587 | - | else if ((dM > (1 * y))) | |
588 | - | then [ScriptTransfer(addressFromStringValue(ba), dM, bg)] | |
589 | - | else if ((dN >= (1 * y))) | |
590 | - | then [ScriptTransfer(addressFromStringValue(aX), dN, aZ)] | |
591 | - | else throw(((((((("bond were generated or do not need it. Deficit:" + toString(dM)) + "|") + toString(0)) + ". Surplus:") + toString(dN)) + "|") + toString(dK))) | |
592 | - | } | |
598 | + | @Callable(s) | |
599 | + | func internalUnleaseAndLease (ct) = if ((s.caller != this)) | |
600 | + | then throw("internalUnleaseAndLease is not public method") | |
601 | + | else cC(ct) | |
593 | 602 | ||
594 | 603 | ||
595 | 604 | ||
596 | - | @Callable( | |
597 | - | func transferUsdnToUser ( | |
605 | + | @Callable(s) | |
606 | + | func transferUsdnToUser (aK,dK) = if ((s.caller != addressFromStringValue(bb))) | |
598 | 607 | then throw("Only auction contract is authorized") | |
599 | - | else [ScriptTransfer(addressFromStringValue( | |
608 | + | else [ScriptTransfer(addressFromStringValue(dK), aK, ba)] | |
600 | 609 | ||
601 | 610 | ||
602 | 611 | ||
603 | - | @Callable( | |
604 | - | func acceptWaves () = if (( | |
612 | + | @Callable(s) | |
613 | + | func acceptWaves () = if ((s.caller != addressFromStringValue(bb))) | |
605 | 614 | then throw("Currently only auction contract is allowed to call") | |
606 | - | else $Tuple2( | |
615 | + | else $Tuple2(cC(0), "success") | |
607 | 616 | ||
608 | 617 | ||
609 | 618 | ||
610 | - | @Callable( | |
611 | - | func approveLeasings ( | |
612 | - | let | |
613 | - | let | |
614 | - | let | |
615 | - | let | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | if (isDefined( | |
621 | - | then throw((("group " + toString( | |
619 | + | @Callable(s) | |
620 | + | func approveLeasings (dL,aq) = { | |
621 | + | let dM = (500000 * y) | |
622 | + | let dN = [0, 1, 2, 3, 4, 5, 6, 7] | |
623 | + | let dO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur") | |
624 | + | let dP = fromBase58String(dO) | |
625 | + | let dQ = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE") | |
626 | + | let dR = addressFromStringValue(dQ) | |
627 | + | let dS = ap(aq) | |
628 | + | let dT = getString(this, dS) | |
629 | + | if (isDefined(dT)) | |
630 | + | then throw((("group " + toString(aq)) + " already initialized")) | |
622 | 631 | else { | |
623 | - | let | |
624 | - | let | |
625 | - | if (( | |
632 | + | let dU = split(dL, x) | |
633 | + | let dV = size(dN) | |
634 | + | if ((s.callerPublicKey != dP)) | |
626 | 635 | then throw("approveLeasings not authorized") | |
627 | 636 | else { | |
628 | - | let | |
629 | - | let | |
630 | - | let | |
631 | - | let | |
632 | - | let | |
633 | - | let | |
634 | - | let | |
635 | - | let | |
636 | - | let | |
637 | - | let | |
638 | - | let | |
639 | - | let | |
640 | - | let | |
641 | - | let | |
642 | - | let | |
643 | - | if (( | |
637 | + | let dW = cK(0) | |
638 | + | let dX = dW._1 | |
639 | + | let dY = dW._2 | |
640 | + | let dZ = dW._3 | |
641 | + | let ea = dW._4 | |
642 | + | let eb = dW._5 | |
643 | + | let ec = cK(1) | |
644 | + | let ed = ec._1 | |
645 | + | let ee = ec._2 | |
646 | + | let ef = ec._3 | |
647 | + | let eg = ec._4 | |
648 | + | let eh = ec._5 | |
649 | + | let ei = Lease(dX, (dZ - ((dM * dV) / 2))) | |
650 | + | let ej = Lease(ed, (ef - ((dM * dV) / 2))) | |
651 | + | let ek = invoke(dR, "validateAndApproveLeasings", [dL], nil) | |
652 | + | if ((ek == ek)) | |
644 | 653 | then { | |
645 | - | func | |
646 | - | let | |
647 | - | let | |
648 | - | ( | |
654 | + | func el (em,s) = { | |
655 | + | let en = dU[s] | |
656 | + | let eo = Lease(addressFromStringValue(en), dM) | |
657 | + | (em ++ [eo, BinaryEntry(al(en), e(eo)), IntegerEntry(ao(en), dM)]) | |
649 | 658 | } | |
650 | 659 | ||
651 | - | ([StringEntry( | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | func | |
656 | - | then | |
657 | - | else | |
660 | + | ([StringEntry(dS, dL), BinaryEntry(ea, e(ei)), BinaryEntry(eg, e(ej)), IntegerEntry(dY, ei.amount), IntegerEntry(ee, ej.amount), LeaseCancel(eb), LeaseCancel(eh), ei, ej] ++ { | |
661 | + | let ep = dN | |
662 | + | let eq = size(ep) | |
663 | + | let er = nil | |
664 | + | func es (et,eu) = if ((eu >= eq)) | |
665 | + | then et | |
666 | + | else el(et, ep[eu]) | |
658 | 667 | ||
659 | - | func | |
660 | - | then | |
668 | + | func ev (et,eu) = if ((eu >= eq)) | |
669 | + | then et | |
661 | 670 | else throw("List size exceeds 8") | |
662 | 671 | ||
663 | - | | |
672 | + | ev(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
664 | 673 | }) | |
665 | 674 | } | |
666 | 675 | else throw("Strict value is not equal to itself.") | |
667 | 676 | } | |
668 | 677 | } | |
669 | 678 | } | |
670 | 679 | ||
671 | 680 | ||
672 | 681 | ||
673 | - | @Callable( | |
674 | - | func swapParamsByUserSYSREADONLY ( | |
675 | - | let | |
676 | - | if (( | |
682 | + | @Callable(s) | |
683 | + | func swapParamsByUserSYSREADONLY (cS,ew) = { | |
684 | + | let ex = m(invoke(bm, "nsbtStakingSYSREADONLY", [cS], nil)) | |
685 | + | if ((ex == ex)) | |
677 | 686 | then { | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | let | |
682 | - | let | |
683 | - | let | |
684 | - | let | |
685 | - | let | |
687 | + | let ey = (r(ex[0]) + ew) | |
688 | + | let ez = (r(ex[1]) + ew) | |
689 | + | let cW = r(invoke(bl, "calcSwapLimitREADONLY", [ey], nil)) | |
690 | + | let eA = valueOrElse(getInteger(this, aH(cS)), 0) | |
691 | + | let eB = aA() | |
692 | + | let eC = (height - eA) | |
693 | + | let eD = (eC >= eB) | |
694 | + | let cX = if (eD) | |
686 | 695 | then 0 | |
687 | - | else valueOrElse(getInteger(this, | |
688 | - | let | |
696 | + | else valueOrElse(getInteger(this, aF(cS)), 0) | |
697 | + | let cY = if (eD) | |
689 | 698 | then 0 | |
690 | - | else ( | |
691 | - | $Tuple2(nil, $Tuple5( | |
699 | + | else (eB - eC) | |
700 | + | $Tuple2(nil, $Tuple5(cW, cX, cY, ey, ez)) | |
692 | 701 | } | |
693 | 702 | else throw("Strict value is not equal to itself.") | |
694 | 703 | } | |
695 | 704 | ||
696 | 705 | ||
697 | - | @Verifier(bn) | |
698 | - | func eI () = { | |
699 | - | let eJ = toBase58String(bn.id) | |
700 | - | let eK = ((((if (sigVerify(bn.bodyBytes, bn.proofs[0], fromBase58String(v[0]))) | |
706 | + | @Verifier(bp) | |
707 | + | func eE () = { | |
708 | + | let eF = toBase58String(bp.id) | |
709 | + | let eG = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], x) | |
710 | + | let eH = split(valueOrElse(getString(be, "%s__multisig"), eG), x) | |
711 | + | let eI = ((((if (sigVerify(bp.bodyBytes, bp.proofs[0], fromBase58String(eH[0]))) | |
701 | 712 | then 1 | |
702 | - | else 0) + (if (sigVerify( | |
713 | + | else 0) + (if (sigVerify(bp.bodyBytes, bp.proofs[1], fromBase58String(eH[1]))) | |
703 | 714 | then 1 | |
704 | - | else 0)) + (if (sigVerify( | |
715 | + | else 0)) + (if (sigVerify(bp.bodyBytes, bp.proofs[2], fromBase58String(eH[2]))) | |
705 | 716 | then 1 | |
706 | - | else 0)) + (if (sigVerify( | |
717 | + | else 0)) + (if (sigVerify(bp.bodyBytes, bp.proofs[3], fromBase58String(eH[3]))) | |
707 | 718 | then 2 | |
708 | 719 | else 0)) | |
709 | - | let | |
710 | - | if ($isInstanceOf( | |
720 | + | let o = bp | |
721 | + | if ($isInstanceOf(o, "SponsorFeeTransaction")) | |
711 | 722 | then { | |
712 | - | let | |
713 | - | if ( | |
714 | - | then ( | |
723 | + | let eJ = o | |
724 | + | if (bo(eJ)) | |
725 | + | then (eI >= 3) | |
715 | 726 | else false | |
716 | 727 | } | |
717 | - | else ( | |
728 | + | else (eI >= 3) | |
718 | 729 | } | |
719 | 730 |
github/deemru/w8io/6500d08 299.21 ms ◑