tx · 397ZF2bszS1f6Ji4nTJ2KdvigdTkKtL27gBKDmoMDgRy

3MqUtdhTUHvNfkBVyZp2EdgCZGb4KAxue9R:  -0.01400000 Waves

2021.10.31 13:36 [1770378] smart account 3MqUtdhTUHvNfkBVyZp2EdgCZGb4KAxue9R > SELF 0.00000000 Waves

{ "type": 13, "id": "397ZF2bszS1f6Ji4nTJ2KdvigdTkKtL27gBKDmoMDgRy", "fee": 1400000, "feeAssetId": null, "timestamp": 1635676615456, "version": 1, "sender": "3MqUtdhTUHvNfkBVyZp2EdgCZGb4KAxue9R", "senderPublicKey": "Q7Wy54iPAFuhrCCeSEju6cPVqXs49YhDnipFrWGYict", "proofs": [ "2gaeB6ASm8h2PVpSaSgpgUfAPP1BUtSGWuubHYAf1EQChTT1TqYTc8RveEcb193FrejMx6PRLx6w9b1RswJpsSmt" ], "script": "base64:AAIFAAAAAAAAACEIAhIAEgQKAggEEgQKAggEEgMKAQgSAwoBARIDCgEIEgAAAAATAAAAAAZvcmFjbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVT2TjOFXpjVdjyOj0sBjic2NFJc9Kx4msUAAAAAEVNXT1Bnb3Zlcm5hbmNlQWRyCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAGb3JhY2xlAgAAAA9zd29wX2dvdmVybmFuY2UCAAAAGUVtcHR5IGtleSBzd29wX2dvdmVybmFuY2UAAAAADVdhdmVzVXNkblBvb2wJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAZvcmFjbGUCAAAAD1dBVkVTX1VTRE5fcG9vbAIAAAAhRW1wdHkga2V5IFNXT1BfZ292ZXJuYW5jZV9hZGRyZXNzAAAAAAljb25zdW1lcnMJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAZvcmFjbGUCAAAACWNvbnN1bWVycwIAAAASRW1wdHkga2V5IGNvbnN1bWVyAgAAAAEsAAAAAAZhZG1pbjEJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAGb3JhY2xlAgAAAAdhZG1pbl8xAgAAABFFbXB0eSBrZXkgYWRtaW5fMQAAAAAGYWRtaW4yCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABm9yYWNsZQIAAAAHYWRtaW5fMgIAAAARRW1wdHkga2V5IGFkbWluXzIAAAAABmFkbWluMwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAZvcmFjbGUCAAAAB2FkbWluXzMCAAAAEUVtcHR5IGtleSBhZG1pbl8zAAAAAAlmZWVJblVTRE4JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZvcmFjbGUCAAAAFHByb3RvY29sX2ZlZV9pbl91c2RuAgAAABpFbXB0eSBwcm90b2NvbF9mZWVfaW5fdXNkbgAAAAAQaXNQcm90b2NvbEFjdGl2ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABm9yYWNsZQIAAAASaXNfcHJvdG9jb2xfYWN0aXZlAgAAABxFbXB0eSBrZXkgaXNfcHJvdG9jb2xfYWN0aXZlAAAAAAprZXlCYWxhbmNlAgAAAAhfYmFsYW5jZQAAAAAMa2V5RmVlSW5VU0ROAgAAAAtmZWVfaW5fdXNkbgAAAAAPa2V5SXNEYXBwQWN0aXZlAgAAAA5pc19kYXBwX2FjdGl2ZQAAAAARa2V5T3ZlcmFsbEJhbGFuY2UCAAAAD292ZXJhbGxfYmFsYW5jZQAAAAAMaXNEYXBwQWN0aXZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAAPa2V5SXNEYXBwQWN0aXZlAgAAABhFbXB0eSBrZXkgaXNfZGFwcF9hY3RpdmUAAAAAD29ydmVyYWxsQmFsYW5jZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEWtleU92ZXJhbGxCYWxhbmNlAgAAABlFbXB0eSBrZXkgb3ZlcmFsbF9iYWxhbmNlAAAAAA1ibG9ja2NoYWluRmVlAAAAAAAAB6EgAQAAAA5nZXRVc2VyQmFsYW5jZQAAAAEAAAAHdXNlclN0cgQAAAALdXNlckJhbGFuY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAd1c2VyU3RyBQAAAAprZXlCYWxhbmNlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAnViBQAAAAckbWF0Y2gwBQAAAAJ1YgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFZW1wdHkFAAAAByRtYXRjaDAAAAAAAAAAAAAJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IFAAAAC3VzZXJCYWxhbmNlAQAAABRjYWxjV2F2ZXNQcm90b2NvbEZlZQAAAAAEAAAAC2JhbGFuY2VVU0ROCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANV2F2ZXNVc2RuUG9vbAIAAAAPQl9hc3NldF9iYWxhbmNlAgAAABVFbXB0eSBCX2Fzc2V0X2JhbGFuY2UEAAAADGJhbGFuY2VXQVZFUwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADVdhdmVzVXNkblBvb2wCAAAAD0FfYXNzZXRfYmFsYW5jZQIAAAAVRW1wdHkgQV9hc3NldF9iYWxhbmNlBAAAAApmZWVJbldBVkVTCQAAawAAAAMFAAAACWZlZUluVVNETgUAAAAMYmFsYW5jZVdBVkVTBQAAAAtiYWxhbmNlVVNETgkAAGQAAAACBQAAAApmZWVJbldBVkVTBQAAAA1ibG9ja2NoYWluRmVlAQAAABVpc1RyYW5zYWN0aW9uQXBwcm92ZWQAAAABAAAABXR4U3RyBAAAAAxhZG1pbjFTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluMQIAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAABAAAAAxhZG1pbjJTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluMgIAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAABAAAAAxhZG1pbjNTaWduZWQDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABmFkbWluMwIAAAAFdHhTdHIHAAAAAAAAAAABAAAAAAAAAAAACQAAZwAAAAIJAABkAAAAAgkAAGQAAAACBQAAAAxhZG1pbjFTaWduZWQFAAAADGFkbWluMlNpZ25lZAUAAAAMYWRtaW4zU2lnbmVkAAAAAAAAAAACAAAABwAAAAFpAQAAAARpbml0AAAAAAMDCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzAgAAAA5pc19kYXBwX2FjdGl2ZQYJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAABHRoaXMCAAAAD292ZXJhbGxfYmFsYW5jZQkAAAIAAAABAgAAABNBbHJlYWR5IGluaXRpYWxpemVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA9vdmVyYWxsX2JhbGFuY2UAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAICAAAADmlzX2RhcHBfYWN0aXZlBgUAAAADbmlsAAAAAWkBAAAAFHVwZGF0ZUF1dG9tYXRlU3RhdHVzAAAAAgAAAAhhdXRvbWF0ZQAAAAZzdGF0dXMDCQEAAAABIQAAAAEDBQAAABBpc1Byb3RvY29sQWN0aXZlBQAAAAxpc0RhcHBBY3RpdmUHCQAAAgAAAAECAAAAF1Byb3RvbCBzdG9wcGVkIGJ5IGFkbWluAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAJY29uc3VtZXJzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAhhdXRvbWF0ZQUAAAAGc3RhdHVzBQAAAANuaWwAAAABaQEAAAAKZXh0cmFjdEZlZQAAAAIAAAAEdXNlcgAAAAxpc0ZlZUV4dHJhY3QDCQEAAAABIQAAAAEDBQAAABBpc1Byb3RvY29sQWN0aXZlBQAAAAxpc0RhcHBBY3RpdmUHCQAAAgAAAAECAAAAF1Byb3RvbCBzdG9wcGVkIGJ5IGFkbWluBAAAABBpc0F1dG9tYXRlQWN0aXZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAEsAAAAAgIAAAAURW1wdHkga2V5IGkuY2FsbGVyOiAJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkBAAAAASEAAAABBQAAABBpc0F1dG9tYXRlQWN0aXZlCQAAAgAAAAECAAAAGVRoaXMgYXV0b21hdGUgaXMgaW5hY3RpdmUEAAAAC3Byb3RvY29sRmVlAwUAAAAMaXNGZWVFeHRyYWN0CQEAAAAUY2FsY1dhdmVzUHJvdG9jb2xGZWUAAAAAAAAAAAAAAAAABAAAAAt1c2VyQmFsYW5jZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAEdXNlcgUAAAAKa2V5QmFsYW5jZQkAASwAAAACCQABLAAAAAICAAAAHUVtcHR5IGtleSB1c2VyICsga2V5QmFsYW5jZTogBQAAAAR1c2VyBQAAAAprZXlCYWxhbmNlBAAAAA5uZXdVc2VyQmFsYW5jZQkAAGUAAAACBQAAAAt1c2VyQmFsYW5jZQUAAAALcHJvdG9jb2xGZWUEAAAAEm5ld09ydmVyYWxsQmFsYW5jZQkAAGUAAAACBQAAAA9vcnZlcmFsbEJhbGFuY2UFAAAAC3Byb3RvY29sRmVlAwkAAGYAAAACAAAAAAAAAAAABQAAAA5uZXdVc2VyQmFsYW5jZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABlJbnN1ZmZpY2llbnQgbmV3IGJhbGFuY2U6CQABpAAAAAEFAAAADm5ld1VzZXJCYWxhbmNlAgAAAAogZm9yIHVzZXIgBQAAAAR1c2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHVzZXIFAAAACmtleUJhbGFuY2UFAAAADm5ld1VzZXJCYWxhbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrZXlPdmVyYWxsQmFsYW5jZQUAAAASbmV3T3J2ZXJhbGxCYWxhbmNlBQAAAANuaWwAAAABaQEAAAAQcmVwbGVuaXNoQmFsYW5jZQAAAAEAAAAPdXNlclRvUmVwbGVuaXNoAwkBAAAAASEAAAABAwUAAAAQaXNQcm90b2NvbEFjdGl2ZQUAAAAMaXNEYXBwQWN0aXZlBwkAAAIAAAABAgAAABdQcm90b2wgc3RvcHBlZCBieSBhZG1pbgQAAAAWdXNlclRvUmVwbGVuaXNoQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAD3VzZXJUb1JlcGxlbmlzaAIAAAAeQXJndW1lbnQgbXVzdCBiZSBiYXNlNTggc3RyaW5nBAAAAAskdDA0NTYxNDYzNgkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAACyR0MDQ1NjE0NjM2AAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAALJHQwNDU2MTQ2MzYAAAACXzIDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAR1bml0CQAAAgAAAAECAAAAJk9ubHkgV0FWRVMgYXZhaWxhYmxlIGZvciByZXBsZW5pc2htZW50BAAAABZ1c2VyVG9SZXBsZW5pc2hCYWxhbmNlCQEAAAAOZ2V0VXNlckJhbGFuY2UAAAABBQAAAA91c2VyVG9SZXBsZW5pc2gEAAAADm5ld1VzZXJCYWxhbmNlCQAAZAAAAAIFAAAAFnVzZXJUb1JlcGxlbmlzaEJhbGFuY2UFAAAACXBtdEFtb3VudAQAAAASbmV3T3J2ZXJhbGxCYWxhbmNlCQAAZAAAAAIFAAAAD29ydmVyYWxsQmFsYW5jZQUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAJYAAAAAQgFAAAAFnVzZXJUb1JlcGxlbmlzaEFkZHJlc3MAAAAFYnl0ZXMFAAAACmtleUJhbGFuY2UFAAAADm5ld1VzZXJCYWxhbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrZXlPdmVyYWxsQmFsYW5jZQUAAAASbmV3T3J2ZXJhbGxCYWxhbmNlBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAABAAAAC3dpdGhkcmF3QW10AwkBAAAAASEAAAABAwUAAAAQaXNQcm90b2NvbEFjdGl2ZQUAAAAMaXNEYXBwQWN0aXZlBwkAAAIAAAABAgAAABdQcm90b2wgc3RvcHBlZCBieSBhZG1pbgQAAAAJY2FsbGVyU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAANY2FsbGVyQmFsYW5jZQkBAAAADmdldFVzZXJCYWxhbmNlAAAAAQUAAAAJY2FsbGVyU3RyBAAAABBuZXdDYWxsZXJCYWxhbmNlCQAAZQAAAAIFAAAADWNhbGxlckJhbGFuY2UFAAAAC3dpdGhkcmF3QW10BAAAABJuZXdPcnZlcmFsbEJhbGFuY2UJAABlAAAAAgUAAAAPb3J2ZXJhbGxCYWxhbmNlBQAAAAt3aXRoZHJhd0FtdAMJAABmAAAAAgUAAAALd2l0aGRyYXdBbXQFAAAADWNhbGxlckJhbGFuY2UJAAACAAAAAQIAAAAbd2l0aGRyYXdBbXQgPiBjYWxsZXJCYWxhbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACWNhbGxlclN0cgUAAAAKa2V5QmFsYW5jZQUAAAAQbmV3Q2FsbGVyQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5T3ZlcmFsbEJhbGFuY2UFAAAAEm5ld09ydmVyYWxsQmFsYW5jZQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAC3dpdGhkcmF3QW10BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAWaW5jb21lUHJvdG9jb2xXaXRoZHJhdwAAAAEAAAAWYWRkcmVzRm9yU2VuZGluZ0luY29tZQMJAQAAAAEhAAAAAQMFAAAAEGlzUHJvdG9jb2xBY3RpdmUFAAAADGlzRGFwcEFjdGl2ZQcJAAACAAAAAQIAAAAXUHJvdG9sIHN0b3BwZWQgYnkgYWRtaW4DCQEAAAABIQAAAAEJAQAAABVpc1RyYW5zYWN0aW9uQXBwcm92ZWQAAAABCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAAACAAAAAQIAAAAlVHJhbnNhY3Rpb24gaWQgbm90IGFwcHJvdmVkIGJ5IGFkbWlucwQAAAAGaW5jb21lCQAAZQAAAAIICQAD7wAAAAEFAAAABHRoaXMAAAAJYXZhaWxhYmxlBQAAAA9vcnZlcmFsbEJhbGFuY2UDCQAAZwAAAAIAAAAAAAAAAAAFAAAABmluY29tZQkAAAIAAAABAgAAAAxpbmNvbWUgPD0gMCAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAWYWRkcmVzRm9yU2VuZGluZ0luY29tZQUAAAAGaW5jb21lBQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAMc2h1dGRvd25EYXBwAAAAAAMJAQAAAAEhAAAAAQUAAAAMaXNEYXBwQWN0aXZlCQAAAgAAAAECAAAAF1Byb3RvbCBzdG9wcGVkIGJ5IGFkbWluAwMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAGYWRtaW4xCQAETAAAAAIFAAAABmFkbWluMgkABEwAAAACBQAAAAZhZG1pbjMFAAAAA25pbAgFAAAAAWkAAAAGY2FsbGVyCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAljb25zdW1lcnMJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwcJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACAgAAAA5pc19kYXBwX2FjdGl2ZQcFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAADCQEAAAABIQAAAAEJAQAAABVpc1RyYW5zYWN0aW9uQXBwcm92ZWQAAAABCQACWAAAAAEIBQAAAAJ0eAAAAAJpZAkAAAIAAAABAgAAACVUcmFuc2FjdGlvbiBpZCBub3QgYXBwcm92ZWQgYnkgYWRtaW5zBu5JbQ8=", "chainId": 84, "height": 1770378, "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'3NCNRgdSsFaF8y8V1ghhGiU5KoSBMhQbzJg')
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 SWOP_governance_address")))
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 feeInUSDN = valueOrErrorMessage(getInteger(oracle, "protocol_fee_in_usdn"), "Empty protocol_fee_in_usdn")
19+
20+let isProtocolActive = valueOrErrorMessage(getBoolean(oracle, "is_protocol_active"), "Empty key is_protocol_active")
21+
22+let keyBalance = "_balance"
23+
24+let keyFeeInUSDN = "fee_in_usdn"
25+
26+let keyIsDappActive = "is_dapp_active"
27+
28+let keyOverallBalance = "overall_balance"
29+
30+let isDappActive = valueOrErrorMessage(getBoolean(this, keyIsDappActive), "Empty key is_dapp_active")
31+
32+let orverallBalance = valueOrErrorMessage(getInteger(this, keyOverallBalance), "Empty key overall_balance")
33+
34+let blockchainFee = 500000
35+
36+func getUserBalance (userStr) = {
37+ let userBalance = match getInteger(this, (userStr + keyBalance)) {
38+ case ub: Int =>
39+ ub
40+ case empty: Unit =>
41+ 0
42+ case _ =>
43+ throw("Match error")
44+ }
45+ userBalance
46+ }
47+
48+
49+func calcWavesProtocolFee () = {
50+ let balanceUSDN = valueOrErrorMessage(getInteger(WavesUsdnPool, "B_asset_balance"), "Empty B_asset_balance")
51+ let balanceWAVES = valueOrErrorMessage(getInteger(WavesUsdnPool, "A_asset_balance"), "Empty A_asset_balance")
52+ let feeInWAVES = fraction(feeInUSDN, balanceWAVES, balanceUSDN)
53+ (feeInWAVES + blockchainFee)
54+ }
55+
56+
57+func isTransactionApproved (txStr) = {
58+ let admin1Signed = if (valueOrElse(getBoolean(admin1, "txStr"), false))
59+ then 1
60+ else 0
61+ let admin2Signed = if (valueOrElse(getBoolean(admin2, "txStr"), false))
62+ then 1
63+ else 0
64+ let admin3Signed = if (valueOrElse(getBoolean(admin3, "txStr"), false))
65+ then 1
66+ else 0
67+ (((admin1Signed + admin2Signed) + admin3Signed) >= 2)
68+ }
69+
70+
71+@Callable(i)
72+func init () = if (if (isDefined(getString(this, "is_dapp_active")))
73+ then true
74+ else isDefined(getInteger(this, "overall_balance")))
75+ then throw("Already initialized")
76+ else [IntegerEntry("overall_balance", 0), BooleanEntry("is_dapp_active", true)]
77+
78+
79+
80+@Callable(i)
81+func updateAutomateStatus (automate,status) = if (!(if (isProtocolActive)
82+ then isDappActive
83+ else false))
84+ then throw("Protol stopped by admin")
85+ else if (!(containsElement(consumers, toBase58String(i.caller.bytes))))
86+ then throw("Only admin can call this function")
87+ else [BooleanEntry(automate, status)]
88+
89+
90+
91+@Callable(i)
92+func extractFee (user,isFeeExtract) = if (!(if (isProtocolActive)
93+ then isDappActive
94+ else false))
95+ then throw("Protol stopped by admin")
96+ else {
97+ let isAutomateActive = valueOrErrorMessage(getBoolean(this, toString(i.caller)), ("Empty key i.caller: " + toString(i.caller)))
98+ if (!(isAutomateActive))
99+ then throw("This automate is inactive")
100+ else {
101+ let protocolFee = if (isFeeExtract)
102+ then calcWavesProtocolFee()
103+ else 0
104+ let userBalance = valueOrErrorMessage(getInteger(this, (user + keyBalance)), (("Empty key user + keyBalance: " + user) + keyBalance))
105+ let newUserBalance = (userBalance - protocolFee)
106+ let newOrverallBalance = (orverallBalance - protocolFee)
107+ if ((0 > newUserBalance))
108+ then throw(((("Insufficient new balance:" + toString(newUserBalance)) + " for user ") + user))
109+ else [IntegerEntry((user + keyBalance), newUserBalance), IntegerEntry(keyOverallBalance, newOrverallBalance)]
110+ }
111+ }
112+
113+
114+
115+@Callable(i)
116+func replenishBalance (userToReplenish) = if (!(if (isProtocolActive)
117+ then isDappActive
118+ else false))
119+ then throw("Protol stopped by admin")
120+ else {
121+ let userToReplenishAddress = valueOrErrorMessage(addressFromString(userToReplenish), "Argument must be base58 string")
122+ let $t045614636 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
123+ let pmtAmount = $t045614636._1
124+ let pmtAssetId = $t045614636._2
125+ if ((pmtAssetId != unit))
126+ then throw("Only WAVES available for replenishment")
127+ else {
128+ let userToReplenishBalance = getUserBalance(userToReplenish)
129+ let newUserBalance = (userToReplenishBalance + pmtAmount)
130+ let newOrverallBalance = (orverallBalance + pmtAmount)
131+[IntegerEntry((toBase58String(userToReplenishAddress.bytes) + keyBalance), newUserBalance), IntegerEntry(keyOverallBalance, newOrverallBalance)]
132+ }
133+ }
134+
135+
136+
137+@Callable(i)
138+func withdraw (withdrawAmt) = if (!(if (isProtocolActive)
139+ then isDappActive
140+ else false))
141+ then throw("Protol stopped by admin")
142+ else {
143+ let callerStr = toString(i.caller)
144+ let callerBalance = getUserBalance(callerStr)
145+ let newCallerBalance = (callerBalance - withdrawAmt)
146+ let newOrverallBalance = (orverallBalance - withdrawAmt)
147+ if ((withdrawAmt > callerBalance))
148+ then throw("withdrawAmt > callerBalance")
149+ else [IntegerEntry((callerStr + keyBalance), newCallerBalance), IntegerEntry(keyOverallBalance, newOrverallBalance), ScriptTransfer(i.caller, withdrawAmt, unit)]
150+ }
151+
152+
153+
154+@Callable(i)
155+func incomeProtocolWithdraw (addresForSendingIncome) = if (!(if (isProtocolActive)
156+ then isDappActive
157+ else false))
158+ then throw("Protol stopped by admin")
159+ else if (!(isTransactionApproved(toBase58String(i.transactionId))))
160+ then throw("Transaction id not approved by admins")
161+ else {
162+ let income = (wavesBalance(this).available - orverallBalance)
163+ if ((0 >= income))
164+ then throw("income <= 0 ")
165+ else [ScriptTransfer(addressFromStringValue(addresForSendingIncome), income, unit)]
166+ }
167+
168+
169+
170+@Callable(i)
171+func shutdownDapp () = if (!(isDappActive))
172+ then throw("Protol stopped by admin")
173+ else if (if (!(containsElement([admin1, admin2, admin3], i.caller)))
174+ then !(containsElement(consumers, toBase58String(i.caller.bytes)))
175+ else false)
176+ then throw("Only admin can call this function")
177+ else [BooleanEntry("is_dapp_active", false)]
178+
179+
180+@Verifier(tx)
181+func verify () = if (!(isTransactionApproved(toBase58String(tx.id))))
182+ then throw("Transaction id not approved by admins")
183+ else true
184+

github/deemru/w8io/026f985 
18.40 ms