tx · 6R61zSjuQy4cG1PtnxAtvcGxNQ8V2sFvqqhNK1DegBdN

3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx:  -0.01600000 Waves

2024.04.03 14:59 [3046567] smart account 3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx > SELF 0.00000000 Waves

{ "type": 13, "id": "6R61zSjuQy4cG1PtnxAtvcGxNQ8V2sFvqqhNK1DegBdN", "fee": 1600000, "feeAssetId": null, "timestamp": 1712145590838, "version": 2, "chainId": 84, "sender": "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx", "senderPublicKey": "NaY7sqttWGpnVrcb6uE8xPp2VnMjT7fhv3q1TKGL9ar", "proofs": [ "3JMrjT5Wy9vyzGKNdyuYHXutNXd2QijMtpdMEA4jZ3isWwVZwNYCvT8L9k1bRuTVMosURArQ3VVvEocUQXchQPJV", "3TVoWRxtdreFzncshW72vXy668QQjfuJM5Adw66iniaShqzBe7EX3edRyhjUWsciZx16Pug2NHdmBByFRUvtVQe1", "4uBj3qN4gp4CaitUyHfX6TBAQ7XzjA12Y48DJeijHnVxmyPawWnCXpfu9ddRjKnhvREvYF9odQMxBEhFk3pMcDSS" ], "script": "base64:BgInCAISEAoOCAgICAgICAgICAgICAgSAwoBCBIMCgoBAgECAQIBAgECLAALcmV2aXNpb25OdW0CAAADU0VQAgJfXwAZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAABABhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAAgAUSWR4Q29udHJvbENmZ1JwZERhcHAAAwAVSWR4Q29udHJvbENmZ01hdGhEYXBwAAQAHElkeENvbnRyb2xDZmdMaXF1aWRhdGlvbkRhcHAABQAVSWR4Q29udHJvbENmZ1Jlc3REYXBwAAYAHUlkeENvbnRyb2xDZmdOb2RlUmVnaXN0cnlEYXBwAAcAHElkeENvbnRyb2xDZmdOc2J0U3Rha2luZ0RhcHAACAAZSWR4Q29udHJvbENmZ01lZGlhdG9yRGFwcAAJABxJZHhDb250cm9sQ2ZnU3VyZlN0YWtpbmdEYXBwAAoAIElkeENvbnRyb2xDZmdHbnNidENvbnRyb2xsZXJEYXBwAAsAF0lkeENvbnRyb2xDZmdSZXN0VjJEYXBwAAwAG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAANABxJZHhDb250cm9sQ2ZnUGVnUHJvdmlkZXJEYXBwAA4BEGtleUNvbnRyb2xDb25maWcAAhElc19fY29udHJvbENvbmZpZwEOZGF0YUNvbnRyb2xDZmcOEG5ldXRyaW5vQ29udHJhY3QPYXVjdGlvbkNvbnRyYWN0C3JwZENvbnRyYWN0DG1hdGhDb250cmFjdBNsaXF1aWRhdGlvbkNvbnRyYWN0DHJlc3RDb250cmFjdBRub2RlUmVnaXN0cnlDb250cmFjdBNuc2J0U3Rha2luZ0NvbnRyYWN0EG1lZGlhdG9yQ29udHJhY3QTc3VyZlN0YWtpbmdDb250cmFjdBdnbnNidENvbnRyb2xsZXJDb250cmFjdA5yZXN0VjJDb250cmFjdBJnb3Zlcm5hbmNlQ29udHJhY3QMZG9yYUNvbnRyYWN0CQC5CQIJAMwIAgIcJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcwkAzAgCBRBuZXV0cmlub0NvbnRyYWN0CQDMCAIFD2F1Y3Rpb25Db250cmFjdAkAzAgCBQtycGRDb250cmFjdAkAzAgCBQxtYXRoQ29udHJhY3QJAMwIAgUTbGlxdWlkYXRpb25Db250cmFjdAkAzAgCBQxyZXN0Q29udHJhY3QJAMwIAgUUbm9kZVJlZ2lzdHJ5Q29udHJhY3QJAMwIAgUTbnNidFN0YWtpbmdDb250cmFjdAkAzAgCBRBtZWRpYXRvckNvbnRyYWN0CQDMCAIFE3N1cmZTdGFraW5nQ29udHJhY3QJAMwIAgUXZ25zYnRDb250cm9sbGVyQ29udHJhY3QJAMwIAgUOcmVzdFYyQ29udHJhY3QJAMwIAgUSZ292ZXJuYW5jZUNvbnRyYWN0CQDMCAIFDGRvcmFDb250cmFjdAUDbmlsBQNTRVABFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8CBmFtb3VudAVwcmljZQkAawMJAGsDBQZhbW91bnQFBXByaWNlAMCEPQDAhD0AgMLXLwEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQNrZXkAAAEYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQdhZGRyZXNzBQNrZXkCAAEWY29udmVydEpzb25BcnJheVRvTGlzdAEJanNvbkFycmF5CQC1CQIFCWpzb25BcnJheQIBLAAFcHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIFcHJpY2UAAAAKcHJpY2VJbmRleAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAgtwcmljZV9pbmRleAAAAAlpc0Jsb2NrZWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwIKaXNfYmxvY2tlZAcAEnBlcmNlbnRQcmljZU9mZnNldADoBwANcHViS2V5T3JhY2xlcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAgdvcmFjbGVzAgAAEXB1YktleU9yYWNsZXNMaXN0CQEWY29udmVydEpzb25BcnJheVRvTGlzdAEFDXB1YktleU9yYWNsZXMAD25ldXRyaW5vQWRkcmVzcwkBB0FkZHJlc3MBARoBVNflidhiIusxbJ+7yuaSiccNzSDicK1r3gASbGlxdWlkYXRpb25BZGRyZXNzCQEHQWRkcmVzcwEBGgFUhTvjHxcU6v6bh4bE1yasZWYGeJqLciC5AA1uZXV0cmlub0Fzc2V0ASD3dur394PKZdtuE+4CO89YKZWpwdGN8kvabNgdYoDI3gAPY29udHJvbENvbnRyYWN0BQR0aGlzAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgpjb250cm9sQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKY29udHJvbENmZwUDaWR4CQCsAgICLUNvbnRyb2wgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgACmNvbnRyb2xDZmcJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARBrZXlDb250cm9sQ29uZmlnAAUDU0VQABJnb3Zlcm5hbmNlQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRtJZHhDb250cm9sQ2ZnR292ZXJuYW5jZURhcHAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9uZXV0cmlub0FkZHJlc3MCFWJhbGFuY2VfbG9ja19uZXV0cmlubwAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPbmV1dHJpbm9BZGRyZXNzAhJiYWxhbmNlX2xvY2tfd2F2ZXMAAAAHcmVzZXJ2ZQkAZQIICQDvBwEFD25ldXRyaW5vQWRkcmVzcwdyZWd1bGFyBRJ3YXZlc0xvY2tlZEJhbGFuY2UADm5ldXRyaW5vU3VwcGx5CQBlAgkAZQIJAGQCBRVuZXV0cmlub0xvY2tlZEJhbGFuY2UICQEFdmFsdWUBCQDsBwEFDW5ldXRyaW5vQXNzZXQIcXVhbnRpdHkJAPAHAgUPbmV1dHJpbm9BZGRyZXNzBQ1uZXV0cmlub0Fzc2V0CQDwBwIFEmxpcXVpZGF0aW9uQWRkcmVzcwUNbmV1dHJpbm9Bc3NldAAHZGVmaWNpdAkAZQIFDm5ldXRyaW5vU3VwcGx5CQEWY29udmVydFdhdmVzVG9OZXV0cmlubwIFB3Jlc2VydmUFBXByaWNlARFmaW5kUHJpY2VzSW5SYW5nZQEGcHJpY2VzBA9taW5QZXJjZW50Qm91bmQAWgQPbWF4UGVyY2VudEJvdW5kAG4EAnAwCQCRAwIFBnByaWNlcwAABAZjaGVjazADCQBnAgAACQCRAwIFBnByaWNlcwAACQDMCAIAAAUDbmlsBANwMDEJAGkCCQBoAgkAkQMCBQZwcmljZXMAAQBkBQJwMAQDcDAyCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAIAZAUCcDAEA3AwMwkAaQIJAGgCCQCRAwIFBnByaWNlcwADAGQFAnAwBANwMDQJAGkCCQBoAgkAkQMCBQZwcmljZXMABABkBQJwMAQGYXJyYXkxAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AwMQkAZgIFA3AwMQUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAEJAMwIAgAABQNuaWwJAMwIAgAABQNuaWwEBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMDIJAGYCBQNwMDIFD21pblBlcmNlbnRCb3VuZAcJAMwIAgACBQZhcnJheTEFBmFycmF5MQQGYXJyYXkzAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AwMwkAZgIFA3AwMwUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAMFBmFycmF5MgUGYXJyYXkyAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AwNAkAZgIFA3AwNAUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAQFBmFycmF5MwUGYXJyYXkzBAZjaGVjazEDCQBnAgkAkAMBBQZjaGVjazAAAwUGY2hlY2swBAJwMQkAkQMCBQZwcmljZXMAAQMJAGcCAAAFAnAxCQDMCAIAAQUDbmlsBANwMTAJAGkCCQBoAgkAkQMCBQZwcmljZXMAAABkBQJwMQQDcDEyCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAIAZAUCcDEEA3AxMwkAaQIJAGgCCQCRAwIFBnByaWNlcwADAGQFAnAxBANwMTQJAGkCCQBoAgkAkQMCBQZwcmljZXMABABkBQJwMQQGYXJyYXkxAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AxMAkAZgIFA3AxMAUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAAJAMwIAgABBQNuaWwJAMwIAgABBQNuaWwEBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMTIJAGYCBQNwMTIFD21pblBlcmNlbnRCb3VuZAcJAMwIAgACBQZhcnJheTEFBmFycmF5MQQGYXJyYXkzAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AxMwkAZgIFA3AxMwUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAMFBmFycmF5MgUGYXJyYXkyAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AxNAkAZgIFA3AxNAUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAQFBmFycmF5MwUGYXJyYXkzBAZjaGVjazIDCQBnAgkAkAMBBQZjaGVjazEAAwUGY2hlY2sxBAJwMgkAkQMCBQZwcmljZXMAAgMJAGcCAAAFAnAyCQDMCAIAAgUDbmlsBANwMjAJAGkCCQBoAgkAkQMCBQZwcmljZXMAAABkBQJwMgQDcDIxCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAEAZAUCcDIEA3AyMwkAaQIJAGgCCQCRAwIFBnByaWNlcwADAGQFAnAyBANwMjQJAGkCCQBoAgkAkQMCBQZwcmljZXMABABkBQJwMgQGYXJyYXkxAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AyMAkAZgIFA3AyMAUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAAJAMwIAgACBQNuaWwJAMwIAgACBQNuaWwEBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMjEJAGYCBQNwMjEFD21pblBlcmNlbnRCb3VuZAcJAMwIAgABBQZhcnJheTEFBmFycmF5MQQGYXJyYXkzAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AyMwkAZgIFA3AyMwUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAMFBmFycmF5MgUGYXJyYXkyAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AyNAkAZgIFA3AyNAUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAQFBmFycmF5MwUGYXJyYXkzBAZjaGVjazMDCQBnAgkAkAMBBQZjaGVjazIAAwUGY2hlY2syBAJwMwkAkQMCBQZwcmljZXMAAwMJAGcCAAAFAnAzCQDMCAIAAwUDbmlsBANwMzAJAGkCCQBoAgkAkQMCBQZwcmljZXMAAABkBQJwMwQDcDMxCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAEAZAUCcDMEA3AzMgkAaQIJAGgCCQCRAwIFBnByaWNlcwACAGQFAnAzBANwMzQJAGkCCQBoAgkAkQMCBQZwcmljZXMABABkBQJwMwQGYXJyYXkxAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AzMAkAZgIFA3AzMAUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAAJAMwIAgADBQNuaWwJAMwIAgADBQNuaWwEBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMzEJAGYCBQNwMzEFD21pblBlcmNlbnRCb3VuZAcJAMwIAgABBQZhcnJheTEFBmFycmF5MQQGYXJyYXkzAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AzMgkAZgIFA3AzMgUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAIFBmFycmF5MgUGYXJyYXkyAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3AzNAkAZgIFA3AzNAUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAQFBmFycmF5MwUGYXJyYXkzAwkAZwIJAJADAQUGY2hlY2szAAMFBmNoZWNrMwQCcDQJAJEDAgUGcHJpY2VzAAQDCQBnAgAABQJwNAkAzAgCAAQFA25pbAQDcDQwCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAAAZAUCcDQEA3A0MQkAaQIJAGgCCQCRAwIFBnByaWNlcwABAGQFAnA0BANwNDIJAGkCCQBoAgkAkQMCBQZwcmljZXMAAgBkBQJwNAQDcDQzCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAMAZAUCcDQEBmFycmF5MQMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwNDAJAGYCBQNwNDAFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAACQDMCAIABAUDbmlsCQDMCAIABAUDbmlsBAZhcnJheTIDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDQxCQBmAgUDcDQxBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAQUGYXJyYXkxBQZhcnJheTEEBmFycmF5MwMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwNDIJAGYCBQNwNDIFD21pblBlcmNlbnRCb3VuZAcJAMwIAgACBQZhcnJheTIFBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwNDMJAGYCBQNwNDMFD21pblBlcmNlbnRCb3VuZAcJAMwIAgADBQZhcnJheTMFBmFycmF5MwESZm9ybWF0dGluZ1ByaWNlTXNnAQVwcmljZQkAmwMBCQCsAgIJAKwCAgkArAICCQCsAgICE1dBVkVTTkVVVFJJTk9QUkVGSVgCAV8JAKQDAQUGaGVpZ2h0AgFfCQCkAwEFBXByaWNlAQpQcmljZUVudHJ5AwhuZXdQcmljZQphc3NldElkU3RyDW5ld1ByaWNlSW5kZXgECWhlaWdodFN0cgkApAMBBQZoZWlnaHQEEG5ld1ByaWNlSW5kZXhTdHIJAKQDAQUNbmV3UHJpY2VJbmRleAQPcHJpY2VCeUFzc2V0S0VZCQC5CQIJAMwIAgIcJXMlcyVzX19jb21tb25fX3ByaWNlQnlBc3NldAkAzAgCBQphc3NldElkU3RyBQNuaWwFA1NFUAQQcHJpY2VCeUhlaWdodEtFWQkAuQkCCQDMCAICHyVzJXMlcyVkX19jb21tb25fX3ByaWNlQnlIZWlnaHQJAMwIAgUKYXNzZXRJZFN0cgkAzAgCBQloZWlnaHRTdHIFA25pbAUDU0VQBA9wcmljZUJ5SW5kZXhLRVkJALkJAgkAzAgCAh4lcyVzJXMlZF9fY29tbW9uX19wcmljZUJ5SW5kZXgJAMwIAgUKYXNzZXRJZFN0cgkAzAgCBRBuZXdQcmljZUluZGV4U3RyBQNuaWwFA1NFUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPcHJpY2VCeUFzc2V0S0VZBQhuZXdQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPcHJpY2VCeUluZGV4S0VZBQhuZXdQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQcHJpY2VCeUhlaWdodEtFWQUIbmV3UHJpY2UFA25pbAMBaQENY29uc3RydWN0b3JWMQ4QbmV1dHJpbm9Db250cmFjdA9hdWN0aW9uQ29udHJhY3QLcnBkQ29udHJhY3QMbWF0aENvbnRyYWN0E2xpcXVpZGF0aW9uQ29udHJhY3QMcmVzdENvbnRyYWN0FG5vZGVSZWdpc3RyeUNvbnRyYWN0E25zYnRTdGFraW5nQ29udHJhY3QQbWVkaWF0b3JDb250cmFjdBNzdXJmU3Rha2luZ0NvbnRyYWN0F2duc2J0Q29udHJvbGxlckNvbnRyYWN0DnJlc3RWMkNvbnRyYWN0EmdvdmVybmFuY2VDb250cmFjdAxkb3JhQ29udHJhY3QDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUNvbnRyb2xDb25maWcACQEOZGF0YUNvbnRyb2xDZmcOBRBuZXV0cmlub0NvbnRyYWN0BQ9hdWN0aW9uQ29udHJhY3QFC3JwZENvbnRyYWN0BQxtYXRoQ29udHJhY3QFE2xpcXVpZGF0aW9uQ29udHJhY3QFDHJlc3RDb250cmFjdAUUbm9kZVJlZ2lzdHJ5Q29udHJhY3QFE25zYnRTdGFraW5nQ29udHJhY3QFEG1lZGlhdG9yQ29udHJhY3QFE3N1cmZTdGFraW5nQ29udHJhY3QFF2duc2J0Q29udHJvbGxlckNvbnRyYWN0BQ5yZXN0VjJDb250cmFjdAUSZ292ZXJuYW5jZUNvbnRyYWN0BQxkb3JhQ29udHJhY3QFA25pbAFpARVjYWxsRW1lcmdlbmN5U2h1dGRvd24BBnJlYXNvbgQaQXV0b0VtZXJnZW5jeU9yYWNsZUFkZHJlc3MCIzNNclJDYlpoRDljUEJUMWVmRWt6QWZhZWFVMjZVa3ZmOW1oBA1jYWxsZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMDCQECIT0CBRpBdXRvRW1lcmdlbmN5T3JhY2xlQWRkcmVzcwUNY2FsbGVyQWRkcmVzcwkBAiE9AgkApQgBBRJnb3Zlcm5hbmNlQ29udHJhY3QFDWNhbGxlckFkZHJlc3MHCQACAQI9Y2FsbGVyIG11c3QgYmUgb25lIGFuIGVtZXJnZW5jeSBvcmFjbGUgb3IgR292ZXJuYW5jZSBjb250cmFjdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgIKaXNfYmxvY2tlZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgIRaXNfYmxvY2tlZF9jYWxsZXIFDWNhbGxlckFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgIRaXNfYmxvY2tlZF9yZWFzb24FBnJlYXNvbgUDbmlsAWkBFGZpbmFsaXplQ3VycmVudFByaWNlCgZwcmljZTEFc2lnbjEGcHJpY2UyBXNpZ24yBnByaWNlMwVzaWduMwZwcmljZTQFc2lnbjQGcHJpY2U1BXNpZ241AwUJaXNCbG9ja2VkCQACAQJaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgICBnByaWNlXwkApAMBBQZoZWlnaHQAAAAACQACAQIPd2FpdCBuZXh0IGJsb2NrAwkBAiE9AgkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAkAagIFBmhlaWdodAAFCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQkAAgEJAKwCAgkArAICCQCsAgICGk91dCBvZiB0dXJuIGZpbmFsaXphdGlvbjogCQCkAwEFBmhlaWdodAIdIGJsb2NrIHNob3VsZCBiZSBmaW5hbGl6ZSBieSAJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QJAGoCBQZoZWlnaHQABQQGcHJpY2VzCQDMCAIDCQDEEwMJARJmb3JtYXR0aW5nUHJpY2VNc2cBBQZwcmljZTEFBXNpZ24xCQDZBAEJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAAUGcHJpY2UxAAAJAMwIAgMJAMQTAwkBEmZvcm1hdHRpbmdQcmljZU1zZwEFBnByaWNlMgUFc2lnbjIJANkEAQkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAABBQZwcmljZTIAAAkAzAgCAwkAxBMDCQESZm9ybWF0dGluZ1ByaWNlTXNnAQUGcHJpY2UzBQVzaWduMwkA2QQBCQCRAwIFEXB1YktleU9yYWNsZXNMaXN0AAIFBnByaWNlMwAACQDMCAIDCQDEEwMJARJmb3JtYXR0aW5nUHJpY2VNc2cBBQZwcmljZTQFBXNpZ240CQDZBAEJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAwUGcHJpY2U0AAAJAMwIAgMJAMQTAwkBEmZvcm1hdHRpbmdQcmljZU1zZwEFBnByaWNlNQUFc2lnbjUJANkEAQkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAAEBQZwcmljZTUAAAUDbmlsBA56ZXJvUHJpY2VDb3VudAMJAAACCQCRAwIFBnByaWNlcwAAAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwABAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwACAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwADAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwAEAAAAAQAAAwkAZwIFDnplcm9QcmljZUNvdW50AAMJAAIBAiAzIHByaWNlcyBvciBtb3JlIGFyZSBlcXVhbHMgdG8gMAQNcHJpY2VzSW5SYW5nZQkBEWZpbmRQcmljZXNJblJhbmdlAQUGcHJpY2VzBBNwcmljZVByb3ZpZGluZ0NvdW50CQCQAwEFDXByaWNlc0luUmFuZ2UDCQBmAgADBRNwcmljZVByb3ZpZGluZ0NvdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgI6Q291bGQgbm90IGZpbmFsaXplIHByaWNlIGJlY2F1c2Ugb2YgYmlnIHZhcmlhdGlvbjogaGVpZ2h0PQkApAMBBQZoZWlnaHQCAQoJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAAIBPQkApAMBCQCRAwIFBnByaWNlcwAAAgEKCQCRAwIFEXB1YktleU9yYWNsZXNMaXN0AAECAT0JAKQDAQkAkQMCBQZwcmljZXMAAQIBCgkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAACAgE9CQCkAwEJAJEDAgUGcHJpY2VzAAICAQoJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAwIBPQkApAMBCQCRAwIFBnByaWNlcwADAgEKCQCRAwIFEXB1YktleU9yYWNsZXNMaXN0AAQCAT0JAKQDAQkAkQMCBQZwcmljZXMABAQEc3VtMQkAZAIJAGQCCQCRAwIFBnByaWNlcwkAkQMCBQ1wcmljZXNJblJhbmdlAAAJAJEDAgUGcHJpY2VzCQCRAwIFDXByaWNlc0luUmFuZ2UAAQkAkQMCBQZwcmljZXMJAJEDAgUNcHJpY2VzSW5SYW5nZQACBARzdW0yAwkAZwIFE3ByaWNlUHJvdmlkaW5nQ291bnQABAkAZAIFBHN1bTEJAJEDAgUGcHJpY2VzCQCRAwIFDXByaWNlc0luUmFuZ2UAAwUEc3VtMQQIcHJpY2VTdW0DCQBnAgUTcHJpY2VQcm92aWRpbmdDb3VudAAFCQBkAgUEc3VtMgkAkQMCBQZwcmljZXMJAJEDAgUNcHJpY2VzSW5SYW5nZQAEBQRzdW0yAwkAZwIFE3ByaWNlUHJvdmlkaW5nQ291bnQABgkAAgECHkludmFsaWQgcHJpY2VzSW5SYW5nZSBjcmVhdGlvbgQIbmV3UHJpY2UJAGkCBQhwcmljZVN1bQUTcHJpY2VQcm92aWRpbmdDb3VudAQKbmV3V3hQcmljZQkBC3ZhbHVlT3JFbHNlAgkAnwgBAg13eF9zdHViX3ByaWNlANX5BAQJd3hBc3NldElkAixFTUFNTHhEbnYzeGl6OFJYZzhCdGozM2pjRXczd0xjekwzSktZWW11dWJwYwQNbmV3VmlyZXNQcmljZQkBC3ZhbHVlT3JFbHNlAgkAnwgBAhB2aXJlc19zdHViX3ByaWNlAICaUQQMdmlyZXNBc3NldElkAiw5UkU0M3BQb3k2NEh5OUJtQzl4TTlERzFoS3FuQU1BcU5SbmJBbmlxWjFQZgQMbmV3V2luZFByaWNlCQELdmFsdWVPckVsc2UCCQCfCAECD3dpbmRfc3R1Yl9wcmljZQCkh/kCBAt3aW5kQXNzZXRJZAIsREo1c0dNYkJGU05BOHlUSFBUZk1QOVFEREhGcDZDRlRvVjJwb3RlWm03WDMDAwkAZwIFCG5ld1ByaWNlCQBkAgUFcHJpY2UJAGkCCQBoAgUFcHJpY2UFEnBlcmNlbnRQcmljZU9mZnNldABkBgkAZwIJAGUCBQVwcmljZQkAaQIJAGgCBQVwcmljZQUScGVyY2VudFByaWNlT2Zmc2V0AGQFCG5ld1ByaWNlBAZyZWFzb24CP2F1dG9tYXRpYyBlbWVyZ2VuY3kgc2h1dGRvd24gYmVjYXVzZSBvZiBsYXJnZSBwcmljZSB2YXJpYWJpbGl0eQkAzAgCCQEMQm9vbGVhbkVudHJ5AgIKaXNfYmxvY2tlZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgIRaXNfYmxvY2tlZF9jYWxsZXIJAKUIAQUEdGhpcwkAzAgCCQELU3RyaW5nRW50cnkCAhFpc19ibG9ja2VkX3JlYXNvbgUGcmVhc29uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIRYmxhY2tfc3dhcm1fcHJpY2UCAV8JAKQDAQUGaGVpZ2h0BQhuZXdQcmljZQUDbmlsBA1uZXdQcmljZUluZGV4CQBkAgUKcHJpY2VJbmRleAABCQDOCAIJAM4IAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQICBXByaWNlBQhuZXdQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAgZwcmljZV8JAKQDAQUGaGVpZ2h0BQhuZXdQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAgxwcmljZV9pbmRleF8JAKQDAQUNbmV3UHJpY2VJbmRleAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtwcmljZV9pbmRleAUNbmV3UHJpY2VJbmRleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg5pbmRleEJ5SGVpZ2h0XwkApAMBBQZoZWlnaHQFDW5ld1ByaWNlSW5kZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgINcHJpY2VCeUluZGV4XwkApAMBBQ1uZXdQcmljZUluZGV4BQhuZXdQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAghkZWZpY2l0XwkApAMBBQZoZWlnaHQFB2RlZmljaXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPbmV1dHJpbm9TdXBwbHlfCQCkAwEFBmhlaWdodAUObmV1dHJpbm9TdXBwbHkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIQZGVmaWNpdF9wZXJjZW50XwkApAMBBQZoZWlnaHQDCQECIT0CBQ5uZXV0cmlub1N1cHBseQAACQBpAgkAaAIFB2RlZmljaXQAZAUObmV1dHJpbm9TdXBwbHkAAAUDbmlsCQEKUHJpY2VFbnRyeQMFCG5ld1ByaWNlAgVXQVZFUwUNbmV3UHJpY2VJbmRleAkBClByaWNlRW50cnkDBQpuZXdXeFByaWNlBQl3eEFzc2V0SWQFDW5ld1ByaWNlSW5kZXgJAQpQcmljZUVudHJ5AwUNbmV3VmlyZXNQcmljZQUMdmlyZXNBc3NldElkBQ1uZXdQcmljZUluZGV4CQEKUHJpY2VFbnRyeQMFDG5ld1dpbmRQcmljZQULd2luZEFzc2V0SWQFDW5ld1ByaWNlSW5kZXgBAnR4AQZ2ZXJpZnkABBNwdWJLZXlBZG1pbnNMaXN0U3RyCQC5CQIJAMwIAgIsRXh0RUVLMTlubUtqOW1DcG5XeXZFRUpGWUFUTE1jVkVNdm9oaFVIa3lITm0JAMwIAgIsRXY1cHk1RmZCUVg5Y1pwWUtuZlFyVEI0OUJ5ZjhRbXBaV2VEVlJpbTR5VjcJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIFA25pbAUDU0VQBBBwdWJLZXlBZG1pbnNMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPY29udHJvbENvbnRyYWN0Agwlc19fbXVsdGlzaWcFE3B1YktleUFkbWluc0xpc3RTdHIFA1NFUAQFY291bnQJAGQCCQBkAgkAZAIDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAAAAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAEAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAgABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwADCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAADAAIAAAkAZwIFBWNvdW50AANTTysJ", "height": 3046567, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J89hJBRUFTkgdm6Ftvy1cBjJq2DD3qr7dqhVq88EjbWG Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = ""
55
6-let b = 1
6+let b = "__"
77
8-let c = 2
8+let c = 1
99
10-let d = 3
10+let d = 2
1111
12-let e = 4
12+let e = 3
1313
14-let f = 5
14+let f = 4
1515
16-let g = 6
16+let g = 5
1717
18-let h = 7
18+let h = 6
1919
20-let i = 8
20+let i = 7
2121
22-let j = 9
22+let j = 8
2323
24-let k = 10
24+let k = 9
2525
26-let l = 11
26+let l = 10
2727
28-let m = 12
28+let m = 11
2929
30-let n = 13
30+let n = 12
3131
32-let o = 14
32+let o = 13
3333
34-func p () = "%s__controlConfig"
34+let p = 14
35+
36+func q () = "%s__controlConfig"
3537
3638
37-func q (r,s,t,u,v,w,x,y,z,A,B,C,D,E) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s", r, s, t, u, v, w, x, y, z, A, B, C, D, E], a)
39+func r (s,t,u,v,w,x,y,z,A,B,C,D,E,F) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s", s, t, u, v, w, x, y, z, A, B, C, D, E, F], b)
3840
3941
40-func F (G,H) = fraction(fraction(G, H, 1000000), 1000000, 100000000)
42+func G (H,I) = fraction(fraction(H, I, 1000000), 1000000, 100000000)
4143
4244
43-func I (J,K) = valueOrElse(getInteger(addressFromStringValue(J), K), 0)
45+func J (K,L) = valueOrElse(getInteger(addressFromStringValue(K), L), 0)
4446
4547
46-func L (J,K) = valueOrElse(getString(J, K), "")
48+func M (K,L) = valueOrElse(getString(K, L), "")
4749
4850
49-func M (N) = split(N, ",")
51+func N (O) = split(O, ",")
5052
5153
52-let H = valueOrElse(getInteger(this, "price"), 0)
54+let I = valueOrElse(getInteger(this, "price"), 0)
5355
54-let O = valueOrElse(getInteger(this, "price_index"), 0)
56+let P = valueOrElse(getInteger(this, "price_index"), 0)
5557
56-let P = valueOrElse(getBoolean(this, "is_blocked"), false)
58+let Q = valueOrElse(getBoolean(this, "is_blocked"), false)
5759
58-let Q = 1000
60+let R = 1000
5961
60-let R = valueOrElse(getString(this, "oracles"), "")
62+let S = valueOrElse(getString(this, "oracles"), "")
6163
62-let S = M(R)
64+let T = N(S)
6365
64-let T = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
66+let U = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
6567
66-let U = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
68+let V = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
6769
68-let V = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
70+let W = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
6971
70-let W = this
72+let X = this
7173
72-func X (J,K) = valueOrErrorMessage(getString(J, K), makeString(["mandatory ", toString(J), ".", K, " is not defined"], ""))
74+func Y (K,L) = valueOrErrorMessage(getString(K, L), makeString(["mandatory ", toString(K), ".", L, " is not defined"], ""))
7375
7476
75-func Y (Z,aa) = valueOrErrorMessage(addressFromString(Z[aa]), ("Control cfg doesn't contain address at index " + toString(aa)))
77+func Z (aa,ab) = valueOrErrorMessage(addressFromString(aa[ab]), ("Control cfg doesn't contain address at index " + toString(ab)))
7678
7779
78-let Z = split_4C(X(this, p()), a)
80+let aa = split_4C(Y(this, q()), b)
7981
80-let D = Y(Z, n)
82+let E = Z(aa, o)
8183
82-let ab = valueOrElse(getInteger(T, "balance_lock_neutrino"), 0)
84+let ac = valueOrElse(getInteger(U, "balance_lock_neutrino"), 0)
8385
84-let ac = valueOrElse(getInteger(T, "balance_lock_waves"), 0)
86+let ad = valueOrElse(getInteger(U, "balance_lock_waves"), 0)
8587
86-let ad = (wavesBalance(T).regular - ac)
88+let ae = (wavesBalance(U).regular - ad)
8789
88-let ae = (((ab + value(assetInfo(V)).quantity) - assetBalance(T, V)) - assetBalance(U, V))
90+let af = (((ac + value(assetInfo(W)).quantity) - assetBalance(U, W)) - assetBalance(V, W))
8991
90-let af = (ae - F(ad, H))
92+let ag = (af - G(ae, I))
9193
92-func ag (ah) = {
93- let ai = 90
94- let aj = 110
95- let ak = ah[0]
96- let al = if ((0 >= ah[0]))
94+func ah (ai) = {
95+ let aj = 90
96+ let ak = 110
97+ let al = ai[0]
98+ let am = if ((0 >= ai[0]))
9799 then [0]
98100 else {
99- let am = ((ah[1] * 100) / ak)
100- let an = ((ah[2] * 100) / ak)
101- let ao = ((ah[3] * 100) / ak)
102- let ap = ((ah[4] * 100) / ak)
103- let aq = if (if ((aj > am))
104- then (am > ai)
101+ let an = ((ai[1] * 100) / al)
102+ let ao = ((ai[2] * 100) / al)
103+ let ap = ((ai[3] * 100) / al)
104+ let aq = ((ai[4] * 100) / al)
105+ let ar = if (if ((ak > an))
106+ then (an > aj)
105107 else false)
106108 then [1, 0]
107109 else [0]
108- let ar = if (if ((aj > an))
109- then (an > ai)
110+ let as = if (if ((ak > ao))
111+ then (ao > aj)
110112 else false)
111- then 2 :: aq
112- else aq
113- let as = if (if ((aj > ao))
114- then (ao > ai)
113+ then 2 :: ar
114+ else ar
115+ let at = if (if ((ak > ap))
116+ then (ap > aj)
115117 else false)
116- then 3 :: ar
117- else ar
118- if (if ((aj > ap))
119- then (ap > ai)
118+ then 3 :: as
119+ else as
120+ if (if ((ak > aq))
121+ then (aq > aj)
120122 else false)
121- then 4 :: as
122- else as
123+ then 4 :: at
124+ else at
123125 }
124- let at = if ((size(al) >= 3))
125- then al
126+ let au = if ((size(am) >= 3))
127+ then am
126128 else {
127- let au = ah[1]
128- if ((0 >= au))
129+ let av = ai[1]
130+ if ((0 >= av))
129131 then [1]
130132 else {
131- let av = ((ah[0] * 100) / au)
132- let aw = ((ah[2] * 100) / au)
133- let ax = ((ah[3] * 100) / au)
134- let ay = ((ah[4] * 100) / au)
135- let aq = if (if ((aj > av))
136- then (av > ai)
133+ let aw = ((ai[0] * 100) / av)
134+ let ax = ((ai[2] * 100) / av)
135+ let ay = ((ai[3] * 100) / av)
136+ let az = ((ai[4] * 100) / av)
137+ let ar = if (if ((ak > aw))
138+ then (aw > aj)
137139 else false)
138140 then [0, 1]
139141 else [1]
140- let ar = if (if ((aj > aw))
141- then (aw > ai)
142+ let as = if (if ((ak > ax))
143+ then (ax > aj)
142144 else false)
143- then 2 :: aq
144- else aq
145- let as = if (if ((aj > ax))
146- then (ax > ai)
145+ then 2 :: ar
146+ else ar
147+ let at = if (if ((ak > ay))
148+ then (ay > aj)
147149 else false)
148- then 3 :: ar
149- else ar
150- if (if ((aj > ay))
151- then (ay > ai)
150+ then 3 :: as
151+ else as
152+ if (if ((ak > az))
153+ then (az > aj)
152154 else false)
153- then 4 :: as
154- else as
155+ then 4 :: at
156+ else at
155157 }
156158 }
157- let az = if ((size(at) >= 3))
158- then at
159+ let aA = if ((size(au) >= 3))
160+ then au
159161 else {
160- let aA = ah[2]
161- if ((0 >= aA))
162+ let aB = ai[2]
163+ if ((0 >= aB))
162164 then [2]
163165 else {
164- let aB = ((ah[0] * 100) / aA)
165- let aC = ((ah[1] * 100) / aA)
166- let aD = ((ah[3] * 100) / aA)
167- let aE = ((ah[4] * 100) / aA)
168- let aq = if (if ((aj > aB))
169- then (aB > ai)
166+ let aC = ((ai[0] * 100) / aB)
167+ let aD = ((ai[1] * 100) / aB)
168+ let aE = ((ai[3] * 100) / aB)
169+ let aF = ((ai[4] * 100) / aB)
170+ let ar = if (if ((ak > aC))
171+ then (aC > aj)
170172 else false)
171173 then [0, 2]
172174 else [2]
173- let ar = if (if ((aj > aC))
174- then (aC > ai)
175+ let as = if (if ((ak > aD))
176+ then (aD > aj)
175177 else false)
176- then 1 :: aq
177- else aq
178- let as = if (if ((aj > aD))
179- then (aD > ai)
178+ then 1 :: ar
179+ else ar
180+ let at = if (if ((ak > aE))
181+ then (aE > aj)
180182 else false)
181- then 3 :: ar
182- else ar
183- if (if ((aj > aE))
184- then (aE > ai)
183+ then 3 :: as
184+ else as
185+ if (if ((ak > aF))
186+ then (aF > aj)
185187 else false)
186- then 4 :: as
187- else as
188+ then 4 :: at
189+ else at
188190 }
189191 }
190- let aF = if ((size(az) >= 3))
191- then az
192+ let aG = if ((size(aA) >= 3))
193+ then aA
192194 else {
193- let aG = ah[3]
194- if ((0 >= aG))
195+ let aH = ai[3]
196+ if ((0 >= aH))
195197 then [3]
196198 else {
197- let aH = ((ah[0] * 100) / aG)
198- let aI = ((ah[1] * 100) / aG)
199- let aJ = ((ah[2] * 100) / aG)
200- let aK = ((ah[4] * 100) / aG)
201- let aq = if (if ((aj > aH))
202- then (aH > ai)
199+ let aI = ((ai[0] * 100) / aH)
200+ let aJ = ((ai[1] * 100) / aH)
201+ let aK = ((ai[2] * 100) / aH)
202+ let aL = ((ai[4] * 100) / aH)
203+ let ar = if (if ((ak > aI))
204+ then (aI > aj)
203205 else false)
204206 then [0, 3]
205207 else [3]
206- let ar = if (if ((aj > aI))
207- then (aI > ai)
208+ let as = if (if ((ak > aJ))
209+ then (aJ > aj)
208210 else false)
209- then 1 :: aq
210- else aq
211- let as = if (if ((aj > aJ))
212- then (aJ > ai)
211+ then 1 :: ar
212+ else ar
213+ let at = if (if ((ak > aK))
214+ then (aK > aj)
213215 else false)
214- then 2 :: ar
215- else ar
216- if (if ((aj > aK))
217- then (aK > ai)
216+ then 2 :: as
217+ else as
218+ if (if ((ak > aL))
219+ then (aL > aj)
218220 else false)
219- then 4 :: as
220- else as
221+ then 4 :: at
222+ else at
221223 }
222224 }
223- if ((size(aF) >= 3))
224- then aF
225+ if ((size(aG) >= 3))
226+ then aG
225227 else {
226- let aL = ah[4]
227- if ((0 >= aL))
228+ let aM = ai[4]
229+ if ((0 >= aM))
228230 then [4]
229231 else {
230- let aM = ((ah[0] * 100) / aL)
231- let aN = ((ah[1] * 100) / aL)
232- let aO = ((ah[2] * 100) / aL)
233- let aP = ((ah[3] * 100) / aL)
234- let aq = if (if ((aj > aM))
235- then (aM > ai)
232+ let aN = ((ai[0] * 100) / aM)
233+ let aO = ((ai[1] * 100) / aM)
234+ let aP = ((ai[2] * 100) / aM)
235+ let aQ = ((ai[3] * 100) / aM)
236+ let ar = if (if ((ak > aN))
237+ then (aN > aj)
236238 else false)
237239 then [0, 4]
238240 else [4]
239- let ar = if (if ((aj > aN))
240- then (aN > ai)
241+ let as = if (if ((ak > aO))
242+ then (aO > aj)
241243 else false)
242- then 1 :: aq
243- else aq
244- let as = if (if ((aj > aO))
245- then (aO > ai)
244+ then 1 :: ar
245+ else ar
246+ let at = if (if ((ak > aP))
247+ then (aP > aj)
246248 else false)
247- then 2 :: ar
248- else ar
249- if (if ((aj > aP))
250- then (aP > ai)
249+ then 2 :: as
250+ else as
251+ if (if ((ak > aQ))
252+ then (aQ > aj)
251253 else false)
252- then 3 :: as
253- else as
254+ then 3 :: at
255+ else at
254256 }
255257 }
256258 }
257259
258260
259-func aQ (H) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(H)))
261+func aR (I) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(I)))
260262
261263
262-func aR (aS,aT,aU) = {
263- let aV = toString(height)
264- let aW = toString(aU)
265- let aX = makeString(["%s%s%s__common__priceByAsset", aT], a)
266- let aY = makeString(["%s%s%s%d__common__priceByHeight", aT, aV], a)
267- let aZ = makeString(["%s%s%s%d__common__priceByIndex", aT, aW], a)
268-[IntegerEntry(aX, aS), IntegerEntry(aZ, aS), IntegerEntry(aY, aS)]
264+func aS (aT,aU,aV) = {
265+ let aW = toString(height)
266+ let aX = toString(aV)
267+ let aY = makeString(["%s%s%s__common__priceByAsset", aU], b)
268+ let aZ = makeString(["%s%s%s%d__common__priceByHeight", aU, aW], b)
269+ let ba = makeString(["%s%s%s%d__common__priceByIndex", aU, aX], b)
270+[IntegerEntry(aY, aT), IntegerEntry(ba, aT), IntegerEntry(aZ, aT)]
269271 }
270272
271273
272-@Callable(ba)
273-func constructorV1 (r,s,t,u,v,w,x,y,z,A,B,C,D,E) = if ((ba.caller != this))
274+@Callable(bb)
275+func constructorV1 (s,t,u,v,w,x,y,z,A,B,C,D,E,F) = if ((bb.caller != this))
274276 then throw("permissions denied")
275- else [StringEntry(p(), q(r, s, t, u, v, w, x, y, z, A, B, C, D, E))]
277+ else [StringEntry(q(), r(s, t, u, v, w, x, y, z, A, B, C, D, E, F))]
276278
277279
278280
279-@Callable(ba)
280-func callEmergencyShutdown (bb) = {
281- let bc = "3MrRCbZhD9cPBT1efEkzAfaeaU26Ukvf9mh"
282- let bd = toString(ba.caller)
283- if (if ((bc != bd))
284- then (toString(D) != bd)
281+@Callable(bb)
282+func callEmergencyShutdown (bc) = {
283+ let bd = "3MrRCbZhD9cPBT1efEkzAfaeaU26Ukvf9mh"
284+ let be = toString(bb.caller)
285+ if (if ((bd != be))
286+ then (toString(E) != be)
285287 else false)
286288 then throw("caller must be one an emergency oracle or Governance contract")
287- else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", bd), StringEntry("is_blocked_reason", bb)]
289+ else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", be), StringEntry("is_blocked_reason", bc)]
288290 }
289291
290292
291293
292-@Callable(ba)
293-func finalizeCurrentPrice (be,bf,bg,bh,bi,bj,bk,bl,bm,bn) = if (P)
294+@Callable(bb)
295+func finalizeCurrentPrice (bf,bg,bh,bi,bj,bk,bl,bm,bn,bo) = if (Q)
294296 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
295297 else if ((valueOrElse(getInteger(this, ("price_" + toString(height))), 0) != 0))
296298 then throw("wait next block")
297- else if ((S[(height % 5)] != toBase58String(ba.callerPublicKey)))
298- then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + S[(height % 5)]))
299+ else if ((T[(height % 5)] != toBase58String(bb.callerPublicKey)))
300+ then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + T[(height % 5)]))
299301 else {
300- let ah = [if (sigVerify_8Kb(aQ(be), bf, fromBase58String(S[0])))
301- then be
302- else 0, if (sigVerify_8Kb(aQ(bg), bh, fromBase58String(S[1])))
303- then bg
304- else 0, if (sigVerify_8Kb(aQ(bi), bj, fromBase58String(S[2])))
305- then bi
306- else 0, if (sigVerify_8Kb(aQ(bk), bl, fromBase58String(S[3])))
307- then bk
308- else 0, if (sigVerify_8Kb(aQ(bm), bn, fromBase58String(S[4])))
309- then bm
302+ let ai = [if (sigVerify_8Kb(aR(bf), bg, fromBase58String(T[0])))
303+ then bf
304+ else 0, if (sigVerify_8Kb(aR(bh), bi, fromBase58String(T[1])))
305+ then bh
306+ else 0, if (sigVerify_8Kb(aR(bj), bk, fromBase58String(T[2])))
307+ then bj
308+ else 0, if (sigVerify_8Kb(aR(bl), bm, fromBase58String(T[3])))
309+ then bl
310+ else 0, if (sigVerify_8Kb(aR(bn), bo, fromBase58String(T[4])))
311+ then bn
310312 else 0]
311- let bo = if ((ah[0] == 0))
313+ let bp = if ((ai[0] == 0))
312314 then 1
313- else (0 + (if ((ah[1] == 0))
315+ else (0 + (if ((ai[1] == 0))
314316 then 1
315- else (0 + (if ((ah[2] == 0))
317+ else (0 + (if ((ai[2] == 0))
316318 then 1
317- else (0 + (if ((ah[3] == 0))
319+ else (0 + (if ((ai[3] == 0))
318320 then 1
319- else (0 + (if ((ah[4] == 0))
321+ else (0 + (if ((ai[4] == 0))
320322 then 1
321323 else 0))))))))
322- if ((bo >= 3))
324+ if ((bp >= 3))
323325 then throw("3 prices or more are equals to 0")
324326 else {
325- let bp = ag(ah)
326- let bq = size(bp)
327- if ((3 > bq))
327+ let bq = ah(ai)
328+ let br = size(bq)
329+ if ((3 > br))
328330 then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
329-") + S[0]) + "=") + toString(ah[0])) + "
330-") + S[1]) + "=") + toString(ah[1])) + "
331-") + S[2]) + "=") + toString(ah[2])) + "
332-") + S[3]) + "=") + toString(ah[3])) + "
333-") + S[4]) + "=") + toString(ah[4])))
331+") + T[0]) + "=") + toString(ai[0])) + "
332+") + T[1]) + "=") + toString(ai[1])) + "
333+") + T[2]) + "=") + toString(ai[2])) + "
334+") + T[3]) + "=") + toString(ai[3])) + "
335+") + T[4]) + "=") + toString(ai[4])))
334336 else {
335- let br = ((ah[bp[0]] + ah[bp[1]]) + ah[bp[2]])
336- let bs = if ((bq >= 4))
337- then (br + ah[bp[3]])
338- else br
339- let bt = if ((bq >= 5))
340- then (bs + ah[bp[4]])
337+ let bs = ((ai[bq[0]] + ai[bq[1]]) + ai[bq[2]])
338+ let bt = if ((br >= 4))
339+ then (bs + ai[bq[3]])
341340 else bs
342- if ((bq >= 6))
341+ let bu = if ((br >= 5))
342+ then (bt + ai[bq[4]])
343+ else bt
344+ if ((br >= 6))
343345 then throw("Invalid pricesInRange creation")
344346 else {
345- let aS = (bt / bq)
346- let bu = valueOrElse(getInteger("wx_stub_price"), 81109)
347- let bv = "EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc"
348- let bw = valueOrElse(getInteger("vires_stub_price"), 1330432)
349- let bx = "9RE43pPoy64Hy9BmC9xM9DG1hKqnAMAqNRnbAniqZ1Pf"
350- if (if ((aS >= (H + ((H * Q) / 100))))
347+ let aT = (bu / br)
348+ let bv = valueOrElse(getInteger("wx_stub_price"), 81109)
349+ let bw = "EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc"
350+ let bx = valueOrElse(getInteger("vires_stub_price"), 1330432)
351+ let by = "9RE43pPoy64Hy9BmC9xM9DG1hKqnAMAqNRnbAniqZ1Pf"
352+ let bz = valueOrElse(getInteger("wind_stub_price"), 6177700)
353+ let bA = "DJ5sGMbBFSNA8yTHPTfMP9QDDHFp6CFToV2poteZm7X3"
354+ if (if ((aT >= (I + ((I * R) / 100))))
351355 then true
352- else ((H - ((H * Q) / 100)) >= aS))
356+ else ((I - ((I * R) / 100)) >= aT))
353357 then {
354- let bb = "automatic emergency shutdown because of large price variability"
355-[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", bb), IntegerEntry((("black_swarm_price" + "_") + toString(height)), aS)]
358+ let bc = "automatic emergency shutdown because of large price variability"
359+[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", bc), IntegerEntry((("black_swarm_price" + "_") + toString(height)), aT)]
356360 }
357361 else {
358- let aU = (O + 1)
359- ((([IntegerEntry("price", aS), IntegerEntry(("price_" + toString(height)), aS), IntegerEntry(("price_index_" + toString(aU)), height), IntegerEntry("price_index", aU), IntegerEntry(("indexByHeight_" + toString(height)), aU), IntegerEntry(("priceByIndex_" + toString(aU)), aS), IntegerEntry(("deficit_" + toString(height)), af), IntegerEntry(("neutrinoSupply_" + toString(height)), ae), IntegerEntry(("deficit_percent_" + toString(height)), if ((ae != 0))
360- then ((af * 100) / ae)
361- else 0)] ++ aR(aS, "WAVES", aU)) ++ aR(bu, bv, aU)) ++ aR(bw, bx, aU))
362+ let aV = (P + 1)
363+ (((([IntegerEntry("price", aT), IntegerEntry(("price_" + toString(height)), aT), IntegerEntry(("price_index_" + toString(aV)), height), IntegerEntry("price_index", aV), IntegerEntry(("indexByHeight_" + toString(height)), aV), IntegerEntry(("priceByIndex_" + toString(aV)), aT), IntegerEntry(("deficit_" + toString(height)), ag), IntegerEntry(("neutrinoSupply_" + toString(height)), af), IntegerEntry(("deficit_percent_" + toString(height)), if ((af != 0))
364+ then ((ag * 100) / af)
365+ else 0)] ++ aS(aT, "WAVES", aV)) ++ aS(bv, bw, aV)) ++ aS(bx, by, aV)) ++ aS(bz, bA, aV))
362366 }
363367 }
364368 }
366370 }
367371
368372
369-
370-@Callable(ba)
371-func validatePrice (by,bz,aT) = $Tuple2(nil, true)
372-
373-
374-@Verifier(bA)
375-func bB () = {
376- let bC = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], a)
377- let bD = split(valueOrElse(getString(W, "%s__multisig"), bC), a)
378- let bE = ((((if (sigVerify(bA.bodyBytes, bA.proofs[0], fromBase58String(bD[0])))
373+@Verifier(bB)
374+func bC () = {
375+ let bD = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
376+ let bE = split(valueOrElse(getString(X, "%s__multisig"), bD), b)
377+ let bF = ((((if (sigVerify(bB.bodyBytes, bB.proofs[0], fromBase58String(bE[0])))
379378 then 1
380- else 0) + (if (sigVerify(bA.bodyBytes, bA.proofs[1], fromBase58String(bD[1])))
379+ else 0) + (if (sigVerify(bB.bodyBytes, bB.proofs[1], fromBase58String(bE[1])))
381380 then 1
382- else 0)) + (if (sigVerify(bA.bodyBytes, bA.proofs[2], fromBase58String(bD[2])))
381+ else 0)) + (if (sigVerify(bB.bodyBytes, bB.proofs[2], fromBase58String(bE[2])))
383382 then 1
384- else 0)) + (if (sigVerify(bA.bodyBytes, bA.proofs[3], fromBase58String(bD[3])))
383+ else 0)) + (if (sigVerify(bB.bodyBytes, bB.proofs[3], fromBase58String(bE[3])))
385384 then 2
386385 else 0))
387- (bE >= 3)
386+ (bF >= 3)
388387 }
389388
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = ""
55
6-let b = 1
6+let b = "__"
77
8-let c = 2
8+let c = 1
99
10-let d = 3
10+let d = 2
1111
12-let e = 4
12+let e = 3
1313
14-let f = 5
14+let f = 4
1515
16-let g = 6
16+let g = 5
1717
18-let h = 7
18+let h = 6
1919
20-let i = 8
20+let i = 7
2121
22-let j = 9
22+let j = 8
2323
24-let k = 10
24+let k = 9
2525
26-let l = 11
26+let l = 10
2727
28-let m = 12
28+let m = 11
2929
30-let n = 13
30+let n = 12
3131
32-let o = 14
32+let o = 13
3333
34-func p () = "%s__controlConfig"
34+let p = 14
35+
36+func q () = "%s__controlConfig"
3537
3638
37-func q (r,s,t,u,v,w,x,y,z,A,B,C,D,E) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s", r, s, t, u, v, w, x, y, z, A, B, C, D, E], a)
39+func r (s,t,u,v,w,x,y,z,A,B,C,D,E,F) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s", s, t, u, v, w, x, y, z, A, B, C, D, E, F], b)
3840
3941
40-func F (G,H) = fraction(fraction(G, H, 1000000), 1000000, 100000000)
42+func G (H,I) = fraction(fraction(H, I, 1000000), 1000000, 100000000)
4143
4244
43-func I (J,K) = valueOrElse(getInteger(addressFromStringValue(J), K), 0)
45+func J (K,L) = valueOrElse(getInteger(addressFromStringValue(K), L), 0)
4446
4547
46-func L (J,K) = valueOrElse(getString(J, K), "")
48+func M (K,L) = valueOrElse(getString(K, L), "")
4749
4850
49-func M (N) = split(N, ",")
51+func N (O) = split(O, ",")
5052
5153
52-let H = valueOrElse(getInteger(this, "price"), 0)
54+let I = valueOrElse(getInteger(this, "price"), 0)
5355
54-let O = valueOrElse(getInteger(this, "price_index"), 0)
56+let P = valueOrElse(getInteger(this, "price_index"), 0)
5557
56-let P = valueOrElse(getBoolean(this, "is_blocked"), false)
58+let Q = valueOrElse(getBoolean(this, "is_blocked"), false)
5759
58-let Q = 1000
60+let R = 1000
5961
60-let R = valueOrElse(getString(this, "oracles"), "")
62+let S = valueOrElse(getString(this, "oracles"), "")
6163
62-let S = M(R)
64+let T = N(S)
6365
64-let T = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
66+let U = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
6567
66-let U = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
68+let V = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
6769
68-let V = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
70+let W = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
6971
70-let W = this
72+let X = this
7173
72-func X (J,K) = valueOrErrorMessage(getString(J, K), makeString(["mandatory ", toString(J), ".", K, " is not defined"], ""))
74+func Y (K,L) = valueOrErrorMessage(getString(K, L), makeString(["mandatory ", toString(K), ".", L, " is not defined"], ""))
7375
7476
75-func Y (Z,aa) = valueOrErrorMessage(addressFromString(Z[aa]), ("Control cfg doesn't contain address at index " + toString(aa)))
77+func Z (aa,ab) = valueOrErrorMessage(addressFromString(aa[ab]), ("Control cfg doesn't contain address at index " + toString(ab)))
7678
7779
78-let Z = split_4C(X(this, p()), a)
80+let aa = split_4C(Y(this, q()), b)
7981
80-let D = Y(Z, n)
82+let E = Z(aa, o)
8183
82-let ab = valueOrElse(getInteger(T, "balance_lock_neutrino"), 0)
84+let ac = valueOrElse(getInteger(U, "balance_lock_neutrino"), 0)
8385
84-let ac = valueOrElse(getInteger(T, "balance_lock_waves"), 0)
86+let ad = valueOrElse(getInteger(U, "balance_lock_waves"), 0)
8587
86-let ad = (wavesBalance(T).regular - ac)
88+let ae = (wavesBalance(U).regular - ad)
8789
88-let ae = (((ab + value(assetInfo(V)).quantity) - assetBalance(T, V)) - assetBalance(U, V))
90+let af = (((ac + value(assetInfo(W)).quantity) - assetBalance(U, W)) - assetBalance(V, W))
8991
90-let af = (ae - F(ad, H))
92+let ag = (af - G(ae, I))
9193
92-func ag (ah) = {
93- let ai = 90
94- let aj = 110
95- let ak = ah[0]
96- let al = if ((0 >= ah[0]))
94+func ah (ai) = {
95+ let aj = 90
96+ let ak = 110
97+ let al = ai[0]
98+ let am = if ((0 >= ai[0]))
9799 then [0]
98100 else {
99- let am = ((ah[1] * 100) / ak)
100- let an = ((ah[2] * 100) / ak)
101- let ao = ((ah[3] * 100) / ak)
102- let ap = ((ah[4] * 100) / ak)
103- let aq = if (if ((aj > am))
104- then (am > ai)
101+ let an = ((ai[1] * 100) / al)
102+ let ao = ((ai[2] * 100) / al)
103+ let ap = ((ai[3] * 100) / al)
104+ let aq = ((ai[4] * 100) / al)
105+ let ar = if (if ((ak > an))
106+ then (an > aj)
105107 else false)
106108 then [1, 0]
107109 else [0]
108- let ar = if (if ((aj > an))
109- then (an > ai)
110+ let as = if (if ((ak > ao))
111+ then (ao > aj)
110112 else false)
111- then 2 :: aq
112- else aq
113- let as = if (if ((aj > ao))
114- then (ao > ai)
113+ then 2 :: ar
114+ else ar
115+ let at = if (if ((ak > ap))
116+ then (ap > aj)
115117 else false)
116- then 3 :: ar
117- else ar
118- if (if ((aj > ap))
119- then (ap > ai)
118+ then 3 :: as
119+ else as
120+ if (if ((ak > aq))
121+ then (aq > aj)
120122 else false)
121- then 4 :: as
122- else as
123+ then 4 :: at
124+ else at
123125 }
124- let at = if ((size(al) >= 3))
125- then al
126+ let au = if ((size(am) >= 3))
127+ then am
126128 else {
127- let au = ah[1]
128- if ((0 >= au))
129+ let av = ai[1]
130+ if ((0 >= av))
129131 then [1]
130132 else {
131- let av = ((ah[0] * 100) / au)
132- let aw = ((ah[2] * 100) / au)
133- let ax = ((ah[3] * 100) / au)
134- let ay = ((ah[4] * 100) / au)
135- let aq = if (if ((aj > av))
136- then (av > ai)
133+ let aw = ((ai[0] * 100) / av)
134+ let ax = ((ai[2] * 100) / av)
135+ let ay = ((ai[3] * 100) / av)
136+ let az = ((ai[4] * 100) / av)
137+ let ar = if (if ((ak > aw))
138+ then (aw > aj)
137139 else false)
138140 then [0, 1]
139141 else [1]
140- let ar = if (if ((aj > aw))
141- then (aw > ai)
142+ let as = if (if ((ak > ax))
143+ then (ax > aj)
142144 else false)
143- then 2 :: aq
144- else aq
145- let as = if (if ((aj > ax))
146- then (ax > ai)
145+ then 2 :: ar
146+ else ar
147+ let at = if (if ((ak > ay))
148+ then (ay > aj)
147149 else false)
148- then 3 :: ar
149- else ar
150- if (if ((aj > ay))
151- then (ay > ai)
150+ then 3 :: as
151+ else as
152+ if (if ((ak > az))
153+ then (az > aj)
152154 else false)
153- then 4 :: as
154- else as
155+ then 4 :: at
156+ else at
155157 }
156158 }
157- let az = if ((size(at) >= 3))
158- then at
159+ let aA = if ((size(au) >= 3))
160+ then au
159161 else {
160- let aA = ah[2]
161- if ((0 >= aA))
162+ let aB = ai[2]
163+ if ((0 >= aB))
162164 then [2]
163165 else {
164- let aB = ((ah[0] * 100) / aA)
165- let aC = ((ah[1] * 100) / aA)
166- let aD = ((ah[3] * 100) / aA)
167- let aE = ((ah[4] * 100) / aA)
168- let aq = if (if ((aj > aB))
169- then (aB > ai)
166+ let aC = ((ai[0] * 100) / aB)
167+ let aD = ((ai[1] * 100) / aB)
168+ let aE = ((ai[3] * 100) / aB)
169+ let aF = ((ai[4] * 100) / aB)
170+ let ar = if (if ((ak > aC))
171+ then (aC > aj)
170172 else false)
171173 then [0, 2]
172174 else [2]
173- let ar = if (if ((aj > aC))
174- then (aC > ai)
175+ let as = if (if ((ak > aD))
176+ then (aD > aj)
175177 else false)
176- then 1 :: aq
177- else aq
178- let as = if (if ((aj > aD))
179- then (aD > ai)
178+ then 1 :: ar
179+ else ar
180+ let at = if (if ((ak > aE))
181+ then (aE > aj)
180182 else false)
181- then 3 :: ar
182- else ar
183- if (if ((aj > aE))
184- then (aE > ai)
183+ then 3 :: as
184+ else as
185+ if (if ((ak > aF))
186+ then (aF > aj)
185187 else false)
186- then 4 :: as
187- else as
188+ then 4 :: at
189+ else at
188190 }
189191 }
190- let aF = if ((size(az) >= 3))
191- then az
192+ let aG = if ((size(aA) >= 3))
193+ then aA
192194 else {
193- let aG = ah[3]
194- if ((0 >= aG))
195+ let aH = ai[3]
196+ if ((0 >= aH))
195197 then [3]
196198 else {
197- let aH = ((ah[0] * 100) / aG)
198- let aI = ((ah[1] * 100) / aG)
199- let aJ = ((ah[2] * 100) / aG)
200- let aK = ((ah[4] * 100) / aG)
201- let aq = if (if ((aj > aH))
202- then (aH > ai)
199+ let aI = ((ai[0] * 100) / aH)
200+ let aJ = ((ai[1] * 100) / aH)
201+ let aK = ((ai[2] * 100) / aH)
202+ let aL = ((ai[4] * 100) / aH)
203+ let ar = if (if ((ak > aI))
204+ then (aI > aj)
203205 else false)
204206 then [0, 3]
205207 else [3]
206- let ar = if (if ((aj > aI))
207- then (aI > ai)
208+ let as = if (if ((ak > aJ))
209+ then (aJ > aj)
208210 else false)
209- then 1 :: aq
210- else aq
211- let as = if (if ((aj > aJ))
212- then (aJ > ai)
211+ then 1 :: ar
212+ else ar
213+ let at = if (if ((ak > aK))
214+ then (aK > aj)
213215 else false)
214- then 2 :: ar
215- else ar
216- if (if ((aj > aK))
217- then (aK > ai)
216+ then 2 :: as
217+ else as
218+ if (if ((ak > aL))
219+ then (aL > aj)
218220 else false)
219- then 4 :: as
220- else as
221+ then 4 :: at
222+ else at
221223 }
222224 }
223- if ((size(aF) >= 3))
224- then aF
225+ if ((size(aG) >= 3))
226+ then aG
225227 else {
226- let aL = ah[4]
227- if ((0 >= aL))
228+ let aM = ai[4]
229+ if ((0 >= aM))
228230 then [4]
229231 else {
230- let aM = ((ah[0] * 100) / aL)
231- let aN = ((ah[1] * 100) / aL)
232- let aO = ((ah[2] * 100) / aL)
233- let aP = ((ah[3] * 100) / aL)
234- let aq = if (if ((aj > aM))
235- then (aM > ai)
232+ let aN = ((ai[0] * 100) / aM)
233+ let aO = ((ai[1] * 100) / aM)
234+ let aP = ((ai[2] * 100) / aM)
235+ let aQ = ((ai[3] * 100) / aM)
236+ let ar = if (if ((ak > aN))
237+ then (aN > aj)
236238 else false)
237239 then [0, 4]
238240 else [4]
239- let ar = if (if ((aj > aN))
240- then (aN > ai)
241+ let as = if (if ((ak > aO))
242+ then (aO > aj)
241243 else false)
242- then 1 :: aq
243- else aq
244- let as = if (if ((aj > aO))
245- then (aO > ai)
244+ then 1 :: ar
245+ else ar
246+ let at = if (if ((ak > aP))
247+ then (aP > aj)
246248 else false)
247- then 2 :: ar
248- else ar
249- if (if ((aj > aP))
250- then (aP > ai)
249+ then 2 :: as
250+ else as
251+ if (if ((ak > aQ))
252+ then (aQ > aj)
251253 else false)
252- then 3 :: as
253- else as
254+ then 3 :: at
255+ else at
254256 }
255257 }
256258 }
257259
258260
259-func aQ (H) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(H)))
261+func aR (I) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(I)))
260262
261263
262-func aR (aS,aT,aU) = {
263- let aV = toString(height)
264- let aW = toString(aU)
265- let aX = makeString(["%s%s%s__common__priceByAsset", aT], a)
266- let aY = makeString(["%s%s%s%d__common__priceByHeight", aT, aV], a)
267- let aZ = makeString(["%s%s%s%d__common__priceByIndex", aT, aW], a)
268-[IntegerEntry(aX, aS), IntegerEntry(aZ, aS), IntegerEntry(aY, aS)]
264+func aS (aT,aU,aV) = {
265+ let aW = toString(height)
266+ let aX = toString(aV)
267+ let aY = makeString(["%s%s%s__common__priceByAsset", aU], b)
268+ let aZ = makeString(["%s%s%s%d__common__priceByHeight", aU, aW], b)
269+ let ba = makeString(["%s%s%s%d__common__priceByIndex", aU, aX], b)
270+[IntegerEntry(aY, aT), IntegerEntry(ba, aT), IntegerEntry(aZ, aT)]
269271 }
270272
271273
272-@Callable(ba)
273-func constructorV1 (r,s,t,u,v,w,x,y,z,A,B,C,D,E) = if ((ba.caller != this))
274+@Callable(bb)
275+func constructorV1 (s,t,u,v,w,x,y,z,A,B,C,D,E,F) = if ((bb.caller != this))
274276 then throw("permissions denied")
275- else [StringEntry(p(), q(r, s, t, u, v, w, x, y, z, A, B, C, D, E))]
277+ else [StringEntry(q(), r(s, t, u, v, w, x, y, z, A, B, C, D, E, F))]
276278
277279
278280
279-@Callable(ba)
280-func callEmergencyShutdown (bb) = {
281- let bc = "3MrRCbZhD9cPBT1efEkzAfaeaU26Ukvf9mh"
282- let bd = toString(ba.caller)
283- if (if ((bc != bd))
284- then (toString(D) != bd)
281+@Callable(bb)
282+func callEmergencyShutdown (bc) = {
283+ let bd = "3MrRCbZhD9cPBT1efEkzAfaeaU26Ukvf9mh"
284+ let be = toString(bb.caller)
285+ if (if ((bd != be))
286+ then (toString(E) != be)
285287 else false)
286288 then throw("caller must be one an emergency oracle or Governance contract")
287- else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", bd), StringEntry("is_blocked_reason", bb)]
289+ else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", be), StringEntry("is_blocked_reason", bc)]
288290 }
289291
290292
291293
292-@Callable(ba)
293-func finalizeCurrentPrice (be,bf,bg,bh,bi,bj,bk,bl,bm,bn) = if (P)
294+@Callable(bb)
295+func finalizeCurrentPrice (bf,bg,bh,bi,bj,bk,bl,bm,bn,bo) = if (Q)
294296 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
295297 else if ((valueOrElse(getInteger(this, ("price_" + toString(height))), 0) != 0))
296298 then throw("wait next block")
297- else if ((S[(height % 5)] != toBase58String(ba.callerPublicKey)))
298- then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + S[(height % 5)]))
299+ else if ((T[(height % 5)] != toBase58String(bb.callerPublicKey)))
300+ then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + T[(height % 5)]))
299301 else {
300- let ah = [if (sigVerify_8Kb(aQ(be), bf, fromBase58String(S[0])))
301- then be
302- else 0, if (sigVerify_8Kb(aQ(bg), bh, fromBase58String(S[1])))
303- then bg
304- else 0, if (sigVerify_8Kb(aQ(bi), bj, fromBase58String(S[2])))
305- then bi
306- else 0, if (sigVerify_8Kb(aQ(bk), bl, fromBase58String(S[3])))
307- then bk
308- else 0, if (sigVerify_8Kb(aQ(bm), bn, fromBase58String(S[4])))
309- then bm
302+ let ai = [if (sigVerify_8Kb(aR(bf), bg, fromBase58String(T[0])))
303+ then bf
304+ else 0, if (sigVerify_8Kb(aR(bh), bi, fromBase58String(T[1])))
305+ then bh
306+ else 0, if (sigVerify_8Kb(aR(bj), bk, fromBase58String(T[2])))
307+ then bj
308+ else 0, if (sigVerify_8Kb(aR(bl), bm, fromBase58String(T[3])))
309+ then bl
310+ else 0, if (sigVerify_8Kb(aR(bn), bo, fromBase58String(T[4])))
311+ then bn
310312 else 0]
311- let bo = if ((ah[0] == 0))
313+ let bp = if ((ai[0] == 0))
312314 then 1
313- else (0 + (if ((ah[1] == 0))
315+ else (0 + (if ((ai[1] == 0))
314316 then 1
315- else (0 + (if ((ah[2] == 0))
317+ else (0 + (if ((ai[2] == 0))
316318 then 1
317- else (0 + (if ((ah[3] == 0))
319+ else (0 + (if ((ai[3] == 0))
318320 then 1
319- else (0 + (if ((ah[4] == 0))
321+ else (0 + (if ((ai[4] == 0))
320322 then 1
321323 else 0))))))))
322- if ((bo >= 3))
324+ if ((bp >= 3))
323325 then throw("3 prices or more are equals to 0")
324326 else {
325- let bp = ag(ah)
326- let bq = size(bp)
327- if ((3 > bq))
327+ let bq = ah(ai)
328+ let br = size(bq)
329+ if ((3 > br))
328330 then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
329-") + S[0]) + "=") + toString(ah[0])) + "
330-") + S[1]) + "=") + toString(ah[1])) + "
331-") + S[2]) + "=") + toString(ah[2])) + "
332-") + S[3]) + "=") + toString(ah[3])) + "
333-") + S[4]) + "=") + toString(ah[4])))
331+") + T[0]) + "=") + toString(ai[0])) + "
332+") + T[1]) + "=") + toString(ai[1])) + "
333+") + T[2]) + "=") + toString(ai[2])) + "
334+") + T[3]) + "=") + toString(ai[3])) + "
335+") + T[4]) + "=") + toString(ai[4])))
334336 else {
335- let br = ((ah[bp[0]] + ah[bp[1]]) + ah[bp[2]])
336- let bs = if ((bq >= 4))
337- then (br + ah[bp[3]])
338- else br
339- let bt = if ((bq >= 5))
340- then (bs + ah[bp[4]])
337+ let bs = ((ai[bq[0]] + ai[bq[1]]) + ai[bq[2]])
338+ let bt = if ((br >= 4))
339+ then (bs + ai[bq[3]])
341340 else bs
342- if ((bq >= 6))
341+ let bu = if ((br >= 5))
342+ then (bt + ai[bq[4]])
343+ else bt
344+ if ((br >= 6))
343345 then throw("Invalid pricesInRange creation")
344346 else {
345- let aS = (bt / bq)
346- let bu = valueOrElse(getInteger("wx_stub_price"), 81109)
347- let bv = "EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc"
348- let bw = valueOrElse(getInteger("vires_stub_price"), 1330432)
349- let bx = "9RE43pPoy64Hy9BmC9xM9DG1hKqnAMAqNRnbAniqZ1Pf"
350- if (if ((aS >= (H + ((H * Q) / 100))))
347+ let aT = (bu / br)
348+ let bv = valueOrElse(getInteger("wx_stub_price"), 81109)
349+ let bw = "EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc"
350+ let bx = valueOrElse(getInteger("vires_stub_price"), 1330432)
351+ let by = "9RE43pPoy64Hy9BmC9xM9DG1hKqnAMAqNRnbAniqZ1Pf"
352+ let bz = valueOrElse(getInteger("wind_stub_price"), 6177700)
353+ let bA = "DJ5sGMbBFSNA8yTHPTfMP9QDDHFp6CFToV2poteZm7X3"
354+ if (if ((aT >= (I + ((I * R) / 100))))
351355 then true
352- else ((H - ((H * Q) / 100)) >= aS))
356+ else ((I - ((I * R) / 100)) >= aT))
353357 then {
354- let bb = "automatic emergency shutdown because of large price variability"
355-[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", bb), IntegerEntry((("black_swarm_price" + "_") + toString(height)), aS)]
358+ let bc = "automatic emergency shutdown because of large price variability"
359+[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", bc), IntegerEntry((("black_swarm_price" + "_") + toString(height)), aT)]
356360 }
357361 else {
358- let aU = (O + 1)
359- ((([IntegerEntry("price", aS), IntegerEntry(("price_" + toString(height)), aS), IntegerEntry(("price_index_" + toString(aU)), height), IntegerEntry("price_index", aU), IntegerEntry(("indexByHeight_" + toString(height)), aU), IntegerEntry(("priceByIndex_" + toString(aU)), aS), IntegerEntry(("deficit_" + toString(height)), af), IntegerEntry(("neutrinoSupply_" + toString(height)), ae), IntegerEntry(("deficit_percent_" + toString(height)), if ((ae != 0))
360- then ((af * 100) / ae)
361- else 0)] ++ aR(aS, "WAVES", aU)) ++ aR(bu, bv, aU)) ++ aR(bw, bx, aU))
362+ let aV = (P + 1)
363+ (((([IntegerEntry("price", aT), IntegerEntry(("price_" + toString(height)), aT), IntegerEntry(("price_index_" + toString(aV)), height), IntegerEntry("price_index", aV), IntegerEntry(("indexByHeight_" + toString(height)), aV), IntegerEntry(("priceByIndex_" + toString(aV)), aT), IntegerEntry(("deficit_" + toString(height)), ag), IntegerEntry(("neutrinoSupply_" + toString(height)), af), IntegerEntry(("deficit_percent_" + toString(height)), if ((af != 0))
364+ then ((ag * 100) / af)
365+ else 0)] ++ aS(aT, "WAVES", aV)) ++ aS(bv, bw, aV)) ++ aS(bx, by, aV)) ++ aS(bz, bA, aV))
362366 }
363367 }
364368 }
365369 }
366370 }
367371
368372
369-
370-@Callable(ba)
371-func validatePrice (by,bz,aT) = $Tuple2(nil, true)
372-
373-
374-@Verifier(bA)
375-func bB () = {
376- let bC = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], a)
377- let bD = split(valueOrElse(getString(W, "%s__multisig"), bC), a)
378- let bE = ((((if (sigVerify(bA.bodyBytes, bA.proofs[0], fromBase58String(bD[0])))
373+@Verifier(bB)
374+func bC () = {
375+ let bD = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
376+ let bE = split(valueOrElse(getString(X, "%s__multisig"), bD), b)
377+ let bF = ((((if (sigVerify(bB.bodyBytes, bB.proofs[0], fromBase58String(bE[0])))
379378 then 1
380- else 0) + (if (sigVerify(bA.bodyBytes, bA.proofs[1], fromBase58String(bD[1])))
379+ else 0) + (if (sigVerify(bB.bodyBytes, bB.proofs[1], fromBase58String(bE[1])))
381380 then 1
382- else 0)) + (if (sigVerify(bA.bodyBytes, bA.proofs[2], fromBase58String(bD[2])))
381+ else 0)) + (if (sigVerify(bB.bodyBytes, bB.proofs[2], fromBase58String(bE[2])))
383382 then 1
384- else 0)) + (if (sigVerify(bA.bodyBytes, bA.proofs[3], fromBase58String(bD[3])))
383+ else 0)) + (if (sigVerify(bB.bodyBytes, bB.proofs[3], fromBase58String(bE[3])))
385384 then 2
386385 else 0))
387- (bE >= 3)
386+ (bF >= 3)
388387 }
389388

github/deemru/w8io/6500d08 
211.19 ms