tx · JB4ET9DbWSC8pgsFCCXBuSi8W4UKu95fda8tMFH5nMho

3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR:  -0.01000000 Waves

2022.03.09 15:17 [3021529] smart account 3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR > SELF 0.00000000 Waves

{ "type": 13, "id": "JB4ET9DbWSC8pgsFCCXBuSi8W4UKu95fda8tMFH5nMho", "fee": 1000000, "feeAssetId": null, "timestamp": 1646828131061, "version": 1, "sender": "3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR", "senderPublicKey": "41uiA5UF2zu2zsaRWQJU9G9dt3n9imXQLui4s78uBZK3", "proofs": [ "3Zu5tfN2QsvMUHN5ahkwW7WjGiK3SnL7kXoZSLyepw1CjszKaXmq9YpWKf1oAd8KXCE8WRq3Mwq8a4bHR6s918xT" ], "script": "base64:AAIFAAAAAAAAAJIIAhIAEgMKAQgSBAoCCAgSABIDCgEIEgASABIDCgEBEgASBwoFCAgICAESABIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQESAwoBCBIECgIIBBIECgIIARIECgIIARIDCgEIEgQKAggBEgQKAggBEgMKAQgSBQoDCAgBEgUKAwgIARIDCgEIEgASAwoBCBIECgIIAQAAAFsBAAAABGdldEkAAAABAAAAA2tleQkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkBAAAABGdldFMAAAABAAAAA2tleQkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkBAAAABWdldFNWAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGG5vIHN0cmluZyB2YWx1ZSBmb3Iga2V5IAUAAAADa2V5AgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAEdGhpcwEAAAAHdGhyb3dJZgAAAAIAAAAJY29uZGl0aW9uAAAABWVycm9yAwUAAAAJY29uZGl0aW9uCQAAAgAAAAEFAAAABWVycm9yBgEAAAAId3JpdGVJbnQAAAACAAAAA2tleQAAAAV2YWx1ZQMJAABmAAAAAgAAAAAAAAAAAAUAAAAFdmFsdWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAAGkAAAAAQUAAAAFdmFsdWUCAAAACSBmb3Iga2V5IAUAAAADa2V5CQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAIY2hhbmdlQnkAAAACAAAAA2tleQAAAAV2YWx1ZQkBAAAACHdyaXRlSW50AAAAAgUAAAADa2V5CQAAZAAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAADa2V5AAAAAAAAAAAABQAAAAV2YWx1ZQEAAAALd3JpdGVTdHJpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAMZnJhY3Rpb25DZWlsAAAAAwAAAAV2YWx1ZQAAAAludW1lcmF0b3IAAAALZGVub21pbmF0b3IEAAAABGNhbmQJAABrAAAAAwUAAAAFdmFsdWUFAAAACW51bWVyYXRvcgUAAAALZGVub21pbmF0b3IEAAAAAUQAAAAAALUE8zMEAAAABWV4YWN0CQAAAAAAAAIJAABqAAAAAgkAAGgAAAACCQAAagAAAAIFAAAABGNhbmQFAAAAAUQJAABqAAAAAgUAAAALZGVub21pbmF0b3IFAAAAAUQFAAAAAUQJAABqAAAAAgkAAGgAAAACCQAAagAAAAIFAAAABXZhbHVlBQAAAAFECQAAagAAAAIFAAAACW51bWVyYXRvcgUAAAABRAUAAAABRAMFAAAABWV4YWN0BQAAAARjYW5kCQAAZAAAAAIFAAAABGNhbmQAAAAAAAAAAAEAAAAADUJsb2Nrc1BlclllYXIAAAAAAAAIBSAAAAAABVJCYXNlAAAjhvJvwQAAAAAAAAtmYWN0b3JzQmFzZQAAAAAAAAAD6AAAAAAMYXNzZXRJZFN0b3JlAgAAAAdhc3NldElkAAAAAAphc3NldElkU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQUAAAAMYXNzZXRJZFN0b3JlAgAAAApubyBhc3NldElkAAAAAAdhc3NldElkAwkAAAAAAAACBQAAAAphc3NldElkU3RyAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAphc3NldElkU3RyAAAAABJyZXNlcnZlRmFjdG9yU3RvcmUJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAOX1Jlc2VydmVGYWN0b3IAAAAAFWNvbGxhdGVyYWxGYWN0b3JTdG9yZQkAASwAAAACBQAAAAphc3NldElkU3RyAgAAABFfQ29sbGF0ZXJhbEZhY3RvcgAAAAAZbGlxdWlkYXRpb25UaHJlc2hvbGRTdG9yZQkAASwAAAACBQAAAAphc3NldElkU3RyAgAAABVfTGlxdWlkYXRpb25UaHJlc2hvbGQAAAAAEm92ZXJsYXBDaGFyZ2VTdG9yZQIAAAAWYWNjb3VudF9oZWFsdGhfb3ZlcmxhcAAAAAAXbGlxdWlkYXRpb25QZW5hbHR5U3RvcmUJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAATX0xpcXVpZGF0aW9uUGVuYWx0eQAAAAASY29uZmlnQWRkcmVzc1N0b3JlAgAAAA1jb25maWdBZGRyZXNzAAAAAA1hVG9rZW5JZFN0b3JlAgAAAAhhVG9rZW5JZAAAAAAPYVRva2VuTmFtZVN0b3JlAgAAAAphVG9rZW5OYW1lAAAAABZhVG9rZW5DaXJjdWxhdGlvblN0b3JlAgAAABFhVG9rZW5DaXJjdWxhdGlvbgAAAAAVbGFzdFVwZGF0ZUhlaWdodFN0b3JlAgAAABBsYXN0VXBkYXRlSGVpZ2h0AAAAAA50b3RhbERlYnRTdG9yZQIAAAALdG90YWxCb3Jyb3cAAAAAEXRvdGFsRGVwb3NpdFN0b3JlAgAAAAx0b3RhbERlcG9zaXQAAAAAEXRvdGFsUmVzZXJ2ZVN0b3JlAgAAAAx0b3RhbFJlc2VydmUAAAAACmluZGV4U3RvcmUCAAAAC3N0b3JlZEluZGV4AAAAABNhVG9rZW5EZWNpbWFsc1N0b3JlAgAAAA5hVG9rZW5EZWNpbWFscwEAAAASYVRva2VuQmFsYW5jZVN0b3JlAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACBQAAAAt1c2VyQWRkcmVzcwIAAAAOX2FUb2tlbkJhbGFuY2UBAAAACWRlYnRTdG9yZQAAAAEAAAALdXNlckFkZHJlc3MJAAEsAAAAAgUAAAALdXNlckFkZHJlc3MCAAAABV9kZWJ0AQAAAA5kZWJ0SW5kZXhTdG9yZQAAAAEAAAALdXNlckFkZHJlc3MJAAEsAAAAAgUAAAALdXNlckFkZHJlc3MCAAAABl9pbmRleAEAAAAUdXNlQXNDb2xsYXRlcmFsU3RvcmUAAAABAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIFAAAAC3VzZXJBZGRyZXNzAgAAABBfdXNlQXNDb2xsYXRlcmFsAQAAAApnZXRCYWxhbmNlAAAAAgAAAA5hZGRyZXNzT3JBbGlhcwAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJidgUAAAAHJG1hdGNoMAkAA/AAAAACBQAAAA5hZGRyZXNzT3JBbGlhcwUAAAACYnYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXUFAAAAByRtYXRjaDAICQAD7wAAAAEFAAAADmFkZHJlc3NPckFsaWFzAAAACWF2YWlsYWJsZQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgAAAAANYXNzZXREZWNpbWFscwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAE2FUb2tlbkRlY2ltYWxzU3RvcmUCAAAAEG5vIGFzc2V0RGVjaW1hbHMAAAAADWNvbmZpZ0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAASY29uZmlnQWRkcmVzc1N0b3JlAgAAABlyZXNlcnZlOiBubyBjb25maWdBZGRyZXNzAgAAABZpbnZhbGlkIGNvbmZpZyBhZGRyZXNzAQAAAAlvcEFsbG93ZWQAAAABAAAAAm9wBAAAAAckbWF0Y2gwCQAD/AAAAAQFAAAADWNvbmZpZ0FkZHJlc3MCAAAACW9wQWxsb3dlZAkABEwAAAACBQAAAAphc3NldElkU3RyCQAETAAAAAIFAAAAAm9wBQAAAANuaWwFAAAAA25pbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAMFAAAAAWIGCQAAAgAAAAECAAAAC25vdCBhbGxvd2VkCQAAAgAAAAECAAAAIW9wQWxsb3dlZDogdW5leHBlY3RlZCByZXN1bHQgdHlwZQAAAAAMbWFpbkNvbnRyYWN0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAABG1haW4CAAAAEW5vIG1haW4gaW4gY29uZmlnAgAAABRpbnZhbGlkIG1haW4gYWRkcmVzcwEAAAAIbWFpbk9ubHkAAAABAAAAAWkDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADG1haW5Db250cmFjdAkAAAIAAAABAgAAABBvbmx5IG1haW4gY2FuIGRvBgEAAAAMZGl2QWRtaW5Pbmx5AAAAAQAAAAFpBAAAAAlkaXZBZG1pbnMJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzAgAAAAlkaXZBZG1pbnMCAAAADW5vIGRpdiBhZG1pbnMDCQEAAAABIQAAAAEJAQAAAAhjb250YWlucwAAAAIFAAAACWRpdkFkbWlucwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAAVb25seSBkaXYgYWRtaW4gY2FuIGRvBgEAAAAQaXNBc3NldElkT3JXYXZlcwAAAAEAAAAFdmFsdWUDAwkBAAAAAiE9AAAAAgUAAAAFdmFsdWUCAAAABVdBVkVTCQAAAAAAAAIJAAJZAAAAAQUAAAAFdmFsdWUJAAJZAAAAAQIAAAAABwkAAAIAAAABAgAAAA9pbnZhbGlkIGFzc2V0SWQGAAAAAA5ub3RJbml0aWFsaXplZAkBAAAAB3Rocm93SWYAAAACCQEAAAAJaXNEZWZpbmVkAAAAAQkBAAAABGdldFMAAAABBQAAAAxhc3NldElkU3RvcmUCAAAAE2FscmVhZHkgaW5pdGlhbGl6ZWQAAAAAEm1heWJlT3JhY2xlQWRkcmVzcwQAAAAHJG1hdGNoMAkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzAgAAAA5vcmFjbGVfYWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQAEJgAAAAEFAAAAAXMFAAAABHVuaXQAAAAAC29yYWNsZVByaWNlBAAAAAckbWF0Y2gwCQAD/AAAAAQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgUAAAASbWF5YmVPcmFjbGVBZGRyZXNzAgAAAAlubyBvcmFjbGUCAAAABXByaWNlCQAETAAAAAIFAAAACmFzc2V0SWRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWkFAAAAByRtYXRjaDAFAAAAAWkJAAACAAAAAQIAAAAPYmFkIG9yYWNsZSBkYXRhAAAAAAZIRUlHSFQFAAAABmhlaWdodAAAAAAQbGFzdFVwZGF0ZUhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAFWxhc3RVcGRhdGVIZWlnaHRTdG9yZQIAAAATbm8gbGFzdFVwZGF0ZUhlaWdodAAAAAAIYVRva2VuSWQJAAJZAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAEZ2V0UwAAAAEFAAAADWFUb2tlbklkU3RvcmUCAAAAC25vIGFUb2tlbklkAAAAABFhVG9rZW5DaXJjdWxhdGlvbgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAABZhVG9rZW5DaXJjdWxhdGlvblN0b3JlAAAAAAAAAAAAAAAAAA1yZXNlcnZlRmFjdG9yCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAScmVzZXJ2ZUZhY3RvclN0b3JlAgAAABBubyByZXNlcnZlRmFjdG9yAAAAABBjb2xsYXRlcmFsRmFjdG9yCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAVY29sbGF0ZXJhbEZhY3RvclN0b3JlAgAAABNubyBjb2xsYXRlcmFsRmFjdG9yAAAAABRsaXF1aWRhdGlvblRocmVzaG9sZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAGWxpcXVpZGF0aW9uVGhyZXNob2xkU3RvcmUCAAAAF25vIGxpcXVpZGF0aW9uVGhyZXNob2xkAAAAABRhY2NvdW50SGVhbHRoT3ZlcmxhcAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAEm92ZXJsYXBDaGFyZ2VTdG9yZQIAAAAQbm8gb3ZlcmxhcENoYXJnZQAAAAASbGlxdWlkYXRpb25QZW5hbHR5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAXbGlxdWlkYXRpb25QZW5hbHR5U3RvcmUCAAAAFW5vIGxpcXVpZGF0aW9uUGVuYWx0eQAAAAASc3RvcmVkVG90YWxEZXBvc2l0CQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAEXRvdGFsRGVwb3NpdFN0b3JlAAAAAAAAAAAAAAAAABJzdG9yZWRUb3RhbFJlc2VydmUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAARdG90YWxSZXNlcnZlU3RvcmUAAAAAAAAAAAAAAAAAD3N0b3JlZFRvdGFsRGVidAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAAA50b3RhbERlYnRTdG9yZQAAAAAAAAAAAAAAAAALc3RvcmVkSW5kZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAAKaW5kZXhTdG9yZQUAAAAFUkJhc2UAAAAAC3V0aWxpemF0aW9uAwkAAGYAAAACBQAAABJzdG9yZWRUb3RhbERlcG9zaXQAAAAAAAAAAAAJAABrAAAAAwUAAAAPc3RvcmVkVG90YWxEZWJ0BQAAAAtmYWN0b3JzQmFzZQUAAAASc3RvcmVkVG90YWxEZXBvc2l0AAAAAAAAAAAAAAAAAANhcHIEAAAAAWEJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAHX0FQb2ludAQAAAABYgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAphc3NldElkU3RyAgAAAAdfQlBvaW50BAAAAAFjCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAIFAAAACmFzc2V0SWRTdHICAAAAB19DUG9pbnQEAAAAAWQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAHX0RQb2ludAQAAAAGbGluZUFDCQAAZAAAAAIJAABrAAAAAwkAAGUAAAACBQAAAAFhBQAAAAFjBQAAAAt1dGlsaXphdGlvbgkBAAAAAS0AAAABBQAAAAFiBQAAAAFhBAAAAAZsaW5lQ0QJAABkAAAAAgkAAGsAAAADCQAAZQAAAAIFAAAAAWMFAAAAAWQJAABlAAAAAgUAAAALdXRpbGl6YXRpb24FAAAAAWIJAABlAAAAAgUAAAABYgUAAAALZmFjdG9yc0Jhc2UFAAAAAWMDCQAAAAAAAAIFAAAAC3V0aWxpemF0aW9uAAAAAAAAAAAABQAAAAFhAwkAAAAAAAACBQAAAAt1dGlsaXphdGlvbgUAAAABYgUAAAABYwMDCQAAZgAAAAIFAAAAAWIFAAAAC3V0aWxpemF0aW9uBgkAAAAAAAACBQAAAAFiBQAAAAtmYWN0b3JzQmFzZQUAAAAGbGluZUFDBQAAAAZsaW5lQ0QAAAAAA2FweQMJAAAAAAAAAgUAAAASc3RvcmVkVG90YWxEZXBvc2l0AAAAAAAAAAAAAAAAAAAAAAAACQAAawAAAAMJAABrAAAAAwUAAAAPc3RvcmVkVG90YWxEZWJ0BQAAAANhcHIFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAkAAGUAAAACBQAAAAtmYWN0b3JzQmFzZQUAAAANcmVzZXJ2ZUZhY3RvcgUAAAALZmFjdG9yc0Jhc2UAAAAADGN1cnJlbnRJbmRleAMJAAAAAAAAAgUAAAAGSEVJR0hUBQAAABBsYXN0VXBkYXRlSGVpZ2h0BQAAAAtzdG9yZWRJbmRleAQAAAADYnByCQEAAAAMZnJhY3Rpb25DZWlsAAAAAwUAAAADYXByBQAAAAVSQmFzZQkAAGgAAAACBQAAAA1CbG9ja3NQZXJZZWFyBQAAAAtmYWN0b3JzQmFzZQkBAAAADGZyYWN0aW9uQ2VpbAAAAAMFAAAAC3N0b3JlZEluZGV4CQAAZAAAAAIFAAAABVJCYXNlCQAAaAAAAAIFAAAAA2JwcgkAAGUAAAACBQAAAAZIRUlHSFQFAAAAEGxhc3RVcGRhdGVIZWlnaHQFAAAABVJCYXNlAAAAAA5zdGFraW5nRW5hYmxlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAICAAAAEHN0YWtpbmdfZW5hYmxlZF8FAAAACmFzc2V0SWRTdHIHAAAAAA1hY3R1YWxCYWxhbmNlBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAANhaWQFAAAAByRtYXRjaDAJAAPwAAAAAgUAAAAEdGhpcwUAAAADYWlkCAkAA+8AAAABBQAAAAR0aGlzAAAACWF2YWlsYWJsZQEAAAAObGlxdWlkaXR5Q2hlY2sAAAADAAAABmFtb3VudAAAAANtYXgAAAADZXJyAwkAAGYAAAACBQAAAAZhbW91bnQFAAAAA21heAkAAAIAAAABCQABLAAAAAICAAAAFm5vdCBlbm91Z2ggbGlxdWlkaXR5OiAFAAAAA2VycgYBAAAADnN0b3JlZFVzZXJEZWJ0AAAAAQAAAAt1c2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABCQEAAAAJZGVidFN0b3JlAAAAAQUAAAALdXNlckFkZHJlc3MAAAAAAAAAAAABAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEAAAALdXNlckFkZHJlc3MEAAAAAXYJAQAAAA5zdG9yZWRVc2VyRGVidAAAAAEFAAAAC3VzZXJBZGRyZXNzAwkAAAAAAAACBQAAAAF2AAAAAAAAAAAAAAAAAAAAAAAABAAAAA9zdG9yZWRVc2VySW5kZXgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldEkAAAABCQEAAAAOZGVidEluZGV4U3RvcmUAAAABBQAAAAt1c2VyQWRkcmVzcwIAAAAgaGFzIGRlYnQgYnV0IGRvZXMgbm90IGhhdmUgaW5kZXgJAABrAAAAAwUAAAABdgUAAAAMY3VycmVudEluZGV4BQAAAA9zdG9yZWRVc2VySW5kZXgAAAAAEGN1cnJlbnRUb3RhbERlYnQJAABrAAAAAwUAAAAPc3RvcmVkVG90YWxEZWJ0BQAAAAxjdXJyZW50SW5kZXgFAAAAC3N0b3JlZEluZGV4AAAAAAlhZGRlZERlYnQJAABlAAAAAgUAAAAQY3VycmVudFRvdGFsRGVidAUAAAAPc3RvcmVkVG90YWxEZWJ0AAAAAAxhZGRlZERlcG9zaXQJAABrAAAAAwUAAAAJYWRkZWREZWJ0CQAAZQAAAAIFAAAAC2ZhY3RvcnNCYXNlBQAAAA1yZXNlcnZlRmFjdG9yBQAAAAtmYWN0b3JzQmFzZQAAAAATY3VycmVudFRvdGFsRGVwb3NpdAkAAGQAAAACBQAAABJzdG9yZWRUb3RhbERlcG9zaXQFAAAADGFkZGVkRGVwb3NpdAAAAAATY3VycmVudFRvdGFsUmVzZXJ2ZQkAAGUAAAACCQAAZAAAAAIFAAAAEnN0b3JlZFRvdGFsUmVzZXJ2ZQUAAAAJYWRkZWREZWJ0BQAAAAxhZGRlZERlcG9zaXQAAAAAEmNsYWltYWJsZURpdmlkZW5kcwMFAAAADnN0YWtpbmdFbmFibGVkBQAAABNjdXJyZW50VG90YWxSZXNlcnZlCQABlwAAAAEJAARMAAAAAgUAAAANYWN0dWFsQmFsYW5jZQkABEwAAAACBQAAABNjdXJyZW50VG90YWxSZXNlcnZlBQAAAANuaWwBAAAADXBheW1lbnRBbW91bnQAAAACAAAAAWkAAAAHYXNzZXRJZAQAAAABcAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AwkAAGcAAAACAAAAAAAAAAAABQAAAAFwCQAAAgAAAAEJAAEsAAAAAgIAAAApUGF5bWVudCBpcyBsZXNzIHRoYW4gbWluIGFsbG93ZWQgYW1vdW50OiAJAAGkAAAAAQUAAAABcAMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAAB2Fzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAAB4gYmFkIGFzc2V0IGF0dGFjaGVkOiByZXF1aXJlZCAFAAAACmFzc2V0SWRTdHIFAAAAAXABAAAACnN5bmNUb3RhbHMAAAAEAAAAEWFkZGl0aW9uYWxEZXBvc2l0AAAADmFkZGl0aW9uYWxEZWJ0AAAAEWFkZGl0aW9uYWxSZXNlcnZlAAAADWtlZXBBdEJhbGFuY2UEAAAADXN0YWtpbmdBY3Rpb24DCQAAAAAAAAIFAAAADWFjdHVhbEJhbGFuY2UFAAAADWtlZXBBdEJhbGFuY2UFAAAABHVuaXQDCQEAAAABIQAAAAEFAAAADnN0YWtpbmdFbmFibGVkBQAAAAR1bml0BAAAAA5zdGFraW5nQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAICAAAAD3N0YWtpbmdfY29uZmlnXwUAAAAKYXNzZXRJZFN0cgkAASwAAAACAgAAABdubyBzdGFraW5nIGFkZHJlc3MgZm9yIAUAAAAKYXNzZXRJZFN0cgkAASwAAAACAgAAABhiYWQgc3Rha2luZyBhZGRyZXNzIGZvciAFAAAACmFzc2V0SWRTdHIDCQAAZgAAAAIFAAAADWFjdHVhbEJhbGFuY2UFAAAADWtlZXBBdEJhbGFuY2UJAAP8AAAABAUAAAAOc3Rha2luZ0FkZHJlc3MCAAAAA3B1dAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAdhc3NldElkCQAAZQAAAAIFAAAADWFjdHVhbEJhbGFuY2UFAAAADWtlZXBBdEJhbGFuY2UFAAAAA25pbAkAA/wAAAAEBQAAAA5zdGFraW5nQWRkcmVzcwIAAAADZ2V0CQAETAAAAAIJAABlAAAAAgUAAAANa2VlcEF0QmFsYW5jZQUAAAANYWN0dWFsQmFsYW5jZQUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAADXN0YWtpbmdBY3Rpb24FAAAADXN0YWtpbmdBY3Rpb24JAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAAKaW5kZXhTdG9yZQUAAAAMY3VycmVudEluZGV4CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAFWxhc3RVcGRhdGVIZWlnaHRTdG9yZQUAAAAGSEVJR0hUCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAEXRvdGFsRGVwb3NpdFN0b3JlCQAAZAAAAAIFAAAAE2N1cnJlbnRUb3RhbERlcG9zaXQFAAAAEWFkZGl0aW9uYWxEZXBvc2l0CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAADnRvdGFsRGVidFN0b3JlCQAAZAAAAAIFAAAAEGN1cnJlbnRUb3RhbERlYnQFAAAADmFkZGl0aW9uYWxEZWJ0CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAEXRvdGFsUmVzZXJ2ZVN0b3JlCQAAZAAAAAIFAAAAE2N1cnJlbnRUb3RhbFJlc2VydmUFAAAAEWFkZGl0aW9uYWxSZXNlcnZlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAAVwb3cxMAAAAAEAAAABbgMJAAAAAAAAAgUAAAABbgAAAAAAAAAABgAAAAAAAA9CQAMJAAAAAAAAAgUAAAABbgAAAAAAAAAACAAAAAAABfXhAAkAAAIAAAABCQABLAAAAAICAAAADmJhZCBkZWNpbWFsczogCQABpAAAAAEFAAAAAW4BAAAACmFzc2V0VG9Vc2QAAAABAAAABmFtb3VudAkAAGsAAAADBQAAAAZhbW91bnQFAAAAC29yYWNsZVByaWNlCQEAAAAFcG93MTAAAAABBQAAAA1hc3NldERlY2ltYWxzAQAAAAp1c2RUb0Fzc2V0AAAAAQAAAAZhbW91bnQJAABrAAAAAwUAAAAGYW1vdW50CQEAAAAFcG93MTAAAAABBQAAAA1hc3NldERlY2ltYWxzBQAAAAtvcmFjbGVQcmljZQEAAAANYVRva2VuVG9Bc3NldAAAAAEAAAAMYVRva2VuQW1vdW50AwkAAAAAAAACBQAAAAxhVG9rZW5BbW91bnQAAAAAAAAAAAAAAAAAAAAAAAADCQAAZgAAAAIFAAAAEWFUb2tlbkNpcmN1bGF0aW9uAAAAAAAAAAAACQAAawAAAAMFAAAADGFUb2tlbkFtb3VudAUAAAATY3VycmVudFRvdGFsRGVwb3NpdAUAAAARYVRva2VuQ2lyY3VsYXRpb24FAAAADGFUb2tlbkFtb3VudAEAAAANYXNzZXRUb0FUb2tlbgAAAAEAAAALYXNzZXRBbW91bnQDCQAAAAAAAAIFAAAAC2Fzc2V0QW1vdW50AAAAAAAAAAAAAAAAAAAAAAAAAwkAAGYAAAACBQAAABFhVG9rZW5DaXJjdWxhdGlvbgAAAAAAAAAAAAkAAGsAAAADBQAAAAthc3NldEFtb3VudAUAAAARYVRva2VuQ2lyY3VsYXRpb24FAAAAE2N1cnJlbnRUb3RhbERlcG9zaXQFAAAAC2Fzc2V0QW1vdW50AQAAABFhc3NldFRvQVRva2VuQ2VpbAAAAAEAAAALYXNzZXRBbW91bnQDCQAAAAAAAAIFAAAAC2Fzc2V0QW1vdW50AAAAAAAAAAAAAAAAAAAAAAAAAwkAAGYAAAACBQAAABFhVG9rZW5DaXJjdWxhdGlvbgAAAAAAAAAAAAkBAAAADGZyYWN0aW9uQ2VpbAAAAAMFAAAAC2Fzc2V0QW1vdW50BQAAABFhVG9rZW5DaXJjdWxhdGlvbgUAAAATY3VycmVudFRvdGFsRGVwb3NpdAUAAAALYXNzZXRBbW91bnQBAAAADWFUb2tlbkJhbGFuY2UAAAABAAAAB2FkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQkBAAAAEmFUb2tlbkJhbGFuY2VTdG9yZQAAAAEFAAAAB2FkZHJlc3MAAAAAAAAAAAABAAAACWVuYWJsZUNvbAAAAAEAAAAEdXNlcgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAABR1c2VBc0NvbGxhdGVyYWxTdG9yZQAAAAEFAAAABHVzZXIGAQAAABFlbmFibGVDb2xJZk5lZWRlZAAAAAEAAAAEdXNlcgMJAABmAAAAAgkBAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEFAAAABHVzZXIAAAAAAAAAAAAJAARMAAAAAgkBAAAACWVuYWJsZUNvbAAAAAEFAAAABHVzZXIFAAAAA25pbAUAAAADbmlsAQAAAAxjb2xsYXBzZVVzZXIAAAACAAAAB2FkZHJlc3MAAAAGYW1vdW50BAAAAARkZWJ0CQEAAAAPY3VycmVudFVzZXJEZWJ0AAAAAQUAAAAHYWRkcmVzcwQAAAAHZGVwb3NpdAkBAAAADWFUb2tlblRvQXNzZXQAAAABCQEAAAANYVRva2VuQmFsYW5jZQAAAAEFAAAAB2FkZHJlc3MEAAAAC21heFBvc3NpYmxlCQABlwAAAAEJAARMAAAAAgUAAAAEZGVidAkABEwAAAACBQAAAAdkZXBvc2l0BQAAAANuaWwEAAAAA2FtdAMJAABmAAAAAgD//////////wUAAAAGYW1vdW50CQAAAgAAAAECAAAAF2ludmFsaWQgY29sbGFwc2UgYW1v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bkNpcmN1bGF0aW9uAgAAAA8sIGFUb2tlblByaWNlOiAJAAGkAAAAAQkBAAAADWFUb2tlblRvQXNzZXQAAAABCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAADWFzc2V0RGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABUZMT09SAQAAAAp1c2VyVG90YWxzAAAAAQAAAAR1c2VyBAAAAAdhdG9rZW5zCQEAAAANYVRva2VuQmFsYW5jZQAAAAEFAAAABHVzZXIEAAAABWFzc2V0CQEAAAANYVRva2VuVG9Bc3NldAAAAAEFAAAAB2F0b2tlbnMEAAAABGRlYnQJAQAAAA9jdXJyZW50VXNlckRlYnQAAAABBQAAAAR1c2VyAwkAAAAAAAACBQAAAAZIRUlHSFQFAAAAEGxhc3RVcGRhdGVIZWlnaHQJAAUWAAAABAUAAAASc3RvcmVkVG90YWxEZXBvc2l0BQAAAA9zdG9yZWRUb3RhbERlYnQFAAAABWFzc2V0BQAAAARkZWJ0CQAFFgAAAAQFAAAAE2N1cnJlbnRUb3RhbERlcG9zaXQFAAAAEGN1cnJlbnRUb3RhbERlYnQFAAAABWFzc2V0BQAAAARkZWJ0AQAAABB3aXRoZHJhd0ludGVybmFsAAAABAAAAAFpAAAABHVzZXIAAAAGYW1vdW50AAAABnRvTWFpbgQAAAALbWF4V2l0aGRyYXcJAABlAAAAAgkAAGQAAAACBQAAABJzdG9yZWRUb3RhbERlcG9zaXQFAAAAEnN0b3JlZFRvdGFsUmVzZXJ2ZQUAAAAPc3RvcmVkVG90YWxEZWJ0BAAAAAZjaGVja3MDAwMJAQAAAAhtYWluT25seQAAAAEFAAAAAWkJAQAAAA5saXF1aWRpdHlDaGVjawAAAAMFAAAABmFtb3VudAUAAAALbWF4V2l0aGRyYXcCAAAADGZ1bmRzIGluIHVzZQcJAQAAAAd0aHJvd0lmAAAAAgkAAGYAAAACAP//////////BQAAAAZhbW91bnQCAAAADmludmFsaWQgYW1vdW50BwkBAAAACW9wQWxsb3dlZAAAAAECAAAACHdpdGhkcmF3BwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAADSR0MDE1MjY0MTU0NTUDCQAAAAAAAAIFAAAA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AAAABHVzZXIGBAAAABNlZmZlY3RpdmVEZXBvc2l0VXNkAwUAAAAMYXNDb2xsYXRlcmFsBQAAABFjdXJyZW50RGVwb3NpdFVzZAAAAAAAAAAAAAQAAAAKb3ZlcmxhcFVzZAkAAZcAAAABCQAETAAAAAIFAAAADmN1cnJlbnREZWJ0VXNkCQAETAAAAAIFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QFAAAAA25pbAQAAAANb3ZlcmxhcENoYXJnZQkBAAAADGZyYWN0aW9uQ2VpbAAAAAMFAAAACm92ZXJsYXBVc2QFAAAAFGFjY291bnRIZWFsdGhPdmVybGFwBQAAAAtmYWN0b3JzQmFzZQQAAAACYnADCQAAZgAAAAIFAAAADmN1cnJlbnREZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkAAAAAAAAAAAACQAAawAAAAMJAABlAAAAAgUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAAOY3VycmVudERlYnRVc2QFAAAAEGNvbGxhdGVyYWxGYWN0b3IFAAAAC2ZhY3RvcnNCYXNlBAAAAANicHUDCQAAZgAAAAIFAAAADmN1cnJlbnREZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkCQAAZAAAAAIJAABrAAAAAwkAAGUAAAACBQAAAA5jdXJyZW50RGVidFVzZAUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAALZmFjdG9yc0Jhc2UFAAAAFGxpcXVpZGF0aW9uVGhyZXNob2xkBQAAAA1vdmVybGFwQ2hhcmdlBQAAAA1vdmVybGFwQ2hhcmdlBAAAAAhlbnJpY2hlZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAQcmVzZXJ2ZUFkZHJlc3M6IAkABCUAAAABBQAAAAR0aGlzAgAAABIsIGN1cnJlbnREZWJ0VXNkOiAJAAGkAAAAAQUAAAAOY3VycmVudERlYnRVc2QCAAAAFSwgY3VycmVudERlcG9zaXRVc2Q6IAkAAaQAAAABBQAAABFjdXJyZW50RGVwb3NpdFVzZAIAAAAGLCBicDogCQABpAAAAAEFAAAAAmJwAgAAAAcsIGJwdTogCQABpAAAAAEFAAAAA2JwdQkABRQAAAACBQAAAANuaWwJAAEsAAAAAgkAASwAAAACBQAAAAhlbnJpY2hlZAIAAAACLCAJAQAAAAxnZXRVc2VyU3RhdGUAAAABBQAAAAR1c2VyAAAAAWkBAAAAC2FkZEludGVyZXN0AAAAAAMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAnY2FuJ3QgYWRkIGludGVyZXN0IHdpdGggdW5yZWxhdGVkIHRva2VuCQEAAAAKc3luY1RvdGFscwAAAAQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpAQAAAAxhZGRUb1Jlc2VydmUAAAAAAwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAAHYXNzZXRJZAkAAAIAAAABAgAAACdjYW4ndCBhZGQgaW50ZXJlc3Qgd2l0aCB1bnJlbGF0ZWQgdG9rZW4JAQAAAApzeW5jVG90YWxzAAAABAAAAAAAAAAAAAAAAAAAAAAAAAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AAAAAAAAAAAAAAAAAWkBAAAAE3dpdGhkcmF3RnJvbVJlc2VydmUAAAABAAAAA2FtdAQAAAAGY2hlY2tzCQEAAAAMZGl2QWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAABGRpZmYDCQAAAAAAAAIFAAAAA2FtdAD//////////wUAAAASY2xhaW1hYmxlRGl2aWRlbmRzBQAAAANhbXQJAAUUAAAAAgkABE4AAAACCQEAAAAKc3luY1RvdGFscwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAJAQAAAAEtAAAAAQUAAAAEZGlmZgUAAAAEZGlmZgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABGRpZmYFAAAAB2Fzc2V0SWQFAAAAA25pbAUAAAAEZGlmZgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALZm9yY2VVcGRhdGUAAAAABAAAAAVhZG1pbgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAABWFkbWluAgAAABpyZXNlcnZlOm5vIGFkbWluIGluIGNvbmZpZwMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAVhZG1pbgkAAAIAAAABAgAAABFvbmx5IGFkbWluIGNhbiBkbwkBAAAACnN5bmNUb3RhbHMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWkBAAAACmluaXRpYWxpemUAAAAFAAAACmNmZ0FkZHJlc3MAAAAOYXNzZXRJZE9yV2F2ZXMAAAAKYVRva2VuTmFtZQAAABFhVG9rZW5EZXNjcmlwdGlvbgAAAA5hVG9rZW5EZWNpbWFscwQAAAAGY2hlY2tzAwUAAAAObm90SW5pdGlhbGl6ZWQJAQAAABBpc0Fzc2V0SWRPcldhdmVzAAAAAQUAAAAOYXNzZXRJZE9yV2F2ZXMHAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAGYVRva2VuCQAEQgAAAAUFAAAACmFUb2tlbk5hbWUFAAAAEWFUb2tlbkRlc2NyaXB0aW9uAAAAAAAAAAAABQAAAA5hVG9rZW5EZWNpbWFscwYJAARMAAAAAgUAAAAGYVRva2VuCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAE2FUb2tlbkRlY2ltYWxzU3RvcmUFAAAADmFUb2tlbkRlY2ltYWxzCQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIFAAAAD2FUb2tlbk5hbWVTdG9yZQUAAAAKYVRva2VuTmFtZQkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACBQAAAAxhc3NldElkU3RvcmUFAAAADmFzc2V0SWRPcldhdmVzCQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIF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", "chainId": 87, "height": 3021529, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HyFwCFgzKsCuS13kM5bSUbGdDVPgDCP3RsUDiL4bXE3k Next: BMZrHxPZgHnsrMwQzoMd6p1Y3Hj4jtHeYKgNS3UuWK9n Diff:
OldNewDifferences
77 func c (b) = getString(this, b)
88
99
10-func d (b) = value(getString(this, b))
10+func d (b) = valueOrErrorMessage(getString(this, b), ((("no string value for key " + b) + " at address ") + toString(this)))
1111
1212
1313 func e (f,g) = if (f)
4444
4545 let u = "assetId"
4646
47-let v = "main"
47+let v = valueOrErrorMessage(c(u), "no assetId")
4848
49-let w = (d(u) + "_ReserveFactor")
49+let w = if ((v == "WAVES"))
50+ then unit
51+ else fromBase58String(v)
5052
51-let x = (d(u) + "_CollateralFactor")
53+let x = (v + "_ReserveFactor")
5254
53-let y = (getStringValue(u) + "_LiquidationThreshold")
55+let y = (v + "_CollateralFactor")
5456
55-let z = "account_health_overlap"
57+let z = (v + "_LiquidationThreshold")
5658
57-let A = (getStringValue(u) + "_LiquidationPenalty")
59+let A = "account_health_overlap"
5860
59-let B = "configAddress"
61+let B = (v + "_LiquidationPenalty")
6062
61-let C = "oracleAddress"
63+let C = "configAddress"
6264
6365 let D = "aTokenId"
6466
9092 func Q (N) = (N + "_useAsCollateral")
9193
9294
93-let R = {
94- let S = valueOrErrorMessage(c(u), "no assetId")
95- if ((S == "WAVES"))
96- then unit
97- else fromBase58String(S)
98- }
99-
100-let T = {
101- let U = R
102- if ($isInstanceOf(U, "ByteVector"))
95+func R (S,w) = {
96+ let T = w
97+ if ($isInstanceOf(T, "ByteVector"))
10398 then {
104- let V = U
105- toBase58String(V)
99+ let U = T
100+ assetBalance(S, U)
106101 }
107- else if ($isInstanceOf(U, "Unit"))
102+ else if ($isInstanceOf(T, "Unit"))
108103 then {
109- let W = U
110- "WAVES"
111- }
112- else throw("Match error")
113- }
114-
115-func X (Y,R) = {
116- let U = R
117- if ($isInstanceOf(U, "ByteVector"))
118- then {
119- let V = U
120- assetBalance(Y, V)
121- }
122- else if ($isInstanceOf(U, "Unit"))
123- then {
124- let W = U
125- wavesBalance(Y).available
104+ let V = T
105+ wavesBalance(S).available
126106 }
127107 else throw("Match error")
128108 }
129109
130110
131-let Z = valueOrErrorMessage(a(L), "no assetDecimals")
111+let W = valueOrErrorMessage(a(L), "no assetDecimals")
132112
133-let aa = valueOrErrorMessage(addressFromString(valueOrErrorMessage(c(B), "no configAddress")), "invalid config address")
113+let X = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, C), "reserve: no configAddress")), "invalid config address")
134114
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"))
115+func Y (Z) = {
116+ let T = invoke(X, "opAllowed", [v, Z], nil)
117+ if ($isInstanceOf(T, "Boolean"))
139118 then {
140- let ae = U
141- if (ae)
119+ let aa = T
120+ if (aa)
142121 then true
143122 else throw("not allowed")
144123 }
146125 }
147126
148127
149-func af (ag) = if ((ag.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, v), "no main in config")), "invalid main address")))
128+let ab = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(X, "main"), "no main in config")), "invalid main address")
129+
130+func ac (ad) = if ((ad.caller != ab))
150131 then throw("only main can do")
151132 else true
152133
153134
154-func ah (ag) = {
155- let ai = valueOrErrorMessage(getString(aa, "divAdmins"), "no div admins")
156- if (!(contains(ai, toString(ag.caller))))
135+func ae (ad) = {
136+ let af = valueOrErrorMessage(getString(X, "divAdmins"), "no div admins")
137+ if (!(contains(af, toString(ad.caller))))
157138 then throw("only div admin can do")
158139 else true
159140 }
160141
161142
162-func aj (i) = if (if ((i != "WAVES"))
143+func ag (i) = if (if ((i != "WAVES"))
163144 then (fromBase58String(i) == fromBase58String(""))
164145 else false)
165146 then throw("invalid assetId")
166147 else true
167148
168149
169-let ak = e(isDefined(c(u)), "already initialized")
150+let ah = e(isDefined(c(u)), "already initialized")
170151
171-let al = {
172- let U = c(C)
173- if ($isInstanceOf(U, "String"))
152+let ai = {
153+ let T = getString(X, "oracle_address")
154+ if ($isInstanceOf(T, "String"))
174155 then {
175- let am = U
176- addressFromString(am)
156+ let aj = T
157+ addressFromString(aj)
177158 }
178159 else unit
179160 }
180161
181-let an = {
182- let U = invoke(valueOrErrorMessage(al, "no oracle"), "price", [d(u)], nil)
183- if ($isInstanceOf(U, "Int"))
162+let ak = {
163+ let T = invoke(valueOrErrorMessage(ai, "no oracle"), "price", [v], nil)
164+ if ($isInstanceOf(T, "Int"))
184165 then {
185- let ag = U
186- ag
166+ let ad = T
167+ ad
187168 }
188169 else throw("bad oracle data")
189170 }
190171
191-let ao = height
172+let al = height
192173
193-let ap = valueOrErrorMessage(a(G), "no lastUpdateHeight")
174+let am = valueOrErrorMessage(a(G), "no lastUpdateHeight")
194175
195-let aq = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
176+let an = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
196177
197-let ar = valueOrElse(a(F), 0)
178+let ao = valueOrElse(a(F), 0)
198179
199-let as = {
200- let S = d(u)
201- $Tuple4(getIntegerValue(aa, (S + "_APoint")), getIntegerValue(aa, (S + "_BPoint")), getIntegerValue(aa, (S + "_CPoint")), getIntegerValue(aa, (S + "_DPoint")))
180+let ap = valueOrErrorMessage(getInteger(X, x), "no reserveFactor")
181+
182+let aq = valueOrErrorMessage(getInteger(X, y), "no collateralFactor")
183+
184+let ar = valueOrErrorMessage(getInteger(X, z), "no liquidationThreshold")
185+
186+let as = valueOrErrorMessage(getInteger(X, A), "no overlapCharge")
187+
188+let at = valueOrErrorMessage(getInteger(X, B), "no liquidationPenalty")
189+
190+let au = valueOrElse(a(I), 0)
191+
192+let av = valueOrElse(a(J), 0)
193+
194+let aw = valueOrElse(a(H), 0)
195+
196+let ax = valueOrElse(a(K), s)
197+
198+let ay = if ((au > 0))
199+ then fraction(aw, t, au)
200+ else 0
201+
202+let az = {
203+ let aA = getIntegerValue(X, (v + "_APoint"))
204+ let aa = getIntegerValue(X, (v + "_BPoint"))
205+ let aB = getIntegerValue(X, (v + "_CPoint"))
206+ let aC = getIntegerValue(X, (v + "_DPoint"))
207+ let aD = (fraction((aA - aB), ay, -(aa)) + aA)
208+ let aE = (fraction((aB - aC), (ay - aa), (aa - t)) + aB)
209+ if ((ay == 0))
210+ then aA
211+ else if ((ay == aa))
212+ then aB
213+ else if (if ((aa > ay))
214+ then true
215+ else (aa == t))
216+ then aD
217+ else aE
202218 }
203219
204-let at = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
220+let aF = if ((au == 0))
221+ then 0
222+ else fraction(fraction(aw, az, au), (t - ap), t)
205223
206-let au = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
224+let aG = if ((al == am))
225+ then ax
226+ else {
227+ let aH = l(az, s, (r * t))
228+ l(ax, (s + (aH * (al - am))), s)
229+ }
207230
208-let av = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
231+let aI = valueOrElse(getBoolean(X, ("staking_enabled_" + v)), false)
209232
210-let aw = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
211-
212-let ax = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
213-
214-let ay = valueOrElse(a(I), 0)
215-
216-let az = valueOrElse(a(J), 0)
217-
218-let aA = valueOrElse(a(H), 0)
219-
220-let aB = valueOrElse(a(K), s)
221-
222-let aC = if ((ay > 0))
223- then fraction(aA, t, ay)
224- else 0
225-
226-let aD = {
227- let aE = as
228- let aF = aE._1
229- let ae = aE._2
230- let aG = aE._3
231- let aH = aE._4
232- let aI = (fraction((aF - aG), aC, -(ae)) + aF)
233- let aJ = (fraction((aG - aH), (aC - ae), (ae - t)) + aG)
234- if ((aC == 0))
235- then aF
236- else if ((aC == ae))
237- then aG
238- else if (if ((ae > aC))
239- then true
240- else (ae == t))
241- then aI
242- else aJ
233+let aJ = {
234+ let T = w
235+ if ($isInstanceOf(T, "ByteVector"))
236+ then {
237+ let aK = T
238+ assetBalance(this, aK)
239+ }
240+ else wavesBalance(this).available
243241 }
244242
245-let aK = if ((ay == 0))
246- then 0
247- else fraction(fraction(aA, aD, ay), (t - at), t)
248-
249-let aL = if ((ao == ap))
250- then aB
251- else {
252- let aM = l(aD, s, (r * t))
253- l(aB, (s + (aM * (ao - ap))), s)
254- }
255-
256-func aN (aO,aP,aQ) = if ((aO > aP))
257- then throw(("not enough liquidity: " + aQ))
243+func aL (aM,aN,aO) = if ((aM > aN))
244+ then throw(("not enough liquidity: " + aO))
258245 else true
259246
260247
261-func aR (N) = valueOrElse(a(O(N)), 0)
248+func aP (N) = valueOrElse(a(O(N)), 0)
262249
263250
264-func aS (N) = {
265- let aT = aR(N)
266- if ((aT == 0))
251+func aQ (N) = {
252+ let aR = aP(N)
253+ if ((aR == 0))
267254 then 0
268255 else {
269- let aU = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
270- fraction(aT, aL, aU)
256+ let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
257+ fraction(aR, aG, aS)
271258 }
272259 }
273260
274261
275-let aV = fraction(aA, aL, aB)
262+let aT = fraction(aw, aG, ax)
276263
277-let aW = (aV - aA)
264+let aU = (aT - aw)
278265
279-let aX = fraction(aW, (t - at), t)
266+let aV = fraction(aU, (t - ap), t)
280267
281-let aY = (ay + aX)
268+let aW = (au + aV)
282269
283-let aZ = ((az + aW) - aX)
270+let aX = ((av + aU) - aV)
284271
285-func ba (ag,R) = {
286- let bb = ag.payments[0].amount
287- if ((0 >= bb))
288- then throw("Payment is less than min allowed amount")
289- else if ((ag.payments[0].assetId != R))
290- then throw(("bad asset attached: required " + T))
291- else bb
272+let aY = if (aI)
273+ then aX
274+ else min([aJ, aX])
275+
276+func aZ (ad,w) = {
277+ let ba = ad.payments[0].amount
278+ if ((0 >= ba))
279+ then throw(("Payment is less than min allowed amount: " + toString(ba)))
280+ else if ((ad.payments[0].assetId != w))
281+ then throw((" bad asset attached: required " + v))
282+ else ba
292283 }
293284
294285
295-func bc (bd,be,bf,bg) = {
296- let bh = {
297- let U = R
298- if ($isInstanceOf(U, "ByteVector"))
299- then {
300- let ad = U
301- assetBalance(this, ad)
286+func bb (bc,bd,be,bf) = {
287+ let bg = if ((aJ == bf))
288+ then unit
289+ else if (!(aI))
290+ then unit
291+ else {
292+ let bh = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(X, ("staking_config_" + v)), ("no staking address for " + v))), ("bad staking address for " + v))
293+ if ((aJ > bf))
294+ then invoke(bh, "put", nil, [AttachedPayment(w, (aJ - bf))])
295+ else invoke(bh, "get", [(bf - aJ)], nil)
302296 }
303- else wavesBalance(this).available
304- }
305- let bi = if ((bh == bg))
306- then unit
307- else {
308- let bj = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
309- if (!(bj))
310- then unit
311- else {
312- let bk = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, ("staking_config_" + T)), ("no staking address for " + T))), ("bad staking address for " + T))
313- if ((bh > bg))
314- then invoke(bk, "put", nil, [AttachedPayment(R, (bh - bg))])
315- else invoke(bk, "get", [(bg - bh)], nil)
316- }
317- }
318- if ((bi == bi))
319- then [h(K, aL), h(G, ao), h(I, (aY + bd)), h(H, (aV + be)), h(J, (aZ + bf))]
297+ if ((bg == bg))
298+ then [h(K, aG), h(G, al), h(I, (aW + bc)), h(H, (aT + bd)), h(J, (aX + be))]
320299 else throw("Strict value is not equal to itself.")
321300 }
322301
323302
324-func bl (bm) = if ((bm == 6))
303+func bi (bj) = if ((bj == 6))
325304 then 1000000
326- else if ((bm == 8))
305+ else if ((bj == 8))
327306 then 100000000
328- else throw(("bad decimals: " + toString(bm)))
307+ else throw(("bad decimals: " + toString(bj)))
329308
330309
331-func bn (aO) = fraction(aO, an, bl(Z))
310+func bk (aM) = fraction(aM, ak, bi(W))
332311
333312
334-func bo (aO) = fraction(aO, bl(Z), an)
313+func bl (aM) = fraction(aM, bi(W), ak)
335314
336315
337-func bp (bq) = if ((bq == 0))
316+func bm (bn) = if ((bn == 0))
338317 then 0
339- else if ((ar > 0))
340- then fraction(bq, aY, ar)
341- else bq
318+ else if ((ao > 0))
319+ then fraction(bn, aW, ao)
320+ else bn
342321
343322
344-func br (bs) = if ((bs == 0))
323+func bo (bp) = if ((bp == 0))
345324 then 0
346- else if ((ar > 0))
347- then fraction(bs, ar, aY)
348- else bs
325+ else if ((ao > 0))
326+ then fraction(bp, ao, aW)
327+ else bp
349328
350329
351-func bt (bs) = if ((bs == 0))
330+func bq (bp) = if ((bp == 0))
352331 then 0
353- else if ((ar > 0))
354- then l(bs, ar, aY)
355- else bs
332+ else if ((ao > 0))
333+ then l(bp, ao, aW)
334+ else bp
356335
357336
358-func bu (bv) = valueOrElse(a(M(bv)), 0)
337+func br (bs) = valueOrElse(a(M(bs)), 0)
359338
360339
361-func bw (bx) = BooleanEntry(Q(bx), true)
340+func bt (bu) = BooleanEntry(Q(bu), true)
362341
363342
364-func by (bx) = if ((aS(bx) > 0))
365- then [bw(bx)]
343+func bv (bu) = if ((aQ(bu) > 0))
344+ then [bt(bu)]
366345 else nil
367346
368347
369-func bz (bv,aO) = {
370- let bA = aS(bv)
371- let bB = bp(bu(bv))
372- let bC = min([bA, bB])
373- let bD = if ((-1 > aO))
348+func bw (bs,aM) = {
349+ let bx = aQ(bs)
350+ let by = bm(br(bs))
351+ let bz = min([bx, by])
352+ let bA = if ((-1 > aM))
374353 then throw("invalid collapse amount")
375- else if (if ((bC == 0))
354+ else if (if ((bz == 0))
376355 then true
377- else (aO == 0))
356+ else (aM == 0))
378357 then throw("nothing to collapse")
379- else if (if ((aO == -1))
358+ else if (if ((aM == -1))
380359 then true
381- else (aO > bC))
382- then bC
383- else aO
384- let bE = bt(bD)
385- $Tuple2((bc(-(bD), -(bD), 0, 0) ++ [j(M(bv), -(bE)), j(F, -(bE)), h(O(bv), (bA - bD)), h(P(bv), aL)]), bD)
360+ else (aM > bz))
361+ then bz
362+ else aM
363+ let bB = bq(bA)
364+ $Tuple2((bb(-(bA), -(bA), 0, 0) ++ [j(M(bs), -(bB)), j(F, -(bB)), h(O(bs), (bx - bA)), h(P(bs), aG)]), bA)
386365 }
387366
388367
389-func bF (N,aO) = {
390- let bG = ab("repay")
391- if ((bG == bG))
368+func bC (N,aM) = {
369+ let bD = Y("repay")
370+ if ((bD == bD))
392371 then {
393- let bH = aS(N)
394- if ((bH == bH))
372+ let bE = aQ(N)
373+ if ((bE == bE))
395374 then {
396- let bI = if ((aO > bH))
397- then $Tuple4(0, -(bH), (aO - bH), [ScriptTransfer(addressFromStringValue(N), (aO - bH), R)])
398- else $Tuple4((bH - aO), -(aO), 0, nil)
399- let bJ = bI._1
400- let bK = bI._2
401- let bL = bI._3
402- let bM = bI._4
403- let bN = (aO - bL)
404- $Tuple2(((bc(0, bK, 0, bL) ++ bM) ++ [h(O(N), bJ), h(P(N), aL)]), bN)
375+ let bF = if ((aM > bE))
376+ then $Tuple4(0, -(bE), (aM - bE), [ScriptTransfer(addressFromStringValue(N), (aM - bE), w)])
377+ else $Tuple4((bE - aM), -(aM), 0, nil)
378+ let bG = bF._1
379+ let bH = bF._2
380+ let bI = bF._3
381+ let bJ = bF._4
382+ let bK = (aM - bI)
383+ $Tuple2(((bb(0, bH, 0, bI) ++ bJ) ++ [h(O(N), bG), h(P(N), aG)]), bK)
405384 }
406385 else throw("Strict value is not equal to itself.")
407386 }
409388 }
410389
411390
412-func bO () = {
413- let bP = as
414- let aF = bP._1
415- let ae = bP._2
416- let aG = bP._3
417- let aH = bP._4
418- ((((((((((((((("ABCD: " + toString(aF)) + ";") + toString(ae)) + ";") + toString(aG)) + ";") + toString(aH)) + ", reserveFactor: ") + toString(at)) + ", collateralFactor: ") + toString(au)) + ", liquidationThreshold: ") + toString(av)) + ", liquidationPenalty: ") + toString(ax))
391+func bL () = {
392+ let aA = getIntegerValue(X, (v + "_APoint"))
393+ let aa = getIntegerValue(X, (v + "_BPoint"))
394+ let aB = getIntegerValue(X, (v + "_CPoint"))
395+ let aC = getIntegerValue(X, (v + "_DPoint"))
396+ ((((((((((((((("ABCD: " + toString(aA)) + ";") + toString(aa)) + ";") + toString(aB)) + ";") + toString(aC)) + ", reserveFactor: ") + toString(ap)) + ", collateralFactor: ") + toString(aq)) + ", liquidationThreshold: ") + toString(ar)) + ", liquidationPenalty: ") + toString(at))
419397 }
420398
421399
422-func bQ () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aY)) + ", storedTotalDeposit: ") + toString(ay)) + ", currentTotalDebt: ") + toString(aV)) + ", storedTotalDebt: ") + toString(aA)) + ", currentTotalReserve: ") + toString(aZ)) + ", storedTotalReserve: ") + toString(az)) + ", currentIndex:") + toString(aL)) + ", storedIndex: ") + toString(aB)) + ", lastUpdateHeight: ") + toString(ap)) + ", utilization: ") + toString(aC)) + ", aTokenCirculation: ") + toString(ar)) + ", aTokenPrice: ") + toString(bp(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aD)) + ", APY: ") + toString(aK))
400+func bM () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(au)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(aw)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(av)) + ", currentIndex:") + toString(aG)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", utilization: ") + toString(ay)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bm(pow(10, 0, W, 0, 0, FLOOR)))) + ", APR: ") + toString(az)) + ", APY: ") + toString(aF))
423401
424402
425-func bR (bx) = {
426- let bS = bu(bx)
427- let bT = X(addressFromStringValue(bx), aq)
428- ((((((((((((((((("currentDebt: " + toString(aS(bx))) + ", storedDebt: ") + toString(valueOrElse(a(O(bx)), 0))) + ", currentDeposit: ") + toString(bp(bS))) + ", aTokenContractBalance: ") + toString(bS)) + ", aTokenWalletBalance: ") + toString(bT)) + ", walletStake: ") + toString(bp(bT))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bx), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bx)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bx)), 0)))
403+func bN (bu) = {
404+ let bO = br(bu)
405+ let bP = R(addressFromStringValue(bu), an)
406+ ((((((((((((((((("currentDebt: " + toString(aQ(bu))) + ", storedDebt: ") + toString(valueOrElse(a(O(bu)), 0))) + ", currentDeposit: ") + toString(bm(bO))) + ", aTokenContractBalance: ") + toString(bO)) + ", aTokenWalletBalance: ") + toString(bP)) + ", walletStake: ") + toString(bm(bP))) + ", assetWalletBalance: ") + toString(R(addressFromStringValue(bu), w))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bu)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bu)), 0)))
429407 }
430408
431409
432-func bU () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(ay)) + ", storedTotalDebt: ") + toString(aA)) + ", storedTotalReserve: ") + toString(az)) + ", storedIndex: ") + toString(aB)) + ", lastUpdateHeight: ") + toString(ap)) + ", currentTotalDeposit: ") + toString(aY)) + ", currentTotalDebt: ") + toString(aV)) + ", currentTotalReserve: ") + toString(aZ)) + ", currentIndex: ") + toString(aL)) + ", currentHeight: ") + toString(ao)) + ", aTokenCirculation: ") + toString(ar)) + ", aTokenPrice: ") + toString(bp(pow(10, 0, Z, 0, 0, FLOOR))))
410+func bQ () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(au)) + ", storedTotalDebt: ") + toString(aw)) + ", storedTotalReserve: ") + toString(av)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aG)) + ", currentHeight: ") + toString(al)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bm(pow(10, 0, W, 0, 0, FLOOR))))
433411
434412
435-func bV (bx) = {
436- let bW = bu(bx)
437- let bX = bp(bW)
438- let bA = aS(bx)
439- if ((ao == ap))
440- then $Tuple4(ay, aA, bX, bA)
441- else $Tuple4(aY, aV, bX, bA)
413+func bR (bu) = {
414+ let bS = br(bu)
415+ let bT = bm(bS)
416+ let bx = aQ(bu)
417+ if ((al == am))
418+ then $Tuple4(au, aw, bT, bx)
419+ else $Tuple4(aW, aT, bT, bx)
442420 }
443421
444422
445-@Callable(ag)
446-func getReserveDivsInfo () = $Tuple2(nil, $Tuple2(aZ, T))
423+func bU (ad,bu,aM,bV) = {
424+ let bW = ((au + av) - aw)
425+ let bD = if (if (if (ac(ad))
426+ then aL(aM, bW, "funds in use")
427+ else false)
428+ then e((-1 > aM), "invalid amount")
429+ else false)
430+ then Y("withdraw")
431+ else false
432+ if ((bD == bD))
433+ then {
434+ let bX = if ((aM == -1))
435+ then {
436+ let bS = br(bu)
437+ $Tuple2(bS, bm(bS))
438+ }
439+ else $Tuple2(bq(aM), aM)
440+ let bB = bX._1
441+ let bY = bX._2
442+ $Tuple2((bb(-(bY), 0, 0, bY) ++ [ScriptTransfer(if (bV)
443+ then ab
444+ else addressFromStringValue(bu), bY, w), j(M(bu), -(bB)), j(F, -(bB))]), bY)
445+ }
446+ else throw("Strict value is not equal to itself.")
447+ }
448+
449+
450+@Callable(ad)
451+func getReserveDivsInfo () = $Tuple2(nil, $Tuple2(aY, v))
447452
448453
449454
450-@Callable(ag)
451-func getCurrentTotals (bx) = $Tuple2(nil, bV(bx))
455+@Callable(ad)
456+func getCurrentTotals (bu) = $Tuple2(nil, bR(bu))
452457
453458
454459
455-@Callable(ag)
456-func getCurrentTotals2 (bY,bZ) = {
457- let ca = bV(bY)
458- let cb = ca._1
459- let cc = ca._2
460- let cd = ca._3
461- let ce = ca._4
462- let cf = bV(bZ)
463- let cg = cf._1
464- let ch = cf._2
465- let ci = cf._3
466- let cj = cf._4
467- $Tuple2(nil, $Tuple6(cb, cc, cd, ce, ci, cj))
460+@Callable(ad)
461+func getCurrentTotals2 (bZ,ca) = {
462+ let cb = bR(bZ)
463+ let cc = cb._1
464+ let cd = cb._2
465+ let ce = cb._3
466+ let cf = cb._4
467+ let cg = bR(ca)
468+ let ch = cg._1
469+ let ci = cg._2
470+ let cj = cg._3
471+ let ck = cg._4
472+ $Tuple2(nil, $Tuple6(cc, cd, ce, cf, cj, ck))
468473 }
469474
470475
471476
472-@Callable(ag)
473-func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bO()) + ", ") + bQ()))
477+@Callable(ad)
478+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bL()) + ", ") + bM()))
474479
475480
476481
477-@Callable(ag)
478-func adviseUser (bx) = {
479- let ck = bn(aV)
480- let cl = bn(aY)
481- let cm = valueOrElse(getBoolean(this, Q(bx)), true)
482- let cn = if (cm)
483- then cl
482+@Callable(ad)
483+func adviseUser (bu) = {
484+ let cl = bk(aT)
485+ let cm = bk(aW)
486+ let cn = valueOrElse(getBoolean(this, Q(bu)), true)
487+ let co = if (cn)
488+ then cm
484489 else 0
485- let co = min([ck, cn])
486- let cp = l(co, aw, t)
487- let cq = if ((ck > cn))
490+ let cp = min([cl, co])
491+ let cq = l(cp, as, t)
492+ let cr = if ((cl > co))
488493 then 0
489- else fraction((cn - ck), au, t)
490- let cr = if ((ck > cn))
491- then (fraction((ck - cn), t, av) + cp)
492- else cp
493- let cs = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(ck)) + ", currentDepositUsd: ") + toString(cl)) + ", bp: ") + toString(cq)) + ", bpu: ") + toString(cr))
494- $Tuple2(nil, ((cs + ", ") + bR(bx)))
494+ else fraction((co - cl), aq, t)
495+ let cs = if ((cl > co))
496+ then (fraction((cl - co), t, ar) + cq)
497+ else cq
498+ let ct = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(cl)) + ", currentDepositUsd: ") + toString(cm)) + ", bp: ") + toString(cr)) + ", bpu: ") + toString(cs))
499+ $Tuple2(nil, ((ct + ", ") + bN(bu)))
495500 }
496501
497502
498503
499-@Callable(ag)
500-func addInterest () = if ((ag.payments[0].assetId != R))
504+@Callable(ad)
505+func addInterest () = if ((ad.payments[0].assetId != w))
501506 then throw("can't add interest with unrelated token")
502- else bc(ag.payments[0].amount, 0, 0, 0)
507+ else bb(ad.payments[0].amount, 0, 0, 0)
503508
504509
505510
506-@Callable(ag)
507-func addToReserve () = if ((ag.payments[0].assetId != R))
511+@Callable(ad)
512+func addToReserve () = if ((ad.payments[0].assetId != w))
508513 then throw("can't add interest with unrelated token")
509- else bc(0, 0, ag.payments[0].amount, 0)
514+ else bb(0, 0, ad.payments[0].amount, 0)
510515
511516
512517
513-@Callable(ag)
514-func withdrawFromReserve (bD) = {
515- let bG = ah(ag)
516- if ((bG == bG))
518+@Callable(ad)
519+func withdrawFromReserve (bA) = {
520+ let bD = ae(ad)
521+ if ((bD == bD))
517522 then {
518- let ct = if ((bD == -1))
519- then aZ
520- else bD
521- $Tuple2((bc(0, 0, -(ct), ct) ++ [ScriptTransfer(ag.caller, ct, R)]), ct)
523+ let cu = if ((bA == -1))
524+ then aY
525+ else bA
526+ $Tuple2((bb(0, 0, -(cu), cu) ++ [ScriptTransfer(ad.caller, cu, w)]), cu)
522527 }
523528 else throw("Strict value is not equal to itself.")
524529 }
525530
526531
527532
528-@Callable(ag)
533+@Callable(ad)
529534 func forceUpdate () = {
530- let cu = getStringValue(aa, "admin")
531- if ((toString(ag.caller) != cu))
535+ let cv = valueOrErrorMessage(getString(X, "admin"), "reserve:no admin in config")
536+ if ((toString(ad.caller) != cv))
532537 then throw("only admin can do")
533- else bc(0, 0, 0, 0)
538+ else bb(0, 0, 0, 0)
534539 }
535540
536541
537542
538-@Callable(ag)
539-func initialize (cv,cw,cx,cy,cz,cA) = {
540- let bG = if (ak)
541- then aj(cx)
543+@Callable(ad)
544+func initialize (cw,cx,cy,cz,cA) = {
545+ let bD = if (ah)
546+ then ag(cx)
542547 else false
543- if ((bG == bG))
548+ if ((bD == bD))
544549 then {
545550 let cB = Issue(cy, cz, 0, cA, true)
546-[cB, k(C, cw), h(L, cA), k(E, cy), k(u, cx), k(B, cv), k(D, toBase58String(calculateAssetId(cB))), h(G, ao)]
551+[cB, h(L, cA), k(E, cy), k(u, cx), k(C, cw), k(D, toBase58String(calculateAssetId(cB)))]
547552 }
548553 else throw("Strict value is not equal to itself.")
549554 }
550555
551556
552557
553-@Callable(ag)
554-func userDepositUSD (bv) = $Tuple2(nil, bn(bp(bu(bv))))
558+@Callable(ad)
559+func initialize2 () = if ((ad.caller != this))
560+ then throw("only self can continue")
561+ else [h(G, al)]
555562
556563
557564
558-@Callable(ag)
559-func userDebtUSD (bv) = $Tuple2(nil, bn(aS(bv)))
565+@Callable(ad)
566+func userDepositUSD (bs) = $Tuple2(nil, bk(bm(br(bs))))
560567
561568
562569
563-@Callable(ag)
564-func userBalance (bv) = {
565- let bW = bu(bv)
566- let bX = bp(bW)
567- let bA = aS(bv)
568- $Tuple2(nil, $Tuple6(bW, bX, bn(bX), bA, bn(bA), valueOrElse(getBoolean(this, Q(bv)), true)))
570+@Callable(ad)
571+func userDebtUSD (bs) = $Tuple2(nil, bk(aQ(bs)))
572+
573+
574+
575+@Callable(ad)
576+func userBalance (bs) = {
577+ let bS = br(bs)
578+ let bT = bm(bS)
579+ let bx = aQ(bs)
580+ $Tuple2(nil, $Tuple6(bS, bT, bk(bT), bx, bk(bx), valueOrElse(getBoolean(this, Q(bs)), true)))
569581 }
570582
571583
572584
573-@Callable(ag)
574-func userDebt (bv) = {
575- let bA = aS(bv)
576- let cC = bn(bA)
577- $Tuple2(nil, $Tuple2(bA, cC))
585+@Callable(ad)
586+func userDebt (bs) = {
587+ let bx = aQ(bs)
588+ let cC = bk(bx)
589+ $Tuple2(nil, $Tuple2(bx, cC))
578590 }
579591
580592
581593
582-@Callable(ag)
583-func assetUsdValue (bs) = $Tuple2(nil, bn(bs))
594+@Callable(ad)
595+func assetUsdValue (bp) = $Tuple2(nil, bk(bp))
584596
585597
586598
587-@Callable(ag)
599+@Callable(ad)
588600 func repayFor (N) = {
589- let bG = af(ag)
590- if ((bG == bG))
591- then bF(N, ba(ag, R))
601+ let bD = ac(ad)
602+ if ((bD == bD))
603+ then bC(N, aZ(ad, w))
592604 else throw("Strict value is not equal to itself.")
593605 }
594606
595607
596608
597-@Callable(ag)
609+@Callable(ad)
598610 func depositFor (cD,cE) = {
599- let bG = if (af(ag))
600- then ab("deposit")
611+ let bD = if (ac(ad))
612+ then Y("deposit")
601613 else false
602- if ((bG == bG))
603- then if (if ((aS(cD) > 0))
614+ if ((bD == bD))
615+ then if (if ((aQ(cD) > 0))
604616 then !(cE)
605617 else false)
606618 then throw("can't disable use as collateral for asset with open debt")
607619 else {
608- let aO = ba(ag, R)
609- let bq = br(aO)
610- (bc(aO, 0, 0, 0) ++ [j(F, bq), j(M(cD), bq), BooleanEntry(Q(cD), cE)])
620+ let aM = aZ(ad, w)
621+ let bn = bo(aM)
622+ (bb(aM, 0, 0, 0) ++ [j(F, bn), j(M(cD), bn), BooleanEntry(Q(cD), cE)])
611623 }
612624 else throw("Strict value is not equal to itself.")
613625 }
614626
615627
616628
617-@Callable(ag)
618-func withdrawFor (bv,aO) = {
619- let cF = ((ay + az) - aA)
620- let bG = if (if (if (af(ag))
621- then aN(aO, cF, "funds in use")
622- else false)
623- then e((-1 > aO), "invalid amount")
624- else false)
625- then ab("withdraw")
629+@Callable(ad)
630+func withdrawFor (bs,aM) = bU(ad, bs, aM, false)
631+
632+
633+
634+@Callable(ad)
635+func withdrawToMain (bu,aM) = if ((aM != -1))
636+ then throw("reserve: withdrawToMain amount -1 only")
637+ else bU(ad, bu, aM, true)
638+
639+
640+
641+@Callable(ad)
642+func replenishWithAtokenFor (bu) = {
643+ let bD = if (ac(ad))
644+ then Y("atokens")
626645 else false
627- if ((bG == bG))
646+ if ((bD == bD))
628647 then {
629- let cG = if ((aO == -1))
630- then {
631- let bW = bu(bv)
632- $Tuple2(bW, bp(bW))
633- }
634- else $Tuple2(bt(aO), aO)
635- let bE = cG._1
636- let cH = cG._2
637- $Tuple2((bc(-(cH), 0, 0, cH) ++ [ScriptTransfer(addressFromStringValue(bv), cH, R), j(M(bv), -(bE)), j(F, -(bE))]), cH)
648+ let bn = aZ(ad, an)
649+ $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(bu), bn), Burn(an, bn)]) ++ bv(bu)), bm(bn))
638650 }
639651 else throw("Strict value is not equal to itself.")
640652 }
641653
642654
643655
644-@Callable(ag)
645-func replenishWithAtokenFor (bx) = {
646- let bG = if (af(ag))
647- then ab("atokens")
656+@Callable(ad)
657+func borrowFor (bs,cF) = {
658+ let bD = if (if (ac(ad))
659+ then aL(cF, (au - aw), "too much borrow requested")
660+ else false)
661+ then Y("borrow")
648662 else false
649- if ((bG == bG))
663+ if ((bD == bD))
650664 then {
651- let bq = ba(ag, aq)
652- $Tuple2(((bc(0, 0, 0, 0) ++ [j(M(bx), bq), Burn(aq, bq)]) ++ by(bx)), bp(bq))
665+ let bE = aQ(bs)
666+ let bG = (bE + cF)
667+ (bb(0, cF, 0, cF) ++ [h(O(bs), bG), bt(bs), h(P(bs), aG), ScriptTransfer(addressFromStringValue(bs), cF, w)])
653668 }
654669 else throw("Strict value is not equal to itself.")
655670 }
656671
657672
658673
659-@Callable(ag)
660-func borrowFor (bv,cI) = {
661- let bG = if (if (af(ag))
662- then aN(cI, (ay - aA), "too much borrow requested")
674+@Callable(ad)
675+func mintAtokenFor (bs,cG) = {
676+ let cH = br(bs)
677+ let aM = if ((cG == -1))
678+ then cH
679+ else cG
680+ let bD = if (if (if (ac(ad))
681+ then Y("atokens")
663682 else false)
664- then ab("borrow")
683+ then e((-1 > cG), "invalid amountToMint")
684+ else false)
685+ then e((aM > cH), ("Trying to mint more than available, max: " + toString(cH)))
665686 else false
666- if ((bG == bG))
687+ if ((bD == bD))
688+ then $Tuple2((bb(0, 0, 0, 0) ++ [j(M(bs), -(aM)), Reissue(an, aM, true), ScriptTransfer(addressFromStringValue(bs), aM, an)]), bm(aM))
689+ else throw("Strict value is not equal to itself.")
690+ }
691+
692+
693+
694+@Callable(ad)
695+func redeemAtokensFor (bu) = {
696+ let bD = if (ac(ad))
697+ then Y("atokens")
698+ else false
699+ if ((bD == bD))
667700 then {
668- let bH = aS(bv)
669- let bJ = (bH + cI)
670- (bc(0, cI, 0, cI) ++ [h(O(bv), bJ), bw(bv), h(P(bv), aL), ScriptTransfer(addressFromStringValue(bv), cI, R)])
701+ let bn = aZ(ad, an)
702+ let cI = bm(bn)
703+ $Tuple2((bb(-(cI), 0, 0, cI) ++ [ScriptTransfer(addressFromStringValue(bu), cI, w), j(F, -(bn)), Burn(an, bn)]), cI)
671704 }
672705 else throw("Strict value is not equal to itself.")
673706 }
674707
675708
676709
677-@Callable(ag)
678-func mintAtokenFor (bv,cJ) = {
679- let cK = bu(bv)
680- let aO = if ((cJ == -1))
681- then cK
682- else cJ
683- let bG = if (if (if (af(ag))
684- then ab("atokens")
685- else false)
686- then e((-1 > cJ), "invalid amountToMint")
687- else false)
688- then e((aO > cK), ("Trying to mint more than available, max: " + toString(cK)))
710+@Callable(ad)
711+func transferATokensFor (cJ,cK,cL) = {
712+ let bD = if (ac(ad))
713+ then Y("transfer_debt")
689714 else false
690- if ((bG == bG))
691- then $Tuple2((bc(0, 0, 0, 0) ++ [j(M(bv), -(aO)), Reissue(aq, aO, true), ScriptTransfer(addressFromStringValue(bv), aO, aq)]), bp(aO))
692- else throw("Strict value is not equal to itself.")
693- }
694-
695-
696-
697-@Callable(ag)
698-func redeemAtokensFor (bx) = {
699- let bG = if (af(ag))
700- then ab("atokens")
701- else false
702- if ((bG == bG))
715+ if ((bD == bD))
703716 then {
704- let bq = ba(ag, aq)
705- let cL = bp(bq)
706- $Tuple2((bc(-(cL), 0, 0, cL) ++ [ScriptTransfer(addressFromStringValue(bx), cL, R), j(F, -(bq)), Burn(aq, bq)]), cL)
717+ let cM = bl(cL)
718+ let bS = bo(cM)
719+ let cN = br(cJ)
720+ if ((bS > cN))
721+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cL)) + " transfer.assets: ") + toString(cM)) + " transfer.atokens: ") + toString(bS)) + " from.atokens: ") + toString(cN)) + " at ") + toString(this)))
722+ else $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(cJ), -(bS)), j(M(cK), bS)]) ++ bv(cK)), bm(bS))
707723 }
708724 else throw("Strict value is not equal to itself.")
709725 }
710726
711727
712728
713-@Callable(ag)
714-func transferATokensFor (cM,cN,cO) = {
715- let bG = if (af(ag))
716- then ab("transfer_debt")
729+@Callable(ad)
730+func transferDebtFor (cJ,cK,aM) = {
731+ let bD = if (ac(ad))
732+ then Y("transfer_debt")
717733 else false
718- if ((bG == bG))
719- then {
720- let cP = bo(cO)
721- let bW = br(cP)
722- let cQ = bu(cM)
723- if ((bW > cQ))
724- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cO)) + " transfer.assets: ") + toString(cP)) + " transfer.atokens: ") + toString(bW)) + " from.atokens: ") + toString(cQ)) + " at ") + toString(this)))
725- else $Tuple2(((bc(0, 0, 0, 0) ++ [j(M(cM), -(bW)), j(M(cN), bW)]) ++ by(cN)), bp(bW))
726- }
734+ if ((bD == bD))
735+ then $Tuple2((bb(0, 0, 0, 0) ++ [h(O(cJ), (aQ(cJ) - aM)), h(O(cK), (aQ(cK) + aM)), h(P(cJ), aG), h(P(cK), aG), bt(cK)]), aM)
727736 else throw("Strict value is not equal to itself.")
728737 }
729738
730739
731740
732-@Callable(ag)
733-func transferDebtFor (cM,cN,aO) = {
734- let bG = if (af(ag))
735- then ab("transfer_debt")
741+@Callable(ad)
742+func disableUseAsCollateralFor (bs) = {
743+ let bD = if (ac(ad))
744+ then Y("use_as_col")
736745 else false
737- if ((bG == bG))
738- then $Tuple2((bc(0, 0, 0, 0) ++ [h(O(cM), (aS(cM) - aO)), h(O(cN), (aS(cN) + aO)), h(P(cM), aL), h(P(cN), aL), bw(cN)]), aO)
746+ if ((bD == bD))
747+ then if ((aQ(bs) > 0))
748+ then throw("can't disable collateral for asset with open debt")
749+ else (bb(0, 0, 0, 0) ++ [BooleanEntry(Q(bs), false)])
739750 else throw("Strict value is not equal to itself.")
740751 }
741752
742753
743754
744-@Callable(ag)
745-func disableUseAsCollateralFor (bv) = {
746- let bG = if (af(ag))
747- then ab("use_as_col")
748- else false
749- if ((bG == bG))
750- then if ((aS(bv) > 0))
751- then throw("can't disable collateral for asset with open debt")
752- else (bc(0, 0, 0, 0) ++ [BooleanEntry(Q(bv), false)])
755+@Callable(ad)
756+func enableUseAsCollateral () = {
757+ let bD = Y("use_as_col")
758+ if ((bD == bD))
759+ then (bb(0, 0, 0, 0) ++ [bt(toString(ad.caller))])
753760 else throw("Strict value is not equal to itself.")
754761 }
755762
756763
757764
758-@Callable(ag)
759-func enableUseAsCollateral () = {
760- let bG = ab("use_as_col")
761- if ((bG == bG))
762- then (bc(0, 0, 0, 0) ++ [bw(toString(ag.caller))])
765+@Callable(ad)
766+func collapseFor (bu) = {
767+ let bD = if (ac(ad))
768+ then Y("force_collapse")
769+ else false
770+ if ((bD == bD))
771+ then bw(bu, -1)
763772 else throw("Strict value is not equal to itself.")
764773 }
765774
766775
767776
768-@Callable(ag)
769-func collapseFor (bx) = {
770- let bG = if (af(ag))
771- then ab("force_collapse")
777+@Callable(ad)
778+func collapseForAmount (bu,aM) = {
779+ let bD = if (ac(ad))
780+ then Y("collapse")
772781 else false
773- if ((bG == bG))
774- then bz(bx, -1)
775- else throw("Strict value is not equal to itself.")
776- }
777-
778-
779-
780-@Callable(ag)
781-func collapseForAmount (bx,aO) = {
782- let bG = if (af(ag))
783- then ab("collapse")
784- else false
785- if ((bG == bG))
786- then bz(bx, aO)
782+ if ((bD == bD))
783+ then bw(bu, aM)
787784 else throw("Strict value is not equal to itself.")
788785 }
789786
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
10-func d (b) = value(getString(this, b))
10+func d (b) = valueOrErrorMessage(getString(this, b), ((("no string value for key " + b) + " at address ") + toString(this)))
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
47-let v = "main"
47+let v = valueOrErrorMessage(c(u), "no assetId")
4848
49-let w = (d(u) + "_ReserveFactor")
49+let w = if ((v == "WAVES"))
50+ then unit
51+ else fromBase58String(v)
5052
51-let x = (d(u) + "_CollateralFactor")
53+let x = (v + "_ReserveFactor")
5254
53-let y = (getStringValue(u) + "_LiquidationThreshold")
55+let y = (v + "_CollateralFactor")
5456
55-let z = "account_health_overlap"
57+let z = (v + "_LiquidationThreshold")
5658
57-let A = (getStringValue(u) + "_LiquidationPenalty")
59+let A = "account_health_overlap"
5860
59-let B = "configAddress"
61+let B = (v + "_LiquidationPenalty")
6062
61-let C = "oracleAddress"
63+let C = "configAddress"
6264
6365 let D = "aTokenId"
6466
6567 let E = "aTokenName"
6668
6769 let F = "aTokenCirculation"
6870
6971 let G = "lastUpdateHeight"
7072
7173 let H = "totalBorrow"
7274
7375 let I = "totalDeposit"
7476
7577 let J = "totalReserve"
7678
7779 let K = "storedIndex"
7880
7981 let L = "aTokenDecimals"
8082
8183 func M (N) = (N + "_aTokenBalance")
8284
8385
8486 func O (N) = (N + "_debt")
8587
8688
8789 func P (N) = (N + "_index")
8890
8991
9092 func Q (N) = (N + "_useAsCollateral")
9193
9294
93-let R = {
94- let S = valueOrErrorMessage(c(u), "no assetId")
95- if ((S == "WAVES"))
96- then unit
97- else fromBase58String(S)
98- }
99-
100-let T = {
101- let U = R
102- if ($isInstanceOf(U, "ByteVector"))
95+func R (S,w) = {
96+ let T = w
97+ if ($isInstanceOf(T, "ByteVector"))
10398 then {
104- let V = U
105- toBase58String(V)
99+ let U = T
100+ assetBalance(S, U)
106101 }
107- else if ($isInstanceOf(U, "Unit"))
102+ else if ($isInstanceOf(T, "Unit"))
108103 then {
109- let W = U
110- "WAVES"
111- }
112- else throw("Match error")
113- }
114-
115-func X (Y,R) = {
116- let U = R
117- if ($isInstanceOf(U, "ByteVector"))
118- then {
119- let V = U
120- assetBalance(Y, V)
121- }
122- else if ($isInstanceOf(U, "Unit"))
123- then {
124- let W = U
125- wavesBalance(Y).available
104+ let V = T
105+ wavesBalance(S).available
126106 }
127107 else throw("Match error")
128108 }
129109
130110
131-let Z = valueOrErrorMessage(a(L), "no assetDecimals")
111+let W = valueOrErrorMessage(a(L), "no assetDecimals")
132112
133-let aa = valueOrErrorMessage(addressFromString(valueOrErrorMessage(c(B), "no configAddress")), "invalid config address")
113+let X = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, C), "reserve: no configAddress")), "invalid config address")
134114
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"))
115+func Y (Z) = {
116+ let T = invoke(X, "opAllowed", [v, Z], nil)
117+ if ($isInstanceOf(T, "Boolean"))
139118 then {
140- let ae = U
141- if (ae)
119+ let aa = T
120+ if (aa)
142121 then true
143122 else throw("not allowed")
144123 }
145124 else throw("opAllowed: unexpected result type")
146125 }
147126
148127
149-func af (ag) = if ((ag.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, v), "no main in config")), "invalid main address")))
128+let ab = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(X, "main"), "no main in config")), "invalid main address")
129+
130+func ac (ad) = if ((ad.caller != ab))
150131 then throw("only main can do")
151132 else true
152133
153134
154-func ah (ag) = {
155- let ai = valueOrErrorMessage(getString(aa, "divAdmins"), "no div admins")
156- if (!(contains(ai, toString(ag.caller))))
135+func ae (ad) = {
136+ let af = valueOrErrorMessage(getString(X, "divAdmins"), "no div admins")
137+ if (!(contains(af, toString(ad.caller))))
157138 then throw("only div admin can do")
158139 else true
159140 }
160141
161142
162-func aj (i) = if (if ((i != "WAVES"))
143+func ag (i) = if (if ((i != "WAVES"))
163144 then (fromBase58String(i) == fromBase58String(""))
164145 else false)
165146 then throw("invalid assetId")
166147 else true
167148
168149
169-let ak = e(isDefined(c(u)), "already initialized")
150+let ah = e(isDefined(c(u)), "already initialized")
170151
171-let al = {
172- let U = c(C)
173- if ($isInstanceOf(U, "String"))
152+let ai = {
153+ let T = getString(X, "oracle_address")
154+ if ($isInstanceOf(T, "String"))
174155 then {
175- let am = U
176- addressFromString(am)
156+ let aj = T
157+ addressFromString(aj)
177158 }
178159 else unit
179160 }
180161
181-let an = {
182- let U = invoke(valueOrErrorMessage(al, "no oracle"), "price", [d(u)], nil)
183- if ($isInstanceOf(U, "Int"))
162+let ak = {
163+ let T = invoke(valueOrErrorMessage(ai, "no oracle"), "price", [v], nil)
164+ if ($isInstanceOf(T, "Int"))
184165 then {
185- let ag = U
186- ag
166+ let ad = T
167+ ad
187168 }
188169 else throw("bad oracle data")
189170 }
190171
191-let ao = height
172+let al = height
192173
193-let ap = valueOrErrorMessage(a(G), "no lastUpdateHeight")
174+let am = valueOrErrorMessage(a(G), "no lastUpdateHeight")
194175
195-let aq = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
176+let an = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
196177
197-let ar = valueOrElse(a(F), 0)
178+let ao = valueOrElse(a(F), 0)
198179
199-let as = {
200- let S = d(u)
201- $Tuple4(getIntegerValue(aa, (S + "_APoint")), getIntegerValue(aa, (S + "_BPoint")), getIntegerValue(aa, (S + "_CPoint")), getIntegerValue(aa, (S + "_DPoint")))
180+let ap = valueOrErrorMessage(getInteger(X, x), "no reserveFactor")
181+
182+let aq = valueOrErrorMessage(getInteger(X, y), "no collateralFactor")
183+
184+let ar = valueOrErrorMessage(getInteger(X, z), "no liquidationThreshold")
185+
186+let as = valueOrErrorMessage(getInteger(X, A), "no overlapCharge")
187+
188+let at = valueOrErrorMessage(getInteger(X, B), "no liquidationPenalty")
189+
190+let au = valueOrElse(a(I), 0)
191+
192+let av = valueOrElse(a(J), 0)
193+
194+let aw = valueOrElse(a(H), 0)
195+
196+let ax = valueOrElse(a(K), s)
197+
198+let ay = if ((au > 0))
199+ then fraction(aw, t, au)
200+ else 0
201+
202+let az = {
203+ let aA = getIntegerValue(X, (v + "_APoint"))
204+ let aa = getIntegerValue(X, (v + "_BPoint"))
205+ let aB = getIntegerValue(X, (v + "_CPoint"))
206+ let aC = getIntegerValue(X, (v + "_DPoint"))
207+ let aD = (fraction((aA - aB), ay, -(aa)) + aA)
208+ let aE = (fraction((aB - aC), (ay - aa), (aa - t)) + aB)
209+ if ((ay == 0))
210+ then aA
211+ else if ((ay == aa))
212+ then aB
213+ else if (if ((aa > ay))
214+ then true
215+ else (aa == t))
216+ then aD
217+ else aE
202218 }
203219
204-let at = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
220+let aF = if ((au == 0))
221+ then 0
222+ else fraction(fraction(aw, az, au), (t - ap), t)
205223
206-let au = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
224+let aG = if ((al == am))
225+ then ax
226+ else {
227+ let aH = l(az, s, (r * t))
228+ l(ax, (s + (aH * (al - am))), s)
229+ }
207230
208-let av = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
231+let aI = valueOrElse(getBoolean(X, ("staking_enabled_" + v)), false)
209232
210-let aw = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
211-
212-let ax = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
213-
214-let ay = valueOrElse(a(I), 0)
215-
216-let az = valueOrElse(a(J), 0)
217-
218-let aA = valueOrElse(a(H), 0)
219-
220-let aB = valueOrElse(a(K), s)
221-
222-let aC = if ((ay > 0))
223- then fraction(aA, t, ay)
224- else 0
225-
226-let aD = {
227- let aE = as
228- let aF = aE._1
229- let ae = aE._2
230- let aG = aE._3
231- let aH = aE._4
232- let aI = (fraction((aF - aG), aC, -(ae)) + aF)
233- let aJ = (fraction((aG - aH), (aC - ae), (ae - t)) + aG)
234- if ((aC == 0))
235- then aF
236- else if ((aC == ae))
237- then aG
238- else if (if ((ae > aC))
239- then true
240- else (ae == t))
241- then aI
242- else aJ
233+let aJ = {
234+ let T = w
235+ if ($isInstanceOf(T, "ByteVector"))
236+ then {
237+ let aK = T
238+ assetBalance(this, aK)
239+ }
240+ else wavesBalance(this).available
243241 }
244242
245-let aK = if ((ay == 0))
246- then 0
247- else fraction(fraction(aA, aD, ay), (t - at), t)
248-
249-let aL = if ((ao == ap))
250- then aB
251- else {
252- let aM = l(aD, s, (r * t))
253- l(aB, (s + (aM * (ao - ap))), s)
254- }
255-
256-func aN (aO,aP,aQ) = if ((aO > aP))
257- then throw(("not enough liquidity: " + aQ))
243+func aL (aM,aN,aO) = if ((aM > aN))
244+ then throw(("not enough liquidity: " + aO))
258245 else true
259246
260247
261-func aR (N) = valueOrElse(a(O(N)), 0)
248+func aP (N) = valueOrElse(a(O(N)), 0)
262249
263250
264-func aS (N) = {
265- let aT = aR(N)
266- if ((aT == 0))
251+func aQ (N) = {
252+ let aR = aP(N)
253+ if ((aR == 0))
267254 then 0
268255 else {
269- let aU = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
270- fraction(aT, aL, aU)
256+ let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
257+ fraction(aR, aG, aS)
271258 }
272259 }
273260
274261
275-let aV = fraction(aA, aL, aB)
262+let aT = fraction(aw, aG, ax)
276263
277-let aW = (aV - aA)
264+let aU = (aT - aw)
278265
279-let aX = fraction(aW, (t - at), t)
266+let aV = fraction(aU, (t - ap), t)
280267
281-let aY = (ay + aX)
268+let aW = (au + aV)
282269
283-let aZ = ((az + aW) - aX)
270+let aX = ((av + aU) - aV)
284271
285-func ba (ag,R) = {
286- let bb = ag.payments[0].amount
287- if ((0 >= bb))
288- then throw("Payment is less than min allowed amount")
289- else if ((ag.payments[0].assetId != R))
290- then throw(("bad asset attached: required " + T))
291- else bb
272+let aY = if (aI)
273+ then aX
274+ else min([aJ, aX])
275+
276+func aZ (ad,w) = {
277+ let ba = ad.payments[0].amount
278+ if ((0 >= ba))
279+ then throw(("Payment is less than min allowed amount: " + toString(ba)))
280+ else if ((ad.payments[0].assetId != w))
281+ then throw((" bad asset attached: required " + v))
282+ else ba
292283 }
293284
294285
295-func bc (bd,be,bf,bg) = {
296- let bh = {
297- let U = R
298- if ($isInstanceOf(U, "ByteVector"))
299- then {
300- let ad = U
301- assetBalance(this, ad)
286+func bb (bc,bd,be,bf) = {
287+ let bg = if ((aJ == bf))
288+ then unit
289+ else if (!(aI))
290+ then unit
291+ else {
292+ let bh = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(X, ("staking_config_" + v)), ("no staking address for " + v))), ("bad staking address for " + v))
293+ if ((aJ > bf))
294+ then invoke(bh, "put", nil, [AttachedPayment(w, (aJ - bf))])
295+ else invoke(bh, "get", [(bf - aJ)], nil)
302296 }
303- else wavesBalance(this).available
304- }
305- let bi = if ((bh == bg))
306- then unit
307- else {
308- let bj = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
309- if (!(bj))
310- then unit
311- else {
312- let bk = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, ("staking_config_" + T)), ("no staking address for " + T))), ("bad staking address for " + T))
313- if ((bh > bg))
314- then invoke(bk, "put", nil, [AttachedPayment(R, (bh - bg))])
315- else invoke(bk, "get", [(bg - bh)], nil)
316- }
317- }
318- if ((bi == bi))
319- then [h(K, aL), h(G, ao), h(I, (aY + bd)), h(H, (aV + be)), h(J, (aZ + bf))]
297+ if ((bg == bg))
298+ then [h(K, aG), h(G, al), h(I, (aW + bc)), h(H, (aT + bd)), h(J, (aX + be))]
320299 else throw("Strict value is not equal to itself.")
321300 }
322301
323302
324-func bl (bm) = if ((bm == 6))
303+func bi (bj) = if ((bj == 6))
325304 then 1000000
326- else if ((bm == 8))
305+ else if ((bj == 8))
327306 then 100000000
328- else throw(("bad decimals: " + toString(bm)))
307+ else throw(("bad decimals: " + toString(bj)))
329308
330309
331-func bn (aO) = fraction(aO, an, bl(Z))
310+func bk (aM) = fraction(aM, ak, bi(W))
332311
333312
334-func bo (aO) = fraction(aO, bl(Z), an)
313+func bl (aM) = fraction(aM, bi(W), ak)
335314
336315
337-func bp (bq) = if ((bq == 0))
316+func bm (bn) = if ((bn == 0))
338317 then 0
339- else if ((ar > 0))
340- then fraction(bq, aY, ar)
341- else bq
318+ else if ((ao > 0))
319+ then fraction(bn, aW, ao)
320+ else bn
342321
343322
344-func br (bs) = if ((bs == 0))
323+func bo (bp) = if ((bp == 0))
345324 then 0
346- else if ((ar > 0))
347- then fraction(bs, ar, aY)
348- else bs
325+ else if ((ao > 0))
326+ then fraction(bp, ao, aW)
327+ else bp
349328
350329
351-func bt (bs) = if ((bs == 0))
330+func bq (bp) = if ((bp == 0))
352331 then 0
353- else if ((ar > 0))
354- then l(bs, ar, aY)
355- else bs
332+ else if ((ao > 0))
333+ then l(bp, ao, aW)
334+ else bp
356335
357336
358-func bu (bv) = valueOrElse(a(M(bv)), 0)
337+func br (bs) = valueOrElse(a(M(bs)), 0)
359338
360339
361-func bw (bx) = BooleanEntry(Q(bx), true)
340+func bt (bu) = BooleanEntry(Q(bu), true)
362341
363342
364-func by (bx) = if ((aS(bx) > 0))
365- then [bw(bx)]
343+func bv (bu) = if ((aQ(bu) > 0))
344+ then [bt(bu)]
366345 else nil
367346
368347
369-func bz (bv,aO) = {
370- let bA = aS(bv)
371- let bB = bp(bu(bv))
372- let bC = min([bA, bB])
373- let bD = if ((-1 > aO))
348+func bw (bs,aM) = {
349+ let bx = aQ(bs)
350+ let by = bm(br(bs))
351+ let bz = min([bx, by])
352+ let bA = if ((-1 > aM))
374353 then throw("invalid collapse amount")
375- else if (if ((bC == 0))
354+ else if (if ((bz == 0))
376355 then true
377- else (aO == 0))
356+ else (aM == 0))
378357 then throw("nothing to collapse")
379- else if (if ((aO == -1))
358+ else if (if ((aM == -1))
380359 then true
381- else (aO > bC))
382- then bC
383- else aO
384- let bE = bt(bD)
385- $Tuple2((bc(-(bD), -(bD), 0, 0) ++ [j(M(bv), -(bE)), j(F, -(bE)), h(O(bv), (bA - bD)), h(P(bv), aL)]), bD)
360+ else (aM > bz))
361+ then bz
362+ else aM
363+ let bB = bq(bA)
364+ $Tuple2((bb(-(bA), -(bA), 0, 0) ++ [j(M(bs), -(bB)), j(F, -(bB)), h(O(bs), (bx - bA)), h(P(bs), aG)]), bA)
386365 }
387366
388367
389-func bF (N,aO) = {
390- let bG = ab("repay")
391- if ((bG == bG))
368+func bC (N,aM) = {
369+ let bD = Y("repay")
370+ if ((bD == bD))
392371 then {
393- let bH = aS(N)
394- if ((bH == bH))
372+ let bE = aQ(N)
373+ if ((bE == bE))
395374 then {
396- let bI = if ((aO > bH))
397- then $Tuple4(0, -(bH), (aO - bH), [ScriptTransfer(addressFromStringValue(N), (aO - bH), R)])
398- else $Tuple4((bH - aO), -(aO), 0, nil)
399- let bJ = bI._1
400- let bK = bI._2
401- let bL = bI._3
402- let bM = bI._4
403- let bN = (aO - bL)
404- $Tuple2(((bc(0, bK, 0, bL) ++ bM) ++ [h(O(N), bJ), h(P(N), aL)]), bN)
375+ let bF = if ((aM > bE))
376+ then $Tuple4(0, -(bE), (aM - bE), [ScriptTransfer(addressFromStringValue(N), (aM - bE), w)])
377+ else $Tuple4((bE - aM), -(aM), 0, nil)
378+ let bG = bF._1
379+ let bH = bF._2
380+ let bI = bF._3
381+ let bJ = bF._4
382+ let bK = (aM - bI)
383+ $Tuple2(((bb(0, bH, 0, bI) ++ bJ) ++ [h(O(N), bG), h(P(N), aG)]), bK)
405384 }
406385 else throw("Strict value is not equal to itself.")
407386 }
408387 else throw("Strict value is not equal to itself.")
409388 }
410389
411390
412-func bO () = {
413- let bP = as
414- let aF = bP._1
415- let ae = bP._2
416- let aG = bP._3
417- let aH = bP._4
418- ((((((((((((((("ABCD: " + toString(aF)) + ";") + toString(ae)) + ";") + toString(aG)) + ";") + toString(aH)) + ", reserveFactor: ") + toString(at)) + ", collateralFactor: ") + toString(au)) + ", liquidationThreshold: ") + toString(av)) + ", liquidationPenalty: ") + toString(ax))
391+func bL () = {
392+ let aA = getIntegerValue(X, (v + "_APoint"))
393+ let aa = getIntegerValue(X, (v + "_BPoint"))
394+ let aB = getIntegerValue(X, (v + "_CPoint"))
395+ let aC = getIntegerValue(X, (v + "_DPoint"))
396+ ((((((((((((((("ABCD: " + toString(aA)) + ";") + toString(aa)) + ";") + toString(aB)) + ";") + toString(aC)) + ", reserveFactor: ") + toString(ap)) + ", collateralFactor: ") + toString(aq)) + ", liquidationThreshold: ") + toString(ar)) + ", liquidationPenalty: ") + toString(at))
419397 }
420398
421399
422-func bQ () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aY)) + ", storedTotalDeposit: ") + toString(ay)) + ", currentTotalDebt: ") + toString(aV)) + ", storedTotalDebt: ") + toString(aA)) + ", currentTotalReserve: ") + toString(aZ)) + ", storedTotalReserve: ") + toString(az)) + ", currentIndex:") + toString(aL)) + ", storedIndex: ") + toString(aB)) + ", lastUpdateHeight: ") + toString(ap)) + ", utilization: ") + toString(aC)) + ", aTokenCirculation: ") + toString(ar)) + ", aTokenPrice: ") + toString(bp(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aD)) + ", APY: ") + toString(aK))
400+func bM () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(au)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(aw)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(av)) + ", currentIndex:") + toString(aG)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", utilization: ") + toString(ay)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bm(pow(10, 0, W, 0, 0, FLOOR)))) + ", APR: ") + toString(az)) + ", APY: ") + toString(aF))
423401
424402
425-func bR (bx) = {
426- let bS = bu(bx)
427- let bT = X(addressFromStringValue(bx), aq)
428- ((((((((((((((((("currentDebt: " + toString(aS(bx))) + ", storedDebt: ") + toString(valueOrElse(a(O(bx)), 0))) + ", currentDeposit: ") + toString(bp(bS))) + ", aTokenContractBalance: ") + toString(bS)) + ", aTokenWalletBalance: ") + toString(bT)) + ", walletStake: ") + toString(bp(bT))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bx), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bx)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bx)), 0)))
403+func bN (bu) = {
404+ let bO = br(bu)
405+ let bP = R(addressFromStringValue(bu), an)
406+ ((((((((((((((((("currentDebt: " + toString(aQ(bu))) + ", storedDebt: ") + toString(valueOrElse(a(O(bu)), 0))) + ", currentDeposit: ") + toString(bm(bO))) + ", aTokenContractBalance: ") + toString(bO)) + ", aTokenWalletBalance: ") + toString(bP)) + ", walletStake: ") + toString(bm(bP))) + ", assetWalletBalance: ") + toString(R(addressFromStringValue(bu), w))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bu)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bu)), 0)))
429407 }
430408
431409
432-func bU () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(ay)) + ", storedTotalDebt: ") + toString(aA)) + ", storedTotalReserve: ") + toString(az)) + ", storedIndex: ") + toString(aB)) + ", lastUpdateHeight: ") + toString(ap)) + ", currentTotalDeposit: ") + toString(aY)) + ", currentTotalDebt: ") + toString(aV)) + ", currentTotalReserve: ") + toString(aZ)) + ", currentIndex: ") + toString(aL)) + ", currentHeight: ") + toString(ao)) + ", aTokenCirculation: ") + toString(ar)) + ", aTokenPrice: ") + toString(bp(pow(10, 0, Z, 0, 0, FLOOR))))
410+func bQ () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(au)) + ", storedTotalDebt: ") + toString(aw)) + ", storedTotalReserve: ") + toString(av)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aG)) + ", currentHeight: ") + toString(al)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bm(pow(10, 0, W, 0, 0, FLOOR))))
433411
434412
435-func bV (bx) = {
436- let bW = bu(bx)
437- let bX = bp(bW)
438- let bA = aS(bx)
439- if ((ao == ap))
440- then $Tuple4(ay, aA, bX, bA)
441- else $Tuple4(aY, aV, bX, bA)
413+func bR (bu) = {
414+ let bS = br(bu)
415+ let bT = bm(bS)
416+ let bx = aQ(bu)
417+ if ((al == am))
418+ then $Tuple4(au, aw, bT, bx)
419+ else $Tuple4(aW, aT, bT, bx)
442420 }
443421
444422
445-@Callable(ag)
446-func getReserveDivsInfo () = $Tuple2(nil, $Tuple2(aZ, T))
423+func bU (ad,bu,aM,bV) = {
424+ let bW = ((au + av) - aw)
425+ let bD = if (if (if (ac(ad))
426+ then aL(aM, bW, "funds in use")
427+ else false)
428+ then e((-1 > aM), "invalid amount")
429+ else false)
430+ then Y("withdraw")
431+ else false
432+ if ((bD == bD))
433+ then {
434+ let bX = if ((aM == -1))
435+ then {
436+ let bS = br(bu)
437+ $Tuple2(bS, bm(bS))
438+ }
439+ else $Tuple2(bq(aM), aM)
440+ let bB = bX._1
441+ let bY = bX._2
442+ $Tuple2((bb(-(bY), 0, 0, bY) ++ [ScriptTransfer(if (bV)
443+ then ab
444+ else addressFromStringValue(bu), bY, w), j(M(bu), -(bB)), j(F, -(bB))]), bY)
445+ }
446+ else throw("Strict value is not equal to itself.")
447+ }
448+
449+
450+@Callable(ad)
451+func getReserveDivsInfo () = $Tuple2(nil, $Tuple2(aY, v))
447452
448453
449454
450-@Callable(ag)
451-func getCurrentTotals (bx) = $Tuple2(nil, bV(bx))
455+@Callable(ad)
456+func getCurrentTotals (bu) = $Tuple2(nil, bR(bu))
452457
453458
454459
455-@Callable(ag)
456-func getCurrentTotals2 (bY,bZ) = {
457- let ca = bV(bY)
458- let cb = ca._1
459- let cc = ca._2
460- let cd = ca._3
461- let ce = ca._4
462- let cf = bV(bZ)
463- let cg = cf._1
464- let ch = cf._2
465- let ci = cf._3
466- let cj = cf._4
467- $Tuple2(nil, $Tuple6(cb, cc, cd, ce, ci, cj))
460+@Callable(ad)
461+func getCurrentTotals2 (bZ,ca) = {
462+ let cb = bR(bZ)
463+ let cc = cb._1
464+ let cd = cb._2
465+ let ce = cb._3
466+ let cf = cb._4
467+ let cg = bR(ca)
468+ let ch = cg._1
469+ let ci = cg._2
470+ let cj = cg._3
471+ let ck = cg._4
472+ $Tuple2(nil, $Tuple6(cc, cd, ce, cf, cj, ck))
468473 }
469474
470475
471476
472-@Callable(ag)
473-func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bO()) + ", ") + bQ()))
477+@Callable(ad)
478+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bL()) + ", ") + bM()))
474479
475480
476481
477-@Callable(ag)
478-func adviseUser (bx) = {
479- let ck = bn(aV)
480- let cl = bn(aY)
481- let cm = valueOrElse(getBoolean(this, Q(bx)), true)
482- let cn = if (cm)
483- then cl
482+@Callable(ad)
483+func adviseUser (bu) = {
484+ let cl = bk(aT)
485+ let cm = bk(aW)
486+ let cn = valueOrElse(getBoolean(this, Q(bu)), true)
487+ let co = if (cn)
488+ then cm
484489 else 0
485- let co = min([ck, cn])
486- let cp = l(co, aw, t)
487- let cq = if ((ck > cn))
490+ let cp = min([cl, co])
491+ let cq = l(cp, as, t)
492+ let cr = if ((cl > co))
488493 then 0
489- else fraction((cn - ck), au, t)
490- let cr = if ((ck > cn))
491- then (fraction((ck - cn), t, av) + cp)
492- else cp
493- let cs = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(ck)) + ", currentDepositUsd: ") + toString(cl)) + ", bp: ") + toString(cq)) + ", bpu: ") + toString(cr))
494- $Tuple2(nil, ((cs + ", ") + bR(bx)))
494+ else fraction((co - cl), aq, t)
495+ let cs = if ((cl > co))
496+ then (fraction((cl - co), t, ar) + cq)
497+ else cq
498+ let ct = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(cl)) + ", currentDepositUsd: ") + toString(cm)) + ", bp: ") + toString(cr)) + ", bpu: ") + toString(cs))
499+ $Tuple2(nil, ((ct + ", ") + bN(bu)))
495500 }
496501
497502
498503
499-@Callable(ag)
500-func addInterest () = if ((ag.payments[0].assetId != R))
504+@Callable(ad)
505+func addInterest () = if ((ad.payments[0].assetId != w))
501506 then throw("can't add interest with unrelated token")
502- else bc(ag.payments[0].amount, 0, 0, 0)
507+ else bb(ad.payments[0].amount, 0, 0, 0)
503508
504509
505510
506-@Callable(ag)
507-func addToReserve () = if ((ag.payments[0].assetId != R))
511+@Callable(ad)
512+func addToReserve () = if ((ad.payments[0].assetId != w))
508513 then throw("can't add interest with unrelated token")
509- else bc(0, 0, ag.payments[0].amount, 0)
514+ else bb(0, 0, ad.payments[0].amount, 0)
510515
511516
512517
513-@Callable(ag)
514-func withdrawFromReserve (bD) = {
515- let bG = ah(ag)
516- if ((bG == bG))
518+@Callable(ad)
519+func withdrawFromReserve (bA) = {
520+ let bD = ae(ad)
521+ if ((bD == bD))
517522 then {
518- let ct = if ((bD == -1))
519- then aZ
520- else bD
521- $Tuple2((bc(0, 0, -(ct), ct) ++ [ScriptTransfer(ag.caller, ct, R)]), ct)
523+ let cu = if ((bA == -1))
524+ then aY
525+ else bA
526+ $Tuple2((bb(0, 0, -(cu), cu) ++ [ScriptTransfer(ad.caller, cu, w)]), cu)
522527 }
523528 else throw("Strict value is not equal to itself.")
524529 }
525530
526531
527532
528-@Callable(ag)
533+@Callable(ad)
529534 func forceUpdate () = {
530- let cu = getStringValue(aa, "admin")
531- if ((toString(ag.caller) != cu))
535+ let cv = valueOrErrorMessage(getString(X, "admin"), "reserve:no admin in config")
536+ if ((toString(ad.caller) != cv))
532537 then throw("only admin can do")
533- else bc(0, 0, 0, 0)
538+ else bb(0, 0, 0, 0)
534539 }
535540
536541
537542
538-@Callable(ag)
539-func initialize (cv,cw,cx,cy,cz,cA) = {
540- let bG = if (ak)
541- then aj(cx)
543+@Callable(ad)
544+func initialize (cw,cx,cy,cz,cA) = {
545+ let bD = if (ah)
546+ then ag(cx)
542547 else false
543- if ((bG == bG))
548+ if ((bD == bD))
544549 then {
545550 let cB = Issue(cy, cz, 0, cA, true)
546-[cB, k(C, cw), h(L, cA), k(E, cy), k(u, cx), k(B, cv), k(D, toBase58String(calculateAssetId(cB))), h(G, ao)]
551+[cB, h(L, cA), k(E, cy), k(u, cx), k(C, cw), k(D, toBase58String(calculateAssetId(cB)))]
547552 }
548553 else throw("Strict value is not equal to itself.")
549554 }
550555
551556
552557
553-@Callable(ag)
554-func userDepositUSD (bv) = $Tuple2(nil, bn(bp(bu(bv))))
558+@Callable(ad)
559+func initialize2 () = if ((ad.caller != this))
560+ then throw("only self can continue")
561+ else [h(G, al)]
555562
556563
557564
558-@Callable(ag)
559-func userDebtUSD (bv) = $Tuple2(nil, bn(aS(bv)))
565+@Callable(ad)
566+func userDepositUSD (bs) = $Tuple2(nil, bk(bm(br(bs))))
560567
561568
562569
563-@Callable(ag)
564-func userBalance (bv) = {
565- let bW = bu(bv)
566- let bX = bp(bW)
567- let bA = aS(bv)
568- $Tuple2(nil, $Tuple6(bW, bX, bn(bX), bA, bn(bA), valueOrElse(getBoolean(this, Q(bv)), true)))
570+@Callable(ad)
571+func userDebtUSD (bs) = $Tuple2(nil, bk(aQ(bs)))
572+
573+
574+
575+@Callable(ad)
576+func userBalance (bs) = {
577+ let bS = br(bs)
578+ let bT = bm(bS)
579+ let bx = aQ(bs)
580+ $Tuple2(nil, $Tuple6(bS, bT, bk(bT), bx, bk(bx), valueOrElse(getBoolean(this, Q(bs)), true)))
569581 }
570582
571583
572584
573-@Callable(ag)
574-func userDebt (bv) = {
575- let bA = aS(bv)
576- let cC = bn(bA)
577- $Tuple2(nil, $Tuple2(bA, cC))
585+@Callable(ad)
586+func userDebt (bs) = {
587+ let bx = aQ(bs)
588+ let cC = bk(bx)
589+ $Tuple2(nil, $Tuple2(bx, cC))
578590 }
579591
580592
581593
582-@Callable(ag)
583-func assetUsdValue (bs) = $Tuple2(nil, bn(bs))
594+@Callable(ad)
595+func assetUsdValue (bp) = $Tuple2(nil, bk(bp))
584596
585597
586598
587-@Callable(ag)
599+@Callable(ad)
588600 func repayFor (N) = {
589- let bG = af(ag)
590- if ((bG == bG))
591- then bF(N, ba(ag, R))
601+ let bD = ac(ad)
602+ if ((bD == bD))
603+ then bC(N, aZ(ad, w))
592604 else throw("Strict value is not equal to itself.")
593605 }
594606
595607
596608
597-@Callable(ag)
609+@Callable(ad)
598610 func depositFor (cD,cE) = {
599- let bG = if (af(ag))
600- then ab("deposit")
611+ let bD = if (ac(ad))
612+ then Y("deposit")
601613 else false
602- if ((bG == bG))
603- then if (if ((aS(cD) > 0))
614+ if ((bD == bD))
615+ then if (if ((aQ(cD) > 0))
604616 then !(cE)
605617 else false)
606618 then throw("can't disable use as collateral for asset with open debt")
607619 else {
608- let aO = ba(ag, R)
609- let bq = br(aO)
610- (bc(aO, 0, 0, 0) ++ [j(F, bq), j(M(cD), bq), BooleanEntry(Q(cD), cE)])
620+ let aM = aZ(ad, w)
621+ let bn = bo(aM)
622+ (bb(aM, 0, 0, 0) ++ [j(F, bn), j(M(cD), bn), BooleanEntry(Q(cD), cE)])
611623 }
612624 else throw("Strict value is not equal to itself.")
613625 }
614626
615627
616628
617-@Callable(ag)
618-func withdrawFor (bv,aO) = {
619- let cF = ((ay + az) - aA)
620- let bG = if (if (if (af(ag))
621- then aN(aO, cF, "funds in use")
622- else false)
623- then e((-1 > aO), "invalid amount")
624- else false)
625- then ab("withdraw")
629+@Callable(ad)
630+func withdrawFor (bs,aM) = bU(ad, bs, aM, false)
631+
632+
633+
634+@Callable(ad)
635+func withdrawToMain (bu,aM) = if ((aM != -1))
636+ then throw("reserve: withdrawToMain amount -1 only")
637+ else bU(ad, bu, aM, true)
638+
639+
640+
641+@Callable(ad)
642+func replenishWithAtokenFor (bu) = {
643+ let bD = if (ac(ad))
644+ then Y("atokens")
626645 else false
627- if ((bG == bG))
646+ if ((bD == bD))
628647 then {
629- let cG = if ((aO == -1))
630- then {
631- let bW = bu(bv)
632- $Tuple2(bW, bp(bW))
633- }
634- else $Tuple2(bt(aO), aO)
635- let bE = cG._1
636- let cH = cG._2
637- $Tuple2((bc(-(cH), 0, 0, cH) ++ [ScriptTransfer(addressFromStringValue(bv), cH, R), j(M(bv), -(bE)), j(F, -(bE))]), cH)
648+ let bn = aZ(ad, an)
649+ $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(bu), bn), Burn(an, bn)]) ++ bv(bu)), bm(bn))
638650 }
639651 else throw("Strict value is not equal to itself.")
640652 }
641653
642654
643655
644-@Callable(ag)
645-func replenishWithAtokenFor (bx) = {
646- let bG = if (af(ag))
647- then ab("atokens")
656+@Callable(ad)
657+func borrowFor (bs,cF) = {
658+ let bD = if (if (ac(ad))
659+ then aL(cF, (au - aw), "too much borrow requested")
660+ else false)
661+ then Y("borrow")
648662 else false
649- if ((bG == bG))
663+ if ((bD == bD))
650664 then {
651- let bq = ba(ag, aq)
652- $Tuple2(((bc(0, 0, 0, 0) ++ [j(M(bx), bq), Burn(aq, bq)]) ++ by(bx)), bp(bq))
665+ let bE = aQ(bs)
666+ let bG = (bE + cF)
667+ (bb(0, cF, 0, cF) ++ [h(O(bs), bG), bt(bs), h(P(bs), aG), ScriptTransfer(addressFromStringValue(bs), cF, w)])
653668 }
654669 else throw("Strict value is not equal to itself.")
655670 }
656671
657672
658673
659-@Callable(ag)
660-func borrowFor (bv,cI) = {
661- let bG = if (if (af(ag))
662- then aN(cI, (ay - aA), "too much borrow requested")
674+@Callable(ad)
675+func mintAtokenFor (bs,cG) = {
676+ let cH = br(bs)
677+ let aM = if ((cG == -1))
678+ then cH
679+ else cG
680+ let bD = if (if (if (ac(ad))
681+ then Y("atokens")
663682 else false)
664- then ab("borrow")
683+ then e((-1 > cG), "invalid amountToMint")
684+ else false)
685+ then e((aM > cH), ("Trying to mint more than available, max: " + toString(cH)))
665686 else false
666- if ((bG == bG))
687+ if ((bD == bD))
688+ then $Tuple2((bb(0, 0, 0, 0) ++ [j(M(bs), -(aM)), Reissue(an, aM, true), ScriptTransfer(addressFromStringValue(bs), aM, an)]), bm(aM))
689+ else throw("Strict value is not equal to itself.")
690+ }
691+
692+
693+
694+@Callable(ad)
695+func redeemAtokensFor (bu) = {
696+ let bD = if (ac(ad))
697+ then Y("atokens")
698+ else false
699+ if ((bD == bD))
667700 then {
668- let bH = aS(bv)
669- let bJ = (bH + cI)
670- (bc(0, cI, 0, cI) ++ [h(O(bv), bJ), bw(bv), h(P(bv), aL), ScriptTransfer(addressFromStringValue(bv), cI, R)])
701+ let bn = aZ(ad, an)
702+ let cI = bm(bn)
703+ $Tuple2((bb(-(cI), 0, 0, cI) ++ [ScriptTransfer(addressFromStringValue(bu), cI, w), j(F, -(bn)), Burn(an, bn)]), cI)
671704 }
672705 else throw("Strict value is not equal to itself.")
673706 }
674707
675708
676709
677-@Callable(ag)
678-func mintAtokenFor (bv,cJ) = {
679- let cK = bu(bv)
680- let aO = if ((cJ == -1))
681- then cK
682- else cJ
683- let bG = if (if (if (af(ag))
684- then ab("atokens")
685- else false)
686- then e((-1 > cJ), "invalid amountToMint")
687- else false)
688- then e((aO > cK), ("Trying to mint more than available, max: " + toString(cK)))
710+@Callable(ad)
711+func transferATokensFor (cJ,cK,cL) = {
712+ let bD = if (ac(ad))
713+ then Y("transfer_debt")
689714 else false
690- if ((bG == bG))
691- then $Tuple2((bc(0, 0, 0, 0) ++ [j(M(bv), -(aO)), Reissue(aq, aO, true), ScriptTransfer(addressFromStringValue(bv), aO, aq)]), bp(aO))
692- else throw("Strict value is not equal to itself.")
693- }
694-
695-
696-
697-@Callable(ag)
698-func redeemAtokensFor (bx) = {
699- let bG = if (af(ag))
700- then ab("atokens")
701- else false
702- if ((bG == bG))
715+ if ((bD == bD))
703716 then {
704- let bq = ba(ag, aq)
705- let cL = bp(bq)
706- $Tuple2((bc(-(cL), 0, 0, cL) ++ [ScriptTransfer(addressFromStringValue(bx), cL, R), j(F, -(bq)), Burn(aq, bq)]), cL)
717+ let cM = bl(cL)
718+ let bS = bo(cM)
719+ let cN = br(cJ)
720+ if ((bS > cN))
721+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cL)) + " transfer.assets: ") + toString(cM)) + " transfer.atokens: ") + toString(bS)) + " from.atokens: ") + toString(cN)) + " at ") + toString(this)))
722+ else $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(cJ), -(bS)), j(M(cK), bS)]) ++ bv(cK)), bm(bS))
707723 }
708724 else throw("Strict value is not equal to itself.")
709725 }
710726
711727
712728
713-@Callable(ag)
714-func transferATokensFor (cM,cN,cO) = {
715- let bG = if (af(ag))
716- then ab("transfer_debt")
729+@Callable(ad)
730+func transferDebtFor (cJ,cK,aM) = {
731+ let bD = if (ac(ad))
732+ then Y("transfer_debt")
717733 else false
718- if ((bG == bG))
719- then {
720- let cP = bo(cO)
721- let bW = br(cP)
722- let cQ = bu(cM)
723- if ((bW > cQ))
724- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cO)) + " transfer.assets: ") + toString(cP)) + " transfer.atokens: ") + toString(bW)) + " from.atokens: ") + toString(cQ)) + " at ") + toString(this)))
725- else $Tuple2(((bc(0, 0, 0, 0) ++ [j(M(cM), -(bW)), j(M(cN), bW)]) ++ by(cN)), bp(bW))
726- }
734+ if ((bD == bD))
735+ then $Tuple2((bb(0, 0, 0, 0) ++ [h(O(cJ), (aQ(cJ) - aM)), h(O(cK), (aQ(cK) + aM)), h(P(cJ), aG), h(P(cK), aG), bt(cK)]), aM)
727736 else throw("Strict value is not equal to itself.")
728737 }
729738
730739
731740
732-@Callable(ag)
733-func transferDebtFor (cM,cN,aO) = {
734- let bG = if (af(ag))
735- then ab("transfer_debt")
741+@Callable(ad)
742+func disableUseAsCollateralFor (bs) = {
743+ let bD = if (ac(ad))
744+ then Y("use_as_col")
736745 else false
737- if ((bG == bG))
738- then $Tuple2((bc(0, 0, 0, 0) ++ [h(O(cM), (aS(cM) - aO)), h(O(cN), (aS(cN) + aO)), h(P(cM), aL), h(P(cN), aL), bw(cN)]), aO)
746+ if ((bD == bD))
747+ then if ((aQ(bs) > 0))
748+ then throw("can't disable collateral for asset with open debt")
749+ else (bb(0, 0, 0, 0) ++ [BooleanEntry(Q(bs), false)])
739750 else throw("Strict value is not equal to itself.")
740751 }
741752
742753
743754
744-@Callable(ag)
745-func disableUseAsCollateralFor (bv) = {
746- let bG = if (af(ag))
747- then ab("use_as_col")
748- else false
749- if ((bG == bG))
750- then if ((aS(bv) > 0))
751- then throw("can't disable collateral for asset with open debt")
752- else (bc(0, 0, 0, 0) ++ [BooleanEntry(Q(bv), false)])
755+@Callable(ad)
756+func enableUseAsCollateral () = {
757+ let bD = Y("use_as_col")
758+ if ((bD == bD))
759+ then (bb(0, 0, 0, 0) ++ [bt(toString(ad.caller))])
753760 else throw("Strict value is not equal to itself.")
754761 }
755762
756763
757764
758-@Callable(ag)
759-func enableUseAsCollateral () = {
760- let bG = ab("use_as_col")
761- if ((bG == bG))
762- then (bc(0, 0, 0, 0) ++ [bw(toString(ag.caller))])
765+@Callable(ad)
766+func collapseFor (bu) = {
767+ let bD = if (ac(ad))
768+ then Y("force_collapse")
769+ else false
770+ if ((bD == bD))
771+ then bw(bu, -1)
763772 else throw("Strict value is not equal to itself.")
764773 }
765774
766775
767776
768-@Callable(ag)
769-func collapseFor (bx) = {
770- let bG = if (af(ag))
771- then ab("force_collapse")
777+@Callable(ad)
778+func collapseForAmount (bu,aM) = {
779+ let bD = if (ac(ad))
780+ then Y("collapse")
772781 else false
773- if ((bG == bG))
774- then bz(bx, -1)
775- else throw("Strict value is not equal to itself.")
776- }
777-
778-
779-
780-@Callable(ag)
781-func collapseForAmount (bx,aO) = {
782- let bG = if (af(ag))
783- then ab("collapse")
784- else false
785- if ((bG == bG))
786- then bz(bx, aO)
782+ if ((bD == bD))
783+ then bw(bu, aM)
787784 else throw("Strict value is not equal to itself.")
788785 }
789786
790787

github/deemru/w8io/6500d08 
251.45 ms