tx · DjSaU8Kn5D9yH2J6vmbq7XyH2DnLzQawu1oxq7JLT5Dc

3PPdeWwrzaxqgr6BuReoF3sWfxW8SYv743D:  -0.01000000 Waves

2021.12.28 17:36 [2919274] smart account 3PPdeWwrzaxqgr6BuReoF3sWfxW8SYv743D > SELF 0.00000000 Waves

{ "type": 13, "id": "DjSaU8Kn5D9yH2J6vmbq7XyH2DnLzQawu1oxq7JLT5Dc", "fee": 1000000, "feeAssetId": null, "timestamp": 1640702116312, "version": 1, "sender": "3PPdeWwrzaxqgr6BuReoF3sWfxW8SYv743D", "senderPublicKey": "C3fFhhdansbg2NWwzu6z87qa7RTEYVqqFHbmzz7mBcok", "proofs": [ "3BiGTDqow6DbqNoi7Hkn4NFE5GvYvw8fb7dUMz7z42wWbLymH2CszdvtQ3g1t91qLcqjxmQG6bCD7i5QosdQMhBG" ], "script": "base64:AAIFAAAAAAAAAIsIAhIAEgMKAQgSBAoCCAgSABIDCgEIEgASABIDCgEBEgASCAoGCAgICAgBEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBARIDCgEIEgQKAggEEgQKAggBEgMKAQgSBAoCCAESBAoCCAESAwoBCBIFCgMICAESBQoDCAgBEgMKAQgSABIDCgEIEgQKAggBAAAAWQEAAAAEZ2V0SQAAAAEAAAADa2V5CQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAEZ2V0UwAAAAEAAAADa2V5CQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAFZ2V0U1YAAAABAAAAA2tleQkBAAAABXZhbHVlAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkBAAAAB3Rocm93SWYAAAACAAAACWNvbmRpdGlvbgAAAAVlcnJvcgMFAAAACWNvbmRpdGlvbgkAAAIAAAABBQAAAAVlcnJvcgYBAAAACHdyaXRlSW50AAAAAgAAAANrZXkAAAAFdmFsdWUDCQAAZgAAAAIAAAAAAAAAAAAFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAF3dyaXRpbmcgbmVnYXRpdmUgdmFsdWUgCQABpAAAAAEFAAAABXZhbHVlAgAAAAkgZm9yIGtleSAFAAAAA2tleQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAA2tleQUAAAAFdmFsdWUBAAAACGNoYW5nZUJ5AAAAAgAAAANrZXkAAAAFdmFsdWUJAQAAAAh3cml0ZUludAAAAAIFAAAAA2tleQkAAGQAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAA2tleQAAAAAAAAAAAAUAAAAFdmFsdWUBAAAAC3dyaXRlU3RyaW5nAAAAAgAAAANrZXkAAAAFdmFsdWUJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQUAAAAFdmFsdWUBAAAADGZyYWN0aW9uQ2VpbAAAAAMAAAAFdmFsdWUAAAAJbnVtZXJhdG9yAAAAC2Rlbm9taW5hdG9yBAAAAARjYW5kCQAAawAAAAMFAAAABXZhbHVlBQAAAAludW1lcmF0b3IFAAAAC2Rlbm9taW5hdG9yBAAAAAFEAAAAAAC1BPMzBAAAAAVleGFjdAkAAAAAAAACCQAAagAAAAIJAABoAAAAAgkAAGoAAAACBQAAAARjYW5kBQAAAAFECQAAagAAAAIFAAAAC2Rlbm9taW5hdG9yBQAAAAFEBQAAAAFECQAAagAAAAIJAABoAAAAAgkAAGoAAAACBQAAAAV2YWx1ZQUAAAABRAkAAGoAAAACBQAAAAludW1lcmF0b3IFAAAAAUQFAAAAAUQDBQAAAAVleGFjdAUAAAAEY2FuZAkAAGQAAAACBQAAAARjYW5kAAAAAAAAAAABAAAAAA1CbG9ja3NQZXJZZWFyAAAAAAAACAUgAAAAAAVSQmFzZQAAI4byb8EAAAAAAAALZmFjdG9yc0Jhc2UAAAAAAAAAA+gAAAAADGFzc2V0SWRTdG9yZQIAAAAHYXNzZXRJZAAAAAAJbWFpblN0b3JlAgAAAARtYWluAAAAABJyZXNlcnZlRmFjdG9yU3RvcmUJAAEsAAAAAgkBAAAABWdldFNWAAAAAQUAAAAMYXNzZXRJZFN0b3JlAgAAAA5fUmVzZXJ2ZUZhY3RvcgAAAAAVY29sbGF0ZXJhbEZhY3RvclN0b3JlCQABLAAAAAIJAQAAAAVnZXRTVgAAAAEFAAAADGFzc2V0SWRTdG9yZQIAAAARX0NvbGxhdGVyYWxGYWN0b3IAAAAAGWxpcXVpZGF0aW9uVGhyZXNob2xkU3RvcmUJAAEsAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQUAAAAMYXNzZXRJZFN0b3JlAgAAABVfTGlxdWlkYXRpb25UaHJlc2hvbGQAAAAAEm92ZXJsYXBDaGFyZ2VTdG9yZQIAAAAWYWNjb3VudF9oZWFsdGhfb3ZlcmxhcAAAAAAXbGlxdWlkYXRpb25QZW5hbHR5U3RvcmUJAAEsAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQUAAAAMYXNzZXRJZFN0b3JlAgAAABNfTGlxdWlkYXRpb25QZW5hbHR5AAAAABJjb25maWdBZGRyZXNzU3RvcmUCAAAADWNvbmZpZ0FkZHJlc3MAAAAAC29yYWNsZVN0b3JlAgAAAA1vcmFjbGVBZGRyZXNzAAAAAA1hVG9rZW5JZFN0b3JlAgAAAAhhVG9rZW5JZAAAAAAPYVRva2VuTmFtZVN0b3JlAgAAAAphVG9rZW5OYW1lAAAAABZhVG9rZW5DaXJjdWxhdGlvblN0b3JlAgAAABFhVG9rZW5DaXJjdWxhdGlvbgAAAAAVbGFzdFVwZGF0ZUhlaWdodFN0b3JlAgAAABBsYXN0VXBkYXRlSGVpZ2h0AAAAAA50b3RhbERlYnRTdG9yZQIAAAALdG90YWxCb3Jyb3cAAAAAEXRvdGFsRGVwb3NpdFN0b3JlAgAAAAx0b3RhbERlcG9zaXQAAAAAEXRvdGFsUmVzZXJ2ZVN0b3JlAgAAAAx0b3RhbFJlc2VydmUAAAAACmluZGV4U3RvcmUCAAAAC3N0b3JlZEluZGV4AAAAABNhVG9rZW5EZWNpbWFsc1N0b3JlAgAAAA5hVG9rZW5EZWNpbWFscwEAAAASYVRva2VuQmFsYW5jZVN0b3JlAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACBQAAAAt1c2VyQWRkcmVzcwIAAAAOX2FUb2tlbkJhbGFuY2UBAAAACWRlYnRTdG9yZQAAAAEAAAALdXNlckFkZHJlc3MJAAEsAAAAAgUAAAALdXNlckFkZHJlc3MCAAAABV9kZWJ0AQAAAA5kZWJ0SW5kZXhTdG9yZQAAAAEAAAALdXNlckFkZHJlc3MJAAEsAAAAAgUAAAALdXNlckFkZHJlc3MCAAAABl9pbmRleAEAAAAUdXNlQXNDb2xsYXRlcmFsU3RvcmUAAAABAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIFAAAAC3VzZXJBZGRyZXNzAgAAABBfdXNlQXNDb2xsYXRlcmFsAAAAAAdhc3NldElkBAAAAAJpZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAEZ2V0UwAAAAEFAAAADGFzc2V0SWRTdG9yZQIAAAAKbm8gYXNzZXRJZAMJAAAAAAAAAgUAAAACaWQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAAAmlkAAAAAAphc3NldElkU3RyBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJidgUAAAAHJG1hdGNoMAkAAlgAAAABBQAAAAJidgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5p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B19EUG9pbnQAAAAADXJlc2VydmVGYWN0b3IJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABJyZXNlcnZlRmFjdG9yU3RvcmUCAAAAEG5vIHJlc2VydmVGYWN0b3IAAAAAEGNvbGxhdGVyYWxGYWN0b3IJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABVjb2xsYXRlcmFsRmFjdG9yU3RvcmUCAAAAE25vIGNvbGxhdGVyYWxGYWN0b3IAAAAAFGxpcXVpZGF0aW9uVGhyZXNob2xkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAZbGlxdWlkYXRpb25UaHJlc2hvbGRTdG9yZQIAAAAXbm8gbGlxdWlkYXRpb25UaHJlc2hvbGQAAAAAFGFjY291bnRIZWFsdGhPdmVybGFwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAASb3ZlcmxhcENoYXJnZVN0b3JlAgAAABBubyBvdmVybGFwQ2hhcmdlAAAAABJsaXF1aWRhdGlvblBlbmFsdHkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABdsaXF1aWRhdGlvblBlbmFsdHlTdG9yZQIAAAAVbm8gbGlxdWlkYXRpb25QZW5hbHR5AAAAABJzdG9yZWRUb3RhbERlcG9zaXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAARdG90YWxEZXBvc2l0U3RvcmUAAAAAAAAAAAAAAAAAEnN0b3JlZFRvdGFsUmVzZXJ2ZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAABF0b3RhbFJlc2VydmVTdG9yZQAAAAAAAAAAAAAAAAAPc3RvcmVkVG90YWxEZWJ0CQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAADnRvdGFsRGVidFN0b3JlAAAA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DGN1cnJlbnRJbmRleAUAAAALc3RvcmVkSW5kZXgAAAAACWFkZGVkRGVidAkAAGUAAAACBQAAABBjdXJyZW50VG90YWxEZWJ0BQAAAA9zdG9yZWRUb3RhbERlYnQAAAAADGFkZGVkRGVwb3NpdAkAAGsAAAADBQAAAAlhZGRlZERlYnQJAABlAAAAAgUAAAALZmFjdG9yc0Jhc2UFAAAADXJlc2VydmVGYWN0b3IFAAAAC2ZhY3RvcnNCYXNlAAAAABNjdXJyZW50VG90YWxEZXBvc2l0CQAAZAAAAAIFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAUAAAAMYWRkZWREZXBvc2l0AAAAABNjdXJyZW50VG90YWxSZXNlcnZlCQAAZQAAAAIJAABkAAAAAgUAAAASc3RvcmVkVG90YWxSZXNlcnZlBQAAAAlhZGRlZERlYnQFAAAADGFkZGVkRGVwb3NpdAEAAAANcGF5bWVudEFtb3VudAAAAAIAAAABaQAAAAdhc3NldElkBAAAAAFwCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAAXAJAAACAAAAAQIAAAAnUGF5bWVudCBpcyBsZXNzIHRoYW4gbWluIGFsbG93ZWQgYW1vdW50AwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAAHYXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAHWJhZCBhc3NldCBhdHRhY2hlZDogcmVxdWlyZWQgBQAAAAphc3NldElkU3RyBQAAAAFwAQAAAApzeW5jVG90YWxzAAAABAAAABFhZGRpdGlvbmFsRGVwb3NpdAAAAA5hZGRpdGlvbmFsRGVidAAAABFhZGRpdGlvbmFsUmVzZXJ2ZQAAAA1rZWVwQXRCYWxhbmNlBAAAAA1hY3R1YWxCYWxhbmNlBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAANhaWQFAAAAByRtYXRjaDAJAAPwAAAAAgUAAAAEdGhpcwUAAAADYWlkCAkAA+8AAAABBQAAAAR0aGlzAAAACWF2YWlsYWJsZQQAAAANc3Rha2luZ0FjdGlvbgMJAAAAAAAAAgUAAAANYWN0dWFsQmFsYW5jZQUAAAANa2VlcEF0QmFsYW5jZQUAAAAEdW5pdAQAAAAOc3Rha2luZ0VuYWJsZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACAgAAABBzdGFraW5nX2VuYWJsZWRfBQAAAAphc3NldElkU3RyBwMJAQAAAAEhAAAAAQUAAAAOc3Rha2luZ0VuYWJsZWQFAAAABHVuaXQEAAAADnN0YWtpbmdBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgIAAAAPc3Rha2luZ19jb25maWdfBQAAAAphc3NldElkU3RyCQABLAAAAAICAAAAF25vIHN0YWtpbmcgYWRkcmVzcyBmb3IgBQAAAAphc3NldElkU3RyCQABLAAAAAICAAAAGGJhZCBzdGFraW5nIGFkZHJlc3MgZm9yIAUAAAAKYXNzZXRJZFN0cgMJAABmAAAAAgUAAAANYWN0dWFsQmFsYW5jZQUAAAANa2VlcEF0QmFsYW5jZQkAA/wAAAAEBQAAAA5zdGFraW5nQWRkcmVzcwIAAAADcHV0BQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAB2Fzc2V0SWQJAABlAAAAAgUAAAANYWN0dWFsQmFsYW5jZQUAAAANa2VlcEF0QmFsYW5jZQUAAAADbmlsCQAD/AAAAAQFAAAADnN0YWtpbmdBZGRyZXNzAgAAAANnZXQJAARMAAAAAgkAAGUAAAACBQAAAA1rZWVwQXRCYWxhbmNlBQAAAA1hY3R1YWxCYWxhbmNlBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAANc3Rha2luZ0FjdGlvbgUAAAANc3Rha2luZ0FjdGlvbgkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAAAppbmRleFN0b3JlBQAAAAxjdXJyZW50SW5kZXgJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAAVbGFzdFVwZGF0ZUhlaWdodFN0b3JlBQAAAAZIRUlHSFQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAARdG90YWxEZXBvc2l0U3RvcmUJAABkAAAAAgUAAAATY3VycmVudFRvdGFsRGVwb3NpdAUAAAARYWRkaXRpb25hbERlcG9zaXQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAAOdG90YWxEZWJ0U3RvcmUJAABkAAAAAgUAAAAQY3VycmVudFRvdGFsRGVidAUAAAAOYWRkaXRpb25hbERlYnQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAARdG90YWxSZXNlcnZlU3RvcmUJAABkAAAAAgUAAAATY3VycmVudFRvdGFsUmVzZXJ2ZQUAAAARYWRkaXRpb25hbFJlc2VydmUFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAABXBvdzEwAAAAAQAAAAFuAwkAAAAAAAACBQAAAAFuAAAAAAAAAAAGAAAAAAAAD0JAAwkAAAAAAAACBQAAAAFuAAAAAAAAAAAIAAAAAAAF9eEACQAAAgAAAAEJAAEsAAAAAgIAAAAOYmFkIGRlY2ltYWxzOiAJAAGkAAAAAQUAAAABbgEAAAAKYXNzZXRUb1VzZAAAAAEAAAAGYW1vdW50CQAAawAAAAMFAAAABmFtb3VudAUAAAALb3JhY2xlUHJpY2UJAQAAAAVwb3cxMAAAAAEFAAAADWFzc2V0RGVjaW1hbHMBAAAACnVzZFRvQXNzZXQAAAABAAAABmFtb3VudAkAAGsAAAADBQAAAAZhbW91bnQJAQAAAAVwb3cxMAAAAAEFAAAADWFzc2V0RGVjaW1hbHMFAAAAC29yYWNsZVByaWNlAQAAAA1hVG9rZW5Ub0Fzc2V0AAAAAQAAAAxhVG9rZW5BbW91bnQDCQAAAAAAAAIFAAAADGFUb2tlbkFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAMJAABmAAAAAgUAAAARYVRva2VuQ2lyY3VsYXRpb24AAAAAAAAAAAAJAABrAAAAAwUAAAAMYVRva2VuQW1vdW50BQAAABNjdXJyZW50VG90YWxEZXBvc2l0BQAAABFhVG9rZW5DaXJjdWxhdGlvbgUAAAAMYVRva2VuQW1vdW50AQAAAA1hc3NldFRvQVRva2VuAAAAAQAAAAthc3NldEFtb3VudAMJAAAAAAAAAgUAAAALYXNzZXRBbW91bnQAAAAAAAAAAAAAAAAAAAAAAAADCQAAZgAAAAIFAAAAEWFUb2tlbkNpcmN1bGF0aW9uAAAAAAAAAAAACQAAawAAAAMFAAAAC2Fzc2V0QW1vdW50BQAAABFhVG9rZW5DaXJjdWxhdGlvbgUAAAATY3VycmVudFRvdGFsRGVwb3NpdAUAAAALYXNzZXRBbW91bnQBAAAAEWFzc2V0VG9BVG9rZW5DZWlsAAAAAQAAAAthc3NldEFtb3VudAMJAAAAAAAAAgUAAAALYXNzZXRBbW91bnQAAAAAAAAAAAAAAAAAAAAAAAADCQAAZgAAAAIFAAAAEWFUb2tlbkNpcmN1bGF0aW9uAAAAAAAAAAAACQEAAAAMZnJhY3Rpb25DZWlsAAAAAwUAAAALYXNzZXRBbW91bnQFAAAAEWFUb2tlbkNpcmN1bGF0aW9uBQAAABNjdXJyZW50VG90YWxEZXBvc2l0BQAAAAthc3NldEFtb3VudAEAAAANYVRva2VuQmFsYW5jZQAAAAEAAAAHYWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABCQEAAAASYVRva2VuQmFsYW5jZVN0b3JlAAAAAQUAAAAHYWRkcmVzcwAAAAAAAAAAAAEAAAAJZW5hYmxlQ29sAAAAAQAAAAR1c2VyCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAFHVzZUFzQ29sbGF0ZXJhbFN0b3JlAAAAAQUAAAAEdXNlcgYBAAAAEWVuYWJsZUNvbElmTmVlZGVkAAAAAQAAAAR1c2VyAwkAAGYAAAACCQEAAAAPY3VycmVudFVzZXJEZWJ0AAAAAQUAAAAEdXNlcgAAAAAAAAAAAAkABEwAAAACCQEAAAAJZW5hYmxlQ29sAAAAAQUAAAAEdXNlcgUAAAADbmlsBQAAAANuaWwBAAAADGNvbGxhcHNlVXNlcgAAAAIAAAAHYWRkcmVzcwAAAAZhbW91bnQEAAAABGRlYnQJAQAAAA9jdXJyZW50VXNlckRlYnQAAAABBQAAAAdhZGRy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aW4gY2FuIGRvCQEAAAAKc3luY1RvdGFscwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaQEAAAAKaW5pdGlhbGl6ZQAAAAYAAAAKY2ZnQWRkcmVzcwAAAApvcmFjbGVBZGRyAAAADmFzc2V0SWRPcldhdmVzAAAACmFUb2tlbk5hbWUAAAARYVRva2VuRGVzY3JpcHRpb24AAAAOYVRva2VuRGVjaW1hbHMEAAAABmNoZWNrcwMFAAAADm5vdEluaXRpYWxpemVkCQEAAAAQaXNBc3NldElkT3JXYXZlcwAAAAEFAAAADmFzc2V0SWRPcldhdmVzBwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAABmFUb2tlbgkABEIAAAAFBQAAAAphVG9rZW5OYW1lBQAAABFhVG9rZW5EZXNjcmlwdGlvbgAAAAAAAAAAAAUAAAAOYVRva2VuRGVjaW1hbHMGCQAETAAAAAIFAAAABmFUb2tlbgkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACBQAAAAtvcmFjbGVTdG9yZQUAAAAKb3JhY2xlQWRkcgkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAABNhVG9rZW5EZWNpbWFsc1N0b3JlBQAAAA5hVG9rZW5EZWNpbWFscwkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACBQAAAA9hVG9rZW5OYW1lU3RvcmUFAAAACmFUb2tlbk5hbWUJAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgUAAAAMYXNzZXRJZFN0b3JlBQAAAA5hc3NldElkT3JXYXZlcwkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACBQAAABJjb25maWdBZGRyZXNzU3RvcmUFAAAACmNmZ0FkZHJlc3MJAARMAAAAAgkBAAAAC3dyaXRlU3RyaW5nAAAAAgUAAAANYVRva2VuSWRTdG9yZQkAAlgAAAABCQAEOAAAAAEFAAAABmFUb2tlbgkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAABVsYXN0VXBkYXRlSGVpZ2h0U3RvcmUFAAAABkhFSUdIVAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBu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cm93Rm9yAAAAAgAAAAdhZGRyZXNzAAAADmFtb3VudFRvQm9ycm93BAAAAAZjaGVja3MDAwkBAAAACG1haW5Pbmx5AAAAAQUAAAABaQkBAAAADmxpcXVpZGl0eUNoZWNrAAAAAwUAAAAOYW1vdW50VG9Cb3Jyb3cJAABlAAAAAgUAAAASc3RvcmVkVG90YWxEZXBvc2l0BQAAAA9zdG9yZWRUb3RhbERlYnQCAAAAGXRvbyBtdWNoIGJvcnJvdyByZXF1ZXN0ZWQHCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAAGYm9ycm93BwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAAC2N1cnJlbnREZWJ0CQEAAAAPY3VycmVudFVzZXJEZWJ0AAAAAQUAAAAHYWRkcmVzcwQAAAAHbmV3RGVidAkAAGQAAAACBQAAAAtjdXJyZW50RGVidAUAAAAOYW1vdW50VG9Cb3Jyb3cJAAROAAAAAgkBAAAACnN5bmNUb3RhbHMAAAAEAAAAAAAAAAAABQAAAA5hbW91bnRUb0JvcnJvdwAAAAAAAAAAAAUAAAAOYW1vdW50VG9Cb3Jyb3cJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgkBAAAACWRlYnRTdG9yZQAAAAEFAAAAB2FkZHJlc3MFAAAAB25ld0RlYnQJAARMAAAAAgkBAAAACWVuYWJsZUNvbAAAAAEFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgkBAAAADmRlYnRJbmRleFN0b3JlAAAAAQUAAAAHYWRkcmVzcwUAAAAMY3VycmVudEluZGV4CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAB2FkZHJlc3MFAAAADmFtb3VudFRvQm9ycm93BQAAAAdhc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADW1pbnRBdG9rZW5Gb3IAAAACAAAAB2FkZHJlc3MAAAAMYW1vdW50VG9NaW50BAAAABF1c2VyQVRva2VuQmFsYW5jZQkBAAAADWFUb2tlbkJhbGFuY2UAAAAB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", "chainId": 87, "height": 2919274, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FDTZCFH4KLn7nqey6YgGLvjBnzWAN7am2RfJqfrGXSyD Next: G5PTv1uPXkGGbbSfHmu4Br51FvqAGwvCUSnNuWXq4KX6 Diff:
OldNewDifferences
151151 else true
152152
153153
154-func ah (i) = if (if ((i != "WAVES"))
154+func ah (ag) = {
155+ let ai = valueOrErrorMessage(getString(aa, "divAdmins"), "no div admins")
156+ if (!(contains(ai, toString(ag.caller))))
157+ then throw("only div admin can do")
158+ else true
159+ }
160+
161+
162+func aj (i) = if (if ((i != "WAVES"))
155163 then (fromBase58String(i) == fromBase58String(""))
156164 else false)
157165 then throw("invalid assetId")
158166 else true
159167
160168
161-let ai = e(isDefined(c(u)), "already initialized")
169+let ak = e(isDefined(c(u)), "already initialized")
162170
163-let aj = {
171+let al = {
164172 let U = c(C)
165173 if ($isInstanceOf(U, "String"))
166174 then {
167- let ak = U
168- addressFromString(ak)
175+ let am = U
176+ addressFromString(am)
169177 }
170178 else unit
171179 }
172180
173-let al = {
174- let U = invoke(valueOrErrorMessage(aj, "no oracle"), "price", [d(u)], nil)
181+let an = {
182+ let U = invoke(valueOrErrorMessage(al, "no oracle"), "price", [d(u)], nil)
175183 if ($isInstanceOf(U, "Int"))
176184 then {
177185 let ag = U
180188 else throw("bad oracle data")
181189 }
182190
183-let am = height
191+let ao = height
184192
185-let an = valueOrErrorMessage(a(G), "no lastUpdateHeight")
193+let ap = valueOrErrorMessage(a(G), "no lastUpdateHeight")
186194
187-let ao = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
195+let aq = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
188196
189-let ap = valueOrElse(a(F), 0)
197+let ar = valueOrElse(a(F), 0)
190198
191-let aq = {
199+let as = {
192200 let S = d(u)
193201 $Tuple4(getIntegerValue(aa, (S + "_APoint")), getIntegerValue(aa, (S + "_BPoint")), getIntegerValue(aa, (S + "_CPoint")), getIntegerValue(aa, (S + "_DPoint")))
194202 }
195203
196-let ar = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
204+let at = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
197205
198-let as = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
206+let au = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
199207
200-let at = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
208+let av = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
201209
202-let au = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
210+let aw = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
203211
204-let av = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
212+let ax = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
205213
206-let aw = valueOrElse(a(I), 0)
214+let ay = valueOrElse(a(I), 0)
207215
208-let ax = valueOrElse(a(J), 0)
216+let az = valueOrElse(a(J), 0)
209217
210-let ay = valueOrElse(a(H), 0)
218+let aA = valueOrElse(a(H), 0)
211219
212-let az = valueOrElse(a(K), s)
220+let aB = valueOrElse(a(K), s)
213221
214-let aA = if ((aw > 0))
215- then fraction(ay, t, aw)
222+let aC = if ((ay > 0))
223+ then fraction(aA, t, ay)
216224 else 0
217225
218-let aB = {
219- let aC = aq
220- let aD = aC._1
221- let ae = aC._2
222- let aE = aC._3
223- let aF = aC._4
224- let aG = (fraction((aD - aE), aA, -(ae)) + aD)
225- let aH = (fraction((aE - aF), (aA - ae), (ae - t)) + aE)
226- if ((aA == 0))
227- then aD
228- else if ((aA == ae))
229- then aE
230- else if (if ((ae > aA))
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))
231239 then true
232240 else (ae == t))
233- then aG
234- else aH
241+ then aI
242+ else aJ
235243 }
236244
237-let aI = if ((aw == 0))
245+let aK = if ((ay == 0))
238246 then 0
239- else fraction(fraction(ay, aB, aw), (t - ar), t)
247+ else fraction(fraction(aA, aD, ay), (t - at), t)
240248
241-let aJ = if ((am == an))
242- then az
249+let aL = if ((ao == ap))
250+ then aB
243251 else {
244- let aK = l(aB, s, (r * t))
245- l(az, (s + (aK * (am - an))), s)
252+ let aM = l(aD, s, (r * t))
253+ l(aB, (s + (aM * (ao - ap))), s)
246254 }
247255
248-func aL (aM,aN,aO) = if ((aM > aN))
249- then throw(("not enough liquidity: " + aO))
256+func aN (aO,aP,aQ) = if ((aO > aP))
257+ then throw(("not enough liquidity: " + aQ))
250258 else true
251259
252260
253-func aP (N) = valueOrElse(a(O(N)), 0)
261+func aR (N) = valueOrElse(a(O(N)), 0)
254262
255263
256-func aQ (N) = {
257- let aR = aP(N)
258- if ((aR == 0))
264+func aS (N) = {
265+ let aT = aR(N)
266+ if ((aT == 0))
259267 then 0
260268 else {
261- let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
262- fraction(aR, aJ, aS)
269+ let aU = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
270+ fraction(aT, aL, aU)
263271 }
264272 }
265273
266274
267-let aT = fraction(ay, aJ, az)
275+let aV = fraction(aA, aL, aB)
268276
269-let aU = (aT - ay)
277+let aW = (aV - aA)
270278
271-let aV = fraction(aU, (t - ar), t)
279+let aX = fraction(aW, (t - at), t)
272280
273-let aW = (aw + aV)
281+let aY = (ay + aX)
274282
275-let aX = ((ax + aU) - aV)
283+let aZ = ((az + aW) - aX)
276284
277-func aY (ag,R) = {
278- let aZ = ag.payments[0].amount
279- if ((0 >= aZ))
285+func ba (ag,R) = {
286+ let bb = ag.payments[0].amount
287+ if ((0 >= bb))
280288 then throw("Payment is less than min allowed amount")
281289 else if ((ag.payments[0].assetId != R))
282290 then throw(("bad asset attached: required " + T))
283- else aZ
291+ else bb
284292 }
285293
286294
287-func ba (bb,bc,bd,be) = {
288- let bf = {
295+func bc (bd,be,bf,bg) = {
296+ let bh = {
289297 let U = R
290298 if ($isInstanceOf(U, "ByteVector"))
291299 then {
294302 }
295303 else wavesBalance(this).available
296304 }
297- let bg = if ((bf == be))
305+ let bi = if ((bh == bg))
298306 then unit
299307 else {
300- let bh = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
301- if (!(bh))
308+ let bj = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
309+ if (!(bj))
302310 then unit
303311 else {
304- let bi = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, ("staking_config_" + T)), ("no staking address for " + T))), ("bad staking address for " + T))
305- if ((bf > be))
306- then invoke(bi, "put", nil, [AttachedPayment(R, (bf - be))])
307- else invoke(bi, "get", [(be - bf)], nil)
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)
308316 }
309317 }
310- if ((bg == bg))
311- then [h(K, aJ), h(G, am), h(I, (aW + bb)), h(H, (aT + bc)), h(J, (aX + bd))]
318+ if ((bi == bi))
319+ then [h(K, aL), h(G, ao), h(I, (aY + bd)), h(H, (aV + be)), h(J, (aZ + bf))]
312320 else throw("Strict value is not equal to itself.")
313321 }
314322
315323
316-func bj (bk) = if ((bk == 6))
324+func bl (bm) = if ((bm == 6))
317325 then 1000000
318- else if ((bk == 8))
326+ else if ((bm == 8))
319327 then 100000000
320- else throw(("bad decimals: " + toString(bk)))
328+ else throw(("bad decimals: " + toString(bm)))
321329
322330
323-func bl (aM) = fraction(aM, al, bj(Z))
331+func bn (aO) = fraction(aO, an, bl(Z))
324332
325333
326-func bm (aM) = fraction(aM, bj(Z), al)
327-
328-
329-func bn (bo) = if ((bo == 0))
330- then 0
331- else if ((ap > 0))
332- then fraction(bo, aW, ap)
333- else bo
334+func bo (aO) = fraction(aO, bl(Z), an)
334335
335336
336337 func bp (bq) = if ((bq == 0))
337338 then 0
338- else if ((ap > 0))
339- then fraction(bq, ap, aW)
339+ else if ((ar > 0))
340+ then fraction(bq, aY, ar)
340341 else bq
341342
342343
343-func br (bq) = if ((bq == 0))
344+func br (bs) = if ((bs == 0))
344345 then 0
345- else if ((ap > 0))
346- then l(bq, ap, aW)
347- else bq
346+ else if ((ar > 0))
347+ then fraction(bs, ar, aY)
348+ else bs
348349
349350
350-func bs (bt) = valueOrElse(a(M(bt)), 0)
351+func bt (bs) = if ((bs == 0))
352+ then 0
353+ else if ((ar > 0))
354+ then l(bs, ar, aY)
355+ else bs
351356
352357
353-func bu (bv) = BooleanEntry(Q(bv), true)
358+func bu (bv) = valueOrElse(a(M(bv)), 0)
354359
355360
356-func bw (bv) = if ((aQ(bv) > 0))
357- then [bu(bv)]
361+func bw (bx) = BooleanEntry(Q(bx), true)
362+
363+
364+func by (bx) = if ((aS(bx) > 0))
365+ then [bw(bx)]
358366 else nil
359367
360368
361-func bx (bt,aM) = {
362- let by = aQ(bt)
363- let bz = bn(bs(bt))
364- let bA = min([by, bz])
365- let bB = if ((-1 > aM))
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))
366374 then throw("invalid collapse amount")
367- else if (if ((bA == 0))
375+ else if (if ((bC == 0))
368376 then true
369- else (aM == 0))
377+ else (aO == 0))
370378 then throw("nothing to collapse")
371- else if (if ((aM == -1))
379+ else if (if ((aO == -1))
372380 then true
373- else (aM > bA))
374- then bA
375- else aM
376- let bC = br(bB)
377- $Tuple2((ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)]), bB)
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)
378386 }
379387
380388
381-func bD (N,aM) = {
382- let bE = ab("repay")
383- if ((bE == bE))
389+func bF (N,aO) = {
390+ let bG = ab("repay")
391+ if ((bG == bG))
384392 then {
385- let bF = aQ(N)
386- if ((bF == bF))
393+ let bH = aS(N)
394+ if ((bH == bH))
387395 then {
388- let bG = if ((aM > bF))
389- then $Tuple4(0, -(bF), (aM - bF), [ScriptTransfer(addressFromStringValue(N), (aM - bF), R)])
390- else $Tuple4((bF - aM), -(aM), 0, nil)
391- let bH = bG._1
392- let bI = bG._2
393- let bJ = bG._3
394- let bK = bG._4
395- let bL = (aM - bJ)
396- $Tuple2(((ba(0, bI, 0, bJ) ++ bK) ++ [h(O(N), bH), h(P(N), aJ)]), bL)
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)
397405 }
398406 else throw("Strict value is not equal to itself.")
399407 }
401409 }
402410
403411
404-func bM () = {
405- let bN = aq
406- let aD = bN._1
407- let ae = bN._2
408- let aE = bN._3
409- let aF = bN._4
410- ((((((((((((((("ABCD: " + toString(aD)) + ";") + toString(ae)) + ";") + toString(aE)) + ";") + toString(aF)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
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))
411419 }
412420
413421
414-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))
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))
415423
416424
417-func bP (bv) = {
418- let bQ = bs(bv)
419- let bR = X(addressFromStringValue(bv), ao)
420- ((((((((((((((((("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)))
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)))
421429 }
422430
423431
424-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))))
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))))
425433
426434
427-func bT (bv) = {
428- let bU = bs(bv)
429- let bV = bn(bU)
430- let by = aQ(bv)
431- if ((am == an))
432- then $Tuple4(aw, ay, bV, by)
433- else $Tuple4(aW, aT, bV, by)
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)
434442 }
435443
436444
437445 @Callable(ag)
438-func getCurrentTotals (bv) = $Tuple2(nil, bT(bv))
446+func getReserveDivsInfo () = $Tuple2(nil, $Tuple2(aZ, T))
439447
440448
441449
442450 @Callable(ag)
443-func getCurrentTotals2 (bW,bX) = {
444- let bY = bT(bW)
445- let bZ = bY._1
446- let ca = bY._2
447- let cb = bY._3
448- let cc = bY._4
449- let cd = bT(bX)
450- let ce = cd._1
451- let cf = cd._2
452- let cg = cd._3
453- let ch = cd._4
454- $Tuple2(nil, $Tuple6(bZ, ca, cb, cc, cg, ch))
451+func getCurrentTotals (bx) = $Tuple2(nil, bV(bx))
452+
453+
454+
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))
455468 }
456469
457470
458471
459472 @Callable(ag)
460-func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bM()) + ", ") + bO()))
473+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bO()) + ", ") + bQ()))
461474
462475
463476
464477 @Callable(ag)
465-func adviseUser (bv) = {
466- let ci = bl(aT)
467- let cj = bl(aW)
468- let ck = valueOrElse(getBoolean(this, Q(bv)), true)
469- let cl = if (ck)
470- then cj
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
471484 else 0
472- let cm = min([ci, cl])
473- let cn = l(cm, au, t)
474- let co = if ((ci > cl))
485+ let co = min([ck, cn])
486+ let cp = l(co, aw, t)
487+ let cq = if ((ck > cn))
475488 then 0
476- else fraction((cl - ci), as, t)
477- let cp = if ((ci > cl))
478- then (fraction((ci - cl), t, at) + cn)
479- else cn
480- let cq = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(ci)) + ", currentDepositUsd: ") + toString(cj)) + ", bp: ") + toString(co)) + ", bpu: ") + toString(cp))
481- $Tuple2(nil, ((cq + ", ") + bP(bv)))
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)))
482495 }
483496
484497
486499 @Callable(ag)
487500 func addInterest () = if ((ag.payments[0].assetId != R))
488501 then throw("can't add interest with unrelated token")
489- else ba(ag.payments[0].amount, 0, 0, 0)
502+ else bc(ag.payments[0].amount, 0, 0, 0)
490503
491504
492505
493506 @Callable(ag)
494507 func addToReserve () = if ((ag.payments[0].assetId != R))
495508 then throw("can't add interest with unrelated token")
496- else ba(0, 0, ag.payments[0].amount, 0)
509+ else bc(0, 0, ag.payments[0].amount, 0)
497510
498511
499512
500513 @Callable(ag)
501-func withdrawFromReserve (bB) = {
502- let cr = getStringValue(aa, "admin")
503- if ((toString(ag.caller) != cr))
504- then throw("only admin can do")
505- else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(cr), bB, R)])
506- }
507-
508-
509-
510-@Callable(ag)
511-func forceUpdate () = {
512- let cr = getStringValue(aa, "admin")
513- if ((toString(ag.caller) != cr))
514- then throw("only admin can do")
515- else ba(0, 0, 0, 0)
516- }
517-
518-
519-
520-@Callable(ag)
521-func initialize (cs,ct,cu,cv,cw,cx) = {
522- let bE = if (ai)
523- then ah(cu)
524- else false
525- if ((bE == bE))
514+func withdrawFromReserve (bD) = {
515+ let bG = ah(ag)
516+ if ((bG == bG))
526517 then {
527- let cy = Issue(cv, cw, 0, cx, true)
528-[cy, k(C, ct), h(L, cx), k(E, cv), k(u, cu), k(B, cs), k(D, toBase58String(calculateAssetId(cy))), h(G, am)]
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)
529522 }
530523 else throw("Strict value is not equal to itself.")
531524 }
533526
534527
535528 @Callable(ag)
536-func userDepositUSD (bt) = $Tuple2(nil, bl(bn(bs(bt))))
537-
538-
539-
540-@Callable(ag)
541-func userDebtUSD (bt) = $Tuple2(nil, bl(aQ(bt)))
542-
543-
544-
545-@Callable(ag)
546-func userBalance (bt) = {
547- let bU = bs(bt)
548- let bV = bn(bU)
549- let by = aQ(bt)
550- $Tuple2(nil, $Tuple6(bU, bV, bl(bV), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
529+func forceUpdate () = {
530+ let cu = getStringValue(aa, "admin")
531+ if ((toString(ag.caller) != cu))
532+ then throw("only admin can do")
533+ else bc(0, 0, 0, 0)
551534 }
552535
553536
554537
555538 @Callable(ag)
556-func userDebt (bt) = {
557- let by = aQ(bt)
558- let cz = bl(by)
559- $Tuple2(nil, $Tuple2(by, cz))
560- }
561-
562-
563-
564-@Callable(ag)
565-func assetUsdValue (bq) = $Tuple2(nil, bl(bq))
566-
567-
568-
569-@Callable(ag)
570-func repayFor (N) = {
571- let bE = af(ag)
572- if ((bE == bE))
573- then bD(N, aY(ag, R))
539+func initialize (cv,cw,cx,cy,cz,cA) = {
540+ let bG = if (ak)
541+ then aj(cx)
542+ else false
543+ if ((bG == bG))
544+ then {
545+ 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)]
547+ }
574548 else throw("Strict value is not equal to itself.")
575549 }
576550
577551
578552
579553 @Callable(ag)
580-func depositFor (cA,cB) = {
581- let bE = if (af(ag))
554+func userDepositUSD (bv) = $Tuple2(nil, bn(bp(bu(bv))))
555+
556+
557+
558+@Callable(ag)
559+func userDebtUSD (bv) = $Tuple2(nil, bn(aS(bv)))
560+
561+
562+
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)))
569+ }
570+
571+
572+
573+@Callable(ag)
574+func userDebt (bv) = {
575+ let bA = aS(bv)
576+ let cC = bn(bA)
577+ $Tuple2(nil, $Tuple2(bA, cC))
578+ }
579+
580+
581+
582+@Callable(ag)
583+func assetUsdValue (bs) = $Tuple2(nil, bn(bs))
584+
585+
586+
587+@Callable(ag)
588+func repayFor (N) = {
589+ let bG = af(ag)
590+ if ((bG == bG))
591+ then bF(N, ba(ag, R))
592+ else throw("Strict value is not equal to itself.")
593+ }
594+
595+
596+
597+@Callable(ag)
598+func depositFor (cD,cE) = {
599+ let bG = if (af(ag))
582600 then ab("deposit")
583601 else false
584- if ((bE == bE))
585- then if (if ((aQ(cA) > 0))
586- then !(cB)
602+ if ((bG == bG))
603+ then if (if ((aS(cD) > 0))
604+ then !(cE)
587605 else false)
588606 then throw("can't disable use as collateral for asset with open debt")
589607 else {
590- let aM = aY(ag, R)
591- let bo = bp(aM)
592- (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cA), bo), BooleanEntry(Q(cA), cB)])
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)])
593611 }
594612 else throw("Strict value is not equal to itself.")
595613 }
597615
598616
599617 @Callable(ag)
600-func withdrawFor (bt,aM) = {
601- let cC = ((aw + ax) - ay)
602- let bE = if (if (if (af(ag))
603- then aL(aM, cC, "funds in use")
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")
604622 else false)
605- then e((-1 > aM), "invalid amount")
623+ then e((-1 > aO), "invalid amount")
606624 else false)
607625 then ab("withdraw")
608626 else false
609- if ((bE == bE))
627+ if ((bG == bG))
610628 then {
611- let cD = if ((aM == -1))
629+ let cG = if ((aO == -1))
612630 then {
613- let bU = bs(bt)
614- $Tuple2(bU, bn(bU))
631+ let bW = bu(bv)
632+ $Tuple2(bW, bp(bW))
615633 }
616- else $Tuple2(br(aM), aM)
617- let bC = cD._1
618- let cE = cD._2
619- $Tuple2((ba(-(cE), 0, 0, cE) ++ [ScriptTransfer(addressFromStringValue(bt), cE, R), j(M(bt), -(bC)), j(F, -(bC))]), cE)
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)
620638 }
621639 else throw("Strict value is not equal to itself.")
622640 }
624642
625643
626644 @Callable(ag)
627-func replenishWithAtokenFor (bv) = {
628- let bE = if (af(ag))
645+func replenishWithAtokenFor (bx) = {
646+ let bG = if (af(ag))
629647 then ab("atokens")
630648 else false
631- if ((bE == bE))
649+ if ((bG == bG))
632650 then {
633- let bo = aY(ag, ao)
634- $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv)), bn(bo))
651+ let bq = ba(ag, aq)
652+ $Tuple2(((bc(0, 0, 0, 0) ++ [j(M(bx), bq), Burn(aq, bq)]) ++ by(bx)), bp(bq))
635653 }
636654 else throw("Strict value is not equal to itself.")
637655 }
639657
640658
641659 @Callable(ag)
642-func borrowFor (bt,cF) = {
643- let bE = if (if (af(ag))
644- then aL(cF, (aw - ay), "too much borrow requested")
660+func borrowFor (bv,cI) = {
661+ let bG = if (if (af(ag))
662+ then aN(cI, (ay - aA), "too much borrow requested")
645663 else false)
646664 then ab("borrow")
647665 else false
648- if ((bE == bE))
666+ if ((bG == bG))
649667 then {
650- let bF = aQ(bt)
651- let bH = (bF + cF)
652- (ba(0, cF, 0, cF) ++ [h(O(bt), bH), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cF, R)])
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)])
653671 }
654672 else throw("Strict value is not equal to itself.")
655673 }
657675
658676
659677 @Callable(ag)
660-func mintAtokenFor (bt,cG) = {
661- let cH = bs(bt)
662- let aM = if ((cG == -1))
663- then cH
664- else cG
665- let bE = if (if (if (af(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))
666684 then ab("atokens")
667685 else false)
668- then e((-1 > cG), "invalid amountToMint")
686+ then e((-1 > cJ), "invalid amountToMint")
669687 else false)
670- then e((aM > cH), ("Trying to mint more than available, max: " + toString(cH)))
688+ then e((aO > cK), ("Trying to mint more than available, max: " + toString(cK)))
671689 else false
672- if ((bE == bE))
673- then $Tuple2((ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)]), bn(aM))
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))
674692 else throw("Strict value is not equal to itself.")
675693 }
676694
677695
678696
679697 @Callable(ag)
680-func redeemAtokens () = {
681- let bE = ab("atokens")
682- if ((bE == bE))
698+func redeemAtokensFor (bx) = {
699+ let bG = if (af(ag))
700+ then ab("atokens")
701+ else false
702+ if ((bG == bG))
683703 then {
684- let bo = aY(ag, ao)
685- let cI = bn(bo)
686- (ba(-(cI), 0, 0, cI) ++ [ScriptTransfer(ag.caller, cI, R), j(F, -(bo)), Burn(ao, bo)])
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)
687707 }
688708 else throw("Strict value is not equal to itself.")
689709 }
691711
692712
693713 @Callable(ag)
694-func transferATokensFor (cJ,cK,cL) = {
695- let bE = if (af(ag))
714+func transferATokensFor (cM,cN,cO) = {
715+ let bG = if (af(ag))
696716 then ab("transfer_debt")
697717 else false
698- if ((bE == bE))
718+ if ((bG == bG))
699719 then {
700- let cM = bm(cL)
701- let bU = bp(cM)
702- let cN = bs(cJ)
703- if ((bU > cN))
704- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cL)) + " transfer.assets: ") + toString(cM)) + " transfer.atokens: ") + toString(bU)) + " from.atokens: ") + toString(cN)) + " at ") + toString(this)))
705- else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cJ), -(bU)), j(M(cK), bU)]) ++ bw(cK)), bn(bU))
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))
706726 }
707727 else throw("Strict value is not equal to itself.")
708728 }
710730
711731
712732 @Callable(ag)
713-func transferDebtFor (cJ,cK,aM) = {
714- let bE = if (af(ag))
733+func transferDebtFor (cM,cN,aO) = {
734+ let bG = if (af(ag))
715735 then ab("transfer_debt")
716736 else false
717- if ((bE == bE))
718- then $Tuple2((ba(0, 0, 0, 0) ++ [h(O(cJ), (aQ(cJ) - aM)), h(O(cK), (aQ(cK) + aM)), h(P(cJ), aJ), h(P(cK), aJ), bu(cK)]), aM)
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)
719739 else throw("Strict value is not equal to itself.")
720740 }
721741
722742
723743
724744 @Callable(ag)
725-func disableUseAsCollateralFor (bt) = {
726- let bE = if (af(ag))
745+func disableUseAsCollateralFor (bv) = {
746+ let bG = if (af(ag))
727747 then ab("use_as_col")
728748 else false
729- if ((bE == bE))
730- then if ((aQ(bt) > 0))
749+ if ((bG == bG))
750+ then if ((aS(bv) > 0))
731751 then throw("can't disable collateral for asset with open debt")
732- else (ba(0, 0, 0, 0) ++ [BooleanEntry(Q(bt), false)])
752+ else (bc(0, 0, 0, 0) ++ [BooleanEntry(Q(bv), false)])
733753 else throw("Strict value is not equal to itself.")
734754 }
735755
737757
738758 @Callable(ag)
739759 func enableUseAsCollateral () = {
740- let bE = ab("use_as_col")
741- if ((bE == bE))
742- then (ba(0, 0, 0, 0) ++ [bu(toString(ag.caller))])
760+ let bG = ab("use_as_col")
761+ if ((bG == bG))
762+ then (bc(0, 0, 0, 0) ++ [bw(toString(ag.caller))])
743763 else throw("Strict value is not equal to itself.")
744764 }
745765
746766
747767
748768 @Callable(ag)
749-func collapseFor (bv) = {
750- let bE = if (af(ag))
769+func collapseFor (bx) = {
770+ let bG = if (af(ag))
751771 then ab("force_collapse")
752772 else false
753- if ((bE == bE))
754- then bx(bv, -1)
773+ if ((bG == bG))
774+ then bz(bx, -1)
755775 else throw("Strict value is not equal to itself.")
756776 }
757777
758778
759779
760780 @Callable(ag)
761-func collapseForAmount (bv,aM) = {
762- let bE = if (af(ag))
781+func collapseForAmount (bx,aO) = {
782+ let bG = if (af(ag))
763783 then ab("collapse")
764784 else false
765- if ((bE == bE))
766- then bx(bv, aM)
785+ if ((bG == bG))
786+ then bz(bx, aO)
767787 else throw("Strict value is not equal to itself.")
768788 }
769789
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
154-func ah (i) = if (if ((i != "WAVES"))
154+func ah (ag) = {
155+ let ai = valueOrErrorMessage(getString(aa, "divAdmins"), "no div admins")
156+ if (!(contains(ai, toString(ag.caller))))
157+ then throw("only div admin can do")
158+ else true
159+ }
160+
161+
162+func aj (i) = if (if ((i != "WAVES"))
155163 then (fromBase58String(i) == fromBase58String(""))
156164 else false)
157165 then throw("invalid assetId")
158166 else true
159167
160168
161-let ai = e(isDefined(c(u)), "already initialized")
169+let ak = e(isDefined(c(u)), "already initialized")
162170
163-let aj = {
171+let al = {
164172 let U = c(C)
165173 if ($isInstanceOf(U, "String"))
166174 then {
167- let ak = U
168- addressFromString(ak)
175+ let am = U
176+ addressFromString(am)
169177 }
170178 else unit
171179 }
172180
173-let al = {
174- let U = invoke(valueOrErrorMessage(aj, "no oracle"), "price", [d(u)], nil)
181+let an = {
182+ let U = invoke(valueOrErrorMessage(al, "no oracle"), "price", [d(u)], nil)
175183 if ($isInstanceOf(U, "Int"))
176184 then {
177185 let ag = U
178186 ag
179187 }
180188 else throw("bad oracle data")
181189 }
182190
183-let am = height
191+let ao = height
184192
185-let an = valueOrErrorMessage(a(G), "no lastUpdateHeight")
193+let ap = valueOrErrorMessage(a(G), "no lastUpdateHeight")
186194
187-let ao = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
195+let aq = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
188196
189-let ap = valueOrElse(a(F), 0)
197+let ar = valueOrElse(a(F), 0)
190198
191-let aq = {
199+let as = {
192200 let S = d(u)
193201 $Tuple4(getIntegerValue(aa, (S + "_APoint")), getIntegerValue(aa, (S + "_BPoint")), getIntegerValue(aa, (S + "_CPoint")), getIntegerValue(aa, (S + "_DPoint")))
194202 }
195203
196-let ar = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
204+let at = valueOrErrorMessage(getInteger(aa, w), "no reserveFactor")
197205
198-let as = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
206+let au = valueOrErrorMessage(getInteger(aa, x), "no collateralFactor")
199207
200-let at = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
208+let av = valueOrErrorMessage(getInteger(aa, y), "no liquidationThreshold")
201209
202-let au = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
210+let aw = valueOrErrorMessage(getInteger(aa, z), "no overlapCharge")
203211
204-let av = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
212+let ax = valueOrErrorMessage(getInteger(aa, A), "no liquidationPenalty")
205213
206-let aw = valueOrElse(a(I), 0)
214+let ay = valueOrElse(a(I), 0)
207215
208-let ax = valueOrElse(a(J), 0)
216+let az = valueOrElse(a(J), 0)
209217
210-let ay = valueOrElse(a(H), 0)
218+let aA = valueOrElse(a(H), 0)
211219
212-let az = valueOrElse(a(K), s)
220+let aB = valueOrElse(a(K), s)
213221
214-let aA = if ((aw > 0))
215- then fraction(ay, t, aw)
222+let aC = if ((ay > 0))
223+ then fraction(aA, t, ay)
216224 else 0
217225
218-let aB = {
219- let aC = aq
220- let aD = aC._1
221- let ae = aC._2
222- let aE = aC._3
223- let aF = aC._4
224- let aG = (fraction((aD - aE), aA, -(ae)) + aD)
225- let aH = (fraction((aE - aF), (aA - ae), (ae - t)) + aE)
226- if ((aA == 0))
227- then aD
228- else if ((aA == ae))
229- then aE
230- else if (if ((ae > aA))
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))
231239 then true
232240 else (ae == t))
233- then aG
234- else aH
241+ then aI
242+ else aJ
235243 }
236244
237-let aI = if ((aw == 0))
245+let aK = if ((ay == 0))
238246 then 0
239- else fraction(fraction(ay, aB, aw), (t - ar), t)
247+ else fraction(fraction(aA, aD, ay), (t - at), t)
240248
241-let aJ = if ((am == an))
242- then az
249+let aL = if ((ao == ap))
250+ then aB
243251 else {
244- let aK = l(aB, s, (r * t))
245- l(az, (s + (aK * (am - an))), s)
252+ let aM = l(aD, s, (r * t))
253+ l(aB, (s + (aM * (ao - ap))), s)
246254 }
247255
248-func aL (aM,aN,aO) = if ((aM > aN))
249- then throw(("not enough liquidity: " + aO))
256+func aN (aO,aP,aQ) = if ((aO > aP))
257+ then throw(("not enough liquidity: " + aQ))
250258 else true
251259
252260
253-func aP (N) = valueOrElse(a(O(N)), 0)
261+func aR (N) = valueOrElse(a(O(N)), 0)
254262
255263
256-func aQ (N) = {
257- let aR = aP(N)
258- if ((aR == 0))
264+func aS (N) = {
265+ let aT = aR(N)
266+ if ((aT == 0))
259267 then 0
260268 else {
261- let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
262- fraction(aR, aJ, aS)
269+ let aU = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
270+ fraction(aT, aL, aU)
263271 }
264272 }
265273
266274
267-let aT = fraction(ay, aJ, az)
275+let aV = fraction(aA, aL, aB)
268276
269-let aU = (aT - ay)
277+let aW = (aV - aA)
270278
271-let aV = fraction(aU, (t - ar), t)
279+let aX = fraction(aW, (t - at), t)
272280
273-let aW = (aw + aV)
281+let aY = (ay + aX)
274282
275-let aX = ((ax + aU) - aV)
283+let aZ = ((az + aW) - aX)
276284
277-func aY (ag,R) = {
278- let aZ = ag.payments[0].amount
279- if ((0 >= aZ))
285+func ba (ag,R) = {
286+ let bb = ag.payments[0].amount
287+ if ((0 >= bb))
280288 then throw("Payment is less than min allowed amount")
281289 else if ((ag.payments[0].assetId != R))
282290 then throw(("bad asset attached: required " + T))
283- else aZ
291+ else bb
284292 }
285293
286294
287-func ba (bb,bc,bd,be) = {
288- let bf = {
295+func bc (bd,be,bf,bg) = {
296+ let bh = {
289297 let U = R
290298 if ($isInstanceOf(U, "ByteVector"))
291299 then {
292300 let ad = U
293301 assetBalance(this, ad)
294302 }
295303 else wavesBalance(this).available
296304 }
297- let bg = if ((bf == be))
305+ let bi = if ((bh == bg))
298306 then unit
299307 else {
300- let bh = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
301- if (!(bh))
308+ let bj = valueOrElse(getBoolean(aa, ("staking_enabled_" + T)), false)
309+ if (!(bj))
302310 then unit
303311 else {
304- let bi = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aa, ("staking_config_" + T)), ("no staking address for " + T))), ("bad staking address for " + T))
305- if ((bf > be))
306- then invoke(bi, "put", nil, [AttachedPayment(R, (bf - be))])
307- else invoke(bi, "get", [(be - bf)], nil)
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)
308316 }
309317 }
310- if ((bg == bg))
311- then [h(K, aJ), h(G, am), h(I, (aW + bb)), h(H, (aT + bc)), h(J, (aX + bd))]
318+ if ((bi == bi))
319+ then [h(K, aL), h(G, ao), h(I, (aY + bd)), h(H, (aV + be)), h(J, (aZ + bf))]
312320 else throw("Strict value is not equal to itself.")
313321 }
314322
315323
316-func bj (bk) = if ((bk == 6))
324+func bl (bm) = if ((bm == 6))
317325 then 1000000
318- else if ((bk == 8))
326+ else if ((bm == 8))
319327 then 100000000
320- else throw(("bad decimals: " + toString(bk)))
328+ else throw(("bad decimals: " + toString(bm)))
321329
322330
323-func bl (aM) = fraction(aM, al, bj(Z))
331+func bn (aO) = fraction(aO, an, bl(Z))
324332
325333
326-func bm (aM) = fraction(aM, bj(Z), al)
327-
328-
329-func bn (bo) = if ((bo == 0))
330- then 0
331- else if ((ap > 0))
332- then fraction(bo, aW, ap)
333- else bo
334+func bo (aO) = fraction(aO, bl(Z), an)
334335
335336
336337 func bp (bq) = if ((bq == 0))
337338 then 0
338- else if ((ap > 0))
339- then fraction(bq, ap, aW)
339+ else if ((ar > 0))
340+ then fraction(bq, aY, ar)
340341 else bq
341342
342343
343-func br (bq) = if ((bq == 0))
344+func br (bs) = if ((bs == 0))
344345 then 0
345- else if ((ap > 0))
346- then l(bq, ap, aW)
347- else bq
346+ else if ((ar > 0))
347+ then fraction(bs, ar, aY)
348+ else bs
348349
349350
350-func bs (bt) = valueOrElse(a(M(bt)), 0)
351+func bt (bs) = if ((bs == 0))
352+ then 0
353+ else if ((ar > 0))
354+ then l(bs, ar, aY)
355+ else bs
351356
352357
353-func bu (bv) = BooleanEntry(Q(bv), true)
358+func bu (bv) = valueOrElse(a(M(bv)), 0)
354359
355360
356-func bw (bv) = if ((aQ(bv) > 0))
357- then [bu(bv)]
361+func bw (bx) = BooleanEntry(Q(bx), true)
362+
363+
364+func by (bx) = if ((aS(bx) > 0))
365+ then [bw(bx)]
358366 else nil
359367
360368
361-func bx (bt,aM) = {
362- let by = aQ(bt)
363- let bz = bn(bs(bt))
364- let bA = min([by, bz])
365- let bB = if ((-1 > aM))
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))
366374 then throw("invalid collapse amount")
367- else if (if ((bA == 0))
375+ else if (if ((bC == 0))
368376 then true
369- else (aM == 0))
377+ else (aO == 0))
370378 then throw("nothing to collapse")
371- else if (if ((aM == -1))
379+ else if (if ((aO == -1))
372380 then true
373- else (aM > bA))
374- then bA
375- else aM
376- let bC = br(bB)
377- $Tuple2((ba(-(bB), -(bB), 0, 0) ++ [j(M(bt), -(bC)), j(F, -(bC)), h(O(bt), (by - bB)), h(P(bt), aJ)]), bB)
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)
378386 }
379387
380388
381-func bD (N,aM) = {
382- let bE = ab("repay")
383- if ((bE == bE))
389+func bF (N,aO) = {
390+ let bG = ab("repay")
391+ if ((bG == bG))
384392 then {
385- let bF = aQ(N)
386- if ((bF == bF))
393+ let bH = aS(N)
394+ if ((bH == bH))
387395 then {
388- let bG = if ((aM > bF))
389- then $Tuple4(0, -(bF), (aM - bF), [ScriptTransfer(addressFromStringValue(N), (aM - bF), R)])
390- else $Tuple4((bF - aM), -(aM), 0, nil)
391- let bH = bG._1
392- let bI = bG._2
393- let bJ = bG._3
394- let bK = bG._4
395- let bL = (aM - bJ)
396- $Tuple2(((ba(0, bI, 0, bJ) ++ bK) ++ [h(O(N), bH), h(P(N), aJ)]), bL)
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)
397405 }
398406 else throw("Strict value is not equal to itself.")
399407 }
400408 else throw("Strict value is not equal to itself.")
401409 }
402410
403411
404-func bM () = {
405- let bN = aq
406- let aD = bN._1
407- let ae = bN._2
408- let aE = bN._3
409- let aF = bN._4
410- ((((((((((((((("ABCD: " + toString(aD)) + ";") + toString(ae)) + ";") + toString(aE)) + ";") + toString(aF)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
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))
411419 }
412420
413421
414-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))
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))
415423
416424
417-func bP (bv) = {
418- let bQ = bs(bv)
419- let bR = X(addressFromStringValue(bv), ao)
420- ((((((((((((((((("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)))
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)))
421429 }
422430
423431
424-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))))
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))))
425433
426434
427-func bT (bv) = {
428- let bU = bs(bv)
429- let bV = bn(bU)
430- let by = aQ(bv)
431- if ((am == an))
432- then $Tuple4(aw, ay, bV, by)
433- else $Tuple4(aW, aT, bV, by)
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)
434442 }
435443
436444
437445 @Callable(ag)
438-func getCurrentTotals (bv) = $Tuple2(nil, bT(bv))
446+func getReserveDivsInfo () = $Tuple2(nil, $Tuple2(aZ, T))
439447
440448
441449
442450 @Callable(ag)
443-func getCurrentTotals2 (bW,bX) = {
444- let bY = bT(bW)
445- let bZ = bY._1
446- let ca = bY._2
447- let cb = bY._3
448- let cc = bY._4
449- let cd = bT(bX)
450- let ce = cd._1
451- let cf = cd._2
452- let cg = cd._3
453- let ch = cd._4
454- $Tuple2(nil, $Tuple6(bZ, ca, cb, cc, cg, ch))
451+func getCurrentTotals (bx) = $Tuple2(nil, bV(bx))
452+
453+
454+
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))
455468 }
456469
457470
458471
459472 @Callable(ag)
460-func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bM()) + ", ") + bO()))
473+func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bO()) + ", ") + bQ()))
461474
462475
463476
464477 @Callable(ag)
465-func adviseUser (bv) = {
466- let ci = bl(aT)
467- let cj = bl(aW)
468- let ck = valueOrElse(getBoolean(this, Q(bv)), true)
469- let cl = if (ck)
470- then cj
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
471484 else 0
472- let cm = min([ci, cl])
473- let cn = l(cm, au, t)
474- let co = if ((ci > cl))
485+ let co = min([ck, cn])
486+ let cp = l(co, aw, t)
487+ let cq = if ((ck > cn))
475488 then 0
476- else fraction((cl - ci), as, t)
477- let cp = if ((ci > cl))
478- then (fraction((ci - cl), t, at) + cn)
479- else cn
480- let cq = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(ci)) + ", currentDepositUsd: ") + toString(cj)) + ", bp: ") + toString(co)) + ", bpu: ") + toString(cp))
481- $Tuple2(nil, ((cq + ", ") + bP(bv)))
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)))
482495 }
483496
484497
485498
486499 @Callable(ag)
487500 func addInterest () = if ((ag.payments[0].assetId != R))
488501 then throw("can't add interest with unrelated token")
489- else ba(ag.payments[0].amount, 0, 0, 0)
502+ else bc(ag.payments[0].amount, 0, 0, 0)
490503
491504
492505
493506 @Callable(ag)
494507 func addToReserve () = if ((ag.payments[0].assetId != R))
495508 then throw("can't add interest with unrelated token")
496- else ba(0, 0, ag.payments[0].amount, 0)
509+ else bc(0, 0, ag.payments[0].amount, 0)
497510
498511
499512
500513 @Callable(ag)
501-func withdrawFromReserve (bB) = {
502- let cr = getStringValue(aa, "admin")
503- if ((toString(ag.caller) != cr))
504- then throw("only admin can do")
505- else (ba(0, 0, -(bB), bB) ++ [ScriptTransfer(addressFromStringValue(cr), bB, R)])
506- }
507-
508-
509-
510-@Callable(ag)
511-func forceUpdate () = {
512- let cr = getStringValue(aa, "admin")
513- if ((toString(ag.caller) != cr))
514- then throw("only admin can do")
515- else ba(0, 0, 0, 0)
516- }
517-
518-
519-
520-@Callable(ag)
521-func initialize (cs,ct,cu,cv,cw,cx) = {
522- let bE = if (ai)
523- then ah(cu)
524- else false
525- if ((bE == bE))
514+func withdrawFromReserve (bD) = {
515+ let bG = ah(ag)
516+ if ((bG == bG))
526517 then {
527- let cy = Issue(cv, cw, 0, cx, true)
528-[cy, k(C, ct), h(L, cx), k(E, cv), k(u, cu), k(B, cs), k(D, toBase58String(calculateAssetId(cy))), h(G, am)]
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)
529522 }
530523 else throw("Strict value is not equal to itself.")
531524 }
532525
533526
534527
535528 @Callable(ag)
536-func userDepositUSD (bt) = $Tuple2(nil, bl(bn(bs(bt))))
537-
538-
539-
540-@Callable(ag)
541-func userDebtUSD (bt) = $Tuple2(nil, bl(aQ(bt)))
542-
543-
544-
545-@Callable(ag)
546-func userBalance (bt) = {
547- let bU = bs(bt)
548- let bV = bn(bU)
549- let by = aQ(bt)
550- $Tuple2(nil, $Tuple6(bU, bV, bl(bV), by, bl(by), valueOrElse(getBoolean(this, Q(bt)), true)))
529+func forceUpdate () = {
530+ let cu = getStringValue(aa, "admin")
531+ if ((toString(ag.caller) != cu))
532+ then throw("only admin can do")
533+ else bc(0, 0, 0, 0)
551534 }
552535
553536
554537
555538 @Callable(ag)
556-func userDebt (bt) = {
557- let by = aQ(bt)
558- let cz = bl(by)
559- $Tuple2(nil, $Tuple2(by, cz))
560- }
561-
562-
563-
564-@Callable(ag)
565-func assetUsdValue (bq) = $Tuple2(nil, bl(bq))
566-
567-
568-
569-@Callable(ag)
570-func repayFor (N) = {
571- let bE = af(ag)
572- if ((bE == bE))
573- then bD(N, aY(ag, R))
539+func initialize (cv,cw,cx,cy,cz,cA) = {
540+ let bG = if (ak)
541+ then aj(cx)
542+ else false
543+ if ((bG == bG))
544+ then {
545+ 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)]
547+ }
574548 else throw("Strict value is not equal to itself.")
575549 }
576550
577551
578552
579553 @Callable(ag)
580-func depositFor (cA,cB) = {
581- let bE = if (af(ag))
554+func userDepositUSD (bv) = $Tuple2(nil, bn(bp(bu(bv))))
555+
556+
557+
558+@Callable(ag)
559+func userDebtUSD (bv) = $Tuple2(nil, bn(aS(bv)))
560+
561+
562+
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)))
569+ }
570+
571+
572+
573+@Callable(ag)
574+func userDebt (bv) = {
575+ let bA = aS(bv)
576+ let cC = bn(bA)
577+ $Tuple2(nil, $Tuple2(bA, cC))
578+ }
579+
580+
581+
582+@Callable(ag)
583+func assetUsdValue (bs) = $Tuple2(nil, bn(bs))
584+
585+
586+
587+@Callable(ag)
588+func repayFor (N) = {
589+ let bG = af(ag)
590+ if ((bG == bG))
591+ then bF(N, ba(ag, R))
592+ else throw("Strict value is not equal to itself.")
593+ }
594+
595+
596+
597+@Callable(ag)
598+func depositFor (cD,cE) = {
599+ let bG = if (af(ag))
582600 then ab("deposit")
583601 else false
584- if ((bE == bE))
585- then if (if ((aQ(cA) > 0))
586- then !(cB)
602+ if ((bG == bG))
603+ then if (if ((aS(cD) > 0))
604+ then !(cE)
587605 else false)
588606 then throw("can't disable use as collateral for asset with open debt")
589607 else {
590- let aM = aY(ag, R)
591- let bo = bp(aM)
592- (ba(aM, 0, 0, 0) ++ [j(F, bo), j(M(cA), bo), BooleanEntry(Q(cA), cB)])
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)])
593611 }
594612 else throw("Strict value is not equal to itself.")
595613 }
596614
597615
598616
599617 @Callable(ag)
600-func withdrawFor (bt,aM) = {
601- let cC = ((aw + ax) - ay)
602- let bE = if (if (if (af(ag))
603- then aL(aM, cC, "funds in use")
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")
604622 else false)
605- then e((-1 > aM), "invalid amount")
623+ then e((-1 > aO), "invalid amount")
606624 else false)
607625 then ab("withdraw")
608626 else false
609- if ((bE == bE))
627+ if ((bG == bG))
610628 then {
611- let cD = if ((aM == -1))
629+ let cG = if ((aO == -1))
612630 then {
613- let bU = bs(bt)
614- $Tuple2(bU, bn(bU))
631+ let bW = bu(bv)
632+ $Tuple2(bW, bp(bW))
615633 }
616- else $Tuple2(br(aM), aM)
617- let bC = cD._1
618- let cE = cD._2
619- $Tuple2((ba(-(cE), 0, 0, cE) ++ [ScriptTransfer(addressFromStringValue(bt), cE, R), j(M(bt), -(bC)), j(F, -(bC))]), cE)
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)
620638 }
621639 else throw("Strict value is not equal to itself.")
622640 }
623641
624642
625643
626644 @Callable(ag)
627-func replenishWithAtokenFor (bv) = {
628- let bE = if (af(ag))
645+func replenishWithAtokenFor (bx) = {
646+ let bG = if (af(ag))
629647 then ab("atokens")
630648 else false
631- if ((bE == bE))
649+ if ((bG == bG))
632650 then {
633- let bo = aY(ag, ao)
634- $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(bv), bo), Burn(ao, bo)]) ++ bw(bv)), bn(bo))
651+ let bq = ba(ag, aq)
652+ $Tuple2(((bc(0, 0, 0, 0) ++ [j(M(bx), bq), Burn(aq, bq)]) ++ by(bx)), bp(bq))
635653 }
636654 else throw("Strict value is not equal to itself.")
637655 }
638656
639657
640658
641659 @Callable(ag)
642-func borrowFor (bt,cF) = {
643- let bE = if (if (af(ag))
644- then aL(cF, (aw - ay), "too much borrow requested")
660+func borrowFor (bv,cI) = {
661+ let bG = if (if (af(ag))
662+ then aN(cI, (ay - aA), "too much borrow requested")
645663 else false)
646664 then ab("borrow")
647665 else false
648- if ((bE == bE))
666+ if ((bG == bG))
649667 then {
650- let bF = aQ(bt)
651- let bH = (bF + cF)
652- (ba(0, cF, 0, cF) ++ [h(O(bt), bH), bu(bt), h(P(bt), aJ), ScriptTransfer(addressFromStringValue(bt), cF, R)])
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)])
653671 }
654672 else throw("Strict value is not equal to itself.")
655673 }
656674
657675
658676
659677 @Callable(ag)
660-func mintAtokenFor (bt,cG) = {
661- let cH = bs(bt)
662- let aM = if ((cG == -1))
663- then cH
664- else cG
665- let bE = if (if (if (af(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))
666684 then ab("atokens")
667685 else false)
668- then e((-1 > cG), "invalid amountToMint")
686+ then e((-1 > cJ), "invalid amountToMint")
669687 else false)
670- then e((aM > cH), ("Trying to mint more than available, max: " + toString(cH)))
688+ then e((aO > cK), ("Trying to mint more than available, max: " + toString(cK)))
671689 else false
672- if ((bE == bE))
673- then $Tuple2((ba(0, 0, 0, 0) ++ [j(M(bt), -(aM)), Reissue(ao, aM, true), ScriptTransfer(addressFromStringValue(bt), aM, ao)]), bn(aM))
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))
674692 else throw("Strict value is not equal to itself.")
675693 }
676694
677695
678696
679697 @Callable(ag)
680-func redeemAtokens () = {
681- let bE = ab("atokens")
682- if ((bE == bE))
698+func redeemAtokensFor (bx) = {
699+ let bG = if (af(ag))
700+ then ab("atokens")
701+ else false
702+ if ((bG == bG))
683703 then {
684- let bo = aY(ag, ao)
685- let cI = bn(bo)
686- (ba(-(cI), 0, 0, cI) ++ [ScriptTransfer(ag.caller, cI, R), j(F, -(bo)), Burn(ao, bo)])
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)
687707 }
688708 else throw("Strict value is not equal to itself.")
689709 }
690710
691711
692712
693713 @Callable(ag)
694-func transferATokensFor (cJ,cK,cL) = {
695- let bE = if (af(ag))
714+func transferATokensFor (cM,cN,cO) = {
715+ let bG = if (af(ag))
696716 then ab("transfer_debt")
697717 else false
698- if ((bE == bE))
718+ if ((bG == bG))
699719 then {
700- let cM = bm(cL)
701- let bU = bp(cM)
702- let cN = bs(cJ)
703- if ((bU > cN))
704- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cL)) + " transfer.assets: ") + toString(cM)) + " transfer.atokens: ") + toString(bU)) + " from.atokens: ") + toString(cN)) + " at ") + toString(this)))
705- else $Tuple2(((ba(0, 0, 0, 0) ++ [j(M(cJ), -(bU)), j(M(cK), bU)]) ++ bw(cK)), bn(bU))
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))
706726 }
707727 else throw("Strict value is not equal to itself.")
708728 }
709729
710730
711731
712732 @Callable(ag)
713-func transferDebtFor (cJ,cK,aM) = {
714- let bE = if (af(ag))
733+func transferDebtFor (cM,cN,aO) = {
734+ let bG = if (af(ag))
715735 then ab("transfer_debt")
716736 else false
717- if ((bE == bE))
718- then $Tuple2((ba(0, 0, 0, 0) ++ [h(O(cJ), (aQ(cJ) - aM)), h(O(cK), (aQ(cK) + aM)), h(P(cJ), aJ), h(P(cK), aJ), bu(cK)]), aM)
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)
719739 else throw("Strict value is not equal to itself.")
720740 }
721741
722742
723743
724744 @Callable(ag)
725-func disableUseAsCollateralFor (bt) = {
726- let bE = if (af(ag))
745+func disableUseAsCollateralFor (bv) = {
746+ let bG = if (af(ag))
727747 then ab("use_as_col")
728748 else false
729- if ((bE == bE))
730- then if ((aQ(bt) > 0))
749+ if ((bG == bG))
750+ then if ((aS(bv) > 0))
731751 then throw("can't disable collateral for asset with open debt")
732- else (ba(0, 0, 0, 0) ++ [BooleanEntry(Q(bt), false)])
752+ else (bc(0, 0, 0, 0) ++ [BooleanEntry(Q(bv), false)])
733753 else throw("Strict value is not equal to itself.")
734754 }
735755
736756
737757
738758 @Callable(ag)
739759 func enableUseAsCollateral () = {
740- let bE = ab("use_as_col")
741- if ((bE == bE))
742- then (ba(0, 0, 0, 0) ++ [bu(toString(ag.caller))])
760+ let bG = ab("use_as_col")
761+ if ((bG == bG))
762+ then (bc(0, 0, 0, 0) ++ [bw(toString(ag.caller))])
743763 else throw("Strict value is not equal to itself.")
744764 }
745765
746766
747767
748768 @Callable(ag)
749-func collapseFor (bv) = {
750- let bE = if (af(ag))
769+func collapseFor (bx) = {
770+ let bG = if (af(ag))
751771 then ab("force_collapse")
752772 else false
753- if ((bE == bE))
754- then bx(bv, -1)
773+ if ((bG == bG))
774+ then bz(bx, -1)
755775 else throw("Strict value is not equal to itself.")
756776 }
757777
758778
759779
760780 @Callable(ag)
761-func collapseForAmount (bv,aM) = {
762- let bE = if (af(ag))
781+func collapseForAmount (bx,aO) = {
782+ let bG = if (af(ag))
763783 then ab("collapse")
764784 else false
765- if ((bE == bE))
766- then bx(bv, aM)
785+ if ((bG == bG))
786+ then bz(bx, aO)
767787 else throw("Strict value is not equal to itself.")
768788 }
769789
770790

github/deemru/w8io/6500d08 
261.68 ms