tx · FF2ZvC1aCtAWQWfax5ZLMDFWdmeBTaiGygvsoiB731DP

3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk:  -0.01400000 Waves

2023.10.08 22:00 [3855900] smart account 3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk > SELF 0.00000000 Waves

{ "type": 13, "id": "FF2ZvC1aCtAWQWfax5ZLMDFWdmeBTaiGygvsoiB731DP", "fee": 1400000, "feeAssetId": null, "timestamp": 1696791659063, "version": 1, "sender": "3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk", "senderPublicKey": "46pxd1r6gmScNqdp82uEJMs2AZ1F9q2z1VtXZPFAtHYy", "proofs": [ "4XPUQQMXJfcCrP2gNbPA9QiqYiEBVeFRSpAUjA9xtxGhdNHoW4y5N1DBjqKWjwTHAjeFeWV77W6Ny18TEYFXfcUh" ], "script": "base64:BwICCAIsAAVXYXZlcwIFV0FWRVMABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAlTY2FsZThCaWcJALYCAQCAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2AICAhP6m3uERAApTY2FsZTE2QmlnCQC2AgEAgICE/qbe4REACWRheUJsb2NrcwCgCwAKeWVhckJsb2NrcwCgiiAADXllYXJCbG9ja3NCaWcJALYCAQCgiiAAC3Jlc2VydmVGdW5kABQABWFycjEyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwACXVzZHRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kACXVzZGNJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cADW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQEaAVdJZtDL84r1V3qt/CFvccVbiYgr0IGzsX8BDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCAlfUqAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDAJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gwCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gwCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgENZ2V0VG9rZW5QcmljZQEKYXNzZXRJZFN0cgMDCQAAAgUKYXNzZXRJZFN0cgUJdXNkdElkU3RyBgkAAAIFCmFzc2V0SWRTdHIFCXVzZGNJZFN0cgDAhD0EBXByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1vcmFjbGVBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB190d2FwNUIFBXByaWNlAQ1nZXRBc3NldFNjYWxlAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOARFnZXRMYXN0UmF0ZUhlaWdodAENbWFya2V0QWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzAg5sYXN0UmF0ZUhlaWdodAAAARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwINbWFya2V0QWRkcmVzcwphc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyAAABEGdldE91dGRhdGVkU1JhdGUCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQAAARBnZXRPdXRkYXRlZEJSYXRlAg1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICBQphc3NldElkU3RyAgZfYlJhdGUAAAENZ2V0T3V0ZGF0ZWRVcgQTb3V0ZGF0ZWRUb3RhbFN1cHBseRNvdXRkYXRlZFRvdGFsQm9ycm93DW91dGRhdGVkU1JhdGUNb3V0ZGF0ZWRCUmF0ZQQEZG93bgkAawMFE291dGRhdGVkVG90YWxTdXBwbHkFDW91dGRhdGVkU1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDBRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZEJSYXRlBQdTY2FsZTE2BQRkb3duAQdnZXRSYXRlAgVjdXJ2ZQpvdXRkYXRlZFVyCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUKb3V0ZGF0ZWRVcgkAawMFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMggFBWN1cnZlAl8zCQBkAggFBWN1cnZlAl8yCQBrAwkAZQIFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMBC2dldEludGVyZXN0AQRyYXRlCQCWAwEJAMwIAgkAawMFBHJhdGUFBlNjYWxlOAUKeWVhckJsb2NrcwkAzAgCAAEFA25pbAERZ2V0QXNzZXRQYXJhbXRlcnMCEG1hcmtldFBhcmFtZXRlcnMKYXNzZXRJZFN0cgQFaW5kZXgJAQV2YWx1ZQEJAM8IAggFEG1hcmtldFBhcmFtZXRlcnMCXzEFCmFzc2V0SWRTdHIJAJUKAwkAkQMCCAUQbWFya2V0UGFyYW1ldGVycwJfMgUFaW5kZXgJAJEDAggFEG1hcmtldFBhcmFtZXRlcnMCXzMFBWluZGV4CQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl80BQVpbmRleAETZ2V0TWFya2V0UGFyYW1ldGVycwENbWFya2V0QWRkcmVzcwQLc2V0dXBUb2tlbnMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIMc2V0dXBfdG9rZW5zAgEsBAdzZXR1cENmCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIJc2V0dXBfbHRzAgEsBAxzZXR1cFBlbmFsdHkJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIPc2V0dXBfcGVuYWx0aWVzAgEsBAp0b2tlbnNTaXplCQCQAwEFC3NldHVwVG9rZW5zCgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQp0b2tlbnNTaXplBQVhY2N1bQkAlgoECQDNCAIIBQVhY2N1bQJfMQkAkQMCBQtzZXR1cFRva2VucwUEbmV4dAkAzQgCCAUFYWNjdW0CXzIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cENmBQRuZXh0CQDNCAIIBQVhY2N1bQJfMwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwTHQFBG5leHQJAM0IAggFBWFjY3VtAl80CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMc2V0dXBQZW5hbHR5BQRuZXh0CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQxnZXRNYXhTdXBwbHkCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBDXBhcnNlSW50VmFsdWUBCQELdmFsdWVPckVsc2UCCQCdCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgIBMAEOZ2V0QWN0dWFsU1JhdGUEDmxhc3RSYXRlSGVpZ2h0CGludGVyZXN0Cm91dGRhdGVkVXINb3V0ZGF0ZWRTUmF0ZQQJbGFzdFNSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRTUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld1NSYXRlCQBkAgUJbGFzdFNSYXRlCQBpAgkAaAIJAGgCCQBlAgUGaGVpZ2h0BQ5sYXN0UmF0ZUhlaWdodAkAawMFCGludGVyZXN0BQpvdXRkYXRlZFVyBQZTY2FsZTgJAGUCAGQFC3Jlc2VydmVGdW5kAGQFCG5ld1NSYXRlAQ5nZXRBY3R1YWxCUmF0ZQMObGFzdFJhdGVIZWlnaHQIaW50ZXJlc3QNb3V0ZGF0ZWRCUmF0ZQQJbGFzdEJSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRCUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQhuZXdCUmF0ZQELZ2V0QWN0dWFsVXICDGFjdHVhbFN1cHBseQxhY3R1YWxCb3Jyb3cJAGsDBQxhY3R1YWxCb3Jyb3cFBlNjYWxlOAUMYWN0dWFsU3VwcGx5AQ9nZXRBY3R1YWxBbW91bnQCDm91dGRhdGVkQW1vdW50CmFjdHVhbFJhdGUJAGsDBQ5vdXRkYXRlZEFtb3VudAUKYWN0dWFsUmF0ZQUHU2NhbGUxNgEIZ2V0SW5Vc2QDDGFjdHVhbEFtb3VudAphc3NldFNjYWxlBXByaWNlCQBrAwUMYWN0dWFsQW1vdW50BQVwcmljZQUKYXNzZXRTY2FsZQEMZ2V0U3VwcGx5QXB5AgRyYXRlCGFjdHVhbFVyBApzdXBwbHlSYXRlCQBrAwkAawMFBHJhdGUAUABkBQhhY3R1YWxVcgUGU2NhbGU4CQBlAgkAbAYJAGQCBQZTY2FsZTgJAGkCBQpzdXBwbHlSYXRlBQp5ZWFyQmxvY2tzAAgFCnllYXJCbG9ja3MAAAAIBQRET1dOBQZTY2FsZTgBDGdldEJvcnJvd0FweQEEcmF0ZQkAZQIJAGwGCQBkAgUGU2NhbGU4CQBpAgUEcmF0ZQUKeWVhckJsb2NrcwAIBQp5ZWFyQmxvY2tzAAAACAUERE9XTgUGU2NhbGU4AQ9nZXRXYWxsZXRTdXBwbHkEDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgZ3YWxsZXQLYWN0dWFsU1JhdGUEFG91dGRhdGVkV2FsbGV0U3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgkArAICBQZ3YWxsZXQCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAkBD2dldEFjdHVhbEFtb3VudAIFFG91dGRhdGVkV2FsbGV0U3VwcGx5BQthY3R1YWxTUmF0ZQEPZ2V0V2FsbGV0Qm9ycm93BA1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIGd2FsbGV0C2FjdHVhbEJSYXRlBBRvdXRkYXRlZFdhbGxldEJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgUGd2FsbGV0AgpfYm9ycm93ZWRfBQphc3NldElkU3RyAAAJAQ9nZXRBY3R1YWxBbW91bnQCBRRvdXRkYXRlZFdhbGxldEJvcnJvdwULYWN0dWFsQlJhdGUBEGdldERhaWx5UGVyY2VudHMCA2FweQhxdWFudGl0eQkAawMJAGsDCQBlAgkAoAMBCQB2BgkAtwICBQlTY2FsZThCaWcJALYCAQUDYXB5AAgJALoCAgUKU2NhbGUxNkJpZwUNeWVhckJsb2Nrc0JpZwAQABAFBERPV04FB1NjYWxlMTYFCWRheUJsb2NrcwUGU2NhbGU4BQhxdWFudGl0eQUGU2NhbGU4ARBnZXRBY2NvdW50SGVhbHRoBA1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIGd2FsbGV0EG1hcmtldFBhcmFtZXRlcnMAAAELYXNzZXRUb0pzb24CCmFzc2V0SWRTdHIIcXVhbnRpdHkECyR0MDg5Njg5MTgzAwkAAAIFCmFzc2V0SWRTdHIFBVdhdmVzCQCUCgIACAIFV0FWRVMEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUKYXNzZXRJZFN0cgkAlAoCCAUFYXNzZXQIZGVjaW1hbHMIBQVhc3NldARuYW1lBAhkZWNpbWFscwgFCyR0MDg5Njg5MTgzAl8xBARuYW1lCAULJHQwODk2ODkxODMCXzIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx7InF1YW50aXR5IjoJAKQDAQUIcXVhbnRpdHkCDCwiZGVjaW1hbHMiOgkApAMBBQhkZWNpbWFscwIJLCJuYW1lIjoiBQRuYW1lAggiLCJpZCI6IgUKYXNzZXRJZFN0cgICIn0BD2Ftb3VudFRvRGVjaW1hbAIGYW1vdW50CmFzc2V0U2NhbGUEB2ludFBhcnQJAGkCBQZhbW91bnQFCmFzc2V0U2NhbGUECWZsb2F0UGFydAkAagIFBmFtb3VudAUKYXNzZXRTY2FsZQkArAICCQCsAgIJAKQDAQUHaW50UGFydAIBLgkApAMBBQlmbG9hdFBhcnQBDWdldE1hcmtldERhdGEBDW1hcmtldEFkZHJlc3MEC3NldHVwVG9rZW5zCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCDHNldHVwX3Rva2VucwIBLAQHc2V0dXBDZgkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAgpzZXR1cF9sdHZzAgEsBAdzZXR1cEx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCXNldHVwX2x0cwIBLAQMc2V0dXBQZW5hbHR5CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCD3NldHVwX3BlbmFsdGllcwIBLAQObGFzdFJhdGVIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwIObGFzdFJhdGVIZWlnaHQAAAQKdG9rZW5zU2l6ZQkAkAMBBQtzZXR1cFRva2VucwoBBGZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUKdG9rZW5zU2l6ZQUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgULc2V0dXBUb2tlbnMFBG5leHQEAmNmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBDZgUEbmV4dAQCbHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cEx0BQRuZXh0BAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMc2V0dXBQZW5hbHR5BQRuZXh0BAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIECW1heFN1cHBseQkBDGdldE1heFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyBApvdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFE291dGRhdGVkVG90YWxTdXBwbHkFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkU1JhdGUFDW91dGRhdGVkQlJhdGUEBHJhdGUJAQdnZXRSYXRlAgUFY3VydmUFCm91dGRhdGVkVXIECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQRyYXRlBAthY3R1YWxTUmF0ZQkBDmdldEFjdHVhbFNSYXRlBAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQpvdXRkYXRlZFVyBQ1vdXRkYXRlZFNSYXRlBAthY3R1YWxCUmF0ZQkBDmdldEFjdHVhbEJSYXRlAwUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQ1vdXRkYXRlZEJSYXRlBAxhY3R1YWxTdXBwbHkJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsU3VwcGx5BQthY3R1YWxTUmF0ZQQMYWN0dWFsQm9ycm93CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwULYWN0dWFsQlJhdGUEC3N1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBQxhY3R1YWxTdXBwbHkFCmFzc2V0U2NhbGUFBXByaWNlBAtib3Jyb3dJblVzZAkBCGdldEluVXNkAwUMYWN0dWFsQm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQIcmVzZXJ2ZXMJAGUCBQxhY3R1YWxTdXBwbHkFDGFjdHVhbEJvcnJvdwQNcmVzZXJ2ZXNJblVzZAkBCGdldEluVXNkAwUIcmVzZXJ2ZXMFCmFzc2V0U2NhbGUFBXByaWNlBAhhY3R1YWxVcgkBC2dldEFjdHVhbFVyAgUMYWN0dWFsU3VwcGx5BQxhY3R1YWxCb3Jyb3cECXN1cHBseUFweQkBDGdldFN1cHBseUFweQIFBHJhdGUFCGFjdHVhbFVyBAlib3Jyb3dBcHkJAQxnZXRCb3Jyb3dBcHkBBQRyYXRlCQCkChIJAM0IAggFBWFjY3VtAl8xBQphc3NldElkU3RyCQDNCAIIBQVhY2N1bQJfMgUCY2YJAM0IAggFBWFjY3VtAl8zBQJsdAkAzQgCCAUFYWNjdW0CXzQFB3BlbmFsdHkJAM0IAggFBWFjY3VtAl81BQVwcmljZQkAzQgCCAUFYWNjdW0CXzYFCmFzc2V0U2NhbGUJAM0IAggFBWFjY3VtAl83BQltYXhTdXBwbHkJAM0IAggFBWFjY3VtAl84BQthY3R1YWxTUmF0ZQkAzQgCCAUFYWNjdW0CXzkFC2FjdHVhbEJSYXRlCQDNCAIIBQVhY2N1bQNfMTAFDGFjdHVhbFN1cHBseQkAzQgCCAUFYWNjdW0DXzExBQtzdXBwbHlJblVzZAkAzQgCCAUFYWNjdW0DXzEyBQxhY3R1YWxCb3Jyb3cJAM0IAggFBWFjY3VtA18xMwULYm9ycm93SW5Vc2QJAM0IAggFBWFjY3VtA18xNAUIcmVzZXJ2ZXMJAM0IAggFBWFjY3VtA18xNQUNcmVzZXJ2ZXNJblVzZAkAzQgCCAUFYWNjdW0DXzE2BQhhY3R1YWxVcgkAzQgCCAUFYWNjdW0DXzE3BQlzdXBwbHlBcHkJAM0IAggFBWFjY3VtA18xOAUJYm9ycm93QXB5CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkApAoSBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAETd2FsbGV0T3BlcmF0aW9uVmlldwMGbWFya2V0CmFzc2V0SWRTdHIGd2FsbGV0BA1tYXJrZXRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQZtYXJrZXQECm1hcmtldE5hbWUJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIMbWFya2V0X25hbWVfBQZtYXJrZXQEBWN1cnZlCQEMZ2V0UmF0ZUN1cnZlAQUKYXNzZXRJZFN0cgQObGFzdFJhdGVIZWlnaHQJARFnZXRMYXN0UmF0ZUhlaWdodAEFDW1hcmtldEFkZHJlc3MEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQKb3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRNvdXRkYXRlZFRvdGFsU3VwcGx5BRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZFNSYXRlBQ1vdXRkYXRlZEJSYXRlBARyYXRlCQEHZ2V0UmF0ZQIFBWN1cnZlBQpvdXRkYXRlZFVyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUEcmF0ZQQLYWN0dWFsU1JhdGUJAQ5nZXRBY3R1YWxTUmF0ZQQFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUNb3V0ZGF0ZWRTUmF0ZQQLYWN0dWFsQlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUNb3V0ZGF0ZWRCUmF0ZQQKYXNzZXRTY2FsZQkBDWdldEFzc2V0U2NhbGUBBQphc3NldElkU3RyBAxhY3R1YWxTdXBwbHkJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsU3VwcGx5BQthY3R1YWxTUmF0ZQQMYWN0dWFsQm9ycm93CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwULYWN0dWFsQlJhdGUECGFjdHVhbFVyCQELZ2V0QWN0dWFsVXICBQxhY3R1YWxTdXBwbHkFDGFjdHVhbEJvcnJvdwQFcHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQLc3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFDGFjdHVhbFN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEC2JvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQxhY3R1YWxCb3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBAlzdXBwbHlBcHkJAQxnZXRTdXBwbHlBcHkCBQRyYXRlBQhhY3R1YWxVcgQJYm9ycm93QXB5CQEMZ2V0Qm9ycm93QXB5AQUEcmF0ZQQIcmVzZXJ2ZXMJAGUCBQxhY3R1YWxTdXBwbHkFDGFjdHVhbEJvcnJvdwQNcmVzZXJ2ZXNJblVzZAkBCGdldEluVXNkAwUIcmVzZXJ2ZXMFCmFzc2V0U2NhbGUFBXByaWNlBBBtYXJrZXRQYXJhbWV0ZXJzCQETZ2V0TWFya2V0UGFyYW1ldGVycwEFDW1hcmtldEFkZHJlc3MEDSR0MDE0MzM4MTQ0MDYFEG1hcmtldFBhcmFtZXRlcnMEC3NldHVwVG9rZW5zCAUNJHQwMTQzMzgxNDQwNgJfMQQHc2V0dXBDZggFDSR0MDE0MzM4MTQ0MDYCXzIEB3NldHVwTHQIBQ0kdDAxNDMzODE0NDA2Al8zBAxzZXR1cFBlbmFsdHkIBQ0kdDAxNDMzODE0NDA2Al80BA0kdDAxNDQxMTE0NDgyCQERZ2V0QXNzZXRQYXJhbXRlcnMCBRBtYXJrZXRQYXJhbWV0ZXJzBQphc3NldElkU3RyBAJjZggFDSR0MDE0NDExMTQ0ODICXzEEAmx0CAUNJHQwMTQ0MTExNDQ4MgJfMgQHcGVuYWx0eQgFDSR0MDE0NDExMTQ0ODICXzMECW1heFN1cHBseQkBDGdldE1heFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDHdhbGxldFN1cHBseQkBD2dldFdhbGxldFN1cHBseQQFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIFBndhbGxldAULYWN0dWFsU1JhdGUEEXdhbGxldFN1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBQx3YWxsZXRTdXBwbHkFCmFzc2V0U2NhbGUFBXByaWNlBAtkYWlseUluY29tZQkBEGdldERhaWx5UGVyY2VudHMCBQlzdXBwbHlBcHkFDHdhbGxldFN1cHBseQQQZGFpbHlJbmNvbWVJblVzZAkBCGdldEluVXNkAwULZGFpbHlJbmNvbWUFCmFzc2V0U2NhbGUFBXByaWNlBAx3YWxsZXRCb3Jyb3cJAQ9nZXRXYWxsZXRTdXBwbHkEBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFC2FjdHVhbFNSYXRlBBF3YWxsZXRCb3Jyb3dJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0Qm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQRZGFpbHlMb2FuUGVyY2VudHMJARBnZXREYWlseVBlcmNlbnRzAgUJYm9ycm93QXB5BQx3YWxsZXRCb3Jyb3cEFmRhaWx5TG9hblBlcmNlbnRzSW5Vc2QJAQhnZXRJblVzZAMFEWRhaWx5TG9hblBlcmNlbnRzBQphc3NldFNjYWxlBQVwcmljZQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCSJtYXJrZXQiOgUKbWFya2V0TmFtZQIOLCJhc3NldFByaWNlIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUFcHJpY2UCCiwic3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFDGFjdHVhbFN1cHBseQIPLCJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFC3N1cHBseUluVXNkAg0sInN1cHBseUFweSI6CQEPYW1vdW50VG9EZWNpbWFsAgUJc3VwcGx5QXB5BQZTY2FsZTgCCiwiYm9ycm93IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFDGFjdHVhbEJvcnJvdwIPLCJib3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFC2JvcnJvd0luVXNkAg0sImJvcnJvd0FweSI6CQEPYW1vdW50VG9EZWNpbWFsAgUJYm9ycm93QXB5BQZTY2FsZTgCDCwicmVzZXJ2ZXMiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgUIcmVzZXJ2ZXMCESwicmVzZXJ2ZXNJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFDXJlc2VydmVzSW5Vc2QCFCwidXRpbGl6YXRpb25SYXRpbyI6CQEPYW1vdW50VG9EZWNpbWFsAgUIYWN0dWFsVXIFBlNjYWxlOAIULCJjb2xsYXRlcmFsRmFjdG9yIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQJjZgUGU2NhbGU4AhgsImxpcXVpZGF0aW9uVGhyZXNob2xkIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQJsdAUGU2NhbGU4AhYsImxpcXVpZGF0aW9uUGVuYWx0eSI6CQEPYW1vdW50VG9EZWNpbWFsAgUHcGVuYWx0eQUGU2NhbGU4Ag0sIm1heFN1cHBseSI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFCW1heFN1cHBseQIMLCJteVN1cHBseSI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQx3YWxsZXRTdXBwbHkCESwibXlTdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEXdhbGxldFN1cHBseUluVXNkAg8sImRhaWx5SW5jb21lIjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFC2RhaWx5SW5jb21lAhQsImRhaWx5SW5jb21lSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRBkYWlseUluY29tZUluVXNkAgwsIm15Qm9ycm93IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFDHdhbGxldEJvcnJvdwIRLCJteUJvcnJvd0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgURd2FsbGV0Qm9ycm93SW5Vc2QCFSwiZGFpbHlMb2FuUGVyY2VudHMiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgURZGFpbHlMb2FuUGVyY2VudHMCGiwiZGFpbHlMb2FuUGVyY2VudHNJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFmRhaWx5TG9hblBlcmNlbnRzSW5Vc2QCAX0AAMfvL24=", "chainId": 87, "height": 3855900, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3YK9itmzHGM7Q57qmLraQmWqbrNM25c1H9y8Qik9YWy8 Next: 6vKQViownSLSTof7otM78WaZYLjiwsRs9ChDrXhHdTC5 Diff:
OldNewDifferences
326326 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
327327 let dailyLoanPercents = getDailyPercents(borrowApy, walletBorrow)
328328 let dailyLoanPercentsInUsd = getInUsd(dailyLoanPercents, assetScale, price)
329- ((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"market\":") + marketName) + "\"assetPrice\":") + assetToJson(usdtIdStr, price)) + "\"supply\":") + assetToJson(assetIdStr, actualSupply)) + "\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + "\"supplyApy\":") + amountToDecimal(supplyApy, Scale8)) + "\"borrow\":") + assetToJson(assetIdStr, actualBorrow)) + "\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + "\"borrowApy\":") + amountToDecimal(borrowApy, Scale8)) + "\"reserves\":") + assetToJson(assetIdStr, reserves)) + "\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + "\"utilizationRatio\":") + amountToDecimal(actualUr, Scale8)) + "\"collateralFactor\":") + amountToDecimal(cf, Scale8)) + "\"liquidationThreshold\":") + amountToDecimal(lt, Scale8)) + "\"liquidationPenalty\":") + amountToDecimal(penalty, Scale8)) + "\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + "\"mySupply\":") + assetToJson(assetIdStr, walletSupply)) + "\"mySupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + "\"dailyIncome\":") + assetToJson(assetIdStr, dailyIncome)) + "\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, dailyIncomeInUsd)) + "\"myBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + "\"myBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + "\"dailyLoanPercents\":") + assetToJson(assetIdStr, dailyLoanPercents)) + "\"dailyLoanPercentsInUsd\":") + assetToJson(usdtIdStr, dailyLoanPercentsInUsd)) + "}")
329+ ((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"market\":") + marketName) + ",\"assetPrice\":") + assetToJson(usdtIdStr, price)) + ",\"supply\":") + assetToJson(assetIdStr, actualSupply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, Scale8)) + ",\"borrow\":") + assetToJson(assetIdStr, actualBorrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, Scale8)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"utilizationRatio\":") + amountToDecimal(actualUr, Scale8)) + ",\"collateralFactor\":") + amountToDecimal(cf, Scale8)) + ",\"liquidationThreshold\":") + amountToDecimal(lt, Scale8)) + ",\"liquidationPenalty\":") + amountToDecimal(penalty, Scale8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + ",\"mySupply\":") + assetToJson(assetIdStr, walletSupply)) + ",\"mySupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"dailyIncome\":") + assetToJson(assetIdStr, dailyIncome)) + ",\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, dailyIncomeInUsd)) + ",\"myBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"myBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"dailyLoanPercents\":") + assetToJson(assetIdStr, dailyLoanPercents)) + ",\"dailyLoanPercentsInUsd\":") + assetToJson(usdtIdStr, dailyLoanPercentsInUsd)) + "}")
330330 }
331331
332332
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Waves = "WAVES"
55
66 let Scale6 = 1000000
77
88 let Scale8 = 100000000
99
1010 let Scale8Big = toBigInt(100000000)
1111
1212 let Scale10 = 10000000000
1313
1414 let Scale16 = 10000000000000000
1515
1616 let Scale16Big = toBigInt(10000000000000000)
1717
1818 let dayBlocks = 1440
1919
2020 let yearBlocks = 525600
2121
2222 let yearBlocksBig = toBigInt(525600)
2323
2424 let reserveFund = 20
2525
2626 let arr12 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
2727
2828 let usdtIdStr = "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"
2929
3030 let usdcIdStr = "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"
3131
3232 let oracleAddress = Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')
3333
3434 func getRateCurve (assetIdStr) = match assetIdStr {
3535 case _ =>
3636 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
3737 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3838 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match0))
3939 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4040 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match0))
4141 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4242 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match0))
4343 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4444 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match0))
4545 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4646 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match0))
4747 then $Tuple4(2000000, 40000000, 80000000, 150000000)
4848 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match0))
4949 then $Tuple4(0, 100000000, 80000000, 400000000)
5050 else if (("WAVES" == $match0))
5151 then $Tuple4(2000000, 30000000, 80000000, 90000000)
5252 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match0))
5353 then $Tuple4(0, 20000000, 80000000, 40000000)
5454 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match0))
5555 then $Tuple4(0, 20000000, 80000000, 100000000)
5656 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match0))
5757 then $Tuple4(0, 30000000, 80000000, 40000000)
5858 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match0))
5959 then $Tuple4(0, 25000000, 80000000, 40000000)
6060 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match0))
6161 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6262 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match0))
6363 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6464 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match0))
6565 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6666 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match0))
6767 then $Tuple4(2000000, 40000000, 80000000, 100000000)
6868 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match0))
6969 then $Tuple4(2000000, 30000000, 80000000, 80000000)
7070 else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
7171 then $Tuple4(0, 50000000, 80000000, 200000000)
7272 else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match0))
7373 then $Tuple4(0, 100000000, 80000000, 400000000)
7474 else $Tuple4(0, 20000000, 80000000, 80000000)
7575 }
7676
7777
7878 func getTokenPrice (assetIdStr) = if (if ((assetIdStr == usdtIdStr))
7979 then true
8080 else (assetIdStr == usdcIdStr))
8181 then 1000000
8282 else {
8383 let price = getIntegerValue(oracleAddress, (assetIdStr + "_twap5B"))
8484 price
8585 }
8686
8787
8888 func getAssetScale (assetIdStr) = {
8989 let decimals = if ((assetIdStr == "WAVES"))
9090 then 8
9191 else value(assetInfo(fromBase58String(assetIdStr))).decimals
9292 pow(10, 0, decimals, 0, 0, DOWN)
9393 }
9494
9595
9696 func getLastRateHeight (marketAddress) = valueOrElse(getInteger(marketAddress, "lastRateHeight"), 0)
9797
9898
9999 func getOutdatedTotalSupply (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_supplied_" + assetIdStr)), 0)
100100
101101
102102 func getOutdatedTotalBorrow (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_borrowed_" + assetIdStr)), 0)
103103
104104
105105 func getOutdatedSRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_sRate")), 0)
106106
107107
108108 func getOutdatedBRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_bRate")), 0)
109109
110110
111111 func getOutdatedUr (outdatedTotalSupply,outdatedTotalBorrow,outdatedSRate,outdatedBRate) = {
112112 let down = fraction(outdatedTotalSupply, outdatedSRate, Scale16)
113113 if ((down == 0))
114114 then 0
115115 else fraction(Scale8, fraction(outdatedTotalBorrow, outdatedBRate, Scale16), down)
116116 }
117117
118118
119119 func getRate (curve,outdatedUr) = (curve._1 + (if ((curve._3 >= outdatedUr))
120120 then fraction(outdatedUr, curve._2, curve._3)
121121 else (curve._2 + fraction((outdatedUr - curve._3), curve._4, (100000000 - curve._3)))))
122122
123123
124124 func getInterest (rate) = max([fraction(rate, Scale8, yearBlocks), 1])
125125
126126
127127 func getAssetParamters (marketParameters,assetIdStr) = {
128128 let index = value(indexOf(marketParameters._1, assetIdStr))
129129 $Tuple3(marketParameters._2[index], marketParameters._3[index], marketParameters._4[index])
130130 }
131131
132132
133133 func getMarketParameters (marketAddress) = {
134134 let setupTokens = split(getStringValue(marketAddress, "setup_tokens"), ",")
135135 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
136136 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
137137 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
138138 let tokensSize = size(setupTokens)
139139 func fold (accum,next) = if ((next >= tokensSize))
140140 then accum
141141 else $Tuple4((accum._1 :+ setupTokens[next]), (accum._2 :+ parseIntValue(setupCf[next])), (accum._3 :+ parseIntValue(setupLt[next])), (accum._4 :+ parseIntValue(setupPenalty[next])))
142142
143143 let $l = arr12
144144 let $s = size($l)
145145 let $acc0 = $Tuple4(nil, nil, nil, nil)
146146 func $f0_1 ($a,$i) = if (($i >= $s))
147147 then $a
148148 else fold($a, $l[$i])
149149
150150 func $f0_2 ($a,$i) = if (($i >= $s))
151151 then $a
152152 else throw("List size exceeds 12")
153153
154154 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
155155 }
156156
157157
158158 func getMaxSupply (marketAddress,assetIdStr) = parseIntValue(valueOrElse(getString(marketAddress, ("setup_maxSupply_" + assetIdStr)), "0"))
159159
160160
161161 func getActualSRate (lastRateHeight,interest,outdatedUr,outdatedSRate) = {
162162 let lastSRate = max([outdatedSRate, Scale16])
163163 let newSRate = (lastSRate + ((((height - lastRateHeight) * fraction(interest, outdatedUr, Scale8)) * (100 - reserveFund)) / 100))
164164 newSRate
165165 }
166166
167167
168168 func getActualBRate (lastRateHeight,interest,outdatedBRate) = {
169169 let lastBRate = max([outdatedBRate, Scale16])
170170 let newBRate = (lastBRate + ((height - lastRateHeight) * interest))
171171 newBRate
172172 }
173173
174174
175175 func getActualUr (actualSupply,actualBorrow) = fraction(actualBorrow, Scale8, actualSupply)
176176
177177
178178 func getActualAmount (outdatedAmount,actualRate) = fraction(outdatedAmount, actualRate, Scale16)
179179
180180
181181 func getInUsd (actualAmount,assetScale,price) = fraction(actualAmount, price, assetScale)
182182
183183
184184 func getSupplyApy (rate,actualUr) = {
185185 let supplyRate = fraction(fraction(rate, 80, 100), actualUr, Scale8)
186186 (pow((Scale8 + (supplyRate / yearBlocks)), 8, yearBlocks, 0, 8, DOWN) - Scale8)
187187 }
188188
189189
190190 func getBorrowApy (rate) = (pow((Scale8 + (rate / yearBlocks)), 8, yearBlocks, 0, 8, DOWN) - Scale8)
191191
192192
193193 func getWalletSupply (marketAddress,assetIdStr,wallet,actualSRate) = {
194194 let outdatedWalletSupply = valueOrElse(getInteger(marketAddress, ((wallet + "_supplied_") + assetIdStr)), 0)
195195 getActualAmount(outdatedWalletSupply, actualSRate)
196196 }
197197
198198
199199 func getWalletBorrow (marketAddress,assetIdStr,wallet,actualBRate) = {
200200 let outdatedWalletBorrow = valueOrElse(getInteger(marketAddress, ((wallet + "_borrowed_") + assetIdStr)), 0)
201201 getActualAmount(outdatedWalletBorrow, actualBRate)
202202 }
203203
204204
205205 func getDailyPercents (apy,quantity) = fraction(fraction((toInt(pow((Scale8Big + toBigInt(apy)), 8, (Scale16Big / yearBlocksBig), 16, 16, DOWN)) - Scale16), dayBlocks, Scale8), quantity, Scale8)
206206
207207
208208 func getAccountHealth (marketAddress,assetIdStr,wallet,marketParameters) = 0
209209
210210
211211 func assetToJson (assetIdStr,quantity) = {
212212 let $t089689183 = if ((assetIdStr == Waves))
213213 then $Tuple2(8, "WAVES")
214214 else {
215215 let asset = value(assetInfo(fromBase58String(assetIdStr)))
216216 $Tuple2(asset.decimals, asset.name)
217217 }
218218 let decimals = $t089689183._1
219219 let name = $t089689183._2
220220 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
221221 }
222222
223223
224224 func amountToDecimal (amount,assetScale) = {
225225 let intPart = (amount / assetScale)
226226 let floatPart = (amount % assetScale)
227227 ((toString(intPart) + ".") + toString(floatPart))
228228 }
229229
230230
231231 func getMarketData (marketAddress) = {
232232 let setupTokens = split(getStringValue(marketAddress, "setup_tokens"), ",")
233233 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
234234 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
235235 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
236236 let lastRateHeight = valueOrElse(getInteger(marketAddress, "lastRateHeight"), 0)
237237 let tokensSize = size(setupTokens)
238238 func fold (accum,next) = if ((next >= tokensSize))
239239 then accum
240240 else {
241241 let assetIdStr = setupTokens[next]
242242 let cf = parseIntValue(setupCf[next])
243243 let lt = parseIntValue(setupLt[next])
244244 let penalty = parseIntValue(setupPenalty[next])
245245 let price = getTokenPrice(assetIdStr)
246246 let assetScale = getAssetScale(assetIdStr)
247247 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
248248 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
249249 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
250250 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
251251 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
252252 let curve = getRateCurve(assetIdStr)
253253 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
254254 let rate = getRate(curve, outdatedUr)
255255 let interest = getInterest(rate)
256256 let actualSRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
257257 let actualBRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
258258 let actualSupply = getActualAmount(outdatedTotalSupply, actualSRate)
259259 let actualBorrow = getActualAmount(outdatedTotalBorrow, actualBRate)
260260 let supplyInUsd = getInUsd(actualSupply, assetScale, price)
261261 let borrowInUsd = getInUsd(actualBorrow, assetScale, price)
262262 let reserves = (actualSupply - actualBorrow)
263263 let reservesInUsd = getInUsd(reserves, assetScale, price)
264264 let actualUr = getActualUr(actualSupply, actualBorrow)
265265 let supplyApy = getSupplyApy(rate, actualUr)
266266 let borrowApy = getBorrowApy(rate)
267267 $Tuple18((accum._1 :+ assetIdStr), (accum._2 :+ cf), (accum._3 :+ lt), (accum._4 :+ penalty), (accum._5 :+ price), (accum._6 :+ assetScale), (accum._7 :+ maxSupply), (accum._8 :+ actualSRate), (accum._9 :+ actualBRate), (accum._10 :+ actualSupply), (accum._11 :+ supplyInUsd), (accum._12 :+ actualBorrow), (accum._13 :+ borrowInUsd), (accum._14 :+ reserves), (accum._15 :+ reservesInUsd), (accum._16 :+ actualUr), (accum._17 :+ supplyApy), (accum._18 :+ borrowApy))
268268 }
269269
270270 let $l = arr12
271271 let $s = size($l)
272272 let $acc0 = $Tuple18(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
273273 func $f0_1 ($a,$i) = if (($i >= $s))
274274 then $a
275275 else fold($a, $l[$i])
276276
277277 func $f0_2 ($a,$i) = if (($i >= $s))
278278 then $a
279279 else throw("List size exceeds 12")
280280
281281 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
282282 }
283283
284284
285285 func walletOperationView (market,assetIdStr,wallet) = {
286286 let marketAddress = addressFromStringValue(market)
287287 let marketName = getStringValue(("market_name_" + market))
288288 let curve = getRateCurve(assetIdStr)
289289 let lastRateHeight = getLastRateHeight(marketAddress)
290290 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
291291 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
292292 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
293293 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
294294 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
295295 let rate = getRate(curve, outdatedUr)
296296 let interest = getInterest(rate)
297297 let actualSRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
298298 let actualBRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
299299 let assetScale = getAssetScale(assetIdStr)
300300 let actualSupply = getActualAmount(outdatedTotalSupply, actualSRate)
301301 let actualBorrow = getActualAmount(outdatedTotalBorrow, actualBRate)
302302 let actualUr = getActualUr(actualSupply, actualBorrow)
303303 let price = getTokenPrice(assetIdStr)
304304 let supplyInUsd = getInUsd(actualSupply, assetScale, price)
305305 let borrowInUsd = getInUsd(actualBorrow, assetScale, price)
306306 let supplyApy = getSupplyApy(rate, actualUr)
307307 let borrowApy = getBorrowApy(rate)
308308 let reserves = (actualSupply - actualBorrow)
309309 let reservesInUsd = getInUsd(reserves, assetScale, price)
310310 let marketParameters = getMarketParameters(marketAddress)
311311 let $t01433814406 = marketParameters
312312 let setupTokens = $t01433814406._1
313313 let setupCf = $t01433814406._2
314314 let setupLt = $t01433814406._3
315315 let setupPenalty = $t01433814406._4
316316 let $t01441114482 = getAssetParamters(marketParameters, assetIdStr)
317317 let cf = $t01441114482._1
318318 let lt = $t01441114482._2
319319 let penalty = $t01441114482._3
320320 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
321321 let walletSupply = getWalletSupply(marketAddress, assetIdStr, wallet, actualSRate)
322322 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
323323 let dailyIncome = getDailyPercents(supplyApy, walletSupply)
324324 let dailyIncomeInUsd = getInUsd(dailyIncome, assetScale, price)
325325 let walletBorrow = getWalletSupply(marketAddress, assetIdStr, wallet, actualSRate)
326326 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
327327 let dailyLoanPercents = getDailyPercents(borrowApy, walletBorrow)
328328 let dailyLoanPercentsInUsd = getInUsd(dailyLoanPercents, assetScale, price)
329- ((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"market\":") + marketName) + "\"assetPrice\":") + assetToJson(usdtIdStr, price)) + "\"supply\":") + assetToJson(assetIdStr, actualSupply)) + "\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + "\"supplyApy\":") + amountToDecimal(supplyApy, Scale8)) + "\"borrow\":") + assetToJson(assetIdStr, actualBorrow)) + "\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + "\"borrowApy\":") + amountToDecimal(borrowApy, Scale8)) + "\"reserves\":") + assetToJson(assetIdStr, reserves)) + "\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + "\"utilizationRatio\":") + amountToDecimal(actualUr, Scale8)) + "\"collateralFactor\":") + amountToDecimal(cf, Scale8)) + "\"liquidationThreshold\":") + amountToDecimal(lt, Scale8)) + "\"liquidationPenalty\":") + amountToDecimal(penalty, Scale8)) + "\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + "\"mySupply\":") + assetToJson(assetIdStr, walletSupply)) + "\"mySupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + "\"dailyIncome\":") + assetToJson(assetIdStr, dailyIncome)) + "\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, dailyIncomeInUsd)) + "\"myBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + "\"myBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + "\"dailyLoanPercents\":") + assetToJson(assetIdStr, dailyLoanPercents)) + "\"dailyLoanPercentsInUsd\":") + assetToJson(usdtIdStr, dailyLoanPercentsInUsd)) + "}")
329+ ((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"market\":") + marketName) + ",\"assetPrice\":") + assetToJson(usdtIdStr, price)) + ",\"supply\":") + assetToJson(assetIdStr, actualSupply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, Scale8)) + ",\"borrow\":") + assetToJson(assetIdStr, actualBorrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, Scale8)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"utilizationRatio\":") + amountToDecimal(actualUr, Scale8)) + ",\"collateralFactor\":") + amountToDecimal(cf, Scale8)) + ",\"liquidationThreshold\":") + amountToDecimal(lt, Scale8)) + ",\"liquidationPenalty\":") + amountToDecimal(penalty, Scale8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + ",\"mySupply\":") + assetToJson(assetIdStr, walletSupply)) + ",\"mySupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"dailyIncome\":") + assetToJson(assetIdStr, dailyIncome)) + ",\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, dailyIncomeInUsd)) + ",\"myBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"myBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"dailyLoanPercents\":") + assetToJson(assetIdStr, dailyLoanPercents)) + ",\"dailyLoanPercentsInUsd\":") + assetToJson(usdtIdStr, dailyLoanPercentsInUsd)) + "}")
330330 }
331331
332332
333333

github/deemru/w8io/3ef1775 
148.95 ms