tx · Bsgt5FKt768dWF81ZyqrmKgYb2ULE46uS3VKPhtSmKDH

3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR:  -0.01000000 Waves

2021.07.18 15:48 [2683837] smart account 3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR > SELF 0.00000000 Waves

{ "type": 13, "id": "Bsgt5FKt768dWF81ZyqrmKgYb2ULE46uS3VKPhtSmKDH", "fee": 1000000, "feeAssetId": null, "timestamp": 1626612446547, "version": 1, "sender": "3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR", "senderPublicKey": "41uiA5UF2zu2zsaRWQJU9G9dt3n9imXQLui4s78uBZK3", "proofs": [ "22sseQkFyiyhCtYrdiLsTUNJ3aG6UBDyPRqD7pAmxfjvuVsD5CPaxkz3tgRdAn26qAcbj9u1oRbcgy8fwf1NjY4P" ], "script": "base64:AAIFAAAAAAAAAHQIAhIAEgMKAQgSABIAEgMKAQESABIICgYICAgICAESAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEBEgASBAoCCAQSABIECgIIARIECgIIARIAEgQKAggBEgUKAwgIARIFCgMICAESAwoBCBIAEgMKAQgSAwoBAQAAAFYBAAAABGdldEkAAAABAAAAA2tleQkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkBAAAABGdldFMAAAABAAAAA2tleQkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkBAAAABWdldFNWAAAAAQAAAANrZXkJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAd0aHJvd0lmAAAAAgAAAAljb25kaXRpb24AAAAFZXJyb3IDBQAAAAljb25kaXRpb24JAAACAAAAAQUAAAAFZXJyb3IGAQAAAAh3cml0ZUludAAAAAIAAAADa2V5AAAABXZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkAAaQAAAABBQAAAAV2YWx1ZQIAAAAJIGZvciBrZXkgBQAAAANrZXkJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAAAhjaGFuZ2VCeQAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAAId3JpdGVJbnQAAAACBQAAAANrZXkJAABkAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAAANrZXkAAAAAAAAAAAAFAAAABXZhbHVlAQAAAAt3cml0ZVN0cmluZwAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAAAxmcmFjdGlvbkNlaWwAAAADAAAABXZhbHVlAAAACW51bWVyYXRvcgAAAAtkZW5vbWluYXRvcgQAAAAEY2FuZAkAAGsAAAADBQAAAAV2YWx1ZQUAAAAJbnVtZXJhdG9yBQAAAAtkZW5vbWluYXRvcgQAAAABRAAAAAAAtQTzMwQAAAAFZXhhY3QJAAAAAAAAAgkAAGoAAAACCQAAaAAAAAIJAABqAAAAAgUAAAAEY2FuZAUAAAABRAkAAGoAAAACBQAAAAtkZW5vbWluYXRvcgUAAAABRAUAAAABRAkAAGoAAAACCQAAaAAAAAIJAABqAAAAAgUAAAAFdmFsdWUFAAAAAUQJAABqAAAAAgUAAAAJbnVtZXJhdG9yBQAAAAFEBQAAAAFEAwUAAAAFZXhhY3QFAAAABGNhbmQJAABkAAAAAgUAAAAEY2FuZAAAAAAAAAAAAQAAAAANQmxvY2tzUGVyWWVhcgAAAAAAAAgFIAAAAAAFUkJhc2UAACOG8m/BAAAAAAAAC2ZhY3RvcnNCYXNlAAAAAAAAAAPoAAAAAAxhc3NldElkU3RvcmUCAAAAB2Fzc2V0SWQAAAAACW1haW5TdG9yZQIAAAAEbWFpbgAAAAAScmVzZXJ2ZUZhY3RvclN0b3JlCQABLAAAAAIJAQAAAAVnZXRTVgAAAAEFAAAADGFzc2V0SWRTdG9yZQIAAAAOX1Jlc2VydmVGYWN0b3IAAAAAFWNvbGxhdGVyYWxGYWN0b3JTdG9yZQkAASwAAAACCQEAAAAFZ2V0U1YAAAABBQAAAAxhc3NldElkU3RvcmUCAAAAEV9Db2xsYXRlcmFsRmFjdG9yAAAAABlsaXF1aWRhdGlvblRocmVzaG9sZFN0b3JlCQABLAAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAADGFzc2V0SWRTdG9yZQIAAAAVX0xpcXVpZGF0aW9uVGhyZXNob2xkAAAAABJvdmVybGFwQ2hhcmdlU3RvcmUCAAAAFmFjY291bnRfaGVhbHRoX292ZXJsYXAAAAAAF2xpcXVpZGF0aW9uUGVuYWx0eVN0b3JlCQABLAAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAADGFzc2V0SWRTdG9yZQIAAAATX0xpcXVpZGF0aW9uUGVuYWx0eQAAAAASY29uZmlnQWRkcmVzc1N0b3JlAgAAAA1jb25maWdBZGRyZXNzAAAAAAtvcmFjbGVTdG9yZQIAAAANb3JhY2xlQWRkcmVzcwAAAAANYVRva2VuSWRTdG9yZQIAAAAIYVRva2VuSWQAAAAAD2FUb2tlbk5hbWVTdG9yZQIAAAAKYVRva2VuTmFtZQAAAAAWYVRva2VuQ2lyY3VsYXRpb25TdG9yZQIAAAARYVRva2VuQ2lyY3VsYXRpb24AAAAAFWxhc3RVcGRhdGVIZWlnaHRTdG9yZQIAAAAQbGFzdFVwZGF0ZUhlaWdodAAAAAAOdG90YWxEZWJ0U3RvcmUCAAAAC3RvdGFsQm9ycm93AAAAABF0b3RhbERlcG9zaXRTdG9yZQIAAAAMdG90YWxEZXBvc2l0AAAAABF0b3RhbFJlc2VydmVTdG9yZQIAAAAMdG90YWxSZXNlcnZlAAAAAAppbmRleFN0b3JlAgAAAAtzdG9yZWRJbmRleAAAAAATYVRva2VuRGVjaW1hbHNTdG9yZQIAAAAOYVRva2VuRGVjaW1hbHMBAAAAEmFUb2tlbkJhbGFuY2VTdG9yZQAAAAEAAAALdXNlckFkZHJlc3MJAAEsAAAAAgUAAAALdXNlckFkZHJlc3MCAAAADl9hVG9rZW5CYWxhbmNlAQAAAAlkZWJ0U3RvcmUAAAABAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIFAAAAC3VzZXJBZGRyZXNzAgAAAAVfZGVidAEAAAAOZGVidEluZGV4U3RvcmUAAAABAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIFAAAAC3VzZXJBZGRyZXNzAgAAAAZfaW5kZXgBAAAAFHVzZUFzQ29sbGF0ZXJhbFN0b3JlAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACBQAAAAt1c2VyQWRkcmVzcwIAAAAQX3VzZUFzQ29sbGF0ZXJhbAAAAAAHYXNzZXRJZAQAAAACaWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldFMAAAABBQAAAAxhc3NldElkU3RvcmUCAAAACm5vIGFzc2V0SWQDCQAAAAAAAAIFAAAAAmlkAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAJpZAAAAAAKYXNzZXRJZFN0cgQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACYnYFAAAAByRtYXRjaDAJAAJYAAAAAQUAAAACYnYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXUFAAAAByRtYXRjaDACAAAABVdBVkVTCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAApnZXRCYWxhbmNlAAAAAgAAAA5hZGRyZXNzT3JBbGlhcwAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJidgUAAAAHJG1hdGNoMAkAA/AAAAACBQAAAA5hZGRyZXNzT3JBbGlhcwUAAAACYnYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXUFAAAAByRtYXRjaDAICQAD7wAAAAEFAAAADmFkZHJlc3NPckFsaWFzAAAACWF2YWlsYWJsZQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgAAAAANYXNzZXREZWNpbWFscwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAE2FUb2tlbkRlY2ltYWxzU3RvcmUCAAAAEG5vIGFzc2V0RGVjaW1hbHMAAAAADWNvbmZpZ0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQUAAAASY29uZmlnQWRkcmVzc1N0b3JlAgAAABBubyBjb25maWdBZGRyZXNzAgAAABZpbnZhbGlkIGNvbmZpZyBhZGRyZXNzAQAAAAlvcEFsbG93ZWQAAAABAAAAAm9wBAAAAANhaWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldFMAAAABBQAAAAxhc3NldElkU3RvcmUCAAAACm5vIGFzc2V0SWQEAAAAByRtYXRjaDAJAAP8AAAABAUAAAANY29uZmlnQWRkcmVzcwIAAAAJb3BBbGxvd2VkCQAETAAAAAIFAAAAA2FpZAkABEwAAAACBQAAAAJvcAUAAAADbmlsBQAAAANuaWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDADBQAAAAFiBgkAAAIAAAABAgAAAAtub3QgYWxsb3dlZAkAAAIAAAABAgAAACFvcEFsbG93ZWQ6IHVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUBAAAACG1haW5Pbmx5AAAAAQAAAAFpAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAACW1haW5TdG9yZQIAAAARbm8gbWFpbiBpbiBjb25maWcCAAAAFGludmFsaWQgbWFpbiBhZGRyZXNzCQAAAgAAAAECAAAAEG9ubHkgbWFpbiBjYW4gZG8GAQAAABBpc0Fzc2V0SWRPcldhdmVzAAAAAQAAAAV2YWx1ZQMDCQEAAAACIT0AAAACBQAAAAV2YWx1ZQIAAAAFV0FWRVMJAAAAAAAAAgkAAlkAAAABBQAAAAV2YWx1ZQkAAlkAAAABAgAAAAAHCQAAAgAAAAECAAAAD2ludmFsaWQgYXNzZXRJZAYAAAAADm5vdEluaXRpYWxpemVkCQEAAAAHdGhyb3dJZgAAAAIJAQAAAAlpc0RlZmluZWQAAAABCQEAAAAEZ2V0UwAAAAEFAAAADGFzc2V0SWRTdG9yZQIAAAATYWxyZWFkeSBpbml0aWFsaXplZAAAAAASbWF5YmVPcmFjbGVBZGRyZXNzBAAAAAckbWF0Y2gwCQEAAAAEZ2V0UwAAAAEFAAAAC29yYWNsZVN0b3JlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAQmAAAAAQUAAAABcwUAAAAEdW5pdAAAAAALb3JhY2xlUHJpY2UEAAAAByRtYXRjaDAJAAP8AAAABAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACBQAAABJtYXliZU9yYWNsZUFkZHJlc3MCAAAACW5vIG9yYWNsZQIAAAAFcHJpY2UJAARMAAAAAgkBAAAABWdldFNWAAAAAQUAAAAMYXNzZXRJZFN0b3JlBQAAAANuaWwFAAAAA25pbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpCQAAAgAAAAECAAAAD2JhZCBvcmFjbGUgZGF0YQAAAAAGSEVJR0hUBQAAAAZoZWlnaHQAAAAAEGxhc3RVcGRhdGVIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldEkAAAABBQAAABVsYXN0VXBkYXRlSGVpZ2h0U3RvcmUCAAAAE25vIGxhc3RVcGRhdGVIZWlnaHQAAAAACGFUb2tlbklkCQACWQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldFMAAAABBQAAAA1hVG9rZW5JZFN0b3JlAgAAAAtubyBhVG9rZW5JZAAAAAARYVRva2VuQ2lyY3VsYXRpb24JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAAWYVRva2VuQ2lyY3VsYXRpb25TdG9yZQAAAAAAAAAAAAAAAAAEQUJDRAQAAAACaWQJAQAAAAVnZXRTVgAAAAEFAAAADGFzc2V0SWRTdG9yZQkABRYAAAAECQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAIFAAAAAmlkAgAAAAdfQVBvaW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAIFAAAAAmlkAgAAAAdfQlBvaW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAIFAAAAAmlkAgAAAAdfQ1BvaW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAIFAAAAAmlkAgAAAAdfRFBvaW50AAAAAA1yZXNlcnZlRmFjdG9yCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAScmVzZXJ2ZUZhY3RvclN0b3JlAgAAABBubyByZXNlcnZlRmFjdG9yAAAAABBjb2xsYXRlcmFsRmFjdG9yCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAVY29sbGF0ZXJhbEZhY3RvclN0b3JlAgAAABNubyBjb2xsYXRlcmFsRmFjdG9yAAAAABRsaXF1aWRhdGlvblRocmVzaG9sZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAGWxpcXVpZGF0aW9uVGhyZXNob2xkU3RvcmUCAAAAF25vIGxpcXVpZGF0aW9uVGhyZXNob2xkAAAAABRhY2NvdW50SGVhbHRoT3ZlcmxhcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAEm92ZXJsYXBDaGFyZ2VTdG9yZQIAAAAQbm8gb3ZlcmxhcENoYXJnZQAAAAASbGlxdWlkYXRpb25QZW5hbHR5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAXbGlxdWlkYXRpb25QZW5hbHR5U3RvcmUCAAAAFW5vIGxpcXVpZGF0aW9uUGVuYWx0eQAAAAASc3RvcmVkVG90YWxEZXBvc2l0CQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAEXRvdGFsRGVwb3NpdFN0b3JlAAAAAAAAAAAAAAAAABJzdG9yZWRUb3RhbFJlc2VydmUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAARdG90YWxSZXNlcnZlU3RvcmUAAAAAAAAAAAAAAAAAD3N0b3JlZFRvdGFsRGVidAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAAA50b3RhbERlYnRTdG9yZQAAAAAAAAAAAAAAAAALc3RvcmVkSW5kZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAAKaW5kZXhTdG9yZQUAAAAFUkJhc2UAAAAAC3V0aWxpemF0aW9uAwkAAGYAAAACBQAAABJzdG9yZWRUb3RhbERlcG9zaXQAAAAAAAAAAAAJAABrAAAAAwUAAAAPc3RvcmVkVG90YWxEZWJ0BQAAAAtmYWN0b3JzQmFzZQUAAAASc3RvcmVkVG90YWxEZXBvc2l0AAAAAAAAAAAAAAAAAANhcHIEAAAACyR0MDU1MzE1NTUxBQAAAARBQkNEBAAAAAFhCAUAAAALJHQwNTUzMTU1NTEAAAACXzEEAAAAAWIIBQAAAAskdDA1NTMxNTU1MQAAAAJfMgQAAAABYwgFAAAACyR0MDU1MzE1NTUxAAAAAl8zBAAAAAFkCAUAAAALJHQwNTUzMTU1NTEAAAACXzQEAAAABmxpbmVBQwkAAGQAAAACCQAAawAAAAMJAABlAAAAAgUAAAABYQUAAAABYwUAAAALdXRpbGl6YXRpb24JAQAAAAEtAAAAAQUAAAABYgUAAAABYQQAAAAGbGluZUNECQAAZAAAAAIJAABrAAAAAwkAAGUAAAACBQAAAAFjBQAAAAFkCQAAZQAAAAIFAAAAC3V0aWxpemF0aW9uBQAAAAFiCQAAZQAAAAIFAAAAAWIFAAAAC2ZhY3RvcnNCYXNlBQAAAAFjAwkAAAAAAAACBQAAAAt1dGlsaXphdGlvbgAAAAAAAAAAAAUAAAABYQMJAAAAAAAAAgUAAAALdXRpbGl6YXRpb24FAAAAAWIFAAAAAWMDAwkAAGYAAAACBQAAAAFiBQAAAAt1dGlsaXphdGlvbgYJAAAAAAAAAgUAAAABYgUAAAALZmFjdG9yc0Jhc2UFAAAABmxpbmVBQwUAAAAGbGluZUNEAAAAAANhcHkDCQAAAAAAAAIFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAAAAAAAAAAAAAAAAAAAAAAAAAkAAGsAAAADCQAAawAAAAMFAAAAD3N0b3JlZFRvdGFsRGVidAUAAAADYXByBQAAABJzdG9yZWRUb3RhbERlcG9zaXQJAABlAAAAAgUAAAALZmFjdG9yc0Jhc2UFAAAADXJlc2VydmVGYWN0b3IFAAAAC2ZhY3RvcnNCYXNlAAAAAAxjdXJyZW50SW5kZXgEAAAAA2JwcgkBAAAADGZyYWN0aW9uQ2VpbAAAAAMFAAAAA2FwcgUAAAAFUkJhc2UJAABoAAAAAgUAAAANQmxvY2tzUGVyWWVhcgUAAAALZmFjdG9yc0Jhc2UJAQAAAAxmcmFjdGlvbkNlaWwAAAADBQAAAAtzdG9yZWRJbmRleAkAAGQAAAACBQAAAAVSQmFzZQkAAGgAAAACBQAAAANicHIJAABlAAAAAgUAAAAGSEVJR0hUBQAAABBsYXN0VXBkYXRlSGVpZ2h0BQAAAAVSQmFzZQEAAAAObGlxdWlkaXR5Q2hlY2sAAAADAAAABmFtb3VudAAAAANtYXgAAAADZXJyAwkAAGYAAAACBQAAAAZhbW91bnQFAAAAA21heAkAAAIAAAABCQABLAAAAAICAAAAFm5vdCBlbm91Z2ggbGlxdWlkaXR5OiAFAAAAA2VycgYBAAAADnN0b3JlZFVzZXJEZWJ0AAAAAQAAAAt1c2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABCQEAAAAJZGVidFN0b3JlAAAAAQUAAAALdXNlckFkZHJlc3MAAAAAAAAAAAABAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEAAAALdXNlckFkZHJlc3MEAAAAAXYJAQAAAA5zdG9yZWRVc2VyRGVidAAAAAEFAAAAC3VzZXJBZGRyZXNzAwkAAAAAAAACBQAAAAF2AAAAAAAAAAAAAAAAAAAAAAAABAAAAA9zdG9yZWRVc2VySW5kZXgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldEkAAAABCQEAAAAOZGVidEluZGV4U3RvcmUAAAABBQAAAAt1c2VyQWRkcmVzcwIAAAAgaGFzIGRlYnQgYnV0IGRvZXMgbm90IGhhdmUgaW5kZXgJAABrAAAAAwUAAAABdgUAAAAMY3VycmVudEluZGV4BQAAAA9zdG9yZWRVc2VySW5kZXgAAAAAEGN1cnJlbnRUb3RhbERlYnQJAABrAAAAAwUAAAAPc3RvcmVkVG90YWxEZWJ0BQAAAAxjdXJyZW50SW5kZXgFAAAAC3N0b3JlZEluZGV4AAAAAAlhZGRlZERlYnQJAABlAAAAAgUAAAAQY3VycmVudFRvdGFsRGVidAUAAAAPc3RvcmVkVG90YWxEZWJ0AAAAAAxhZGRlZERlcG9zaXQJAABrAAAAAwUAAAAJYWRkZWREZWJ0CQAAZQAAAAIFAAAAC2ZhY3RvcnNCYXNlBQAAAA1yZXNlcnZlRmFjdG9yBQAAAAtmYWN0b3JzQmFzZQAAAAATY3VycmVudFRvdGFsRGVwb3NpdAkAAGQAAAACBQAAABJzdG9yZWRUb3RhbERlcG9zaXQFAAAADGFkZGVkRGVwb3NpdAAAAAATY3VycmVudFRvdGFsUmVzZXJ2ZQkAAGUAAAACCQAAZAAAAAIFAAAAEnN0b3JlZFRvdGFsUmVzZXJ2ZQUAAAAJYWRkZWREZWJ0BQAAAAxhZGRlZERlcG9zaXQBAAAADXBheW1lbnRBbW91bnQAAAACAAAAAWkAAAAHYXNzZXRJZAQAAAABcAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AwkAAGcAAAACAAAAAAAAAAAABQAAAAFwCQAAAgAAAAECAAAAJ1BheW1lbnQgaXMgbGVzcyB0aGFuIG1pbiBhbGxvd2VkIGFtb3VudAMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAAB2Fzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAAB1iYWQgYXNzZXQgYXR0YWNoZWQ6IHJlcXVpcmVkIAUAAAAKYXNzZXRJZFN0cgUAAAABcAEAAAAKc3luY1RvdGFscwAAAAQAAAARYWRkaXRpb25hbERlcG9zaXQAAAAOYWRkaXRpb25hbERlYnQAAAARYWRkaXRpb25hbFJlc2VydmUAAAANa2VlcEF0QmFsYW5jZQQAAAANYWN0dWFsQmFsYW5jZQQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAADYWlkBQAAAAckbWF0Y2gwCQAD8AAAAAIFAAAABHRoaXMFAAAAA2FpZAgJAAPvAAAAAQUAAAAEdGhpcwAAAAlhdmFpbGFibGUEAAAADXN0YWtpbmdBY3Rpb24DCQAAAAAAAAIFAAAADWFjdHVhbEJhbGFuY2UFAAAADWtlZXBBdEJhbGFuY2UFAAAABHVuaXQEAAAADnN0YWtpbmdFbmFibGVkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgIAAAAQc3Rha2luZ19lbmFibGVkXwUAAAAKYXNzZXRJZFN0cgcDCQEAAAABIQAAAAEFAAAADnN0YWtpbmdFbmFibGVkBQAAAAR1bml0BAAAAA5zdGFraW5nQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAICAAAAD3N0YWtpbmdfY29uZmlnXwUAAAAKYXNzZXRJZFN0cgkAASwAAAACAgAAABdubyBzdGFraW5nIGFkZHJlc3MgZm9yIAUAAAAKYXNzZXRJZFN0cgkAASwAAAACAgAAABhiYWQgc3Rha2luZyBhZGRyZXNzIGZvciAFAAAACmFzc2V0SWRTdHIDCQAAZgAAAAIFAAAADWFjdHVhbEJhbGFuY2UFAAAADWtlZXBBdEJhbGFuY2UJAAP8AAAABAUAAAAOc3Rha2luZ0FkZHJlc3MCAAAAA3B1dAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAdhc3NldElkCQAAZQAAAAIFAAAADWFjdHVhbEJhbGFuY2UFAAAADWtlZXBBdEJhbGFuY2UFAAAAA25pbAkAA/wAAAAEBQAAAA5zdGFraW5nQWRkcmVzcwIAAAADZ2V0CQAETAAAAAIJAABlAAAAAgUAAAANa2VlcEF0QmFsYW5jZQUAAAANYWN0dWFsQmFsYW5jZQUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAADXN0YWtpbmdBY3Rpb24FAAAADXN0YWtpbmdBY3Rpb24JAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAAKaW5kZXhTdG9yZQUAAAAMY3VycmVudEluZGV4CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAFWxhc3RVcGRhdGVIZWlnaHRTdG9yZQUAAAAGSEVJR0hUCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAEXRvdGFsRGVwb3NpdFN0b3JlCQAAZAAAAAIFAAAAE2N1cnJlbnRUb3RhbERlcG9zaXQFAAAAEWFkZGl0aW9uYWxEZXBvc2l0CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAADnRvdGFsRGVidFN0b3JlCQAAZAAAAAIFAAAAEGN1cnJlbnRUb3RhbERlYnQFAAAADmFkZGl0aW9uYWxEZWJ0CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAEXRvdGFsUmVzZXJ2ZVN0b3JlCQAAZAAAAAIFAAAAE2N1cnJl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dG9yZQAAAAEFAAAABHVzZXIGBAAAABNlZmZlY3RpdmVEZXBvc2l0VXNkAwUAAAAMYXNDb2xsYXRlcmFsBQAAABFjdXJyZW50RGVwb3NpdFVzZAAAAAAAAAAAAAQAAAAKb3ZlcmxhcFVzZAkAAZcAAAABCQAETAAAAAIFAAAADmN1cnJlbnREZWJ0VXNkCQAETAAAAAIFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QFAAAAA25pbAQAAAANb3ZlcmxhcENoYXJnZQkBAAAADGZyYWN0aW9uQ2VpbAAAAAMFAAAACm92ZXJsYXBVc2QFAAAAFGFjY291bnRIZWFsdGhPdmVybGFwBQAAAAtmYWN0b3JzQmFzZQQAAAACYnADCQAAZgAAAAIFAAAADmN1cnJlbnREZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkAAAAAAAAAAAACQAAawAAAAMJAABlAAAAAgUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAAOY3VycmVudERlYnRVc2QFAAAAEGNvbGxhdGVyYWxGYWN0b3IFAAAAC2ZhY3RvcnNCYXNlBAAAAANicHUDCQAAZgAAAAIFAAAADmN1cnJlbnREZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkCQAAZAAAAAIJAABrAAAAAwkAAGUAAAACBQAAAA5jdXJyZW50RGVidFVzZAUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAALZmFjdG9yc0Jhc2UFAAAAFGxpcXVpZGF0aW9uVGhyZXNob2xkBQAAAA1vdmVybGFwQ2hhcmdlBQAAAA1vdmVybGFwQ2hhcmdlBAAAAAhlbnJpY2hlZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAQcmVzZXJ2ZUFkZHJlc3M6IAkABCUAAAABBQAAAAR0aGlzAgAAABIsIGN1cnJlbnREZWJ0VXNkOiAJAAGkAAAAAQUAAAAOY3VycmVudERlYnRVc2QCAAAAFSwgY3VycmVudERlcG9zaXRVc2Q6IAkAAaQAAAABBQAAABFjdXJyZW50RGVwb3NpdFVzZAIAAAAGLCBicDogCQABpAAAAAEFAAAAAmJw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ZGl0eUNoZWNrAAAAAwUAAAAOYW1vdW50VG9Cb3Jyb3cJAABlAAAAAgUAAAASc3RvcmVkVG90YWxEZXBvc2l0BQAAAA9zdG9yZWRUb3RhbERlYnQCAAAAGXRvbyBtdWNoIGJvcnJvdyByZXF1ZXN0ZWQHCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAAGYm9ycm93BwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAAB25ld0RlYnQJAABkAAAAAgkBAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEFAAAAB2FkZHJlc3MFAAAADmFtb3VudFRvQm9ycm93CQAETgAAAAIJAQAAAApzeW5jVG90YWxzAAAABAAAAAAAAAAAAAUAAAAOYW1vdW50VG9Cb3Jyb3cAAAAAAAAAAAAFAAAADmFtb3VudFRvQm9ycm93CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIJAQAAAAlkZWJ0U3RvcmUAAAABBQAAAAdhZGRyZXNzBQAAAAduZXdEZWJ0CQAETAAAAAIJAQAAAAllbmFibGVDb2wAAAABBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIJAQAAAA5kZWJ0SW5kZXhTdG9yZQAAAAEFAAAAB2FkZHJlc3MFAAAADGN1cnJlbnRJbmRleAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhZGRyZXNzBQAAAA5hbW91bnRUb0JvcnJvdwUAAAAHYXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1taW50QXRva2VuRm9yAAAAAgAAAAdhZGRyZXNzAAAADGFtb3VudFRvTWludAQAAAARdXNlckFUb2tlbkJhbGFuY2UJAQAAAA1hVG9rZW5CYWxhbmNlAAAAAQUAAAAHYWRkcmVzcwQAAAAGYW1vdW50AwkAAAAAAAACBQAAAAxhbW91bnRUb01pbnQA//////////8FAAAAEXVzZXJBVG9rZW5CYWxhbmNlBQAAAAxhbW91bnRUb01pbnQEAAAABmNoZWNrcwMDAwkBAAAACG1h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", "chainId": 87, "height": 2683837, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2M3TmHE5cs7hYTV22CDEvt1uYJbEf8GcSqP7wEnyeZmp Next: 68ECs4rvuPvMGEycHYKLjSfJx5MFUjcAkUmUb4Qxg6Kr Diff:
OldNewDifferences
5252
5353 let y = (getStringValue(u) + "_LiquidationThreshold")
5454
55-let z = (getStringValue(u) + "_LiquidationPenalty")
55+let z = "account_health_overlap"
5656
57-let A = "configAddress"
57+let A = (getStringValue(u) + "_LiquidationPenalty")
5858
59-let B = "oracleAddress"
59+let B = "configAddress"
6060
61-let C = "aTokenId"
61+let C = "oracleAddress"
6262
63-let D = "aTokenName"
63+let D = "aTokenId"
6464
65-let E = "aTokenCirculation"
65+let E = "aTokenName"
6666
67-let F = "lastUpdateHeight"
67+let F = "aTokenCirculation"
6868
69-let G = "totalBorrow"
69+let G = "lastUpdateHeight"
7070
71-let H = "totalDeposit"
71+let H = "totalBorrow"
7272
73-let I = "totalReserve"
73+let I = "totalDeposit"
7474
75-let J = "storedIndex"
75+let J = "totalReserve"
7676
77-let K = "aTokenDecimals"
77+let K = "storedIndex"
7878
79-func L (M) = (M + "_aTokenBalance")
79+let L = "aTokenDecimals"
80+
81+func M (N) = (N + "_aTokenBalance")
8082
8183
82-func N (M) = (M + "_debt")
84+func O (N) = (N + "_debt")
8385
8486
85-func O (M) = (M + "_index")
87+func P (N) = (N + "_index")
8688
8789
88-func P (M) = (M + "_useAsCollateral")
90+func Q (N) = (N + "_useAsCollateral")
8991
9092
91-let Q = {
92- let R = valueOrErrorMessage(c(u), "no assetId")
93- if ((R == "WAVES"))
93+let R = {
94+ let S = valueOrErrorMessage(c(u), "no assetId")
95+ if ((S == "WAVES"))
9496 then unit
95- else fromBase58String(R)
97+ else fromBase58String(S)
9698 }
9799
98-let S = {
99- let T = Q
100- if ($isInstanceOf(T, "ByteVector"))
100+let T = {
101+ let U = R
102+ if ($isInstanceOf(U, "ByteVector"))
101103 then {
102- let U = T
103- toBase58String(U)
104+ let V = U
105+ toBase58String(V)
104106 }
105- else if ($isInstanceOf(T, "Unit"))
107+ else if ($isInstanceOf(U, "Unit"))
106108 then {
107- let V = T
109+ let W = U
108110 "WAVES"
109111 }
110112 else throw("Match error")
111113 }
112114
113-func W (X,Q) = {
114- let T = Q
115- if ($isInstanceOf(T, "ByteVector"))
115+func X (Y,R) = {
116+ let U = R
117+ if ($isInstanceOf(U, "ByteVector"))
116118 then {
117- let U = T
118- assetBalance(X, U)
119+ let V = U
120+ assetBalance(Y, V)
119121 }
120- else if ($isInstanceOf(T, "Unit"))
122+ else if ($isInstanceOf(U, "Unit"))
121123 then {
122- let V = T
123- wavesBalance(X).available
124+ let W = U
125+ wavesBalance(Y).available
124126 }
125127 else throw("Match error")
126128 }
127129
128130
129-let Y = valueOrErrorMessage(a(K), "no assetDecimals")
131+let Z = valueOrErrorMessage(a(L), "no assetDecimals")
130132
131-let Z = valueOrErrorMessage(addressFromString(valueOrErrorMessage(c(A), "no configAddress")), "invalid config address")
133+let aa = valueOrErrorMessage(addressFromString(valueOrErrorMessage(c(B), "no configAddress")), "invalid config address")
132134
133-func aa (ab) = {
134- let ac = valueOrErrorMessage(c(u), "no assetId")
135- let T = invoke(Z, "opAllowed", [ac, ab], nil)
136- if ($isInstanceOf(T, "Boolean"))
135+func ab (ac) = {
136+ let ad = valueOrErrorMessage(c(u), "no assetId")
137+ let U = invoke(aa, "opAllowed", [ad, ac], nil)
138+ if ($isInstanceOf(U, "Boolean"))
137139 then {
138- let ad = T
139- if (ad)
140+ let ae = U
141+ if (ae)
140142 then true
141143 else throw("not allowed")
142144 }
144146 }
145147
146148
147-func ae (af) = if ((af.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(Z, v), "no main in config")), "invalid main address")))
149+func af (ag) = if ((ag.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, v), "no main in config")), "invalid main address")))
148150 then throw("only main can do")
149151 else true
150152
151153
152-func ag (i) = if (if ((i != "WAVES"))
154+func ah (i) = if (if ((i != "WAVES"))
153155 then (fromBase58String(i) == fromBase58String(""))
154156 else false)
155157 then throw("invalid assetId")
156158 else true
157159
158160
159-let ah = e(isDefined(c(u)), "already initialized")
161+let ai = e(isDefined(c(u)), "already initialized")
160162
161-let ai = {
162- let T = c(B)
163- if ($isInstanceOf(T, "String"))
163+let aj = {
164+ let U = c(C)
165+ if ($isInstanceOf(U, "String"))
164166 then {
165- let aj = T
166- addressFromString(aj)
167+ let ak = U
168+ addressFromString(ak)
167169 }
168170 else unit
169171 }
170172
171-let ak = {
172- let T = invoke(valueOrErrorMessage(ai, "no oracle"), "price", [d(u)], nil)
173- if ($isInstanceOf(T, "Int"))
173+let al = {
174+ let U = invoke(valueOrErrorMessage(aj, "no oracle"), "price", [d(u)], nil)
175+ if ($isInstanceOf(U, "Int"))
174176 then {
175- let af = T
176- af
177+ let ag = U
178+ ag
177179 }
178180 else throw("bad oracle data")
179181 }
180182
181-let al = height
183+let am = height
182184
183-let am = valueOrErrorMessage(a(F), "no lastUpdateHeight")
185+let an = valueOrErrorMessage(a(G), "no lastUpdateHeight")
184186
185-let an = fromBase58String(valueOrErrorMessage(c(C), "no aTokenId"))
187+let ao = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
186188
187-let ao = valueOrElse(a(E), 0)
189+let ap = valueOrElse(a(F), 0)
188190
189-let ap = {
190- let R = d(u)
191- $Tuple4(getIntegerValue(Z, (R + "_APoint")), getIntegerValue(Z, (R + "_BPoint")), getIntegerValue(Z, (R + "_CPoint")), getIntegerValue(Z, (R + "_DPoint")))
191+let aq = {
192+ let S = d(u)
193+ $Tuple4(getIntegerValue(aa, (S + "_APoint")), getIntegerValue(aa, (S + "_BPoint")), getIntegerValue(aa, (S + "_CPoint")), getIntegerValue(aa, (S + "_DPoint")))
192194 }
193195
194-let aq = valueOrErrorMessage(getInteger(Z, w), "no reserveFactor")
196+let ar = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
195197
196-let ar = valueOrErrorMessage(getInteger(Z, x), "no collateralFactor")
198+let as = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
197199
198-let as = valueOrErrorMessage(getInteger(Z, y), "no liquidationThreshold")
200+let at = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
199201
200-let at = valueOrErrorMessage(getInteger(Z, z), "no liquidationPenalty")
202+let au = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
201203
202-let au = valueOrElse(a(H), 0)
204+let av = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
203205
204-let av = valueOrElse(a(I), 0)
206+let aw = valueOrElse(a(I), 0)
205207
206-let aw = valueOrElse(a(G), 0)
208+let ax = valueOrElse(a(J), 0)
207209
208-let ax = valueOrElse(a(J), s)
210+let ay = valueOrElse(a(H), 0)
209211
210-let ay = if ((au > 0))
211- then fraction(aw, t, au)
212+let az = valueOrElse(a(K), s)
213+
214+let aA = if ((aw > 0))
215+ then fraction(ay, t, aw)
212216 else 0
213217
214-let az = {
215- let aA = ap
216- let aB = aA._1
217- let ad = aA._2
218- let aC = aA._3
219- let aD = aA._4
220- let aE = (fraction((aB - aC), ay, -(ad)) + aB)
221- let aF = (fraction((aC - aD), (ay - ad), (ad - t)) + aC)
222- if ((ay == 0))
223- then aB
224- else if ((ay == ad))
225- then aC
226- else if (if ((ad > ay))
218+let aB = {
219+ let aC = aq
220+ let aD = aC._1
221+ let ae = aC._2
222+ let aE = aC._3
223+ let aF = aC._4
224+ let aG = (fraction((aD - aE), aA, -(ae)) + aD)
225+ let aH = (fraction((aE - aF), (aA - ae), (ae - t)) + aE)
226+ if ((aA == 0))
227+ then aD
228+ else if ((aA == ae))
229+ then aE
230+ else if (if ((ae > aA))
227231 then true
228- else (ad == t))
229- then aE
230- else aF
232+ else (ae == t))
233+ then aG
234+ else aH
231235 }
232236
233-let aG = if ((au == 0))
237+let aI = if ((aw == 0))
234238 then 0
235- else fraction(fraction(aw, az, au), (t - aq), t)
239+ else fraction(fraction(ay, aB, aw), (t - ar), t)
236240
237-let aH = {
238- let aI = l(az, s, (r * t))
239- l(ax, (s + (aI * (al - am))), s)
241+let aJ = {
242+ let aK = l(aB, s, (r * t))
243+ l(az, (s + (aK * (am - an))), s)
240244 }
241245
242-func aJ (aK,aL,aM) = if ((aK > aL))
243- then throw(("not enough liquidity: " + aM))
246+func aL (aM,aN,aO) = if ((aM > aN))
247+ then throw(("not enough liquidity: " + aO))
244248 else true
245249
246250
247-func aN (M) = valueOrElse(a(N(M)), 0)
251+func aP (N) = valueOrElse(a(O(N)), 0)
248252
249253
250-func aO (M) = {
251- let aP = aN(M)
252- if ((aP == 0))
254+func aQ (N) = {
255+ let aR = aP(N)
256+ if ((aR == 0))
253257 then 0
254258 else {
255- let aQ = valueOrErrorMessage(a(O(M)), "has debt but does not have index")
256- fraction(aP, aH, aQ)
259+ let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
260+ fraction(aR, aJ, aS)
257261 }
258262 }
259263
260264
261-let aR = fraction(aw, aH, ax)
265+let aT = fraction(ay, aJ, az)
262266
263-let aS = (aR - aw)
267+let aU = (aT - ay)
264268
265-let aT = fraction(aS, (t - aq), t)
269+let aV = fraction(aU, (t - ar), t)
266270
267-let aU = (au + aT)
271+let aW = (aw + aV)
268272
269-let aV = ((av + aS) - aT)
273+let aX = ((ax + aU) - aV)
270274
271-func aW (af,Q) = {
272- let aX = af.payments[0].amount
273- if ((0 >= aX))
275+func aY (ag,R) = {
276+ let aZ = ag.payments[0].amount
277+ if ((0 >= aZ))
274278 then throw("Payment is less than min allowed amount")
275- else if ((af.payments[0].assetId != Q))
276- then throw(("bad asset attached: required " + S))
277- else aX
279+ else if ((ag.payments[0].assetId != R))
280+ then throw(("bad asset attached: required " + T))
281+ else aZ
278282 }
279283
280284
281-func aY (aZ,ba,bb,bc) = {
282- let bd = {
283- let T = Q
284- if ($isInstanceOf(T, "ByteVector"))
285+func ba (bb,bc,bd,be) = {
286+ let bf = {
287+ let U = R
288+ if ($isInstanceOf(U, "ByteVector"))
285289 then {
286- let ac = T
287- assetBalance(this, ac)
290+ let ad = U
291+ assetBalance(this, ad)
288292 }
289293 else wavesBalance(this).available
290294 }
291- let be = if ((bd == bc))
295+ let bg = if ((bf == be))
292296 then unit
293297 else {
294- let bf = valueOrElse(getBoolean(Z, ("staking_enabled_" + S)), false)
295- if (!(bf))
298+ let bh = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
299+ if (!(bh))
296300 then unit
297301 else {
298- let bg = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(Z, ("staking_config_" + S)), ("no staking address for " + S))), ("bad staking address for " + S))
299- if ((bd > bc))
300- then invoke(bg, "put", nil, [AttachedPayment(Q, (bd - bc))])
301- else invoke(bg, "get", [(bc - bd)], nil)
302+ let bi = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, ("staking_config_" + T)), ("no staking address for " + T))), ("bad staking address for " + T))
303+ if ((bf > be))
304+ then invoke(bi, "put", nil, [AttachedPayment(R, (bf - be))])
305+ else invoke(bi, "get", [(be - bf)], nil)
302306 }
303307 }
304- if ((be == be))
305- then [h(J, aH), h(F, al), h(H, (aU + aZ)), h(G, (aR + ba)), h(I, (aV + bb))]
308+ if ((bg == bg))
309+ then [h(K, aJ), h(G, am), h(I, (aW + bb)), h(H, (aT + bc)), h(J, (aX + bd))]
306310 else throw("Strict value is not equal to itself.")
307311 }
308312
309313
310-func bh (bi) = if ((bi == 6))
314+func bj (bk) = if ((bk == 6))
311315 then 1000000
312- else if ((bi == 8))
316+ else if ((bk == 8))
313317 then 100000000
314- else throw(("bad decimals: " + toString(bi)))
318+ else throw(("bad decimals: " + toString(bk)))
315319
316320
317-func bj (aK) = fraction(aK, ak, bh(Y))
321+func bl (aM) = fraction(aM, al, bj(Z))
318322
319323
320-func bk (aK) = fraction(aK, bh(Y), ak)
321-
322-
323-func bl (bm) = if ((bm == 0))
324- then 0
325- else if ((ao > 0))
326- then fraction(bm, aU, ao)
327- else bm
324+func bm (aM) = fraction(aM, bj(Z), al)
328325
329326
330327 func bn (bo) = if ((bo == 0))
331328 then 0
332- else if ((ao > 0))
333- then fraction(bo, ao, aU)
329+ else if ((ap > 0))
330+ then fraction(bo, aW, ap)
334331 else bo
335332
336333
337-func bp (bo) = if ((bo == 0))
334+func bp (bq) = if ((bq == 0))
338335 then 0
339- else if ((ao > 0))
340- then l(bo, ao, aU)
341- else bo
336+ else if ((ap > 0))
337+ then fraction(bq, ap, aW)
338+ else bq
342339
343340
344-func bq (br) = valueOrElse(a(L(br)), 0)
341+func br (bq) = if ((bq == 0))
342+ then 0
343+ else if ((ap > 0))
344+ then l(bq, ap, aW)
345+ else bq
345346
346347
347-func bs (bt) = BooleanEntry(P(bt), true)
348+func bs (bt) = valueOrElse(a(M(bt)), 0)
348349
349350
350-func bu (bt) = if ((aO(bt) > 0))
351- then [bs(bt)]
351+func bu (bv) = BooleanEntry(Q(bv), true)
352+
353+
354+func bw (bv) = if ((aQ(bv) > 0))
355+ then [bu(bv)]
352356 else nil
353357
354358
355-func bv (br,aK) = {
356- let bw = aO(br)
357- let bx = bl(bq(br))
358- let by = min([bw, bx])
359- let bz = if ((-1 > aK))
359+func bx (bt,aM) = {
360+ let by = aQ(bt)
361+ let bz = bn(bs(bt))
362+ let bA = min([by, bz])
363+ let bB = if ((-1 > aM))
360364 then throw("invalid collapse amount")
361- else if (if ((by == 0))
365+ else if (if ((bA == 0))
362366 then true
363- else (aK == 0))
367+ else (aM == 0))
364368 then throw("nothing to collapse")
365- else if (if ((aK == -1))
369+ else if (if ((aM == -1))
366370 then true
367- else (aK > by))
368- then by
369- else aK
370- let bA = bp(bz)
371- (aY(-(bz), -(bz), 0, 0) ++ [j(L(br), -(bA)), j(E, -(bA)), h(N(br), (bw - bz)), h(O(br), aH)])
371+ else (aM > bA))
372+ then bA
373+ else aM
374+ let bC = br(bB)
375+ (ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)])
372376 }
373377
374378
375-func bB () = {
376- let bC = ap
377- let aB = bC._1
378- let ad = bC._2
379- let aC = bC._3
380- let aD = bC._4
381- ((((((((((((((("ABCD: " + toString(aB)) + ";") + toString(ad)) + ";") + toString(aC)) + ";") + toString(aD)) + ", reserveFactor: ") + toString(aq)) + ", collateralFactor: ") + toString(ar)) + ", liquidationThreshold: ") + toString(as)) + ", liquidationPenalty: ") + toString(at))
379+func bD () = {
380+ let bE = aq
381+ let aD = bE._1
382+ let ae = bE._2
383+ let aE = bE._3
384+ let aF = bE._4
385+ ((((((((((((((("ABCD: " + toString(aD)) + ";") + toString(ae)) + ";") + toString(aE)) + ";") + toString(aF)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
382386 }
383387
384388
385-func bD () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aU)) + ", storedTotalDeposit: ") + toString(au)) + ", currentTotalDebt: ") + toString(aR)) + ", storedTotalDebt: ") + toString(aw)) + ", currentTotalReserve: ") + toString(aV)) + ", storedTotalReserve: ") + toString(av)) + ", currentIndex:") + toString(aH)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", utilization: ") + toString(ay)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bl(pow(10, 0, Y, 0, 0, FLOOR)))) + ", APR: ") + toString(az)) + ", APY: ") + toString(aG))
389+func bF () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aJ)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aI))
386390
387391
388-func bE (bt) = {
389- let bF = bq(bt)
390- let bG = W(addressFromStringValue(bt), an)
391- ((((((((((((((((("currentDebt: " + toString(aO(bt))) + ", storedDebt: ") + toString(valueOrElse(a(N(bt)), 0))) + ", currentDeposit: ") + toString(bl(bF))) + ", aTokenContractBalance: ") + toString(bF)) + ", aTokenWalletBalance: ") + toString(bG)) + ", walletStake: ") + toString(bl(bG))) + ", assetWalletBalance: ") + toString(W(addressFromStringValue(bt), Q))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, P(bt)), true))) + ", storedIndex: ") + toString(valueOrElse(a(O(bt)), 0)))
392+func bG (bv) = {
393+ let bH = bs(bv)
394+ let bI = X(addressFromStringValue(bv), ao)
395+ ((((((((((((((((("currentDebt: " + toString(aQ(bv))) + ", storedDebt: ") + toString(valueOrElse(a(O(bv)), 0))) + ", currentDeposit: ") + toString(bn(bH))) + ", aTokenContractBalance: ") + toString(bH)) + ", aTokenWalletBalance: ") + toString(bI)) + ", walletStake: ") + toString(bn(bI))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bv), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bv)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bv)), 0)))
392396 }
393397
394398
395-func bH () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(au)) + ", storedTotalDebt: ") + toString(aw)) + ", storedTotalReserve: ") + toString(av)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", currentTotalDeposit: ") + toString(aU)) + ", currentTotalDebt: ") + toString(aR)) + ", currentTotalReserve: ") + toString(aV)) + ", currentIndex: ") + toString(aH)) + ", currentHeight: ") + toString(al)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bl(pow(10, 0, Y, 0, 0, FLOOR))))
399+func bJ () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aJ)) + ", currentHeight: ") + toString(am)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR))))
396400
397401
398-@Callable(af)
399-func addInterest () = if ((af.payments[0].assetId != Q))
400- then throw("can't add interest with unrelated token")
401- else aY(af.payments[0].amount, 0, 0, 0)
402+@Callable(ag)
403+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bD()) + ", ") + bF()))
402404
403405
404406
405-@Callable(af)
406-func addToReserve () = if ((af.payments[0].assetId != Q))
407- then throw("can't add interest with unrelated token")
408- else aY(0, 0, af.payments[0].amount, 0)
409-
410-
411-
412-@Callable(af)
413-func withdrawFromReserve (bz) = {
414- let bI = getStringValue(Z, "admin")
415- if ((toString(af.caller) != bI))
416- then throw("only admin can do")
417- else (aY(0, 0, -(bz), bz) ++ [ScriptTransfer(addressFromStringValue(bI), bz, Q)])
407+@Callable(ag)
408+func adviseUser (bv) = {
409+ let bK = bl(aT)
410+ let bL = bl(aW)
411+ let bM = valueOrElse(getBoolean(this, Q(bv)), true)
412+ let bN = if (bM)
413+ then bL
414+ else 0
415+ let bO = min([bK, bN])
416+ let bP = l(bO, au, t)
417+ let bQ = if ((bK > bN))
418+ then 0
419+ else fraction((bN - bK), as, t)
420+ let bR = if ((bK > bN))
421+ then (fraction((bK - bN), t, at) + bP)
422+ else bP
423+ let bS = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(bK)) + ", currentDepositUsd: ") + toString(bL)) + ", bp: ") + toString(bQ)) + ", bpu: ") + toString(bR))
424+ $Tuple2(nil, ((bS + ", ") + bG(bv)))
418425 }
419426
420427
421428
422-@Callable(af)
423-func forceUpdate () = {
424- let bI = getStringValue(Z, "admin")
425- if ((toString(af.caller) != bI))
429+@Callable(ag)
430+func addInterest () = if ((ag.payments[0].assetId != R))
431+ then throw("can't add interest with unrelated token")
432+ else ba(ag.payments[0].amount, 0, 0, 0)
433+
434+
435+
436+@Callable(ag)
437+func addToReserve () = if ((ag.payments[0].assetId != R))
438+ then throw("can't add interest with unrelated token")
439+ else ba(0, 0, ag.payments[0].amount, 0)
440+
441+
442+
443+@Callable(ag)
444+func withdrawFromReserve (bB) = {
445+ let bT = getStringValue(aa, "admin")
446+ if ((toString(ag.caller) != bT))
426447 then throw("only admin can do")
427- else aY(0, 0, 0, 0)
448+ else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(bT), bB, R)])
428449 }
429450
430451
431452
432-@Callable(af)
433-func initialize (bJ,bK,bL,bM,bN,bO) = {
434- let bP = if (ah)
435- then ag(bL)
453+@Callable(ag)
454+func forceUpdate () = {
455+ let bT = getStringValue(aa, "admin")
456+ if ((toString(ag.caller) != bT))
457+ then throw("only admin can do")
458+ else ba(0, 0, 0, 0)
459+ }
460+
461+
462+
463+@Callable(ag)
464+func initialize (bU,bV,bW,bX,bY,bZ) = {
465+ let ca = if (ai)
466+ then ah(bW)
436467 else false
437- if ((bP == bP))
468+ if ((ca == ca))
438469 then {
439- let bQ = Issue(bM, bN, 0, bO, true)
440-[bQ, k(B, bK), h(K, bO), k(D, bM), k(u, bL), k(A, bJ), k(C, toBase58String(calculateAssetId(bQ))), h(F, al)]
470+ let cb = Issue(bX, bY, 0, bZ, true)
471+[cb, k(C, bV), h(L, bZ), k(E, bX), k(u, bW), k(B, bU), k(D, toBase58String(calculateAssetId(cb))), h(G, am)]
441472 }
442473 else throw("Strict value is not equal to itself.")
443474 }
444475
445476
446477
447-@Callable(af)
448-func userDepositUSD (br) = $Tuple2(nil, bj(bl(bq(br))))
478+@Callable(ag)
479+func userDepositUSD (bt) = $Tuple2(nil, bl(bn(bs(bt))))
449480
450481
451482
452-@Callable(af)
453-func userDebtUSD (br) = $Tuple2(nil, bj(aO(br)))
483+@Callable(ag)
484+func userDebtUSD (bt) = $Tuple2(nil, bl(aQ(bt)))
454485
455486
456487
457-@Callable(af)
458-func userBalance (br) = {
459- let bR = bq(br)
460- let bS = bl(bR)
461- let bw = aO(br)
462- $Tuple2(nil, $Tuple6(bR, bS, bj(bS), bw, bj(bw), valueOrElse(getBoolean(this, P(br)), true)))
488+@Callable(ag)
489+func userBalance (bt) = {
490+ let cc = bs(bt)
491+ let cd = bn(cc)
492+ let by = aQ(bt)
493+ $Tuple2(nil, $Tuple6(cc, cd, bl(cd), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
463494 }
464495
465496
466497
467-@Callable(af)
468-func userDebt (br) = {
469- let bw = aO(br)
470- let bT = bj(bw)
471- $Tuple2(nil, $Tuple2(bw, bT))
498+@Callable(ag)
499+func userDebt (bt) = {
500+ let by = aQ(bt)
501+ let ce = bl(by)
502+ $Tuple2(nil, $Tuple2(by, ce))
472503 }
473504
474505
475506
476-@Callable(af)
477-func assetUsdValue (bo) = $Tuple2(nil, bj(bo))
507+@Callable(ag)
508+func assetUsdValue (bq) = $Tuple2(nil, bl(bq))
478509
479510
480511
481-@Callable(af)
512+@Callable(ag)
482513 func repay () = {
483- let bP = aa("repay")
484- if ((bP == bP))
514+ let ca = ab("repay")
515+ if ((ca == ca))
485516 then {
486- let M = toString(af.caller)
487- let aK = aW(af, Q)
488- let bU = aO(M)
489- if ((bU == bU))
517+ let N = toString(ag.caller)
518+ let aM = aY(ag, R)
519+ let cf = aQ(N)
520+ if ((cf == cf))
490521 then {
491- let bV = if ((aK > bU))
492- then $Tuple4(0, -(bU), (aK - bU), [ScriptTransfer(af.caller, (aK - bU), Q)])
493- else $Tuple4((bU - aK), -(aK), 0, nil)
494- let bW = bV._1
495- let bX = bV._2
496- let bY = bV._3
497- let bZ = bV._4
498- ((aY(0, bX, 0, bY) ++ bZ) ++ [h(N(M), bW), h(O(M), aH)])
522+ let cg = if ((aM > cf))
523+ then $Tuple4(0, -(cf), (aM - cf), [ScriptTransfer(ag.caller, (aM - cf), R)])
524+ else $Tuple4((cf - aM), -(aM), 0, nil)
525+ let ch = cg._1
526+ let ci = cg._2
527+ let cj = cg._3
528+ let ck = cg._4
529+ ((ba(0, ci, 0, cj) ++ ck) ++ [h(O(N), ch), h(P(N), aJ)])
499530 }
500531 else throw("Strict value is not equal to itself.")
501532 }
504535
505536
506537
507-@Callable(af)
508-func depositFor (ca,cb) = {
509- let bP = if (ae(af))
510- then aa("deposit")
538+@Callable(ag)
539+func depositFor (cl,cm) = {
540+ let ca = if (af(ag))
541+ then ab("deposit")
511542 else false
512- if ((bP == bP))
513- then if (if ((aO(ca) > 0))
514- then !(cb)
543+ if ((ca == ca))
544+ then if (if ((aQ(cl) > 0))
545+ then !(cm)
515546 else false)
516547 then throw("can't disable use as collateral for asset with open debt")
517548 else {
518- let aK = aW(af, Q)
519- let bm = bn(aK)
520- (aY(aK, 0, 0, 0) ++ [j(E, bm), j(L(ca), bm), BooleanEntry(P(ca), cb)])
549+ let aM = aY(ag, R)
550+ let bo = bp(aM)
551+ (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cl), bo), BooleanEntry(Q(cl), cm)])
521552 }
522553 else throw("Strict value is not equal to itself.")
523554 }
524555
525556
526557
527-@Callable(af)
558+@Callable(ag)
528559 func replenishWithAtoken () = {
529- let bP = aa("atokens")
530- if ((bP == bP))
560+ let ca = ab("atokens")
561+ if ((ca == ca))
531562 then {
532- let bm = aW(af, an)
533- let bt = toString(af.caller)
534- ((aY(0, 0, 0, 0) ++ [j(L(bt), bm), Burn(an, bm)]) ++ bu(bt))
563+ let bo = aY(ag, ao)
564+ let bv = toString(ag.caller)
565+ ((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv))
535566 }
536567 else throw("Strict value is not equal to itself.")
537568 }
538569
539570
540571
541-@Callable(af)
542-func borrowFor (br,cc) = {
543- let bP = if (if (ae(af))
544- then aJ(cc, (au - aw), "too much borrow requested")
572+@Callable(ag)
573+func borrowFor (bt,cn) = {
574+ let ca = if (if (af(ag))
575+ then aL(cn, (aw - ay), "too much borrow requested")
545576 else false)
546- then aa("borrow")
577+ then ab("borrow")
547578 else false
548- if ((bP == bP))
579+ if ((ca == ca))
549580 then {
550- let bW = (aO(br) + cc)
551- (aY(0, cc, 0, cc) ++ [h(N(br), bW), bs(br), h(O(br), aH), ScriptTransfer(addressFromStringValue(br), cc, Q)])
581+ let ch = (aQ(bt) + cn)
582+ (ba(0, cn, 0, cn) ++ [h(O(bt), ch), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cn, R)])
552583 }
553584 else throw("Strict value is not equal to itself.")
554585 }
555586
556587
557588
558-@Callable(af)
559-func mintAtokenFor (br,cd) = {
560- let ce = bq(br)
561- let aK = if ((cd == -1))
562- then ce
563- else cd
564- let bP = if (if (if (ae(af))
565- then aa("atokens")
589+@Callable(ag)
590+func mintAtokenFor (bt,co) = {
591+ let cp = bs(bt)
592+ let aM = if ((co == -1))
593+ then cp
594+ else co
595+ let ca = if (if (if (af(ag))
596+ then ab("atokens")
566597 else false)
567- then e((-1 > cd), "invalid amountToMint")
598+ then e((-1 > co), "invalid amountToMint")
568599 else false)
569- then e((aK > ce), ("Trying to mint more than available, max: " + toString(ce)))
600+ then e((aM > cp), ("Trying to mint more than available, max: " + toString(cp)))
570601 else false
571- if ((bP == bP))
572- then (aY(0, 0, 0, 0) ++ [j(L(br), -(aK)), Reissue(an, aK, true), ScriptTransfer(addressFromStringValue(br), aK, an)])
602+ if ((ca == ca))
603+ then (ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)])
573604 else throw("Strict value is not equal to itself.")
574605 }
575606
576607
577608
578-@Callable(af)
609+@Callable(ag)
579610 func redeemAtokens () = {
580- let bP = aa("atokens")
581- if ((bP == bP))
611+ let ca = ab("atokens")
612+ if ((ca == ca))
582613 then {
583- let bm = aW(af, an)
584- let cf = bl(bm)
585- (aY(-(cf), 0, 0, cf) ++ [ScriptTransfer(af.caller, cf, Q), j(E, -(bm)), Burn(an, bm)])
614+ let bo = aY(ag, ao)
615+ let cq = bn(bo)
616+ (ba(-(cq), 0, 0, cq) ++ [ScriptTransfer(ag.caller, cq, R), j(F, -(bo)), Burn(ao, bo)])
586617 }
587618 else throw("Strict value is not equal to itself.")
588619 }
589620
590621
591622
592-@Callable(af)
593-func withdrawFor (br,aK) = {
594- let cg = ((au + av) - aw)
595- let bP = if (if (if (ae(af))
596- then aJ(aK, cg, "funds in use")
623+@Callable(ag)
624+func withdrawFor (bt,aM) = {
625+ let cr = ((aw + ax) - ay)
626+ let ca = if (if (if (af(ag))
627+ then aL(aM, cr, "funds in use")
597628 else false)
598- then e((-1 > aK), "invalid amount")
629+ then e((-1 > aM), "invalid amount")
599630 else false)
600- then aa("withdraw")
631+ then ab("withdraw")
601632 else false
602- if ((bP == bP))
633+ if ((ca == ca))
603634 then {
604- let ch = if ((aK == -1))
635+ let cs = if ((aM == -1))
605636 then {
606- let bR = bq(br)
607- $Tuple2(bR, bl(bR))
637+ let cc = bs(bt)
638+ $Tuple2(cc, bn(cc))
608639 }
609- else $Tuple2(bp(aK), aK)
610- let bA = ch._1
611- let ci = ch._2
612- (aY(-(ci), 0, 0, ci) ++ [ScriptTransfer(addressFromStringValue(br), ci, Q), j(L(br), -(bA)), j(E, -(bA))])
640+ else $Tuple2(br(aM), aM)
641+ let bC = cs._1
642+ let ct = cs._2
643+ (ba(-(ct), 0, 0, ct) ++ [ScriptTransfer(addressFromStringValue(bt), ct, R), j(M(bt), -(bC)), j(F, -(bC))])
613644 }
614645 else throw("Strict value is not equal to itself.")
615646 }
616647
617648
618649
619-@Callable(af)
620-func transferATokensFor (cj,ck,cl) = {
621- let bP = if (ae(af))
622- then aa("transfer_debt")
650+@Callable(ag)
651+func transferATokensFor (cu,cv,cw) = {
652+ let ca = if (af(ag))
653+ then ab("transfer_debt")
623654 else false
624- if ((bP == bP))
655+ if ((ca == ca))
625656 then {
626- let cm = bk(cl)
627- let bR = bn(cm)
628- let cn = bq(cj)
629- if ((bR > cn))
630- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cl)) + " transfer.assets: ") + toString(cm)) + " transfer.atokens: ") + toString(bR)) + " from.atokens: ") + toString(cn)) + " at ") + toString(this)))
631- else $Tuple2(((aY(0, 0, 0, 0) ++ [j(L(cj), -(bR)), j(L(ck), bR)]) ++ bu(ck)), bl(bR))
657+ let cx = bm(cw)
658+ let cc = bp(cx)
659+ let cy = bs(cu)
660+ if ((cc > cy))
661+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cw)) + " transfer.assets: ") + toString(cx)) + " transfer.atokens: ") + toString(cc)) + " from.atokens: ") + toString(cy)) + " at ") + toString(this)))
662+ else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cu), -(cc)), j(M(cv), cc)]) ++ bw(cv)), bn(cc))
632663 }
633664 else throw("Strict value is not equal to itself.")
634665 }
635666
636667
637668
638-@Callable(af)
639-func transferDebtFor (cj,ck,aK) = {
640- let bP = if (ae(af))
641- then aa("transfer_debt")
669+@Callable(ag)
670+func transferDebtFor (cu,cv,aM) = {
671+ let ca = if (af(ag))
672+ then ab("transfer_debt")
642673 else false
643- if ((bP == bP))
644- then (aY(0, 0, 0, 0) ++ [h(N(cj), (aO(cj) - aK)), h(N(ck), (aO(ck) + aK)), h(O(cj), aH), h(O(ck), aH), bs(ck)])
674+ if ((ca == ca))
675+ then (ba(0, 0, 0, 0) ++ [h(O(cu), (aQ(cu) - aM)), h(O(cv), (aQ(cv) + aM)), h(P(cu), aJ), h(P(cv), aJ), bu(cv)])
645676 else throw("Strict value is not equal to itself.")
646677 }
647678
648679
649680
650-@Callable(af)
651-func disableUseAsCollateralFor (br) = {
652- let bP = if (ae(af))
653- then aa("use_as_col")
681+@Callable(ag)
682+func disableUseAsCollateralFor (bt) = {
683+ let ca = if (af(ag))
684+ then ab("use_as_col")
654685 else false
655- if ((bP == bP))
656- then if ((aO(br) > 0))
686+ if ((ca == ca))
687+ then if ((aQ(bt) > 0))
657688 then throw("can't disable collateral for asset with open debt")
658- else (aY(0, 0, 0, 0) ++ [BooleanEntry(P(br), false)])
689+ else (ba(0, 0, 0, 0) ++ [BooleanEntry(Q(bt), false)])
659690 else throw("Strict value is not equal to itself.")
660691 }
661692
662693
663694
664-@Callable(af)
695+@Callable(ag)
665696 func enableUseAsCollateral () = {
666- let bP = aa("use_as_col")
667- if ((bP == bP))
668- then (aY(0, 0, 0, 0) ++ [bs(toString(af.caller))])
697+ let ca = ab("use_as_col")
698+ if ((ca == ca))
699+ then (ba(0, 0, 0, 0) ++ [bu(toString(ag.caller))])
669700 else throw("Strict value is not equal to itself.")
670701 }
671702
672703
673704
674-@Callable(af)
675-func collapseFor (bt) = {
676- let bP = if (ae(af))
677- then aa("force_collapse")
705+@Callable(ag)
706+func collapseFor (bv) = {
707+ let ca = if (af(ag))
708+ then ab("force_collapse")
678709 else false
679- if ((bP == bP))
680- then bv(bt, -1)
710+ if ((ca == ca))
711+ then bx(bv, -1)
681712 else throw("Strict value is not equal to itself.")
682713 }
683714
684715
685716
686-@Callable(af)
687-func collapseDebt (aK) = {
688- let bP = aa("collapse")
689- if ((bP == bP))
690- then bv(toString(af.caller), aK)
717+@Callable(ag)
718+func collapseDebt (aM) = {
719+ let ca = ab("collapse")
720+ if ((ca == ca))
721+ then bx(toString(ag.caller), aM)
691722 else throw("Strict value is not equal to itself.")
692723 }
693724
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = getInteger(this, b)
55
66
77 func c (b) = getString(this, b)
88
99
1010 func d (b) = value(getString(this, b))
1111
1212
1313 func e (f,g) = if (f)
1414 then throw(g)
1515 else true
1616
1717
1818 func h (b,i) = if ((0 > i))
1919 then throw(((("writing negative value " + toString(i)) + " for key ") + b))
2020 else IntegerEntry(b, i)
2121
2222
2323 func j (b,i) = h(b, (valueOrElse(a(b), 0) + i))
2424
2525
2626 func k (b,i) = StringEntry(b, i)
2727
2828
2929 func l (i,m,n) = {
3030 let o = fraction(i, m, n)
3131 let p = 3037000499
3232 let q = ((((o % p) * (n % p)) % p) == (((i % p) * (m % p)) % p))
3333 if (q)
3434 then o
3535 else (o + 1)
3636 }
3737
3838
3939 let r = 525600
4040
4141 let s = 10000000000000000
4242
4343 let t = 1000
4444
4545 let u = "assetId"
4646
4747 let v = "main"
4848
4949 let w = (d(u) + "_ReserveFactor")
5050
5151 let x = (d(u) + "_CollateralFactor")
5252
5353 let y = (getStringValue(u) + "_LiquidationThreshold")
5454
55-let z = (getStringValue(u) + "_LiquidationPenalty")
55+let z = "account_health_overlap"
5656
57-let A = "configAddress"
57+let A = (getStringValue(u) + "_LiquidationPenalty")
5858
59-let B = "oracleAddress"
59+let B = "configAddress"
6060
61-let C = "aTokenId"
61+let C = "oracleAddress"
6262
63-let D = "aTokenName"
63+let D = "aTokenId"
6464
65-let E = "aTokenCirculation"
65+let E = "aTokenName"
6666
67-let F = "lastUpdateHeight"
67+let F = "aTokenCirculation"
6868
69-let G = "totalBorrow"
69+let G = "lastUpdateHeight"
7070
71-let H = "totalDeposit"
71+let H = "totalBorrow"
7272
73-let I = "totalReserve"
73+let I = "totalDeposit"
7474
75-let J = "storedIndex"
75+let J = "totalReserve"
7676
77-let K = "aTokenDecimals"
77+let K = "storedIndex"
7878
79-func L (M) = (M + "_aTokenBalance")
79+let L = "aTokenDecimals"
80+
81+func M (N) = (N + "_aTokenBalance")
8082
8183
82-func N (M) = (M + "_debt")
84+func O (N) = (N + "_debt")
8385
8486
85-func O (M) = (M + "_index")
87+func P (N) = (N + "_index")
8688
8789
88-func P (M) = (M + "_useAsCollateral")
90+func Q (N) = (N + "_useAsCollateral")
8991
9092
91-let Q = {
92- let R = valueOrErrorMessage(c(u), "no assetId")
93- if ((R == "WAVES"))
93+let R = {
94+ let S = valueOrErrorMessage(c(u), "no assetId")
95+ if ((S == "WAVES"))
9496 then unit
95- else fromBase58String(R)
97+ else fromBase58String(S)
9698 }
9799
98-let S = {
99- let T = Q
100- if ($isInstanceOf(T, "ByteVector"))
100+let T = {
101+ let U = R
102+ if ($isInstanceOf(U, "ByteVector"))
101103 then {
102- let U = T
103- toBase58String(U)
104+ let V = U
105+ toBase58String(V)
104106 }
105- else if ($isInstanceOf(T, "Unit"))
107+ else if ($isInstanceOf(U, "Unit"))
106108 then {
107- let V = T
109+ let W = U
108110 "WAVES"
109111 }
110112 else throw("Match error")
111113 }
112114
113-func W (X,Q) = {
114- let T = Q
115- if ($isInstanceOf(T, "ByteVector"))
115+func X (Y,R) = {
116+ let U = R
117+ if ($isInstanceOf(U, "ByteVector"))
116118 then {
117- let U = T
118- assetBalance(X, U)
119+ let V = U
120+ assetBalance(Y, V)
119121 }
120- else if ($isInstanceOf(T, "Unit"))
122+ else if ($isInstanceOf(U, "Unit"))
121123 then {
122- let V = T
123- wavesBalance(X).available
124+ let W = U
125+ wavesBalance(Y).available
124126 }
125127 else throw("Match error")
126128 }
127129
128130
129-let Y = valueOrErrorMessage(a(K), "no assetDecimals")
131+let Z = valueOrErrorMessage(a(L), "no assetDecimals")
130132
131-let Z = valueOrErrorMessage(addressFromString(valueOrErrorMessage(c(A), "no configAddress")), "invalid config address")
133+let aa = valueOrErrorMessage(addressFromString(valueOrErrorMessage(c(B), "no configAddress")), "invalid config address")
132134
133-func aa (ab) = {
134- let ac = valueOrErrorMessage(c(u), "no assetId")
135- let T = invoke(Z, "opAllowed", [ac, ab], nil)
136- if ($isInstanceOf(T, "Boolean"))
135+func ab (ac) = {
136+ let ad = valueOrErrorMessage(c(u), "no assetId")
137+ let U = invoke(aa, "opAllowed", [ad, ac], nil)
138+ if ($isInstanceOf(U, "Boolean"))
137139 then {
138- let ad = T
139- if (ad)
140+ let ae = U
141+ if (ae)
140142 then true
141143 else throw("not allowed")
142144 }
143145 else throw("opAllowed: unexpected result type")
144146 }
145147
146148
147-func ae (af) = if ((af.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(Z, v), "no main in config")), "invalid main address")))
149+func af (ag) = if ((ag.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, v), "no main in config")), "invalid main address")))
148150 then throw("only main can do")
149151 else true
150152
151153
152-func ag (i) = if (if ((i != "WAVES"))
154+func ah (i) = if (if ((i != "WAVES"))
153155 then (fromBase58String(i) == fromBase58String(""))
154156 else false)
155157 then throw("invalid assetId")
156158 else true
157159
158160
159-let ah = e(isDefined(c(u)), "already initialized")
161+let ai = e(isDefined(c(u)), "already initialized")
160162
161-let ai = {
162- let T = c(B)
163- if ($isInstanceOf(T, "String"))
163+let aj = {
164+ let U = c(C)
165+ if ($isInstanceOf(U, "String"))
164166 then {
165- let aj = T
166- addressFromString(aj)
167+ let ak = U
168+ addressFromString(ak)
167169 }
168170 else unit
169171 }
170172
171-let ak = {
172- let T = invoke(valueOrErrorMessage(ai, "no oracle"), "price", [d(u)], nil)
173- if ($isInstanceOf(T, "Int"))
173+let al = {
174+ let U = invoke(valueOrErrorMessage(aj, "no oracle"), "price", [d(u)], nil)
175+ if ($isInstanceOf(U, "Int"))
174176 then {
175- let af = T
176- af
177+ let ag = U
178+ ag
177179 }
178180 else throw("bad oracle data")
179181 }
180182
181-let al = height
183+let am = height
182184
183-let am = valueOrErrorMessage(a(F), "no lastUpdateHeight")
185+let an = valueOrErrorMessage(a(G), "no lastUpdateHeight")
184186
185-let an = fromBase58String(valueOrErrorMessage(c(C), "no aTokenId"))
187+let ao = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
186188
187-let ao = valueOrElse(a(E), 0)
189+let ap = valueOrElse(a(F), 0)
188190
189-let ap = {
190- let R = d(u)
191- $Tuple4(getIntegerValue(Z, (R + "_APoint")), getIntegerValue(Z, (R + "_BPoint")), getIntegerValue(Z, (R + "_CPoint")), getIntegerValue(Z, (R + "_DPoint")))
191+let aq = {
192+ let S = d(u)
193+ $Tuple4(getIntegerValue(aa, (S + "_APoint")), getIntegerValue(aa, (S + "_BPoint")), getIntegerValue(aa, (S + "_CPoint")), getIntegerValue(aa, (S + "_DPoint")))
192194 }
193195
194-let aq = valueOrErrorMessage(getInteger(Z, w), "no reserveFactor")
196+let ar = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
195197
196-let ar = valueOrErrorMessage(getInteger(Z, x), "no collateralFactor")
198+let as = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
197199
198-let as = valueOrErrorMessage(getInteger(Z, y), "no liquidationThreshold")
200+let at = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
199201
200-let at = valueOrErrorMessage(getInteger(Z, z), "no liquidationPenalty")
202+let au = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
201203
202-let au = valueOrElse(a(H), 0)
204+let av = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
203205
204-let av = valueOrElse(a(I), 0)
206+let aw = valueOrElse(a(I), 0)
205207
206-let aw = valueOrElse(a(G), 0)
208+let ax = valueOrElse(a(J), 0)
207209
208-let ax = valueOrElse(a(J), s)
210+let ay = valueOrElse(a(H), 0)
209211
210-let ay = if ((au > 0))
211- then fraction(aw, t, au)
212+let az = valueOrElse(a(K), s)
213+
214+let aA = if ((aw > 0))
215+ then fraction(ay, t, aw)
212216 else 0
213217
214-let az = {
215- let aA = ap
216- let aB = aA._1
217- let ad = aA._2
218- let aC = aA._3
219- let aD = aA._4
220- let aE = (fraction((aB - aC), ay, -(ad)) + aB)
221- let aF = (fraction((aC - aD), (ay - ad), (ad - t)) + aC)
222- if ((ay == 0))
223- then aB
224- else if ((ay == ad))
225- then aC
226- else if (if ((ad > ay))
218+let aB = {
219+ let aC = aq
220+ let aD = aC._1
221+ let ae = aC._2
222+ let aE = aC._3
223+ let aF = aC._4
224+ let aG = (fraction((aD - aE), aA, -(ae)) + aD)
225+ let aH = (fraction((aE - aF), (aA - ae), (ae - t)) + aE)
226+ if ((aA == 0))
227+ then aD
228+ else if ((aA == ae))
229+ then aE
230+ else if (if ((ae > aA))
227231 then true
228- else (ad == t))
229- then aE
230- else aF
232+ else (ae == t))
233+ then aG
234+ else aH
231235 }
232236
233-let aG = if ((au == 0))
237+let aI = if ((aw == 0))
234238 then 0
235- else fraction(fraction(aw, az, au), (t - aq), t)
239+ else fraction(fraction(ay, aB, aw), (t - ar), t)
236240
237-let aH = {
238- let aI = l(az, s, (r * t))
239- l(ax, (s + (aI * (al - am))), s)
241+let aJ = {
242+ let aK = l(aB, s, (r * t))
243+ l(az, (s + (aK * (am - an))), s)
240244 }
241245
242-func aJ (aK,aL,aM) = if ((aK > aL))
243- then throw(("not enough liquidity: " + aM))
246+func aL (aM,aN,aO) = if ((aM > aN))
247+ then throw(("not enough liquidity: " + aO))
244248 else true
245249
246250
247-func aN (M) = valueOrElse(a(N(M)), 0)
251+func aP (N) = valueOrElse(a(O(N)), 0)
248252
249253
250-func aO (M) = {
251- let aP = aN(M)
252- if ((aP == 0))
254+func aQ (N) = {
255+ let aR = aP(N)
256+ if ((aR == 0))
253257 then 0
254258 else {
255- let aQ = valueOrErrorMessage(a(O(M)), "has debt but does not have index")
256- fraction(aP, aH, aQ)
259+ let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
260+ fraction(aR, aJ, aS)
257261 }
258262 }
259263
260264
261-let aR = fraction(aw, aH, ax)
265+let aT = fraction(ay, aJ, az)
262266
263-let aS = (aR - aw)
267+let aU = (aT - ay)
264268
265-let aT = fraction(aS, (t - aq), t)
269+let aV = fraction(aU, (t - ar), t)
266270
267-let aU = (au + aT)
271+let aW = (aw + aV)
268272
269-let aV = ((av + aS) - aT)
273+let aX = ((ax + aU) - aV)
270274
271-func aW (af,Q) = {
272- let aX = af.payments[0].amount
273- if ((0 >= aX))
275+func aY (ag,R) = {
276+ let aZ = ag.payments[0].amount
277+ if ((0 >= aZ))
274278 then throw("Payment is less than min allowed amount")
275- else if ((af.payments[0].assetId != Q))
276- then throw(("bad asset attached: required " + S))
277- else aX
279+ else if ((ag.payments[0].assetId != R))
280+ then throw(("bad asset attached: required " + T))
281+ else aZ
278282 }
279283
280284
281-func aY (aZ,ba,bb,bc) = {
282- let bd = {
283- let T = Q
284- if ($isInstanceOf(T, "ByteVector"))
285+func ba (bb,bc,bd,be) = {
286+ let bf = {
287+ let U = R
288+ if ($isInstanceOf(U, "ByteVector"))
285289 then {
286- let ac = T
287- assetBalance(this, ac)
290+ let ad = U
291+ assetBalance(this, ad)
288292 }
289293 else wavesBalance(this).available
290294 }
291- let be = if ((bd == bc))
295+ let bg = if ((bf == be))
292296 then unit
293297 else {
294- let bf = valueOrElse(getBoolean(Z, ("staking_enabled_" + S)), false)
295- if (!(bf))
298+ let bh = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
299+ if (!(bh))
296300 then unit
297301 else {
298- let bg = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(Z, ("staking_config_" + S)), ("no staking address for " + S))), ("bad staking address for " + S))
299- if ((bd > bc))
300- then invoke(bg, "put", nil, [AttachedPayment(Q, (bd - bc))])
301- else invoke(bg, "get", [(bc - bd)], nil)
302+ let bi = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, ("staking_config_" + T)), ("no staking address for " + T))), ("bad staking address for " + T))
303+ if ((bf > be))
304+ then invoke(bi, "put", nil, [AttachedPayment(R, (bf - be))])
305+ else invoke(bi, "get", [(be - bf)], nil)
302306 }
303307 }
304- if ((be == be))
305- then [h(J, aH), h(F, al), h(H, (aU + aZ)), h(G, (aR + ba)), h(I, (aV + bb))]
308+ if ((bg == bg))
309+ then [h(K, aJ), h(G, am), h(I, (aW + bb)), h(H, (aT + bc)), h(J, (aX + bd))]
306310 else throw("Strict value is not equal to itself.")
307311 }
308312
309313
310-func bh (bi) = if ((bi == 6))
314+func bj (bk) = if ((bk == 6))
311315 then 1000000
312- else if ((bi == 8))
316+ else if ((bk == 8))
313317 then 100000000
314- else throw(("bad decimals: " + toString(bi)))
318+ else throw(("bad decimals: " + toString(bk)))
315319
316320
317-func bj (aK) = fraction(aK, ak, bh(Y))
321+func bl (aM) = fraction(aM, al, bj(Z))
318322
319323
320-func bk (aK) = fraction(aK, bh(Y), ak)
321-
322-
323-func bl (bm) = if ((bm == 0))
324- then 0
325- else if ((ao > 0))
326- then fraction(bm, aU, ao)
327- else bm
324+func bm (aM) = fraction(aM, bj(Z), al)
328325
329326
330327 func bn (bo) = if ((bo == 0))
331328 then 0
332- else if ((ao > 0))
333- then fraction(bo, ao, aU)
329+ else if ((ap > 0))
330+ then fraction(bo, aW, ap)
334331 else bo
335332
336333
337-func bp (bo) = if ((bo == 0))
334+func bp (bq) = if ((bq == 0))
338335 then 0
339- else if ((ao > 0))
340- then l(bo, ao, aU)
341- else bo
336+ else if ((ap > 0))
337+ then fraction(bq, ap, aW)
338+ else bq
342339
343340
344-func bq (br) = valueOrElse(a(L(br)), 0)
341+func br (bq) = if ((bq == 0))
342+ then 0
343+ else if ((ap > 0))
344+ then l(bq, ap, aW)
345+ else bq
345346
346347
347-func bs (bt) = BooleanEntry(P(bt), true)
348+func bs (bt) = valueOrElse(a(M(bt)), 0)
348349
349350
350-func bu (bt) = if ((aO(bt) > 0))
351- then [bs(bt)]
351+func bu (bv) = BooleanEntry(Q(bv), true)
352+
353+
354+func bw (bv) = if ((aQ(bv) > 0))
355+ then [bu(bv)]
352356 else nil
353357
354358
355-func bv (br,aK) = {
356- let bw = aO(br)
357- let bx = bl(bq(br))
358- let by = min([bw, bx])
359- let bz = if ((-1 > aK))
359+func bx (bt,aM) = {
360+ let by = aQ(bt)
361+ let bz = bn(bs(bt))
362+ let bA = min([by, bz])
363+ let bB = if ((-1 > aM))
360364 then throw("invalid collapse amount")
361- else if (if ((by == 0))
365+ else if (if ((bA == 0))
362366 then true
363- else (aK == 0))
367+ else (aM == 0))
364368 then throw("nothing to collapse")
365- else if (if ((aK == -1))
369+ else if (if ((aM == -1))
366370 then true
367- else (aK > by))
368- then by
369- else aK
370- let bA = bp(bz)
371- (aY(-(bz), -(bz), 0, 0) ++ [j(L(br), -(bA)), j(E, -(bA)), h(N(br), (bw - bz)), h(O(br), aH)])
371+ else (aM > bA))
372+ then bA
373+ else aM
374+ let bC = br(bB)
375+ (ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)])
372376 }
373377
374378
375-func bB () = {
376- let bC = ap
377- let aB = bC._1
378- let ad = bC._2
379- let aC = bC._3
380- let aD = bC._4
381- ((((((((((((((("ABCD: " + toString(aB)) + ";") + toString(ad)) + ";") + toString(aC)) + ";") + toString(aD)) + ", reserveFactor: ") + toString(aq)) + ", collateralFactor: ") + toString(ar)) + ", liquidationThreshold: ") + toString(as)) + ", liquidationPenalty: ") + toString(at))
379+func bD () = {
380+ let bE = aq
381+ let aD = bE._1
382+ let ae = bE._2
383+ let aE = bE._3
384+ let aF = bE._4
385+ ((((((((((((((("ABCD: " + toString(aD)) + ";") + toString(ae)) + ";") + toString(aE)) + ";") + toString(aF)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
382386 }
383387
384388
385-func bD () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aU)) + ", storedTotalDeposit: ") + toString(au)) + ", currentTotalDebt: ") + toString(aR)) + ", storedTotalDebt: ") + toString(aw)) + ", currentTotalReserve: ") + toString(aV)) + ", storedTotalReserve: ") + toString(av)) + ", currentIndex:") + toString(aH)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", utilization: ") + toString(ay)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bl(pow(10, 0, Y, 0, 0, FLOOR)))) + ", APR: ") + toString(az)) + ", APY: ") + toString(aG))
389+func bF () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aJ)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aI))
386390
387391
388-func bE (bt) = {
389- let bF = bq(bt)
390- let bG = W(addressFromStringValue(bt), an)
391- ((((((((((((((((("currentDebt: " + toString(aO(bt))) + ", storedDebt: ") + toString(valueOrElse(a(N(bt)), 0))) + ", currentDeposit: ") + toString(bl(bF))) + ", aTokenContractBalance: ") + toString(bF)) + ", aTokenWalletBalance: ") + toString(bG)) + ", walletStake: ") + toString(bl(bG))) + ", assetWalletBalance: ") + toString(W(addressFromStringValue(bt), Q))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, P(bt)), true))) + ", storedIndex: ") + toString(valueOrElse(a(O(bt)), 0)))
392+func bG (bv) = {
393+ let bH = bs(bv)
394+ let bI = X(addressFromStringValue(bv), ao)
395+ ((((((((((((((((("currentDebt: " + toString(aQ(bv))) + ", storedDebt: ") + toString(valueOrElse(a(O(bv)), 0))) + ", currentDeposit: ") + toString(bn(bH))) + ", aTokenContractBalance: ") + toString(bH)) + ", aTokenWalletBalance: ") + toString(bI)) + ", walletStake: ") + toString(bn(bI))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bv), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bv)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bv)), 0)))
392396 }
393397
394398
395-func bH () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(au)) + ", storedTotalDebt: ") + toString(aw)) + ", storedTotalReserve: ") + toString(av)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", currentTotalDeposit: ") + toString(aU)) + ", currentTotalDebt: ") + toString(aR)) + ", currentTotalReserve: ") + toString(aV)) + ", currentIndex: ") + toString(aH)) + ", currentHeight: ") + toString(al)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bl(pow(10, 0, Y, 0, 0, FLOOR))))
399+func bJ () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aJ)) + ", currentHeight: ") + toString(am)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR))))
396400
397401
398-@Callable(af)
399-func addInterest () = if ((af.payments[0].assetId != Q))
400- then throw("can't add interest with unrelated token")
401- else aY(af.payments[0].amount, 0, 0, 0)
402+@Callable(ag)
403+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bD()) + ", ") + bF()))
402404
403405
404406
405-@Callable(af)
406-func addToReserve () = if ((af.payments[0].assetId != Q))
407- then throw("can't add interest with unrelated token")
408- else aY(0, 0, af.payments[0].amount, 0)
409-
410-
411-
412-@Callable(af)
413-func withdrawFromReserve (bz) = {
414- let bI = getStringValue(Z, "admin")
415- if ((toString(af.caller) != bI))
416- then throw("only admin can do")
417- else (aY(0, 0, -(bz), bz) ++ [ScriptTransfer(addressFromStringValue(bI), bz, Q)])
407+@Callable(ag)
408+func adviseUser (bv) = {
409+ let bK = bl(aT)
410+ let bL = bl(aW)
411+ let bM = valueOrElse(getBoolean(this, Q(bv)), true)
412+ let bN = if (bM)
413+ then bL
414+ else 0
415+ let bO = min([bK, bN])
416+ let bP = l(bO, au, t)
417+ let bQ = if ((bK > bN))
418+ then 0
419+ else fraction((bN - bK), as, t)
420+ let bR = if ((bK > bN))
421+ then (fraction((bK - bN), t, at) + bP)
422+ else bP
423+ let bS = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(bK)) + ", currentDepositUsd: ") + toString(bL)) + ", bp: ") + toString(bQ)) + ", bpu: ") + toString(bR))
424+ $Tuple2(nil, ((bS + ", ") + bG(bv)))
418425 }
419426
420427
421428
422-@Callable(af)
423-func forceUpdate () = {
424- let bI = getStringValue(Z, "admin")
425- if ((toString(af.caller) != bI))
429+@Callable(ag)
430+func addInterest () = if ((ag.payments[0].assetId != R))
431+ then throw("can't add interest with unrelated token")
432+ else ba(ag.payments[0].amount, 0, 0, 0)
433+
434+
435+
436+@Callable(ag)
437+func addToReserve () = if ((ag.payments[0].assetId != R))
438+ then throw("can't add interest with unrelated token")
439+ else ba(0, 0, ag.payments[0].amount, 0)
440+
441+
442+
443+@Callable(ag)
444+func withdrawFromReserve (bB) = {
445+ let bT = getStringValue(aa, "admin")
446+ if ((toString(ag.caller) != bT))
426447 then throw("only admin can do")
427- else aY(0, 0, 0, 0)
448+ else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(bT), bB, R)])
428449 }
429450
430451
431452
432-@Callable(af)
433-func initialize (bJ,bK,bL,bM,bN,bO) = {
434- let bP = if (ah)
435- then ag(bL)
453+@Callable(ag)
454+func forceUpdate () = {
455+ let bT = getStringValue(aa, "admin")
456+ if ((toString(ag.caller) != bT))
457+ then throw("only admin can do")
458+ else ba(0, 0, 0, 0)
459+ }
460+
461+
462+
463+@Callable(ag)
464+func initialize (bU,bV,bW,bX,bY,bZ) = {
465+ let ca = if (ai)
466+ then ah(bW)
436467 else false
437- if ((bP == bP))
468+ if ((ca == ca))
438469 then {
439- let bQ = Issue(bM, bN, 0, bO, true)
440-[bQ, k(B, bK), h(K, bO), k(D, bM), k(u, bL), k(A, bJ), k(C, toBase58String(calculateAssetId(bQ))), h(F, al)]
470+ let cb = Issue(bX, bY, 0, bZ, true)
471+[cb, k(C, bV), h(L, bZ), k(E, bX), k(u, bW), k(B, bU), k(D, toBase58String(calculateAssetId(cb))), h(G, am)]
441472 }
442473 else throw("Strict value is not equal to itself.")
443474 }
444475
445476
446477
447-@Callable(af)
448-func userDepositUSD (br) = $Tuple2(nil, bj(bl(bq(br))))
478+@Callable(ag)
479+func userDepositUSD (bt) = $Tuple2(nil, bl(bn(bs(bt))))
449480
450481
451482
452-@Callable(af)
453-func userDebtUSD (br) = $Tuple2(nil, bj(aO(br)))
483+@Callable(ag)
484+func userDebtUSD (bt) = $Tuple2(nil, bl(aQ(bt)))
454485
455486
456487
457-@Callable(af)
458-func userBalance (br) = {
459- let bR = bq(br)
460- let bS = bl(bR)
461- let bw = aO(br)
462- $Tuple2(nil, $Tuple6(bR, bS, bj(bS), bw, bj(bw), valueOrElse(getBoolean(this, P(br)), true)))
488+@Callable(ag)
489+func userBalance (bt) = {
490+ let cc = bs(bt)
491+ let cd = bn(cc)
492+ let by = aQ(bt)
493+ $Tuple2(nil, $Tuple6(cc, cd, bl(cd), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
463494 }
464495
465496
466497
467-@Callable(af)
468-func userDebt (br) = {
469- let bw = aO(br)
470- let bT = bj(bw)
471- $Tuple2(nil, $Tuple2(bw, bT))
498+@Callable(ag)
499+func userDebt (bt) = {
500+ let by = aQ(bt)
501+ let ce = bl(by)
502+ $Tuple2(nil, $Tuple2(by, ce))
472503 }
473504
474505
475506
476-@Callable(af)
477-func assetUsdValue (bo) = $Tuple2(nil, bj(bo))
507+@Callable(ag)
508+func assetUsdValue (bq) = $Tuple2(nil, bl(bq))
478509
479510
480511
481-@Callable(af)
512+@Callable(ag)
482513 func repay () = {
483- let bP = aa("repay")
484- if ((bP == bP))
514+ let ca = ab("repay")
515+ if ((ca == ca))
485516 then {
486- let M = toString(af.caller)
487- let aK = aW(af, Q)
488- let bU = aO(M)
489- if ((bU == bU))
517+ let N = toString(ag.caller)
518+ let aM = aY(ag, R)
519+ let cf = aQ(N)
520+ if ((cf == cf))
490521 then {
491- let bV = if ((aK > bU))
492- then $Tuple4(0, -(bU), (aK - bU), [ScriptTransfer(af.caller, (aK - bU), Q)])
493- else $Tuple4((bU - aK), -(aK), 0, nil)
494- let bW = bV._1
495- let bX = bV._2
496- let bY = bV._3
497- let bZ = bV._4
498- ((aY(0, bX, 0, bY) ++ bZ) ++ [h(N(M), bW), h(O(M), aH)])
522+ let cg = if ((aM > cf))
523+ then $Tuple4(0, -(cf), (aM - cf), [ScriptTransfer(ag.caller, (aM - cf), R)])
524+ else $Tuple4((cf - aM), -(aM), 0, nil)
525+ let ch = cg._1
526+ let ci = cg._2
527+ let cj = cg._3
528+ let ck = cg._4
529+ ((ba(0, ci, 0, cj) ++ ck) ++ [h(O(N), ch), h(P(N), aJ)])
499530 }
500531 else throw("Strict value is not equal to itself.")
501532 }
502533 else throw("Strict value is not equal to itself.")
503534 }
504535
505536
506537
507-@Callable(af)
508-func depositFor (ca,cb) = {
509- let bP = if (ae(af))
510- then aa("deposit")
538+@Callable(ag)
539+func depositFor (cl,cm) = {
540+ let ca = if (af(ag))
541+ then ab("deposit")
511542 else false
512- if ((bP == bP))
513- then if (if ((aO(ca) > 0))
514- then !(cb)
543+ if ((ca == ca))
544+ then if (if ((aQ(cl) > 0))
545+ then !(cm)
515546 else false)
516547 then throw("can't disable use as collateral for asset with open debt")
517548 else {
518- let aK = aW(af, Q)
519- let bm = bn(aK)
520- (aY(aK, 0, 0, 0) ++ [j(E, bm), j(L(ca), bm), BooleanEntry(P(ca), cb)])
549+ let aM = aY(ag, R)
550+ let bo = bp(aM)
551+ (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cl), bo), BooleanEntry(Q(cl), cm)])
521552 }
522553 else throw("Strict value is not equal to itself.")
523554 }
524555
525556
526557
527-@Callable(af)
558+@Callable(ag)
528559 func replenishWithAtoken () = {
529- let bP = aa("atokens")
530- if ((bP == bP))
560+ let ca = ab("atokens")
561+ if ((ca == ca))
531562 then {
532- let bm = aW(af, an)
533- let bt = toString(af.caller)
534- ((aY(0, 0, 0, 0) ++ [j(L(bt), bm), Burn(an, bm)]) ++ bu(bt))
563+ let bo = aY(ag, ao)
564+ let bv = toString(ag.caller)
565+ ((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv))
535566 }
536567 else throw("Strict value is not equal to itself.")
537568 }
538569
539570
540571
541-@Callable(af)
542-func borrowFor (br,cc) = {
543- let bP = if (if (ae(af))
544- then aJ(cc, (au - aw), "too much borrow requested")
572+@Callable(ag)
573+func borrowFor (bt,cn) = {
574+ let ca = if (if (af(ag))
575+ then aL(cn, (aw - ay), "too much borrow requested")
545576 else false)
546- then aa("borrow")
577+ then ab("borrow")
547578 else false
548- if ((bP == bP))
579+ if ((ca == ca))
549580 then {
550- let bW = (aO(br) + cc)
551- (aY(0, cc, 0, cc) ++ [h(N(br), bW), bs(br), h(O(br), aH), ScriptTransfer(addressFromStringValue(br), cc, Q)])
581+ let ch = (aQ(bt) + cn)
582+ (ba(0, cn, 0, cn) ++ [h(O(bt), ch), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cn, R)])
552583 }
553584 else throw("Strict value is not equal to itself.")
554585 }
555586
556587
557588
558-@Callable(af)
559-func mintAtokenFor (br,cd) = {
560- let ce = bq(br)
561- let aK = if ((cd == -1))
562- then ce
563- else cd
564- let bP = if (if (if (ae(af))
565- then aa("atokens")
589+@Callable(ag)
590+func mintAtokenFor (bt,co) = {
591+ let cp = bs(bt)
592+ let aM = if ((co == -1))
593+ then cp
594+ else co
595+ let ca = if (if (if (af(ag))
596+ then ab("atokens")
566597 else false)
567- then e((-1 > cd), "invalid amountToMint")
598+ then e((-1 > co), "invalid amountToMint")
568599 else false)
569- then e((aK > ce), ("Trying to mint more than available, max: " + toString(ce)))
600+ then e((aM > cp), ("Trying to mint more than available, max: " + toString(cp)))
570601 else false
571- if ((bP == bP))
572- then (aY(0, 0, 0, 0) ++ [j(L(br), -(aK)), Reissue(an, aK, true), ScriptTransfer(addressFromStringValue(br), aK, an)])
602+ if ((ca == ca))
603+ then (ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)])
573604 else throw("Strict value is not equal to itself.")
574605 }
575606
576607
577608
578-@Callable(af)
609+@Callable(ag)
579610 func redeemAtokens () = {
580- let bP = aa("atokens")
581- if ((bP == bP))
611+ let ca = ab("atokens")
612+ if ((ca == ca))
582613 then {
583- let bm = aW(af, an)
584- let cf = bl(bm)
585- (aY(-(cf), 0, 0, cf) ++ [ScriptTransfer(af.caller, cf, Q), j(E, -(bm)), Burn(an, bm)])
614+ let bo = aY(ag, ao)
615+ let cq = bn(bo)
616+ (ba(-(cq), 0, 0, cq) ++ [ScriptTransfer(ag.caller, cq, R), j(F, -(bo)), Burn(ao, bo)])
586617 }
587618 else throw("Strict value is not equal to itself.")
588619 }
589620
590621
591622
592-@Callable(af)
593-func withdrawFor (br,aK) = {
594- let cg = ((au + av) - aw)
595- let bP = if (if (if (ae(af))
596- then aJ(aK, cg, "funds in use")
623+@Callable(ag)
624+func withdrawFor (bt,aM) = {
625+ let cr = ((aw + ax) - ay)
626+ let ca = if (if (if (af(ag))
627+ then aL(aM, cr, "funds in use")
597628 else false)
598- then e((-1 > aK), "invalid amount")
629+ then e((-1 > aM), "invalid amount")
599630 else false)
600- then aa("withdraw")
631+ then ab("withdraw")
601632 else false
602- if ((bP == bP))
633+ if ((ca == ca))
603634 then {
604- let ch = if ((aK == -1))
635+ let cs = if ((aM == -1))
605636 then {
606- let bR = bq(br)
607- $Tuple2(bR, bl(bR))
637+ let cc = bs(bt)
638+ $Tuple2(cc, bn(cc))
608639 }
609- else $Tuple2(bp(aK), aK)
610- let bA = ch._1
611- let ci = ch._2
612- (aY(-(ci), 0, 0, ci) ++ [ScriptTransfer(addressFromStringValue(br), ci, Q), j(L(br), -(bA)), j(E, -(bA))])
640+ else $Tuple2(br(aM), aM)
641+ let bC = cs._1
642+ let ct = cs._2
643+ (ba(-(ct), 0, 0, ct) ++ [ScriptTransfer(addressFromStringValue(bt), ct, R), j(M(bt), -(bC)), j(F, -(bC))])
613644 }
614645 else throw("Strict value is not equal to itself.")
615646 }
616647
617648
618649
619-@Callable(af)
620-func transferATokensFor (cj,ck,cl) = {
621- let bP = if (ae(af))
622- then aa("transfer_debt")
650+@Callable(ag)
651+func transferATokensFor (cu,cv,cw) = {
652+ let ca = if (af(ag))
653+ then ab("transfer_debt")
623654 else false
624- if ((bP == bP))
655+ if ((ca == ca))
625656 then {
626- let cm = bk(cl)
627- let bR = bn(cm)
628- let cn = bq(cj)
629- if ((bR > cn))
630- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cl)) + " transfer.assets: ") + toString(cm)) + " transfer.atokens: ") + toString(bR)) + " from.atokens: ") + toString(cn)) + " at ") + toString(this)))
631- else $Tuple2(((aY(0, 0, 0, 0) ++ [j(L(cj), -(bR)), j(L(ck), bR)]) ++ bu(ck)), bl(bR))
657+ let cx = bm(cw)
658+ let cc = bp(cx)
659+ let cy = bs(cu)
660+ if ((cc > cy))
661+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cw)) + " transfer.assets: ") + toString(cx)) + " transfer.atokens: ") + toString(cc)) + " from.atokens: ") + toString(cy)) + " at ") + toString(this)))
662+ else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cu), -(cc)), j(M(cv), cc)]) ++ bw(cv)), bn(cc))
632663 }
633664 else throw("Strict value is not equal to itself.")
634665 }
635666
636667
637668
638-@Callable(af)
639-func transferDebtFor (cj,ck,aK) = {
640- let bP = if (ae(af))
641- then aa("transfer_debt")
669+@Callable(ag)
670+func transferDebtFor (cu,cv,aM) = {
671+ let ca = if (af(ag))
672+ then ab("transfer_debt")
642673 else false
643- if ((bP == bP))
644- then (aY(0, 0, 0, 0) ++ [h(N(cj), (aO(cj) - aK)), h(N(ck), (aO(ck) + aK)), h(O(cj), aH), h(O(ck), aH), bs(ck)])
674+ if ((ca == ca))
675+ then (ba(0, 0, 0, 0) ++ [h(O(cu), (aQ(cu) - aM)), h(O(cv), (aQ(cv) + aM)), h(P(cu), aJ), h(P(cv), aJ), bu(cv)])
645676 else throw("Strict value is not equal to itself.")
646677 }
647678
648679
649680
650-@Callable(af)
651-func disableUseAsCollateralFor (br) = {
652- let bP = if (ae(af))
653- then aa("use_as_col")
681+@Callable(ag)
682+func disableUseAsCollateralFor (bt) = {
683+ let ca = if (af(ag))
684+ then ab("use_as_col")
654685 else false
655- if ((bP == bP))
656- then if ((aO(br) > 0))
686+ if ((ca == ca))
687+ then if ((aQ(bt) > 0))
657688 then throw("can't disable collateral for asset with open debt")
658- else (aY(0, 0, 0, 0) ++ [BooleanEntry(P(br), false)])
689+ else (ba(0, 0, 0, 0) ++ [BooleanEntry(Q(bt), false)])
659690 else throw("Strict value is not equal to itself.")
660691 }
661692
662693
663694
664-@Callable(af)
695+@Callable(ag)
665696 func enableUseAsCollateral () = {
666- let bP = aa("use_as_col")
667- if ((bP == bP))
668- then (aY(0, 0, 0, 0) ++ [bs(toString(af.caller))])
697+ let ca = ab("use_as_col")
698+ if ((ca == ca))
699+ then (ba(0, 0, 0, 0) ++ [bu(toString(ag.caller))])
669700 else throw("Strict value is not equal to itself.")
670701 }
671702
672703
673704
674-@Callable(af)
675-func collapseFor (bt) = {
676- let bP = if (ae(af))
677- then aa("force_collapse")
705+@Callable(ag)
706+func collapseFor (bv) = {
707+ let ca = if (af(ag))
708+ then ab("force_collapse")
678709 else false
679- if ((bP == bP))
680- then bv(bt, -1)
710+ if ((ca == ca))
711+ then bx(bv, -1)
681712 else throw("Strict value is not equal to itself.")
682713 }
683714
684715
685716
686-@Callable(af)
687-func collapseDebt (aK) = {
688- let bP = aa("collapse")
689- if ((bP == bP))
690- then bv(toString(af.caller), aK)
717+@Callable(ag)
718+func collapseDebt (aM) = {
719+ let ca = ab("collapse")
720+ if ((ca == ca))
721+ then bx(toString(ag.caller), aM)
691722 else throw("Strict value is not equal to itself.")
692723 }
693724
694725

github/deemru/w8io/6500d08 
264.15 ms