tx · iruyr65VhPiUBhcMLqyJctasWDURTfUyUXXbTWEUA9B

3PKx4fQ6hT9ejY51h7426tqmMgWSfnrtBcx:  -0.01200000 Waves

2023.11.16 15:42 [3911773] smart account 3PKx4fQ6hT9ejY51h7426tqmMgWSfnrtBcx > SELF 0.00000000 Waves

{ "type": 13, "id": "iruyr65VhPiUBhcMLqyJctasWDURTfUyUXXbTWEUA9B", "fee": 1200000, "feeAssetId": null, "timestamp": 1700138541917, "version": 2, "chainId": 87, "sender": "3PKx4fQ6hT9ejY51h7426tqmMgWSfnrtBcx", "senderPublicKey": "2hjYvNQhP4gLEQFqgDQgodZKmeWT2EjkxqMc4bKS6hEn", "proofs": [ "25KiFpmjQnW71PpdfhwDTtkS7kFpcLLAKheuwfbVrhnPUiMerzcLM5QceJsWW2n3Dc7Lrq7aeVpYKAWfCviRxqZG" ], "script": "base64:BgIeCAISAwoBGBIDCgEYEgQKAgIYEgQKAgIYEgQKAgIYJwAJc2VwYXJhdG9yAgJfXwAHY2hhaW5JZAkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQAIY2hhaW5JZFQBAVQACGNoYWluSWRXAQFXAQttdXN0QWRkcmVzcwIBaQdhZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgUHYWRkcmVzcwYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAEIbXVzdFRoaXMBAWkJAQttdXN0QWRkcmVzcwIFAWkFBHRoaXMAA1NFUAICX18ABVdBVkVTAgVXQVZFUwAQY29udHJhY3RGaWxlbmFtZQIVd3hkYW9fY2FsY3VsYXRvci5yaWRlAAVtdWx0OACAwtcvAAZtdWx0MTgJALYCAQCAgJC7utat8A0ADXdhdmVzRGVjaW1hbHMACAAMdXNkdERlY2ltYWxzAAYBBXRvWDE4AgdvcmlnVmFsDW9yaWdTY2FsZU11bHQJALwCAwkAtgIBBQdvcmlnVmFsBQZtdWx0MTgJALYCAQUNb3JpZ1NjYWxlTXVsdAEHZnJvbVgxOAIDdmFsD3Jlc3VsdFNjYWxlTXVsdAkAoAMBCQC8AgMFA3ZhbAkAtgIBBQ9yZXN1bHRTY2FsZU11bHQFBm11bHQxOAEHd3JhcEVycgEBcwkArAICCQCsAgIFEGNvbnRyYWN0RmlsZW5hbWUCAjogBQFzAQh0aHJvd0VycgEBcwkAAgEJAQd3cmFwRXJyAQUBcwEQa2V5Q3VycmVudFBlcmlvZAAJALkJAgkAzAgCAgIlcwkAzAgCAg1jdXJyZW50UGVyaW9kBQNuaWwFA1NFUAEWa2V5U3RhcnRIZWlnaHRCeVBlcmlvZAEGcGVyaW9kCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgtzdGFydEhlaWdodAkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABD2tleVBlcmlvZExlbmd0aAAJALkJAgkAzAgCAgIlcwkAzAgCAgxwZXJpb2RMZW5ndGgFA25pbAUDU0VQARhrZXlUcmVhc3VyeVZhbHVlQnlQZXJpb2QBBnBlcmlvZAkAuQkCCQDMCAICBCVzJWQJAMwIAgINdHJlYXN1cnlWYWx1ZQkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABFWtleVBvd2VyQ29uZmlnQWRkcmVzcwACFiVzX19wb3dlckNvbmZpZ0FkZHJlc3MBEnBvd2VyQ29uZmlnQWRkcmVzcwEOZmFjdG9yeUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgQHJG1hdGNoMAkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBFWtleVBvd2VyQ29uZmlnQWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yCQEHd3JhcEVycgECHGludmFsaWQgcG93ZXIgY29uZmlnIGFkZHJlc3MBD2tleVBvd2VyQXNzZXRJZAACDHBvd2VyQXNzZXRJZAEPZ2V0UG93ZXJBc3NldElkAQ5mYWN0b3J5QWRkcmVzcwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBEnBvd2VyQ29uZmlnQWRkcmVzcwEFDmZhY3RvcnlBZGRyZXNzCQEPa2V5UG93ZXJBc3NldElkAAkBB3dyYXBFcnIBAhZpbnZhbGlkIHBvd2VyIGFzc2V0IGlkARdrZXlQb3dlckNvbnRyYWN0QWRkcmVzcwACGCVzX19wb3dlckNvbnRyYWN0QWRkcmVzcwEUcG93ZXJDb250cmFjdEFkZHJlc3MBDmZhY3RvcnlBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIEByRtYXRjaDAJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARdrZXlQb3dlckNvbnRyYWN0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yCQEHd3JhcEVycgECHmludmFsaWQgcG93ZXIgY29udHJhY3QgYWRkcmVzcwEWa2V5UG9vbHNGYWN0b3J5QWRkcmVzcwACFyVzX19wb29sc0ZhY3RvcnlBZGRyZXNzARZnZXRQb29sc0ZhY3RvcnlBZGRyZXNzAQ5mYWN0b3J5QWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBAckbWF0Y2gwCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEWa2V5UG9vbHNGYWN0b3J5QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yCQEHd3JhcEVycgECHWludmFsaWQgcG9vbHMgZmFjdG9yeSBhZGRyZXNzARJrZXlUcmVhc3VyeUFkZHJlc3MAAhMlc19fdHJlYXN1cnlBZGRyZXNzARJnZXRUcmVhc3VyeUFkZHJlc3MBDmZhY3RvcnlBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIEByRtYXRjaDAJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARJrZXlUcmVhc3VyeUFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgkBB3dyYXBFcnIBAhhpbnZhbGlkIHRyZWFzdXJ5IGFkZHJlc3MBCWtleUFzc2V0cwACCiVzX19hc3NldHMBDGdldEFzc2V0c1N0cgEOZmFjdG9yeUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBCWtleUFzc2V0cwAJAQd3cmFwRXJyAQIOaW52YWxpZCBhc3NldHMBDGtleUxwQXNzZXRJZAACDSVzX19scEFzc2V0SWQBDGdldExwQXNzZXRJZAEOZmFjdG9yeUFkZHJlc3MJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEMa2V5THBBc3NldElkAAkBB3dyYXBFcnIBAhNpbnZhbGlkIGxwIGFzc2V0IGlkARJnZXRBc3NldEluZm9PckZhaWwBB2Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQdhc3NldElkCQEHd3JhcEVycgECEmludmFsaWQgYXNzZXQgaW5mbwERZ2V0QXNzZXRzQmFsYW5jZXMCDXRhcmdldEFkZHJlc3MLYXNzZXRJZExpc3QKAQNtYXACA2FjYw5uZXh0QXNzZXRJZFN0cgQHYmFsYW5jZQMJAAACBQ5uZXh0QXNzZXRJZFN0cgUFV0FWRVMJAQV0b1gxOAIICQDvBwEFDXRhcmdldEFkZHJlc3MJYXZhaWxhYmxlBQ13YXZlc0RlY2ltYWxzBAdhc3NldElkCQDZBAEFDm5leHRBc3NldElkU3RyBA1hc3NldERlY2ltYWxzCAkBEmdldEFzc2V0SW5mb09yRmFpbAEFB2Fzc2V0SWQIZGVjaW1hbHMJAQV0b1gxOAIJAPAHAgUNdGFyZ2V0QWRkcmVzcwUHYXNzZXRJZAUNYXNzZXREZWNpbWFscwkAzQgCBQNhY2MFB2JhbGFuY2UKAAIkbAULYXNzZXRJZExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA21hcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEPZ2V0QXNzZXRzUHJpY2VzAhNwb29sc0ZhY3RvcnlBZGRyZXNzC2Fzc2V0SWRMaXN0AwkAAAIFB2NoYWluSWQFCGNoYWluSWRXBBN3YXZlc1VzZHRBZGRyZXNzU3RyAiMzUEtmcnVwRXlkVTJuWkFnaFZqWkFmdkN3TUJrenVSMUY1MgQOd2F2ZXNVc2R0UHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUTd2F2ZXNVc2R0QWRkcmVzc1N0cgUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBBJ3YXZlc1h0bkFkZHJlc3NTdHICIzNQUFpXZ0ZOUktITHZNNTFwd1M5MzRDOFZaN2QyRjRaNThnBA13YXZlc1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFEndhdmVzWHRuQWRkcmVzc1N0cgUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBAx4dG5Vc2R0UHJpY2UJALwCAwUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAUNd2F2ZXNYdG5QcmljZQoBA21hcAIDYWNjC25leHRBc3NldElkBAVwcmljZQQHJG1hdGNoMAULbmV4dEFzc2V0SWQDCQAAAgIsMnRoc0FDdUhtekRNdU5lelBNMzJ3ZzlhM0J3VXpCV0RlU0tha2d6M2N3MjEFByRtYXRjaDAEEnB3cldhdmVzQWRkcmVzc1N0cgIjM1BEaTdRcThwTFFZdnRLeVRmUXVxcVBVV3lob1liVTk1N3QEDXB3cldhdmVzUHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUScHdyV2F2ZXNBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJALwCAwUNcHdyV2F2ZXNQcmljZQUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAMJAAACAixBdHF2NTlFWXpqRkd1aXRLVm5NUms2SDhGdWtqb1Yza3RQb3JiRXlzMjVvbgUHJG1hdGNoMAQRd3hXYXZlc0FkZHJlc3NTdHICIzNQRnphSDJnaHB3QU5IRmdqZXZhODNOMXl4ekVyRUx4MmVoBAx3eFdhdmVzUHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgURd3hXYXZlc0FkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAvAIDBQx3eFdhdmVzUHJpY2UFDndhdmVzVXNkdFByaWNlBQZtdWx0MTgDCQAAAgIsMzROOVljRUVUTFduOTNxWVE2NEVzUDF4ODl0U3J1SlU0NFJyRU1TWFhFUEoFByRtYXRjaDAEFHVzZHR3eGdYdG5BZGRyZXNzU3RyAiMzUDhLTXlBSkNQV05jeWVkcXJteW14YWVXb252bWtoR2F1egQPdXNkdHd4Z1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFFHVzZHR3eGdYdG5BZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJALwCAwUPdXNkdHd4Z1h0blByaWNlBQx4dG5Vc2R0UHJpY2UFBm11bHQxOAMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAQWd2F2ZXNVc2Rjd3hnQWRkcmVzc1N0cgIjM1AzZzNlaXBmRzJOWktLUUU4RFpYdDJFOXRSSnFpaTlqY1gED3VzZGN3eGdYdG5QcmljZQkApwMBCgABQAkA/AcEBRNwb29sc0ZhY3RvcnlBZGRyZXNzAghnZXRQcmljZQkAzAgCBRZ3YXZlc1VzZGN3eGdBZGRyZXNzU3RyBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJALwCAwUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAUPdXNkY3d4Z1h0blByaWNlAwkAAAICLEhaazFtYmZ1SnBteFUxRnM0QVg1TVdMVll0Y3RzTmNnNmUyQzZWS3FLOHprBQckbWF0Y2gwBBNsdGN3eGdYdG5BZGRyZXNzU3RyAiMzUDk0d3Z1NWdBN1ZoalBnQUIzdHdhZXFkd0hDd05LMnZzbgQObHRjd3hnWHRuUHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUTbHRjd3hnWHRuQWRkcmVzc1N0cgUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQC8AgMFDmx0Y3d4Z1h0blByaWNlBQx4dG5Vc2R0UHJpY2UFBm11bHQxOAMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMAQTZXRod3hnWHRuQWRkcmVzc1N0cgIjM1AzWEdUTjZzMjkyZzlpd1loczNURXFKcUhpZmZRWW9qdUUEDmV0aHd4Z1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFE2V0aHd4Z1h0bkFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAvAIDBQ5ldGh3eGdYdG5QcmljZQUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMAQTYnRjd3hnWHRuQWRkcmVzc1N0cgIjM1BDQldEVEE2anJGc3dkN2dRZ2FFM1hrN2dMTTVSS29mdnAEDmJ0Y3d4Z1h0blByaWNlCQCnAwEKAAFACQD8BwQFE3Bvb2xzRmFjdG9yeUFkZHJlc3MCCGdldFByaWNlCQDMCAIFE2J0Y3d4Z1h0bkFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAvAIDBQ5idGN3eGdYdG5QcmljZQUOd2F2ZXNVc2R0UHJpY2UFBm11bHQxOAkBCHRocm93RXJyAQIQaW52YWxpZCBhc3NldCBpZAkAzQgCBQNhY2MFBXByaWNlCgACJGwFC2Fzc2V0SWRMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtYXACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUHY2hhaW5JZAUIY2hhaW5JZFQKAQNtYXACA2FjYwtuZXh0QXNzZXRJZAQFcHJpY2UEByRtYXRjaDAFC25leHRBc3NldElkAwkAAAICLEVNQU1MeERudjN4aXo4UlhnOEJ0ajMzamNFdzN3TGN6TDNKS1lZbXV1YnBjBQckbWF0Y2gwBBB3eFVzZHRBZGRyZXNzU3RyAiMzTXJVTFFSTGM1MkdXckpGMXRNY0FtNE03OGZQZTU3bzlLdAQLd3hVc2R0UHJpY2UJAKcDAQoAAUAJAPwHBAUTcG9vbHNGYWN0b3J5QWRkcmVzcwIIZ2V0UHJpY2UJAMwIAgUQd3hVc2R0QWRkcmVzc1N0cgUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBQt3eFVzZHRQcmljZQMJAAACAixBN0tzaDdmWHlxbTFLaEtBaUszYkFCMmFpUFNpdFFRRjZ2MXB5dTlTUzNGUgUHJG1hdGNoMAQSdXNkY1VzZHRBZGRyZXNzU3RyAiMzTXpLU2RUSDJqRmJ5cExzb05mckg3UWdrelNieDNFWXdDQQQNdXNkY1VzZHRQcmljZQkApwMBCgABQAkA/AcEBRNwb29sc0ZhY3RvcnlBZGRyZXNzAghnZXRQcmljZQkAzAgCBRJ1c2RjVXNkdEFkZHJlc3NTdHIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwUNdXNkY1VzZHRQcmljZQMJAAACAiw4UTZTRTJBTmVidWZ3OEp1UGpKVlJqWkQ2ZHJEOGloak5qTTh4YUdVU2ZkUgUHJG1hdGNoMAQFcHJpY2UAgMLXLwUFcHJpY2UJAQh0aHJvd0VycgECEGludmFsaWQgYXNzZXQgaWQJAM0IAgUDYWNjBQVwcmljZQoAAiRsBQthc3NldElkTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbWFwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCQEIdGhyb3dFcnIBAhBpbnZhbGlkIGNoYWluIGlkARFjYWxjVHJlYXN1cnlWYWx1ZQEOZmFjdG9yeUFkZHJlc3MED3RyZWFzdXJ5QWRkcmVzcwkBEmdldFRyZWFzdXJ5QWRkcmVzcwEFDmZhY3RvcnlBZGRyZXNzBBNwb29sc0ZhY3RvcnlBZGRyZXNzCQEWZ2V0UG9vbHNGYWN0b3J5QWRkcmVzcwEFDmZhY3RvcnlBZGRyZXNzBAlhc3NldHNTdHIJALUJAgkBDGdldEFzc2V0c1N0cgEFDmZhY3RvcnlBZGRyZXNzBQNTRVAEDmFzc2V0c0JhbGFuY2VzCQERZ2V0QXNzZXRzQmFsYW5jZXMCBQ90cmVhc3VyeUFkZHJlc3MFCWFzc2V0c1N0cgQMYXNzZXRzUHJpY2VzCQEPZ2V0QXNzZXRzUHJpY2VzAgUTcG9vbHNGYWN0b3J5QWRkcmVzcwUJYXNzZXRzU3RyCgEGcmVkdWNlAgNhY2MObmV4dEFzc2V0SWRTdHIEB2Fzc2V0SWQJANkEAQUObmV4dEFzc2V0SWRTdHIEBWluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUJYXNzZXRzU3RyBQ5uZXh0QXNzZXRJZFN0cgkBB3dyYXBFcnIBAhBpbnZhbGlkIGFzc2V0IGlkBAdiYWxhbmNlCQCRAwIFDmFzc2V0c0JhbGFuY2VzBQVpbmRleAQFcHJpY2UJAJEDAgUMYXNzZXRzUHJpY2VzBQVpbmRleAQKYXNzZXRWYWx1ZQkAvAIDBQdiYWxhbmNlBQVwcmljZQUGbXVsdDE4CQC3AgIFA2FjYwUKYXNzZXRWYWx1ZQQNdHJlYXN1cnlWYWx1ZQoAAiRsBQlhc3NldHNTdHIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQC2AgEAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGcmVkdWNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBQ10cmVhc3VyeVZhbHVlBQFpAQh3aXRoZHJhdwEEYXJncwQJcmVjaXBpZW50CQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFBGFyZ3MAAAQGYW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwABBAZyZXN1bHQJAPwHBAgFAWkGY2FsbGVyAg10cmFuc2ZlcldhdmVzCQDMCAIIBQlyZWNpcGllbnQFYnl0ZXMJAMwIAgUGYW1vdW50BQNuaWwFA25pbAkAlAoCBQNuaWwFBnJlc3VsdAFpAQtzZXRJbnRQYXJhbQEEYXJncwQDa2V5CQCRAwIFBGFyZ3MAAAQDdmFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwABBAZyZXN1bHQJAPwHBAgFAWkGY2FsbGVyAgxpbnRlZ2VyRW50cnkJAMwIAgUDa2V5CQDMCAIFA3ZhbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQBaQEEc3dhcAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEDmZhY3RvcnlBZGRyZXNzCAUBaQZjYWxsZXIEC3VzZXJBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQHcGF5bWVudAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkBCHRocm93RXJyAQIVMSBwYXltZW50IGlzIHJlcXVpcmVkBANlcnIJAQd3cmFwRXJyAQIYaW52YWxpZCBwYXltZW50IGFzc2V0IGlkBA5wYXltZW50QXNzZXRJZAMJAAACCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQdwYXltZW50B2Fzc2V0SWQFA2VycgkBDGdldExwQXNzZXRJZAEFDmZhY3RvcnlBZGRyZXNzCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkCQEIdGhyb3dFcnIBBQNlcnIECHB3clByaWNlAGQECXB3ckFtb3VudAkAaQIIBQdwYXltZW50BmFtb3VudAUIcHdyUHJpY2UECWFzc2V0c1N0cgkAtQkCCQEMZ2V0QXNzZXRzU3RyAQUOZmFjdG9yeUFkZHJlc3MFA1NFUAQKcHdyQmFsYW5jZQkA8AcCBQ5mYWN0b3J5QWRkcmVzcwkBD2dldFBvd2VyQXNzZXRJZAEFDmZhY3RvcnlBZGRyZXNzAwkAAAIFCnB3ckJhbGFuY2UFCnB3ckJhbGFuY2UED3RyZWFzdXJ5QWRkcmVzcwkBEmdldFRyZWFzdXJ5QWRkcmVzcwEFDmZhY3RvcnlBZGRyZXNzBA5hc3NldHNCYWxhbmNlcwkBEWdldEFzc2V0c0JhbGFuY2VzAgUPdHJlYXN1cnlBZGRyZXNzBQlhc3NldHNTdHIKAQNtYXACA2FjYw5uZXh0QXNzZXRJZFN0cgQHYXNzZXRJZAkA2QQBBQ5uZXh0QXNzZXRJZFN0cgQFaW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQlhc3NldHNTdHIFDm5leHRBc3NldElkU3RyCQEHd3JhcEVycgECFWludmFsaWQgYXNzZXQgYmFsYW5jZQQNYXNzZXREZWNpbWFscwgJARJnZXRBc3NldEluZm9PckZhaWwBBQdhc3NldElkCGRlY2ltYWxzBAdiYWxhbmNlCQEHZnJvbVgxOAIJAJEDAgUOYXNzZXRzQmFsYW5jZXMFBWluZGV4BQ1hc3NldERlY2ltYWxzBAZhbW91bnQJAGsDBQdiYWxhbmNlBQlwd3JBbW91bnQFCnB3ckJhbGFuY2UDCQBmAgUGYW1vdW50AAAJAJQKAgkAzQgCCAUDYWNjAl8xBQdhc3NldElkCQDNCAIIBQNhY2MCXzIFBmFtb3VudAUDYWNjBAl0cmFuc2ZlcnMKAAIkbAUJYXNzZXRzU3RyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbWFwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwkAAAIFCXRyYW5zZmVycwUJdHJhbnNmZXJzBBRhZGRpdGlvbmFsTG9ja1JvdW5kcwAABA5mYWN0b3J5QWN0aW9ucwkAzggCCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCIGNvbW1pdEFmdGVyU3RhcnRXaXRoTG9ja1JvdW5kRm9yCQDMCAIJAKUIAQkBFHBvd2VyQ29udHJhY3RBZGRyZXNzAQUOZmFjdG9yeUFkZHJlc3MJAMwIAgkApQgBBQ5mYWN0b3J5QWRkcmVzcwkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAIFFGFkZGl0aW9uYWxMb2NrUm91bmRzCQDMCAIJAQ9nZXRQb3dlckFzc2V0SWQBBQ5mYWN0b3J5QWRkcmVzcwkAzAgCBQlwd3JBbW91bnQFA25pbAUDbmlsBQNuaWwDCQAAAgkAkAMBCAUJdHJhbnNmZXJzAl8xAAAFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAg50cmFuc2ZlckFzc2V0cwkAzAgCCAULdXNlckFkZHJlc3MFYnl0ZXMJAMwIAggFCXRyYW5zZmVycwJfMQkAzAgCCAUJdHJhbnNmZXJzAl8yBQNuaWwFA25pbAUDbmlsCQCUCgIJAMwIAgkBBEJ1cm4CBQ5wYXltZW50QXNzZXRJZAgFB3BheW1lbnQGYW1vdW50BQNuaWwFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXByaWNlAg9jYWxsZXJQdWJsaWNLZXkEYXJncwQOZmFjdG9yeUFkZHJlc3MIBQFpBmNhbGxlcgQTcG9vbHNGYWN0b3J5QWRkcmVzcwkBFmdldFBvb2xzRmFjdG9yeUFkZHJlc3MBBQ5mYWN0b3J5QWRkcmVzcwQNY3VycmVudFBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIWaW52YWxpZCBjdXJyZW50IHBlcmlvZAQSc3RhcnRUcmVhc3VyeVZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJARhrZXlUcmVhc3VyeVZhbHVlQnlQZXJpb2QBBQ1jdXJyZW50UGVyaW9kCQEHd3JhcEVycgEJAKwCAgIiaW52YWxpZCB0cmVhc3VyeSB2YWx1ZSBmb3IgcGVyaW9kIAkApAMBBQ1jdXJyZW50UGVyaW9kBA10cmVhc3VyeVZhbHVlCQEHZnJvbVgxOAIJARFjYWxjVHJlYXN1cnlWYWx1ZQEFDmZhY3RvcnlBZGRyZXNzBQx1c2R0RGVjaW1hbHMEEXRyZWFzdXJ5VmFsdWVEaWZmCQBlAgUNdHJlYXN1cnlWYWx1ZQUSc3RhcnRUcmVhc3VyeVZhbHVlBAtwd3JQcmljZVJhdwkAkQMCCQEPZ2V0QXNzZXRzUHJpY2VzAgUTcG9vbHNGYWN0b3J5QWRkcmVzcwkAzAgCCQDYBAEJAQ9nZXRQb3dlckFzc2V0SWQBBQ5mYWN0b3J5QWRkcmVzcwUDbmlsAAAECHB3clByaWNlAwkAvwICBQtwd3JQcmljZVJhdwkAtgIBAAAJAQdmcm9tWDE4AgULcHdyUHJpY2VSYXcFDHVzZHREZWNpbWFscwkBCHRocm93RXJyAQIRaW52YWxpZCBQV1IgcHJpY2UEBXByaWNlAwkAZgIAAAURdHJlYXN1cnlWYWx1ZURpZmYJAGkCBQhwd3JQcmljZQBkCQBpAgkAZAIJAGsDBRF0cmVhc3VyeVZhbHVlRGlmZgACAJBOBQhwd3JQcmljZQBkCQCUCgIFA25pbAUFcHJpY2UBaQEQZ2V0VHJlYXN1cnlWYWx1ZQIPY2FsbGVyUHVibGljS2V5BGFyZ3MEDmZhY3RvcnlBZGRyZXNzCAUBaQZjYWxsZXIEDXRyZWFzdXJ5VmFsdWUJARFjYWxjVHJlYXN1cnlWYWx1ZQEFDmZhY3RvcnlBZGRyZXNzCQCUCgIFA25pbAUNdHJlYXN1cnlWYWx1ZQBzPCds", "height": 3911773, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DcG8yJLhRSwRJptZR4ThjyCLUXKBeFdzLU7Y8U5JqHdB Next: 6dRZYaj5Az99hasF1ZZgYJbq85LN9eBzaBZsk6DTZWjE Diff:
OldNewDifferences
195195 then @
196196 else throw(($getType(@) + " couldn't be cast to String"))
197197 })
198- (wxWavesPrice * wavesUsdtPrice)
198+ fraction(wxWavesPrice, wavesUsdtPrice, mult18)
199199 }
200200 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match0))
201201 then {
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, wavesDecimals)
135135 else {
136136 let assetId = fromBase58String(nextAssetIdStr)
137137 let assetDecimals = getAssetInfoOrFail(assetId).decimals
138138 toX18(assetBalance(targetAddress, assetId), assetDecimals)
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 })
198- (wxWavesPrice * wavesUsdtPrice)
198+ 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"
214214 let usdcwxgXtnPrice = 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 })
220220 fraction(wavesUsdtPrice, mult18, usdcwxgXtnPrice)
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 {
235235 let ethwxgXtnAddressStr = "3P3XGTN6s292g9iwYhs3TEqJqHiffQYojuE"
236236 let ethwxgXtnPrice = parseBigIntValue({
237237 let @ = invoke(poolsFactoryAddress, "getPrice", [ethwxgXtnAddressStr], nil)
238238 if ($isInstanceOf(@, "String"))
239239 then @
240240 else throw(($getType(@) + " couldn't be cast to String"))
241241 })
242242 fraction(ethwxgXtnPrice, 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 })
253253 fraction(btcwxgXtnPrice, wavesUsdtPrice, 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], assetDecimals)
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), usdtDecimals)
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, usdtDecimals)
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

github/deemru/w8io/3ef1775 
83.74 ms