2022.10.14 08:12 [3337043] smart account 3P2RkFDTHJCB82HcVvJNU2eMEfUo82ZFagV > SELF 0.00000000 Waves

{ "type": 13, "id": "7Ndu9yamK52Ez7yLYe7LVmncH5eob6PtHikyiuHtZxD3", "fee": 1500000, "feeAssetId": null, "timestamp": 1665724286853, "version": 1, "sender": "3P2RkFDTHJCB82HcVvJNU2eMEfUo82ZFagV", "senderPublicKey": "Sx5vS5cxVcvs6Du84y8pwr1FKn6m2UH7jUsHVTBdnQT", "proofs": [ "3ED2eHbVvqtucV52ekmPzpaXFpw3RAKi638mr2E38Uct9YtbSTvuVroRApuJjoBvXo2RvRXL7Qi3KtsH2es8HCt3" ], "script": "base64:BgIxCAISBAoCCAgSAwoBCBIHCgUICAgBARIHCgUICAgIARIFCgMICAESABIAEgMKAQgSACYAC2NvbmZpZ1N0b3JlAgZjb25maWcACnN0YXJ0ZWRLZXkCB3N0YXJ0ZWQBD3N5bmNIZWlnaHRTdG9yZQEHcmVzZXJ2ZQkArAICBQdyZXNlcnZlAgtfc3luY0hlaWdodAEKc3BlZWRTdG9yZQIHcmVzZXJ2ZQZhY3Rpb24JAKwCAgkArAICBQdyZXNlcnZlAgdfc3BlZWRfBQZhY3Rpb24BC3Jld2FyZFN0b3JlAgdyZXNlcnZlBmFjdGlvbgkArAICCQCsAgIFB3Jlc2VydmUCCF9yZXdhcmRfBQZhY3Rpb24BEHVzZXJDbGFpbWVkU3RvcmUCB3Jlc2VydmUEdXNlcgkArAICCQCsAgIFB3Jlc2VydmUCCV9jbGFpbWVkXwUEdXNlcgESdXNlclJld2FyZEFkalN0b3JlAwdyZXNlcnZlBmFjdGlvbgR1c2VyCQCsAgIJAKwCAgkArAICCQCsAgIFB3Jlc2VydmUCD191c2VyUmV3YXJkQWRqXwUGYWN0aW9uAgFfBQR1c2VyAQVwb3cxMAEBbgMJAAACBQFuAAYAwIQ9AwkAAAIFAW4ACACAwtcvCQACAQkArAICAg5iYWQgZGVjaW1hbHM6IAkApAMBBQFuARB3cml0ZUNvbnN0U3RyaW5nAgNrZXkFdmFsdWUDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFA2tleQkBC1N0cmluZ0VudHJ5AgUDa2V5BQV2YWx1ZQkAAgEJAKwCAgIVYWxyZWFkeSBpbml0aWFsaXplZDogBQNrZXkADWNvbmZpZ0FkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULY29uZmlnU3RvcmUCI3ZpcmVzLWRpc3RyaWJ1dG9yOiBubyBjb25maWdBZGRyZXNzAhZpbnZhbGlkIGNvbmZpZyBhZGRyZXNzAAt2aXJlc01pbnRlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAgx2aXJlc19taW50ZXICIXZpcmVzLWRpc3RyaWJ1dG9yOiBubyB2aXJlc01pbnRlcgITaW52YWxpZCB2aXJlc01pbnRlcgARcmV3YXJkUmVzZXJ2ZXNTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhNyZXdhcmRhYmxlX3Jlc2VydmVzAjN2aXJlcy1kaXN0cmlidXRvcjogbm8gcmV3YXJkYWJsZV9yZXNlcnZlcyBpbiBjb25maWcAFXplcm9SZXdhcmRSZXNlcnZlc1N0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhh6ZXJvX3Jld2FyZGFibGVfcmVzZXJ2ZXMCAAAOcmV3YXJkUmVzZXJ2ZXMJALwJAgURcmV3YXJkUmVzZXJ2ZXNTdHICAXwACnZpcmVzSWRTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQt2aXJlc01pbnRlcgIHYXNzZXRJZAIndmlyZXMtZGlzdHJpYnV0b3I6IG5vIHZpcmVzQXNzZXRJZFN0b3JlAAx2aXJlc0Fzc2V0SWQJANkEAQUKdmlyZXNJZFN0cgANYWN0aW9uRGVwb3NpdAIHZGVwb3NpdAAMYWN0aW9uQm9ycm93AgZib3Jyb3cBC3ZhbGlkQWN0aW9uAQZhY3Rpb24DAwkBAiE9AgUGYWN0aW9uBQ1hY3Rpb25EZXBvc2l0CQECIT0CBQZhY3Rpb24FDGFjdGlvbkJvcnJvdwcJAAIBCQCsAgICEGludmFsaWQgYWN0aW9uOiAFBmFjdGlvbgYBCG1haW5Pbmx5AQFpAwkBCGNvbnRhaW5zAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNY29uZmlnQWRkcmVzcwIEbWFpbgkApQgBCAUBaQZjYWxsZXIGCQACAQIQb25seSBtYWluIGNhbiBkbwAHc3RhcnRlZAkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwUKc3RhcnRlZEtleQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEGYXNJbnQ0AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIUKEludCwgSW50LCBJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAhp3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50NAEGYXNJbnQ2AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIeKEludCwgSW50LCBJbnQsIEludCwgSW50LCBJbnQpBAF4BQckbWF0Y2gwBQF4BAF0BQckbWF0Y2gwCQACAQIad3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludDQBEWFzVXNlckJhbGFuY2VEYXRhAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIiKEludCwgSW50LCBJbnQsIEludCwgSW50LCBCb29sZWFuKQQBeAUHJG1hdGNoMAUBeAQBdAUHJG1hdGNoMAkAAgECIndyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQ1JkJvb2xlYW4ABmNvbmZpZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwULY29uZmlnU3RvcmUAC2ZhY3RvcnNCYXNlAOgHARRkZXBvc2l0VG9Cb3Jyb3dSYXRpbwEHcmVzZXJ2ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBmNvbmZpZwkArAICBQdyZXNlcnZlAhVfZGVwb3NpdFRvQm9ycm93UmF0aW8JAKwCAgkArAICAhlkZXBvc2l0VG9Cb3Jyb3dSYXRpbyBmb3IgBQdyZXNlcnZlAgggbm90IHNldAASbWF5YmVPcmFjbGVBZGRyZXNzBAckbWF0Y2gwCQCdCAIFBmNvbmZpZwIOb3JhY2xlX2FkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMFBHVuaXQBC29yYWNsZVByaWNlAQdhc3NldElkBAckbWF0Y2gwCQD8BwQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUSbWF5YmVPcmFjbGVBZGRyZXNzAglubyBvcmFjbGUCBXByaWNlCQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQkAAgECD2JhZCBvcmFjbGUgZGF0YQAGSEVJR0hUBQZoZWlnaHQBBmFzSW50MgEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAhp3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50MgEJb3BBbGxvd2VkAQJvcAQHJG1hdGNoMAkA/AcEBQ1jb25maWdBZGRyZXNzAglvcEFsbG93ZWQJAMwIAgUKdmlyZXNJZFN0cgkAzAgCBQJvcAUDbmlsBQNuaWwDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAMFAWIGCQACAQILbm90IGFsbG93ZWQJAAIBAiFvcEFsbG93ZWQ6IHVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUBFGN1cnJlbnRSZXNlcnZlUmV3YXJkAgdyZXNlcnZlBmFjdGlvbgQBaAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEPc3luY0hlaWdodFN0b3JlAQUHcmVzZXJ2ZQUGSEVJR0hUBAxzdG9yZWRSZXdhcmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBC3Jld2FyZFN0b3JlAgUHcmVzZXJ2ZQUGYWN0aW9uAAADCQAAAgUBaAUGSEVJR0hUBQxzdG9yZWRSZXdhcmQEBXNwZWVkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQpzcGVlZFN0b3JlAgUHcmVzZXJ2ZQUGYWN0aW9uAAAEEWFjY3VtdWxhdGVkUmV3YXJkCQBoAgkAZQIFBkhFSUdIVAUBaAUFc3BlZWQJAGQCBQxzdG9yZWRSZXdhcmQFEWFjY3VtdWxhdGVkUmV3YXJkARpjdXJyZW50UmVzZXJ2ZVJld2FyZHNTcGVlZAAKAQVmb2xkMgIBbAdyZXNlcnZlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQFsBQdyZXNlcnZlAgFfBQ1hY3Rpb25EZXBvc2l0AgE9CQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBCnNwZWVkU3RvcmUCBQdyZXNlcnZlBQ1hY3Rpb25EZXBvc2l0AAACAiwgBQdyZXNlcnZlAgFfBQxhY3Rpb25Cb3Jyb3cCAT0JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEKc3BlZWRTdG9yZQIFB3Jlc2VydmUFDGFjdGlvbkJvcnJvdwAAAgIsIAoAAiRsBQ5yZXdhcmRSZXNlcnZlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFZm9sZDICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAERdXNlclJld2FyZEJhbGFuY2UCB3Jlc2VydmUEdXNlcgQLJHQwNDc4NTQ5MjUJAQZhc0ludDQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3Jlc2VydmUCEGdldEN1cnJlbnRUb3RhbHMJAMwIAgUEdXNlcgUDbmlsBQNuaWwED2N1clRvdGFsRGVwb3NpdAgFCyR0MDQ3ODU0OTI1Al8xBAxjdXJUb3RhbERlYnQIBQskdDA0Nzg1NDkyNQJfMgQLdXNlckRlcG9zaXQIBQskdDA0Nzg1NDkyNQJfMwQIdXNlckRlYnQIBQskdDA0Nzg1NDkyNQJfNAQSdG90YWxEZXBvc2l0UmV3YXJkCQEUY3VycmVudFJlc2VydmVSZXdhcmQCBQdyZXNlcnZlBQ1hY3Rpb25EZXBvc2l0BBF0b3RhbEJvcnJvd1Jld2FyZAkBFGN1cnJlbnRSZXNlcnZlUmV3YXJkAgUHcmVzZXJ2ZQUMYWN0aW9uQm9ycm93BA51c2VyRGVwb3NpdEFkagkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQESdXNlclJld2FyZEFkalN0b3JlAwUHcmVzZXJ2ZQUNYWN0aW9uRGVwb3NpdAUEdXNlcgAABA11c2VyQm9ycm93QWRqCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARJ1c2VyUmV3YXJkQWRqU3RvcmUDBQdyZXNlcnZlBQxhY3Rpb25Cb3Jyb3cFBHVzZXIAAAQKYWNjRGVwb3NpdAkAZAIFDnVzZXJEZXBvc2l0QWRqAwkAAAIFD2N1clRvdGFsRGVwb3NpdAAAAAAJAGsDBRJ0b3RhbERlcG9zaXRSZXdhcmQFC3VzZXJEZXBvc2l0BQ9jdXJUb3RhbERlcG9zaXQECWFjY0JvcnJvdwkAZAIFDXVzZXJCb3Jyb3dBZGoDCQAAAgUMY3VyVG90YWxEZWJ0AAAAAAkAawMFEXRvdGFsQm9ycm93UmV3YXJkBQh1c2VyRGVidAUMY3VyVG90YWxEZWJ0BAdjbGFpbWVkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARB1c2VyQ2xhaW1lZFN0b3JlAgUHcmVzZXJ2ZQUEdXNlcgAACQCVCgMFCmFjY0RlcG9zaXQFCWFjY0JvcnJvdwUHY2xhaW1lZAEIZXZhbFVzZXICB3Jlc2VydmUEdXNlcgQLJHQwNTc0OTU4MjAJARF1c2VyUmV3YXJkQmFsYW5jZQIFB3Jlc2VydmUFBHVzZXIECmFjY0RlcG9zaXQIBQskdDA1NzQ5NTgyMAJfMQQJYWNjQm9ycm93CAULJHQwNTc0OTU4MjACXzIEB2NsYWltZWQIBQskdDA1NzQ5NTgyMAJfMwkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFWFjY3VtdWxhdGVkX2RlcG9zaXQ6IAkApAMBBQphY2NEZXBvc2l0AhYsIGFjY3VtdWxhdGVkX2JvcnJvdzogCQCkAwEFCWFjY0JvcnJvdwILLCBjbGFpbWVkOiAJAKQDAQUHY2xhaW1lZAEbYm9ycm93ZWRWYWx1ZUFuZFRvdGFsQm9ycm93AAoBBGZvbGQCA2FjYwFhBAdhZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUBYQkArAICAgxiYWQgYWRkcmVzcyAFAWEEDGFzc2V0RGVidFVzZAMJAQhjb250YWlucwIFFXplcm9SZXdhcmRSZXNlcnZlc1N0cgUBYQAABAdhc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwIHYXNzZXRJZAkArAICAh1hc3NldElkIG5vdCBmb3VuZCBpbiByZXNlcnZlIAUBYQQNYXNzZXREZWNpbWFscwMJAAACBQdhc3NldElkAgVXQVZFUwAICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUHYWRkcmVzcwIOYVRva2VuRGVjaW1hbHMJAKwCAgIkYVRva2VuRGVjaW1hbHMgbm90IGZvdW5kIGluIHJlc2VydmUgBQFhBAlhc3NldERlYnQICQEGYXNJbnQyAQkA/AcEBQdhZGRyZXNzAhNzdG9yZWREZXBvc2l0Qm9ycm93BQNuaWwFA25pbAJfMgkAawMFCWFzc2V0RGVidAkBC29yYWNsZVByaWNlAQUHYXNzZXRJZAkBBXBvdzEwAQUNYXNzZXREZWNpbWFscwQLJHQwNjcwNjY3MjYFA2FjYwQDbHN0CAULJHQwNjcwNjY3MjYCXzEEA2FnZwgFCyR0MDY3MDY2NzI2Al8yCQCUCgIJAM4IAgUDbHN0CQDMCAIFDGFzc2V0RGVidFVzZAUDbmlsCQBkAgUDYWdnBQxhc3NldERlYnRVc2QKAAIkbAUOcmV3YXJkUmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQJAWkBCmFkdmlzZVVzZXICB3Jlc2VydmUEdXNlcgQLJHQwNjg5NzY5NjgJARF1c2VyUmV3YXJkQmFsYW5jZQIFB3Jlc2VydmUFBHVzZXIECmFjY0RlcG9zaXQIBQskdDA2ODk3Njk2OAJfMQQJYWNjQm9ycm93CAULJHQwNjg5NzY5NjgCXzIEB2NsYWltZWQIBQskdDA2ODk3Njk2OAJfMwQXdG90YWxSZXdhcmRzQWNjdW11bGF0ZWQJAJYDAQkAzAgCAAAJAMwIAgkAZAIFCmFjY0RlcG9zaXQFCWFjY0JvcnJvdwUDbmlsBBByZXdhcmRzQXZhaWxhYmxlCQCWAwEJAMwIAgAACQDMCAIJAGUCBRd0b3RhbFJld2FyZHNBY2N1bXVsYXRlZAUHY2xhaW1lZAUDbmlsCQCUCgIFA25pbAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFHJld2FyZHNBY2N1bXVsYXRlZDogCQCkAwEFF3RvdGFsUmV3YXJkc0FjY3VtdWxhdGVkAhQsIHJld2FyZHNBdmFpbGFibGU6IAkApAMBBRByZXdhcmRzQXZhaWxhYmxlAhIsIHJld2FyZHNDbGFpbWVkOiAJAKQDAQUHY2xhaW1lZAFpAQpzeW5jSGVpZ2h0AQdyZXNlcnZlAwkBASEBBQdzdGFydGVkBQNuaWwDCQAAAgUGSEVJR0hUCQCfCAEJAQ9zeW5jSGVpZ2h0U3RvcmUBBQdyZXNlcnZlBQNuaWwEFGN1cnJlbnREZXBvc2l0UmV3YXJkCQEUY3VycmVudFJlc2VydmVSZXdhcmQCBQdyZXNlcnZlBQ1hY3Rpb25EZXBvc2l0BBNjdXJyZW50Qm9ycm93UmV3YXJkCQEUY3VycmVudFJlc2VydmVSZXdhcmQCBQdyZXNlcnZlBQxhY3Rpb25Cb3Jyb3cJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtyZXdhcmRTdG9yZQIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQFFGN1cnJlbnREZXBvc2l0UmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELcmV3YXJkU3RvcmUCBQdyZXNlcnZlBQxhY3Rpb25Cb3Jyb3cFE2N1cnJlbnRCb3Jyb3dSZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9zeW5jSGVpZ2h0U3RvcmUBBQdyZXNlcnZlBQZIRUlHSFQFA25pbAFpAQhvbkFjdGlvbgUHcmVzZXJ2ZQZhY3Rpb24EdXNlcgp1c2VyQ2hhbmdlDHN0cmVhbUNoYW5nZQMJAQEhAQUHc3RhcnRlZAUDbmlsBAZjaGVja3MDCQEIbWFpbk9ubHkBBQFpCQELdmFsaWRBY3Rpb24BBQZhY3Rpb24HAwkAAAIFBmNoZWNrcwUGY2hlY2tzAwkBASEBCQEJaXNEZWZpbmVkAQkAzwgCBQ5yZXdhcmRSZXNlcnZlcwUHcmVzZXJ2ZQUDbmlsAwkBAiE9AgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBD3N5bmNIZWlnaHRTdG9yZQEFB3Jlc2VydmUFBkhFSUdIVAkAAgECHmRpc3RyaWJ1dG9yOiBoZWlnaHQgbm90IHN5bmNlZAQLJHQwODI3Njg0MTYJAQZhc0ludDQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3Jlc2VydmUCEGdldEN1cnJlbnRUb3RhbHMJAMwIAgUEdXNlcgUDbmlsBQNuaWwED2N1clRvdGFsRGVwb3NpdAgFCyR0MDgyNzY4NDE2Al8xBAxjdXJUb3RhbERlYnQIBQskdDA4Mjc2ODQxNgJfMgQLdXNlckRlcG9zaXQIBQskdDA4Mjc2ODQxNgJfMwQIdXNlckRlYnQIBQskdDA4Mjc2ODQxNgJfNAQIbmV3VG90YWwDCQAAAgUGYWN0aW9uBQ1hY3Rpb25EZXBvc2l0BQ9jdXJUb3RhbERlcG9zaXQFDGN1clRvdGFsRGVidAQHbmV3VXNlcgMJAAACBQZhY3Rpb24FDWFjdGlvbkRlcG9zaXQFC3VzZXJEZXBvc2l0BQh1c2VyRGVidAQJcHJldlRvdGFsCQBlAgUIbmV3VG90YWwFDHN0cmVhbUNoYW5nZQQIcHJldlVzZXIJAGUCBQduZXdVc2VyBQp1c2VyQ2hhbmdlBBFwcmV2UmVzZXJ2ZVJld2FyZAkBFGN1cnJlbnRSZXNlcnZlUmV3YXJkAgUHcmVzZXJ2ZQUGYWN0aW9uBAtwcmV2VXNlckFkagkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQESdXNlclJld2FyZEFkalN0b3JlAwUHcmVzZXJ2ZQUGYWN0aW9uBQR1c2VyAAAEEG5ld1Jlc2VydmVSZXdhcmQDCQAAAgUJcHJldlRvdGFsAAAFEXByZXZSZXNlcnZlUmV3YXJkCQBrAwURcHJldlJlc2VydmVSZXdhcmQFCG5ld1RvdGFsBQlwcmV2VG90YWwEEG5ld1VzZXJSZXdhcmRBZGoDCQAAAgUIbmV3VG90YWwAAAkAZAIFC3ByZXZVc2VyQWRqBRFwcmV2UmVzZXJ2ZVJld2FyZAkAZQIFC3ByZXZVc2VyQWRqCQBrAwUQbmV3UmVzZXJ2ZVJld2FyZAUKdXNlckNoYW5nZQUIbmV3VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtyZXdhcmRTdG9yZQIFB3Jlc2VydmUFBmFjdGlvbgUQbmV3UmVzZXJ2ZVJld2FyZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUEdXNlcgUQbmV3VXNlclJld2FyZEFkagUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBG1vdmUFB3Jlc2VydmUGYWN0aW9uBGZyb20CdG8GYW1vdW50AwkBASEBBQdzdGFydGVkBQNuaWwEBmNoZWNrcwMJAQhtYWluT25seQEFAWkJAQt2YWxpZEFjdGlvbgEFBmFjdGlvbgcDCQAAAgUGY2hlY2tzBQZjaGVja3MDCQEBIQEJAQlpc0RlZmluZWQBCQDPCAIFDnJld2FyZFJlc2VydmVzBQdyZXNlcnZlBQNuaWwDCQECIT0CCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEPc3luY0hlaWdodFN0b3JlAQUHcmVzZXJ2ZQUGSEVJR0hUCQACAQIeZGlzdHJpYnV0b3I6IGhlaWdodCBub3Qgc3luY2VkBAskdDA5NzM5OTkyNwkBBmFzSW50NgEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcmVzZXJ2ZQIRZ2V0Q3VycmVudFRvdGFsczIJAMwIAgUEZnJvbQkAzAgCBQJ0bwUDbmlsBQNuaWwED2N1clRvdGFsRGVwb3NpdAgFCyR0MDk3Mzk5OTI3Al8xBAxjdXJUb3RhbERlYnQIBQskdDA5NzM5OTkyNwJfMgQPdXNlckRlcG9zaXRGcm9tCAULJHQwOTczOTk5MjcCXzMEDHVzZXJEZWJ0RnJvbQgFCyR0MDk3Mzk5OTI3Al80BA11c2VyRGVwb3NpdFRvCAULJHQwOTczOTk5MjcCXzUECnVzZXJEZWJ0VG8IBQskdDA5NzM5OTkyNwJfNgQFdG90YWwDCQAAAgUGYWN0aW9uBQ1hY3Rpb25EZXBvc2l0BQ9jdXJUb3RhbERlcG9zaXQFDGN1clRvdGFsRGVidAQHbmV3RnJvbQMJAAACBQZhY3Rpb24FDWFjdGlvbkRlcG9zaXQFD3VzZXJEZXBvc2l0RnJvbQUMdXNlckRlYnRGcm9tBAVuZXdUbwMJAAACBQZhY3Rpb24FDWFjdGlvbkRlcG9zaXQFDXVzZXJEZXBvc2l0VG8FCnVzZXJEZWJ0VG8EDXJlc2VydmVSZXdhcmQJARRjdXJyZW50UmVzZXJ2ZVJld2FyZAIFB3Jlc2VydmUFBmFjdGlvbgQRZnJvbVVzZXJSZXdhcmRBZGoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUEZnJvbQAABA90b1VzZXJSZXdhcmRBZGoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUCdG8AAAQUbmV3RnJvbVVzZXJSZXdhcmRBZGoJAGUCBRFmcm9tVXNlclJld2FyZEFkagkAawMFDXJlc2VydmVSZXdhcmQJAQEtAQUGYW1vdW50BQV0b3RhbAQSbmV3VG9Vc2VyUmV3YXJkQWRqCQBlAgUPdG9Vc2VyUmV3YXJkQWRqCQBrAwUNcmVzZXJ2ZVJld2FyZAUGYW1vdW50BQV0b3RhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEnVzZXJSZXdhcmRBZGpTdG9yZQMFB3Jlc2VydmUFBmFjdGlvbgUEZnJvbQUUbmV3RnJvbVVzZXJSZXdhcmRBZGoJAMwIAgkBDEludGVnZXJFbnRyeQIJARJ1c2VyUmV3YXJkQWRqU3RvcmUDBQdyZXNlcnZlBQZhY3Rpb24FAnRvBRJuZXdUb1VzZXJSZXdhcmRBZGoFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jbGFpbVJld2FyZEZvcgMHcmVzZXJ2ZQR1c2VyBmFtb3VudAMJAQIhPQIFBmFtb3VudAD///////////8BCQACAQIbZGlzdHJpYnV0b3I6IGNsYWltIGFsbCBvbmx5AwkBASEBBQdzdGFydGVkBQNuaWwEBmNoZWNrcwMJAQhtYWluT25seQEFAWkJAQlvcEFsbG93ZWQBAhhjbGFpbV92aXJlc19kaXN0cmlidXRpb24HAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxMTEwMTExMTcyCQERdXNlclJld2FyZEJhbGFuY2UCBQdyZXNlcnZlBQR1c2VyBAphY2NEZXBvc2l0CAUNJHQwMTExMDExMTE3MgJfMQQJYWNjQm9ycm93CAUNJHQwMTExMDExMTE3MgJfMgQHY2xhaW1lZAgFDSR0MDExMTAxMTExNzICXzMEC2FjY3VtdWxhdGVkCQBkAgUKYWNjRGVwb3NpdAUJYWNjQm9ycm93BAlhdmFpbGFibGUJAGUCBQthY2N1bXVsYXRlZAUHY2xhaW1lZAMJAGcCAAAFCWF2YWlsYWJsZQkAlAoCBQNuaWwAAAQEbWludAkA/AcEBQt2aXJlc01pbnRlcgIPZGlzdHJpYnV0b3JNaW50CQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFCWF2YWlsYWJsZQUDbmlsBQNuaWwDCQAAAgUEbWludAUEbWludAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQdXNlckNsYWltZWRTdG9yZQIFB3Jlc2VydmUFBHVzZXIJAGQCBQdjbGFpbWVkBQlhdmFpbGFibGUFA25pbAUJYXZhaWxhYmxlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3JlYWxsb2MAAwkBASEBCQEJb3BBbGxvd2VkAQIHcmVhbGxvYwkAAgECDnJlYWxsb2MgcGF1c2VkAwkBASEBBQdzdGFydGVkBQNuaWwECnRvdGFsU3BlZWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZjb25maWcCC3RvdGFsX3NwZWVkAhlubyB0b3RhbCBhbGxvY2F0aW9uIHNwZWVkBA10b3RhbFJlc2VydmVzCQCQAwEFDnJld2FyZFJlc2VydmVzBA0kdDAxMTc4MTExODUxCQEbYm9ycm93ZWRWYWx1ZUFuZFRvdGFsQm9ycm93AAQUYm9ycm93ZWRWYWx1ZUJ5SW5kZXgIBQ0kdDAxMTc4MTExODUxAl8xBAt0b3RhbEJvcnJvdwgFDSR0MDExNzgxMTE4NTECXzIKAQRmb2xkAgFsBWluZGV4AwkAZwIFBWluZGV4BQ10b3RhbFJlc2VydmVzBQFsBAdyZXNlcnZlCQCRAwIFDnJld2FyZFJlc2VydmVzBQVpbmRleAQKYXNzZXRTcGVlZAMJAAACBQt0b3RhbEJvcnJvdwAAAAAJAGsDBQp0b3RhbFNwZWVkCQCRAwIFFGJvcnJvd2VkVmFsdWVCeUluZGV4BQVpbmRleAULdG90YWxCb3Jyb3cED25ld0RlcG9zaXRTcGVlZAkAawMFCmFzc2V0U3BlZWQJARRkZXBvc2l0VG9Cb3Jyb3dSYXRpbwEFB3Jlc2VydmUFC2ZhY3RvcnNCYXNlBA5uZXdCb3Jyb3dTcGVlZAkAZQIFCmFzc2V0U3BlZWQFD25ld0RlcG9zaXRTcGVlZAQUY3VycmVudERlcG9zaXRSZXdhcmQJARRjdXJyZW50UmVzZXJ2ZVJld2FyZAIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQEE2N1cnJlbnRCb3Jyb3dSZXdhcmQJARRjdXJyZW50UmVzZXJ2ZVJld2FyZAIFB3Jlc2VydmUFDGFjdGlvbkJvcnJvdwkAzggCBQFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKc3BlZWRTdG9yZQIFB3Jlc2VydmUFDWFjdGlvbkRlcG9zaXQFD25ld0RlcG9zaXRTcGVlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC3Jld2FyZFN0b3JlAgUHcmVzZXJ2ZQUNYWN0aW9uRGVwb3NpdAUUY3VycmVudERlcG9zaXRSZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQpzcGVlZFN0b3JlAgUHcmVzZXJ2ZQUMYWN0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", "chainId": 87, "height": 3337043, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HWeVNcBruYEnCPv3eLHDhoGGLo8oK5yS4X4NedpuTEQJ Next: CpGb6BSHdeDv4EyNgoevpFmRXCrzMJ8YHX29revmded4 Diff:
OldNewDifferences
3636
3737 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_minter"), "vires-distributor: no viresMinter")), "invalid viresMinter")
3838
39-let rewardReservesStr = valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "vires-distributor: no reserves in config")
39+let rewardReservesStr = valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "vires-distributor: no rewardable_reserves in config")
40+
41+let zeroRewardReservesStr = valueOrElse(getString(configAddress, "zero_rewardable_reserves"), "")
4042
4143 let rewardReserves = split_4C(rewardReservesStr, "|")
4244
168170
169171
170172 func userRewardBalance (reserve,user) = {
171- let $t046714811 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
172- let curTotalDeposit = $t046714811._1
173- let curTotalDebt = $t046714811._2
174- let userDeposit = $t046714811._3
175- let userDebt = $t046714811._4
173+ let $t047854925 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
174+ let curTotalDeposit = $t047854925._1
175+ let curTotalDebt = $t047854925._2
176+ let userDeposit = $t047854925._3
177+ let userDebt = $t047854925._4
176178 let totalDepositReward = currentReserveReward(reserve, actionDeposit)
177179 let totalBorrowReward = currentReserveReward(reserve, actionBorrow)
178180 let userDepositAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, actionDeposit, user)), 0)
189191
190192
191193 func evalUser (reserve,user) = {
192- let $t056355706 = userRewardBalance(reserve, user)
193- let accDeposit = $t056355706._1
194- let accBorrow = $t056355706._2
195- let claimed = $t056355706._3
194+ let $t057495820 = userRewardBalance(reserve, user)
195+ let accDeposit = $t057495820._1
196+ let accBorrow = $t057495820._2
197+ let claimed = $t057495820._3
196198 ((((("accumulated_deposit: " + toString(accDeposit)) + ", accumulated_borrow: ") + toString(accBorrow)) + ", claimed: ") + toString(claimed))
197199 }
198200
200202 func borrowedValueAndTotalBorrow () = {
201203 func fold (acc,a) = {
202204 let address = valueOrErrorMessage(addressFromString(a), ("bad address " + a))
203- let assetId = valueOrErrorMessage(getString(address, "assetId"), ("assetId not found in reserve " + a))
204- let assetDecimals = if ((assetId == "WAVES"))
205- then 8
206- else valueOrErrorMessage(getInteger(address, "aTokenDecimals"), ("aTokenDecimals not found in reserve " + a))
207- let assetDebt = asInt2(invoke(address, "storedDepositBorrow", nil, nil))._2
208- let assetDebtUsd = fraction(assetDebt, oraclePrice(assetId), pow10(assetDecimals))
209- let $t064946514 = acc
210- let lst = $t064946514._1
211- let agg = $t064946514._2
205+ let assetDebtUsd = if (contains(zeroRewardReservesStr, a))
206+ then 0
207+ else {
208+ let assetId = valueOrErrorMessage(getString(address, "assetId"), ("assetId not found in reserve " + a))
209+ let assetDecimals = if ((assetId == "WAVES"))
210+ then 8
211+ else valueOrErrorMessage(getInteger(address, "aTokenDecimals"), ("aTokenDecimals not found in reserve " + a))
212+ let assetDebt = asInt2(invoke(address, "storedDepositBorrow", nil, nil))._2
213+ fraction(assetDebt, oraclePrice(assetId), pow10(assetDecimals))
214+ }
215+ let $t067066726 = acc
216+ let lst = $t067066726._1
217+ let agg = $t067066726._2
212218 $Tuple2((lst ++ [assetDebtUsd]), (agg + assetDebtUsd))
213219 }
214220
229235
230236 @Callable(i)
231237 func adviseUser (reserve,user) = {
232- let $t066856756 = userRewardBalance(reserve, user)
233- let accDeposit = $t066856756._1
234- let accBorrow = $t066856756._2
235- let claimed = $t066856756._3
238+ let $t068976968 = userRewardBalance(reserve, user)
239+ let accDeposit = $t068976968._1
240+ let accBorrow = $t068976968._2
241+ let claimed = $t068976968._3
236242 let totalRewardsAccumulated = max([0, (accDeposit + accBorrow)])
237243 let rewardsAvailable = max([0, (totalRewardsAccumulated - claimed)])
238244 $Tuple2(nil, ((((("rewardsAccumulated: " + toString(totalRewardsAccumulated)) + ", rewardsAvailable: ") + toString(rewardsAvailable)) + ", rewardsClaimed: ") + toString(claimed)))
266272 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
267273 then throw("distributor: height not synced")
268274 else {
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
275+ let $t082768416 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
276+ let curTotalDeposit = $t082768416._1
277+ let curTotalDebt = $t082768416._2
278+ let userDeposit = $t082768416._3
279+ let userDebt = $t082768416._4
274280 let newTotal = if ((action == actionDeposit))
275281 then curTotalDeposit
276282 else curTotalDebt
307313 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
308314 then throw("distributor: height not synced")
309315 else {
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
316+ let $t097399927 = asInt6(invoke(addressFromStringValue(reserve), "getCurrentTotals2", [from, to], nil))
317+ let curTotalDeposit = $t097399927._1
318+ let curTotalDebt = $t097399927._2
319+ let userDepositFrom = $t097399927._3
320+ let userDebtFrom = $t097399927._4
321+ let userDepositTo = $t097399927._5
322+ let userDebtTo = $t097399927._6
317323 let total = if ((action == actionDeposit))
318324 then curTotalDeposit
319325 else curTotalDebt
346352 else false
347353 if ((checks == checks))
348354 then {
349- let $t01088910960 = userRewardBalance(reserve, user)
350- let accDeposit = $t01088910960._1
351- let accBorrow = $t01088910960._2
352- let claimed = $t01088910960._3
355+ let $t01110111172 = userRewardBalance(reserve, user)
356+ let accDeposit = $t01110111172._1
357+ let accBorrow = $t01110111172._2
358+ let claimed = $t01110111172._3
353359 let accumulated = (accDeposit + accBorrow)
354360 let available = (accumulated - claimed)
355361 if ((0 >= available))
374380 else {
375381 let totalSpeed = valueOrErrorMessage(getInteger(config, "total_speed"), "no total allocation speed")
376382 let totalReserves = size(rewardReserves)
377- let $t01156911639 = borrowedValueAndTotalBorrow()
378- let borrowedValueByIndex = $t01156911639._1
379- let totalBorrow = $t01156911639._2
383+ let $t01178111851 = borrowedValueAndTotalBorrow()
384+ let borrowedValueByIndex = $t01178111851._1
385+ let totalBorrow = $t01178111851._2
380386 func fold (l,index) = if ((index >= totalReserves))
381387 then l
382388 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
39-let rewardReservesStr = valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "vires-distributor: no reserves in config")
39+let rewardReservesStr = valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "vires-distributor: no rewardable_reserves in config")
40+
41+let zeroRewardReservesStr = valueOrElse(getString(configAddress, "zero_rewardable_reserves"), "")
4042
4143 let rewardReserves = split_4C(rewardReservesStr, "|")
4244
4345 let viresIdStr = valueOrErrorMessage(getString(viresMinter, "assetId"), "vires-distributor: no viresAssetIdStore")
4446
4547 let viresAssetId = fromBase58String(viresIdStr)
4648
4749 let actionDeposit = "deposit"
4850
4951 let actionBorrow = "borrow"
5052
5153 func validAction (action) = if (if ((action != actionDeposit))
5254 then (action != actionBorrow)
5355 else false)
5456 then throw(("invalid action: " + action))
5557 else true
5658
5759
5860 func mainOnly (i) = if (contains(getStringValue(configAddress, "main"), toString(i.caller)))
5961 then true
6062 else throw("only main can do")
6163
6264
6365 let started = isDefined(getInteger(this, startedKey))
6466
6567 func asInt (value) = match value {
6668 case int: Int =>
6769 int
6870 case _ =>
6971 throw("wrong type, expected: Int")
7072 }
7173
7274
7375 func asInt4 (value) = match value {
7476 case x: (Int, Int, Int, Int) =>
7577 x
7678 case t =>
7779 throw("wrong type, expected: Int4")
7880 }
7981
8082
8183 func asInt6 (value) = match value {
8284 case x: (Int, Int, Int, Int, Int, Int) =>
8385 x
8486 case t =>
8587 throw("wrong type, expected: Int4")
8688 }
8789
8890
8991 func asUserBalanceData (value) = match value {
9092 case x: (Int, Int, Int, Int, Int, Boolean) =>
9193 x
9294 case t =>
9395 throw("wrong type, expected: Int5&Boolean")
9496 }
9597
9698
9799 let config = addressFromStringValue(getStringValue(this, configStore))
98100
99101 let factorsBase = 1000
100102
101103 func depositToBorrowRatio (reserve) = valueOrErrorMessage(getInteger(config, (reserve + "_depositToBorrowRatio")), (("depositToBorrowRatio for " + reserve) + " not set"))
102104
103105
104106 let maybeOracleAddress = match getString(config, "oracle_address") {
105107 case s: String =>
106108 addressFromString(s)
107109 case _ =>
108110 unit
109111 }
110112
111113 func oraclePrice (assetId) = match invoke(valueOrErrorMessage(maybeOracleAddress, "no oracle"), "price", [assetId], nil) {
112114 case i: Int =>
113115 i
114116 case _ =>
115117 throw("bad oracle data")
116118 }
117119
118120
119121 let HEIGHT = height
120122
121123 func asInt2 (value) = match value {
122124 case x: (Int, Int) =>
123125 x
124126 case t =>
125127 throw("wrong type, expected: Int2")
126128 }
127129
128130
129131 func opAllowed (op) = match invoke(configAddress, "opAllowed", [viresIdStr, op], nil) {
130132 case b: Boolean =>
131133 if (b)
132134 then true
133135 else throw("not allowed")
134136 case _ =>
135137 throw("opAllowed: unexpected result type")
136138 }
137139
138140
139141 func currentReserveReward (reserve,action) = {
140142 let h = valueOrElse(getInteger(this, syncHeightStore(reserve)), HEIGHT)
141143 let storedReward = valueOrElse(getInteger(this, rewardStore(reserve, action)), 0)
142144 if ((h == HEIGHT))
143145 then storedReward
144146 else {
145147 let speed = valueOrElse(getInteger(this, speedStore(reserve, action)), 0)
146148 let accumulatedReward = ((HEIGHT - h) * speed)
147149 (storedReward + accumulatedReward)
148150 }
149151 }
150152
151153
152154 func currentReserveRewardsSpeed () = {
153155 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))) + ", ")
154156
155157 let $l = rewardReserves
156158 let $s = size($l)
157159 let $acc0 = ""
158160 func $f0_1 ($a,$i) = if (($i >= $s))
159161 then $a
160162 else fold2($a, $l[$i])
161163
162164 func $f0_2 ($a,$i) = if (($i >= $s))
163165 then $a
164166 else throw("List size exceeds 20")
165167
166168 $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)
167169 }
168170
169171
170172 func userRewardBalance (reserve,user) = {
171- let $t046714811 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
172- let curTotalDeposit = $t046714811._1
173- let curTotalDebt = $t046714811._2
174- let userDeposit = $t046714811._3
175- let userDebt = $t046714811._4
173+ let $t047854925 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
174+ let curTotalDeposit = $t047854925._1
175+ let curTotalDebt = $t047854925._2
176+ let userDeposit = $t047854925._3
177+ let userDebt = $t047854925._4
176178 let totalDepositReward = currentReserveReward(reserve, actionDeposit)
177179 let totalBorrowReward = currentReserveReward(reserve, actionBorrow)
178180 let userDepositAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, actionDeposit, user)), 0)
179181 let userBorrowAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, actionBorrow, user)), 0)
180182 let accDeposit = (userDepositAdj + (if ((curTotalDeposit == 0))
181183 then 0
182184 else fraction(totalDepositReward, userDeposit, curTotalDeposit)))
183185 let accBorrow = (userBorrowAdj + (if ((curTotalDebt == 0))
184186 then 0
185187 else fraction(totalBorrowReward, userDebt, curTotalDebt)))
186188 let claimed = valueOrElse(getInteger(this, userClaimedStore(reserve, user)), 0)
187189 $Tuple3(accDeposit, accBorrow, claimed)
188190 }
189191
190192
191193 func evalUser (reserve,user) = {
192- let $t056355706 = userRewardBalance(reserve, user)
193- let accDeposit = $t056355706._1
194- let accBorrow = $t056355706._2
195- let claimed = $t056355706._3
194+ let $t057495820 = userRewardBalance(reserve, user)
195+ let accDeposit = $t057495820._1
196+ let accBorrow = $t057495820._2
197+ let claimed = $t057495820._3
196198 ((((("accumulated_deposit: " + toString(accDeposit)) + ", accumulated_borrow: ") + toString(accBorrow)) + ", claimed: ") + toString(claimed))
197199 }
198200
199201
200202 func borrowedValueAndTotalBorrow () = {
201203 func fold (acc,a) = {
202204 let address = valueOrErrorMessage(addressFromString(a), ("bad address " + a))
203- let assetId = valueOrErrorMessage(getString(address, "assetId"), ("assetId not found in reserve " + a))
204- let assetDecimals = if ((assetId == "WAVES"))
205- then 8
206- else valueOrErrorMessage(getInteger(address, "aTokenDecimals"), ("aTokenDecimals not found in reserve " + a))
207- let assetDebt = asInt2(invoke(address, "storedDepositBorrow", nil, nil))._2
208- let assetDebtUsd = fraction(assetDebt, oraclePrice(assetId), pow10(assetDecimals))
209- let $t064946514 = acc
210- let lst = $t064946514._1
211- let agg = $t064946514._2
205+ let assetDebtUsd = if (contains(zeroRewardReservesStr, a))
206+ then 0
207+ else {
208+ let assetId = valueOrErrorMessage(getString(address, "assetId"), ("assetId not found in reserve " + a))
209+ let assetDecimals = if ((assetId == "WAVES"))
210+ then 8
211+ else valueOrErrorMessage(getInteger(address, "aTokenDecimals"), ("aTokenDecimals not found in reserve " + a))
212+ let assetDebt = asInt2(invoke(address, "storedDepositBorrow", nil, nil))._2
213+ fraction(assetDebt, oraclePrice(assetId), pow10(assetDecimals))
214+ }
215+ let $t067066726 = acc
216+ let lst = $t067066726._1
217+ let agg = $t067066726._2
212218 $Tuple2((lst ++ [assetDebtUsd]), (agg + assetDebtUsd))
213219 }
214220
215221 let $l = rewardReserves
216222 let $s = size($l)
217223 let $acc0 = $Tuple2(nil, 0)
218224 func $f0_1 ($a,$i) = if (($i >= $s))
219225 then $a
220226 else fold($a, $l[$i])
221227
222228 func $f0_2 ($a,$i) = if (($i >= $s))
223229 then $a
224230 else throw("List size exceeds 20")
225231
226232 $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)
227233 }
228234
229235
230236 @Callable(i)
231237 func adviseUser (reserve,user) = {
232- let $t066856756 = userRewardBalance(reserve, user)
233- let accDeposit = $t066856756._1
234- let accBorrow = $t066856756._2
235- let claimed = $t066856756._3
238+ let $t068976968 = userRewardBalance(reserve, user)
239+ let accDeposit = $t068976968._1
240+ let accBorrow = $t068976968._2
241+ let claimed = $t068976968._3
236242 let totalRewardsAccumulated = max([0, (accDeposit + accBorrow)])
237243 let rewardsAvailable = max([0, (totalRewardsAccumulated - claimed)])
238244 $Tuple2(nil, ((((("rewardsAccumulated: " + toString(totalRewardsAccumulated)) + ", rewardsAvailable: ") + toString(rewardsAvailable)) + ", rewardsClaimed: ") + toString(claimed)))
239245 }
240246
241247
242248
243249 @Callable(i)
244250 func syncHeight (reserve) = if (!(started))
245251 then nil
246252 else if ((HEIGHT == getInteger(syncHeightStore(reserve))))
247253 then nil
248254 else {
249255 let currentDepositReward = currentReserveReward(reserve, actionDeposit)
250256 let currentBorrowReward = currentReserveReward(reserve, actionBorrow)
251257 [IntegerEntry(rewardStore(reserve, actionDeposit), currentDepositReward), IntegerEntry(rewardStore(reserve, actionBorrow), currentBorrowReward), IntegerEntry(syncHeightStore(reserve), HEIGHT)]
252258 }
253259
254260
255261
256262 @Callable(i)
257263 func onAction (reserve,action,user,userChange,streamChange) = if (!(started))
258264 then nil
259265 else {
260266 let checks = if (mainOnly(i))
261267 then validAction(action)
262268 else false
263269 if ((checks == checks))
264270 then if (!(isDefined(indexOf(rewardReserves, reserve))))
265271 then nil
266272 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
267273 then throw("distributor: height not synced")
268274 else {
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
275+ let $t082768416 = asInt4(invoke(addressFromStringValue(reserve), "getCurrentTotals", [user], nil))
276+ let curTotalDeposit = $t082768416._1
277+ let curTotalDebt = $t082768416._2
278+ let userDeposit = $t082768416._3
279+ let userDebt = $t082768416._4
274280 let newTotal = if ((action == actionDeposit))
275281 then curTotalDeposit
276282 else curTotalDebt
277283 let newUser = if ((action == actionDeposit))
278284 then userDeposit
279285 else userDebt
280286 let prevTotal = (newTotal - streamChange)
281287 let prevUser = (newUser - userChange)
282288 let prevReserveReward = currentReserveReward(reserve, action)
283289 let prevUserAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, action, user)), 0)
284290 let newReserveReward = if ((prevTotal == 0))
285291 then prevReserveReward
286292 else fraction(prevReserveReward, newTotal, prevTotal)
287293 let newUserRewardAdj = if ((newTotal == 0))
288294 then (prevUserAdj + prevReserveReward)
289295 else (prevUserAdj - fraction(newReserveReward, userChange, newTotal))
290296 [IntegerEntry(rewardStore(reserve, action), newReserveReward), IntegerEntry(userRewardAdjStore(reserve, action, user), newUserRewardAdj)]
291297 }
292298 else throw("Strict value is not equal to itself.")
293299 }
294300
295301
296302
297303 @Callable(i)
298304 func move (reserve,action,from,to,amount) = if (!(started))
299305 then nil
300306 else {
301307 let checks = if (mainOnly(i))
302308 then validAction(action)
303309 else false
304310 if ((checks == checks))
305311 then if (!(isDefined(indexOf(rewardReserves, reserve))))
306312 then nil
307313 else if ((getIntegerValue(syncHeightStore(reserve)) != HEIGHT))
308314 then throw("distributor: height not synced")
309315 else {
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
316+ let $t097399927 = asInt6(invoke(addressFromStringValue(reserve), "getCurrentTotals2", [from, to], nil))
317+ let curTotalDeposit = $t097399927._1
318+ let curTotalDebt = $t097399927._2
319+ let userDepositFrom = $t097399927._3
320+ let userDebtFrom = $t097399927._4
321+ let userDepositTo = $t097399927._5
322+ let userDebtTo = $t097399927._6
317323 let total = if ((action == actionDeposit))
318324 then curTotalDeposit
319325 else curTotalDebt
320326 let newFrom = if ((action == actionDeposit))
321327 then userDepositFrom
322328 else userDebtFrom
323329 let newTo = if ((action == actionDeposit))
324330 then userDepositTo
325331 else userDebtTo
326332 let reserveReward = currentReserveReward(reserve, action)
327333 let fromUserRewardAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, action, from)), 0)
328334 let toUserRewardAdj = valueOrElse(getInteger(this, userRewardAdjStore(reserve, action, to)), 0)
329335 let newFromUserRewardAdj = (fromUserRewardAdj - fraction(reserveReward, -(amount), total))
330336 let newToUserRewardAdj = (toUserRewardAdj - fraction(reserveReward, amount, total))
331337 [IntegerEntry(userRewardAdjStore(reserve, action, from), newFromUserRewardAdj), IntegerEntry(userRewardAdjStore(reserve, action, to), newToUserRewardAdj)]
332338 }
333339 else throw("Strict value is not equal to itself.")
334340 }
335341
336342
337343
338344 @Callable(i)
339345 func claimRewardFor (reserve,user,amount) = if ((amount != -1))
340346 then throw("distributor: claim all only")
341347 else if (!(started))
342348 then nil
343349 else {
344350 let checks = if (mainOnly(i))
345351 then opAllowed("claim_vires_distribution")
346352 else false
347353 if ((checks == checks))
348354 then {
349- let $t01088910960 = userRewardBalance(reserve, user)
350- let accDeposit = $t01088910960._1
351- let accBorrow = $t01088910960._2
352- let claimed = $t01088910960._3
355+ let $t01110111172 = userRewardBalance(reserve, user)
356+ let accDeposit = $t01110111172._1
357+ let accBorrow = $t01110111172._2
358+ let claimed = $t01110111172._3
353359 let accumulated = (accDeposit + accBorrow)
354360 let available = (accumulated - claimed)
355361 if ((0 >= available))
356362 then $Tuple2(nil, 0)
357363 else {
358364 let mint = invoke(viresMinter, "distributorMint", [toString(i.caller), available], nil)
359365 if ((mint == mint))
360366 then $Tuple2([IntegerEntry(userClaimedStore(reserve, user), (claimed + available))], available)
361367 else throw("Strict value is not equal to itself.")
362368 }
363369 }
364370 else throw("Strict value is not equal to itself.")
365371 }
366372
367373
368374
369375 @Callable(i)
370376 func realloc () = if (!(opAllowed("realloc")))
371377 then throw("realloc paused")
372378 else if (!(started))
373379 then nil
374380 else {
375381 let totalSpeed = valueOrErrorMessage(getInteger(config, "total_speed"), "no total allocation speed")
376382 let totalReserves = size(rewardReserves)
377- let $t01156911639 = borrowedValueAndTotalBorrow()
378- let borrowedValueByIndex = $t01156911639._1
379- let totalBorrow = $t01156911639._2
383+ let $t01178111851 = borrowedValueAndTotalBorrow()
384+ let borrowedValueByIndex = $t01178111851._1
385+ let totalBorrow = $t01178111851._2
380386 func fold (l,index) = if ((index >= totalReserves))
381387 then l
382388 else {
383389 let reserve = rewardReserves[index]
384390 let assetSpeed = if ((totalBorrow == 0))
385391 then 0
386392 else fraction(totalSpeed, borrowedValueByIndex[index], totalBorrow)
387393 let newDepositSpeed = fraction(assetSpeed, depositToBorrowRatio(reserve), factorsBase)
388394 let newBorrowSpeed = (assetSpeed - newDepositSpeed)
389395 let currentDepositReward = currentReserveReward(reserve, actionDeposit)
390396 let currentBorrowReward = currentReserveReward(reserve, actionBorrow)
391397 (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)])
392398 }
393399
394400 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
395401 let $s = size($l)
396402 let $acc0 = nil
397403 func $f0_1 ($a,$i) = if (($i >= $s))
398404 then $a
399405 else fold($a, $l[$i])
400406
401407 func $f0_2 ($a,$i) = if (($i >= $s))
402408 then $a
403409 else throw("List size exceeds 20")
404410
405411 $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)
406412 }
407413
408414
409415
410416 @Callable(i)
411417 func advise () = {
412418 let totalReserves = size(rewardReserves)
413419 func fold (l,index) = if ((index >= totalReserves))
414420 then l
415421 else {
416422 let reserve = rewardReserves[index]
417423 ((((((((l + ", [ ") + "reserveAddress: ") + reserve) + ", depositRewardSpeed: ") + toString(getIntegerValue(this, speedStore(reserve, actionDeposit)))) + ", borrowRewardSpeed: ") + toString(getIntegerValue(this, speedStore(reserve, actionBorrow)))) + " ] ")
418424 }
419425
420426 $Tuple2(nil, {
421427 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
422428 let $s = size($l)
423429 let $acc0 = ""
424430 func $f0_1 ($a,$i) = if (($i >= $s))
425431 then $a
426432 else fold($a, $l[$i])
427433
428434 func $f0_2 ($a,$i) = if (($i >= $s))
429435 then $a
430436 else throw("List size exceeds 20")
431437
432438 $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)
433439 })
434440 }
435441
436442
437443
438444 @Callable(i)
439445 func init (configAddress) = [writeConstString(configStore, configAddress)]
440446
441447
442448
443449 @Callable(i)
444450 func start () = {
445451 let adminStore = "admin"
446452 let admin = addressFromStringValue(getStringValue(config, adminStore))
447453 if ((i.caller != admin))
448454 then throw("only admin can do")
449455 else if (started)
450456 then throw("already started")
451457 else {
452458 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)])
453459
454460 let $l = rewardReserves
455461 let $s = size($l)
456462 let $acc0 = [IntegerEntry(startedKey, HEIGHT)]
457463 func $f0_1 ($a,$i) = if (($i >= $s))
458464 then $a
459465 else fold($a, $l[$i])
460466
461467 func $f0_2 ($a,$i) = if (($i >= $s))
462468 then $a
463469 else throw("List size exceeds 20")
464470
465471 $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)
466472 }
467473 }
468474
469475

github/deemru/w8io/786bc32 
67.87 ms