tx · 7GmXE3eG5gUtMJEEnSA7oNVkncYsUEnaH58pjPJVbDRp

3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S:  -0.01000000 Waves

2021.09.28 14:58 [2787790] smart account 3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S > SELF 0.00000000 Waves

{ "type": 13, "id": "7GmXE3eG5gUtMJEEnSA7oNVkncYsUEnaH58pjPJVbDRp", "fee": 1000000, "feeAssetId": null, "timestamp": 1632830184144, "version": 1, "sender": "3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S", "senderPublicKey": "CRRN9T4LWdYfw63q5x9XxR8P93XshdCac31Z65PbE6zv", "proofs": [ "3ag6Dv7Q4qzdUSNgNuLecaCdcEZjVtwYbPLebbpQPeJwjj6yB5So8SSzPZsspJTeAHZPBvYwzqK9W4ShR2hmM782" ], "script": "base64:AAIFAAAAAAAAAIQIAhIAEgASAwoBCBIAEgASAwoBARIAEggKBggICAgIARIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQESAwoBCBIAEgQKAggEEgQKAggBEgMKAQgSBAoCCAESBAoCCAESABIFCgMICAESBQoDCAgBEgMKAQgSABIDCgEIEgQKAggBEgMKAQEAAABXAQAAAARnZXRJAAAAAQAAAANrZXkJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAARnZXRTAAAAAQAAAANrZXkJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAVnZXRTVgAAAAEAAAADa2V5CQEAAAAFdmFsdWUAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAHdGhyb3dJZgAAAAIAAAAJY29uZGl0aW9uAAAABWVycm9yAwUAAAAJY29uZGl0aW9uCQAAAgAAAAEFAAAABWVycm9yBgEAAAAId3JpdGVJbnQAAAACAAAAA2tleQAAAAV2YWx1ZQMJAABmAAAAAgAAAAAAAAAAAAUAAAAFdmFsdWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAAGkAAAAAQUAAAAFdmFsdWUCAAAACSBmb3Iga2V5IAUAAAADa2V5CQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAIY2hhbmdlQnkAAAACAAAAA2tleQAAAAV2YWx1ZQkBAAAACHdyaXRlSW50AAAAAgUAAAADa2V5CQAAZAAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAADa2V5AAAAAAAAAAAABQAAAAV2YWx1ZQEAAAALd3JpdGVTdHJpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAMZnJhY3Rpb25DZWlsAAAAAwAAAAV2YWx1ZQAAAAludW1lcmF0b3IAAAALZGVub21pbmF0b3IEAAAABGNhbmQJAABrAAAAAwUAAAAFdmFsdWUFAAAACW51bWVyYXRvcgUAAAALZGVub21pbmF0b3IEAAAAAUQAAAAAALUE8zMEAAAABWV4YWN0CQAAAAAAAAIJAABqAAAAAgkAAGgAAAACCQAAagAAAAIFAAAABGNhbmQFAAAAAUQJAABqAAAAAgUAAAALZGVub21pbmF0b3IFAAAAAUQFAAAAAUQJAABqAAAAAgkAAGgAAAACCQAAagAAAAIFAAAABXZhbHVlBQAAAAFECQAAagAAAAIFAAAACW51bWVyYXRvcgUAAAABRAUAAAABRAMFAAAABWV4YWN0BQAAAARjYW5kCQAAZAAAAAIFAAAABGNhbmQAAAAAAAAAAAEAAAAADUJsb2Nrc1BlclllYXIAAAAAAAAIBSAAAAAABVJCYXNlAAAjhvJvwQAAAAAAAAtmYWN0b3JzQmFzZQAAAAAAAAAD6AAAAAAMYXNzZXRJZFN0b3JlAgAAAAdhc3NldElkAAAAAAltYWluU3RvcmUCAAAABG1haW4AAAAAEnJlc2VydmVGYWN0b3JTdG9yZQkAASwAAAACCQEAAAAFZ2V0U1YAAAABBQAAAAxhc3NldElkU3RvcmUCAAAADl9SZXNlcnZlRmFjdG9yAAAAABVjb2xsYXRlcmFsRmFjdG9yU3RvcmUJAAEsAAAAAgkBAAAABWdldFNWAAAAAQUAAAAMYXNzZXRJZFN0b3JlAgAAABFfQ29sbGF0ZXJhbEZhY3RvcgAAAAAZbGlxdWlkYXRpb25UaHJlc2hvbGRTdG9yZQkAASwAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABBQAAAAxhc3NldElkU3RvcmUCAAAAFV9MaXF1aWRhdGlvblRocmVzaG9sZAAAAAASb3ZlcmxhcENoYXJnZVN0b3JlAgAAABZhY2NvdW50X2hlYWx0aF9vdmVybGFwAAAAABdsaXF1aWRhdGlvblBlbmFsdHlTdG9yZQkAASwAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABBQAAAAxhc3NldElkU3RvcmUCAAAAE19MaXF1aWRhdGlvblBlbmFsdHkAAAAAEmNvbmZpZ0FkZHJlc3NTdG9yZQIAAAANY29uZmlnQWRkcmVzcwAAAAALb3JhY2xlU3RvcmUCAAAADW9yYWNsZUFkZHJlc3MAAAAADWFUb2tlbklkU3RvcmUCAAAACGFUb2tlbklkAAAAAA9hVG9rZW5OYW1lU3RvcmUCAAAACmFUb2tlbk5hbWUAAAAAFmFUb2tlbkNpcmN1bGF0aW9uU3RvcmUCAAAAEWFUb2tlbkNpcmN1bGF0aW9uAAAAABVsYXN0VXBkYXRlSGVpZ2h0U3RvcmUCAAAAEGxhc3RVcGRhdGVIZWlnaHQAAAAADnRvdGFsRGVidFN0b3JlAgAAAAt0b3RhbEJvcnJvdwAAAAARdG90YWxEZXBvc2l0U3RvcmUCAAAADHRvdGFsRGVwb3NpdAAAAAARdG90YWxSZXNlcnZlU3RvcmUCAAAADHRvdGFsUmVzZXJ2ZQAAAAAKaW5kZXhTdG9yZQIAAAALc3RvcmVkSW5kZXgAAAAAE2FUb2tlbkRlY2ltYWxzU3RvcmUCAAAADmFUb2tlbkRlY2ltYWxzAQAAABJhVG9rZW5CYWxhbmNlU3RvcmUAAAABAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIFAAAAC3VzZXJBZGRyZXNzAgAAAA5fYVRva2VuQmFsYW5jZQEAAAAJZGVidFN0b3JlAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACBQAAAAt1c2VyQWRkcmVzcwIAAAAFX2RlYnQBAAAADmRlYnRJbmRleFN0b3JlAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACBQAAAAt1c2VyQWRkcmVzcwIAAAAGX2luZGV4AQAAABR1c2VBc0NvbGxhdGVyYWxTdG9yZQAAAAEAAAALdXNlckFkZHJlc3MJAAEsAAAAAgUAAAALdXNlckFkZHJlc3MCAAAAEF91c2VBc0NvbGxhdGVyYWwAAAAAB2Fzc2V0SWQEAAAAAmlkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQUAAAAMYXNzZXRJZFN0b3JlAgAAAApubyBhc3NldElkAwkAAAAAAAACBQAAAAJpZAIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAACaWQAAAAACmFzc2V0SWRTdHIEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmJ2BQAAAAckbWF0Y2gwCQACWAAAAAEFAAAAAmJ2AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAF1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AAAABkhFSUdIVAUAAAAGaGVpZ2h0AAAAABBsYXN0VXBkYXRlSGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRJAAAAAQUAAAAVbGFzdFVwZGF0ZUhlaWdodFN0b3JlAgAAABNubyBsYXN0VXBkYXRlSGVpZ2h0AAAAAAhhVG9rZW5JZAkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQUAAAANYVRva2VuSWRTdG9yZQIAAAALbm8gYVRva2VuSWQAAAAAEWFUb2tlbkNpcmN1bGF0aW9uCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAFmFUb2tlbkNpcmN1bGF0aW9uU3RvcmUAAAAAAAAAAAAAAAAABEFCQ0QEAAAAAmlkCQEAAAAFZ2V0U1YAAAABBQAAAAxhc3NldElkU3RvcmUJAAUWAAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAJpZAIAAAAHX0FQb2ludAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAJpZAIAAAAHX0JQb2ludAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAJpZAIAAAAHX0NQb2ludAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAJpZAIAAAAHX0RQb2ludAAAAAANcmVzZXJ2ZUZhY3RvcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAEnJlc2VydmVGYWN0b3JTdG9yZQIAAAAQbm8gcmVzZXJ2ZUZhY3RvcgAAAAAQY29sbGF0ZXJhbEZhY3RvcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAFWNvbGxhdGVyYWxGYWN0b3JTdG9yZQIAAAATbm8gY29sbGF0ZXJhbEZhY3RvcgAAAAAUbGlxdWlkYXRpb25UaHJlc2hvbGQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABlsaXF1aWRhdGlvblRocmVzaG9sZFN0b3JlAgAAABdubyBsaXF1aWRhdGlvblRocmVzaG9sZAAAAAAUYWNjb3VudEhlYWx0aE92ZXJsYXAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABJvdmVybGFwQ2hhcmdlU3RvcmUCAAAAEG5vIG92ZXJsYXBDaGFyZ2UAAAAAEmxpcXVpZGF0aW9uUGVuYWx0eQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAF2xpcXVpZGF0aW9uUGVuYWx0eVN0b3JlAgAAABVubyBsaXF1aWRhdGlvblBlbmFsdHkAAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAABF0b3RhbERlcG9zaXRTdG9yZQAAAAAAAAAAAAAAAAASc3RvcmVkVG90YWxSZXNlcnZlCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAEXRvdGFsUmVzZXJ2ZVN0b3JlAAAAAAAAAAAAAAAAAA9zdG9yZWRUb3RhbERlYnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAAOdG90YWxEZWJ0U3RvcmUAAAAAAAAAAAAAAAAAC3N0b3JlZEluZGV4CQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAACmluZGV4U3RvcmUFAAAABVJCYXNlAAAAAAt1dGlsaXphdGlvbgMJAABmAAAAAgUAAAASc3RvcmVkVG90YWxEZXBvc2l0AAAAAAAAAAAACQAAawAAAAMFAAAAD3N0b3JlZFRvdGFsRGVidAUAAAALZmFjdG9yc0Jhc2UFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAAAAAAAAAAAAAAAAAADYXByBAAAAAskdDA1NTMyNTU1MgUAAAAEQUJDRAQAAAABYQgFAAAACyR0MDU1MzI1NTUyAAAAAl8xBAAAAAFiCAUAAAALJHQwNTUzMjU1NTIAAAACXzIEAAAAAWMIBQAAAAskdDA1NTMyNTU1MgAAAAJfMwQAAAABZAgFAAAACyR0MDU1MzI1NTUyAAAAAl80BAAAAAZsaW5lQUMJAABkAAAAAgkAAGsAAAADCQAAZQAAAAIFAAAAAWEFAAAAAWMFAAAAC3V0aWxpemF0aW9uCQEAAAABLQAAAAEFAAAAAWIFAAAAAWEEAAAABmxpbmVDRAkAAGQAAAACCQAAawAAAAMJAABlAAAAAgUAAAABYwUAAAABZAkAAGUAAAACBQAAAAt1dGlsaXphdGlvbgUAAAABYgkAAGUAAAACBQAAAAFiBQAAAAtmYWN0b3JzQmFzZQUAAAABYwMJAAAAAAAAAgUAAAALdXRpbGl6YXRpb24AAAAAAAAAAAAFAAAAAWEDCQAAAAAAAAIFAAAAC3V0aWxpemF0aW9uBQAAAAFiBQAAAAFjAwMJAABmAAAAAgUAAAABYgUAAAALdXRpbGl6YXRpb24GCQAAAAAAAAIFAAAAAWIFAAAAC2ZhY3RvcnNCYXNlBQAAAAZsaW5lQUMFAAAABmxpbmVDRAAAAAADYXB5AwkAAAAAAAACBQAAABJzdG9yZWRUb3RhbERlcG9zaXQAAAAAAAAAAAAAAAAAAAAAAAAJAABrAAAAAwkAAGsAAAADBQAAAA9zdG9yZWRUb3RhbERlYnQFAAAAA2FwcgUAAAASc3RvcmVkVG90YWxEZXBvc2l0CQAAZQAAAAIFAAAAC2ZhY3RvcnNCYXNlBQAAAA1yZXNlcnZlRmFjdG9yBQAAAAtmYWN0b3JzQmFzZQAAAAAMY3VycmVudEluZGV4BAAAAANicHIJAQAAAAxmcmFjdGlvbkNlaWwAAAADBQAAAANhcHIFAAAABVJCYXNlCQAAaAAAAAIFAAAADUJsb2Nrc1BlclllYXIFAAAAC2ZhY3RvcnNCYXNlCQEAAAAMZnJhY3Rpb25DZWlsAAAAAwUAAAALc3RvcmVkSW5kZXgJAABkAAAAAgUAAAAFUkJhc2UJAABoAAAAAgUAAAADYnByCQAAZQAAAAIFAAAABkhFSUdIVAUAAAAQbGFzdFVwZGF0ZUhlaWdodAUAAAAFUkJhc2UBAAAADmxpcXVpZGl0eUNoZWNrAAAAAwAAAAZhbW91bnQAAAADbWF4AAAAA2VycgMJAABmAAAAAgUAAAAGYW1vdW50BQAAAANtYXgJAAACAAAAAQkAASwAAAACAgAAABZub3QgZW5vdWdoIGxpcXVpZGl0eTogBQAAAANlcnIGAQAAAA5zdG9yZWRVc2VyRGVidAAAAAEAAAALdXNlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQkBAAAACWRlYnRTdG9yZQAAAAEFAAAAC3VzZXJBZGRyZXNzAAAAAAAAAAAAAQAAAA9jdXJyZW50VXNlckRlYnQAAAABAAAAC3VzZXJBZGRyZXNzBAAAAAF2CQEAAAAOc3RvcmVkVXNlckRlYnQAAAABBQAAAAt1c2VyQWRkcmVzcwMJAAAAAAAAAgUAAAABdgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPc3RvcmVkVXNlckluZGV4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRJAAAAAQkBAAAADmRlYnRJbmRleFN0b3JlAAAAAQUAAAALdXNlckFkZHJlc3MCAAAAIGhhcyBkZWJ0IGJ1dCBkb2VzIG5vdCBoYXZlIGluZGV4CQAAawAAAAMFAAAAAXYFAAAADGN1cnJlbnRJbmRleAUAAAAPc3RvcmVkVXNlckluZGV4AAAAABBjdXJyZW50VG90YWxEZWJ0CQAAawAAAAMFAAAAD3N0b3JlZFRvdGFsRGVidAUAAAAMY3VycmVudEluZGV4BQAAAAtzdG9yZWRJbmRleAAAAAAJYWRkZWREZWJ0CQAAZQAAAAIFAAAAEGN1cnJlbnRUb3RhbERlYnQFAAAAD3N0b3JlZFRvdGFsRGVidAAAAAAMYWRkZWREZXBvc2l0CQAAawAAAAMFAAAACWFkZGVkRGVidAkAAGUAAAACBQAAAAtmYWN0b3JzQmFzZQUAAAANcmVzZXJ2ZUZhY3RvcgUAAAALZmFjdG9yc0Jhc2UAAAAAE2N1cnJlbnRUb3RhbERlcG9zaXQJAABkAAAAAgUAAAASc3RvcmVkVG90YWxEZXBvc2l0BQAAAAxhZGRlZERlcG9zaXQAAAAAE2N1cnJlbnRUb3RhbFJlc2VydmUJAABlAAAAAgkAAGQAAAACBQAAABJzdG9yZWRUb3RhbFJlc2VydmUFAAAACWFkZGVkRGVidAUAAAAMYWRkZWREZXBvc2l0AQAAAA1wYXltZW50QW1vdW50AAAAAgAAAAFpAAAAB2Fzc2V0SWQEAAAAAXAICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAMJAABnAAAAAgAAAAAAAAAAAAUAAAABcAkAAAIAAAABAgAAACdQYXltZW50IGlzIGxlc3MgdGhhbiBtaW4gYWxsb3dlZCBhbW91bnQDCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAAdhc3NldElkCQAAAgAAAAEJAAEsAAAAAgIAAAAdYmFkIGFzc2V0IGF0dGFjaGVkOiByZXF1aXJlZCAFAAAACmFzc2V0SWRTdHIFAAAAAXABAAAACnN5bmNUb3RhbHMAAAAEAAAAEWFkZGl0aW9uYWxEZXBvc2l0AAAADmFkZGl0aW9uYWxEZWJ0AAAAEWFkZGl0aW9uYWxSZXNlcnZlAAAADWtlZXBBdEJhbGFuY2UEAAAADWFjdHVhbEJhbGFuY2UEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAA2FpZAUAAAAHJG1hdGNoMAkAA/AAAAACBQAAAAR0aGlzBQAAAANhaWQICQAD7wAAAAEFAAAABHRoaXMAAAAJYXZhaWxhYmxlBAAAAA1zdGFraW5nQWN0aW9uAwkAAAAAAAACBQAAAA1hY3R1YWxCYWxhbmNlBQAAAA1rZWVwQXRCYWxhbmNlBQAAAAR1bml0BAAAAA5zdGFraW5nRW5hYmxlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAICAAAAEHN0YWtpbmdfZW5hYmxlZF8FAAAACmFzc2V0SWRTdHIHAwkBAAAAASEAAAABBQAAAA5zdGFraW5nRW5hYmxlZAUAAAAEdW5pdAQAAAAOc3Rha2luZ0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACAgAAAA9zdGFraW5nX2NvbmZpZ18FAAAACmFzc2V0SWRTdHIJAAEsAAAAAgIAAAAXbm8gc3Rha2luZyBhZGRyZXNzIGZvciAFAAAACmFzc2V0SWRTdHIJAAEsAAAAAgIAAAAYYmFkIHN0YWtpbmcgYWRkcmVzcyBmb3IgBQAAAAphc3NldElkU3RyAwkAAGYAAAACBQAAAA1hY3R1YWxCYWxhbmNlBQAAAA1rZWVwQXRCYWxhbmNlCQAD/AAAAAQFAAAADnN0YWtpbmdBZGRyZXNzAgAAAANwdXQFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAHYXNzZXRJZAkAAGUAAAACBQAAAA1hY3R1YWxCYWxhbmNlBQAAAA1rZWVwQXRCYWxhbmNlBQAAAANuaWwJAAP8AAAABAUAAAAOc3Rha2luZ0FkZHJlc3MCAAAAA2dldAkABEwAAAACCQAAZQAAAAIFAAAADWtlZXBBdEJhbGFuY2UFAAAADWFjdHVhbEJhbGFuY2UFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAA1zdGFraW5nQWN0aW9uBQAAAA1zdGFraW5nQWN0aW9uCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAACmluZGV4U3RvcmUFAAAADGN1cnJlbnRJbmRleAkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAABVsYXN0VXBkYXRlSGVpZ2h0U3RvcmUFAAAABkhFSUdIVAkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAABF0b3RhbERlcG9zaXRTdG9yZQkAAGQAAAACBQAAABNjdXJyZW50VG90YWxEZXBvc2l0BQAAABFhZGRpdGlvbmFsRGVwb3NpdAkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAAA50b3RhbERlYnRTdG9yZQkAAGQAAAACBQAAABBjdXJyZW50VG90YWxEZWJ0BQAAAA5hZGRpdGlvbmFsRGVidAkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAABF0b3RhbFJlc2VydmVTdG9yZQkA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ASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEHJlc2VydmVBZGRyZXNzOiAJAAQlAAAAAQUAAAAEdGhpcwIAAAACLCAJAQAAAAlnZXRDb25maWcAAAAAAgAAAAIsIAkBAAAACGdldFN0YXRlAAAAAAAAAAFpAQAAAAphZHZpc2VVc2VyAAAAAQAAAAR1c2VyBAAAAA5jdXJyZW50RGVidFVzZAkBAAAACmFzc2V0VG9Vc2QAAAABBQAAABBjdXJyZW50VG90YWxEZWJ0BAAAABFjdXJyZW50RGVwb3NpdFVzZAkBAAAACmFzc2V0VG9Vc2QAAAABBQAAABNjdXJyZW50VG90YWxEZXBvc2l0BAAAAAxhc0NvbGxhdGVyYWwJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwkBAAAAFHVzZUFzQ29sbGF0ZXJhbFN0b3JlAAAAAQUAAAAEdXNlcgYEAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QDBQAAAAxhc0NvbGxhdGVyYWwFAAAAEWN1cnJlbnREZXBvc2l0VXNkAAAAAAAAAAAABAAAAApvdmVybGFwVXNkCQABlwAAAAEJAARMAAAAAgUAAAAOY3VycmVudERlYnRVc2QJAARMAAAAAgUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAADbmlsBAAAAA1vdmVybGFwQ2hhcmdlCQEAAAAMZnJhY3Rpb25DZWlsAAAAAwUAAAAKb3ZlcmxhcFVzZAUAAAAUYWNjb3VudEhlYWx0aE92ZXJsYXAFAAAAC2ZhY3RvcnNCYXNlBAAAAAJicAMJAABmAAAAAgUAAAAOY3VycmVudERlYnRVc2QFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QAAAAAAAAAAAAJAABrAAAAAwkAAGUAAAACBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkBQAAAA5jdXJyZW50RGVidFVzZAUAAAAQY29sbGF0ZXJhbEZhY3RvcgUAAAALZmFjdG9yc0Jhc2UEAAAAA2JwdQMJAABmAAAAAgUAAAAOY3VycmVudERlYnRVc2QFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QJAABkAAAAAgkAAGsAAAADCQAAZQAAAAIFAAAADmN1cnJlbnREZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkBQAAAAtmYWN0b3JzQmFzZQUAAAAUbGlxdWlkYXRpb25UaHJlc2hvbGQFAAAADW92ZXJsYXBDaGFyZ2UFAAAADW92ZXJsYXBDaGFyZ2UEAAAACGVucmljaGVkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABByZXNlcnZlQWRkcmVzczogCQAEJQAAAAEFAAAABHRoaXMCAAAAEiwgY3VycmVudERlYnRVc2Q6IAkAAaQAAAABBQAAAA5jdXJyZW50RGVidFVzZAIAAAAVLCBjdXJyZW50RGVwb3NpdFVzZDogCQABpAAAAAEFAAAAEWN1cnJlbnREZXBvc2l0VXNkAgAAAAYsIGJwOiAJAAGkAAAAAQUAAAACYnACAAAABywgYnB1OiAJAAGkAAAAAQUAAAADYnB1CQAFFAAAAAIFAAAAA25pbAkAASwAAAACCQABLAAAAAIFAAAACGVucmljaGVkAgAAAAIsIAkBAAAADGdldFVzZXJTdGF0ZQAAAAEFAAAABHVzZXIAAAABaQEAAAALYWRkSW50ZXJlc3QAAAAAAwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAAHYXNzZXRJZAkAAAIAAAABAgAAACdjYW4ndCBhZGQgaW50ZXJlc3Qgd2l0aCB1bnJlbGF0ZWQgdG9rZW4JAQAAAApzeW5jVG90YWxzAAAABAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWkBAAAADGFkZFRvUmVzZXJ2ZQAAAAADCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAAdhc3NldElkCQAAAgAAAAECAAAAJ2Nhbid0IGFkZCBpbnRlcmVzdCB3aXRoIHVucmVsYXRlZCB0b2tlbgkBAAAACnN5bmNUb3RhbHMAAAAEAAAAAAAAAAAAAAAAAAAAAAAACAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQAAAAAAAAAAAAAAAABaQEAAAATd2l0aGRyYXdGcm9tUmVzZXJ2ZQAAAAEAAAADYW10BAAAAAVhZG1pbgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAAFYWRtaW4DCQEAAAACIT0AAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAFYWRtaW4JAAACAAAAAQIAAAARb25seSBhZG1pbiBjYW4gZG8JAAROAAAAAgkBAAAACnN5bmNUb3RhbHMAAAAEAAAAAAAAAAAAAAAAAAAAAAAACQEAAAABLQAAAAEFAAAAA2FtdAUAAAADYW10CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAABWFkbWluBQAAAANhbXQFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAtmb3JjZVVwZGF0ZQAAAAAEAAAABWFkbWluCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAA1jb25maWdBZGRyZXNzAgAAAAVhZG1pbgMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAVhZG1pbgkAAAIAAAABAgAAABFvbmx5IGFkbWluIGNhbiBkbwkBAAAACnN5bmNUb3RhbHMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWkBAAAACmluaXRpYWxpemUAAAAGAAAACmNmZ0FkZHJlc3MAAAAKb3JhY2xlQWRkcgAAAA5hc3NldElkT3JXYXZlcwAAAAphVG9rZW5OYW1lAAAAEWFUb2tlbkRlc2NyaXB0aW9uAAAADmFUb2tlbkRlY2ltYWxzBAAAAAZjaGVja3MDBQAAAA5ub3RJbml0aWFsaXplZAkBAAAAEGlzQXNzZXRJZE9yV2F2ZXMAAAABBQAAAA5hc3NldElkT3JXYXZlcwcDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAZhVG9rZW4JAARCAAAABQUAAAAKYVRva2VuTmFtZQUAAAARYVRva2VuRGVzY3JpcHRpb24AAAAAAAAAAAAFAAAADmFUb2tlbkRlY2ltYWxzBgkABEwAAAACBQAAAAZhVG9rZW4JAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgUAAAALb3JhY2xlU3RvcmUFAAAACm9yYWNsZUFkZHIJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAATYVRva2VuRGVjaW1hbHNTdG9yZQUAAAAOYVRva2VuRGVjaW1hbHMJAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgUAAAAPYVRva2VuTmFtZVN0b3JlBQAAAAphVG9rZW5OYW1lCQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIFAAAADGFzc2V0SWRTdG9yZQUAAAAOYXNzZXRJZE9yV2F2ZXMJAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgUAAAASY29uZmlnQWRkcmVzc1N0b3JlBQAAAApjZmdBZGRyZXNzCQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIFAAAADWFUb2tlbklkU3RvcmUJAAJYAAAAAQkABDgAAAABBQAAAAZhVG9rZW4JAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAAVbGFzdFVwZGF0ZUhlaWdodFN0b3JlBQAAAAZIRUlHSFQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOdXNlckRlcG9zaXRVU0QAAAABAAAAB2FkZHJlc3MJAAUUAAAAAgUAAAADbmlsCQEAAAAKYXNzZXRUb1VzZAAAAAEJAQAAAA1hVG9rZW5Ub0Fzc2V0AAAAAQkBAAAADWFUb2tlbkJhbGFuY2UAAAABBQAAAAdhZGRyZXNzAAAAAWkBAAAAC3VzZXJEZWJ0VVNEAAAAAQAAAAdhZGRyZXNzCQAFFAAAAAIFAAAAA25pbAkBAAAACmFzc2V0VG9Vc2QAAAABCQEAAAAPY3VycmVudFVzZXJEZWJ0AAAAAQUAAAAHYWRkcmVzcwAAAAFpAQAAAAt1c2VyQmFsYW5jZQAAAAEAAAAHYWRkcmVzcwQAAAAHYXRva2VucwkBAAAADWFUb2tlbkJhbGFuY2UAAAABBQAAAAdhZGRyZXNzBAAAAAVhc3NldAkBAAAADWFUb2tlblRvQXNzZXQAAAABBQAAAAdhdG9rZW5zBAAAAARkZWJ0CQEAAAAPY3VycmVudFVzZXJEZWJ0AAAAAQUAAAAHYWRkcmVzcwkABRQAAAACBQAAAANuaWwJAAUYAAAABgUAAAAHYXRva2VucwUAAAAFYXNzZXQJAQAAAAphc3NldFRvVXNkAAAAAQUAAAAFYXNzZXQFAAAABGRlYnQJAQAAAAphc3NldFRvVXNkAAAAAQUAAAAEZGVidAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzCQEAAAAUdXNlQXNDb2xsYXRlcmFsU3RvcmUAAAABBQAAAAdhZGRyZXNzBgAAAAFpAQAAAAh1c2VyRGVidAAAAAEAAAAHYWRkcmVzcwQAAAAEZGVidAkBAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEFAAAAB2FkZHJlc3MEAAAAB2RlYnRVc2QJAQAAAAphc3NldFRvVXNkAAAAAQUAAAAEZGVidAkABRQAAAACBQAAAANuaWwJAAUUAAAAAgUAAAAEZGVidAUAAAAHZGVidFVzZAAAAAFpAQAAAA1hc3NldFVzZFZhbHVlAAAAAQAAAAthc3NldEFtb3VudAkABRQAAAACBQAAAANuaWwJAQAAAAphc3NldFRvVXNkAAAAAQUAAAALYXNzZXRBbW91bnQAAAABaQEAAAAIcmVwYXlGb3IAAAABAAAAC3VzZXJBZGRyZXNzBAAAAAZjaGVja3MJAQAAAAhtYWluT25seQAAAAEFAAAAAWkDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQEAAAAJcmVwYXlVc2VyAAAAAgUAAAALdXNlckFkZHJlc3MJAQAAAA1wYXltZW50QW1vdW50AAAAAgUAAAABaQUAAAAHYXNzZXRJZAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAFcmVwYXkAAAAACQEAAAAJcmVwYXlVc2VyAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAQAAAA1wYXltZW50QW1vdW50AAAAAgUAAAABaQUAAAAHYXNzZXRJZAAAAAFpAQAAAApkZXBvc2l0Rm9yAAAAAgAAAAlkZXBvc2l0b3IAAAAPdXNlQXNDb2xsYXRlcmFsBAAAAAZjaGVja3MDCQEAAAAIbWFpbk9ubHkAAAABBQAAAAFpCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAAHZGVwb3NpdAcDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzAwMJAABmAAAAAgkBAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEFAAAACWRlcG9zaXRvcgAAAAAAAAAAAAkBAAAAASEAAAABBQAAAA91c2VBc0NvbGxhdGVyYWwHCQAAAgAAAAECAAAAOGNhbid0IGRpc2FibGUgdXNlIGFzIGNvbGxhdGVyYWwgZm9yIGFzc2V0IHdpdGggb3BlbiBkZWJ0BAAAAAZhbW91bnQJAQAAAA1wYXltZW50QW1vdW50AAAAAgUAAAABaQUAAAAHYXNzZXRJZAQAAAAMYVRva2VuQW1vdW50CQEAAAANYXNzZXRUb0FUb2tlbgAAAAEFAAAABmFtb3VudAkABE4AAAACCQEAAAAKc3luY1RvdGFscwAAAAQFAAAABmFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACBQAAABZhVG9rZW5DaXJjdWxhdGlvblN0b3JlBQAAAAxhVG9rZW5BbW91bnQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgkBAAAAEmFUb2tlbkJhbGFuY2VTdG9yZQAAAAEFAAAACWRlcG9zaXRvcgUAAAAMYVRva2VuQW1vdW50CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAUdXNlQXNDb2xsYXRlcmFsU3RvcmUAAAABBQAAAAlkZXBvc2l0b3IFAAAAD3VzZUFzQ29sbGF0ZXJhbAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAt3aXRoZHJhd0ZvcgAAAAIAAAAHYWRkcmVzcwAAAAZhbW91bnQEAAAAC21heFdpdGhkcmF3CQAAZQAAAAIJAABkAAAAAgUAAAASc3RvcmVkVG90YWxEZXBvc2l0BQAAABJzdG9yZWRUb3Rh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", "chainId": 87, "height": 2787790, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B5nZmyvVj1ppqHmEFj69cmsjLJSVrj35iX7gA2hBGxjt Next: AHpGvd5jPFnPnk9vV8UpEgJjjm7mYw3mCGWKJCjnwzhg Diff:
OldNewDifferences
372372 then bA
373373 else aM
374374 let bC = br(bB)
375- (ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)])
375+ $Tuple2((ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)]), bB)
376376 }
377377
378378
379-func bD () = {
380- let bE = aq
381- let aD = bE._1
382- let ae = bE._2
383- let aE = bE._3
384- let aF = bE._4
379+func bD (N,aM) = {
380+ let bE = ab("repay")
381+ if ((bE == bE))
382+ then {
383+ let bF = aQ(N)
384+ if ((bF == bF))
385+ then {
386+ let bG = if ((aM > bF))
387+ then $Tuple4(0, -(bF), (aM - bF), [ScriptTransfer(addressFromStringValue(N), (aM - bF), R)])
388+ else $Tuple4((bF - aM), -(aM), 0, nil)
389+ let bH = bG._1
390+ let bI = bG._2
391+ let bJ = bG._3
392+ let bK = bG._4
393+ let bL = (aM - bJ)
394+ $Tuple2(((ba(0, bI, 0, bJ) ++ bK) ++ [h(O(N), bH), h(P(N), aJ)]), bL)
395+ }
396+ else throw("Strict value is not equal to itself.")
397+ }
398+ else throw("Strict value is not equal to itself.")
399+ }
400+
401+
402+func bM () = {
403+ let bN = aq
404+ let aD = bN._1
405+ let ae = bN._2
406+ let aE = bN._3
407+ let aF = bN._4
385408 ((((((((((((((("ABCD: " + toString(aD)) + ";") + toString(ae)) + ";") + toString(aE)) + ";") + toString(aF)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
386409 }
387410
388411
389-func bF () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aJ)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aI))
412+func bO () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aJ)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aI))
390413
391414
392-func bG (bv) = {
393- let bH = bs(bv)
394- let bI = X(addressFromStringValue(bv), ao)
395- ((((((((((((((((("currentDebt: " + toString(aQ(bv))) + ", storedDebt: ") + toString(valueOrElse(a(O(bv)), 0))) + ", currentDeposit: ") + toString(bn(bH))) + ", aTokenContractBalance: ") + toString(bH)) + ", aTokenWalletBalance: ") + toString(bI)) + ", walletStake: ") + toString(bn(bI))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bv), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bv)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bv)), 0)))
415+func bP (bv) = {
416+ let bQ = bs(bv)
417+ let bR = X(addressFromStringValue(bv), ao)
418+ ((((((((((((((((("currentDebt: " + toString(aQ(bv))) + ", storedDebt: ") + toString(valueOrElse(a(O(bv)), 0))) + ", currentDeposit: ") + toString(bn(bQ))) + ", aTokenContractBalance: ") + toString(bQ)) + ", aTokenWalletBalance: ") + toString(bR)) + ", walletStake: ") + toString(bn(bR))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bv), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bv)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bv)), 0)))
396419 }
397420
398421
399-func bJ () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aJ)) + ", currentHeight: ") + toString(am)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR))))
422+func bS () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aJ)) + ", currentHeight: ") + toString(am)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR))))
400423
401424
402425 @Callable(ag)
403-func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bD()) + ", ") + bF()))
426+func getCurrentTotals () = $Tuple2(nil, $Tuple2(aW, aT))
427+
428+
429+
430+@Callable(ag)
431+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bM()) + ", ") + bO()))
404432
405433
406434
407435 @Callable(ag)
408436 func adviseUser (bv) = {
409- let bK = bl(aT)
410- let bL = bl(aW)
411- let bM = valueOrElse(getBoolean(this, Q(bv)), true)
412- let bN = if (bM)
413- then bL
437+ let bT = bl(aT)
438+ let bU = bl(aW)
439+ let bV = valueOrElse(getBoolean(this, Q(bv)), true)
440+ let bW = if (bV)
441+ then bU
414442 else 0
415- let bO = min([bK, bN])
416- let bP = l(bO, au, t)
417- let bQ = if ((bK > bN))
443+ let bX = min([bT, bW])
444+ let bY = l(bX, au, t)
445+ let bZ = if ((bT > bW))
418446 then 0
419- else fraction((bN - bK), as, t)
420- let bR = if ((bK > bN))
421- then (fraction((bK - bN), t, at) + bP)
422- else bP
423- let bS = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(bK)) + ", currentDepositUsd: ") + toString(bL)) + ", bp: ") + toString(bQ)) + ", bpu: ") + toString(bR))
424- $Tuple2(nil, ((bS + ", ") + bG(bv)))
447+ else fraction((bW - bT), as, t)
448+ let ca = if ((bT > bW))
449+ then (fraction((bT - bW), t, at) + bY)
450+ else bY
451+ let cb = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(bT)) + ", currentDepositUsd: ") + toString(bU)) + ", bp: ") + toString(bZ)) + ", bpu: ") + toString(ca))
452+ $Tuple2(nil, ((cb + ", ") + bP(bv)))
425453 }
426454
427455
442470
443471 @Callable(ag)
444472 func withdrawFromReserve (bB) = {
445- let bT = getStringValue(aa, "admin")
446- if ((toString(ag.caller) != bT))
473+ let cc = getStringValue(aa, "admin")
474+ if ((toString(ag.caller) != cc))
447475 then throw("only admin can do")
448- else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(bT), bB, R)])
476+ else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(cc), bB, R)])
449477 }
450478
451479
452480
453481 @Callable(ag)
454482 func forceUpdate () = {
455- let bT = getStringValue(aa, "admin")
456- if ((toString(ag.caller) != bT))
483+ let cc = getStringValue(aa, "admin")
484+ if ((toString(ag.caller) != cc))
457485 then throw("only admin can do")
458486 else ba(0, 0, 0, 0)
459487 }
461489
462490
463491 @Callable(ag)
464-func initialize (bU,bV,bW,bX,bY,bZ) = {
465- let ca = if (ai)
466- then ah(bW)
492+func initialize (cd,ce,cf,cg,ch,ci) = {
493+ let bE = if (ai)
494+ then ah(cf)
467495 else false
468- if ((ca == ca))
496+ if ((bE == bE))
469497 then {
470- let cb = Issue(bX, bY, 0, bZ, true)
471-[cb, k(C, bV), h(L, bZ), k(E, bX), k(u, bW), k(B, bU), k(D, toBase58String(calculateAssetId(cb))), h(G, am)]
498+ let cj = Issue(cg, ch, 0, ci, true)
499+[cj, k(C, ce), h(L, ci), k(E, cg), k(u, cf), k(B, cd), k(D, toBase58String(calculateAssetId(cj))), h(G, am)]
472500 }
473501 else throw("Strict value is not equal to itself.")
474502 }
487515
488516 @Callable(ag)
489517 func userBalance (bt) = {
490- let cc = bs(bt)
491- let cd = bn(cc)
518+ let ck = bs(bt)
519+ let cl = bn(ck)
492520 let by = aQ(bt)
493- $Tuple2(nil, $Tuple6(cc, cd, bl(cd), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
521+ $Tuple2(nil, $Tuple6(ck, cl, bl(cl), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
494522 }
495523
496524
498526 @Callable(ag)
499527 func userDebt (bt) = {
500528 let by = aQ(bt)
501- let ce = bl(by)
502- $Tuple2(nil, $Tuple2(by, ce))
529+ let cm = bl(by)
530+ $Tuple2(nil, $Tuple2(by, cm))
503531 }
504532
505533
510538
511539
512540 @Callable(ag)
513-func repay () = {
514- let ca = ab("repay")
515- if ((ca == ca))
541+func repayFor (N) = {
542+ let bE = af(ag)
543+ if ((bE == bE))
544+ then bD(N, aY(ag, R))
545+ else throw("Strict value is not equal to itself.")
546+ }
547+
548+
549+
550+@Callable(ag)
551+func repay () = bD(toString(ag.caller), aY(ag, R))
552+
553+
554+
555+@Callable(ag)
556+func depositFor (cn,co) = {
557+ let bE = if (af(ag))
558+ then ab("deposit")
559+ else false
560+ if ((bE == bE))
561+ then if (if ((aQ(cn) > 0))
562+ then !(co)
563+ else false)
564+ then throw("can't disable use as collateral for asset with open debt")
565+ else {
566+ let aM = aY(ag, R)
567+ let bo = bp(aM)
568+ (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cn), bo), BooleanEntry(Q(cn), co)])
569+ }
570+ else throw("Strict value is not equal to itself.")
571+ }
572+
573+
574+
575+@Callable(ag)
576+func withdrawFor (bt,aM) = {
577+ let cp = ((aw + ax) - ay)
578+ let bE = if (if (if (af(ag))
579+ then aL(aM, cp, "funds in use")
580+ else false)
581+ then e((-1 > aM), "invalid amount")
582+ else false)
583+ then ab("withdraw")
584+ else false
585+ if ((bE == bE))
516586 then {
517- let N = toString(ag.caller)
518- let aM = aY(ag, R)
519- let cf = aQ(N)
520- if ((cf == cf))
587+ let cq = if ((aM == -1))
521588 then {
522- let cg = if ((aM > cf))
523- then $Tuple4(0, -(cf), (aM - cf), [ScriptTransfer(ag.caller, (aM - cf), R)])
524- else $Tuple4((cf - aM), -(aM), 0, nil)
525- let ch = cg._1
526- let ci = cg._2
527- let cj = cg._3
528- let ck = cg._4
529- ((ba(0, ci, 0, cj) ++ ck) ++ [h(O(N), ch), h(P(N), aJ)])
589+ let ck = bs(bt)
590+ $Tuple2(ck, bn(ck))
530591 }
531- else throw("Strict value is not equal to itself.")
592+ else $Tuple2(br(aM), aM)
593+ let bC = cq._1
594+ let cr = cq._2
595+ $Tuple2((ba(-(cr), 0, 0, cr) ++ [ScriptTransfer(addressFromStringValue(bt), cr, R), j(M(bt), -(bC)), j(F, -(bC))]), cr)
532596 }
533597 else throw("Strict value is not equal to itself.")
534598 }
536600
537601
538602 @Callable(ag)
539-func depositFor (cl,cm) = {
540- let ca = if (af(ag))
541- then ab("deposit")
603+func replenishWithAtokenFor (bv) = {
604+ let bE = if (af(ag))
605+ then ab("atokens")
542606 else false
543- if ((ca == ca))
544- then if (if ((aQ(cl) > 0))
545- then !(cm)
546- else false)
547- then throw("can't disable use as collateral for asset with open debt")
548- else {
549- let aM = aY(ag, R)
550- let bo = bp(aM)
551- (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cl), bo), BooleanEntry(Q(cl), cm)])
552- }
553- else throw("Strict value is not equal to itself.")
554- }
555-
556-
557-
558-@Callable(ag)
559-func replenishWithAtoken () = {
560- let ca = ab("atokens")
561- if ((ca == ca))
607+ if ((bE == bE))
562608 then {
563609 let bo = aY(ag, ao)
564- let bv = toString(ag.caller)
565- ((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv))
610+ $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv)), bn(bo))
566611 }
567612 else throw("Strict value is not equal to itself.")
568613 }
570615
571616
572617 @Callable(ag)
573-func borrowFor (bt,cn) = {
574- let ca = if (if (af(ag))
575- then aL(cn, (aw - ay), "too much borrow requested")
618+func borrowFor (bt,cs) = {
619+ let bE = if (if (af(ag))
620+ then aL(cs, (aw - ay), "too much borrow requested")
576621 else false)
577622 then ab("borrow")
578623 else false
579- if ((ca == ca))
624+ if ((bE == bE))
580625 then {
581- let ch = (aQ(bt) + cn)
582- (ba(0, cn, 0, cn) ++ [h(O(bt), ch), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cn, R)])
626+ let bF = aQ(bt)
627+ let bH = (bF + cs)
628+ (ba(0, cs, 0, cs) ++ [h(O(bt), bH), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cs, R)])
583629 }
584630 else throw("Strict value is not equal to itself.")
585631 }
587633
588634
589635 @Callable(ag)
590-func mintAtokenFor (bt,co) = {
591- let cp = bs(bt)
592- let aM = if ((co == -1))
593- then cp
594- else co
595- let ca = if (if (if (af(ag))
636+func mintAtokenFor (bt,ct) = {
637+ let cu = bs(bt)
638+ let aM = if ((ct == -1))
639+ then cu
640+ else ct
641+ let bE = if (if (if (af(ag))
596642 then ab("atokens")
597643 else false)
598- then e((-1 > co), "invalid amountToMint")
644+ then e((-1 > ct), "invalid amountToMint")
599645 else false)
600- then e((aM > cp), ("Trying to mint more than available, max: " + toString(cp)))
646+ then e((aM > cu), ("Trying to mint more than available, max: " + toString(cu)))
601647 else false
602- if ((ca == ca))
603- then (ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)])
648+ if ((bE == bE))
649+ then $Tuple2((ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)]), bn(aM))
604650 else throw("Strict value is not equal to itself.")
605651 }
606652
608654
609655 @Callable(ag)
610656 func redeemAtokens () = {
611- let ca = ab("atokens")
612- if ((ca == ca))
657+ let bE = ab("atokens")
658+ if ((bE == bE))
613659 then {
614660 let bo = aY(ag, ao)
615- let cq = bn(bo)
616- (ba(-(cq), 0, 0, cq) ++ [ScriptTransfer(ag.caller, cq, R), j(F, -(bo)), Burn(ao, bo)])
661+ let cv = bn(bo)
662+ (ba(-(cv), 0, 0, cv) ++ [ScriptTransfer(ag.caller, cv, R), j(F, -(bo)), Burn(ao, bo)])
617663 }
618664 else throw("Strict value is not equal to itself.")
619665 }
621667
622668
623669 @Callable(ag)
624-func withdrawFor (bt,aM) = {
625- let cr = ((aw + ax) - ay)
626- let ca = if (if (if (af(ag))
627- then aL(aM, cr, "funds in use")
628- else false)
629- then e((-1 > aM), "invalid amount")
630- else false)
631- then ab("withdraw")
670+func transferATokensFor (cw,cx,cy) = {
671+ let bE = if (af(ag))
672+ then ab("transfer_debt")
632673 else false
633- if ((ca == ca))
674+ if ((bE == bE))
634675 then {
635- let cs = if ((aM == -1))
636- then {
637- let cc = bs(bt)
638- $Tuple2(cc, bn(cc))
639- }
640- else $Tuple2(br(aM), aM)
641- let bC = cs._1
642- let ct = cs._2
643- (ba(-(ct), 0, 0, ct) ++ [ScriptTransfer(addressFromStringValue(bt), ct, R), j(M(bt), -(bC)), j(F, -(bC))])
676+ let cz = bm(cy)
677+ let ck = bp(cz)
678+ let cA = bs(cw)
679+ if ((ck > cA))
680+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cy)) + " transfer.assets: ") + toString(cz)) + " transfer.atokens: ") + toString(ck)) + " from.atokens: ") + toString(cA)) + " at ") + toString(this)))
681+ else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cw), -(ck)), j(M(cx), ck)]) ++ bw(cx)), bn(ck))
644682 }
645683 else throw("Strict value is not equal to itself.")
646684 }
648686
649687
650688 @Callable(ag)
651-func transferATokensFor (cu,cv,cw) = {
652- let ca = if (af(ag))
689+func transferDebtFor (cw,cx,aM) = {
690+ let bE = if (af(ag))
653691 then ab("transfer_debt")
654692 else false
655- if ((ca == ca))
656- then {
657- let cx = bm(cw)
658- let cc = bp(cx)
659- let cy = bs(cu)
660- if ((cc > cy))
661- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cw)) + " transfer.assets: ") + toString(cx)) + " transfer.atokens: ") + toString(cc)) + " from.atokens: ") + toString(cy)) + " at ") + toString(this)))
662- else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cu), -(cc)), j(M(cv), cc)]) ++ bw(cv)), bn(cc))
663- }
664- else throw("Strict value is not equal to itself.")
665- }
666-
667-
668-
669-@Callable(ag)
670-func transferDebtFor (cu,cv,aM) = {
671- let ca = if (af(ag))
672- then ab("transfer_debt")
673- else false
674- if ((ca == ca))
675- then (ba(0, 0, 0, 0) ++ [h(O(cu), (aQ(cu) - aM)), h(O(cv), (aQ(cv) + aM)), h(P(cu), aJ), h(P(cv), aJ), bu(cv)])
693+ if ((bE == bE))
694+ then $Tuple2((ba(0, 0, 0, 0) ++ [h(O(cw), (aQ(cw) - aM)), h(O(cx), (aQ(cx) + aM)), h(P(cw), aJ), h(P(cx), aJ), bu(cx)]), aM)
676695 else throw("Strict value is not equal to itself.")
677696 }
678697
680699
681700 @Callable(ag)
682701 func disableUseAsCollateralFor (bt) = {
683- let ca = if (af(ag))
702+ let bE = if (af(ag))
684703 then ab("use_as_col")
685704 else false
686- if ((ca == ca))
705+ if ((bE == bE))
687706 then if ((aQ(bt) > 0))
688707 then throw("can't disable collateral for asset with open debt")
689708 else (ba(0, 0, 0, 0) ++ [BooleanEntry(Q(bt), false)])
694713
695714 @Callable(ag)
696715 func enableUseAsCollateral () = {
697- let ca = ab("use_as_col")
698- if ((ca == ca))
716+ let bE = ab("use_as_col")
717+ if ((bE == bE))
699718 then (ba(0, 0, 0, 0) ++ [bu(toString(ag.caller))])
700719 else throw("Strict value is not equal to itself.")
701720 }
704723
705724 @Callable(ag)
706725 func collapseFor (bv) = {
707- let ca = if (af(ag))
726+ let bE = if (af(ag))
708727 then ab("force_collapse")
709728 else false
710- if ((ca == ca))
729+ if ((bE == bE))
711730 then bx(bv, -1)
712731 else throw("Strict value is not equal to itself.")
713732 }
715734
716735
717736 @Callable(ag)
737+func collapseForAmount (bv,aM) = {
738+ let bE = if (af(ag))
739+ then ab("collapse")
740+ else false
741+ if ((bE == bE))
742+ then bx(bv, aM)
743+ else throw("Strict value is not equal to itself.")
744+ }
745+
746+
747+
748+@Callable(ag)
718749 func collapseDebt (aM) = {
719- let ca = ab("collapse")
720- if ((ca == ca))
750+ let bE = ab("collapse")
751+ if ((bE == bE))
721752 then bx(toString(ag.caller), aM)
722753 else throw("Strict value is not equal to itself.")
723754 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = getInteger(this, b)
55
66
77 func c (b) = getString(this, b)
88
99
1010 func d (b) = value(getString(this, b))
1111
1212
1313 func e (f,g) = if (f)
1414 then throw(g)
1515 else true
1616
1717
1818 func h (b,i) = if ((0 > i))
1919 then throw(((("writing negative value " + toString(i)) + " for key ") + b))
2020 else IntegerEntry(b, i)
2121
2222
2323 func j (b,i) = h(b, (valueOrElse(a(b), 0) + i))
2424
2525
2626 func k (b,i) = StringEntry(b, i)
2727
2828
2929 func l (i,m,n) = {
3030 let o = fraction(i, m, n)
3131 let p = 3037000499
3232 let q = ((((o % p) * (n % p)) % p) == (((i % p) * (m % p)) % p))
3333 if (q)
3434 then o
3535 else (o + 1)
3636 }
3737
3838
3939 let r = 525600
4040
4141 let s = 10000000000000000
4242
4343 let t = 1000
4444
4545 let u = "assetId"
4646
4747 let v = "main"
4848
4949 let w = (d(u) + "_ReserveFactor")
5050
5151 let x = (d(u) + "_CollateralFactor")
5252
5353 let y = (getStringValue(u) + "_LiquidationThreshold")
5454
5555 let z = "account_health_overlap"
5656
5757 let A = (getStringValue(u) + "_LiquidationPenalty")
5858
5959 let B = "configAddress"
6060
6161 let C = "oracleAddress"
6262
6363 let D = "aTokenId"
6464
6565 let E = "aTokenName"
6666
6767 let F = "aTokenCirculation"
6868
6969 let G = "lastUpdateHeight"
7070
7171 let H = "totalBorrow"
7272
7373 let I = "totalDeposit"
7474
7575 let J = "totalReserve"
7676
7777 let K = "storedIndex"
7878
7979 let L = "aTokenDecimals"
8080
8181 func M (N) = (N + "_aTokenBalance")
8282
8383
8484 func O (N) = (N + "_debt")
8585
8686
8787 func P (N) = (N + "_index")
8888
8989
9090 func Q (N) = (N + "_useAsCollateral")
9191
9292
9393 let R = {
9494 let S = valueOrErrorMessage(c(u), "no assetId")
9595 if ((S == "WAVES"))
9696 then unit
9797 else fromBase58String(S)
9898 }
9999
100100 let T = {
101101 let U = R
102102 if ($isInstanceOf(U, "ByteVector"))
103103 then {
104104 let V = U
105105 toBase58String(V)
106106 }
107107 else if ($isInstanceOf(U, "Unit"))
108108 then {
109109 let W = U
110110 "WAVES"
111111 }
112112 else throw("Match error")
113113 }
114114
115115 func X (Y,R) = {
116116 let U = R
117117 if ($isInstanceOf(U, "ByteVector"))
118118 then {
119119 let V = U
120120 assetBalance(Y, V)
121121 }
122122 else if ($isInstanceOf(U, "Unit"))
123123 then {
124124 let W = U
125125 wavesBalance(Y).available
126126 }
127127 else throw("Match error")
128128 }
129129
130130
131131 let Z = valueOrErrorMessage(a(L), "no assetDecimals")
132132
133133 let aa = valueOrErrorMessage(addressFromString(valueOrErrorMessage(c(B), "no configAddress")), "invalid config address")
134134
135135 func ab (ac) = {
136136 let ad = valueOrErrorMessage(c(u), "no assetId")
137137 let U = invoke(aa, "opAllowed", [ad, ac], nil)
138138 if ($isInstanceOf(U, "Boolean"))
139139 then {
140140 let ae = U
141141 if (ae)
142142 then true
143143 else throw("not allowed")
144144 }
145145 else throw("opAllowed: unexpected result type")
146146 }
147147
148148
149149 func af (ag) = if ((ag.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, v), "no main in config")), "invalid main address")))
150150 then throw("only main can do")
151151 else true
152152
153153
154154 func ah (i) = if (if ((i != "WAVES"))
155155 then (fromBase58String(i) == fromBase58String(""))
156156 else false)
157157 then throw("invalid assetId")
158158 else true
159159
160160
161161 let ai = e(isDefined(c(u)), "already initialized")
162162
163163 let aj = {
164164 let U = c(C)
165165 if ($isInstanceOf(U, "String"))
166166 then {
167167 let ak = U
168168 addressFromString(ak)
169169 }
170170 else unit
171171 }
172172
173173 let al = {
174174 let U = invoke(valueOrErrorMessage(aj, "no oracle"), "price", [d(u)], nil)
175175 if ($isInstanceOf(U, "Int"))
176176 then {
177177 let ag = U
178178 ag
179179 }
180180 else throw("bad oracle data")
181181 }
182182
183183 let am = height
184184
185185 let an = valueOrErrorMessage(a(G), "no lastUpdateHeight")
186186
187187 let ao = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
188188
189189 let ap = valueOrElse(a(F), 0)
190190
191191 let aq = {
192192 let S = d(u)
193193 $Tuple4(getIntegerValue(aa, (S + "_APoint")), getIntegerValue(aa, (S + "_BPoint")), getIntegerValue(aa, (S + "_CPoint")), getIntegerValue(aa, (S + "_DPoint")))
194194 }
195195
196196 let ar = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
197197
198198 let as = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
199199
200200 let at = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
201201
202202 let au = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
203203
204204 let av = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
205205
206206 let aw = valueOrElse(a(I), 0)
207207
208208 let ax = valueOrElse(a(J), 0)
209209
210210 let ay = valueOrElse(a(H), 0)
211211
212212 let az = valueOrElse(a(K), s)
213213
214214 let aA = if ((aw > 0))
215215 then fraction(ay, t, aw)
216216 else 0
217217
218218 let aB = {
219219 let aC = aq
220220 let aD = aC._1
221221 let ae = aC._2
222222 let aE = aC._3
223223 let aF = aC._4
224224 let aG = (fraction((aD - aE), aA, -(ae)) + aD)
225225 let aH = (fraction((aE - aF), (aA - ae), (ae - t)) + aE)
226226 if ((aA == 0))
227227 then aD
228228 else if ((aA == ae))
229229 then aE
230230 else if (if ((ae > aA))
231231 then true
232232 else (ae == t))
233233 then aG
234234 else aH
235235 }
236236
237237 let aI = if ((aw == 0))
238238 then 0
239239 else fraction(fraction(ay, aB, aw), (t - ar), t)
240240
241241 let aJ = {
242242 let aK = l(aB, s, (r * t))
243243 l(az, (s + (aK * (am - an))), s)
244244 }
245245
246246 func aL (aM,aN,aO) = if ((aM > aN))
247247 then throw(("not enough liquidity: " + aO))
248248 else true
249249
250250
251251 func aP (N) = valueOrElse(a(O(N)), 0)
252252
253253
254254 func aQ (N) = {
255255 let aR = aP(N)
256256 if ((aR == 0))
257257 then 0
258258 else {
259259 let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
260260 fraction(aR, aJ, aS)
261261 }
262262 }
263263
264264
265265 let aT = fraction(ay, aJ, az)
266266
267267 let aU = (aT - ay)
268268
269269 let aV = fraction(aU, (t - ar), t)
270270
271271 let aW = (aw + aV)
272272
273273 let aX = ((ax + aU) - aV)
274274
275275 func aY (ag,R) = {
276276 let aZ = ag.payments[0].amount
277277 if ((0 >= aZ))
278278 then throw("Payment is less than min allowed amount")
279279 else if ((ag.payments[0].assetId != R))
280280 then throw(("bad asset attached: required " + T))
281281 else aZ
282282 }
283283
284284
285285 func ba (bb,bc,bd,be) = {
286286 let bf = {
287287 let U = R
288288 if ($isInstanceOf(U, "ByteVector"))
289289 then {
290290 let ad = U
291291 assetBalance(this, ad)
292292 }
293293 else wavesBalance(this).available
294294 }
295295 let bg = if ((bf == be))
296296 then unit
297297 else {
298298 let bh = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
299299 if (!(bh))
300300 then unit
301301 else {
302302 let bi = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, ("staking_config_" + T)), ("no staking address for " + T))), ("bad staking address for " + T))
303303 if ((bf > be))
304304 then invoke(bi, "put", nil, [AttachedPayment(R, (bf - be))])
305305 else invoke(bi, "get", [(be - bf)], nil)
306306 }
307307 }
308308 if ((bg == bg))
309309 then [h(K, aJ), h(G, am), h(I, (aW + bb)), h(H, (aT + bc)), h(J, (aX + bd))]
310310 else throw("Strict value is not equal to itself.")
311311 }
312312
313313
314314 func bj (bk) = if ((bk == 6))
315315 then 1000000
316316 else if ((bk == 8))
317317 then 100000000
318318 else throw(("bad decimals: " + toString(bk)))
319319
320320
321321 func bl (aM) = fraction(aM, al, bj(Z))
322322
323323
324324 func bm (aM) = fraction(aM, bj(Z), al)
325325
326326
327327 func bn (bo) = if ((bo == 0))
328328 then 0
329329 else if ((ap > 0))
330330 then fraction(bo, aW, ap)
331331 else bo
332332
333333
334334 func bp (bq) = if ((bq == 0))
335335 then 0
336336 else if ((ap > 0))
337337 then fraction(bq, ap, aW)
338338 else bq
339339
340340
341341 func br (bq) = if ((bq == 0))
342342 then 0
343343 else if ((ap > 0))
344344 then l(bq, ap, aW)
345345 else bq
346346
347347
348348 func bs (bt) = valueOrElse(a(M(bt)), 0)
349349
350350
351351 func bu (bv) = BooleanEntry(Q(bv), true)
352352
353353
354354 func bw (bv) = if ((aQ(bv) > 0))
355355 then [bu(bv)]
356356 else nil
357357
358358
359359 func bx (bt,aM) = {
360360 let by = aQ(bt)
361361 let bz = bn(bs(bt))
362362 let bA = min([by, bz])
363363 let bB = if ((-1 > aM))
364364 then throw("invalid collapse amount")
365365 else if (if ((bA == 0))
366366 then true
367367 else (aM == 0))
368368 then throw("nothing to collapse")
369369 else if (if ((aM == -1))
370370 then true
371371 else (aM > bA))
372372 then bA
373373 else aM
374374 let bC = br(bB)
375- (ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)])
375+ $Tuple2((ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)]), bB)
376376 }
377377
378378
379-func bD () = {
380- let bE = aq
381- let aD = bE._1
382- let ae = bE._2
383- let aE = bE._3
384- let aF = bE._4
379+func bD (N,aM) = {
380+ let bE = ab("repay")
381+ if ((bE == bE))
382+ then {
383+ let bF = aQ(N)
384+ if ((bF == bF))
385+ then {
386+ let bG = if ((aM > bF))
387+ then $Tuple4(0, -(bF), (aM - bF), [ScriptTransfer(addressFromStringValue(N), (aM - bF), R)])
388+ else $Tuple4((bF - aM), -(aM), 0, nil)
389+ let bH = bG._1
390+ let bI = bG._2
391+ let bJ = bG._3
392+ let bK = bG._4
393+ let bL = (aM - bJ)
394+ $Tuple2(((ba(0, bI, 0, bJ) ++ bK) ++ [h(O(N), bH), h(P(N), aJ)]), bL)
395+ }
396+ else throw("Strict value is not equal to itself.")
397+ }
398+ else throw("Strict value is not equal to itself.")
399+ }
400+
401+
402+func bM () = {
403+ let bN = aq
404+ let aD = bN._1
405+ let ae = bN._2
406+ let aE = bN._3
407+ let aF = bN._4
385408 ((((((((((((((("ABCD: " + toString(aD)) + ";") + toString(ae)) + ";") + toString(aE)) + ";") + toString(aF)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
386409 }
387410
388411
389-func bF () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aJ)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aI))
412+func bO () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aJ)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aI))
390413
391414
392-func bG (bv) = {
393- let bH = bs(bv)
394- let bI = X(addressFromStringValue(bv), ao)
395- ((((((((((((((((("currentDebt: " + toString(aQ(bv))) + ", storedDebt: ") + toString(valueOrElse(a(O(bv)), 0))) + ", currentDeposit: ") + toString(bn(bH))) + ", aTokenContractBalance: ") + toString(bH)) + ", aTokenWalletBalance: ") + toString(bI)) + ", walletStake: ") + toString(bn(bI))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bv), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bv)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bv)), 0)))
415+func bP (bv) = {
416+ let bQ = bs(bv)
417+ let bR = X(addressFromStringValue(bv), ao)
418+ ((((((((((((((((("currentDebt: " + toString(aQ(bv))) + ", storedDebt: ") + toString(valueOrElse(a(O(bv)), 0))) + ", currentDeposit: ") + toString(bn(bQ))) + ", aTokenContractBalance: ") + toString(bQ)) + ", aTokenWalletBalance: ") + toString(bR)) + ", walletStake: ") + toString(bn(bR))) + ", assetWalletBalance: ") + toString(X(addressFromStringValue(bv), R))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bv)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bv)), 0)))
396419 }
397420
398421
399-func bJ () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aJ)) + ", currentHeight: ") + toString(am)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR))))
422+func bS () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(an)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aJ)) + ", currentHeight: ") + toString(am)) + ", aTokenCirculation: ") + toString(ap)) + ", aTokenPrice: ") + toString(bn(pow(10, 0, Z, 0, 0, FLOOR))))
400423
401424
402425 @Callable(ag)
403-func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bD()) + ", ") + bF()))
426+func getCurrentTotals () = $Tuple2(nil, $Tuple2(aW, aT))
427+
428+
429+
430+@Callable(ag)
431+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bM()) + ", ") + bO()))
404432
405433
406434
407435 @Callable(ag)
408436 func adviseUser (bv) = {
409- let bK = bl(aT)
410- let bL = bl(aW)
411- let bM = valueOrElse(getBoolean(this, Q(bv)), true)
412- let bN = if (bM)
413- then bL
437+ let bT = bl(aT)
438+ let bU = bl(aW)
439+ let bV = valueOrElse(getBoolean(this, Q(bv)), true)
440+ let bW = if (bV)
441+ then bU
414442 else 0
415- let bO = min([bK, bN])
416- let bP = l(bO, au, t)
417- let bQ = if ((bK > bN))
443+ let bX = min([bT, bW])
444+ let bY = l(bX, au, t)
445+ let bZ = if ((bT > bW))
418446 then 0
419- else fraction((bN - bK), as, t)
420- let bR = if ((bK > bN))
421- then (fraction((bK - bN), t, at) + bP)
422- else bP
423- let bS = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(bK)) + ", currentDepositUsd: ") + toString(bL)) + ", bp: ") + toString(bQ)) + ", bpu: ") + toString(bR))
424- $Tuple2(nil, ((bS + ", ") + bG(bv)))
447+ else fraction((bW - bT), as, t)
448+ let ca = if ((bT > bW))
449+ then (fraction((bT - bW), t, at) + bY)
450+ else bY
451+ let cb = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(bT)) + ", currentDepositUsd: ") + toString(bU)) + ", bp: ") + toString(bZ)) + ", bpu: ") + toString(ca))
452+ $Tuple2(nil, ((cb + ", ") + bP(bv)))
425453 }
426454
427455
428456
429457 @Callable(ag)
430458 func addInterest () = if ((ag.payments[0].assetId != R))
431459 then throw("can't add interest with unrelated token")
432460 else ba(ag.payments[0].amount, 0, 0, 0)
433461
434462
435463
436464 @Callable(ag)
437465 func addToReserve () = if ((ag.payments[0].assetId != R))
438466 then throw("can't add interest with unrelated token")
439467 else ba(0, 0, ag.payments[0].amount, 0)
440468
441469
442470
443471 @Callable(ag)
444472 func withdrawFromReserve (bB) = {
445- let bT = getStringValue(aa, "admin")
446- if ((toString(ag.caller) != bT))
473+ let cc = getStringValue(aa, "admin")
474+ if ((toString(ag.caller) != cc))
447475 then throw("only admin can do")
448- else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(bT), bB, R)])
476+ else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(cc), bB, R)])
449477 }
450478
451479
452480
453481 @Callable(ag)
454482 func forceUpdate () = {
455- let bT = getStringValue(aa, "admin")
456- if ((toString(ag.caller) != bT))
483+ let cc = getStringValue(aa, "admin")
484+ if ((toString(ag.caller) != cc))
457485 then throw("only admin can do")
458486 else ba(0, 0, 0, 0)
459487 }
460488
461489
462490
463491 @Callable(ag)
464-func initialize (bU,bV,bW,bX,bY,bZ) = {
465- let ca = if (ai)
466- then ah(bW)
492+func initialize (cd,ce,cf,cg,ch,ci) = {
493+ let bE = if (ai)
494+ then ah(cf)
467495 else false
468- if ((ca == ca))
496+ if ((bE == bE))
469497 then {
470- let cb = Issue(bX, bY, 0, bZ, true)
471-[cb, k(C, bV), h(L, bZ), k(E, bX), k(u, bW), k(B, bU), k(D, toBase58String(calculateAssetId(cb))), h(G, am)]
498+ let cj = Issue(cg, ch, 0, ci, true)
499+[cj, k(C, ce), h(L, ci), k(E, cg), k(u, cf), k(B, cd), k(D, toBase58String(calculateAssetId(cj))), h(G, am)]
472500 }
473501 else throw("Strict value is not equal to itself.")
474502 }
475503
476504
477505
478506 @Callable(ag)
479507 func userDepositUSD (bt) = $Tuple2(nil, bl(bn(bs(bt))))
480508
481509
482510
483511 @Callable(ag)
484512 func userDebtUSD (bt) = $Tuple2(nil, bl(aQ(bt)))
485513
486514
487515
488516 @Callable(ag)
489517 func userBalance (bt) = {
490- let cc = bs(bt)
491- let cd = bn(cc)
518+ let ck = bs(bt)
519+ let cl = bn(ck)
492520 let by = aQ(bt)
493- $Tuple2(nil, $Tuple6(cc, cd, bl(cd), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
521+ $Tuple2(nil, $Tuple6(ck, cl, bl(cl), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
494522 }
495523
496524
497525
498526 @Callable(ag)
499527 func userDebt (bt) = {
500528 let by = aQ(bt)
501- let ce = bl(by)
502- $Tuple2(nil, $Tuple2(by, ce))
529+ let cm = bl(by)
530+ $Tuple2(nil, $Tuple2(by, cm))
503531 }
504532
505533
506534
507535 @Callable(ag)
508536 func assetUsdValue (bq) = $Tuple2(nil, bl(bq))
509537
510538
511539
512540 @Callable(ag)
513-func repay () = {
514- let ca = ab("repay")
515- if ((ca == ca))
541+func repayFor (N) = {
542+ let bE = af(ag)
543+ if ((bE == bE))
544+ then bD(N, aY(ag, R))
545+ else throw("Strict value is not equal to itself.")
546+ }
547+
548+
549+
550+@Callable(ag)
551+func repay () = bD(toString(ag.caller), aY(ag, R))
552+
553+
554+
555+@Callable(ag)
556+func depositFor (cn,co) = {
557+ let bE = if (af(ag))
558+ then ab("deposit")
559+ else false
560+ if ((bE == bE))
561+ then if (if ((aQ(cn) > 0))
562+ then !(co)
563+ else false)
564+ then throw("can't disable use as collateral for asset with open debt")
565+ else {
566+ let aM = aY(ag, R)
567+ let bo = bp(aM)
568+ (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cn), bo), BooleanEntry(Q(cn), co)])
569+ }
570+ else throw("Strict value is not equal to itself.")
571+ }
572+
573+
574+
575+@Callable(ag)
576+func withdrawFor (bt,aM) = {
577+ let cp = ((aw + ax) - ay)
578+ let bE = if (if (if (af(ag))
579+ then aL(aM, cp, "funds in use")
580+ else false)
581+ then e((-1 > aM), "invalid amount")
582+ else false)
583+ then ab("withdraw")
584+ else false
585+ if ((bE == bE))
516586 then {
517- let N = toString(ag.caller)
518- let aM = aY(ag, R)
519- let cf = aQ(N)
520- if ((cf == cf))
587+ let cq = if ((aM == -1))
521588 then {
522- let cg = if ((aM > cf))
523- then $Tuple4(0, -(cf), (aM - cf), [ScriptTransfer(ag.caller, (aM - cf), R)])
524- else $Tuple4((cf - aM), -(aM), 0, nil)
525- let ch = cg._1
526- let ci = cg._2
527- let cj = cg._3
528- let ck = cg._4
529- ((ba(0, ci, 0, cj) ++ ck) ++ [h(O(N), ch), h(P(N), aJ)])
589+ let ck = bs(bt)
590+ $Tuple2(ck, bn(ck))
530591 }
531- else throw("Strict value is not equal to itself.")
592+ else $Tuple2(br(aM), aM)
593+ let bC = cq._1
594+ let cr = cq._2
595+ $Tuple2((ba(-(cr), 0, 0, cr) ++ [ScriptTransfer(addressFromStringValue(bt), cr, R), j(M(bt), -(bC)), j(F, -(bC))]), cr)
532596 }
533597 else throw("Strict value is not equal to itself.")
534598 }
535599
536600
537601
538602 @Callable(ag)
539-func depositFor (cl,cm) = {
540- let ca = if (af(ag))
541- then ab("deposit")
603+func replenishWithAtokenFor (bv) = {
604+ let bE = if (af(ag))
605+ then ab("atokens")
542606 else false
543- if ((ca == ca))
544- then if (if ((aQ(cl) > 0))
545- then !(cm)
546- else false)
547- then throw("can't disable use as collateral for asset with open debt")
548- else {
549- let aM = aY(ag, R)
550- let bo = bp(aM)
551- (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cl), bo), BooleanEntry(Q(cl), cm)])
552- }
553- else throw("Strict value is not equal to itself.")
554- }
555-
556-
557-
558-@Callable(ag)
559-func replenishWithAtoken () = {
560- let ca = ab("atokens")
561- if ((ca == ca))
607+ if ((bE == bE))
562608 then {
563609 let bo = aY(ag, ao)
564- let bv = toString(ag.caller)
565- ((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv))
610+ $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv)), bn(bo))
566611 }
567612 else throw("Strict value is not equal to itself.")
568613 }
569614
570615
571616
572617 @Callable(ag)
573-func borrowFor (bt,cn) = {
574- let ca = if (if (af(ag))
575- then aL(cn, (aw - ay), "too much borrow requested")
618+func borrowFor (bt,cs) = {
619+ let bE = if (if (af(ag))
620+ then aL(cs, (aw - ay), "too much borrow requested")
576621 else false)
577622 then ab("borrow")
578623 else false
579- if ((ca == ca))
624+ if ((bE == bE))
580625 then {
581- let ch = (aQ(bt) + cn)
582- (ba(0, cn, 0, cn) ++ [h(O(bt), ch), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cn, R)])
626+ let bF = aQ(bt)
627+ let bH = (bF + cs)
628+ (ba(0, cs, 0, cs) ++ [h(O(bt), bH), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cs, R)])
583629 }
584630 else throw("Strict value is not equal to itself.")
585631 }
586632
587633
588634
589635 @Callable(ag)
590-func mintAtokenFor (bt,co) = {
591- let cp = bs(bt)
592- let aM = if ((co == -1))
593- then cp
594- else co
595- let ca = if (if (if (af(ag))
636+func mintAtokenFor (bt,ct) = {
637+ let cu = bs(bt)
638+ let aM = if ((ct == -1))
639+ then cu
640+ else ct
641+ let bE = if (if (if (af(ag))
596642 then ab("atokens")
597643 else false)
598- then e((-1 > co), "invalid amountToMint")
644+ then e((-1 > ct), "invalid amountToMint")
599645 else false)
600- then e((aM > cp), ("Trying to mint more than available, max: " + toString(cp)))
646+ then e((aM > cu), ("Trying to mint more than available, max: " + toString(cu)))
601647 else false
602- if ((ca == ca))
603- then (ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)])
648+ if ((bE == bE))
649+ then $Tuple2((ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)]), bn(aM))
604650 else throw("Strict value is not equal to itself.")
605651 }
606652
607653
608654
609655 @Callable(ag)
610656 func redeemAtokens () = {
611- let ca = ab("atokens")
612- if ((ca == ca))
657+ let bE = ab("atokens")
658+ if ((bE == bE))
613659 then {
614660 let bo = aY(ag, ao)
615- let cq = bn(bo)
616- (ba(-(cq), 0, 0, cq) ++ [ScriptTransfer(ag.caller, cq, R), j(F, -(bo)), Burn(ao, bo)])
661+ let cv = bn(bo)
662+ (ba(-(cv), 0, 0, cv) ++ [ScriptTransfer(ag.caller, cv, R), j(F, -(bo)), Burn(ao, bo)])
617663 }
618664 else throw("Strict value is not equal to itself.")
619665 }
620666
621667
622668
623669 @Callable(ag)
624-func withdrawFor (bt,aM) = {
625- let cr = ((aw + ax) - ay)
626- let ca = if (if (if (af(ag))
627- then aL(aM, cr, "funds in use")
628- else false)
629- then e((-1 > aM), "invalid amount")
630- else false)
631- then ab("withdraw")
670+func transferATokensFor (cw,cx,cy) = {
671+ let bE = if (af(ag))
672+ then ab("transfer_debt")
632673 else false
633- if ((ca == ca))
674+ if ((bE == bE))
634675 then {
635- let cs = if ((aM == -1))
636- then {
637- let cc = bs(bt)
638- $Tuple2(cc, bn(cc))
639- }
640- else $Tuple2(br(aM), aM)
641- let bC = cs._1
642- let ct = cs._2
643- (ba(-(ct), 0, 0, ct) ++ [ScriptTransfer(addressFromStringValue(bt), ct, R), j(M(bt), -(bC)), j(F, -(bC))])
676+ let cz = bm(cy)
677+ let ck = bp(cz)
678+ let cA = bs(cw)
679+ if ((ck > cA))
680+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cy)) + " transfer.assets: ") + toString(cz)) + " transfer.atokens: ") + toString(ck)) + " from.atokens: ") + toString(cA)) + " at ") + toString(this)))
681+ else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cw), -(ck)), j(M(cx), ck)]) ++ bw(cx)), bn(ck))
644682 }
645683 else throw("Strict value is not equal to itself.")
646684 }
647685
648686
649687
650688 @Callable(ag)
651-func transferATokensFor (cu,cv,cw) = {
652- let ca = if (af(ag))
689+func transferDebtFor (cw,cx,aM) = {
690+ let bE = if (af(ag))
653691 then ab("transfer_debt")
654692 else false
655- if ((ca == ca))
656- then {
657- let cx = bm(cw)
658- let cc = bp(cx)
659- let cy = bs(cu)
660- if ((cc > cy))
661- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cw)) + " transfer.assets: ") + toString(cx)) + " transfer.atokens: ") + toString(cc)) + " from.atokens: ") + toString(cy)) + " at ") + toString(this)))
662- else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cu), -(cc)), j(M(cv), cc)]) ++ bw(cv)), bn(cc))
663- }
664- else throw("Strict value is not equal to itself.")
665- }
666-
667-
668-
669-@Callable(ag)
670-func transferDebtFor (cu,cv,aM) = {
671- let ca = if (af(ag))
672- then ab("transfer_debt")
673- else false
674- if ((ca == ca))
675- then (ba(0, 0, 0, 0) ++ [h(O(cu), (aQ(cu) - aM)), h(O(cv), (aQ(cv) + aM)), h(P(cu), aJ), h(P(cv), aJ), bu(cv)])
693+ if ((bE == bE))
694+ then $Tuple2((ba(0, 0, 0, 0) ++ [h(O(cw), (aQ(cw) - aM)), h(O(cx), (aQ(cx) + aM)), h(P(cw), aJ), h(P(cx), aJ), bu(cx)]), aM)
676695 else throw("Strict value is not equal to itself.")
677696 }
678697
679698
680699
681700 @Callable(ag)
682701 func disableUseAsCollateralFor (bt) = {
683- let ca = if (af(ag))
702+ let bE = if (af(ag))
684703 then ab("use_as_col")
685704 else false
686- if ((ca == ca))
705+ if ((bE == bE))
687706 then if ((aQ(bt) > 0))
688707 then throw("can't disable collateral for asset with open debt")
689708 else (ba(0, 0, 0, 0) ++ [BooleanEntry(Q(bt), false)])
690709 else throw("Strict value is not equal to itself.")
691710 }
692711
693712
694713
695714 @Callable(ag)
696715 func enableUseAsCollateral () = {
697- let ca = ab("use_as_col")
698- if ((ca == ca))
716+ let bE = ab("use_as_col")
717+ if ((bE == bE))
699718 then (ba(0, 0, 0, 0) ++ [bu(toString(ag.caller))])
700719 else throw("Strict value is not equal to itself.")
701720 }
702721
703722
704723
705724 @Callable(ag)
706725 func collapseFor (bv) = {
707- let ca = if (af(ag))
726+ let bE = if (af(ag))
708727 then ab("force_collapse")
709728 else false
710- if ((ca == ca))
729+ if ((bE == bE))
711730 then bx(bv, -1)
712731 else throw("Strict value is not equal to itself.")
713732 }
714733
715734
716735
717736 @Callable(ag)
737+func collapseForAmount (bv,aM) = {
738+ let bE = if (af(ag))
739+ then ab("collapse")
740+ else false
741+ if ((bE == bE))
742+ then bx(bv, aM)
743+ else throw("Strict value is not equal to itself.")
744+ }
745+
746+
747+
748+@Callable(ag)
718749 func collapseDebt (aM) = {
719- let ca = ab("collapse")
720- if ((ca == ca))
750+ let bE = ab("collapse")
751+ if ((bE == bE))
721752 then bx(toString(ag.caller), aM)
722753 else throw("Strict value is not equal to itself.")
723754 }
724755
725756

github/deemru/w8io/6500d08 
123.09 ms