tx · D9DTL56wMz4KpxYu2QYMcRNYE9iNFFfDieJBXenjahhf

3N5Xd7QVQZWntaJwha9Kg42is626GUPjtUW:  -0.14000000 Waves

2022.05.04 10:15 [2036629] smart account 3N5Xd7QVQZWntaJwha9Kg42is626GUPjtUW > SELF 0.00000000 Waves

{ "type": 13, "id": "D9DTL56wMz4KpxYu2QYMcRNYE9iNFFfDieJBXenjahhf", "fee": 14000000, "feeAssetId": null, "timestamp": 1651648603755, "version": 2, "chainId": 84, "sender": "3N5Xd7QVQZWntaJwha9Kg42is626GUPjtUW", "senderPublicKey": "DfbjpZJBbZwnUKysUkxCbWTE1ZWuoUb6Y6BZdu5iAE8j", "proofs": [ "3uHbzrGNefu1NTsVvyTiAFgNxB5Bz5RmuUuVXcWjdRKe4oK62ipXyM8BKy6oJqqmv5oco8uguVTcp9JGToWATbLt", "t7o9nVbidQgfKiPYNQKQvUFPNunRZoLfC85oejPFMbNwmGwx1gACL2QhTyMTZiexZdooRqhFCv6t4yeGrwSnGpt" ], "script": "base64:AAIFAAAAAAAAACEIAhIAEgASBAoCAQESABIECgIBARIAEgASABIFCgMEAQgAAABPAAAAAAd2ZXJzaW9uAgAAAAUyLjAuMAAAAAAIa1ZlcnNpb24CAAAAB3ZlcnNpb24AAAAAB2tBY3RpdmUCAAAABmFjdGl2ZQAAAAAJa0Fzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAlrQXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAACWtCYWxhbmNlQQIAAAAPQV9hc3NldF9iYWxhbmNlAAAAAAlrQmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAANa1NoYXJlQXNzZXRJZAIAAAAOc2hhcmVfYXNzZXRfaWQAAAAAEWtTaGFyZUFzc2V0U3VwcGx5AgAAABJzaGFyZV9hc3NldF9zdXBwbHkAAAAABGtGZWUCAAAACmNvbW1pc3Npb24AAAAACmtJbnZhcmlhbnQCAAAACWludmFyaWFudAAAAAAGa0NhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAAMa1VTRE5BZGRyZXNzAgAAABhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MAAAAADGtFVVJOQWRkcmVzcwIAAAAUc3Rha2luZ19ldXJuX2FkZHJlc3MAAAAADWtBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA1rQWRtaW5QdWJLZXkyAgAAAAthZG1pbl9wdWJfMgAAAAANa0FkbWluUHViS2V5MwIAAAALYWRtaW5fcHViXzMAAAAAEmtBZG1pbkludm9rZVB1YktleQIAAAAQYWRtaW5faW52b2tlX3B1YgAAAAAQa01vbmV5Qm94QWRkcmVzcwIAAAARbW9uZXlfYm94X2FkZHJlc3MAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MAAAABAQAAABoBVOlFqh6QLzqu8boO5i6akl8amITh82KzCAEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABm9yYWNsZQUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAZzdHJpbmcEAAAAB25vdGhpbmcFAAAAByRtYXRjaDAJAAACAAAAAQkAASwAAAACBQAAAANrZXkCAAAACGlzIGVtcHR5AAAAAAxhZG1pblB1YktleTEJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAANa0FkbWluUHViS2V5MQAAAAAMYWRtaW5QdWJLZXkyCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAADWtBZG1pblB1YktleTIAAAAADGFkbWluUHViS2V5MwkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAA1rQWRtaW5QdWJLZXkzAAAAABFhZG1pblB1YktleUludm9rZQkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAABJrQWRtaW5JbnZva2VQdWJLZXkAAAAAD21vbmV5Qm94QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAAEGtNb25leUJveEFkZHJlc3MAAAAAEnN0YWtpbmdVU0ROQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAADGtVU0ROQWRkcmVzcwAAAAAEVVNETgEAAAAgbySjyqsw3FIpmOgsYVruWn8jTcItdbvpnapU4NLQB8EAAAAADXN0YWtpbmdBc3NldHMJAARMAAAAAgkAAlgAAAABBQAAAARVU0ROBQAAAANuaWwAAAAABmFjdGl2ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwUAAAAHa0FjdGl2ZQAAAAALc3RyQXNzZXRJZEEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAACWtBc3NldElkQQAAAAALc3RyQXNzZXRJZEIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAACWtBc3NldElkQgAAAAAIYXNzZXRJZEEDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRBAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAtzdHJBc3NldElkQQAAAAAIYXNzZXRJZEIDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRC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AQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtBc3NldElkQQUAAAAOcG10U3RyQXNzZXRJZEEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJa0Fzc2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACmtJbnZhcmlhbnQFAAAAE2ludmFyaWFudENhbGN1bGF0ZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABGtGZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABm9yYWNsZQIAAAANYmFzZV9mZWVfZmxhdAkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADWtTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUlzc3VlSWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAIaXNBY3RpdmUAAAAABAAAAAtwbXRBc3NldElkQQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRJZEIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAAB2Fzc2V0SWQEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwUAAAAGc2NhbGU4CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAACGJhbGFuY2VBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMFAAAABnNjYWxlOAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50BQAAAAhiYWxhbmNlQgQAAAANJHQwMTI0MzUxMjUxMgkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDEyNDM1MTI1MTIAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMjQzNTEyNTEyAAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMjQzNTEyNTEyAAAAAl8zBAAAAA0kdDAxMjUxNzEyNjM0CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAANJHQwMTI1MTcxMjYzNAAAAAJfMQQAAAANcG10QXNzZXROYW1lQggFAAAADSR0MDEyNTE3MTI2MzQAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAADSR0MDEyNTE3MTI2MzQAAAACXzMEAAAADSR0MDEyNjM5MTMxNDMDCQAAZgAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEEAAAAA3BtdAkBAAAACGZyYWN0aW9uAAAABAUAAAAIYmFsYW5jZUIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEFAAAABnNjYWxlOAUAAAAHQ0VJTElORwkABRcAAAAFCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAA3BtdAkAAGUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50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SW50ZWdlckVudHJ5AAAAAgUAAAARa1NoYXJlQXNzZXRTdXBwbHkJAABkAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50CQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmNoYW5nZQUAAAANY2hhbmdlQXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAVcmVwbGVuaXNoV2l0aE9uZVRva2VuAAAAAgAAABN2aXJ0dWFsU3dhcFRva2VuUGF5AAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAEAAAADSR0MDE0ODc2MTQ5NTEJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNDg3NjE0OTUxAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTQ4NzYxNDk1MQAAAAJfMgQAAAANJHQwMTQ5NTYxNTAyOQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAACnBtdEFzc2V0SWQEAAAADXBtdFN0ckFzc2V0SWQIBQAAAA0kdDAxNDk1NjE1MDI5AAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAA0kdDAxNDk1NjE1MDI5AAAAAl8yBAAAAAtwbXREZWNpbWFscwgFAAAADSR0MDE0OTU2MTUwMjkAAAACXzMEAAAAD3BtdE1pblRocmVzaG9sZAAAAAAAAExLQAQAAAAddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UAAAAAAAL68IAEAAAACXRvbGVyYW5jZQMJAABmAAAAAgUAAAAddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UFAAAACXBtdEFtb3VudAAAAAAAAAGGoAAAAAAAAAAAAQQAAAAcc2xpcHBhZ2VWYWx1ZU1pbkZvclJlcGxlbmlzaAkAAGUAAAACBQAAAAZzY2FsZTgJAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTgFAAAACXRvbGVyYW5jZQAAAAAAAJiWgAQAAAAcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAAGQAAAACBQAAAAZzY2FsZTgJAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTgFAAAACXRvbGVyYW5jZQAAAAAAAJiWgAQAAAAXc2xpcHBhZ2VWYWx1ZU1pbkZvclN3YXAJAABlAAAAAgUAAAAGc2NhbGU4CQAAaQAAAAIJAABoAAAAAgUAAAAGc2NhbGU4AAAAAAAAAAABAAAAAAAAmJaAAwkAAGYAAAACBQAAAA9wbXRNaW5UaHJlc2hvbGQFAAAACXBtdEFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAD1BheW1lbnQgYW1vdW50IAkAAaQAAAABBQAAAAlwbXRBbW91bnQCAAAAJyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gYW1vdW50IG9mIAkAAaQAAAABBQAAAA9wbXRNaW5UaHJlc2hvbGQCAAAAByB0b2tlbnMDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQEAAAAPdGhyb3dPbmVQYXltZW50AAAAAAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAADAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBwkBAAAAC3Rocm93QXNzZXRzAAAAAAQAAAANJHQwMTYwMDcxNjY0OQMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAAUYAAAABgkAAGUAAAACBQAAAAlwbXRBbW91bnQFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUIJAAUYAAAABgUAAAATdmlydHVhbFN3YXBUb2tlbkdldAkAAGUAAAACBQAAAAlwbXRBbW91bnQFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkFAAAACGJhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAAEXZpcnR1YWxSZXBsZW5pc2hBCAUAAAANJHQwMTYwMDcxNjY0OQAAAAJfMQQAAAARdmlydHVhbFJlcGxlbmlzaEIIBQAAAA0kdDAxNjAwNzE2NjQ5AAAAAl8yBAAAABFiYWxhbmNlQWZ0ZXJTd2FwQQgFAAAADSR0MDE2MDA3MTY2NDkAAAACXzMEAAAAEWJhbGFuY2VBZnRlclN3YXBCCAUAAAANJHQwMTYwMDcxNjY0OQAAAAJfNAQAAAALbmV3QmFsYW5jZUEIBQAAAA0kdDAxNjAwNzE2NjQ5AAAAAl81BAAAAAtuZXdCYWxhbmNlQggFAAAADSR0MDE2MDA3MTY2NDkAAAACXzYEAAAADGludmFyaWFudE5ldwkBAAAADWludmFyaWFudENhbGMAAAACBQAAABFiYWxhbmNlQWZ0ZXJTd2FwQQUAAAARYmFsYW5jZUFmdGVyU3dhcEIEAAAAJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gJAABpAAAAAgkAAGsAAAADBQAAAAdzY2FsZTE2BQAAABFiYWxhbmNlQWZ0ZXJTd2FwQQUAAAARYmFsYW5jZUFmdGVyU3dhcEIJAABrAAAAAwUAAAAGc2NhbGU4BQAAABF2aXJ0dWFsUmVwbGVuaXNoQQUAAAARdmlydHVhbFJlcGxlbmlzaEIEAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQJAABrAAAAAwkAAGQAAAACBQAAAAtuZXdCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUIFAAAADWRBcHBUaHJlc2hvbGQJAABoAAAAAgAAAAAAAAAAAgUAAAATZEFwcFRocmVzaG9sZFNjYWxlMgMDCQAAZwAAAAIFAAAAF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwCQAAawAAAAMFAAAABnNjYWxlOAUAAAAJaW52YXJpYW50BQAAAAxpbnZhcmlhbnROZXcGCQAAZgAAAAIFAAAACWludmFyaWFudAUAAAAMaW52YXJpYW50TmV3CQAAAgAAAAECAAAAOkluY29ycmVjdCB2aXJ0dWFsU3dhcFRva2VuUGF5IG9yIHZpcnR1YWxTd2FwVG9rZW5HZXQgdmFsdWUDAwkAAGYAAAACBQAAABxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoBQAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBgkAAGYAAAACBQAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBQAAABxzbGlwcGFnZVZhbHVlTWF4Rm9yUmVwbGVuaXNoCQAAAgAAAAECAAAAbFN3YXAgd2l0aCB2aXJ0dWFsU3dhcFRva2VuUGF5IGFuZCB2aXJ0dWFsU3dhcFRva2VuR2V0IGlzIHBvc3NpYmxlLCBidXQgcmF0aW8gYWZ0ZXIgdmlydHVhbCBzd2FwIGlzIGluY29ycmVjdAMDCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VBBgkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQgkBAAAADnRocm93VGhyZXNob2xkAAAAAwUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAAawAAAAMFAAAAEXZpcnR1YWxSZXBsZW5pc2hBBQAAAAZzY2FsZTgFAAAAEWJhbGFuY2VBZnRlclN3YXBBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMFAAAAEXZpcnR1YWxSZXBsZW5pc2hCBQAAAAZzY2FsZTgFAAAAEWJhbGFuY2VBZnRlclN3YXBCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAZzY2FsZTgEAAAAHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlCQAAawAAAAMFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAAGUAAAACBQAAAAlmZWVTY2FsZTYJAABpAAAAAgUAAAADZmVlAAAAAAAAAAACBQAAAAlmZWVTY2FsZTYEAAAAGnNoYXJlVG9rZW5Hb3Zlcm5hbmNlUmV3YXJkCQAAawAAAAMFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAAGkAAAACBQAAAA1mZWVHb3Zlcm5hbmNlAAAAAAAAAAACBQAAAAlmZWVTY2FsZTYEAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEJAABrAAAAAwUAAAAac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFAAAACGJhbGFuY2VBBQAAABBzaGFyZUFzc2V0U3VwcGx5BAAAABZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5CCQAAawAAAAMFAAAAGnNoYXJlVG9rZW5Hb3Zlcm5hbmNlUmV3YXJkBQAAAAhiYWxhbmNlQgUAAAAQc2hhcmVBc3NldFN1cHBseQQAAAANJHQwMTg2MzYxODkzMQMJAAAAAAAAAgUAAAANcG10U3RyQXNzZXRJZAUAAAALc3RyQXNzZXRJZEEJAAUVAAAAAwkAAGUAAAACBQAAAAlwbXRBbW91bnQFAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEFAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFAAAAC3N0ckFzc2V0SWRCCQAFFQAAAAMJAABlAAAAAgUAAAAJcG10QW1vdW50BQAAABZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5CBQAAABZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBQAAAAtzdHJBc3NldElkQQQAAAALc3Rha2VBbW91bnQIBQAAAA0kdDAxODYzNjE4OTMxAAAAAl8xBAAAAA11bnN0YWtlQW1vdW50CAUAAAANJHQwMTg2MzYxODkzMQAAAAJfMgQAAAAMdW5zdGFrZUFzc2V0CAUAAAANJHQwMTg2MzYxODkzMQAAAAJfMwQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADXBtdFN0ckFzc2V0SWQJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAAC3N0YWtlQW1vdW50CQAETAAAAAIFAAAADXBtdFN0ckFzc2V0SWQFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADHVuc3Rha2VBc3NldAkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgcJAARMAAAAAgUAAAANdW5zdGFrZUFtb3VudAkABEwAAAACBQAAAAx1bnN0YWtlQXNzZXQFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUFAAAADHNoYXJlQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA9tb25leUJveEFkZHJlc3MFAAAAFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEFAAAACGFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD21vbmV5Qm94QWRkcmVzcwUAAAAWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUAAAAIYXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQkAAGUAAAACBQAAAAtuZXdCYWxhbmNlQQUAAAAWZ292ZXJuYW5jZVJld2FyZFRva2VuQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCCQAAZQAAAAIFAAAAC25ld0JhbGFuY2VCBQAAABZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5CCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAB1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa0ludmFyaWFudAkBAAAADWludmFyaWFudENhbGMAAAACCQAAZQAAAAIFAAAAC25ld0JhbGFuY2VBBQAAABZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQAAZQAAAAIFAAAAC25ld0JhbGFuY2VCBQAA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AAACBQAAAAxzaGFyZUFzc2V0SWQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QQUAAAAIYXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUIFAAAACGFzc2V0SWRCBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAhleGNoYW5nZQAAAAIAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAANJHQwMjE4NDQyMTkxOQkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDIxODQ0MjE5MTkAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAyMTg0NDIxOTE5AAAAAl8yAwkAAGcAAAACAAAAAAAAAAAABQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACAgAAACtFc3RpbWF0ZWQgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQMJAABmAAAAAgUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAACAAAAAQIAAAAvTWluaW1hbCBhbW91bnQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIGVzdGltYXRlZC4DCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQEAAAAPdGhyb3dPbmVQYXltZW50AAAAAAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAADAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBwkBAAAAC3Rocm93QXNzZXRzAAAAAAMJAABmAAAAAgAAAAAAAJiWgAUAAAAJcG10QW1vdW50CQAAAgAAAAECAAAAME9ubHkgc3dhcCBvZiAxMC4wMDAwMDAgb3IgbW9yZSB0b2tlbnMgaXMgYWxsb3dlZAMDCQAAZgAAAAIFAAAAFWV4Y2hhbmdlUmF0aW9MaW1pdE1pbgkAAGsAAAADBQAAAAZzY2FsZTgFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAAJcG10QW1vdW50BgkAAGYAAAACCQAAawAAAAMFAAAABnNjYWxlOAUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBQAAAAlwbXRBbW91bnQFAAAAFWV4Y2hhbmdlUmF0aW9MaW1pdE1heAkAAAIAAAABAgAAABxJbmNvcnJlY3QgYXJncyBhbmQgcG10IHJhdGlvBAAAAAtzZW5kQXNzZXRJZAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEFAAAACGFzc2V0SWRCBQAAAAhhc3NldElkQQQAAAAGYW1vdW50CQEAAAATY2FsY3VsYXRlU2VuZEFtb3VudAAAAAQFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQEAAAAEGdvdmVybmFuY2VSZXdhcmQJAABrAAAAAwUAAAAGYW1vdW50BQAAAA1mZWVHb3Zlcm5hbmNlBQAAAAlmZWVTY2FsZTYEAAAADmFtb3VudE1pbnVzRmVlCQAAawAAAAMFAAAABmFtb3VudAkAAGUAAAACBQAAAAlmZWVTY2FsZTYFAAAAA2ZlZQUAAAAJZmVlU2NhbGU2BAAAAA0kdDAyMzIyNTIzNDg3AwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkABRQAAAACCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAAOYW1vdW50TWludXNGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQJAAUUAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA5hbW91bnRNaW51c0ZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BAAAAAtuZXdCYWxhbmNlQQgFAAAADSR0MDIzMjI1MjM0ODcAAAACXzEEAAAAC25ld0JhbGFuY2VCCAUAAAANJHQwMjMyMjUyMzQ4NwAAAAJfMgQAAAATZEFwcFRocmVzaG9sZEFtb3VudAkAAGsAAAADCQAAZAAAAAIFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgUAAAANZEFwcFRocmVzaG9sZAkAAGgAAAACAAAAAAAAAAACBQAAABNkQXBwVGhyZXNob2xkU2NhbGUyAwMJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUEGCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VCCQEAAAAOdGhyb3dUaHJlc2hvbGQAAAADBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUIEAAAADSR0MDIzNzg2MjM4NTkJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAApwbXRBc3NldElkBAAAAA1wbXRTdHJBc3NldElkCAUAAAANJHQwMjM3ODYyMzg1OQAAAAJfMQQAAAAMcG10QXNzZXROYW1lCAUAAAANJHQwMjM3ODYyMzg1OQAAAAJfMgQA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", "height": 2036629, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3oNdnKiyuANEpJbMupk5q8pj7NGcrCTzG6KLYQUSQvmv Next: HvBX6rbes7Xe22P7b79zbtoEr41F1zck2pEQyJzGUW7q Diff:
OldNewDifferences
2121
2222 let j = "commission"
2323
24-let k = "commission_scale_delimiter"
24+let k = "invariant"
2525
26-let l = "invariant"
26+let l = "shutdown_cause"
2727
28-let m = "shutdown_cause"
28+let m = "staking_usdnnsbt_address"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "staking_eurn_address"
3131
32-let o = "staking_eurn_address"
32+let o = "admin_pub_1"
3333
34-let p = "admin_pub_1"
34+let p = "admin_pub_2"
3535
36-let q = "admin_pub_2"
36+let q = "admin_pub_3"
3737
38-let r = "admin_pub_3"
38+let r = "admin_invoke_pub"
3939
40-let s = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
40+let s = "money_box_address"
4141
4242 let t = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
4343
5050 }
5151 else {
5252 let y = w
53- throw("Admin public key is empty")
53+ throw((v + "is empty"))
5454 }
5555 }
5656
5757
58-let z = u(p)
58+let z = u(o)
5959
60-let A = u(q)
60+let A = u(p)
6161
62-let B = u(r)
62+let B = u(q)
6363
64-let C = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
64+let C = u(r)
6565
66-let D = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
66+let D = Address(u(s))
6767
68-let E = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
68+let E = Address(u(m))
6969
7070 let F = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7171
72-let G = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
72+let G = [toBase58String(F)]
7373
74-let H = [toBase58String(F), toBase58String(G)]
74+let H = getBooleanValue(this, c)
7575
76-let I = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
76+let I = getStringValue(this, d)
7777
78-let J = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
78+let J = getStringValue(this, e)
7979
80-let K = getBooleanValue(this, c)
80+let K = if ((I == "WAVES"))
81+ then unit
82+ else fromBase58String(I)
8183
82-let L = getStringValue(this, d)
84+let L = if ((J == "WAVES"))
85+ then unit
86+ else fromBase58String(J)
8387
84-let M = getStringValue(this, e)
85-
86-let N = if ((L == "WAVES"))
87- then unit
88- else fromBase58String(L)
89-
90-let O = if ((M == "WAVES"))
91- then unit
92- else fromBase58String(M)
93-
94-let P = {
95- let w = N
88+let M = {
89+ let w = K
9690 if ($isInstanceOf(w, "ByteVector"))
9791 then {
98- let Q = w
99- value(assetInfo(Q)).name
92+ let N = w
93+ value(assetInfo(N)).name
10094 }
10195 else if ($isInstanceOf(w, "Unit"))
10296 then {
103- let R = w
97+ let O = w
10498 "WAVES"
10599 }
106100 else throw("Match error")
107101 }
108102
109-let S = {
110- let w = O
103+let P = {
104+ let w = L
111105 if ($isInstanceOf(w, "ByteVector"))
112106 then {
113- let Q = w
114- value(assetInfo(Q)).name
107+ let N = w
108+ value(assetInfo(N)).name
115109 }
116110 else if ($isInstanceOf(w, "Unit"))
117111 then {
118- let R = w
112+ let O = w
119113 "WAVES"
120114 }
121115 else throw("Match error")
122116 }
123117
124-let T = getIntegerValue(this, f)
118+let Q = getIntegerValue(this, f)
125119
126-let U = getIntegerValue(this, g)
120+let R = getIntegerValue(this, g)
127121
128-let V = fromBase58String(getStringValue(this, h))
122+let S = fromBase58String(getStringValue(this, h))
129123
130-let W = getIntegerValue(this, i)
124+let T = getIntegerValue(this, i)
131125
132-let X = getIntegerValue(this, l)
126+let U = getIntegerValue(this, k)
133127
134-let Y = 500
128+let V = getIntegerValue(this, j)
135129
136-let Z = 200
130+let W = fraction(V, 40, 100)
137131
138-let aa = 1000000
132+let X = 1000000
133+
134+let Y = 1000
135+
136+let Z = 100000000
137+
138+let aa = 10000000000000000
139139
140140 let ab = 1000
141141
142-let ac = 100000000
142+let ac = 8
143143
144-let ad = 10000000000000000
144+let ad = 50
145145
146-let ae = 1000
146+let ae = 100
147147
148-let af = 8
148+let af = 90000000
149149
150-let ag = 50
150+let ag = 110000000
151151
152-let ah = 100
152+let ah = 50
153153
154-let ai = 90000000
154+let ai = 2
155155
156-let aj = 110000000
156+let aj = 4600000000000000
157157
158-let ak = 50
159-
160-let al = 2
161-
162-let am = 4600000000000000
163-
164-func an (ao) = {
165- let w = ao
158+func ak (al) = {
159+ let w = al
166160 if ($isInstanceOf(w, "ByteVector"))
167161 then {
168- let Q = w
169- assetBalance(this, Q)
162+ let N = w
163+ assetBalance(this, N)
170164 }
171165 else if ($isInstanceOf(w, "Unit"))
172166 then {
173- let R = w
167+ let O = w
174168 wavesBalance(this).available
175169 }
176170 else throw("Match error")
177171 }
178172
179173
180-func ap (ao) = {
181- let aq = {
182- let w = ao
174+func am (al) = {
175+ let an = {
176+ let w = al
183177 if ($isInstanceOf(w, "ByteVector"))
184178 then {
185- let ar = w
186- if ((ar == F))
187- then getInteger(I, ((("rpd_balance_" + toBase58String(ar)) + "_") + toString(this)))
188- else if ((ar == G))
189- then getInteger(J, ((("%s%s%s__stakingBalance__" + toBase58String(ar)) + "__") + toString(this)))
190- else 0
179+ let ao = w
180+ if ((ao == F))
181+ then getInteger(E, ((("rpd_balance_" + toBase58String(ao)) + "_") + toString(this)))
182+ else 0
191183 }
192184 else if ($isInstanceOf(w, "Unit"))
193185 then 0
194186 else throw("Match error")
195187 }
196- let w = aq
188+ let w = an
197189 if ($isInstanceOf(w, "Int"))
198190 then {
199- let as = w
200- as
191+ let ap = w
192+ ap
201193 }
202194 else 0
203195 }
204196
205197
206-let at = ap(N)
198+let aq = am(K)
207199
208-let au = ap(O)
200+let ar = am(L)
209201
210-let av = (T - at)
202+let as = (Q - aq)
211203
212-let aw = (U - au)
204+let at = (R - ar)
213205
214-let ax = (an(N) + at)
206+let au = (ak(K) + aq)
215207
216-let ay = (an(O) + au)
208+let av = (ak(L) + ar)
217209
218-let az = if ((ax >= T))
219- then (ay >= U)
210+let aw = if ((au >= Q))
211+ then (av >= R)
220212 else false
221213
222-func aA (aB,aC) = ((fraction(ad, aB, aC) + fraction(ad, aC, aB)) / 2)
214+func ax (ay,az) = ((fraction(aa, ay, az) + fraction(aa, az, ay)) / 2)
223215
224216
225-func aD (aB,aC) = {
226- let aE = aA(aB, aC)
227- (fraction((aB + aC), ad, pow(aE, af, ak, al, af, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aB), toBigInt(aC), toBigInt(ac)), 0, toBigInt(5), 1, (af / 2), DOWN)), pow((aE - am), af, ak, al, af, DOWN), ac)))
217+func aA (ay,az) = {
218+ let aB = ax(ay, az)
219+ (fraction((ay + az), aa, pow(aB, ac, ah, ai, ac, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(ay), toBigInt(az), toBigInt(Z)), 0, toBigInt(5), 1, (ac / 2), DOWN)), pow((aB - aj), ac, ah, ai, ac, DOWN), Z)))
228220 }
229221
230222
231-func aF (aG,aH,aI,aJ) = {
232- let aK = (ac - ((ac * 1) / 10000000))
233- let aL = (aG - aH)
234- let aB = (T + aI)
235- let aC = (U + aI)
236- func aM (aN,aO) = if ((aN._1 == -1))
223+func aC (aD,aE,aF,aG) = {
224+ let aH = (aa - ((aa * 1) / 10000000))
225+ let aI = (aD - aE)
226+ let ay = (Q + aF)
227+ let az = (R + aF)
228+ func aJ (aK,aL) = if ((aK._1 == -1))
237229 then {
238- let aP = (aG - (((aO * aL) / 3) / ab))
239- let aQ = if ((aJ == N))
240- then aD(aB, (U - aP))
241- else aD((T - aP), aC)
242- if ((aQ > X))
243- then $Tuple2(aP, aQ)
230+ let aM = (aD - (((aL * aI) / 3) / Y))
231+ let aN = if ((aG == K))
232+ then aA(ay, (R - aM))
233+ else aA((Q - aM), az)
234+ if ((aN > U))
235+ then $Tuple2(aM, aN)
244236 else $Tuple2(-1, 0)
245237 }
246- else aN
238+ else aK
247239
248- let aR = aM($Tuple2(-1, 0), 3000)
249- if ((0 > aR._1))
240+ let aO = aJ($Tuple2(-1, 0), 3000)
241+ if ((0 > aO._1))
250242 then throw("Price is worse than minReceived")
251243 else {
252- let aS = if ((aJ == N))
253- then aD(aB, (U - aG))
254- else if ((aJ == O))
255- then aD((T - aG), aC)
244+ let aP = if ((aG == K))
245+ then aA(ay, (R - aD))
246+ else if ((aG == L))
247+ then aA((Q - aD), az)
256248 else throw("Wrong asset in payment")
257- let aT = if ((X > aS))
258- then if ((aK >= fraction(ac, X, aS)))
259- then throw("Bad estimation provided 1")
249+ if ((U > aP))
250+ then if ((aH >= fraction(aa, U, aP)))
251+ then throw("The requested price is too not profitable for user")
260252 else {
261- let aU = {
262- let aV = [25, 200, 500]
263- let aW = size(aV)
264- let aX = $Tuple2(-1, 0)
265- func aY (aZ,ba) = if ((ba >= aW))
266- then aZ
267- else aM(aZ, aV[ba])
253+ let aQ = {
254+ let aR = [25, 200, 500]
255+ let aS = size(aR)
256+ let aT = $Tuple2(-1, 0)
257+ func aU (aV,aW) = if ((aW >= aS))
258+ then aV
259+ else aJ(aV, aR[aW])
268260
269- func bb (aZ,ba) = if ((ba >= aW))
270- then aZ
261+ func aX (aV,aW) = if ((aW >= aS))
262+ then aV
271263 else throw("List size exceeds 3")
272264
273- bb(aY(aY(aY(aX, 0), 1), 2), 3)
265+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
274266 }
275- if ((0 > aU._1))
276- then aR
277- else aU
267+ if ((0 > aQ._1))
268+ then aO._1
269+ else aQ._1
278270 }
279271 else {
280- let aU = {
281- let aV = [-500, -200, -25]
282- let aW = size(aV)
283- let aX = $Tuple2(-1, 0)
284- func aY (aZ,ba) = if ((ba >= aW))
285- then aZ
286- else aM(aZ, aV[ba])
272+ let aQ = {
273+ let aR = [-500, -200, -25]
274+ let aS = size(aR)
275+ let aT = $Tuple2(-1, 0)
276+ func aU (aV,aW) = if ((aW >= aS))
277+ then aV
278+ else aJ(aV, aR[aW])
287279
288- func bb (aZ,ba) = if ((ba >= aW))
289- then aZ
280+ func aX (aV,aW) = if ((aW >= aS))
281+ then aV
290282 else throw("List size exceeds 3")
291283
292- bb(aY(aY(aY(aX, 0), 1), 2), 3)
284+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
293285 }
294- let bc = if ((0 > aU._1))
295- then $Tuple2(aG, aS)
296- else aU
297- if ((aK >= fraction(ac, X, bc._2)))
298- then throw("Bad estimation provided 2")
299- else bc
286+ let aY = if ((0 > aQ._1))
287+ then $Tuple2(aD, aP)
288+ else aQ
289+ if ((aH >= fraction(aa, U, aY._2)))
290+ then throw("The requested price is too not profitable for user")
291+ else aY._1
300292 }
301- aT
302293 }
303294 }
304295
305296
306-func bd (ao) = {
307- let w = ao
297+func aZ (al) = {
298+ let w = al
308299 if ($isInstanceOf(w, "ByteVector"))
309300 then {
310- let Q = w
311- let be = toBase58String(Q)
312- let bf = valueOrErrorMessage(assetInfo(Q), (("Asset " + be) + " doesn't exist"))
313- $Tuple3(be, bf.name, bf.decimals)
301+ let N = w
302+ let ba = toBase58String(N)
303+ let bb = valueOrErrorMessage(assetInfo(N), (("Asset " + ba) + " doesn't exist"))
304+ $Tuple3(ba, bb.name, bb.decimals)
314305 }
315306 else if ($isInstanceOf(w, "Unit"))
316307 then {
317- let R = w
308+ let O = w
318309 $Tuple3("WAVES", "WAVES", 8)
319310 }
320311 else throw("Match error")
321312 }
322313
323314
324-func bg (bh) = [BooleanEntry(c, false), StringEntry(m, bh)]
315+func bc (bd) = [BooleanEntry(c, false), StringEntry(l, bd)]
325316
326317
327-func bi () = throw("DApp is already active")
318+func be () = throw("DApp is already active")
328319
329320
330-func bj () = if (K)
321+func bf () = if (H)
331322 then unit
332323 else throw("DApp is inactive at this moment")
333324
334325
335-func bk (as) = if (containsElement([z, A, B], as.callerPublicKey))
326+func bg (ap) = if (containsElement([z, A, B], ap.callerPublicKey))
336327 then unit
337328 else throw("Only admin can call this function")
338329
339330
340-func bl () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
331+func bh () = throw(((("Incorrect assets attached. Expected: " + I) + " and ") + J))
341332
342333
343-func bm () = throw("One attached payment expected")
334+func bi () = throw("One attached payment expected")
344335
345336
346-func bn (bo,bp,bq) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bo)) + ": ") + toString(bp)) + " ") + P) + ", ") + toString(bq)) + " ") + S))
337+func bj (bk,bl,bm) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bk)) + ": ") + toString(bl)) + " ") + M) + ", ") + toString(bm)) + " ") + P))
347338
348339
349-func br () = bg(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
340+func bn () = bc(((((((((((((((("Suspicious state. Actual balances: " + toString(Q)) + " ") + M) + ", ") + toString(R)) + " ") + P) + ". State: ") + toString(ak(K))) + " ") + M) + ", ") + toString(ak(L))) + " ") + P))
350341
351342
352-func bs (bt,ao) = if (bt)
353- then if ((ao == F))
354- then $Tuple2("lockNeutrino", I)
355- else $Tuple2("startStaking", J)
356- else if ((ao == F))
357- then $Tuple2("unlockNeutrino", I)
358- else $Tuple2("stopStaking", J)
343+func bo (bp,al) = if (bp)
344+ then $Tuple2("lockNeutrino", E)
345+ else $Tuple2("unlockNeutrino", E)
359346
360347
361-func bu (bt,bv,ao) = if (bt)
348+func bq (bp,br,al) = if (bp)
362349 then {
363- let bw = bs(bt, ao)
364- let bx = bw._1
365- let by = bw._2
366- $Tuple4(bx, by, nil, [AttachedPayment(ao, bv)])
350+ let bs = bo(bp, al)
351+ let bt = bs._1
352+ let bu = bs._2
353+ $Tuple4(bt, bu, nil, [AttachedPayment(al, br)])
367354 }
368355 else {
369- let bz = bs(bt, ao)
370- let bx = bz._1
371- let by = bz._2
372- $Tuple4(bx, by, [bv, toBase58String(ao)], nil)
356+ let bv = bo(bp, al)
357+ let bt = bv._1
358+ let bu = bv._2
359+ $Tuple4(bt, bu, [br, toBase58String(al)], nil)
373360 }
374361
375362
376-@Callable(as)
363+@Callable(ap)
377364 func init () = {
378- let bA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
379- let bB = bA._1
380- let bC = bA._2
381- let bD = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
382- let bE = bD._1
383- let bF = bD._2
384- let bG = bd(bC)
365+ let bw = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
366+ let bx = bw._1
367+ let by = bw._2
368+ let bz = $Tuple2(ap.payments[1].amount, ap.payments[1].assetId)
369+ let bA = bz._1
370+ let bB = bz._2
371+ let bC = aZ(by)
372+ let bD = bC._1
373+ let bE = bC._2
374+ let bF = bC._3
375+ let bG = aZ(bB)
385376 let bH = bG._1
386377 let bI = bG._2
387378 let bJ = bG._3
388- let bK = bd(bF)
389- let bL = bK._1
390- let bM = bK._2
391- let bN = bK._3
392379 if (isDefined(getBoolean(this, c)))
393- then bi()
394- else if ((bC == bF))
380+ then be()
381+ else if ((by == bB))
395382 then throw("Assets must be different")
396383 else {
397- let bO = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
398- let bP = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
399- let bQ = ((bJ + bN) / 2)
400- let bR = fraction(pow(bB, bJ, 5, 1, bJ, DOWN), pow(bE, bN, 5, 1, bN, DOWN), pow(10, 0, bQ, 0, 0, DOWN))
401- let bS = Issue(bO, bP, bR, bQ, true)
402- let bT = calculateAssetId(bS)
403- let bU = aD(bB, bE)
404- let bV = if (containsElement(H, bH))
405- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
384+ let bK = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
385+ let bL = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
386+ let bM = ((bF + bJ) / 2)
387+ let bN = fraction(pow(bx, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bM, 0, 0, DOWN))
388+ let bO = Issue(bK, bL, bN, bM, true)
389+ let bP = calculateAssetId(bO)
390+ let bQ = aA(bx, bA)
391+ let bR = if (containsElement(G, bD))
392+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
406393 else 0
407- if ((bV == bV))
394+ if ((bR == bR))
408395 then {
409- let bW = if (containsElement(H, bL))
410- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
396+ let bS = if (containsElement(G, bH))
397+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
411398 else 0
412- if ((bW == bW))
413- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(f, bB), IntegerEntry(g, bE), IntegerEntry(l, bU), IntegerEntry(j, Y), IntegerEntry(k, aa), bS, StringEntry(h, toBase58String(bT)), IntegerEntry(i, bR), ScriptTransfer(as.caller, bR, bT)]
399+ if ((bS == bS))
400+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, bx), IntegerEntry(g, bA), IntegerEntry(k, bQ), IntegerEntry(j, getIntegerValue(t, "base_fee_flat")), bO, StringEntry(h, toBase58String(bP)), IntegerEntry(i, bN), ScriptTransfer(ap.caller, bN, bP)]
414401 else throw("Strict value is not equal to itself.")
415402 }
416403 else throw("Strict value is not equal to itself.")
419406
420407
421408
422-@Callable(as)
423-func replenishWithTwoTokens () = valueOrElse(bj(), {
424- let bC = as.payments[0].assetId
425- let bF = as.payments[1].assetId
426- let bX = fraction(ac, as.payments[0].amount, T)
427- let bY = fraction(ac, as.payments[1].amount, U)
428- let bZ = bd(bC)
429- let bH = bZ._1
430- let bI = bZ._2
431- let bJ = bZ._3
432- let ca = bd(bF)
433- let bL = ca._1
434- let bM = ca._2
435- let bN = ca._3
436- let cb = if ((bY > bX))
409+@Callable(ap)
410+func replenishWithTwoTokens () = valueOrElse(bf(), {
411+ let by = ap.payments[0].assetId
412+ let bB = ap.payments[1].assetId
413+ let bT = fraction(Z, ap.payments[0].amount, Q)
414+ let bU = fraction(Z, ap.payments[1].amount, R)
415+ let bV = aZ(by)
416+ let bD = bV._1
417+ let bE = bV._2
418+ let bF = bV._3
419+ let bW = aZ(bB)
420+ let bH = bW._1
421+ let bI = bW._2
422+ let bJ = bW._3
423+ let bX = if ((bU > bT))
437424 then {
438- let cc = fraction(U, bX, ac, CEILING)
439- $Tuple5(as.payments[0].amount, cc, (as.payments[1].amount - cc), bF, bX)
425+ let bY = fraction(R, bT, Z, CEILING)
426+ $Tuple5(ap.payments[0].amount, bY, (ap.payments[1].amount - bY), bB, bT)
440427 }
441428 else {
442- let cc = fraction(U, bX, ac, CEILING)
443- $Tuple5(cc, as.payments[1].amount, (as.payments[0].amount - cc), bC, bY)
429+ let bY = fraction(Q, bU, Z, CEILING)
430+ $Tuple5(bY, ap.payments[1].amount, (ap.payments[0].amount - bY), by, bU)
444431 }
445- let bB = cb._1
446- let bE = cb._2
447- let cd = cb._3
448- let ce = cb._4
449- let cf = cb._5
450- let cg = fraction(cf, W, ac)
451- if ((size(as.payments) != 2))
432+ let bx = bX._1
433+ let bA = bX._2
434+ let bZ = bX._3
435+ let ca = bX._4
436+ let cb = bX._5
437+ let cc = fraction(cb, T, Z)
438+ if ((size(ap.payments) != 2))
452439 then throw("Two attached assets expected")
453- else if (if ((bC != N))
440+ else if (if ((by != K))
454441 then true
455- else (bF != O))
456- then bl()
457- else if ((cg == 0))
442+ else (bB != L))
443+ then bh()
444+ else if ((cc == 0))
458445 then throw("Too small amount to replenish")
459- else if ((0 > cd))
446+ else if ((0 > bZ))
460447 then throw("Change < 0")
461- else if (!(az))
462- then ([ScriptTransfer(as.caller, bB, bC), ScriptTransfer(as.caller, bE, bF)] ++ br())
448+ else if (!(aw))
449+ then ([ScriptTransfer(ap.caller, bx, by), ScriptTransfer(ap.caller, bA, bB)] ++ bn())
463450 else {
464- let bV = if (containsElement(H, bH))
465- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
451+ let bR = if (containsElement(G, bD))
452+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
466453 else 0
467- if ((bV == bV))
454+ if ((bR == bR))
468455 then {
469- let bW = if (containsElement(H, bL))
470- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
456+ let bS = if (containsElement(G, bH))
457+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
471458 else 0
472- if ((bW == bW))
473- then [IntegerEntry(f, (T + bB)), IntegerEntry(g, (U + bE)), IntegerEntry(i, (W + cg)), IntegerEntry(l, aD((T + bB), (U + bE))), Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), ScriptTransfer(as.caller, cd, ce)]
459+ if ((bS == bS))
460+ then [IntegerEntry(f, (Q + bx)), IntegerEntry(g, (R + bA)), IntegerEntry(i, (T + cc)), IntegerEntry(k, aA((Q + bx), (R + bA))), Reissue(S, cc, true), ScriptTransfer(ap.caller, cc, S), ScriptTransfer(ap.caller, bZ, ca)]
474461 else throw("Strict value is not equal to itself.")
475462 }
476463 else throw("Strict value is not equal to itself.")
479466
480467
481468
482-@Callable(as)
483-func replenishWithOneToken (ch,ci) = valueOrElse(bj(), {
484- let cj = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
485- let ck = cj._1
486- let cl = cj._2
487- let cm = bd(cl)
488- let cn = cm._1
489- let co = cm._2
490- let cp = cm._3
491- let cq = 5000000
492- let cr = 50000000
493- let cs = if ((cr > ck))
469+@Callable(ap)
470+func replenishWithOneToken (cd,ce) = valueOrElse(bf(), {
471+ let cf = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
472+ let cg = cf._1
473+ let ch = cf._2
474+ let ci = aZ(ch)
475+ let cj = ci._1
476+ let ck = ci._2
477+ let cl = ci._3
478+ let cm = 5000000
479+ let cn = 50000000
480+ let co = if ((cn > cg))
494481 then 100000
495482 else 1
496- let ct = (ac - ((ac * cs) / 10000000))
497- let cu = (ac + ((ac * cs) / 10000000))
498- let cv = (ac - ((ac * 1) / 10000000))
499- if ((cq > ck))
500- then throw((((("Payment amount " + toString(ck)) + " does not exceed the minimum amount of ") + toString(cq)) + " tokens"))
501- else if ((size(as.payments) != 1))
502- then bm()
503- else if (!(az))
504- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
505- else if (if ((cl != N))
506- then (cl != O)
483+ let cp = (Z - ((Z * co) / 10000000))
484+ let cq = (Z + ((Z * co) / 10000000))
485+ let cr = (Z - ((Z * 1) / 10000000))
486+ if ((cm > cg))
487+ then throw((((("Payment amount " + toString(cg)) + " does not exceed the minimum amount of ") + toString(cm)) + " tokens"))
488+ else if ((size(ap.payments) != 1))
489+ then bi()
490+ else if (!(aw))
491+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
492+ else if (if ((ch != K))
493+ then (ch != L)
507494 else false)
508- then bl()
495+ then bh()
509496 else {
510- let cw = if ((cl == N))
511- then $Tuple7((ck - ch), ci, (T + ch), (U - ci), aD((T + ck), U), (T + ck), U)
512- else $Tuple7(ci, (ck - ch), (T - ci), (U + ch), aD(T, (U + ck)), T, (U + ck))
513- let cx = cw._1
514- let cy = cw._2
515- let cz = cw._3
516- let cA = cw._4
517- let bU = cw._5
518- let cB = cw._6
519- let cC = cw._7
520- let cD = if ((cl == N))
521- then IntegerEntry(f, cB)
522- else IntegerEntry(g, cC)
523- let cE = aD(cz, cA)
524- let cF = fraction(ac, X, cE)
525- let cG = (fraction((ac * ac), cz, cA) / fraction(ac, cx, cy))
526- let cH = fraction((cB + cC), ag, (2 * ah))
527- if (if ((cv >= cF))
497+ let cs = if ((ch == K))
498+ then $Tuple6((cg - cd), ce, (Q + cd), (R - ce), (Q + cg), R)
499+ else $Tuple6(ce, (cg - cd), (Q - ce), (R + cd), Q, (R + cg))
500+ let ct = cs._1
501+ let cu = cs._2
502+ let cv = cs._3
503+ let cw = cs._4
504+ let cx = cs._5
505+ let cy = cs._6
506+ let cz = aA(cv, cw)
507+ let cA = (fraction(aa, cv, cw) / fraction(Z, ct, cu))
508+ let cB = fraction((cx + cy), ad, (2 * ae))
509+ if (if ((cr >= fraction(Z, U, cz)))
528510 then true
529- else (X > cE))
511+ else (U > cz))
530512 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
531- else if (if ((ct > cG))
513+ else if (if ((cp > cA))
532514 then true
533- else (cG > cu))
515+ else (cA > cq))
534516 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
535- else if (if ((cH > cB))
517+ else if (if ((cB > cx))
536518 then true
537- else (cH > cC))
538- then bn(cH, cB, cC)
519+ else (cB > cy))
520+ then bj(cB, cx, cy)
539521 else {
540- let bV = if (containsElement(H, cn))
541- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
522+ let bT = fraction(ct, Z, cv)
523+ let bU = fraction(cu, Z, cw)
524+ let cc = fraction(min([bT, bU]), T, Z)
525+ let cC = fraction(cc, (X - (V / 2)), X)
526+ let cD = fraction(cc, (W / 2), X)
527+ let cE = fraction(cD, Q, T)
528+ let cF = fraction(cD, R, T)
529+ let cG = if ((cj == I))
530+ then $Tuple3((cg - cE), cF, J)
531+ else $Tuple3((cg - cF), cE, I)
532+ let cH = cG._1
533+ let cI = cG._2
534+ let cJ = cG._3
535+ let bR = if (containsElement(G, cj))
536+ then invoke(this, "stakeUnstake", [true, cH, cj], nil)
542537 else 0
543- if ((bV == bV))
538+ if ((bR == bR))
544539 then {
545- let bX = fraction(cx, ac, cz)
546- let bY = fraction(cy, ac, cA)
547- let cg = fraction(min([bX, bY]), W, ac)
548-[Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), IntegerEntry(i, (W + cg)), cD, IntegerEntry(l, bU)]
540+ let bS = if (containsElement(G, cJ))
541+ then invoke(this, "stakeUnstake", [false, cI, cJ], nil)
542+ else 0
543+ if ((bS == bS))
544+ then [Reissue(S, cC, true), ScriptTransfer(ap.caller, cC, S), ScriptTransfer(D, cE, K), ScriptTransfer(D, cF, L), IntegerEntry(f, (cx - cE)), IntegerEntry(g, (cy - cF)), IntegerEntry(i, (T + cC)), IntegerEntry(k, aA((cx - cE), (cy - cF)))]
545+ else throw("Strict value is not equal to itself.")
549546 }
550547 else throw("Strict value is not equal to itself.")
551548 }
554551
555552
556553
557-@Callable(as)
558-func withdraw () = valueOrElse(bj(), {
559- let cI = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560- let ck = cI._1
561- let cl = cI._2
562- let cJ = fraction(ck, T, W)
563- let cK = fraction(ck, U, W)
564- let bU = aD((T - cJ), (U - cK))
565- if ((size(as.payments) != 1))
566- then bm()
567- else if ((cl != V))
568- then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
569- else if (!(az))
570- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
554+@Callable(ap)
555+func withdraw () = valueOrElse(bf(), {
556+ let cK = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
557+ let cg = cK._1
558+ let ch = cK._2
559+ let cL = fraction(cg, Q, T)
560+ let cM = fraction(cg, R, T)
561+ let bQ = aA((Q - cL), (R - cM))
562+ if ((size(ap.payments) != 1))
563+ then bi()
564+ else if ((ch != S))
565+ then throw(("Incorrect asset attached. Expected: " + toBase58String(S)))
566+ else if (!(aw))
567+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
571568 else {
572- let bV = if (containsElement(H, L))
573- then invoke(this, "stakeUnstake", [false, cJ, L], nil)
569+ let bR = if (containsElement(G, I))
570+ then invoke(this, "stakeUnstake", [false, cL, I], nil)
574571 else 0
575- if ((bV == bV))
572+ if ((bR == bR))
576573 then {
577- let bW = if (containsElement(H, M))
578- then invoke(this, "stakeUnstake", [false, cK, M], nil)
574+ let bS = if (containsElement(G, J))
575+ then invoke(this, "stakeUnstake", [false, cM, J], nil)
579576 else 0
580- if ((bW == bW))
581- then [IntegerEntry(f, (T - cJ)), IntegerEntry(g, (U - cK)), IntegerEntry(i, (W - ck)), IntegerEntry(l, bU), Burn(V, ck), ScriptTransfer(as.caller, cJ, N), ScriptTransfer(as.caller, cK, O)]
577+ if ((bS == bS))
578+ then [IntegerEntry(f, (Q - cL)), IntegerEntry(g, (R - cM)), IntegerEntry(i, (T - cg)), IntegerEntry(k, bQ), Burn(S, cg), ScriptTransfer(ap.caller, cL, K), ScriptTransfer(ap.caller, cM, L)]
582579 else throw("Strict value is not equal to itself.")
583580 }
584581 else throw("Strict value is not equal to itself.")
587584
588585
589586
590-@Callable(as)
591-func exchange (cL,cM) = valueOrElse(bj(), {
592- let cN = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
593- let ck = cN._1
594- let cl = cN._2
595- if ((0 >= cL))
596- then throw(("Estimated amount must be positive. Actual: " + toString(cL)))
597- else if ((cM > cL))
598- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cL)) + ". Minimal: ") + toString(cM)))
599- else if ((size(as.payments) != 1))
600- then bm()
601- else if (!(az))
602- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
603- else if (if ((cl != N))
604- then (cl != O)
587+@Callable(ap)
588+func exchange (cN,cO) = valueOrElse(bf(), {
589+ let cP = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
590+ let cg = cP._1
591+ let ch = cP._2
592+ if ((0 >= cN))
593+ then throw(("Estimated amount must be positive. Actual: " + toString(cN)))
594+ else if ((cO > cN))
595+ then throw("Minimal amount can't be greater than estimated.")
596+ else if ((size(ap.payments) != 1))
597+ then bi()
598+ else if (!(aw))
599+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
600+ else if (if ((ch != K))
601+ then (ch != L)
605602 else false)
606- then bl()
607- else if ((10000000 > ck))
603+ then bh()
604+ else if ((10000000 > cg))
608605 then throw("Only swap of 10.000000 or more tokens is allowed")
609- else if (if ((ai > fraction(ac, cM, ck)))
606+ else if (if ((af > fraction(Z, cO, cg)))
610607 then true
611- else (fraction(ac, cL, ck) > aj))
608+ else (fraction(Z, cN, cg) > ag))
612609 then throw("Incorrect args and pmt ratio")
613610 else {
614- let cO = if ((cl == N))
615- then O
616- else N
617- let cP = aF(cL, cM, ck, cl)
618- let bv = cP._1
619- let cQ = cP._2
620- let cR = fraction(bv, Z, aa)
621- let cS = fraction(bv, (aa - Y), aa)
622- let cT = if ((cl == N))
623- then $Tuple2((T + ck), ((U - cS) - cR))
624- else $Tuple2(((T - cS) - cR), (U + ck))
625- let cB = cT._1
626- let cC = cT._2
627- let cH = fraction((cB + cC), ag, (2 * ah))
628- if (if ((cH > cB))
611+ let cQ = if ((ch == K))
612+ then L
613+ else K
614+ let br = aC(cN, cO, cg, ch)
615+ let cR = fraction(br, W, X)
616+ let cS = fraction(br, (X - V), X)
617+ let cT = if ((ch == K))
618+ then $Tuple2((Q + cg), ((R - cS) - cR))
619+ else $Tuple2(((Q - cS) - cR), (R + cg))
620+ let cx = cT._1
621+ let cy = cT._2
622+ let cB = fraction((cx + cy), ad, (2 * ae))
623+ if (if ((cB > cx))
629624 then true
630- else (cH > cC))
631- then bn(cH, cB, cC)
625+ else (cB > cy))
626+ then bj(cB, cx, cy)
632627 else {
633- let cU = bd(cl)
634- let cn = cU._1
635- let co = cU._2
636- let cp = cU._3
637- let cV = bd(cO)
628+ let cU = aZ(ch)
629+ let cj = cU._1
630+ let ck = cU._2
631+ let cl = cU._3
632+ let cV = aZ(cQ)
638633 let cW = cV._1
639634 let cX = cV._2
640635 let cY = cV._3
641- let bV = if (containsElement(H, cn))
642- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
636+ let bR = if (containsElement(G, cj))
637+ then invoke(this, "stakeUnstake", [true, cg, cj], nil)
643638 else 0
644- if ((bV == bV))
639+ if ((bR == bR))
645640 then {
646- let bW = if (containsElement(H, cW))
641+ let bS = if (containsElement(G, cW))
647642 then invoke(this, "stakeUnstake", [false, (cS + cR), cW], nil)
648643 else 0
649- if ((bW == bW))
650- then [IntegerEntry(f, cB), IntegerEntry(g, cC), IntegerEntry(l, cQ), ScriptTransfer(as.caller, cS, cO), ScriptTransfer(E, cR, cO)]
644+ if ((bS == bS))
645+ then $Tuple2([IntegerEntry(f, cx), IntegerEntry(g, cy), IntegerEntry(k, aA(cx, cy)), ScriptTransfer(ap.caller, cS, cQ), ScriptTransfer(D, cR, cQ)], $Tuple2(cS, cQ))
651646 else throw("Strict value is not equal to itself.")
652647 }
653648 else throw("Strict value is not equal to itself.")
657652
658653
659654
660-@Callable(as)
661-func shutdown () = valueOrElse(bk(as), if (!(K))
662- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
663- else bg("Paused by admin"))
655+@Callable(ap)
656+func shutdown () = valueOrElse(bg(ap), if (!(H))
657+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
658+ else bc("Paused by admin"))
664659
665660
666661
667-@Callable(as)
668-func activate () = valueOrElse(bk(as), if (K)
669- then bi()
670- else [BooleanEntry(c, true), DeleteEntry(m)])
662+@Callable(ap)
663+func activate () = valueOrElse(bg(ap), if (H)
664+ then be()
665+ else [BooleanEntry(c, true), DeleteEntry(l)])
671666
672667
673668
674-@Callable(as)
675-func takeIntoAccountExtraFunds () = valueOrElse(bj(), {
676- let cZ = (ax - T)
677- let da = (ay - U)
678- let cE = aD((T + cZ), (U + da))
679- if ((as.caller != E))
680- then throw("Only the wallet can call this function")
669+@Callable(ap)
670+func takeIntoAccountExtraFunds () = valueOrElse(bf(), {
671+ let cZ = (au - Q)
672+ let da = (av - R)
673+ let cz = aA((Q + cZ), (R + da))
674+ if ((ap.caller != D))
675+ then throw("Only the money box can call this function")
681676 else if (if ((0 > cZ))
682677 then true
683678 else (0 > da))
684- then bg("Enroll amount negative")
679+ then bc("Enroll amount negative")
685680 else if (if ((cZ == 0))
686681 then (da == 0)
687682 else false)
688683 then throw("No money to take")
689684 else {
690- let bV = if (if (containsElement(H, L))
685+ let bR = if (if (containsElement(G, I))
691686 then (cZ > 0)
692687 else false)
693- then invoke(this, "stakeUnstake", [true, cZ, L], nil)
688+ then invoke(this, "stakeUnstake", [true, cZ, I], nil)
694689 else 0
695- if ((bV == bV))
690+ if ((bR == bR))
696691 then {
697- let bW = if (if (containsElement(H, M))
692+ let bS = if (if (containsElement(G, J))
698693 then (da > 0)
699694 else false)
700- then invoke(this, "stakeUnstake", [true, da, M], nil)
695+ then invoke(this, "stakeUnstake", [true, da, J], nil)
701696 else 0
702- if ((bW == bW))
703- then [IntegerEntry(l, cE), IntegerEntry(f, (T + cZ)), IntegerEntry(g, (U + da)), IntegerEntry(("last_income_" + L), cZ), IntegerEntry(("last_income_" + M), da)]
697+ if ((bS == bS))
698+ then [IntegerEntry(k, cz), IntegerEntry(f, (Q + cZ)), IntegerEntry(g, (R + da))]
704699 else throw("Strict value is not equal to itself.")
705700 }
706701 else throw("Strict value is not equal to itself.")
709704
710705
711706
712-@Callable(as)
713-func writeBigIntInvariant () = valueOrElse(bk(as), {
714- let cE = aD(T, U)
715-[IntegerEntry(l, cE)]
716- })
717-
718-
719-
720-@Callable(as)
721-func stakeUnstake (bt,bv,db) = if ((as.caller != this))
707+@Callable(ap)
708+func stakeUnstake (bp,br,db) = if ((ap.caller != this))
722709 then throw("Only contract itself can invoke this function")
723710 else {
724- let dc = bu(bt, bv, fromBase58String(db))
725- let bx = dc._1
711+ let dc = bq(bp, br, fromBase58String(db))
712+ let bt = dc._1
726713 let dd = dc._2
727714 let de = dc._3
728715 let df = dc._4
729- let dg = invoke(dd, bx, de, df)
716+ let dg = invoke(dd, bt, de, df)
730717 if ((dg == dg))
731718 then nil
732719 else throw("Strict value is not equal to itself.")
760747 then true
761748 else sigVerify(dh.bodyBytes, dh.proofs[0], B))
762749 then true
763- else sigVerify(dh.bodyBytes, dh.proofs[0], D)
750+ else sigVerify(dh.bodyBytes, dh.proofs[0], C)
764751 if (if (dn)
765752 then do
766753 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "share_asset_id"
1919
2020 let i = "share_asset_supply"
2121
2222 let j = "commission"
2323
24-let k = "commission_scale_delimiter"
24+let k = "invariant"
2525
26-let l = "invariant"
26+let l = "shutdown_cause"
2727
28-let m = "shutdown_cause"
28+let m = "staking_usdnnsbt_address"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "staking_eurn_address"
3131
32-let o = "staking_eurn_address"
32+let o = "admin_pub_1"
3333
34-let p = "admin_pub_1"
34+let p = "admin_pub_2"
3535
36-let q = "admin_pub_2"
36+let q = "admin_pub_3"
3737
38-let r = "admin_pub_3"
38+let r = "admin_invoke_pub"
3939
40-let s = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
40+let s = "money_box_address"
4141
4242 let t = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
4343
4444 func u (v) = {
4545 let w = getString(t, v)
4646 if ($isInstanceOf(w, "String"))
4747 then {
4848 let x = w
4949 fromBase58String(x)
5050 }
5151 else {
5252 let y = w
53- throw("Admin public key is empty")
53+ throw((v + "is empty"))
5454 }
5555 }
5656
5757
58-let z = u(p)
58+let z = u(o)
5959
60-let A = u(q)
60+let A = u(p)
6161
62-let B = u(r)
62+let B = u(q)
6363
64-let C = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
64+let C = u(r)
6565
66-let D = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
66+let D = Address(u(s))
6767
68-let E = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
68+let E = Address(u(m))
6969
7070 let F = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7171
72-let G = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
72+let G = [toBase58String(F)]
7373
74-let H = [toBase58String(F), toBase58String(G)]
74+let H = getBooleanValue(this, c)
7575
76-let I = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
76+let I = getStringValue(this, d)
7777
78-let J = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
78+let J = getStringValue(this, e)
7979
80-let K = getBooleanValue(this, c)
80+let K = if ((I == "WAVES"))
81+ then unit
82+ else fromBase58String(I)
8183
82-let L = getStringValue(this, d)
84+let L = if ((J == "WAVES"))
85+ then unit
86+ else fromBase58String(J)
8387
84-let M = getStringValue(this, e)
85-
86-let N = if ((L == "WAVES"))
87- then unit
88- else fromBase58String(L)
89-
90-let O = if ((M == "WAVES"))
91- then unit
92- else fromBase58String(M)
93-
94-let P = {
95- let w = N
88+let M = {
89+ let w = K
9690 if ($isInstanceOf(w, "ByteVector"))
9791 then {
98- let Q = w
99- value(assetInfo(Q)).name
92+ let N = w
93+ value(assetInfo(N)).name
10094 }
10195 else if ($isInstanceOf(w, "Unit"))
10296 then {
103- let R = w
97+ let O = w
10498 "WAVES"
10599 }
106100 else throw("Match error")
107101 }
108102
109-let S = {
110- let w = O
103+let P = {
104+ let w = L
111105 if ($isInstanceOf(w, "ByteVector"))
112106 then {
113- let Q = w
114- value(assetInfo(Q)).name
107+ let N = w
108+ value(assetInfo(N)).name
115109 }
116110 else if ($isInstanceOf(w, "Unit"))
117111 then {
118- let R = w
112+ let O = w
119113 "WAVES"
120114 }
121115 else throw("Match error")
122116 }
123117
124-let T = getIntegerValue(this, f)
118+let Q = getIntegerValue(this, f)
125119
126-let U = getIntegerValue(this, g)
120+let R = getIntegerValue(this, g)
127121
128-let V = fromBase58String(getStringValue(this, h))
122+let S = fromBase58String(getStringValue(this, h))
129123
130-let W = getIntegerValue(this, i)
124+let T = getIntegerValue(this, i)
131125
132-let X = getIntegerValue(this, l)
126+let U = getIntegerValue(this, k)
133127
134-let Y = 500
128+let V = getIntegerValue(this, j)
135129
136-let Z = 200
130+let W = fraction(V, 40, 100)
137131
138-let aa = 1000000
132+let X = 1000000
133+
134+let Y = 1000
135+
136+let Z = 100000000
137+
138+let aa = 10000000000000000
139139
140140 let ab = 1000
141141
142-let ac = 100000000
142+let ac = 8
143143
144-let ad = 10000000000000000
144+let ad = 50
145145
146-let ae = 1000
146+let ae = 100
147147
148-let af = 8
148+let af = 90000000
149149
150-let ag = 50
150+let ag = 110000000
151151
152-let ah = 100
152+let ah = 50
153153
154-let ai = 90000000
154+let ai = 2
155155
156-let aj = 110000000
156+let aj = 4600000000000000
157157
158-let ak = 50
159-
160-let al = 2
161-
162-let am = 4600000000000000
163-
164-func an (ao) = {
165- let w = ao
158+func ak (al) = {
159+ let w = al
166160 if ($isInstanceOf(w, "ByteVector"))
167161 then {
168- let Q = w
169- assetBalance(this, Q)
162+ let N = w
163+ assetBalance(this, N)
170164 }
171165 else if ($isInstanceOf(w, "Unit"))
172166 then {
173- let R = w
167+ let O = w
174168 wavesBalance(this).available
175169 }
176170 else throw("Match error")
177171 }
178172
179173
180-func ap (ao) = {
181- let aq = {
182- let w = ao
174+func am (al) = {
175+ let an = {
176+ let w = al
183177 if ($isInstanceOf(w, "ByteVector"))
184178 then {
185- let ar = w
186- if ((ar == F))
187- then getInteger(I, ((("rpd_balance_" + toBase58String(ar)) + "_") + toString(this)))
188- else if ((ar == G))
189- then getInteger(J, ((("%s%s%s__stakingBalance__" + toBase58String(ar)) + "__") + toString(this)))
190- else 0
179+ let ao = w
180+ if ((ao == F))
181+ then getInteger(E, ((("rpd_balance_" + toBase58String(ao)) + "_") + toString(this)))
182+ else 0
191183 }
192184 else if ($isInstanceOf(w, "Unit"))
193185 then 0
194186 else throw("Match error")
195187 }
196- let w = aq
188+ let w = an
197189 if ($isInstanceOf(w, "Int"))
198190 then {
199- let as = w
200- as
191+ let ap = w
192+ ap
201193 }
202194 else 0
203195 }
204196
205197
206-let at = ap(N)
198+let aq = am(K)
207199
208-let au = ap(O)
200+let ar = am(L)
209201
210-let av = (T - at)
202+let as = (Q - aq)
211203
212-let aw = (U - au)
204+let at = (R - ar)
213205
214-let ax = (an(N) + at)
206+let au = (ak(K) + aq)
215207
216-let ay = (an(O) + au)
208+let av = (ak(L) + ar)
217209
218-let az = if ((ax >= T))
219- then (ay >= U)
210+let aw = if ((au >= Q))
211+ then (av >= R)
220212 else false
221213
222-func aA (aB,aC) = ((fraction(ad, aB, aC) + fraction(ad, aC, aB)) / 2)
214+func ax (ay,az) = ((fraction(aa, ay, az) + fraction(aa, az, ay)) / 2)
223215
224216
225-func aD (aB,aC) = {
226- let aE = aA(aB, aC)
227- (fraction((aB + aC), ad, pow(aE, af, ak, al, af, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aB), toBigInt(aC), toBigInt(ac)), 0, toBigInt(5), 1, (af / 2), DOWN)), pow((aE - am), af, ak, al, af, DOWN), ac)))
217+func aA (ay,az) = {
218+ let aB = ax(ay, az)
219+ (fraction((ay + az), aa, pow(aB, ac, ah, ai, ac, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(ay), toBigInt(az), toBigInt(Z)), 0, toBigInt(5), 1, (ac / 2), DOWN)), pow((aB - aj), ac, ah, ai, ac, DOWN), Z)))
228220 }
229221
230222
231-func aF (aG,aH,aI,aJ) = {
232- let aK = (ac - ((ac * 1) / 10000000))
233- let aL = (aG - aH)
234- let aB = (T + aI)
235- let aC = (U + aI)
236- func aM (aN,aO) = if ((aN._1 == -1))
223+func aC (aD,aE,aF,aG) = {
224+ let aH = (aa - ((aa * 1) / 10000000))
225+ let aI = (aD - aE)
226+ let ay = (Q + aF)
227+ let az = (R + aF)
228+ func aJ (aK,aL) = if ((aK._1 == -1))
237229 then {
238- let aP = (aG - (((aO * aL) / 3) / ab))
239- let aQ = if ((aJ == N))
240- then aD(aB, (U - aP))
241- else aD((T - aP), aC)
242- if ((aQ > X))
243- then $Tuple2(aP, aQ)
230+ let aM = (aD - (((aL * aI) / 3) / Y))
231+ let aN = if ((aG == K))
232+ then aA(ay, (R - aM))
233+ else aA((Q - aM), az)
234+ if ((aN > U))
235+ then $Tuple2(aM, aN)
244236 else $Tuple2(-1, 0)
245237 }
246- else aN
238+ else aK
247239
248- let aR = aM($Tuple2(-1, 0), 3000)
249- if ((0 > aR._1))
240+ let aO = aJ($Tuple2(-1, 0), 3000)
241+ if ((0 > aO._1))
250242 then throw("Price is worse than minReceived")
251243 else {
252- let aS = if ((aJ == N))
253- then aD(aB, (U - aG))
254- else if ((aJ == O))
255- then aD((T - aG), aC)
244+ let aP = if ((aG == K))
245+ then aA(ay, (R - aD))
246+ else if ((aG == L))
247+ then aA((Q - aD), az)
256248 else throw("Wrong asset in payment")
257- let aT = if ((X > aS))
258- then if ((aK >= fraction(ac, X, aS)))
259- then throw("Bad estimation provided 1")
249+ if ((U > aP))
250+ then if ((aH >= fraction(aa, U, aP)))
251+ then throw("The requested price is too not profitable for user")
260252 else {
261- let aU = {
262- let aV = [25, 200, 500]
263- let aW = size(aV)
264- let aX = $Tuple2(-1, 0)
265- func aY (aZ,ba) = if ((ba >= aW))
266- then aZ
267- else aM(aZ, aV[ba])
253+ let aQ = {
254+ let aR = [25, 200, 500]
255+ let aS = size(aR)
256+ let aT = $Tuple2(-1, 0)
257+ func aU (aV,aW) = if ((aW >= aS))
258+ then aV
259+ else aJ(aV, aR[aW])
268260
269- func bb (aZ,ba) = if ((ba >= aW))
270- then aZ
261+ func aX (aV,aW) = if ((aW >= aS))
262+ then aV
271263 else throw("List size exceeds 3")
272264
273- bb(aY(aY(aY(aX, 0), 1), 2), 3)
265+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
274266 }
275- if ((0 > aU._1))
276- then aR
277- else aU
267+ if ((0 > aQ._1))
268+ then aO._1
269+ else aQ._1
278270 }
279271 else {
280- let aU = {
281- let aV = [-500, -200, -25]
282- let aW = size(aV)
283- let aX = $Tuple2(-1, 0)
284- func aY (aZ,ba) = if ((ba >= aW))
285- then aZ
286- else aM(aZ, aV[ba])
272+ let aQ = {
273+ let aR = [-500, -200, -25]
274+ let aS = size(aR)
275+ let aT = $Tuple2(-1, 0)
276+ func aU (aV,aW) = if ((aW >= aS))
277+ then aV
278+ else aJ(aV, aR[aW])
287279
288- func bb (aZ,ba) = if ((ba >= aW))
289- then aZ
280+ func aX (aV,aW) = if ((aW >= aS))
281+ then aV
290282 else throw("List size exceeds 3")
291283
292- bb(aY(aY(aY(aX, 0), 1), 2), 3)
284+ aX(aU(aU(aU(aT, 0), 1), 2), 3)
293285 }
294- let bc = if ((0 > aU._1))
295- then $Tuple2(aG, aS)
296- else aU
297- if ((aK >= fraction(ac, X, bc._2)))
298- then throw("Bad estimation provided 2")
299- else bc
286+ let aY = if ((0 > aQ._1))
287+ then $Tuple2(aD, aP)
288+ else aQ
289+ if ((aH >= fraction(aa, U, aY._2)))
290+ then throw("The requested price is too not profitable for user")
291+ else aY._1
300292 }
301- aT
302293 }
303294 }
304295
305296
306-func bd (ao) = {
307- let w = ao
297+func aZ (al) = {
298+ let w = al
308299 if ($isInstanceOf(w, "ByteVector"))
309300 then {
310- let Q = w
311- let be = toBase58String(Q)
312- let bf = valueOrErrorMessage(assetInfo(Q), (("Asset " + be) + " doesn't exist"))
313- $Tuple3(be, bf.name, bf.decimals)
301+ let N = w
302+ let ba = toBase58String(N)
303+ let bb = valueOrErrorMessage(assetInfo(N), (("Asset " + ba) + " doesn't exist"))
304+ $Tuple3(ba, bb.name, bb.decimals)
314305 }
315306 else if ($isInstanceOf(w, "Unit"))
316307 then {
317- let R = w
308+ let O = w
318309 $Tuple3("WAVES", "WAVES", 8)
319310 }
320311 else throw("Match error")
321312 }
322313
323314
324-func bg (bh) = [BooleanEntry(c, false), StringEntry(m, bh)]
315+func bc (bd) = [BooleanEntry(c, false), StringEntry(l, bd)]
325316
326317
327-func bi () = throw("DApp is already active")
318+func be () = throw("DApp is already active")
328319
329320
330-func bj () = if (K)
321+func bf () = if (H)
331322 then unit
332323 else throw("DApp is inactive at this moment")
333324
334325
335-func bk (as) = if (containsElement([z, A, B], as.callerPublicKey))
326+func bg (ap) = if (containsElement([z, A, B], ap.callerPublicKey))
336327 then unit
337328 else throw("Only admin can call this function")
338329
339330
340-func bl () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
331+func bh () = throw(((("Incorrect assets attached. Expected: " + I) + " and ") + J))
341332
342333
343-func bm () = throw("One attached payment expected")
334+func bi () = throw("One attached payment expected")
344335
345336
346-func bn (bo,bp,bq) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bo)) + ": ") + toString(bp)) + " ") + P) + ", ") + toString(bq)) + " ") + S))
337+func bj (bk,bl,bm) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bk)) + ": ") + toString(bl)) + " ") + M) + ", ") + toString(bm)) + " ") + P))
347338
348339
349-func br () = bg(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
340+func bn () = bc(((((((((((((((("Suspicious state. Actual balances: " + toString(Q)) + " ") + M) + ", ") + toString(R)) + " ") + P) + ". State: ") + toString(ak(K))) + " ") + M) + ", ") + toString(ak(L))) + " ") + P))
350341
351342
352-func bs (bt,ao) = if (bt)
353- then if ((ao == F))
354- then $Tuple2("lockNeutrino", I)
355- else $Tuple2("startStaking", J)
356- else if ((ao == F))
357- then $Tuple2("unlockNeutrino", I)
358- else $Tuple2("stopStaking", J)
343+func bo (bp,al) = if (bp)
344+ then $Tuple2("lockNeutrino", E)
345+ else $Tuple2("unlockNeutrino", E)
359346
360347
361-func bu (bt,bv,ao) = if (bt)
348+func bq (bp,br,al) = if (bp)
362349 then {
363- let bw = bs(bt, ao)
364- let bx = bw._1
365- let by = bw._2
366- $Tuple4(bx, by, nil, [AttachedPayment(ao, bv)])
350+ let bs = bo(bp, al)
351+ let bt = bs._1
352+ let bu = bs._2
353+ $Tuple4(bt, bu, nil, [AttachedPayment(al, br)])
367354 }
368355 else {
369- let bz = bs(bt, ao)
370- let bx = bz._1
371- let by = bz._2
372- $Tuple4(bx, by, [bv, toBase58String(ao)], nil)
356+ let bv = bo(bp, al)
357+ let bt = bv._1
358+ let bu = bv._2
359+ $Tuple4(bt, bu, [br, toBase58String(al)], nil)
373360 }
374361
375362
376-@Callable(as)
363+@Callable(ap)
377364 func init () = {
378- let bA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
379- let bB = bA._1
380- let bC = bA._2
381- let bD = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
382- let bE = bD._1
383- let bF = bD._2
384- let bG = bd(bC)
365+ let bw = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
366+ let bx = bw._1
367+ let by = bw._2
368+ let bz = $Tuple2(ap.payments[1].amount, ap.payments[1].assetId)
369+ let bA = bz._1
370+ let bB = bz._2
371+ let bC = aZ(by)
372+ let bD = bC._1
373+ let bE = bC._2
374+ let bF = bC._3
375+ let bG = aZ(bB)
385376 let bH = bG._1
386377 let bI = bG._2
387378 let bJ = bG._3
388- let bK = bd(bF)
389- let bL = bK._1
390- let bM = bK._2
391- let bN = bK._3
392379 if (isDefined(getBoolean(this, c)))
393- then bi()
394- else if ((bC == bF))
380+ then be()
381+ else if ((by == bB))
395382 then throw("Assets must be different")
396383 else {
397- let bO = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
398- let bP = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
399- let bQ = ((bJ + bN) / 2)
400- let bR = fraction(pow(bB, bJ, 5, 1, bJ, DOWN), pow(bE, bN, 5, 1, bN, DOWN), pow(10, 0, bQ, 0, 0, DOWN))
401- let bS = Issue(bO, bP, bR, bQ, true)
402- let bT = calculateAssetId(bS)
403- let bU = aD(bB, bE)
404- let bV = if (containsElement(H, bH))
405- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
384+ let bK = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
385+ let bL = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
386+ let bM = ((bF + bJ) / 2)
387+ let bN = fraction(pow(bx, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bM, 0, 0, DOWN))
388+ let bO = Issue(bK, bL, bN, bM, true)
389+ let bP = calculateAssetId(bO)
390+ let bQ = aA(bx, bA)
391+ let bR = if (containsElement(G, bD))
392+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
406393 else 0
407- if ((bV == bV))
394+ if ((bR == bR))
408395 then {
409- let bW = if (containsElement(H, bL))
410- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
396+ let bS = if (containsElement(G, bH))
397+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
411398 else 0
412- if ((bW == bW))
413- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(f, bB), IntegerEntry(g, bE), IntegerEntry(l, bU), IntegerEntry(j, Y), IntegerEntry(k, aa), bS, StringEntry(h, toBase58String(bT)), IntegerEntry(i, bR), ScriptTransfer(as.caller, bR, bT)]
399+ if ((bS == bS))
400+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, bx), IntegerEntry(g, bA), IntegerEntry(k, bQ), IntegerEntry(j, getIntegerValue(t, "base_fee_flat")), bO, StringEntry(h, toBase58String(bP)), IntegerEntry(i, bN), ScriptTransfer(ap.caller, bN, bP)]
414401 else throw("Strict value is not equal to itself.")
415402 }
416403 else throw("Strict value is not equal to itself.")
417404 }
418405 }
419406
420407
421408
422-@Callable(as)
423-func replenishWithTwoTokens () = valueOrElse(bj(), {
424- let bC = as.payments[0].assetId
425- let bF = as.payments[1].assetId
426- let bX = fraction(ac, as.payments[0].amount, T)
427- let bY = fraction(ac, as.payments[1].amount, U)
428- let bZ = bd(bC)
429- let bH = bZ._1
430- let bI = bZ._2
431- let bJ = bZ._3
432- let ca = bd(bF)
433- let bL = ca._1
434- let bM = ca._2
435- let bN = ca._3
436- let cb = if ((bY > bX))
409+@Callable(ap)
410+func replenishWithTwoTokens () = valueOrElse(bf(), {
411+ let by = ap.payments[0].assetId
412+ let bB = ap.payments[1].assetId
413+ let bT = fraction(Z, ap.payments[0].amount, Q)
414+ let bU = fraction(Z, ap.payments[1].amount, R)
415+ let bV = aZ(by)
416+ let bD = bV._1
417+ let bE = bV._2
418+ let bF = bV._3
419+ let bW = aZ(bB)
420+ let bH = bW._1
421+ let bI = bW._2
422+ let bJ = bW._3
423+ let bX = if ((bU > bT))
437424 then {
438- let cc = fraction(U, bX, ac, CEILING)
439- $Tuple5(as.payments[0].amount, cc, (as.payments[1].amount - cc), bF, bX)
425+ let bY = fraction(R, bT, Z, CEILING)
426+ $Tuple5(ap.payments[0].amount, bY, (ap.payments[1].amount - bY), bB, bT)
440427 }
441428 else {
442- let cc = fraction(U, bX, ac, CEILING)
443- $Tuple5(cc, as.payments[1].amount, (as.payments[0].amount - cc), bC, bY)
429+ let bY = fraction(Q, bU, Z, CEILING)
430+ $Tuple5(bY, ap.payments[1].amount, (ap.payments[0].amount - bY), by, bU)
444431 }
445- let bB = cb._1
446- let bE = cb._2
447- let cd = cb._3
448- let ce = cb._4
449- let cf = cb._5
450- let cg = fraction(cf, W, ac)
451- if ((size(as.payments) != 2))
432+ let bx = bX._1
433+ let bA = bX._2
434+ let bZ = bX._3
435+ let ca = bX._4
436+ let cb = bX._5
437+ let cc = fraction(cb, T, Z)
438+ if ((size(ap.payments) != 2))
452439 then throw("Two attached assets expected")
453- else if (if ((bC != N))
440+ else if (if ((by != K))
454441 then true
455- else (bF != O))
456- then bl()
457- else if ((cg == 0))
442+ else (bB != L))
443+ then bh()
444+ else if ((cc == 0))
458445 then throw("Too small amount to replenish")
459- else if ((0 > cd))
446+ else if ((0 > bZ))
460447 then throw("Change < 0")
461- else if (!(az))
462- then ([ScriptTransfer(as.caller, bB, bC), ScriptTransfer(as.caller, bE, bF)] ++ br())
448+ else if (!(aw))
449+ then ([ScriptTransfer(ap.caller, bx, by), ScriptTransfer(ap.caller, bA, bB)] ++ bn())
463450 else {
464- let bV = if (containsElement(H, bH))
465- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
451+ let bR = if (containsElement(G, bD))
452+ then invoke(this, "stakeUnstake", [true, bx, bD], nil)
466453 else 0
467- if ((bV == bV))
454+ if ((bR == bR))
468455 then {
469- let bW = if (containsElement(H, bL))
470- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
456+ let bS = if (containsElement(G, bH))
457+ then invoke(this, "stakeUnstake", [true, bA, bH], nil)
471458 else 0
472- if ((bW == bW))
473- then [IntegerEntry(f, (T + bB)), IntegerEntry(g, (U + bE)), IntegerEntry(i, (W + cg)), IntegerEntry(l, aD((T + bB), (U + bE))), Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), ScriptTransfer(as.caller, cd, ce)]
459+ if ((bS == bS))
460+ then [IntegerEntry(f, (Q + bx)), IntegerEntry(g, (R + bA)), IntegerEntry(i, (T + cc)), IntegerEntry(k, aA((Q + bx), (R + bA))), Reissue(S, cc, true), ScriptTransfer(ap.caller, cc, S), ScriptTransfer(ap.caller, bZ, ca)]
474461 else throw("Strict value is not equal to itself.")
475462 }
476463 else throw("Strict value is not equal to itself.")
477464 }
478465 })
479466
480467
481468
482-@Callable(as)
483-func replenishWithOneToken (ch,ci) = valueOrElse(bj(), {
484- let cj = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
485- let ck = cj._1
486- let cl = cj._2
487- let cm = bd(cl)
488- let cn = cm._1
489- let co = cm._2
490- let cp = cm._3
491- let cq = 5000000
492- let cr = 50000000
493- let cs = if ((cr > ck))
469+@Callable(ap)
470+func replenishWithOneToken (cd,ce) = valueOrElse(bf(), {
471+ let cf = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
472+ let cg = cf._1
473+ let ch = cf._2
474+ let ci = aZ(ch)
475+ let cj = ci._1
476+ let ck = ci._2
477+ let cl = ci._3
478+ let cm = 5000000
479+ let cn = 50000000
480+ let co = if ((cn > cg))
494481 then 100000
495482 else 1
496- let ct = (ac - ((ac * cs) / 10000000))
497- let cu = (ac + ((ac * cs) / 10000000))
498- let cv = (ac - ((ac * 1) / 10000000))
499- if ((cq > ck))
500- then throw((((("Payment amount " + toString(ck)) + " does not exceed the minimum amount of ") + toString(cq)) + " tokens"))
501- else if ((size(as.payments) != 1))
502- then bm()
503- else if (!(az))
504- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
505- else if (if ((cl != N))
506- then (cl != O)
483+ let cp = (Z - ((Z * co) / 10000000))
484+ let cq = (Z + ((Z * co) / 10000000))
485+ let cr = (Z - ((Z * 1) / 10000000))
486+ if ((cm > cg))
487+ then throw((((("Payment amount " + toString(cg)) + " does not exceed the minimum amount of ") + toString(cm)) + " tokens"))
488+ else if ((size(ap.payments) != 1))
489+ then bi()
490+ else if (!(aw))
491+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
492+ else if (if ((ch != K))
493+ then (ch != L)
507494 else false)
508- then bl()
495+ then bh()
509496 else {
510- let cw = if ((cl == N))
511- then $Tuple7((ck - ch), ci, (T + ch), (U - ci), aD((T + ck), U), (T + ck), U)
512- else $Tuple7(ci, (ck - ch), (T - ci), (U + ch), aD(T, (U + ck)), T, (U + ck))
513- let cx = cw._1
514- let cy = cw._2
515- let cz = cw._3
516- let cA = cw._4
517- let bU = cw._5
518- let cB = cw._6
519- let cC = cw._7
520- let cD = if ((cl == N))
521- then IntegerEntry(f, cB)
522- else IntegerEntry(g, cC)
523- let cE = aD(cz, cA)
524- let cF = fraction(ac, X, cE)
525- let cG = (fraction((ac * ac), cz, cA) / fraction(ac, cx, cy))
526- let cH = fraction((cB + cC), ag, (2 * ah))
527- if (if ((cv >= cF))
497+ let cs = if ((ch == K))
498+ then $Tuple6((cg - cd), ce, (Q + cd), (R - ce), (Q + cg), R)
499+ else $Tuple6(ce, (cg - cd), (Q - ce), (R + cd), Q, (R + cg))
500+ let ct = cs._1
501+ let cu = cs._2
502+ let cv = cs._3
503+ let cw = cs._4
504+ let cx = cs._5
505+ let cy = cs._6
506+ let cz = aA(cv, cw)
507+ let cA = (fraction(aa, cv, cw) / fraction(Z, ct, cu))
508+ let cB = fraction((cx + cy), ad, (2 * ae))
509+ if (if ((cr >= fraction(Z, U, cz)))
528510 then true
529- else (X > cE))
511+ else (U > cz))
530512 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
531- else if (if ((ct > cG))
513+ else if (if ((cp > cA))
532514 then true
533- else (cG > cu))
515+ else (cA > cq))
534516 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
535- else if (if ((cH > cB))
517+ else if (if ((cB > cx))
536518 then true
537- else (cH > cC))
538- then bn(cH, cB, cC)
519+ else (cB > cy))
520+ then bj(cB, cx, cy)
539521 else {
540- let bV = if (containsElement(H, cn))
541- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
522+ let bT = fraction(ct, Z, cv)
523+ let bU = fraction(cu, Z, cw)
524+ let cc = fraction(min([bT, bU]), T, Z)
525+ let cC = fraction(cc, (X - (V / 2)), X)
526+ let cD = fraction(cc, (W / 2), X)
527+ let cE = fraction(cD, Q, T)
528+ let cF = fraction(cD, R, T)
529+ let cG = if ((cj == I))
530+ then $Tuple3((cg - cE), cF, J)
531+ else $Tuple3((cg - cF), cE, I)
532+ let cH = cG._1
533+ let cI = cG._2
534+ let cJ = cG._3
535+ let bR = if (containsElement(G, cj))
536+ then invoke(this, "stakeUnstake", [true, cH, cj], nil)
542537 else 0
543- if ((bV == bV))
538+ if ((bR == bR))
544539 then {
545- let bX = fraction(cx, ac, cz)
546- let bY = fraction(cy, ac, cA)
547- let cg = fraction(min([bX, bY]), W, ac)
548-[Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), IntegerEntry(i, (W + cg)), cD, IntegerEntry(l, bU)]
540+ let bS = if (containsElement(G, cJ))
541+ then invoke(this, "stakeUnstake", [false, cI, cJ], nil)
542+ else 0
543+ if ((bS == bS))
544+ then [Reissue(S, cC, true), ScriptTransfer(ap.caller, cC, S), ScriptTransfer(D, cE, K), ScriptTransfer(D, cF, L), IntegerEntry(f, (cx - cE)), IntegerEntry(g, (cy - cF)), IntegerEntry(i, (T + cC)), IntegerEntry(k, aA((cx - cE), (cy - cF)))]
545+ else throw("Strict value is not equal to itself.")
549546 }
550547 else throw("Strict value is not equal to itself.")
551548 }
552549 }
553550 })
554551
555552
556553
557-@Callable(as)
558-func withdraw () = valueOrElse(bj(), {
559- let cI = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560- let ck = cI._1
561- let cl = cI._2
562- let cJ = fraction(ck, T, W)
563- let cK = fraction(ck, U, W)
564- let bU = aD((T - cJ), (U - cK))
565- if ((size(as.payments) != 1))
566- then bm()
567- else if ((cl != V))
568- then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
569- else if (!(az))
570- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
554+@Callable(ap)
555+func withdraw () = valueOrElse(bf(), {
556+ let cK = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
557+ let cg = cK._1
558+ let ch = cK._2
559+ let cL = fraction(cg, Q, T)
560+ let cM = fraction(cg, R, T)
561+ let bQ = aA((Q - cL), (R - cM))
562+ if ((size(ap.payments) != 1))
563+ then bi()
564+ else if ((ch != S))
565+ then throw(("Incorrect asset attached. Expected: " + toBase58String(S)))
566+ else if (!(aw))
567+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
571568 else {
572- let bV = if (containsElement(H, L))
573- then invoke(this, "stakeUnstake", [false, cJ, L], nil)
569+ let bR = if (containsElement(G, I))
570+ then invoke(this, "stakeUnstake", [false, cL, I], nil)
574571 else 0
575- if ((bV == bV))
572+ if ((bR == bR))
576573 then {
577- let bW = if (containsElement(H, M))
578- then invoke(this, "stakeUnstake", [false, cK, M], nil)
574+ let bS = if (containsElement(G, J))
575+ then invoke(this, "stakeUnstake", [false, cM, J], nil)
579576 else 0
580- if ((bW == bW))
581- then [IntegerEntry(f, (T - cJ)), IntegerEntry(g, (U - cK)), IntegerEntry(i, (W - ck)), IntegerEntry(l, bU), Burn(V, ck), ScriptTransfer(as.caller, cJ, N), ScriptTransfer(as.caller, cK, O)]
577+ if ((bS == bS))
578+ then [IntegerEntry(f, (Q - cL)), IntegerEntry(g, (R - cM)), IntegerEntry(i, (T - cg)), IntegerEntry(k, bQ), Burn(S, cg), ScriptTransfer(ap.caller, cL, K), ScriptTransfer(ap.caller, cM, L)]
582579 else throw("Strict value is not equal to itself.")
583580 }
584581 else throw("Strict value is not equal to itself.")
585582 }
586583 })
587584
588585
589586
590-@Callable(as)
591-func exchange (cL,cM) = valueOrElse(bj(), {
592- let cN = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
593- let ck = cN._1
594- let cl = cN._2
595- if ((0 >= cL))
596- then throw(("Estimated amount must be positive. Actual: " + toString(cL)))
597- else if ((cM > cL))
598- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cL)) + ". Minimal: ") + toString(cM)))
599- else if ((size(as.payments) != 1))
600- then bm()
601- else if (!(az))
602- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
603- else if (if ((cl != N))
604- then (cl != O)
587+@Callable(ap)
588+func exchange (cN,cO) = valueOrElse(bf(), {
589+ let cP = $Tuple2(ap.payments[0].amount, ap.payments[0].assetId)
590+ let cg = cP._1
591+ let ch = cP._2
592+ if ((0 >= cN))
593+ then throw(("Estimated amount must be positive. Actual: " + toString(cN)))
594+ else if ((cO > cN))
595+ then throw("Minimal amount can't be greater than estimated.")
596+ else if ((size(ap.payments) != 1))
597+ then bi()
598+ else if (!(aw))
599+ then ([ScriptTransfer(ap.caller, cg, ch)] ++ bn())
600+ else if (if ((ch != K))
601+ then (ch != L)
605602 else false)
606- then bl()
607- else if ((10000000 > ck))
603+ then bh()
604+ else if ((10000000 > cg))
608605 then throw("Only swap of 10.000000 or more tokens is allowed")
609- else if (if ((ai > fraction(ac, cM, ck)))
606+ else if (if ((af > fraction(Z, cO, cg)))
610607 then true
611- else (fraction(ac, cL, ck) > aj))
608+ else (fraction(Z, cN, cg) > ag))
612609 then throw("Incorrect args and pmt ratio")
613610 else {
614- let cO = if ((cl == N))
615- then O
616- else N
617- let cP = aF(cL, cM, ck, cl)
618- let bv = cP._1
619- let cQ = cP._2
620- let cR = fraction(bv, Z, aa)
621- let cS = fraction(bv, (aa - Y), aa)
622- let cT = if ((cl == N))
623- then $Tuple2((T + ck), ((U - cS) - cR))
624- else $Tuple2(((T - cS) - cR), (U + ck))
625- let cB = cT._1
626- let cC = cT._2
627- let cH = fraction((cB + cC), ag, (2 * ah))
628- if (if ((cH > cB))
611+ let cQ = if ((ch == K))
612+ then L
613+ else K
614+ let br = aC(cN, cO, cg, ch)
615+ let cR = fraction(br, W, X)
616+ let cS = fraction(br, (X - V), X)
617+ let cT = if ((ch == K))
618+ then $Tuple2((Q + cg), ((R - cS) - cR))
619+ else $Tuple2(((Q - cS) - cR), (R + cg))
620+ let cx = cT._1
621+ let cy = cT._2
622+ let cB = fraction((cx + cy), ad, (2 * ae))
623+ if (if ((cB > cx))
629624 then true
630- else (cH > cC))
631- then bn(cH, cB, cC)
625+ else (cB > cy))
626+ then bj(cB, cx, cy)
632627 else {
633- let cU = bd(cl)
634- let cn = cU._1
635- let co = cU._2
636- let cp = cU._3
637- let cV = bd(cO)
628+ let cU = aZ(ch)
629+ let cj = cU._1
630+ let ck = cU._2
631+ let cl = cU._3
632+ let cV = aZ(cQ)
638633 let cW = cV._1
639634 let cX = cV._2
640635 let cY = cV._3
641- let bV = if (containsElement(H, cn))
642- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
636+ let bR = if (containsElement(G, cj))
637+ then invoke(this, "stakeUnstake", [true, cg, cj], nil)
643638 else 0
644- if ((bV == bV))
639+ if ((bR == bR))
645640 then {
646- let bW = if (containsElement(H, cW))
641+ let bS = if (containsElement(G, cW))
647642 then invoke(this, "stakeUnstake", [false, (cS + cR), cW], nil)
648643 else 0
649- if ((bW == bW))
650- then [IntegerEntry(f, cB), IntegerEntry(g, cC), IntegerEntry(l, cQ), ScriptTransfer(as.caller, cS, cO), ScriptTransfer(E, cR, cO)]
644+ if ((bS == bS))
645+ then $Tuple2([IntegerEntry(f, cx), IntegerEntry(g, cy), IntegerEntry(k, aA(cx, cy)), ScriptTransfer(ap.caller, cS, cQ), ScriptTransfer(D, cR, cQ)], $Tuple2(cS, cQ))
651646 else throw("Strict value is not equal to itself.")
652647 }
653648 else throw("Strict value is not equal to itself.")
654649 }
655650 }
656651 })
657652
658653
659654
660-@Callable(as)
661-func shutdown () = valueOrElse(bk(as), if (!(K))
662- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
663- else bg("Paused by admin"))
655+@Callable(ap)
656+func shutdown () = valueOrElse(bg(ap), if (!(H))
657+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
658+ else bc("Paused by admin"))
664659
665660
666661
667-@Callable(as)
668-func activate () = valueOrElse(bk(as), if (K)
669- then bi()
670- else [BooleanEntry(c, true), DeleteEntry(m)])
662+@Callable(ap)
663+func activate () = valueOrElse(bg(ap), if (H)
664+ then be()
665+ else [BooleanEntry(c, true), DeleteEntry(l)])
671666
672667
673668
674-@Callable(as)
675-func takeIntoAccountExtraFunds () = valueOrElse(bj(), {
676- let cZ = (ax - T)
677- let da = (ay - U)
678- let cE = aD((T + cZ), (U + da))
679- if ((as.caller != E))
680- then throw("Only the wallet can call this function")
669+@Callable(ap)
670+func takeIntoAccountExtraFunds () = valueOrElse(bf(), {
671+ let cZ = (au - Q)
672+ let da = (av - R)
673+ let cz = aA((Q + cZ), (R + da))
674+ if ((ap.caller != D))
675+ then throw("Only the money box can call this function")
681676 else if (if ((0 > cZ))
682677 then true
683678 else (0 > da))
684- then bg("Enroll amount negative")
679+ then bc("Enroll amount negative")
685680 else if (if ((cZ == 0))
686681 then (da == 0)
687682 else false)
688683 then throw("No money to take")
689684 else {
690- let bV = if (if (containsElement(H, L))
685+ let bR = if (if (containsElement(G, I))
691686 then (cZ > 0)
692687 else false)
693- then invoke(this, "stakeUnstake", [true, cZ, L], nil)
688+ then invoke(this, "stakeUnstake", [true, cZ, I], nil)
694689 else 0
695- if ((bV == bV))
690+ if ((bR == bR))
696691 then {
697- let bW = if (if (containsElement(H, M))
692+ let bS = if (if (containsElement(G, J))
698693 then (da > 0)
699694 else false)
700- then invoke(this, "stakeUnstake", [true, da, M], nil)
695+ then invoke(this, "stakeUnstake", [true, da, J], nil)
701696 else 0
702- if ((bW == bW))
703- then [IntegerEntry(l, cE), IntegerEntry(f, (T + cZ)), IntegerEntry(g, (U + da)), IntegerEntry(("last_income_" + L), cZ), IntegerEntry(("last_income_" + M), da)]
697+ if ((bS == bS))
698+ then [IntegerEntry(k, cz), IntegerEntry(f, (Q + cZ)), IntegerEntry(g, (R + da))]
704699 else throw("Strict value is not equal to itself.")
705700 }
706701 else throw("Strict value is not equal to itself.")
707702 }
708703 })
709704
710705
711706
712-@Callable(as)
713-func writeBigIntInvariant () = valueOrElse(bk(as), {
714- let cE = aD(T, U)
715-[IntegerEntry(l, cE)]
716- })
717-
718-
719-
720-@Callable(as)
721-func stakeUnstake (bt,bv,db) = if ((as.caller != this))
707+@Callable(ap)
708+func stakeUnstake (bp,br,db) = if ((ap.caller != this))
722709 then throw("Only contract itself can invoke this function")
723710 else {
724- let dc = bu(bt, bv, fromBase58String(db))
725- let bx = dc._1
711+ let dc = bq(bp, br, fromBase58String(db))
712+ let bt = dc._1
726713 let dd = dc._2
727714 let de = dc._3
728715 let df = dc._4
729- let dg = invoke(dd, bx, de, df)
716+ let dg = invoke(dd, bt, de, df)
730717 if ((dg == dg))
731718 then nil
732719 else throw("Strict value is not equal to itself.")
733720 }
734721
735722
736723 @Verifier(dh)
737724 func di () = {
738725 let dj = {
739726 let dk = if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
740727 then 1
741728 else 0
742729 let dl = if (sigVerify(dh.bodyBytes, dh.proofs[1], A))
743730 then 1
744731 else 0
745732 let dm = if (sigVerify(dh.bodyBytes, dh.proofs[2], B))
746733 then 1
747734 else 0
748735 (((dk + dl) + dm) >= 2)
749736 }
750737 let w = dh
751738 if ($isInstanceOf(w, "InvokeScriptTransaction"))
752739 then {
753740 let dg = w
754741 let dn = if ((dg.dApp == this))
755742 then (dg.function == "takeIntoAccountExtraFunds")
756743 else false
757744 let do = if (if (if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
758745 then true
759746 else sigVerify(dh.bodyBytes, dh.proofs[0], A))
760747 then true
761748 else sigVerify(dh.bodyBytes, dh.proofs[0], B))
762749 then true
763- else sigVerify(dh.bodyBytes, dh.proofs[0], D)
750+ else sigVerify(dh.bodyBytes, dh.proofs[0], C)
764751 if (if (dn)
765752 then do
766753 else false)
767754 then true
768755 else dj
769756 }
770757 else dj
771758 }
772759

github/deemru/w8io/026f985 
250.41 ms