tx · BQ7HTk1towsZV9QmX1TGW5WM8D8aiLup6fC6mJjmzmLL

3N35YYxd1eSVd6E9UXp4YCh6Jvpqb6en4yz:  -0.01400000 Waves

2021.12.03 00:54 [1817223] smart account 3N35YYxd1eSVd6E9UXp4YCh6Jvpqb6en4yz > SELF 0.00000000 Waves

{ "type": 13, "id": "BQ7HTk1towsZV9QmX1TGW5WM8D8aiLup6fC6mJjmzmLL", "fee": 1400000, "feeAssetId": null, "timestamp": 1638482118980, "version": 1, "sender": "3N35YYxd1eSVd6E9UXp4YCh6Jvpqb6en4yz", "senderPublicKey": "5QfBtrC8zfmTtBb5zVuqWtMQoxpLGZYjSCkGPyWw4aD", "proofs": [ "2fegdNQbKqfJhf8QyojKFKzZPRmTdzgwgMFALGNHCgrDyH7ziXcZPeVH3DdRoGDLkwpgT1SMJ8RNfsvgk2GvFceP" ], "script": "base64:AAIFAAAAAAAAABoIAhIAEgMKAQQSAwoBCBIDCgEBEgMKAQgSAAAAABUAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MAAAABAQAAABoBVLqH+Yt4BzGRGp+/0rLoaVfM7clROKxU+gAAAAARU1dPUGdvdmVybmFuY2VBZHIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAZvcmFjbGUCAAAAD3N3b3BfZ292ZXJuYW5jZQIAAAAZRW1wdHkga2V5IHN3b3BfZ292ZXJuYW5jZQAAAAANV2F2ZXNVc2RuUG9vbAkBAAAABXZhbHVlAAAAAQkABCYAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABm9yYWNsZQIAAAAPV0FWRVNfVVNETl9wb29sAgAAABlFbXB0eSBrZXkgV0FWRVNfVVNETl9wb29sAAAAAAljb25zdW1lcnMJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAZvcmFjbGUCAAAACWNvbnN1bWVycwIAAAASRW1wdHkga2V5IGNvbnN1bWVyAgAAAAEsAAAAAAZhZG1pbjEJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAGb3JhY2xlAgAAAAdhZG1pbl8xAgAAABFFbXB0eSBrZXkgYWRtaW5fMQAAAAAGYWRtaW4yCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABm9yYWNsZQIAAAAHYWRtaW5fMgIAAAARRW1wdHkga2V5IGFkbWluXzIAAAAABmFkbWluMwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAZvcmFjbGUCAAAAB2FkbWluXzMCAAAAEUVtcHR5IGtleSBhZG1pbl8zAAAAAAZhZG1pbjQJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAGb3JhY2xlAgAAAAdhZG1pbl80AgAAABFFbXB0eSBrZXkgYWRtaW5fNAAAAAAGYWRtaW41CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABm9yYWNsZQIAAAAHYWRtaW5fNQIAAAARRW1wdHkga2V5IGFkbWluXzUAAAAACWZlZUluVVNETgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABm9yYWNsZQIAAAAUcHJvdG9jb2xfZmVlX2luX3VzZG4CAAAAGkVtcHR5IHByb3RvY29sX2ZlZV9pbl91c2RuAAAAABBpc1Byb3RvY29sQWN0aXZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQbAAAAAgUAAAAGb3JhY2xlAgAAABJpc19wcm90b2NvbF9hY3RpdmUCAAAAHEVtcHR5IGtleSBpc19wcm90b2NvbF9hY3RpdmUAAAAAEGtleUF1dG9tYXRlT3duZXICAAAABW93bmVyAAAAAAprZXlCYWxhbmNlAgAAAAhfYmFsYW5jZQAAAAAPa2V5SXNEYXBwQWN0aXZlAgAAAA5pc19kYXBwX2FjdGl2ZQAAAAARa2V5T3ZlcmFsbEJhbGFuY2UCAAAAD292ZXJhbGxfYmFsYW5jZQAAAAAMaXNEYXBwQWN0aXZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAAPa2V5SXNEYXBwQWN0aXZlAgAAABhFbXB0eSBrZXkgaXNfZGFwcF9hY3RpdmUAAAAAD29ydmVyYWxsQmFsYW5jZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEWtleU92ZXJhbGxCYWxhbmNlAgAAABlFbXB0eSBrZXkgb3ZlcmFsbF9iYWxhbmNlAAAAAA1ibG9ja2NoYWluRmVlAAAAAAAAB6EgAQAAAA5nZXRVc2VyQmFsYW5jZQAAAAEAAAAHdXNlclN0cgQAAAALdXNlckJhbGFuY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAd1c2VyU3RyBQAAAAprZXlCYWxhbmNlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAnViBQAAAAckbWF0Y2gwBQAAAAJ1YgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFZW1wdHkFAAAAByRtYXRjaDAAAAAAAAAAAAAJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IFAAAAC3VzZXJCYWxhbmNlAQAAABRjYWxjV2F2ZXNQcm90b2NvbEZlZQAAAAAEAAAAC2JhbGFuY2VVU0ROCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANV2F2ZXNVc2RuUG9vbAIAAAAPQl9hc3NldF9iYWxhbmNlAgAAABVFbXB0eSBCX2Fzc2V0X2JhbGFuY2UEAAAADGJhbGFuY2VXQVZFUwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADVdhdmVzVXNkblBvb2wCAAAAD0FfYXNzZXRfYmFsYW5jZQIAAAAVRW1wdHkgQV9hc3NldF9iYWxhbmNlBAAAAApmZWVJbldBVkVTCQAAawAAAAMFAAAACWZlZUluVVNETgUAAAAMYmFsYW5jZVdBVkVTBQAAAAtiYWxhbmNlVVNETgkAAGQAAAACBQAAAApmZWVJbldBVkVTBQAAAA1ibG9ja2NoYWluRmVlAQAAABVpc1RyYW5zYWN0aW9uQXBwcm92ZWQAAAABAAAABXR4U3RyBAAAAAxhZG1pbjFTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluMQUAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAABAAAAAxhZG1pbjJTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluMgUAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAABAAAAAxhZG1pbjNTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluMwUAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAABAAAAAxhZG1pbjRTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluNAUAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAABAAAAAxhZG1pbjVTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluNQUAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAACQAAZwAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgUAAAAMYWRtaW4xU2lnbmVkBQAAAAxhZG1pbjJTaWduZWQFAAAADGFkbWluM1NpZ25lZAUAAAAMYWRtaW40U2lnbmVkBQAAAAxhZG1pbjVTaWduZWQAAAAAAAAAAAMAAAAGAAAAAWkBAAAABGluaXQAAAAAAwMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMCAAAADmlzX2RhcHBfYWN0aXZlBgkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwIAAAAPb3ZlcmFsbF9iYWxhbmNlCQAAAgAAAAECAAAAE0FscmVhZHkgaW5pdGlhbGl6ZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD292ZXJhbGxfYmFsYW5jZQAAAAAAAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgIAAAAOaXNfZGFwcF9hY3RpdmUGBQAAAANuaWwAAAABaQEAAAAKZXh0cmFjdEZlZQAAAAEAAAAMaXNGZWVFeHRyYWN0AwkBAAAAASEAAAABAwUAAAAQaXNQcm90b2NvbEFjdGl2ZQUAAAAMaXNEYXBwQWN0aXZlBwkAAAIAAAABAgAAABdQcm90b2wgc3RvcHBlZCBieSBhZG1pbgQAAAAEdXNlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAQa2V5QXV0b21hdGVPd25lcgIAAAAORW1wdHkga2V5T3duZXIEAAAADG9yaWdpbkNhbGxlcgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAADmlzQ29uc3VtZXJDYWxsCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAljb25zdW1lcnMFAAAADG9yaWdpbkNhbGxlcgIAAAAURW1wdHkga2V5OiBjb25zdW1lcnMDCQEAAAABIQAAAAEFAAAADmlzQ29uc3VtZXJDYWxsCQAAAgAAAAEJAAEsAAAAAgUAAAAMb3JpZ2luQ2FsbGVyAgAAABRpcyBpcyBub3QgYSBjb25zdW1lcgQAAAALcHJvdG9jb2xGZWUDBQAAAAxpc0ZlZUV4dHJhY3QJAQAAABRjYWxjV2F2ZXNQcm90b2NvbEZlZQAAAAAAAAAAAAAAAAAEAAAAC3VzZXJCYWxhbmNlCQEAAAAOZ2V0VXNlckJhbGFuY2UAAAABBQAAAAR1c2VyBAAAAA5uZXdVc2VyQmFsYW5jZQkAAGUAAAACBQAAAAt1c2VyQmFsYW5jZQUAAAALcHJvdG9jb2xGZWUEAAAAEm5ld09ydmVyYWxsQmFsYW5jZQkAAGUAAAACBQAAAA9vcnZlcmFsbEJhbGFuY2UFAAAAC3Byb3RvY29sRmVlAwkAAGYAAAACAAAAAAAAAAAABQAAAA5uZXdVc2VyQmFsYW5jZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABpJbnN1ZmZpY2llbnQgbmV3IGJhbGFuY2U6IAkAAaQAAAABBQAAAA5uZXdVc2VyQmFsYW5jZQIAAAAKIGZvciB1c2VyIAUAAAAEdXNlcgMJAABmAAAAAgAAAAAAAAAAAAUAAAASbmV3T3J2ZXJhbGxCYWxhbmNlCQAAAgAAAAEJAAEsAAAAAgIAAAAZTmVnYXRpdmEgb3ZlcmFsbCBiYWxhbmNlOgkAAaQAAAABBQAAABJuZXdPcnZlcmFsbEJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEdXNlcgUAAAAKa2V5QmFsYW5jZQUAAAAObmV3VXNlckJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtleU92ZXJhbGxCYWxhbmNlBQAAABJuZXdPcnZlcmFsbEJhbGFuY2UFAAAAA25pbAAAAAFpAQAAABByZXBsZW5pc2hCYWxhbmNlAAAAAQAAAA91c2VyVG9SZXBsZW5pc2gDCQEAAAABIQAAAAEDBQAAABBpc1Byb3RvY29sQWN0aXZlBQAAAAxpc0RhcHBBY3RpdmUHCQAAAgAAAAECAAAAF1Byb3RvbCBzdG9wcGVkIGJ5IGFkbWluBAAAABZ1c2VyVG9SZXBsZW5pc2hBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAPdXNlclRvUmVwbGVuaXNoAgAAACZBcmd1bWVudCBtdXN0IGJlIGJhc2U1OCBzdHJpbmcgYWRkcmVzcwQAAAALJHQwNDQxNzQ0OTIJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDA0NDE3NDQ5MgAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDQ0MTc0NDkyAAAAAl8yAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAEdW5pdAkAAAIAAAABAgAAACZPbmx5IFdBVkVTIGF2YWlsYWJsZSBmb3IgcmVwbGVuaXNobWVudAQAAAAWdXNlclRvUmVwbGVuaXNoQmFsYW5jZQkBAAAADmdldFVzZXJCYWxhbmNlAAAAAQUAAAAPdXNlclRvUmVwbGVuaXNoBAAAAA5uZXdVc2VyQmFsYW5jZQkAAGQAAAACBQAAABZ1c2VyVG9SZXBsZW5pc2hCYWxhbmNlBQAAAAlwbXRBbW91bnQEAAAAEm5ld09ydmVyYWxsQmFsYW5jZQkAAGQAAAACBQAAAA9vcnZlcmFsbEJhbGFuY2UFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQACWAAAAAEIBQAAABZ1c2VyVG9SZXBsZW5pc2hBZGRyZXNzAAAABWJ5dGVzBQAAAAprZXlCYWxhbmNlBQAAAA5uZXdVc2VyQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5T3ZlcmFsbEJhbGFuY2UFAAAAEm5ld09ydmVyYWxsQmFsYW5jZQUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAQAAAAt3aXRoZHJhd0FtdAMJAQAAAAEhAAAAAQMFAAAAEGlzUHJvdG9jb2xBY3RpdmUFAAAADGlzRGFwcEFjdGl2ZQcJAAACAAAAAQIAAAAXUHJvdG9sIHN0b3BwZWQgYnkgYWRtaW4EAAAACWNhbGxlclN0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADWNhbGxlckJhbGFuY2UJAQAAAA5nZXRVc2VyQmFsYW5jZQAAAAEFAAAACWNhbGxlclN0cgQAAAAQbmV3Q2FsbGVyQmFsYW5jZQkAAGUAAAACBQAAAA1jYWxsZXJCYWxhbmNlBQAAAAt3aXRoZHJhd0FtdAQAAAASbmV3T3J2ZXJhbGxCYWxhbmNlCQAAZQAAAAIFAAAAD29ydmVyYWxsQmFsYW5jZQUAAAALd2l0aGRyYXdBbXQDCQAAZgAAAAIFAAAAC3dpdGhkcmF3QW10BQAAAA1jYWxsZXJCYWxhbmNlCQAAAgAAAAECAAAAG3dpdGhkcmF3QW10ID4gY2FsbGVyQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAljYWxsZXJTdHIFAAAACmtleUJhbGFuY2UFAAAAEG5ld0NhbGxlckJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtleU92ZXJhbGxCYWxhbmNlBQAAABJuZXdPcnZlcmFsbEJhbGFuY2UJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAt3aXRoZHJhd0FtdAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAAFmluY29tZVByb3RvY29sV2l0aGRyYXcAAAABAAAAFmFkZHJlc0ZvclNlbmRpbmdJbmNvbWUDCQEAAAABIQAAAAEDBQAAABBpc1Byb3RvY29sQWN0aXZlBQAAAAxpc0RhcHBBY3RpdmUHCQAAAgAAAAECAAAAGVByb3RvY29sIHN0b3BwZWQgYnkgYWRtaW4DCQEAAAABIQAAAAEJAQAAABVpc1RyYW5zYWN0aW9uQXBwcm92ZWQAAAABCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAAACAAAAAQIAAAAlVHJhbnNhY3Rpb24gaWQgbm90IGFwcHJvdmVkIGJ5IGFkbWlucwQAAAAGaW5jb21lCQAAZQAAAAIICQAD7wAAAAEFAAAABHRoaXMAAAAJYXZhaWxhYmxlBQAAAA9vcnZlcmFsbEJhbGFuY2UDCQAAZwAAAAIAAAAAAAAAAAAFAAAABmluY29tZQkAAAIAAAABAgAAAAxpbmNvbWUgPD0gMCAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAFmFkZHJlc0ZvclNlbmRpbmdJbmNvbWUCAAAAJkFyZ3VtZW50IG11c3QgYmUgYmFzZTU4IHN0cmluZyBhZGRyZXNzBQAAAAZpbmNvbWUFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAAxzaHV0ZG93bkRhcHAAAAAAAwkBAAAAASEAAAABBQAAAAxpc0RhcHBBY3RpdmUJAAACAAAAAQIAAAAXUHJvdG9sIHN0b3BwZWQgYnkgYWRtaW4DAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAZhZG1pbjEJAARMAAAAAgUAAAAGYWRtaW4yCQAETAAAAAIFAAAABmFkbWluMwkABEwAAAACBQAAAAZhZG1pbjQJAARMAAAAAgUAAAAGYWRtaW41BQAAAANuaWwIBQAAAAFpAAAABmNhbGxlcgkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAJY29uc3VtZXJzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMHCQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgIAAAAOaXNfZGFwcF9hY3RpdmUHBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkBAAAAASEAAAABCQEAAAAVaXNUcmFuc2FjdGlvbkFwcHJvdmVkAAAAAQkAAlgAAAABCAUAAAACdHgAAAACaWQJAAACAAAAAQIAAAAlVHJhbnNhY3Rpb24gaWQgbm90IGFwcHJvdmVkIGJ5IGFkbWlucwZG/oAh", "chainId": 84, "height": 1817223, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let oracle = Address(base58'3N6vNMJ3SuqdoABTbqpmxbyVjTQhf9RHHQ5')
5+
6+let SWOPgovernanceAdr = addressFromStringValue(valueOrErrorMessage(getString(oracle, "swop_governance"), "Empty key swop_governance"))
7+
8+let WavesUsdnPool = value(addressFromString(valueOrElse(getString(oracle, "WAVES_USDN_pool"), "Empty key WAVES_USDN_pool")))
9+
10+let consumers = split(valueOrElse(getString(oracle, "consumers"), "Empty key consumer"), ",")
11+
12+let admin1 = addressFromStringValue(valueOrElse(getString(oracle, "admin_1"), "Empty key admin_1"))
13+
14+let admin2 = addressFromStringValue(valueOrElse(getString(oracle, "admin_2"), "Empty key admin_2"))
15+
16+let admin3 = addressFromStringValue(valueOrElse(getString(oracle, "admin_3"), "Empty key admin_3"))
17+
18+let admin4 = addressFromStringValue(valueOrElse(getString(oracle, "admin_4"), "Empty key admin_4"))
19+
20+let admin5 = addressFromStringValue(valueOrElse(getString(oracle, "admin_5"), "Empty key admin_5"))
21+
22+let feeInUSDN = valueOrErrorMessage(getInteger(oracle, "protocol_fee_in_usdn"), "Empty protocol_fee_in_usdn")
23+
24+let isProtocolActive = valueOrErrorMessage(getBoolean(oracle, "is_protocol_active"), "Empty key is_protocol_active")
25+
26+let keyAutomateOwner = "owner"
27+
28+let keyBalance = "_balance"
29+
30+let keyIsDappActive = "is_dapp_active"
31+
32+let keyOverallBalance = "overall_balance"
33+
34+let isDappActive = valueOrErrorMessage(getBoolean(this, keyIsDappActive), "Empty key is_dapp_active")
35+
36+let orverallBalance = valueOrErrorMessage(getInteger(this, keyOverallBalance), "Empty key overall_balance")
37+
38+let blockchainFee = 500000
39+
40+func getUserBalance (userStr) = {
41+ let userBalance = match getInteger(this, (userStr + keyBalance)) {
42+ case ub: Int =>
43+ ub
44+ case empty: Unit =>
45+ 0
46+ case _ =>
47+ throw("Match error")
48+ }
49+ userBalance
50+ }
51+
52+
53+func calcWavesProtocolFee () = {
54+ let balanceUSDN = valueOrErrorMessage(getInteger(WavesUsdnPool, "B_asset_balance"), "Empty B_asset_balance")
55+ let balanceWAVES = valueOrErrorMessage(getInteger(WavesUsdnPool, "A_asset_balance"), "Empty A_asset_balance")
56+ let feeInWAVES = fraction(feeInUSDN, balanceWAVES, balanceUSDN)
57+ (feeInWAVES + blockchainFee)
58+ }
59+
60+
61+func isTransactionApproved (txStr) = {
62+ let admin1Signed = if (valueOrElse(getBoolean(admin1, txStr), false))
63+ then 1
64+ else 0
65+ let admin2Signed = if (valueOrElse(getBoolean(admin2, txStr), false))
66+ then 1
67+ else 0
68+ let admin3Signed = if (valueOrElse(getBoolean(admin3, txStr), false))
69+ then 1
70+ else 0
71+ let admin4Signed = if (valueOrElse(getBoolean(admin4, txStr), false))
72+ then 1
73+ else 0
74+ let admin5Signed = if (valueOrElse(getBoolean(admin5, txStr), false))
75+ then 1
76+ else 0
77+ (((((admin1Signed + admin2Signed) + admin3Signed) + admin4Signed) + admin5Signed) >= 3)
78+ }
79+
80+
81+@Callable(i)
82+func init () = if (if (isDefined(getString(this, "is_dapp_active")))
83+ then true
84+ else isDefined(getInteger(this, "overall_balance")))
85+ then throw("Already initialized")
86+ else [IntegerEntry("overall_balance", 0), BooleanEntry("is_dapp_active", true)]
87+
88+
89+
90+@Callable(i)
91+func extractFee (isFeeExtract) = if (!(if (isProtocolActive)
92+ then isDappActive
93+ else false))
94+ then throw("Protol stopped by admin")
95+ else {
96+ let user = valueOrErrorMessage(getString(i.caller, keyAutomateOwner), "Empty keyOwner")
97+ let originCaller = toString(i.originCaller)
98+ let isConsumerCall = valueOrErrorMessage(containsElement(consumers, originCaller), "Empty key: consumers")
99+ if (!(isConsumerCall))
100+ then throw((originCaller + "is is not a consumer"))
101+ else {
102+ let protocolFee = if (isFeeExtract)
103+ then calcWavesProtocolFee()
104+ else 0
105+ let userBalance = getUserBalance(user)
106+ let newUserBalance = (userBalance - protocolFee)
107+ let newOrverallBalance = (orverallBalance - protocolFee)
108+ if ((0 > newUserBalance))
109+ then throw(((("Insufficient new balance: " + toString(newUserBalance)) + " for user ") + user))
110+ else if ((0 > newOrverallBalance))
111+ then throw(("Negativa overall balance:" + toString(newOrverallBalance)))
112+ else [IntegerEntry((user + keyBalance), newUserBalance), IntegerEntry(keyOverallBalance, newOrverallBalance)]
113+ }
114+ }
115+
116+
117+
118+@Callable(i)
119+func replenishBalance (userToReplenish) = if (!(if (isProtocolActive)
120+ then isDappActive
121+ else false))
122+ then throw("Protol stopped by admin")
123+ else {
124+ let userToReplenishAddress = valueOrErrorMessage(addressFromString(userToReplenish), "Argument must be base58 string address")
125+ let $t044174492 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
126+ let pmtAmount = $t044174492._1
127+ let pmtAssetId = $t044174492._2
128+ if ((pmtAssetId != unit))
129+ then throw("Only WAVES available for replenishment")
130+ else {
131+ let userToReplenishBalance = getUserBalance(userToReplenish)
132+ let newUserBalance = (userToReplenishBalance + pmtAmount)
133+ let newOrverallBalance = (orverallBalance + pmtAmount)
134+[IntegerEntry((toBase58String(userToReplenishAddress.bytes) + keyBalance), newUserBalance), IntegerEntry(keyOverallBalance, newOrverallBalance)]
135+ }
136+ }
137+
138+
139+
140+@Callable(i)
141+func withdraw (withdrawAmt) = if (!(if (isProtocolActive)
142+ then isDappActive
143+ else false))
144+ then throw("Protol stopped by admin")
145+ else {
146+ let callerStr = toString(i.caller)
147+ let callerBalance = getUserBalance(callerStr)
148+ let newCallerBalance = (callerBalance - withdrawAmt)
149+ let newOrverallBalance = (orverallBalance - withdrawAmt)
150+ if ((withdrawAmt > callerBalance))
151+ then throw("withdrawAmt > callerBalance")
152+ else [IntegerEntry((callerStr + keyBalance), newCallerBalance), IntegerEntry(keyOverallBalance, newOrverallBalance), ScriptTransfer(i.caller, withdrawAmt, unit)]
153+ }
154+
155+
156+
157+@Callable(i)
158+func incomeProtocolWithdraw (addresForSendingIncome) = if (!(if (isProtocolActive)
159+ then isDappActive
160+ else false))
161+ then throw("Protocol stopped by admin")
162+ else if (!(isTransactionApproved(toBase58String(i.transactionId))))
163+ then throw("Transaction id not approved by admins")
164+ else {
165+ let income = (wavesBalance(this).available - orverallBalance)
166+ if ((0 >= income))
167+ then throw("income <= 0 ")
168+ else [ScriptTransfer(valueOrErrorMessage(addressFromString(addresForSendingIncome), "Argument must be base58 string address"), income, unit)]
169+ }
170+
171+
172+
173+@Callable(i)
174+func shutdownDapp () = if (!(isDappActive))
175+ then throw("Protol stopped by admin")
176+ else if (if (!(containsElement([admin1, admin2, admin3, admin4, admin5], i.caller)))
177+ then !(containsElement(consumers, toBase58String(i.caller.bytes)))
178+ else false)
179+ then throw("Only admin can call this function")
180+ else [BooleanEntry("is_dapp_active", false)]
181+
182+
183+@Verifier(tx)
184+func verify () = if (!(isTransactionApproved(toBase58String(tx.id))))
185+ then throw("Transaction id not approved by admins")
186+ else true
187+

github/deemru/w8io/169f3d6 
25.16 ms