tx · CXJmdU2aeRn9m3mL3kgqttfZ7wMpz8YwZ91xQMQSMM8K

3PKx4fQ6hT9ejY51h7426tqmMgWSfnrtBcx:  -0.01200000 Waves

2023.11.16 16:14 [3911803] smart account 3PKx4fQ6hT9ejY51h7426tqmMgWSfnrtBcx > SELF 0.00000000 Waves

{ "type": 13, "id": "CXJmdU2aeRn9m3mL3kgqttfZ7wMpz8YwZ91xQMQSMM8K", "fee": 1200000, "feeAssetId": null, "timestamp": 1700140563126, "version": 2, "chainId": 87, "sender": "3PKx4fQ6hT9ejY51h7426tqmMgWSfnrtBcx", "senderPublicKey": "2hjYvNQhP4gLEQFqgDQgodZKmeWT2EjkxqMc4bKS6hEn", "proofs": [ "2iu4vvYoZxmYKirF9m3dqgRoFM2xC7ME1XsudJWesXfh8ego211Ayzw7KdiGuHFZCMotXBsd4vvkoV5DjPZZw4rC" ], "script": "base64:BgIeCAISAwoBGBIDCgEYEgQKAgIYEgQKAgIYEgQKAgIYJwAJc2VwYXJhdG9yAgJfXwAHY2hhaW5JZAkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQAIY2hhaW5JZFQBAVQACGNoYWluSWRXAQFXAQttdXN0QWRkcmVzcwIBaQdhZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgUHYWRkcmVzcwYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAEIbXVzdFRoaXMBAWkJAQttdXN0QWRkcmVzcwIFAWkFBHRoaXMAA1NFUAICX18ABVdBVkVTAgVXQVZFUwAQY29udHJhY3RGaWxlbmFtZQIVd3hkYW9fY2FsY3VsYXRvci5yaWRlAAVtdWx0OACAwtcvAAZtdWx0MTgJALYCAQCAgJC7utat8A0ADXdhdmVzRGVjaW1hbHMACAAMdXNkdERlY2ltYWxzAAYBBXRvWDE4AgdvcmlnVmFsDW9yaWdTY2FsZU11bHQJALwCAwkAtgIBBQdvcmlnVmFsBQZtdWx0MTgJALYCAQUNb3JpZ1NjYWxlTXVsdAEHZnJvbVgxOAIDdmFsD3Jlc3VsdFNjYWxlTXVsdAkAoAMBCQC8AgMFA3ZhbAkAtgIBBQ9yZXN1bHRTY2FsZU11bHQFBm11bHQxOAEHd3JhcEVycgEBcwkArAICCQCsAgIFEGNvbnRyYWN0RmlsZW5hbWUCAjogBQFzAQh0aHJvd0VycgEBcwkAAgEJAQd3cmFwRXJyAQUBcwEQa2V5Q3VycmVudFBlcmlvZAAJALkJAgkAzAgCAgIlcwkAzAgCAg1jdXJyZW50UGVyaW9kBQNuaWwFA1NFUAEWa2V5U3RhcnRIZWlnaHRCeVBlcmlvZAEGcGVyaW9kCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgtzdGFydEhlaWdodAkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABD2tleVBlcmlvZExlbmd0aAAJALkJAgkAzAgCAgIlcwkAzAgCAgxwZXJpb2RMZW5ndGgFA25pbAUDU0VQARhrZXlUcmVhc3VyeVZhbHVlQnlQZXJpb2QBBnBlcmlvZAkAuQkCCQDMCAICBCVzJWQJAMwIAgINdHJlYXN1cnlWYWx1ZQkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABFWtleVBvd2VyQ29uZmlnQWRkcmVzcwACFiVzX19wb3dlckNvbmZpZ0FkZHJlc3MBEnBvd2VyQ29uZmlnQWRkcmVzcwEOZmFjdG9yeUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgQHJG1hdGNoMAkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBFWtleVBvd2VyQ29uZmlnQWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yCQEHd3JhcEVycgECHGludmFsaWQgcG93ZXIgY29uZmlnIGFkZHJlc3MBD2tleVBvd2VyQXNzZXRJZAACDHBvd2VyQXNzZXRJZAEPZ2V0UG93ZXJBc3NldElkAQ5mYWN0b3J5QWRkcmVzcwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBEnBvd2VyQ29uZmlnQWRkcmVzcwEFDmZhY3RvcnlBZGRyZXNzCQEPa2V5UG93ZXJBc3NldElkAAkBB3dyYXBFcnIBAhZpbnZhbGlkIHBvd2VyIGFzc2V0IGlkARdrZXlQb3dlckNvbnRyYWN0QWRkcmVzcwACGCVzX19wb3dlckNvbnRyYWN0QWRkcmVzcwEUcG93ZXJDb250cmFjdEFkZHJlc3MBDmZhY3RvcnlBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIEByRtYXRjaDAJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARdrZXlQb3dlckNvbnRyYWN0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yCQEHd3JhcEVycgECHmludmFsaWQgcG93ZXIgY29udHJhY3QgYWRkcmVzcwEWa2V5UG9vbHNGYWN0b3J5QWRkcmVzcwACFyVzX19wb29sc0ZhY3RvcnlBZGRyZXNzARZnZXRQb29sc0ZhY3RvcnlBZGRyZXNzAQ5mYWN0b3J5QWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBAckbWF0Y2gwCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEWa2V5UG9vbHNGYWN0b3J5QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yCQEHd3JhcEVycgECHWludmFsaWQgcG9vbHMgZmFjdG9yeSBhZGRyZXNzARJrZXlUcmVhc3VyeUFkZHJlc3MAAhMlc19fdHJlYXN1cnlBZGRyZXNzARJnZXRUcmVhc3VyeUFkZHJlc3MBDmZhY3RvcnlBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIEByRtYXRjaDAJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARJrZXlUcmVhc3VyeUFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgkBB3dyYXBFcnIBAhhpbnZhbGlkIHRyZWFzdXJ5IGFkZHJlc3MBCWtleUFzc2V0cwACCiVzX19hc3NldHMBDGdldEFzc2V0c1N0cgEOZmFjdG9yeUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBCWtleUFzc2V0cwAJAQd3cmFwRXJyAQIOaW52YWxpZCBhc3NldHMBDGtleUxwQXNzZXRJZAACDSVzX19scEFzc2V0SWQBDGdldExwQXNzZXRJZAEOZmFjdG9yeUFkZHJlc3MJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEMa2V5THBBc3NldElkAAkBB3dyYXBFcnIBAhNpbnZhbGlkIGxwIGFzc2V0IGlkARJnZXRBc3NldEluZm9PckZhaWwBB2Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQdhc3NldElkCQEHd3JhcEVycgECEmludmFsaWQgYXNzZXQgaW5mbwERZ2V0QXNzZXRzQmFsYW5jZXMCDXRhcmdldEFkZHJlc3MLYXNzZXRJZExpc3QKAQNtYXACA2FjYw5uZXh0QXNzZXRJZFN0cgQHYmFsYW5jZQMJAAACBQ5uZXh0QXNzZXRJZFN0cgUFV0FWRVMJAQV0b1gxOAIICQDvBwEFDXRhcmdldEFkZHJlc3MJYXZhaWxhYmxlCQBsBgAKAAAFDXdhdmVzRGVjaW1hbHMAAAAABQRET1dOBAdhc3NldElkCQDZBAEFDm5leHRBc3NldElkU3RyBA1hc3NldERlY2ltYWxzCAkBEmdldEFzc2V0SW5mb09yRmFpbAEFB2Fzc2V0SWQIZGVjaW1hbHMJAQV0b1gxOAIJAPAHAgUNdGFyZ2V0QWRkcmVzcwUHYXNzZXRJZAkAbAYACgAABQ1hc3NldERlY2ltYWxzAAAAAAUERE9XTgkAzQgCBQNhY2MFB2JhbGFuY2UKAAIkbAULYXNzZXRJZExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA21hcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEPZ2V0QXNzZXRzUHJpY2VzAhNwb29sc0ZhY3RvcnlBZGRyZXNzC2Fzc2V0SWRMaXN0AwkAAAIFB2NoYWluSWQFCGNoYWluSWRXBBN3YXZlc1VzZHRBZGRyZXNzU3RyAiMzUEtmcnVwRXlkVTJuWkFnaFZqWkFmdkN3TUJrenVSMUY1MgQOd2F2ZXNVc2R0UHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUTd2F2ZXNVc2R0QWRkcmVzc1N0cgUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBBJ3YXZlc1h0bkFkZHJlc3NTdHICIzNQUFpXZ0ZOUktITHZNNTFwd1M5MzRDOFZaN2QyRjRaNThnBA13YXZlc1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFEndhdmVzWHRuQWRkcmVzc1N0cgUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBAx4dG5Vc2R0UHJpY2UJALwCAwUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAUNd2F2ZXNYdG5QcmljZQoBA21hcAIDYWNjC25leHRBc3NldElkBAVwcmljZQQHJG1hdGNoMAULbmV4dEFzc2V0SWQDCQAAAgIsMnRoc0FDdUhtekRNdU5lelBNMzJ3ZzlhM0J3VXpCV0RlU0tha2d6M2N3MjEFByRtYXRjaDAEEnB3cldhdmVzQWRkcmVzc1N0cgIjM1BEaTdRcThwTFFZdnRLeVRmUXVxcVBVV3lob1liVTk1N3QEDXB3cldhdmVzUHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUScHdyV2F2ZXNBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJALwCAwUNcHdyV2F2ZXNQcmljZQUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAMJAAACAixBdHF2NTlFWXpqRkd1aXRLVm5NUms2SDhGdWtqb1Yza3RQb3JiRXlzMjVvbgUHJG1hdGNoMAQRd3hXYXZlc0FkZHJlc3NTdHICIzNQRnphSDJnaHB3QU5IRmdqZXZhODNOMXl4ekVyRUx4MmVoBAx3eFdhdmVzUHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgURd3hXYXZlc0FkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAvAIDBQx3eFdhdmVzUHJpY2UFDndhdmVzVXNkdFByaWNlBQZtdWx0MTgDCQAAAgIsMzROOVljRUVUTFduOTNxWVE2NEVzUDF4ODl0U3J1SlU0NFJyRU1TWFhFUEoFByRtYXRjaDAEFHVzZHR3eGdYdG5BZGRyZXNzU3RyAiMzUDhLTXlBSkNQV05jeWVkcXJteW14YWVXb252bWtoR2F1egQPdXNkdHd4Z1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFFHVzZHR3eGdYdG5BZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJALwCAwUPdXNkdHd4Z1h0blByaWNlBQx4dG5Vc2R0UHJpY2UFBm11bHQxOAMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAQWd2F2ZXNVc2Rjd3hnQWRkcmVzc1N0cgIjM1AzZzNlaXBmRzJOWktLUUU4RFpYdDJFOXRSSnFpaTlqY1gEEXdhdmVzVXNkY3d4Z1ByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFFndhdmVzVXNkY3d4Z0FkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAvAIDBQ53YXZlc1VzZHRQcmljZQUGbXVsdDE4BRF3YXZlc1VzZGN3eGdQcmljZQMJAAACAixIWmsxbWJmdUpwbXhVMUZzNEFYNU1XTFZZdGN0c05jZzZlMkM2VktxSzh6awUHJG1hdGNoMAQTbHRjd3hnWHRuQWRkcmVzc1N0cgIjM1A5NHd2dTVnQTdWaGpQZ0FCM3R3YWVxZHdIQ3dOSzJ2c24EDmx0Y3d4Z1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFE2x0Y3d4Z1h0bkFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAvAIDBQ5sdGN3eGdYdG5QcmljZQUMeHRuVXNkdFByaWNlBQZtdWx0MTgDCQAAAgIsNDc0alRlWXgycjJWYTM1Nzk0dENTY0FYV0pHOWhVMkhjZ3h6TW93YVpVbnUFByRtYXRjaDAEFWV0aHd4Z1dhdmVzQWRkcmVzc1N0cgIjM1AzWEdUTjZzMjkyZzlpd1loczNURXFKcUhpZmZRWW9qdUUEEGV0aHd4Z1dhdmVzUHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUVZXRod3hnV2F2ZXNBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJALwCAwUQZXRod3hnV2F2ZXNQcmljZQUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMAQTYnRjd3hnWHRuQWRkcmVzc1N0cgIjM1BDQldEVEE2anJGc3dkN2dRZ2FFM1hrN2dMTTVSS29mdnAEDmJ0Y3d4Z1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFE2J0Y3d4Z1h0bkFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAvAIDBQ5idGN3eGdYdG5QcmljZQUMeHRuVXNkdFByaWNlBQZtdWx0MTgJAQh0aHJvd0VycgECEGludmFsaWQgYXNzZXQgaWQJAM0IAgUDYWNjBQVwcmljZQoAAiRsBQthc3NldElkTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbWFwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIFB2NoYWluSWQFCGNoYWluSWRUCgEDbWFwAgNhY2MLbmV4dEFzc2V0SWQEBXByaWNlBAckbWF0Y2gwBQtuZXh0QXNzZXRJZAMJAAACAixFTUFNTHhEbnYzeGl6OFJYZzhCdGozM2pjRXczd0xjekwzSktZWW11dWJwYwUHJG1hdGNoMAQQd3hVc2R0QWRkcmVzc1N0cgIjM01yVUxRUkxjNTJHV3JKRjF0TWNBbTRNNzhmUGU1N285S3QEC3d4VXNkdFByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFEHd4VXNkdEFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwULd3hVc2R0UHJpY2UDCQAAAgIsQTdLc2g3Zlh5cW0xS2hLQWlLM2JBQjJhaVBTaXRRUUY2djFweXU5U1MzRlIFByRtYXRjaDAEEnVzZGNVc2R0QWRkcmVzc1N0cgIjM016S1NkVEgyakZieXBMc29OZnJIN1Fna3pTYngzRVl3Q0EEDXVzZGNVc2R0UHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUSdXNkY1VzZHRBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcFDXVzZGNVc2R0UHJpY2UDCQAAAgIsOFE2U0UyQU5lYnVmdzhKdVBqSlZSalpENmRyRDhpaGpOak04eGFHVVNmZFIFByRtYXRjaDAEBXByaWNlAIDC1y8FBXByaWNlCQEIdGhyb3dFcnIBAhBpbnZhbGlkIGFzc2V0IGlkCQDNCAIFA2FjYwUFcHJpY2UKAAIkbAULYXNzZXRJZExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA21hcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkBCHRocm93RXJyAQIQaW52YWxpZCBjaGFpbiBpZAERY2FsY1RyZWFzdXJ5VmFsdWUBDmZhY3RvcnlBZGRyZXNzBA90cmVhc3VyeUFkZHJlc3MJARJnZXRUcmVhc3VyeUFkZHJlc3MBBQ5mYWN0b3J5QWRkcmVzcwQTcG9vbHNGYWN0b3J5QWRkcmVzcwkBFmdldFBvb2xzRmFjdG9yeUFkZHJlc3MBBQ5mYWN0b3J5QWRkcmVzcwQJYXNzZXRzU3RyCQC1CQIJAQxnZXRBc3NldHNTdHIBBQ5mYWN0b3J5QWRkcmVzcwUDU0VQBA5hc3NldHNCYWxhbmNlcwkBEWdldEFzc2V0c0JhbGFuY2VzAgUPdHJlYXN1cnlBZGRyZXNzBQlhc3NldHNTdHIEDGFzc2V0c1ByaWNlcwkBD2dldEFzc2V0c1ByaWNlcwIFE3Bvb2xzRmFjdG9yeUFkZHJlc3MFCWFzc2V0c1N0cgoBBnJlZHVjZQIDYWNjDm5leHRBc3NldElkU3RyBAdhc3NldElkCQDZBAEFDm5leHRBc3NldElkU3RyBAVpbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCWFzc2V0c1N0cgUObmV4dEFzc2V0SWRTdHIJAQd3cmFwRXJyAQIQaW52YWxpZCBhc3NldCBpZAQHYmFsYW5jZQkAkQMCBQ5hc3NldHNCYWxhbmNlcwUFaW5kZXgEBXByaWNlCQCRAwIFDGFzc2V0c1ByaWNlcwUFaW5kZXgECmFzc2V0VmFsdWUJALwCAwUHYmFsYW5jZQUFcHJpY2UFBm11bHQxOAkAtwICBQNhY2MFCmFzc2V0VmFsdWUEDXRyZWFzdXJ5VmFsdWUKAAIkbAUJYXNzZXRzU3RyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAtgIBAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBnJlZHVjZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgUNdHJlYXN1cnlWYWx1ZQUBaQEId2l0aGRyYXcBBGFyZ3MECXJlY2lwaWVudAkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQRhcmdzAAAEBmFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAQQGcmVzdWx0CQD8BwQIBQFpBmNhbGxlcgINdHJhbnNmZXJXYXZlcwkAzAgCCAUJcmVjaXBpZW50BWJ5dGVzCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQBaQELc2V0SW50UGFyYW0BBGFyZ3MEA2tleQkAkQMCBQRhcmdzAAAEA3ZhbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAQQGcmVzdWx0CQD8BwQIBQFpBmNhbGxlcgIMaW50ZWdlckVudHJ5CQDMCAIFA2tleQkAzAgCBQN2YWwFA25pbAUDbmlsCQCUCgIFA25pbAUGcmVzdWx0AWkBBHN3YXACD2NhbGxlclB1YmxpY0tleQRhcmdzBA5mYWN0b3J5QWRkcmVzcwgFAWkGY2FsbGVyBAt1c2VyQWRkcmVzcwkApwgBBQ9jYWxsZXJQdWJsaWNLZXkEB3BheW1lbnQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAQh0aHJvd0VycgECFTEgcGF5bWVudCBpcyByZXF1aXJlZAQDZXJyCQEHd3JhcEVycgECGGludmFsaWQgcGF5bWVudCBhc3NldCBpZAQOcGF5bWVudEFzc2V0SWQDCQAAAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUHcGF5bWVudAdhc3NldElkBQNlcnIJAQxnZXRMcEFzc2V0SWQBBQ5mYWN0b3J5QWRkcmVzcwkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkBCHRocm93RXJyAQUDZXJyBAhwd3JQcmljZQBkBAlwd3JBbW91bnQJAGkCCAUHcGF5bWVudAZhbW91bnQFCHB3clByaWNlBAlhc3NldHNTdHIJALUJAgkBDGdldEFzc2V0c1N0cgEFDmZhY3RvcnlBZGRyZXNzBQNTRVAECnB3ckJhbGFuY2UJAPAHAgUOZmFjdG9yeUFkZHJlc3MJAQ9nZXRQb3dlckFzc2V0SWQBBQ5mYWN0b3J5QWRkcmVzcwMJAAACBQpwd3JCYWxhbmNlBQpwd3JCYWxhbmNlBA90cmVhc3VyeUFkZHJlc3MJARJnZXRUcmVhc3VyeUFkZHJlc3MBBQ5mYWN0b3J5QWRkcmVzcwQOYXNzZXRzQmFsYW5jZXMJARFnZXRBc3NldHNCYWxhbmNlcwIFD3RyZWFzdXJ5QWRkcmVzcwUJYXNzZXRzU3RyCgEDbWFwAgNhY2MObmV4dEFzc2V0SWRTdHIEB2Fzc2V0SWQJANkEAQUObmV4dEFzc2V0SWRTdHIEBWluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUJYXNzZXRzU3RyBQ5uZXh0QXNzZXRJZFN0cgkBB3dyYXBFcnIBAhVpbnZhbGlkIGFzc2V0IGJhbGFuY2UEDWFzc2V0RGVjaW1hbHMICQESZ2V0QXNzZXRJbmZvT3JGYWlsAQUHYXNzZXRJZAhkZWNpbWFscwQHYmFsYW5jZQkBB2Zyb21YMTgCCQCRAwIFDmFzc2V0c0JhbGFuY2VzBQVpbmRleAkAbAYACgAABQ1hc3NldERlY2ltYWxzAAAAAAUERE9XTgQGYW1vdW50CQBrAwUHYmFsYW5jZQUJcHdyQW1vdW50BQpwd3JCYWxhbmNlAwkAZgIFBmFtb3VudAAACQCUCgIJAM0IAggFA2FjYwJfMQUHYXNzZXRJZAkAzQgCCAUDYWNjAl8yBQZhbW91bnQFA2FjYwQJdHJhbnNmZXJzCgACJGwFCWFzc2V0c1N0cgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA21hcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAAACBQl0cmFuc2ZlcnMFCXRyYW5zZmVycwQUYWRkaXRpb25hbExvY2tSb3VuZHMAAAQOZmFjdG9yeUFjdGlvbnMJAM4IAgkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAiBjb21taXRBZnRlclN0YXJ0V2l0aExvY2tSb3VuZEZvcgkAzAgCCQClCAEJARRwb3dlckNvbnRyYWN0QWRkcmVzcwEFDmZhY3RvcnlBZGRyZXNzCQDMCAIJAKUIAQUOZmFjdG9yeUFkZHJlc3MJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCBRRhZGRpdGlvbmFsTG9ja1JvdW5kcwkAzAgCCQEPZ2V0UG93ZXJBc3NldElkAQUOZmFjdG9yeUFkZHJlc3MJAMwIAgUJcHdyQW1vdW50BQNuaWwFA25pbAUDbmlsAwkAAAIJAJADAQgFCXRyYW5zZmVycwJfMQAABQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIOdHJhbnNmZXJBc3NldHMJAMwIAggFC3VzZXJBZGRyZXNzBWJ5dGVzCQDMCAIIBQl0cmFuc2ZlcnMCXzEJAMwIAggFCXRyYW5zZmVycwJfMgUDbmlsBQNuaWwFA25pbAkAlAoCCQDMCAIJAQRCdXJuAgUOcGF5bWVudEFzc2V0SWQIBQdwYXltZW50BmFtb3VudAUDbmlsBQ5mYWN0b3J5QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVwcmljZQIPY2FsbGVyUHVibGljS2V5BGFyZ3MEDmZhY3RvcnlBZGRyZXNzCAUBaQZjYWxsZXIEE3Bvb2xzRmFjdG9yeUFkZHJlc3MJARZnZXRQb29sc0ZhY3RvcnlBZGRyZXNzAQUOZmFjdG9yeUFkZHJlc3MEDWN1cnJlbnRQZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBEGtleUN1cnJlbnRQZXJpb2QACQEHd3JhcEVycgECFmludmFsaWQgY3VycmVudCBwZXJpb2QEEnN0YXJ0VHJlYXN1cnlWYWx1ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEYa2V5VHJlYXN1cnlWYWx1ZUJ5UGVyaW9kAQUNY3VycmVudFBlcmlvZAkBB3dyYXBFcnIBCQCsAgICImludmFsaWQgdHJlYXN1cnkgdmFsdWUgZm9yIHBlcmlvZCAJAKQDAQUNY3VycmVudFBlcmlvZAQNdHJlYXN1cnlWYWx1ZQkBB2Zyb21YMTgCCQERY2FsY1RyZWFzdXJ5VmFsdWUBBQ5mYWN0b3J5QWRkcmVzcwkAbAYACgAABQx1c2R0RGVjaW1hbHMAAAAABQRET1dOBBF0cmVhc3VyeVZhbHVlRGlmZgkAZQIFDXRyZWFzdXJ5VmFsdWUFEnN0YXJ0VHJlYXN1cnlWYWx1ZQQLcHdyUHJpY2VSYXcJAJEDAgkBD2dldEFzc2V0c1ByaWNlcwIFE3Bvb2xzRmFjdG9yeUFkZHJlc3MJAMwIAgkA2AQBCQEPZ2V0UG93ZXJBc3NldElkAQUOZmFjdG9yeUFkZHJlc3MFA25pbAAABAhwd3JQcmljZQMJAL8CAgULcHdyUHJpY2VSYXcJALYCAQAACQEHZnJvbVgxOAIFC3B3clByaWNlUmF3CQBsBgAKAAAFDHVzZHREZWNpbWFscwAAAAAFBERPV04JAQh0aHJvd0VycgECEWludmFsaWQgUFdSIHByaWNlBAVwcmljZQMJAGYCAAAFEXRyZWFzdXJ5VmFsdWVEaWZmCQBpAgUIcHdyUHJpY2UAZAkAaQIJAGQCCQBrAwURdHJlYXN1cnlWYWx1ZURpZmYAAgCQTgUIcHdyUHJpY2UAZAkAlAoCBQNuaWwFBXByaWNlAWkBEGdldFRyZWFzdXJ5VmFsdWUCD2NhbGxlclB1YmxpY0tleQRhcmdzBA5mYWN0b3J5QWRkcmVzcwgFAWkGY2FsbGVyBA10cmVhc3VyeVZhbHVlCQERY2FsY1RyZWFzdXJ5VmFsdWUBBQ5mYWN0b3J5QWRkcmVzcwkAlAoCBQNuaWwFDXRyZWFzdXJ5VmFsdWUBAnR4AQZ2ZXJpZnkACQAAAgUHY2hhaW5JZAUIY2hhaW5JZFQesAiq", "height": 3911803, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6dRZYaj5Az99hasF1ZZgYJbq85LN9eBzaBZsk6DTZWjE Next: none Diff:
OldNewDifferences
211211 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match0))
212212 then {
213213 let wavesUsdcwxgAddressStr = "3P3g3eipfG2NZKKQE8DZXt2E9tRJqii9jcX"
214- let usdcwxgXtnPrice = parseBigIntValue({
214+ let wavesUsdcwxgPrice = parseBigIntValue({
215215 let @ = invoke(poolsFactoryAddress, "getPrice", [wavesUsdcwxgAddressStr], nil)
216216 if ($isInstanceOf(@, "String"))
217217 then @
218218 else throw(($getType(@) + " couldn't be cast to String"))
219219 })
220- fraction(wavesUsdtPrice, mult18, usdcwxgXtnPrice)
220+ fraction(wavesUsdtPrice, mult18, wavesUsdcwxgPrice)
221221 }
222222 else if (("HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk" == $match0))
223223 then {
232232 }
233233 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match0))
234234 then {
235- let ethwxgXtnAddressStr = "3P3XGTN6s292g9iwYhs3TEqJqHiffQYojuE"
236- let ethwxgXtnPrice = parseBigIntValue({
237- let @ = invoke(poolsFactoryAddress, "getPrice", [ethwxgXtnAddressStr], nil)
235+ let ethwxgWavesAddressStr = "3P3XGTN6s292g9iwYhs3TEqJqHiffQYojuE"
236+ let ethwxgWavesPrice = parseBigIntValue({
237+ let @ = invoke(poolsFactoryAddress, "getPrice", [ethwxgWavesAddressStr], nil)
238238 if ($isInstanceOf(@, "String"))
239239 then @
240240 else throw(($getType(@) + " couldn't be cast to String"))
241241 })
242- fraction(ethwxgXtnPrice, wavesUsdtPrice, mult18)
242+ fraction(ethwxgWavesPrice, wavesUsdtPrice, mult18)
243243 }
244244 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match0))
245245 then {
250250 then @
251251 else throw(($getType(@) + " couldn't be cast to String"))
252252 })
253- fraction(btcwxgXtnPrice, wavesUsdtPrice, mult18)
253+ fraction(btcwxgXtnPrice, xtnUsdtPrice, mult18)
254254 }
255255 else throwErr("invalid asset id")
256256 }
463463 }
464464
465465
466+@Verifier(tx)
467+func verify () = (chainId == chainIdT)
468+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let chainId = take(drop(this.bytes, 1), 1)
77
88 let chainIdT = base58'2T'
99
1010 let chainIdW = base58'2W'
1111
1212 func mustAddress (i,address) = if ((i.caller == address))
1313 then true
1414 else throw("permission denied")
1515
1616
1717 func mustThis (i) = mustAddress(i, this)
1818
1919
2020 let SEP = "__"
2121
2222 let WAVES = "WAVES"
2323
2424 let contractFilename = "wxdao_calculator.ride"
2525
2626 let mult8 = 100000000
2727
2828 let mult18 = toBigInt(1000000000000000000)
2929
3030 let wavesDecimals = 8
3131
3232 let usdtDecimals = 6
3333
3434 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), mult18, toBigInt(origScaleMult))
3535
3636
3737 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), mult18))
3838
3939
4040 func wrapErr (s) = ((contractFilename + ": ") + s)
4141
4242
4343 func throwErr (s) = throw(wrapErr(s))
4444
4545
4646 func keyCurrentPeriod () = makeString(["%s", "currentPeriod"], SEP)
4747
4848
4949 func keyStartHeightByPeriod (period) = makeString(["%s%d", "startHeight", toString(period)], SEP)
5050
5151
5252 func keyPeriodLength () = makeString(["%s", "periodLength"], SEP)
5353
5454
5555 func keyTreasuryValueByPeriod (period) = makeString(["%s%d", "treasuryValue", toString(period)], SEP)
5656
5757
5858 func keyPowerConfigAddress () = "%s__powerConfigAddress"
5959
6060
6161 func powerConfigAddress (factoryAddress) = valueOrErrorMessage(match getString(factoryAddress, keyPowerConfigAddress()) {
6262 case s: String =>
6363 addressFromString(s)
6464 case _: Unit =>
6565 unit
6666 case _ =>
6767 throw("Match error")
6868 }, wrapErr("invalid power config address"))
6969
7070
7171 func keyPowerAssetId () = "powerAssetId"
7272
7373
7474 func getPowerAssetId (factoryAddress) = fromBase58String(valueOrErrorMessage(getString(powerConfigAddress(factoryAddress), keyPowerAssetId()), wrapErr("invalid power asset id")))
7575
7676
7777 func keyPowerContractAddress () = "%s__powerContractAddress"
7878
7979
8080 func powerContractAddress (factoryAddress) = valueOrErrorMessage(match getString(factoryAddress, keyPowerContractAddress()) {
8181 case s: String =>
8282 addressFromString(s)
8383 case _: Unit =>
8484 unit
8585 case _ =>
8686 throw("Match error")
8787 }, wrapErr("invalid power contract address"))
8888
8989
9090 func keyPoolsFactoryAddress () = "%s__poolsFactoryAddress"
9191
9292
9393 func getPoolsFactoryAddress (factoryAddress) = valueOrErrorMessage(match getString(factoryAddress, keyPoolsFactoryAddress()) {
9494 case s: String =>
9595 addressFromString(s)
9696 case _: Unit =>
9797 unit
9898 case _ =>
9999 throw("Match error")
100100 }, wrapErr("invalid pools factory address"))
101101
102102
103103 func keyTreasuryAddress () = "%s__treasuryAddress"
104104
105105
106106 func getTreasuryAddress (factoryAddress) = valueOrErrorMessage(match getString(factoryAddress, keyTreasuryAddress()) {
107107 case s: String =>
108108 addressFromString(s)
109109 case _: Unit =>
110110 unit
111111 case _ =>
112112 throw("Match error")
113113 }, wrapErr("invalid treasury address"))
114114
115115
116116 func keyAssets () = "%s__assets"
117117
118118
119119 func getAssetsStr (factoryAddress) = valueOrErrorMessage(getString(factoryAddress, keyAssets()), wrapErr("invalid assets"))
120120
121121
122122 func keyLpAssetId () = "%s__lpAssetId"
123123
124124
125125 func getLpAssetId (factoryAddress) = fromBase58String(valueOrErrorMessage(getString(factoryAddress, keyLpAssetId()), wrapErr("invalid lp asset id")))
126126
127127
128128 func getAssetInfoOrFail (assetId) = valueOrErrorMessage(assetInfo(assetId), wrapErr("invalid asset info"))
129129
130130
131131 func getAssetsBalances (targetAddress,assetIdList) = {
132132 func map (acc,nextAssetIdStr) = {
133133 let balance = if ((nextAssetIdStr == WAVES))
134134 then toX18(wavesBalance(targetAddress).available, pow(10, 0, wavesDecimals, 0, 0, DOWN))
135135 else {
136136 let assetId = fromBase58String(nextAssetIdStr)
137137 let assetDecimals = getAssetInfoOrFail(assetId).decimals
138138 toX18(assetBalance(targetAddress, assetId), pow(10, 0, assetDecimals, 0, 0, DOWN))
139139 }
140140 (acc :+ balance)
141141 }
142142
143143 let $l = assetIdList
144144 let $s = size($l)
145145 let $acc0 = nil
146146 func $f0_1 ($a,$i) = if (($i >= $s))
147147 then $a
148148 else map($a, $l[$i])
149149
150150 func $f0_2 ($a,$i) = if (($i >= $s))
151151 then $a
152152 else throw("List size exceeds 10")
153153
154154 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
155155 }
156156
157157
158158 func getAssetsPrices (poolsFactoryAddress,assetIdList) = if ((chainId == chainIdW))
159159 then {
160160 let wavesUsdtAddressStr = "3PKfrupEydU2nZAghVjZAfvCwMBkzuR1F52"
161161 let wavesUsdtPrice = parseBigIntValue({
162162 let @ = invoke(poolsFactoryAddress, "getPrice", [wavesUsdtAddressStr], nil)
163163 if ($isInstanceOf(@, "String"))
164164 then @
165165 else throw(($getType(@) + " couldn't be cast to String"))
166166 })
167167 let wavesXtnAddressStr = "3PPZWgFNRKHLvM51pwS934C8VZ7d2F4Z58g"
168168 let wavesXtnPrice = parseBigIntValue({
169169 let @ = invoke(poolsFactoryAddress, "getPrice", [wavesXtnAddressStr], nil)
170170 if ($isInstanceOf(@, "String"))
171171 then @
172172 else throw(($getType(@) + " couldn't be cast to String"))
173173 })
174174 let xtnUsdtPrice = fraction(wavesUsdtPrice, mult18, wavesXtnPrice)
175175 func map (acc,nextAssetId) = {
176176 let price = match nextAssetId {
177177 case _ =>
178178 if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match0))
179179 then {
180180 let pwrWavesAddressStr = "3PDi7Qq8pLQYvtKyTfQuqqPUWyhoYbU957t"
181181 let pwrWavesPrice = parseBigIntValue({
182182 let @ = invoke(poolsFactoryAddress, "getPrice", [pwrWavesAddressStr], nil)
183183 if ($isInstanceOf(@, "String"))
184184 then @
185185 else throw(($getType(@) + " couldn't be cast to String"))
186186 })
187187 fraction(pwrWavesPrice, wavesUsdtPrice, mult18)
188188 }
189189 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match0))
190190 then {
191191 let wxWavesAddressStr = "3PFzaH2ghpwANHFgjeva83N1yxzErELx2eh"
192192 let wxWavesPrice = parseBigIntValue({
193193 let @ = invoke(poolsFactoryAddress, "getPrice", [wxWavesAddressStr], nil)
194194 if ($isInstanceOf(@, "String"))
195195 then @
196196 else throw(($getType(@) + " couldn't be cast to String"))
197197 })
198198 fraction(wxWavesPrice, wavesUsdtPrice, mult18)
199199 }
200200 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match0))
201201 then {
202202 let usdtwxgXtnAddressStr = "3P8KMyAJCPWNcyedqrmymxaeWonvmkhGauz"
203203 let usdtwxgXtnPrice = parseBigIntValue({
204204 let @ = invoke(poolsFactoryAddress, "getPrice", [usdtwxgXtnAddressStr], nil)
205205 if ($isInstanceOf(@, "String"))
206206 then @
207207 else throw(($getType(@) + " couldn't be cast to String"))
208208 })
209209 fraction(usdtwxgXtnPrice, xtnUsdtPrice, mult18)
210210 }
211211 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match0))
212212 then {
213213 let wavesUsdcwxgAddressStr = "3P3g3eipfG2NZKKQE8DZXt2E9tRJqii9jcX"
214- let usdcwxgXtnPrice = parseBigIntValue({
214+ let wavesUsdcwxgPrice = parseBigIntValue({
215215 let @ = invoke(poolsFactoryAddress, "getPrice", [wavesUsdcwxgAddressStr], nil)
216216 if ($isInstanceOf(@, "String"))
217217 then @
218218 else throw(($getType(@) + " couldn't be cast to String"))
219219 })
220- fraction(wavesUsdtPrice, mult18, usdcwxgXtnPrice)
220+ fraction(wavesUsdtPrice, mult18, wavesUsdcwxgPrice)
221221 }
222222 else if (("HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk" == $match0))
223223 then {
224224 let ltcwxgXtnAddressStr = "3P94wvu5gA7VhjPgAB3twaeqdwHCwNK2vsn"
225225 let ltcwxgXtnPrice = parseBigIntValue({
226226 let @ = invoke(poolsFactoryAddress, "getPrice", [ltcwxgXtnAddressStr], nil)
227227 if ($isInstanceOf(@, "String"))
228228 then @
229229 else throw(($getType(@) + " couldn't be cast to String"))
230230 })
231231 fraction(ltcwxgXtnPrice, xtnUsdtPrice, mult18)
232232 }
233233 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match0))
234234 then {
235- let ethwxgXtnAddressStr = "3P3XGTN6s292g9iwYhs3TEqJqHiffQYojuE"
236- let ethwxgXtnPrice = parseBigIntValue({
237- let @ = invoke(poolsFactoryAddress, "getPrice", [ethwxgXtnAddressStr], nil)
235+ let ethwxgWavesAddressStr = "3P3XGTN6s292g9iwYhs3TEqJqHiffQYojuE"
236+ let ethwxgWavesPrice = parseBigIntValue({
237+ let @ = invoke(poolsFactoryAddress, "getPrice", [ethwxgWavesAddressStr], nil)
238238 if ($isInstanceOf(@, "String"))
239239 then @
240240 else throw(($getType(@) + " couldn't be cast to String"))
241241 })
242- fraction(ethwxgXtnPrice, wavesUsdtPrice, mult18)
242+ fraction(ethwxgWavesPrice, wavesUsdtPrice, mult18)
243243 }
244244 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match0))
245245 then {
246246 let btcwxgXtnAddressStr = "3PCBWDTA6jrFswd7gQgaE3Xk7gLM5RKofvp"
247247 let btcwxgXtnPrice = parseBigIntValue({
248248 let @ = invoke(poolsFactoryAddress, "getPrice", [btcwxgXtnAddressStr], nil)
249249 if ($isInstanceOf(@, "String"))
250250 then @
251251 else throw(($getType(@) + " couldn't be cast to String"))
252252 })
253- fraction(btcwxgXtnPrice, wavesUsdtPrice, mult18)
253+ fraction(btcwxgXtnPrice, xtnUsdtPrice, mult18)
254254 }
255255 else throwErr("invalid asset id")
256256 }
257257 (acc :+ price)
258258 }
259259
260260 let $l = assetIdList
261261 let $s = size($l)
262262 let $acc0 = nil
263263 func $f0_1 ($a,$i) = if (($i >= $s))
264264 then $a
265265 else map($a, $l[$i])
266266
267267 func $f0_2 ($a,$i) = if (($i >= $s))
268268 then $a
269269 else throw("List size exceeds 10")
270270
271271 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
272272 }
273273 else if ((chainId == chainIdT))
274274 then {
275275 func map (acc,nextAssetId) = {
276276 let price = match nextAssetId {
277277 case _ =>
278278 if (("EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc" == $match0))
279279 then {
280280 let wxUsdtAddressStr = "3MrULQRLc52GWrJF1tMcAm4M78fPe57o9Kt"
281281 let wxUsdtPrice = parseBigIntValue({
282282 let @ = invoke(poolsFactoryAddress, "getPrice", [wxUsdtAddressStr], nil)
283283 if ($isInstanceOf(@, "String"))
284284 then @
285285 else throw(($getType(@) + " couldn't be cast to String"))
286286 })
287287 wxUsdtPrice
288288 }
289289 else if (("A7Ksh7fXyqm1KhKAiK3bAB2aiPSitQQF6v1pyu9SS3FR" == $match0))
290290 then {
291291 let usdcUsdtAddressStr = "3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA"
292292 let usdcUsdtPrice = parseBigIntValue({
293293 let @ = invoke(poolsFactoryAddress, "getPrice", [usdcUsdtAddressStr], nil)
294294 if ($isInstanceOf(@, "String"))
295295 then @
296296 else throw(($getType(@) + " couldn't be cast to String"))
297297 })
298298 usdcUsdtPrice
299299 }
300300 else if (("8Q6SE2ANebufw8JuPjJVRjZD6drD8ihjNjM8xaGUSfdR" == $match0))
301301 then {
302302 let price = 100000000
303303 price
304304 }
305305 else throwErr("invalid asset id")
306306 }
307307 (acc :+ price)
308308 }
309309
310310 let $l = assetIdList
311311 let $s = size($l)
312312 let $acc0 = nil
313313 func $f0_1 ($a,$i) = if (($i >= $s))
314314 then $a
315315 else map($a, $l[$i])
316316
317317 func $f0_2 ($a,$i) = if (($i >= $s))
318318 then $a
319319 else throw("List size exceeds 10")
320320
321321 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
322322 }
323323 else throwErr("invalid chain id")
324324
325325
326326 func calcTreasuryValue (factoryAddress) = {
327327 let treasuryAddress = getTreasuryAddress(factoryAddress)
328328 let poolsFactoryAddress = getPoolsFactoryAddress(factoryAddress)
329329 let assetsStr = split(getAssetsStr(factoryAddress), SEP)
330330 let assetsBalances = getAssetsBalances(treasuryAddress, assetsStr)
331331 let assetsPrices = getAssetsPrices(poolsFactoryAddress, assetsStr)
332332 func reduce (acc,nextAssetIdStr) = {
333333 let assetId = fromBase58String(nextAssetIdStr)
334334 let index = valueOrErrorMessage(indexOf(assetsStr, nextAssetIdStr), wrapErr("invalid asset id"))
335335 let balance = assetsBalances[index]
336336 let price = assetsPrices[index]
337337 let assetValue = fraction(balance, price, mult18)
338338 (acc + assetValue)
339339 }
340340
341341 let treasuryValue = {
342342 let $l = assetsStr
343343 let $s = size($l)
344344 let $acc0 = toBigInt(0)
345345 func $f0_1 ($a,$i) = if (($i >= $s))
346346 then $a
347347 else reduce($a, $l[$i])
348348
349349 func $f0_2 ($a,$i) = if (($i >= $s))
350350 then $a
351351 else throw("List size exceeds 10")
352352
353353 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
354354 }
355355 treasuryValue
356356 }
357357
358358
359359 @Callable(i)
360360 func withdraw (args) = {
361361 let recipient = addressFromStringValue(args[0])
362362 let amount = parseIntValue(args[1])
363363 let result = invoke(i.caller, "transferWaves", [recipient.bytes, amount], nil)
364364 $Tuple2(nil, result)
365365 }
366366
367367
368368
369369 @Callable(i)
370370 func setIntParam (args) = {
371371 let key = args[0]
372372 let val = parseIntValue(args[1])
373373 let result = invoke(i.caller, "integerEntry", [key, val], nil)
374374 $Tuple2(nil, result)
375375 }
376376
377377
378378
379379 @Callable(i)
380380 func swap (callerPublicKey,args) = {
381381 let factoryAddress = i.caller
382382 let userAddress = addressFromPublicKey(callerPublicKey)
383383 let payment = if ((size(i.payments) == 1))
384384 then i.payments[0]
385385 else throwErr("1 payment is required")
386386 let err = wrapErr("invalid payment asset id")
387387 let paymentAssetId = if ((valueOrErrorMessage(payment.assetId, err) == getLpAssetId(factoryAddress)))
388388 then value(payment.assetId)
389389 else throwErr(err)
390390 let pwrPrice = 100
391391 let pwrAmount = (payment.amount / pwrPrice)
392392 let assetsStr = split(getAssetsStr(factoryAddress), SEP)
393393 let pwrBalance = assetBalance(factoryAddress, getPowerAssetId(factoryAddress))
394394 if ((pwrBalance == pwrBalance))
395395 then {
396396 let treasuryAddress = getTreasuryAddress(factoryAddress)
397397 let assetsBalances = getAssetsBalances(treasuryAddress, assetsStr)
398398 func map (acc,nextAssetIdStr) = {
399399 let assetId = fromBase58String(nextAssetIdStr)
400400 let index = valueOrErrorMessage(indexOf(assetsStr, nextAssetIdStr), wrapErr("invalid asset balance"))
401401 let assetDecimals = getAssetInfoOrFail(assetId).decimals
402402 let balance = fromX18(assetsBalances[index], pow(10, 0, assetDecimals, 0, 0, DOWN))
403403 let amount = fraction(balance, pwrAmount, pwrBalance)
404404 if ((amount > 0))
405405 then $Tuple2((acc._1 :+ assetId), (acc._2 :+ amount))
406406 else acc
407407 }
408408
409409 let transfers = {
410410 let $l = assetsStr
411411 let $s = size($l)
412412 let $acc0 = $Tuple2(nil, nil)
413413 func $f0_1 ($a,$i) = if (($i >= $s))
414414 then $a
415415 else map($a, $l[$i])
416416
417417 func $f0_2 ($a,$i) = if (($i >= $s))
418418 then $a
419419 else throw("List size exceeds 6")
420420
421421 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
422422 }
423423 if ((transfers == transfers))
424424 then {
425425 let additionalLockRounds = 0
426426 let factoryActions = ([invoke(factoryAddress, "commitAfterStartWithLockRoundFor", [toString(powerContractAddress(factoryAddress)), toString(factoryAddress), toString(userAddress), additionalLockRounds, getPowerAssetId(factoryAddress), pwrAmount], nil)] ++ (if ((size(transfers._1) == 0))
427427 then nil
428428 else [invoke(factoryAddress, "transferAssets", [userAddress.bytes, transfers._1, transfers._2], nil)]))
429429 $Tuple2([Burn(paymentAssetId, payment.amount)], factoryActions)
430430 }
431431 else throw("Strict value is not equal to itself.")
432432 }
433433 else throw("Strict value is not equal to itself.")
434434 }
435435
436436
437437
438438 @Callable(i)
439439 func price (callerPublicKey,args) = {
440440 let factoryAddress = i.caller
441441 let poolsFactoryAddress = getPoolsFactoryAddress(factoryAddress)
442442 let currentPeriod = valueOrErrorMessage(getInteger(factoryAddress, keyCurrentPeriod()), wrapErr("invalid current period"))
443443 let startTreasuryValue = valueOrErrorMessage(getInteger(factoryAddress, keyTreasuryValueByPeriod(currentPeriod)), wrapErr(("invalid treasury value for period " + toString(currentPeriod))))
444444 let treasuryValue = fromX18(calcTreasuryValue(factoryAddress), pow(10, 0, usdtDecimals, 0, 0, DOWN))
445445 let treasuryValueDiff = (treasuryValue - startTreasuryValue)
446446 let pwrPriceRaw = getAssetsPrices(poolsFactoryAddress, [toBase58String(getPowerAssetId(factoryAddress))])[0]
447447 let pwrPrice = if ((pwrPriceRaw > toBigInt(0)))
448448 then fromX18(pwrPriceRaw, pow(10, 0, usdtDecimals, 0, 0, DOWN))
449449 else throwErr("invalid PWR price")
450450 let price = if ((0 > treasuryValueDiff))
451451 then (pwrPrice / 100)
452452 else ((fraction(treasuryValueDiff, 2, 10000) + pwrPrice) / 100)
453453 $Tuple2(nil, price)
454454 }
455455
456456
457457
458458 @Callable(i)
459459 func getTreasuryValue (callerPublicKey,args) = {
460460 let factoryAddress = i.caller
461461 let treasuryValue = calcTreasuryValue(factoryAddress)
462462 $Tuple2(nil, treasuryValue)
463463 }
464464
465465
466+@Verifier(tx)
467+func verify () = (chainId == chainIdT)
468+

github/deemru/w8io/0e76f2f 
59.94 ms