2022.08.26 15:20 [3266908] smart account 3P2RkFDTHJCB82HcVvJNU2eMEfUo82ZFagV > SELF 0.00000000 Waves

{ "type": 13, "id": "HWeVNcBruYEnCPv3eLHDhoGGLo8oK5yS4X4NedpuTEQJ", "fee": 1400000, "feeAssetId": null, "timestamp": 1661516435840, "version": 1, "sender": "3P2RkFDTHJCB82HcVvJNU2eMEfUo82ZFagV", "senderPublicKey": "Sx5vS5cxVcvs6Du84y8pwr1FKn6m2UH7jUsHVTBdnQT", "proofs": [ "UjX5a7fNvWSod3KCd6EttmsKKLAFEwrDzMuwbbKYj3mDvYfZGbAZZwWAASmcV9vWBgJxj8dkXARuumjsHfytXok" ], "script": "base64:BgIxCAISBAoCCAgSAwoBCBIHCgUICAgBARIHCgUICAgIARIFCgMICAESABIAEgMKAQgSACUAC2NvbmZpZ1N0b3JlAgZjb25maWcACnN0YXJ0ZWRLZXkCB3N0YXJ0ZWQBD3N5bmNIZWlnaHRTdG9yZQEHcmVzZXJ2ZQkArAICBQdyZXNlcnZlAgtfc3luY0hlaWdodAEKc3BlZWRTdG9yZQIHcmVzZXJ2ZQZhY3Rpb24JAKwCAgkArAICBQdyZXNlcnZlAgdfc3BlZWRfBQZhY3Rpb24BC3Jld2FyZFN0b3JlAgdyZXNlcnZlBmFjdGlvbgkArAICCQCsAgIFB3Jlc2VydmUCCF9yZXdhcmRfBQZhY3Rpb24BEHVzZXJDbGFpbWVkU3RvcmUCB3Jlc2VydmUEdXNlcgkArAICCQCsAgIFB3Jlc2VydmUCCV9jbGFpbWVkXwUEdXNlcgESdXNlclJld2FyZEFkalN0b3JlAwdyZXNlcnZlBmFjdGlvbgR1c2VyCQCsAgIJAKwCAgkArAICCQCsAgIFB3Jlc2VydmUCD191c2VyUmV3YXJkQWRqXwUGYWN0aW9uAgFfBQR1c2VyAQVwb3cxMAEBbgMJAAACBQFuAAYAwIQ9AwkAAAIFAW4ACACAwtcvCQACAQkArAICAg5iYWQgZGVjaW1hbHM6IAkApAMBBQFuARB3cml0ZUNvbnN0U3RyaW5nAgNrZXkFdmFsdWUDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFA2tleQkBC1N0cmluZ0VudHJ5AgUDa2V5BQV2YWx1ZQkAAgEJAKwCAgIVYWxyZWFkeSBpbml0aWFsaXplZDogBQNrZXkADWNvbmZpZ0FkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULY29uZmlnU3RvcmUCI3ZpcmVzLWRpc3RyaWJ1dG9yOiBubyBjb25maWdBZGRyZXNzAhZpbnZhbGlkIGNvbmZpZyBhZGRyZXNzAAt2aXJlc01pbnRlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAgx2aXJlc19taW50ZXICIXZpcmVzLWRpc3RyaWJ1dG9yOiBubyB2aXJlc01pbnRlcgITaW52YWxpZCB2aXJlc01pbnRlcgARcmV3YXJkUmVzZXJ2ZXNTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhNyZXdhcmRhYmxlX3Jlc2VydmVzAih2aXJlcy1kaXN0cmlidXRvcjogbm8gcmVzZXJ2ZXMgaW4gY29uZmlnAA5yZXdhcmRSZXNlcnZlcwkAvAkCBRFyZXdhcmRSZXNlcnZlc1N0cgIBfAAKdmlyZXNJZFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFC3ZpcmVzTWludGVyAgdhc3NldElkAid2aXJlcy1kaXN0cmlidXRvcjogbm8gdmlyZXNBc3NldElkU3RvcmUADHZpcmVzQXNzZXRJZAkA2QQBBQp2aXJlc0lkU3RyAA1hY3Rpb25EZXBvc2l0AgdkZXBvc2l0AAxhY3Rpb25Cb3Jyb3cCBmJvcnJvdwELdmFsaWRBY3Rpb24BBmFjdGlvbgMDCQECIT0CBQZhY3Rpb24FDWFjdGlvbkRlcG9zaXQJAQIhPQIFBmFjdGlvbgUMYWN0aW9uQm9ycm93BwkAAgEJAKwCAgIQaW52YWxpZCBhY3Rpb246IAUGYWN0aW9uBgEIbWFpbk9ubHkBAWkDCQEIY29udGFpbnMCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1jb25maWdBZGRyZXNzAgRtYWluCQClCAEIBQFpBmNhbGxlcgYJAAIBAhBvbmx5IG1haW4gY2FuIGRvAAdzdGFydGVkCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzBQpzdGFydGVkS2V5AQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAhl3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQZhc0ludDQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAhQoSW50LCBJbnQsIEludCwgSW50KQQBeAUHJG1hdGNoMAUBeAQBdAUHJG1hdGNoMAkAAgECGndyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQ0AQZhc0ludDYBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAh4oSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAhp3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50NAERYXNVc2VyQmFsYW5jZURhdGEBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAiIoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEJvb2xlYW4pBAF4BQckbWF0Y2gwBQF4BAF0BQckbWF0Y2gwCQACAQIid3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludDUmQm9vbGVhbgAGY29uZmlnCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQtjb25maWdTdG9yZQALZmFjdG9yc0Jhc2UA6AcBFGRlcG9zaXRUb0JvcnJvd1JhdGlvAQdyZXNlcnZlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGY29uZmlnCQCsAgIFB3Jlc2VydmUCFV9kZXBvc2l0VG9Cb3Jyb3dSYXRpbwkArAICCQCsAgICGWRlcG9zaXRUb0JvcnJvd1JhdGlvIGZvciAFB3Jlc2VydmUCCCBub3Qgc2V0ABJtYXliZU9yYWNsZUFkZHJlc3MEByRtYXRjaDAJAJ0IAgUGY29uZmlnAg5vcmFjbGVfYWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwUEdW5pdAELb3JhY2xlUHJpY2UBB2Fzc2V0SWQEByRtYXRjaDAJAPwHBAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRJtYXliZU9yYWNsZUFkZHJlc3MCCW5vIG9yYWNsZQIFcHJpY2UJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpCQACAQIPYmFkIG9yYWNsZSBkYXRhAAZIRUlHSFQFBmhlaWdodAEGYXNJbnQyAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBeAUHJG1hdGNoMAUBeAQBdAUHJG1hdGNoMAkAAgECGndyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQyAQlvcEFsbG93ZWQBAm9wBAckbWF0Y2gwCQD8BwQFDWNvbmZpZ0FkZHJlc3MCCW9wQWxsb3dlZAkAzAgCBQp2aXJlc0lkU3RyCQDMCAIFAm9wBQNuaWwFA25pbAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwAwUBYgYJAAIBAgtub3QgYWxsb3dlZAkAAgECIW9wQWxsb3dlZDogdW5leHBlY3RlZCByZXN1bHQgdHlwZQEUY3VycmVudFJlc2VydmVSZXdhcmQCB3Jlc2VydmUGYWN0aW9uBAFoCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ9zeW5jSGVpZ2h0U3RvcmUBBQdyZXNlcnZlBQZIRUlHSFQEDHN0b3JlZFJld2FyZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELcmV3YXJkU3RvcmUCBQdyZXNlcnZlBQZhY3Rpb24AAAMJAAACBQFoBQZIRUlHSFQFDHN0b3JlZFJld2FyZAQFc3BlZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBCnNwZWVkU3RvcmUCBQdyZXNlcnZlBQZhY3Rpb24AAAQRYWNjdW11bGF0ZWRSZXdhcmQJAGgCCQBlAgUGSEVJR0hUBQFoBQVzcGVlZAkAZAIFDHN0b3JlZFJld2FyZAURYWNjdW11bGF0ZWRSZXdhcmQBGmN1cnJlbnRSZXNlcnZlUmV3YXJkc1NwZWVkAAoBBWZvbGQyAgFsB3Jlc2VydmUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFAWwFB3Jlc2VydmUCAV8FDWFjdGlvbkRlcG9zaXQCAT0JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEKc3BlZWRTdG9yZQIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQAAAICLCAFB3Jlc2VydmUCAV8FDGFjdGlvbkJvcnJvdwIBPQkApAMBCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQpzcGVlZFN0b3JlAgUHcmVzZXJ2ZQUMYWN0aW9uQm9ycm93AAACAiwgCgACJGwFDnJld2FyZFJlc2VydmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVmb2xkMgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUARF1c2VyUmV3YXJkQmFsYW5jZQIHcmVzZXJ2ZQR1c2VyBAskdDA0NjcxNDgxMQkBBmFzSW50NAEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcmVzZXJ2ZQIQZ2V0Q3VycmVudFRvdGFscwkAzAgCBQR1c2VyBQNuaWwFA25pbAQPY3VyVG90YWxEZXBvc2l0CAULJHQwNDY3MTQ4MTECXzEEDGN1clRvdGFsRGVidAgFCyR0MDQ2NzE0ODExAl8yBAt1c2VyRGVwb3NpdAgFCyR0MDQ2NzE0ODExAl8zBAh1c2VyRGVidAgFCyR0MDQ2NzE0ODExAl80BBJ0b3RhbERlcG9zaXRSZXdhcmQJARRjdXJyZW50UmVzZXJ2ZVJld2FyZAIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQEEXRvdGFsQm9ycm93UmV3YXJkCQEUY3VycmVudFJlc2VydmVSZXdhcmQCBQdyZXNlcnZlBQxhY3Rpb25Cb3Jyb3cEDnVzZXJEZXBvc2l0QWRqCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARJ1c2VyUmV3YXJkQWRqU3RvcmUDBQdyZXNlcnZlBQ1hY3Rpb25EZXBvc2l0BQR1c2VyAAAEDXVzZXJCb3Jyb3dBZGoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFDGFjdGlvbkJvcnJvdwUEdXNlcgAABAphY2NEZXBvc2l0CQBkAgUOdXNlckRlcG9zaXRBZGoDCQAAAgUPY3VyVG90YWxEZXBvc2l0AAAAAAkAawMFEnRvdGFsRGVwb3NpdFJld2FyZAULdXNlckRlcG9zaXQFD2N1clRvdGFsRGVwb3NpdAQJYWNjQm9ycm93CQBkAgUNdXNlckJvcnJvd0FkagMJAAACBQxjdXJUb3RhbERlYnQAAAAACQBrAwURdG90YWxCb3Jyb3dSZXdhcmQFCHVzZXJEZWJ0BQxjdXJUb3RhbERlYnQEB2NsYWltZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEHVzZXJDbGFpbWVkU3RvcmUCBQdyZXNlcnZlBQR1c2VyAAAJAJUKAwUKYWNjRGVwb3NpdAUJYWNjQm9ycm93BQdjbGFpbWVkAQhldmFsVXNlcgIHcmVzZXJ2ZQR1c2VyBAskdDA1NjM1NTcwNgkBEXVzZXJSZXdhcmRCYWxhbmNlAgUHcmVzZXJ2ZQUEdXNlcgQKYWNjRGVwb3NpdAgFCyR0MDU2MzU1NzA2Al8xBAlhY2NCb3Jyb3cIBQskdDA1NjM1NTcwNgJfMgQHY2xhaW1lZAgFCyR0MDU2MzU1NzA2Al8zCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIVYWNjdW11bGF0ZWRfZGVwb3NpdDogCQCkAwEFCmFjY0RlcG9zaXQCFiwgYWNjdW11bGF0ZWRfYm9ycm93OiAJAKQDAQUJYWNjQm9ycm93AgssIGNsYWltZWQ6IAkApAMBBQdjbGFpbWVkARtib3Jyb3dlZFZhbHVlQW5kVG90YWxCb3Jyb3cACgEEZm9sZAIDYWNjAWEEB2FkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQFhCQCsAgICDGJhZCBhZGRyZXNzIAUBYQQHYXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MCB2Fzc2V0SWQJAKwCAgIdYXNzZXRJZCBub3QgZm91bmQgaW4gcmVzZXJ2ZSAFAWEEDWFzc2V0RGVjaW1hbHMDCQAAAgUHYXNzZXRJZAIFV0FWRVMACAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFB2FkZHJlc3MCDmFUb2tlbkRlY2ltYWxzCQCsAgICJGFUb2tlbkRlY2ltYWxzIG5vdCBmb3VuZCBpbiByZXNlcnZlIAUBYQQJYXNzZXREZWJ0CAkBBmFzSW50MgEJAPwHBAUHYWRkcmVzcwITc3RvcmVkRGVwb3NpdEJvcnJvdwUDbmlsBQNuaWwCXzIEDGFzc2V0RGVidFVzZAkAawMFCWFzc2V0RGVidAkBC29yYWNsZVByaWNlAQUHYXNzZXRJZAkBBXBvdzEwAQUNYXNzZXREZWNpbWFscwQLJHQwNjQ5NDY1MTQFA2FjYwQDbHN0CAULJHQwNjQ5NDY1MTQCXzEEA2FnZwgFCyR0MDY0OTQ2NTE0Al8yCQCUCgIJAM4IAgUDbHN0CQDMCAIFDGFzc2V0RGVidFVzZAUDbmlsCQBkAgUDYWdnBQxhc3NldERlYnRVc2QKAAIkbAUOcmV3YXJkUmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQJAWkBCmFkdmlzZVVzZXICB3Jlc2VydmUEdXNlcgQLJHQwNjY4NTY3NTYJARF1c2VyUmV3YXJkQmFsYW5jZQIFB3Jlc2VydmUFBHVzZXIECmFjY0RlcG9zaXQIBQskdDA2Njg1Njc1NgJfMQQJYWNjQm9ycm93CAULJHQwNjY4NTY3NTYCXzIEB2NsYWltZWQIBQskdDA2Njg1Njc1NgJfMwQXdG90YWxSZXdhcmRzQWNjdW11bGF0ZWQJAJYDAQkAzAgCAAAJAMwIAgkAZAIFCmFjY0RlcG9zaXQFCWFjY0JvcnJvdwUDbmlsBBByZXdhcmRzQXZhaWxhYmxlCQCWAwEJAMwIAgAACQDMCAIJAGUCBRd0b3RhbFJld2FyZHNBY2N1bXVsYXRlZAUHY2xhaW1lZAUDbmlsCQCUCgIFA25pbAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFHJld2FyZHNBY2N1bXVsYXRlZDogCQCkAwEFF3RvdGFsUmV3YXJkc0FjY3VtdWxhdGVkAhQsIHJld2FyZHNBdmFpbGFibGU6IAkApAMBBRByZXdhcmRzQXZhaWxhYmxlAhIsIHJld2FyZHNDbGFpbWVkOiAJAKQDAQUHY2xhaW1lZAFpAQpzeW5jSGVpZ2h0AQdyZXNlcnZlAwkBASEBBQdzdGFydGVkBQNuaWwDCQAAAgUGSEVJR0hUCQCfCAEJAQ9zeW5jSGVpZ2h0U3RvcmUBBQdyZXNlcnZlBQNuaWwEFGN1cnJlbnREZXBvc2l0UmV3YXJkCQEUY3VycmVudFJlc2VydmVSZXdhcmQCBQdyZXNlcnZlBQ1hY3Rpb25EZXBvc2l0BBNjdXJyZW50Qm9ycm93UmV3YXJkCQEUY3VycmVudFJlc2VydmVSZXdhcmQCBQdyZXNlcnZlBQxhY3Rpb25Cb3Jyb3cJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtyZXdhcmRTdG9yZQIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQFFGN1cnJlbnREZXBvc2l0UmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELcmV3YXJkU3RvcmUCBQdyZXNlcnZlBQxhY3Rpb25Cb3Jyb3cFE2N1cnJlbnRCb3Jyb3dSZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9zeW5jSGVpZ2h0U3RvcmUBBQdyZXNlcnZlBQZIRUlHSFQFA25pbAFpAQhvbkFjdGlvbgUHcmVzZXJ2ZQZhY3Rpb24EdXNlcgp1c2VyQ2hhbmdlDHN0cmVhbUNoYW5nZQMJAQEhAQUHc3RhcnRlZAUDbmlsBAZjaGVja3MDCQEIbWFpbk9ubHkBBQFpCQELdmFsaWRBY3Rpb24BBQZhY3Rpb24HAwkAAAIFBmNoZWNrcwUGY2hlY2tzAwkBASEBCQEJaXNEZWZpbmVkAQkAzwgCBQ5yZXdhcmRSZXNlcnZlcwUHcmVzZXJ2ZQUDbmlsAwkBAiE9AgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBD3N5bmNIZWlnaHRTdG9yZQEFB3Jlc2VydmUFBkhFSUdIVAkAAgECHmRpc3RyaWJ1dG9yOiBoZWlnaHQgbm90IHN5bmNlZAQLJHQwODA2NDgyMDQJAQZhc0ludDQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3Jlc2VydmUCEGdldEN1cnJlbnRUb3RhbHMJAMwIAgUEdXNlcgUDbmlsBQNuaWwED2N1clRvdGFsRGVwb3NpdAgFCyR0MDgwNjQ4MjA0Al8xBAxjdXJUb3RhbERlYnQIBQskdDA4MDY0ODIwNAJfMgQLdXNlckRlcG9zaXQIBQskdDA4MDY0ODIwNAJfMwQIdXNlckRlYnQIBQskdDA4MDY0ODIwNAJfNAQIbmV3VG90YWwDCQAAAgUGYWN0aW9uBQ1hY3Rpb25EZXBvc2l0BQ9jdXJUb3RhbERlcG9zaXQFDGN1clRvdGFsRGVidAQHbmV3VXNlcgMJAAACBQZhY3Rpb24FDWFjdGlvbkRlcG9zaXQFC3VzZXJEZXBvc2l0BQh1c2VyRGVidAQJcHJldlRvdGFsCQBlAgUIbmV3VG90YWwFDHN0cmVhbUNoYW5nZQQIcHJldlVzZXIJAGUCBQduZXdVc2VyBQp1c2VyQ2hhbmdlBBFwcmV2UmVzZXJ2ZVJld2FyZAkBFGN1cnJlbnRSZXNlcnZlUmV3YXJkAgUHcmVzZXJ2ZQUGYWN0aW9uBAtwcmV2VXNlckFkagkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQESdXNlclJld2FyZEFkalN0b3JlAwUHcmVzZXJ2ZQUGYWN0aW9uBQR1c2VyAAAEEG5ld1Jlc2VydmVSZXdhcmQDCQAAAgUJcHJldlRvdGFsAAAFEXByZXZSZXNlcnZlUmV3YXJkCQBrAwURcHJldlJlc2VydmVSZXdhcmQFCG5ld1RvdGFsBQlwcmV2VG90YWwEEG5ld1VzZXJSZXdhcmRBZGoDCQAAAgUIbmV3VG90YWwAAAkAZAIFC3ByZXZVc2VyQWRqBRFwcmV2UmVzZXJ2ZVJld2FyZAkAZQIFC3ByZXZVc2VyQWRqCQBrAwUQbmV3UmVzZXJ2ZVJld2FyZAUKdXNlckNoYW5nZQUIbmV3VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtyZXdhcmRTdG9yZQIFB3Jlc2VydmUFBmFjdGlvbgUQbmV3UmVzZXJ2ZVJld2FyZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUEdXNlcgUQbmV3VXNlclJld2FyZEFkagUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBG1vdmUFB3Jlc2VydmUGYWN0aW9uBGZyb20CdG8GYW1vdW50AwkBASEBBQdzdGFydGVkBQNuaWwEBmNoZWNrcwMJAQhtYWluT25seQEFAWkJAQt2YWxpZEFjdGlvbgEFBmFjdGlvbgcDCQAAAgUGY2hlY2tzBQZjaGVja3MDCQEBIQEJAQlpc0RlZmluZWQBCQDPCAIFDnJld2FyZFJlc2VydmVzBQdyZXNlcnZlBQNuaWwDCQECIT0CCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEPc3luY0hlaWdodFN0b3JlAQUHcmVzZXJ2ZQUGSEVJR0hUCQACAQIeZGlzdHJpYnV0b3I6IGhlaWdodCBub3Qgc3luY2VkBAskdDA5NTI3OTcxNQkBBmFzSW50NgEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcmVzZXJ2ZQIRZ2V0Q3VycmVudFRvdGFsczIJAMwIAgUEZnJvbQkAzAgCBQJ0bwUDbmlsBQNuaWwED2N1clRvdGFsRGVwb3NpdAgFCyR0MDk1Mjc5NzE1Al8xBAxjdXJUb3RhbERlYnQIBQskdDA5NTI3OTcxNQJfMgQPdXNlckRlcG9zaXRGcm9tCAULJHQwOTUyNzk3MTUCXzMEDHVzZXJEZWJ0RnJvbQgFCyR0MDk1Mjc5NzE1Al80BA11c2VyRGVwb3NpdFRvCAULJHQwOTUyNzk3MTUCXzUECnVzZXJEZWJ0VG8IBQskdDA5NTI3OTcxNQJfNgQFdG90YWwDCQAAAgUGYWN0aW9uBQ1hY3Rpb25EZXBvc2l0BQ9jdXJUb3RhbERlcG9zaXQFDGN1clRvdGFsRGVidAQHbmV3RnJvbQMJAAACBQZhY3Rpb24FDWFjdGlvbkRlcG9zaXQFD3VzZXJEZXBvc2l0RnJvbQUMdXNlckRlYnRGcm9tBAVuZXdUbwMJAAACBQZhY3Rpb24FDWFjdGlvbkRlcG9zaXQFDXVzZXJEZXBvc2l0VG8FCnVzZXJEZWJ0VG8EDXJlc2VydmVSZXdhcmQJARRjdXJyZW50UmVzZXJ2ZVJld2FyZAIFB3Jlc2VydmUFBmFjdGlvbgQRZnJvbVVzZXJSZXdhcmRBZGoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUEZnJvbQAABA90b1VzZXJSZXdhcmRBZGoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUCdG8AAAQUbmV3RnJvbVVzZXJSZXdhcmRBZGoJAGUCBRFmcm9tVXNlclJld2FyZEFkagkAawMFDXJlc2VydmVSZXdhcmQJAQEtAQUGYW1vdW50BQV0b3RhbAQSbmV3VG9Vc2VyUmV3YXJkQWRqCQBlAgUPdG9Vc2VyUmV3YXJkQWRqCQBrAwUNcmVzZXJ2ZVJld2FyZAUGYW1vdW50BQV0b3RhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUEZnJvbQUUbmV3RnJvbVVzZXJSZXdhcmRBZGoJAMwIAgkBDEludGVnZXJFbnRyeQIJARJ1c2VyUmV3YXJkQWRqU3RvcmUDBQdyZXNlcnZlBQZhY3Rpb24FAnRvBRJuZXdUb1VzZXJSZXdhcmRBZGoFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jbGFpbVJld2FyZEZvcgMHcmVzZXJ2ZQR1c2VyBmFtb3VudAMJAQIhPQIFBmFtb3VudAD///////////8BCQACAQIbZGlzdHJpYnV0b3I6IGNsYWltIGFsbCBvbmx5AwkBASEBBQdzdGFydGVkBQNuaWwEBmNoZWNrcwMJAQhtYWluT25seQEFAWkJAQlvcEFsbG93ZWQBAhhjbGFpbV92aXJlc19kaXN0cmlidXRpb24HAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxMDg4OTEwOTYwCQERdXNlclJld2FyZEJhbGFuY2UCBQdyZXNlcnZlBQR1c2VyBAphY2NEZXBvc2l0CAUNJHQwMTA4ODkxMDk2MAJfMQQJYWNjQm9ycm93CAUNJHQwMTA4ODkxMDk2MAJfMgQHY2xhaW1lZAgFDSR0MDEwODg5MTA5NjACXzMEC2FjY3VtdWxhdGVkCQBkAgUKYWNjRGVwb3NpdAUJYWNjQm9ycm93BAlhdmFpbGFibGUJAGUCBQthY2N1bXVsYXRlZAUHY2xhaW1lZAMJAGcCAAAFCWF2YWlsYWJsZQkAlAoCBQNuaWwAAAQEbWludAkA/AcEBQt2aXJlc01pbnRlcgIPZGlzdHJpYnV0b3JNaW50CQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFCWF2YWlsYWJsZQUDbmlsBQNuaWwDCQAAAgUEbWludAUEbWludAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQdXNlckNsYWltZWRTdG9yZQIFB3Jlc2VydmUFBHVzZXIJAGQCBQdjbGFpbWVkBQlhdmFpbGFibGUFA25pbAUJYXZhaWxhYmxlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3JlYWxsb2MAAwkBASEBCQEJb3BBbGxvd2VkAQIHcmVhbGxvYwkAAgECDnJlYWxsb2MgcGF1c2VkAwkBASEBBQdzdGFydGVkBQNuaWwECnRvdGFsU3BlZWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZjb25maWcCC3RvdGFsX3NwZWVkAhlubyB0b3RhbCBhbGxvY2F0aW9uIHNwZWVkBA10b3RhbFJlc2VydmVzCQCQAwEFDnJld2FyZFJlc2VydmVzBA0kdDAxMTU2OTExNjM5CQEbYm9ycm93ZWRWYWx1ZUFuZFRvdGFsQm9ycm93AAQUYm9ycm93ZWRWYWx1ZUJ5SW5kZXgIBQ0kdDAxMTU2OTExNjM5Al8xBAt0b3RhbEJvcnJvdwgFDSR0MDExNTY5MTE2MzkCXzIKAQRmb2xkAgFsBWluZGV4AwkAZwIFBWluZGV4BQ10b3RhbFJlc2VydmVzBQFsBAdyZXNlcnZlCQCRAwIFDnJld2FyZFJlc2VydmVzBQVpbmRleAQKYXNzZXRTcGVlZAMJAAACBQt0b3RhbEJvcnJvdwAAAAAJAGsDBQp0b3RhbFNwZWVkCQCRAwIFFGJvcnJvd2VkVmFsdWVCeUluZGV4BQVpbmRleAULdG90YWxCb3Jyb3cED25ld0RlcG9zaXRTcGVlZAkAawMFCmFzc2V0U3BlZWQJARRkZXBvc2l0VG9Cb3Jyb3dSYXRpbwEFB3Jlc2VydmUFC2ZhY3RvcnNCYXNlBA5uZXdCb3Jyb3dTcGVlZAkAZQIFCmFzc2V0U3BlZWQFD25ld0RlcG9zaXRTcGVlZAQUY3VycmVudERlcG9zaXRSZXdhcmQJARRjdXJyZW50UmVzZXJ2ZVJld2FyZAIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQEE2N1cnJlbnRCb3Jyb3dSZXdhcmQJARRjdXJyZW50UmVzZXJ2ZVJld2FyZAIFB3Jlc2VydmUFDGFjdGlvbkJvcnJvdwkAzggCBQFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKc3BlZWRTdG9yZQIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQFD25ld0RlcG9zaXRTcGVlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC3Jld2FyZFN0b3JlAgUHcmVzZXJ2ZQUNYWN0aW9uRGVwb3NpdAUUY3VycmVudERlcG9zaXRSZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQpzcGVlZFN0b3JlAgUHcmVzZXJ2ZQUMYWN0aW9uQm9ycm93BQ5uZXdCb3Jyb3dTcGVlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC3Jld2FyZFN0b3JlAgUHcmVzZXJ2ZQUMYWN0aW9uQm9ycm93BRNjdXJyZW50Qm9ycm93UmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPc3luY0hlaWdo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", "chainId": 87, "height": 3266908, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: MfvWDadz4yzmiJCsoBpZJFFrE9tYywqDMMkJYpD6KSS Next: 7Ndu9yamK52Ez7yLYe7LVmncH5eob6PtHikyiuHtZxD3 Diff:
OldNewDifferences
204204 let assetDecimals = if ((assetId == "WAVES"))
205205 then 8
206206 else valueOrErrorMessage(getInteger(address, "aTokenDecimals"), ("aTokenDecimals not found in reserve " + a))
207- let assetDebt = valueOrElse(getInteger(address, "totalBorrow"), 0)
207+ let assetDebt = asInt2(invoke(address, "storedDepositBorrow", nil, nil))._2
208208 let assetDebtUsd = fraction(assetDebt, oraclePrice(assetId), pow10(assetDecimals))
209- let $t064866506 = acc
210- let lst = $t064866506._1
211- let agg = $t064866506._2
209+ let $t064946514 = acc
210+ let lst = $t064946514._1
211+ let agg = $t064946514._2
212212 $Tuple2((lst ++ [assetDebtUsd]), (agg + assetDebtUsd))
213213 }
214214
229229
230230 @Callable(i)
231231 func adviseUser (reserve,user) = {
232- let $t066776748 = userRewardBalance(reserve, user)
233- let accDeposit = $t066776748._1
234- let accBorrow = $t066776748._2
235- let claimed = $t066776748._3
232+ let $t066856756 = userRewardBalance(reserve, user)
233+ let accDeposit = $t066856756._1
234+ let accBorrow = $t066856756._2
235+ let claimed = $t066856756._3
236236 let totalRewardsAccumulated = max([0, (accDeposit + accBorrow)])
237237 let rewardsAvailable = max([0, (totalRewardsAccumulated - claimed)])
238238 $Tuple2(nil, ((((("rewardsAccumulated: " + toString(totalRewardsAccumulated)) + ", rewardsAvailable: ") + toString(rewardsAvailable)) + ", rewardsClaimed: ") + toString(claimed)))
266266 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
267267 then throw("distributor: height not synced")
268268 else {
269- let $t080568196 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
270- let curTotalDeposit = $t080568196._1
271- let curTotalDebt = $t080568196._2
272- let userDeposit = $t080568196._3
273- let userDebt = $t080568196._4
269+ let $t080648204 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
270+ let curTotalDeposit = $t080648204._1
271+ let curTotalDebt = $t080648204._2
272+ let userDeposit = $t080648204._3
273+ let userDebt = $t080648204._4
274274 let newTotal = if ((action == actionDeposit))
275275 then curTotalDeposit
276276 else curTotalDebt
307307 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
308308 then throw("distributor: height not synced")
309309 else {
310- let $t095199707 = asInt6(invoke(addressFromStringValue(reserve), "getCurrentTotals2", [from, to], nil))
311- let curTotalDeposit = $t095199707._1
312- let curTotalDebt = $t095199707._2
313- let userDepositFrom = $t095199707._3
314- let userDebtFrom = $t095199707._4
315- let userDepositTo = $t095199707._5
316- let userDebtTo = $t095199707._6
310+ let $t095279715 = asInt6(invoke(addressFromStringValue(reserve), "getCurrentTotals2", [from, to], nil))
311+ let curTotalDeposit = $t095279715._1
312+ let curTotalDebt = $t095279715._2
313+ let userDepositFrom = $t095279715._3
314+ let userDebtFrom = $t095279715._4
315+ let userDepositTo = $t095279715._5
316+ let userDebtTo = $t095279715._6
317317 let total = if ((action == actionDeposit))
318318 then curTotalDeposit
319319 else curTotalDebt
346346 else false
347347 if ((checks == checks))
348348 then {
349- let $t01088110952 = userRewardBalance(reserve, user)
350- let accDeposit = $t01088110952._1
351- let accBorrow = $t01088110952._2
352- let claimed = $t01088110952._3
349+ let $t01088910960 = userRewardBalance(reserve, user)
350+ let accDeposit = $t01088910960._1
351+ let accBorrow = $t01088910960._2
352+ let claimed = $t01088910960._3
353353 let accumulated = (accDeposit + accBorrow)
354354 let available = (accumulated - claimed)
355355 if ((0 >= available))
374374 else {
375375 let totalSpeed = valueOrErrorMessage(getInteger(config, "total_speed"), "no total allocation speed")
376376 let totalReserves = size(rewardReserves)
377- let $t01156111631 = borrowedValueAndTotalBorrow()
378- let borrowedValueByIndex = $t01156111631._1
379- let totalBorrow = $t01156111631._2
377+ let $t01156911639 = borrowedValueAndTotalBorrow()
378+ let borrowedValueByIndex = $t01156911639._1
379+ let totalBorrow = $t01156911639._2
380380 func fold (l,index) = if ((index >= totalReserves))
381381 then l
382382 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let configStore = "config"
55
66 let startedKey = "started"
77
88 func syncHeightStore (reserve) = (reserve + "_syncHeight")
99
1010
1111 func speedStore (reserve,action) = ((reserve + "_speed_") + action)
1212
1313
1414 func rewardStore (reserve,action) = ((reserve + "_reward_") + action)
1515
1616
1717 func userClaimedStore (reserve,user) = ((reserve + "_claimed_") + user)
1818
1919
2020 func userRewardAdjStore (reserve,action,user) = ((((reserve + "_userRewardAdj_") + action) + "_") + user)
2121
2222
2323 func pow10 (n) = if ((n == 6))
2424 then 1000000
2525 else if ((n == 8))
2626 then 100000000
2727 else throw(("bad decimals: " + toString(n)))
2828
2929
3030 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
3131 then StringEntry(key, value)
3232 else throw(("already initialized: " + key))
3333
3434
3535 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configStore), "vires-distributor: no configAddress")), "invalid config address")
3636
3737 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_minter"), "vires-distributor: no viresMinter")), "invalid viresMinter")
3838
3939 let rewardReservesStr = valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "vires-distributor: no reserves in config")
4040
4141 let rewardReserves = split_4C(rewardReservesStr, "|")
4242
4343 let viresIdStr = valueOrErrorMessage(getString(viresMinter, "assetId"), "vires-distributor: no viresAssetIdStore")
4444
4545 let viresAssetId = fromBase58String(viresIdStr)
4646
4747 let actionDeposit = "deposit"
4848
4949 let actionBorrow = "borrow"
5050
5151 func validAction (action) = if (if ((action != actionDeposit))
5252 then (action != actionBorrow)
5353 else false)
5454 then throw(("invalid action: " + action))
5555 else true
5656
5757
5858 func mainOnly (i) = if (contains(getStringValue(configAddress, "main"), toString(i.caller)))
5959 then true
6060 else throw("only main can do")
6161
6262
6363 let started = isDefined(getInteger(this, startedKey))
6464
6565 func asInt (value) = match value {
6666 case int: Int =>
6767 int
6868 case _ =>
6969 throw("wrong type, expected: Int")
7070 }
7171
7272
7373 func asInt4 (value) = match value {
7474 case x: (Int, Int, Int, Int) =>
7575 x
7676 case t =>
7777 throw("wrong type, expected: Int4")
7878 }
7979
8080
8181 func asInt6 (value) = match value {
8282 case x: (Int, Int, Int, Int, Int, Int) =>
8383 x
8484 case t =>
8585 throw("wrong type, expected: Int4")
8686 }
8787
8888
8989 func asUserBalanceData (value) = match value {
9090 case x: (Int, Int, Int, Int, Int, Boolean) =>
9191 x
9292 case t =>
9393 throw("wrong type, expected: Int5&Boolean")
9494 }
9595
9696
9797 let config = addressFromStringValue(getStringValue(this, configStore))
9898
9999 let factorsBase = 1000
100100
101101 func depositToBorrowRatio (reserve) = valueOrErrorMessage(getInteger(config, (reserve + "_depositToBorrowRatio")), (("depositToBorrowRatio for " + reserve) + " not set"))
102102
103103
104104 let maybeOracleAddress = match getString(config, "oracle_address") {
105105 case s: String =>
106106 addressFromString(s)
107107 case _ =>
108108 unit
109109 }
110110
111111 func oraclePrice (assetId) = match invoke(valueOrErrorMessage(maybeOracleAddress, "no oracle"), "price", [assetId], nil) {
112112 case i: Int =>
113113 i
114114 case _ =>
115115 throw("bad oracle data")
116116 }
117117
118118
119119 let HEIGHT = height
120120
121121 func asInt2 (value) = match value {
122122 case x: (Int, Int) =>
123123 x
124124 case t =>
125125 throw("wrong type, expected: Int2")
126126 }
127127
128128
129129 func opAllowed (op) = match invoke(configAddress, "opAllowed", [viresIdStr, op], nil) {
130130 case b: Boolean =>
131131 if (b)
132132 then true
133133 else throw("not allowed")
134134 case _ =>
135135 throw("opAllowed: unexpected result type")
136136 }
137137
138138
139139 func currentReserveReward (reserve,action) = {
140140 let h = valueOrElse(getInteger(this, syncHeightStore(reserve)), HEIGHT)
141141 let storedReward = valueOrElse(getInteger(this, rewardStore(reserve, action)), 0)
142142 if ((h == HEIGHT))
143143 then storedReward
144144 else {
145145 let speed = valueOrElse(getInteger(this, speedStore(reserve, action)), 0)
146146 let accumulatedReward = ((HEIGHT - h) * speed)
147147 (storedReward + accumulatedReward)
148148 }
149149 }
150150
151151
152152 func currentReserveRewardsSpeed () = {
153153 func fold2 (l,reserve) = ((((((((((((l + reserve) + "_") + actionDeposit) + "=") + toString(valueOrElse(getInteger(this, speedStore(reserve, actionDeposit)), 0))) + ", ") + reserve) + "_") + actionBorrow) + "=") + toString(valueOrElse(getInteger(this, speedStore(reserve, actionBorrow)), 0))) + ", ")
154154
155155 let $l = rewardReserves
156156 let $s = size($l)
157157 let $acc0 = ""
158158 func $f0_1 ($a,$i) = if (($i >= $s))
159159 then $a
160160 else fold2($a, $l[$i])
161161
162162 func $f0_2 ($a,$i) = if (($i >= $s))
163163 then $a
164164 else throw("List size exceeds 20")
165165
166166 $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($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), 13), 14), 15), 16), 17), 18), 19), 20)
167167 }
168168
169169
170170 func userRewardBalance (reserve,user) = {
171171 let $t046714811 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
172172 let curTotalDeposit = $t046714811._1
173173 let curTotalDebt = $t046714811._2
174174 let userDeposit = $t046714811._3
175175 let userDebt = $t046714811._4
176176 let totalDepositReward = currentReserveReward(reserve, actionDeposit)
177177 let totalBorrowReward = currentReserveReward(reserve, actionBorrow)
178178 let userDepositAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, actionDeposit, user)), 0)
179179 let userBorrowAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, actionBorrow, user)), 0)
180180 let accDeposit = (userDepositAdj + (if ((curTotalDeposit == 0))
181181 then 0
182182 else fraction(totalDepositReward, userDeposit, curTotalDeposit)))
183183 let accBorrow = (userBorrowAdj + (if ((curTotalDebt == 0))
184184 then 0
185185 else fraction(totalBorrowReward, userDebt, curTotalDebt)))
186186 let claimed = valueOrElse(getInteger(this, userClaimedStore(reserve, user)), 0)
187187 $Tuple3(accDeposit, accBorrow, claimed)
188188 }
189189
190190
191191 func evalUser (reserve,user) = {
192192 let $t056355706 = userRewardBalance(reserve, user)
193193 let accDeposit = $t056355706._1
194194 let accBorrow = $t056355706._2
195195 let claimed = $t056355706._3
196196 ((((("accumulated_deposit: " + toString(accDeposit)) + ", accumulated_borrow: ") + toString(accBorrow)) + ", claimed: ") + toString(claimed))
197197 }
198198
199199
200200 func borrowedValueAndTotalBorrow () = {
201201 func fold (acc,a) = {
202202 let address = valueOrErrorMessage(addressFromString(a), ("bad address " + a))
203203 let assetId = valueOrErrorMessage(getString(address, "assetId"), ("assetId not found in reserve " + a))
204204 let assetDecimals = if ((assetId == "WAVES"))
205205 then 8
206206 else valueOrErrorMessage(getInteger(address, "aTokenDecimals"), ("aTokenDecimals not found in reserve " + a))
207- let assetDebt = valueOrElse(getInteger(address, "totalBorrow"), 0)
207+ let assetDebt = asInt2(invoke(address, "storedDepositBorrow", nil, nil))._2
208208 let assetDebtUsd = fraction(assetDebt, oraclePrice(assetId), pow10(assetDecimals))
209- let $t064866506 = acc
210- let lst = $t064866506._1
211- let agg = $t064866506._2
209+ let $t064946514 = acc
210+ let lst = $t064946514._1
211+ let agg = $t064946514._2
212212 $Tuple2((lst ++ [assetDebtUsd]), (agg + assetDebtUsd))
213213 }
214214
215215 let $l = rewardReserves
216216 let $s = size($l)
217217 let $acc0 = $Tuple2(nil, 0)
218218 func $f0_1 ($a,$i) = if (($i >= $s))
219219 then $a
220220 else fold($a, $l[$i])
221221
222222 func $f0_2 ($a,$i) = if (($i >= $s))
223223 then $a
224224 else throw("List size exceeds 20")
225225
226226 $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($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), 13), 14), 15), 16), 17), 18), 19), 20)
227227 }
228228
229229
230230 @Callable(i)
231231 func adviseUser (reserve,user) = {
232- let $t066776748 = userRewardBalance(reserve, user)
233- let accDeposit = $t066776748._1
234- let accBorrow = $t066776748._2
235- let claimed = $t066776748._3
232+ let $t066856756 = userRewardBalance(reserve, user)
233+ let accDeposit = $t066856756._1
234+ let accBorrow = $t066856756._2
235+ let claimed = $t066856756._3
236236 let totalRewardsAccumulated = max([0, (accDeposit + accBorrow)])
237237 let rewardsAvailable = max([0, (totalRewardsAccumulated - claimed)])
238238 $Tuple2(nil, ((((("rewardsAccumulated: " + toString(totalRewardsAccumulated)) + ", rewardsAvailable: ") + toString(rewardsAvailable)) + ", rewardsClaimed: ") + toString(claimed)))
239239 }
240240
241241
242242
243243 @Callable(i)
244244 func syncHeight (reserve) = if (!(started))
245245 then nil
246246 else if ((HEIGHT == getInteger(syncHeightStore(reserve))))
247247 then nil
248248 else {
249249 let currentDepositReward = currentReserveReward(reserve, actionDeposit)
250250 let currentBorrowReward = currentReserveReward(reserve, actionBorrow)
251251 [IntegerEntry(rewardStore(reserve, actionDeposit), currentDepositReward), IntegerEntry(rewardStore(reserve, actionBorrow), currentBorrowReward), IntegerEntry(syncHeightStore(reserve), HEIGHT)]
252252 }
253253
254254
255255
256256 @Callable(i)
257257 func onAction (reserve,action,user,userChange,streamChange) = if (!(started))
258258 then nil
259259 else {
260260 let checks = if (mainOnly(i))
261261 then validAction(action)
262262 else false
263263 if ((checks == checks))
264264 then if (!(isDefined(indexOf(rewardReserves, reserve))))
265265 then nil
266266 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
267267 then throw("distributor: height not synced")
268268 else {
269- let $t080568196 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
270- let curTotalDeposit = $t080568196._1
271- let curTotalDebt = $t080568196._2
272- let userDeposit = $t080568196._3
273- let userDebt = $t080568196._4
269+ let $t080648204 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
270+ let curTotalDeposit = $t080648204._1
271+ let curTotalDebt = $t080648204._2
272+ let userDeposit = $t080648204._3
273+ let userDebt = $t080648204._4
274274 let newTotal = if ((action == actionDeposit))
275275 then curTotalDeposit
276276 else curTotalDebt
277277 let newUser = if ((action == actionDeposit))
278278 then userDeposit
279279 else userDebt
280280 let prevTotal = (newTotal - streamChange)
281281 let prevUser = (newUser - userChange)
282282 let prevReserveReward = currentReserveReward(reserve, action)
283283 let prevUserAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, action, user)), 0)
284284 let newReserveReward = if ((prevTotal == 0))
285285 then prevReserveReward
286286 else fraction(prevReserveReward, newTotal, prevTotal)
287287 let newUserRewardAdj = if ((newTotal == 0))
288288 then (prevUserAdj + prevReserveReward)
289289 else (prevUserAdj - fraction(newReserveReward, userChange, newTotal))
290290 [IntegerEntry(rewardStore(reserve, action), newReserveReward), IntegerEntry(userRewardAdjStore(reserve, action, user), newUserRewardAdj)]
291291 }
292292 else throw("Strict value is not equal to itself.")
293293 }
294294
295295
296296
297297 @Callable(i)
298298 func move (reserve,action,from,to,amount) = if (!(started))
299299 then nil
300300 else {
301301 let checks = if (mainOnly(i))
302302 then validAction(action)
303303 else false
304304 if ((checks == checks))
305305 then if (!(isDefined(indexOf(rewardReserves, reserve))))
306306 then nil
307307 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
308308 then throw("distributor: height not synced")
309309 else {
310- let $t095199707 = asInt6(invoke(addressFromStringValue(reserve), "getCurrentTotals2", [from, to], nil))
311- let curTotalDeposit = $t095199707._1
312- let curTotalDebt = $t095199707._2
313- let userDepositFrom = $t095199707._3
314- let userDebtFrom = $t095199707._4
315- let userDepositTo = $t095199707._5
316- let userDebtTo = $t095199707._6
310+ let $t095279715 = asInt6(invoke(addressFromStringValue(reserve), "getCurrentTotals2", [from, to], nil))
311+ let curTotalDeposit = $t095279715._1
312+ let curTotalDebt = $t095279715._2
313+ let userDepositFrom = $t095279715._3
314+ let userDebtFrom = $t095279715._4
315+ let userDepositTo = $t095279715._5
316+ let userDebtTo = $t095279715._6
317317 let total = if ((action == actionDeposit))
318318 then curTotalDeposit
319319 else curTotalDebt
320320 let newFrom = if ((action == actionDeposit))
321321 then userDepositFrom
322322 else userDebtFrom
323323 let newTo = if ((action == actionDeposit))
324324 then userDepositTo
325325 else userDebtTo
326326 let reserveReward = currentReserveReward(reserve, action)
327327 let fromUserRewardAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, action, from)), 0)
328328 let toUserRewardAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, action, to)), 0)
329329 let newFromUserRewardAdj = (fromUserRewardAdj - fraction(reserveReward, -(amount), total))
330330 let newToUserRewardAdj = (toUserRewardAdj - fraction(reserveReward, amount, total))
331331 [IntegerEntry(userRewardAdjStore(reserve, action, from), newFromUserRewardAdj), IntegerEntry(userRewardAdjStore(reserve, action, to), newToUserRewardAdj)]
332332 }
333333 else throw("Strict value is not equal to itself.")
334334 }
335335
336336
337337
338338 @Callable(i)
339339 func claimRewardFor (reserve,user,amount) = if ((amount != -1))
340340 then throw("distributor: claim all only")
341341 else if (!(started))
342342 then nil
343343 else {
344344 let checks = if (mainOnly(i))
345345 then opAllowed("claim_vires_distribution")
346346 else false
347347 if ((checks == checks))
348348 then {
349- let $t01088110952 = userRewardBalance(reserve, user)
350- let accDeposit = $t01088110952._1
351- let accBorrow = $t01088110952._2
352- let claimed = $t01088110952._3
349+ let $t01088910960 = userRewardBalance(reserve, user)
350+ let accDeposit = $t01088910960._1
351+ let accBorrow = $t01088910960._2
352+ let claimed = $t01088910960._3
353353 let accumulated = (accDeposit + accBorrow)
354354 let available = (accumulated - claimed)
355355 if ((0 >= available))
356356 then $Tuple2(nil, 0)
357357 else {
358358 let mint = invoke(viresMinter, "distributorMint", [toString(i.caller), available], nil)
359359 if ((mint == mint))
360360 then $Tuple2([IntegerEntry(userClaimedStore(reserve, user), (claimed + available))], available)
361361 else throw("Strict value is not equal to itself.")
362362 }
363363 }
364364 else throw("Strict value is not equal to itself.")
365365 }
366366
367367
368368
369369 @Callable(i)
370370 func realloc () = if (!(opAllowed("realloc")))
371371 then throw("realloc paused")
372372 else if (!(started))
373373 then nil
374374 else {
375375 let totalSpeed = valueOrErrorMessage(getInteger(config, "total_speed"), "no total allocation speed")
376376 let totalReserves = size(rewardReserves)
377- let $t01156111631 = borrowedValueAndTotalBorrow()
378- let borrowedValueByIndex = $t01156111631._1
379- let totalBorrow = $t01156111631._2
377+ let $t01156911639 = borrowedValueAndTotalBorrow()
378+ let borrowedValueByIndex = $t01156911639._1
379+ let totalBorrow = $t01156911639._2
380380 func fold (l,index) = if ((index >= totalReserves))
381381 then l
382382 else {
383383 let reserve = rewardReserves[index]
384384 let assetSpeed = if ((totalBorrow == 0))
385385 then 0
386386 else fraction(totalSpeed, borrowedValueByIndex[index], totalBorrow)
387387 let newDepositSpeed = fraction(assetSpeed, depositToBorrowRatio(reserve), factorsBase)
388388 let newBorrowSpeed = (assetSpeed - newDepositSpeed)
389389 let currentDepositReward = currentReserveReward(reserve, actionDeposit)
390390 let currentBorrowReward = currentReserveReward(reserve, actionBorrow)
391391 (l ++ [IntegerEntry(speedStore(reserve, actionDeposit), newDepositSpeed), IntegerEntry(rewardStore(reserve, actionDeposit), currentDepositReward), IntegerEntry(speedStore(reserve, actionBorrow), newBorrowSpeed), IntegerEntry(rewardStore(reserve, actionBorrow), currentBorrowReward), IntegerEntry(syncHeightStore(reserve), HEIGHT)])
392392 }
393393
394394 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
395395 let $s = size($l)
396396 let $acc0 = nil
397397 func $f0_1 ($a,$i) = if (($i >= $s))
398398 then $a
399399 else fold($a, $l[$i])
400400
401401 func $f0_2 ($a,$i) = if (($i >= $s))
402402 then $a
403403 else throw("List size exceeds 20")
404404
405405 $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($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), 13), 14), 15), 16), 17), 18), 19), 20)
406406 }
407407
408408
409409
410410 @Callable(i)
411411 func advise () = {
412412 let totalReserves = size(rewardReserves)
413413 func fold (l,index) = if ((index >= totalReserves))
414414 then l
415415 else {
416416 let reserve = rewardReserves[index]
417417 ((((((((l + ", [ ") + "reserveAddress: ") + reserve) + ", depositRewardSpeed: ") + toString(getIntegerValue(this, speedStore(reserve, actionDeposit)))) + ", borrowRewardSpeed: ") + toString(getIntegerValue(this, speedStore(reserve, actionBorrow)))) + " ] ")
418418 }
419419
420420 $Tuple2(nil, {
421421 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
422422 let $s = size($l)
423423 let $acc0 = ""
424424 func $f0_1 ($a,$i) = if (($i >= $s))
425425 then $a
426426 else fold($a, $l[$i])
427427
428428 func $f0_2 ($a,$i) = if (($i >= $s))
429429 then $a
430430 else throw("List size exceeds 20")
431431
432432 $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($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), 13), 14), 15), 16), 17), 18), 19), 20)
433433 })
434434 }
435435
436436
437437
438438 @Callable(i)
439439 func init (configAddress) = [writeConstString(configStore, configAddress)]
440440
441441
442442
443443 @Callable(i)
444444 func start () = {
445445 let adminStore = "admin"
446446 let admin = addressFromStringValue(getStringValue(config, adminStore))
447447 if ((i.caller != admin))
448448 then throw("only admin can do")
449449 else if (started)
450450 then throw("already started")
451451 else {
452452 func fold (l,reserve) = (l ++ [IntegerEntry(speedStore(reserve, actionDeposit), 0), IntegerEntry(rewardStore(reserve, actionDeposit), 0), IntegerEntry(speedStore(reserve, actionBorrow), 0), IntegerEntry(rewardStore(reserve, actionBorrow), 0), IntegerEntry(syncHeightStore(reserve), HEIGHT)])
453453
454454 let $l = rewardReserves
455455 let $s = size($l)
456456 let $acc0 = [IntegerEntry(startedKey, HEIGHT)]
457457 func $f0_1 ($a,$i) = if (($i >= $s))
458458 then $a
459459 else fold($a, $l[$i])
460460
461461 func $f0_2 ($a,$i) = if (($i >= $s))
462462 then $a
463463 else throw("List size exceeds 20")
464464
465465 $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($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), 13), 14), 15), 16), 17), 18), 19), 20)
466466 }
467467 }
468468
469469

github/deemru/w8io/786bc32 
60.95 ms