tx · 6F7VqUgCkev9UhUcHwPWnxSrEQdt3oDmMHQxKDTcSjD3

3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi:  -0.01400000 Waves

2021.03.24 17:32 [2516582] smart account 3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi > SELF 0.00000000 Waves

{ "type": 13, "id": "6F7VqUgCkev9UhUcHwPWnxSrEQdt3oDmMHQxKDTcSjD3", "fee": 1400000, "feeAssetId": null, "timestamp": 1616596266555, "version": 1, "sender": "3PJ7RB5CC3Bnn44RNR2hceZ6wKsULnMSxPi", "senderPublicKey": "G5ztBKfbizrqVQWMZknsgbG2HS91eJ7QgHh7X3AznjoW", "proofs": [ "5iUnS6oe5WdUpUr4NAuHQtpGk1Egomi3cM5X8u7WRPMVgHJmmw8mXiPDAX4j2Jzj4KjGpnD5U5yp9KJEwLz5tJvJ", "4qpfRs477xUhsgHPrvDbrmRReCzHfAL4teYyuXcJ4AULNs8qmhFTgQSLfEQZEh5ixdAgpPzdU14dpir7UoNPqrtK" ], "script": "base64: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AwkAAGYAAAACAAAAAAAAAAABBQAAAAZhbW91bnQFAAAAA25pbAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAlyZWNpcGllbnQFAAAABmFtb3VudAUAAAAHYXNzZXRJZAUAAAADbmlsAQAAAA9haXJkcm9wVHJhbnNmZXIAAAACAAAACXJlY2lwaWVudAAAAAdhc3NldElkAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAAROAAAAAgUAAAAJcG9ydGZvbGlvBQAAAAlvdXJBc3NldHMFAAAAB2Fzc2V0SWQJAAACAAAAAQkABLkAAAACCQAETAAAAAICAAAAE0FpcmRyb3BXYXNoZXIgKCkgPT4JAARMAAAAAgIAAAAbUGxlYXNlIHJlbW92ZSB0aGUgYXNzZXQgSUQ6CQAETAAAAAIJAAJYAAAAAQUAAAAHYXNzZXRJZAUAAAADbmlsAgAAAAEgAwkAAAAAAAACBQAAAAdhc3NldElkAQAAAAAFAAAAA25pbAkBAAAADnNjcmlwdFRyYW5zZmVyAAAAAwUAAAAJcmVjaXBpZW50CQAD8AAAAAIFAAAABHRoaXMFAAAAB2Fzc2V0SWQFAAAAB2Fzc2V0SWQBAAAAB2RlcG9zaXQAAAACAAAAAWkAAAAKdXNkeEFtb3VudAQAAAAJdGhpc1ByaWNlCQEAAAAKcmVjaXByb2NhbAAAAAIFAAAAD3VzZHhBY3R1YWxQcmljZQUAAAAHcG93TXVsdAQAAAAMdGhpc0ZlZVByaWNlCQAAawAAAAMFAAAACXRoaXNQcmljZQUAAAAIbWZlZVBlcmMFAAAAB3BlcmNlbnQEAAAADXJhdHNPdXRBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAACnVzZHhBbW91bnQFAAAACXRoaXNQcmljZQUAAAAHcG93TXVsdAQAAAANcmF0c0ZlZUFtb3VudAkBAAAADmZyYWN0aW9uSGFsZlVwAAAAAwUAAAAKdXNkeEFtb3VudAUAAAAMdGhpc0ZlZVByaWNlBQAAAAdwb3dNdWx0BAAAAA11c2R4RmVlQW1vdW50CQEAAAAOZnJhY3Rpb25IYWxmVXAAAAADBQAAAAp1c2R4QW1vdW50BQAAAAx1c2R4RmVlUHJpY2UFAAAAD3VzZHhBY3R1YWxQcmljZQkABE4AAAACCQAETgAAAAIJAQAAAA5zY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgkAAGUAAAACBQAAAA1yYXRzT3V0QW1vdW50BQAAAA1yYXRzRmVlQW1vdW50BQAAAAlyYXRzQXNzZXQJAQAAAA5zY3JpcHRUcmFuc2ZlcgAAAAMFAAAABWFkbWluBQAAAA1yYXRzRmVlQW1vdW50BQAAAAlyYXRzQXNzZXQJAQAAAA5wZmVlRnVuZHNFbnRyeQAAAAEJAABkAAAAAgUAAAAJcGZlZUZ1bmRzBQAAAA11c2R4RmVlQW1vdW50AQAAAAh3aXRoZHJhdwAAAAIAAAABaQAAAApyYXRzQW1vdW50BAAAAA11c2R4T3V0QW1vdW50CQEAAAAOZnJhY3Rpb25IYWxmVXAAAAADBQAAAApyYXRzQW1vdW50BQAAAAl1c2R4UHJpY2UFAAAAB3Bvd011bHQEAAAADXVzZHhGZWVBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAACnJhdHNBbW91bnQFAAAADHVzZHhGZWVQcmljZQUAAAAHcG93TXVsdAQAAAANdXNkeFN1YkFtb3VudAUAAAAJcGZlZUZ1bmRzBAAAAAskdDA4MTg5ODMwNAMJAABmAAAAAgUAAAAJdXNkY0Z1bmRzBQAAAAl1c2R0RnVuZHMJAAUUAAAAAgUAAAAJdXNkdEZ1bmRzBQAAAAl1c2R0QXNzZXQJAAUUAAAAAgUAAAAJdXNkY0Z1bmRzBQAAAAl1c2RjQXNzZXQEAAAACXRoaXNGdW5kcwgFAAAACyR0MDgxODk4MzA0AAAAAl8xBAAAAAl0aGlzQXNzZXQIBQAAAAskdDA4MTg5ODMwNAAAAAJfMgQAAAALJHQwODMwNzg0MjQDCQAAZgAAAAIFAAAACXVzZGNGdW5kcwUAAAAJdXNkdEZ1bmRzCQAFFAAAAAIFAAAACXVzZGNGdW5kcwUAAAAJdXNkY0Fzc2V0CQAFFAAAAAIFAAAACXVzZHRGdW5kcwUAAAAJdXNkdEFzc2V0BAAAAApvdGhlckZ1bmRzCAUAAAALJHQwODMwNzg0MjQAAAACXzEEAAAACm90aGVyQXNzZXQIBQAAAAskdDA4MzA3ODQyNAAAAAJfMgQAAAAJdGhpc1ByaWNlCQAAawAAAAMFAAAACXVzZHhQcmljZQUAAAAJdGhpc0Z1bmRzBQAAAAl1c2R4RnVuZHMEAAAADHRoaXNGZWVQcmljZQkAAGsAAAADBQAAAAx1c2R4RmVlUHJpY2UFAAAACXRoaXNGdW5kcwUAAAAJdXNkeEZ1bmRzBAAAAA10aGlzT3V0QW1vdW50CQEAAAAOZnJhY3Rpb25IYWxmVXAAAAADBQAAAApyYXRzQW1vdW50BQAAAAl0aGlzUHJpY2UFAAAAB3Bvd011bHQEAAAADXRoaXNGZWVBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAACnJhdHNBbW91bnQFAAAADHRoaXNGZWVQcmljZQUAAAAHcG93TXVsdAQAAAANdGhpc1N1YkFtb3VudAkBAAAADmZyYWN0aW9uSGFsZlVwAAAAAwUAAAANdXNkeFN1YkFtb3VudAUAAAAJdGhpc0Z1bmRzBQAAAAl1c2R4RnVuZHMEAAAADm90aGVyT3V0QW1vdW50CQAAZQAAAAIFAAAADXVzZHhPdXRBbW91bnQFAAAADXRoaXNPdXRBbW91bnQEAAAADm90aGVyRmVlQW1vdW50CQAAZQAAAAIFAAAADXVzZHhGZWVBbW91bnQFAAAADXRoaXNGZWVBbW91bnQEAAAADm90aGVyU3ViQW1vdW50CQAAZQAAAAIFAAAADXVzZHhTdWJBbW91bnQFAAAADXRoaXNTdWJBbW91bnQJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAADnNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQAAZQAAAAIFAAAADXRoaXNPdXRBbW91bnQFAAAADXRoaXNGZWVBbW91bnQFAAAACXRoaXNBc3NldAkBAAAADnNjcmlwdFRyYW5zZmVyAAAAAwUAAAAFYWRtaW4JAABlAAAAAgUAAAANdGhpc0ZlZUFtb3VudAUAAAANdGhpc1N1YkFtb3VudAUAAAAJdGhpc0Fzc2V0CQEAAAAOc2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAABlAAAAAgUAAAAOb3RoZXJPdXRBbW91bnQFAAAADm90aGVyRmVlQW1vdW50BQAAAApvdGhlckFzc2V0CQEAAAAOc2NyaXB0VHJhbnNmZXIAAAADBQAAAAVhZG1pbgkAAGUAAAACBQAAAA5vdGhlckZlZUFtb3VudAUAAAAOb3RoZXJTdWJBbW91bnQFAAAACm90aGVyQXNzZXQJAQAAAA5wZmVlRnVuZHNFbnRyeQAAAAEJAQAAAA52YWx1ZU9yTWluaW11bQAAAAIJAABlAAAAAgUAAAAJcGZlZUZ1bmRzBQAAAA11c2R4RmVlQW1vdW50AAAAAAAAAAAAAQAAAAptYW5hZ2VtZW50AAAAAQAAAAFpBAAAAA1yYXRzRmVlQW1vdW50CQEAAAAOZnJhY3Rpb25IYWxmVXAAAAADBQAAAAlyYXRzRnVuZHMFAAAAB3BlcmNlbnQJAABlAAAAAgUAAAAHcGVyY2VudAUAAAAIbWZlZVBlcmMEAAAADXVzZHhGZWVBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAACXJhdHNGdW5kcwUAAAAMdXNkeEZlZVByaWNlBQAAAAdwb3dNdWx0BAAAAA11c2R4U3ViQW1vdW50BQAAAAlwZmVlRnVuZHMEAAAACyR0MDk1Njc5NjgyAwkAAGYAAAACBQAAAAl1c2RjRnVuZHMFAAAACXVzZHRGdW5kcwkABRQAAAACBQAAAAl1c2R0RnVuZHMFAAAACXVzZHRBc3NldAkABRQAAAACBQAAAAl1c2RjRnVuZHMFAAAACXVzZGNBc3NldAQAAAAJdGhpc0Z1bmRzCAUAAAALJHQwOTU2Nzk2ODIAAAACXzEEAAAACXRoaXNBc3NldAgFAAAACyR0MDk1Njc5NjgyAAAAAl8yBAAAAAskdDA5Njg1OTgwMgMJAABmAAAAAgUAAAAJdXNkY0Z1bmRzBQAAAAl1c2R0RnVuZHMJAAUUAAAAAgUAAAAJdXNkY0Z1bmRzBQAAAAl1c2RjQXNzZXQJAAUUAAAAAgUAAAAJdXNkdEZ1bmRzBQAAAAl1c2R0QXNzZXQEAAAACm90aGVyRnVuZHMIBQAAAAskdDA5Njg1OTgwMgAAAAJfMQQAAAAKb3RoZXJBc3NldAgFAAAACyR0MDk2ODU5ODAyAAAAAl8yBAAAAAx0aGlzRmVlUHJpY2UJAABrAAAAAwUAAAAMdXNkeEZlZVByaWNlBQAAAAl0aGlzRnVuZHMFAAAACXVzZHhGdW5kcwQAAAANdGhpc0ZlZUFtb3VudAkBAAAADmZyYWN0aW9uSGFsZlVwAAAAAwUAAAAJcmF0c0Z1bmRzBQAAAAx0aGlzRmVlUHJpY2UFAAAAB3Bvd011bHQEAAAADXRoaXNTdWJBbW91bnQJAQAAAA5mcmFjdGlvbkhhbGZVcAAAAAMFAAAADXVzZHhTdWJBbW91bnQFAAAACXRoaXNGdW5kcwUAAAAJdXNkeEZ1bmRzBAAAAA5vdGhlckZlZUFtb3VudAkAAGUAAAACBQAAAA11c2R4RmVlQW1vdW50BQAAAA10aGlzRmVlQW1vdW50BAAAAA5vdGhlclN1YkFtb3VudAkAAGUAAAACBQAAAA11c2R4U3ViQW1vdW50BQAAAA10aGlzU3ViQW1vdW50CQAETQAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAAA5zY3JpcHRUcmFuc2ZlcgAAAAMFAAAABWFkbWluBQAAAA1yYXRzRmVlQW1vdW50BQAAAAlyYXRzQXNzZXQJAQAAAA5zY3JpcHRUcmFuc2ZlcgAAAAMFAAAABWFkbWluCQAAZQAAAAIFAAAADXRoaXNGZWVBbW91bnQFAAAADXRoaXNTdWJBbW91bnQFAAAACXRoaXNBc3NldAkBAAAADnNjcmlwdFRyYW5zZmVyAAAAAwUAAAAFYWRtaW4JAABlAAAAAgUAAAAOb3RoZXJGZWVBbW91bnQFAAAADm90aGVyU3ViQW1vdW50BQAAAApvdGhlckFzc2V0CQEAAAAOcGZlZUZ1bmRzRW50cnkAAAABCQEAAAAOdmFsdWVPck1pbmltdW0AAAACBQAAAA11c2R4RmVlQW1vdW50BQAAAAlwZmVlRnVuZHMJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAl0ZWFtc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAABgAAAAFpAQAAAAxCYWxhbmNlU2hlZXQAAAAABAAAAAhkdXJhdGlvbgkAAGUAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAJb3BlbnN0YW1wBAAAAAhleHBvbmVudAkAAGsAAAADBQAAAAdkZWNNdWx0BQAAAAZhbm51YWwFAAAACGR1cmF0aW9uBAAAAAhncm9zc0FQWQkAAGUAAAACCQAA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AAlwb3J0Zm9saW8FAAAACW91ckFzc2V0cwgFAAAAAW8AAAARbWF0Y2hlckZlZUFzc2V0SWQJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAAROAAAAAgUAAAAJcG9ydGZvbGlvBQAAAAlvdXJBc3NldHMICAUAAAABbwAAAAlhc3NldFBhaXIAAAAKcHJpY2VBc3NldAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAAROAAAAAgUAAAAJcG9ydGZvbGlvBQAAAAlvdXJBc3NldHMICAUAAAABbwAAAAlhc3NldFBhaXIAAAALYW1vdW50QXNzZXQHBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPQnVyblRyYW5zYWN0aW9uBAAAAAFiBQAAAAckbWF0Y2gwAwUAAAAMaXNWYWxpZE93bmVyCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETgAAAAIFAAAACXBvcnRmb2xpbwUAAAAJb3VyQXNzZXRzCAUAAAABYgAAAAdhc3NldElkBwMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFkxlYXNlQ2FuY2VsVHJhbnNhY3Rpb24GCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAEExlYXNlVHJhbnNhY3Rpb24FAAAADGlzVmFsaWRPd25lcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAABdAUAAAAHJG1hdGNoMAMDBQAAAAxpc1ZhbGlkT3duZXIJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAAROAAAAAgUAAAAJcG9ydGZvbGlvBQAAAAlvdXJBc3NldHMIBQAAAAF0AAAAB2Fzc2V0SWQHCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETgAAAAIFAAAACXBvcnRmb2xpbwUAAAAJb3VyQXNzZXRzCAUAAAABdAAAAApmZWVBc3NldElkBwMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBgkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9EYXRhVHJhbnNhY3Rpb24DBQAAAAxpc1ZhbGlkQWRtaW4FAAAAEWlzVmFsaWRHdWFyYW50b3JzBwffMFsW", "chainId": 87, "height": 2516582, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HgkT2UzuaomJ7fDnsF5qC17hURfbsUh8ajBjBwPseLg Next: Ef9NH26RJSbveU8K5XA58AMD6y3CiYKKbfqyTSCUKZdi Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let version = "1.12.0-prefinal_20210324"
4+let version = "1.12.1-prefinal_20210324"
55
66 let cent = 100
77
9494 else val
9595
9696
97-func valueOrMaximum (val,maxVal) = if ((val > maxVal))
98- then maxVal
99- else val
100-
101-
10297 func fractionHalfUp (val,num,den) = {
10398 func round (xVal) = (xVal + (if ((xVal > 0))
10499 then 1
181176 else scriptTransfer(recipient, assetBalance(this, assetId), assetId)
182177
183178
184-func deposit (i,usdxAmount,isInvestor) = {
179+func deposit (i,usdxAmount) = {
185180 let thisPrice = reciprocal(usdxActualPrice, powMult)
186181 let thisFeePrice = fraction(thisPrice, mfeePerc, percent)
187182 let ratsOutAmount = fractionHalfUp(usdxAmount, thisPrice, powMult)
188183 let ratsFeeAmount = fractionHalfUp(usdxAmount, thisFeePrice, powMult)
189184 let usdxFeeAmount = fractionHalfUp(usdxAmount, usdxFeePrice, usdxActualPrice)
190- if (!(isInvestor))
191- then (scriptTransfer(admin, ratsFeeAmount, ratsAsset) ++ pfeeFundsEntry(usdxFeeAmount))
192- else ((scriptTransfer(i.caller, (ratsOutAmount - ratsFeeAmount), ratsAsset) ++ scriptTransfer(admin, ratsFeeAmount, ratsAsset)) ++ pfeeFundsEntry((pfeeFunds + usdxFeeAmount)))
185+ ((scriptTransfer(i.caller, (ratsOutAmount - ratsFeeAmount), ratsAsset) ++ scriptTransfer(admin, ratsFeeAmount, ratsAsset)) ++ pfeeFundsEntry((pfeeFunds + usdxFeeAmount)))
193186 }
194187
195188
196-func withdraw (i,ratsAmount,isInvestor) = {
189+func withdraw (i,ratsAmount) = {
197190 let usdxOutAmount = fractionHalfUp(ratsAmount, usdxPrice, powMult)
198191 let usdxFeeAmount = fractionHalfUp(ratsAmount, usdxFeePrice, powMult)
199192 let usdxSubAmount = pfeeFunds
200- let $t085198634 = if ((usdcFunds > usdtFunds))
193+ let $t081898304 = if ((usdcFunds > usdtFunds))
201194 then $Tuple2(usdtFunds, usdtAsset)
202195 else $Tuple2(usdcFunds, usdcAsset)
203- let thisFunds = $t085198634._1
204- let thisAsset = $t085198634._2
205- let $t086378754 = if ((usdcFunds > usdtFunds))
196+ let thisFunds = $t081898304._1
197+ let thisAsset = $t081898304._2
198+ let $t083078424 = if ((usdcFunds > usdtFunds))
206199 then $Tuple2(usdcFunds, usdcAsset)
207200 else $Tuple2(usdtFunds, usdtAsset)
208- let otherFunds = $t086378754._1
209- let otherAsset = $t086378754._2
201+ let otherFunds = $t083078424._1
202+ let otherAsset = $t083078424._2
210203 let thisPrice = fraction(usdxPrice, thisFunds, usdxFunds)
211204 let thisFeePrice = fraction(usdxFeePrice, thisFunds, usdxFunds)
212205 let thisOutAmount = fractionHalfUp(ratsAmount, thisPrice, powMult)
215208 let otherOutAmount = (usdxOutAmount - thisOutAmount)
216209 let otherFeeAmount = (usdxFeeAmount - thisFeeAmount)
217210 let otherSubAmount = (usdxSubAmount - thisSubAmount)
218- if (!(isInvestor))
219- then ((scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(usdxFeeAmount))
220- else ((((scriptTransfer(i.caller, (thisOutAmount - thisFeeAmount), thisAsset) ++ scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset)) ++ scriptTransfer(i.caller, (otherOutAmount - otherFeeAmount), otherAsset)) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(valueOrMinimum((pfeeFunds - usdxFeeAmount), 0)))
211+ ((((scriptTransfer(i.caller, (thisOutAmount - thisFeeAmount), thisAsset) ++ scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset)) ++ scriptTransfer(i.caller, (otherOutAmount - otherFeeAmount), otherAsset)) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(valueOrMinimum((pfeeFunds - usdxFeeAmount), 0)))
212+ }
213+
214+
215+func management (i) = {
216+ let ratsFeeAmount = fractionHalfUp(ratsFunds, percent, (percent - mfeePerc))
217+ let usdxFeeAmount = fractionHalfUp(ratsFunds, usdxFeePrice, powMult)
218+ let usdxSubAmount = pfeeFunds
219+ let $t095679682 = if ((usdcFunds > usdtFunds))
220+ then $Tuple2(usdtFunds, usdtAsset)
221+ else $Tuple2(usdcFunds, usdcAsset)
222+ let thisFunds = $t095679682._1
223+ let thisAsset = $t095679682._2
224+ let $t096859802 = if ((usdcFunds > usdtFunds))
225+ then $Tuple2(usdcFunds, usdcAsset)
226+ else $Tuple2(usdtFunds, usdtAsset)
227+ let otherFunds = $t096859802._1
228+ let otherAsset = $t096859802._2
229+ let thisFeePrice = fraction(usdxFeePrice, thisFunds, usdxFunds)
230+ let thisFeeAmount = fractionHalfUp(ratsFunds, thisFeePrice, powMult)
231+ let thisSubAmount = fractionHalfUp(usdxSubAmount, thisFunds, usdxFunds)
232+ let otherFeeAmount = (usdxFeeAmount - thisFeeAmount)
233+ let otherSubAmount = (usdxSubAmount - thisSubAmount)
234+ ((((scriptTransfer(admin, ratsFeeAmount, ratsAsset) ++ scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset)) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(valueOrMinimum(usdxFeeAmount, pfeeFunds))) :+ IntegerEntry("teamstamp", lastBlock.timestamp))
221235 }
222236
223237
239253 let isAdmin = if ((i.caller == this))
240254 then true
241255 else (i.callerPublicKey == adminPublicKey)
242- let $t01101111062 = getAttachment(i.payments, 0)
243- let asset0 = $t01101111062._1
244- let amount0 = $t01101111062._2
245- let $t01106511116 = getAttachment(i.payments, 1)
246- let asset1 = $t01106511116._1
247- let amount1 = $t01106511116._2
256+ let $t01147611527 = getAttachment(i.payments, 0)
257+ let asset0 = $t01147611527._1
258+ let amount0 = $t01147611527._2
259+ let $t01153011581 = getAttachment(i.payments, 1)
260+ let asset1 = $t01153011581._1
261+ let amount1 = $t01153011581._2
248262 let maxAmount = valueOrMinimum((maxFunds - usdxFunds), (100 * usdMult))
249263 let usdxAmount = ((if (containsElement(portfolio, asset0))
250264 then amount0
273287 then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets.", "Total amount:", "from", toAmountString(minAmount, usdMult, true), "to", toAmountString(maxAmount, usdMult, true), "(USDT + USDC)"], " "))
274288 else if ((minTimeout > etaTimer))
275289 then throw(makeString(["DepositFunds () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((minTimeout - etaTimer)), "min."], " "))
276- else ((deposit(i, usdxAmount, true) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
290+ else ((deposit(i, usdxAmount) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
277291 then [DeleteEntry("suspended")]
278292 else nil))
279293 }
285299 let isAdmin = if ((i.caller == this))
286300 then true
287301 else (i.callerPublicKey == adminPublicKey)
288- let $t01285812909 = getAttachment(i.payments, 0)
289- let asset0 = $t01285812909._1
290- let amount0 = $t01285812909._2
291- let $t01291212963 = getAttachment(i.payments, 1)
292- let asset1 = $t01291212963._1
293- let amount1 = $t01291212963._2
302+ let $t01331713368 = getAttachment(i.payments, 0)
303+ let asset0 = $t01331713368._1
304+ let amount0 = $t01331713368._2
305+ let $t01337113422 = getAttachment(i.payments, 1)
306+ let asset1 = $t01337113422._1
307+ let amount1 = $t01337113422._2
294308 let maxAmount = valueOrMinimum((ratsFunds - minAmount), 0)
295309 let ratsAmount = ((if ((asset0 == ratsAsset))
296310 then amount0
315329 then throw(makeString(["WithdrawFunds () =>", "Please attach Ratatouille (RATS) asset.", "Max. amount:", toAmountString(maxAmount, usdMult, false), "RATS"], " "))
316330 else if ((minTimeout > etaTimer))
317331 then throw(makeString(["DepositFunds () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((minTimeout - etaTimer)), "min."], " "))
318- else ((withdraw(i, ratsAmount, true) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
332+ else ((withdraw(i, ratsAmount) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
319333 then [DeleteEntry("suspended")]
320334 else nil))
321335 }
333347 then throw(makeString(["TakeCommission () =>", "Don't attach payment when calling this function ..."], " "))
334348 else if ((minTimeout > etaTimer))
335349 then throw(makeString(["TakeCommission () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((minTimeout - etaTimer)), "min."], " "))
336- else ((((withdraw(i, ratsFunds, false) ++ deposit(i, (usdxFunds + pfeeFunds), false)) :+ IntegerEntry("teamstamp", lastBlock.timestamp)) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
350+ else ((management(i) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
337351 then [DeleteEntry("suspended")]
338352 else nil))
339353 }
341355
342356
343357 @Callable(i)
344-func AirdropWasher (air0,air1,air2,air3,air4,air5,air6,air7,air8,air9) = {
358+func AirdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = {
345359 let isAdmin = if ((i.caller == this))
346360 then true
347361 else (i.callerPublicKey == adminPublicKey)
348362 let isManager = if (isAdmin)
349363 then true
350364 else containsElement(guarantors, i.callerPublicKey)
365+ let idBytes = (((((((((id0 + id1) + id2) + id3) + id4) + id5) + id6) + id7) + id8) + id9)
351366 let recipient = Address(valueOrElse(getBinary(this, "washbin"), admin.bytes))
352- let bulkBytes = (((((((((air0 + air1) + air2) + air3) + air4) + air5) + air6) + air7) + air8) + air9)
353367 if (!(isManager))
354368 then throw(makeString(["AirdropWasher () =>", "This action can only be performed by authorized persons!"], " "))
355369 else if ((size(i.payments) > 0))
356370 then throw(makeString(["AirdropWasher () =>", "Don't attach payment when calling this function ..."], " "))
357- else if ((bulkBytes == base58''))
371+ else if ((idBytes == base58''))
358372 then throw(makeString(["AirdropWasher () =>", "Please enter asset IDs in the fields below ..."], " "))
359- else (((((((((airdropTransfer(recipient, air0) ++ airdropTransfer(recipient, air1)) ++ airdropTransfer(recipient, air2)) ++ airdropTransfer(recipient, air3)) ++ airdropTransfer(recipient, air4)) ++ airdropTransfer(recipient, air5)) ++ airdropTransfer(recipient, air6)) ++ airdropTransfer(recipient, air7)) ++ airdropTransfer(recipient, air8)) ++ airdropTransfer(recipient, air9))
373+ else (((((((((airdropTransfer(recipient, id0) ++ airdropTransfer(recipient, id1)) ++ airdropTransfer(recipient, id2)) ++ airdropTransfer(recipient, id3)) ++ airdropTransfer(recipient, id4)) ++ airdropTransfer(recipient, id5)) ++ airdropTransfer(recipient, id6)) ++ airdropTransfer(recipient, id7)) ++ airdropTransfer(recipient, id8)) ++ airdropTransfer(recipient, id9))
360374 }
361375
362376
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let version = "1.12.0-prefinal_20210324"
4+let version = "1.12.1-prefinal_20210324"
55
66 let cent = 100
77
88 let msec = 1000
99
1010 let percent = (100 * 10000)
1111
1212 let usdMult = 1000000
1313
1414 let decMult = 100000000
1515
1616 let powMult = (decMult * decMult)
1717
1818 let mfeePerc = ((2 * percent) / 400)
1919
2020 let pfeePerc = ((20 * percent) / 100)
2121
2222 let maxFunds = max([0, valueOrElse(getInteger(this, "maxfunds"), (1000 * usdMult))])
2323
2424 let minAmount = max([usdMult, valueOrElse(getInteger(this, "minamount"), (1 * usdMult))])
2525
2626 let annual = (31556952 * msec)
2727
2828 let openstamp = (1609573796 * msec)
2929
3030 let timestamp = valueOrElse(getInteger(this, "timestamp"), openstamp)
3131
3232 let maxTimeout = (86400 * msec)
3333
3434 let minTimeout = max([0, valueOrElse(getInteger(this, "mintimeout"), (60 * msec))])
3535
3636 let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
3737
3838 let traderPublicKey = base58'G5ztBKfbizrqVQWMZknsgbG2HS91eJ7QgHh7X3AznjoW'
3939
4040 let matcherPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5'
4141
4242 let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58'')] :+ base58'')
4343
4444 let actualSize = value(indexOf(guarantors, base58''))
4545
4646 let minSignatures = ((actualSize / 2) + (actualSize % 2))
4747
4848 let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
4949
5050 let usdcAsset = base58'6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ'
5151
5252 let ratsAsset = base58'Z7817F7hnbWYsVHykjPtn8sUjyuLLf8NPofdveb8CMD'
5353
5454 let portfolio = [usdtAsset, usdcAsset]
5555
5656 let ourAssets = [ratsAsset]
5757
5858 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
5959
6060 let fcold = Address(base58'3P8v4dR4UD8nGeLQmorw6BmCo424GvGBXCA')
6161
6262 let usdtFunds = assetBalance(this, usdtAsset)
6363
6464 let usdcFunds = assetBalance(this, usdcAsset)
6565
6666 let ratsFunds = (value(assetInfo(ratsAsset)).quantity - (assetBalance(this, ratsAsset) + assetBalance(fcold, ratsAsset)))
6767
6868 let usdxFunds = (usdtFunds + usdcFunds)
6969
7070 let pfeeFunds = valueOrElse(getInteger(this, "pfeefunds"), (0 * usdMult))
7171
7272 let usdxPrice = fraction(powMult, (usdxFunds + pfeeFunds), ratsFunds)
7373
7474 let usdxFeePrice = fraction((usdxPrice - powMult), pfeePerc, percent)
7575
7676 let usdxActualPrice = (usdxPrice - usdxFeePrice)
7777
7878 let etaTimer = (lastBlock.timestamp - timestamp)
7979
8080 let suspended = valueOrElse(getBoolean(this, "suspended"), false)
8181
8282 let lockStatus = if (suspended)
8383 then (maxTimeout > etaTimer)
8484 else false
8585
8686 func decimals (mult) = (size(toString(mult)) - 1)
8787
8888
8989 func reciprocal (val,mult) = fraction(mult, mult, val)
9090
9191
9292 func valueOrMinimum (val,minVal) = if ((minVal > val))
9393 then minVal
9494 else val
9595
9696
97-func valueOrMaximum (val,maxVal) = if ((val > maxVal))
98- then maxVal
99- else val
100-
101-
10297 func fractionHalfUp (val,num,den) = {
10398 func round (xVal) = (xVal + (if ((xVal > 0))
10499 then 1
105100 else 0))
106101
107102 (round(fraction((2 * val), num, den)) / 2)
108103 }
109104
110105
111106 func fractionCeiling (val,num,den) = {
112107 func round (xVal) = (xVal + (if (((xVal % 10) == 0))
113108 then 0
114109 else 10))
115110
116111 (round(fraction((10 * val), num, den)) / 10)
117112 }
118113
119114
120115 func getAttachment (payments,idx) = if ((idx >= size(payments)))
121116 then $Tuple2(base58'', 0)
122117 else $Tuple2(payments[idx].assetId, payments[idx].amount)
123118
124119
125120 func toMinuteString (val) = toString((((val - 1) / (60 * msec)) + 1))
126121
127122
128123 func toFloatBytes (val,sep,dec) = {
129124 func separate (b0) = {
130125 let b1 = dropRightBytes(b0, 3)
131126 let b2 = dropRightBytes(b1, 3)
132127 let b3 = dropRightBytes(b2, 3)
133128 let b4 = dropRightBytes(b3, 3)
134129 ((((((((takeRightBytes(b4, 3) + (if ((b4 != base58''))
135130 then sep
136131 else base58'')) + takeRightBytes(b3, 3)) + (if ((b3 != base58''))
137132 then sep
138133 else base58'')) + takeRightBytes(b2, 3)) + (if ((b2 != base58''))
139134 then sep
140135 else base58'')) + takeRightBytes(b1, 3)) + (if ((b1 != base58''))
141136 then sep
142137 else base58'')) + takeRightBytes(b0, 3))
143138 }
144139
145140 let bVal = toBytes(toString(val))
146141 ((separate(dropRightBytes(bVal, dec)) + base58'o') + takeRightBytes(bVal, dec))
147142 }
148143
149144
150145 func toPriceString (val,mult) = toUtf8String(if ((0 > val))
151146 then throw("Unexpected error: Negative values are not allowed!")
152147 else toFloatBytes(fractionCeiling(val, usdMult, mult), base58'm', 6))
153148
154149
155150 func toAmountString (val,mult,isDollar) = toUtf8String(if ((0 > val))
156151 then throw("Unexpected error: Negative values are not allowed!")
157152 else ((if (isDollar)
158153 then base58'd'
159154 else base58'') + toFloatBytes(fraction(val, cent, mult), base58'm', 2)))
160155
161156
162157 func toPercentString (val,mult) = toUtf8String(if ((0 > val))
163158 then throw("Unexpected error: Negative values are not allowed!")
164159 else (toFloatBytes(fraction(val, (100 * cent), mult), base58'', 2) + base58'e'))
165160
166161
167162 func pfeeFundsEntry (amount) = if ((amount == pfeeFunds))
168163 then nil
169164 else [IntegerEntry("pfeefunds", amount)]
170165
171166
172167 func scriptTransfer (recipient,amount,assetId) = if ((1 > amount))
173168 then nil
174169 else [ScriptTransfer(recipient, amount, assetId)]
175170
176171
177172 func airdropTransfer (recipient,assetId) = if (containsElement((portfolio ++ ourAssets), assetId))
178173 then throw(makeString(["AirdropWasher () =>", "Please remove the asset ID:", toBase58String(assetId)], " "))
179174 else if ((assetId == base58''))
180175 then nil
181176 else scriptTransfer(recipient, assetBalance(this, assetId), assetId)
182177
183178
184-func deposit (i,usdxAmount,isInvestor) = {
179+func deposit (i,usdxAmount) = {
185180 let thisPrice = reciprocal(usdxActualPrice, powMult)
186181 let thisFeePrice = fraction(thisPrice, mfeePerc, percent)
187182 let ratsOutAmount = fractionHalfUp(usdxAmount, thisPrice, powMult)
188183 let ratsFeeAmount = fractionHalfUp(usdxAmount, thisFeePrice, powMult)
189184 let usdxFeeAmount = fractionHalfUp(usdxAmount, usdxFeePrice, usdxActualPrice)
190- if (!(isInvestor))
191- then (scriptTransfer(admin, ratsFeeAmount, ratsAsset) ++ pfeeFundsEntry(usdxFeeAmount))
192- else ((scriptTransfer(i.caller, (ratsOutAmount - ratsFeeAmount), ratsAsset) ++ scriptTransfer(admin, ratsFeeAmount, ratsAsset)) ++ pfeeFundsEntry((pfeeFunds + usdxFeeAmount)))
185+ ((scriptTransfer(i.caller, (ratsOutAmount - ratsFeeAmount), ratsAsset) ++ scriptTransfer(admin, ratsFeeAmount, ratsAsset)) ++ pfeeFundsEntry((pfeeFunds + usdxFeeAmount)))
193186 }
194187
195188
196-func withdraw (i,ratsAmount,isInvestor) = {
189+func withdraw (i,ratsAmount) = {
197190 let usdxOutAmount = fractionHalfUp(ratsAmount, usdxPrice, powMult)
198191 let usdxFeeAmount = fractionHalfUp(ratsAmount, usdxFeePrice, powMult)
199192 let usdxSubAmount = pfeeFunds
200- let $t085198634 = if ((usdcFunds > usdtFunds))
193+ let $t081898304 = if ((usdcFunds > usdtFunds))
201194 then $Tuple2(usdtFunds, usdtAsset)
202195 else $Tuple2(usdcFunds, usdcAsset)
203- let thisFunds = $t085198634._1
204- let thisAsset = $t085198634._2
205- let $t086378754 = if ((usdcFunds > usdtFunds))
196+ let thisFunds = $t081898304._1
197+ let thisAsset = $t081898304._2
198+ let $t083078424 = if ((usdcFunds > usdtFunds))
206199 then $Tuple2(usdcFunds, usdcAsset)
207200 else $Tuple2(usdtFunds, usdtAsset)
208- let otherFunds = $t086378754._1
209- let otherAsset = $t086378754._2
201+ let otherFunds = $t083078424._1
202+ let otherAsset = $t083078424._2
210203 let thisPrice = fraction(usdxPrice, thisFunds, usdxFunds)
211204 let thisFeePrice = fraction(usdxFeePrice, thisFunds, usdxFunds)
212205 let thisOutAmount = fractionHalfUp(ratsAmount, thisPrice, powMult)
213206 let thisFeeAmount = fractionHalfUp(ratsAmount, thisFeePrice, powMult)
214207 let thisSubAmount = fractionHalfUp(usdxSubAmount, thisFunds, usdxFunds)
215208 let otherOutAmount = (usdxOutAmount - thisOutAmount)
216209 let otherFeeAmount = (usdxFeeAmount - thisFeeAmount)
217210 let otherSubAmount = (usdxSubAmount - thisSubAmount)
218- if (!(isInvestor))
219- then ((scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(usdxFeeAmount))
220- else ((((scriptTransfer(i.caller, (thisOutAmount - thisFeeAmount), thisAsset) ++ scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset)) ++ scriptTransfer(i.caller, (otherOutAmount - otherFeeAmount), otherAsset)) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(valueOrMinimum((pfeeFunds - usdxFeeAmount), 0)))
211+ ((((scriptTransfer(i.caller, (thisOutAmount - thisFeeAmount), thisAsset) ++ scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset)) ++ scriptTransfer(i.caller, (otherOutAmount - otherFeeAmount), otherAsset)) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(valueOrMinimum((pfeeFunds - usdxFeeAmount), 0)))
212+ }
213+
214+
215+func management (i) = {
216+ let ratsFeeAmount = fractionHalfUp(ratsFunds, percent, (percent - mfeePerc))
217+ let usdxFeeAmount = fractionHalfUp(ratsFunds, usdxFeePrice, powMult)
218+ let usdxSubAmount = pfeeFunds
219+ let $t095679682 = if ((usdcFunds > usdtFunds))
220+ then $Tuple2(usdtFunds, usdtAsset)
221+ else $Tuple2(usdcFunds, usdcAsset)
222+ let thisFunds = $t095679682._1
223+ let thisAsset = $t095679682._2
224+ let $t096859802 = if ((usdcFunds > usdtFunds))
225+ then $Tuple2(usdcFunds, usdcAsset)
226+ else $Tuple2(usdtFunds, usdtAsset)
227+ let otherFunds = $t096859802._1
228+ let otherAsset = $t096859802._2
229+ let thisFeePrice = fraction(usdxFeePrice, thisFunds, usdxFunds)
230+ let thisFeeAmount = fractionHalfUp(ratsFunds, thisFeePrice, powMult)
231+ let thisSubAmount = fractionHalfUp(usdxSubAmount, thisFunds, usdxFunds)
232+ let otherFeeAmount = (usdxFeeAmount - thisFeeAmount)
233+ let otherSubAmount = (usdxSubAmount - thisSubAmount)
234+ ((((scriptTransfer(admin, ratsFeeAmount, ratsAsset) ++ scriptTransfer(admin, (thisFeeAmount - thisSubAmount), thisAsset)) ++ scriptTransfer(admin, (otherFeeAmount - otherSubAmount), otherAsset)) ++ pfeeFundsEntry(valueOrMinimum(usdxFeeAmount, pfeeFunds))) :+ IntegerEntry("teamstamp", lastBlock.timestamp))
221235 }
222236
223237
224238 @Callable(i)
225239 func BalanceSheet () = {
226240 let duration = (lastBlock.timestamp - openstamp)
227241 let exponent = fraction(decMult, annual, duration)
228242 let grossAPY = (pow(fraction(usdxPrice, decMult, powMult), 8, exponent, 8, decimals(percent), DOWN) - percent)
229243 let netBalance = fraction(ratsFunds, usdxActualPrice, powMult)
230244 if ((size(i.payments) > 0))
231245 then throw(makeString(["BalanceSheet () =>", "Don't attach payment when calling this function ..."], " "))
232246 else throw(makeString(["BalanceSheet () =>", "Gross APY:", (toPercentString(grossAPY, percent) + ";"), "Net cash balance:", toAmountString(netBalance, usdMult, true), "(USDT & USDC);", "Actual price: 1 RATS =", toPriceString(usdxActualPrice, powMult), "USDT (or USDC)"], " "))
233247 }
234248
235249
236250
237251 @Callable(i)
238252 func DepositFunds () = {
239253 let isAdmin = if ((i.caller == this))
240254 then true
241255 else (i.callerPublicKey == adminPublicKey)
242- let $t01101111062 = getAttachment(i.payments, 0)
243- let asset0 = $t01101111062._1
244- let amount0 = $t01101111062._2
245- let $t01106511116 = getAttachment(i.payments, 1)
246- let asset1 = $t01106511116._1
247- let amount1 = $t01106511116._2
256+ let $t01147611527 = getAttachment(i.payments, 0)
257+ let asset0 = $t01147611527._1
258+ let amount0 = $t01147611527._2
259+ let $t01153011581 = getAttachment(i.payments, 1)
260+ let asset1 = $t01153011581._1
261+ let amount1 = $t01153011581._2
248262 let maxAmount = valueOrMinimum((maxFunds - usdxFunds), (100 * usdMult))
249263 let usdxAmount = ((if (containsElement(portfolio, asset0))
250264 then amount0
251265 else 0) + (if (containsElement(portfolio, asset1))
252266 then amount1
253267 else 0))
254268 if (if (!(isAdmin))
255269 then lockStatus
256270 else false)
257271 then throw(makeString(["DepositFunds () =>", "All transactions are temporarily suspended.", "Мax. ETA:", toMinuteString((maxTimeout - etaTimer)), "min."], " "))
258272 else if (if (!(isAdmin))
259273 then (usdxFunds > maxFunds)
260274 else false)
261275 then throw(makeString(["DepositFunds () =>", "The maximum limit has been reached. Funding has been deactivated!"], " "))
262276 else if (if (if (if ((minAmount > usdxAmount))
263277 then true
264278 else (usdxAmount > maxAmount))
265279 then true
266280 else if ((amount0 > 0))
267281 then !(containsElement(portfolio, asset0))
268282 else false)
269283 then true
270284 else if ((amount1 > 0))
271285 then !(containsElement(portfolio, asset1))
272286 else false)
273287 then throw(makeString(["DepositFunds () =>", "Please attach Tether (USDT) and/or USD Coin (USDC) assets.", "Total amount:", "from", toAmountString(minAmount, usdMult, true), "to", toAmountString(maxAmount, usdMult, true), "(USDT + USDC)"], " "))
274288 else if ((minTimeout > etaTimer))
275289 then throw(makeString(["DepositFunds () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((minTimeout - etaTimer)), "min."], " "))
276- else ((deposit(i, usdxAmount, true) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
290+ else ((deposit(i, usdxAmount) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
277291 then [DeleteEntry("suspended")]
278292 else nil))
279293 }
280294
281295
282296
283297 @Callable(i)
284298 func WithdrawFunds () = {
285299 let isAdmin = if ((i.caller == this))
286300 then true
287301 else (i.callerPublicKey == adminPublicKey)
288- let $t01285812909 = getAttachment(i.payments, 0)
289- let asset0 = $t01285812909._1
290- let amount0 = $t01285812909._2
291- let $t01291212963 = getAttachment(i.payments, 1)
292- let asset1 = $t01291212963._1
293- let amount1 = $t01291212963._2
302+ let $t01331713368 = getAttachment(i.payments, 0)
303+ let asset0 = $t01331713368._1
304+ let amount0 = $t01331713368._2
305+ let $t01337113422 = getAttachment(i.payments, 1)
306+ let asset1 = $t01337113422._1
307+ let amount1 = $t01337113422._2
294308 let maxAmount = valueOrMinimum((ratsFunds - minAmount), 0)
295309 let ratsAmount = ((if ((asset0 == ratsAsset))
296310 then amount0
297311 else 0) + (if ((asset1 == ratsAsset))
298312 then amount1
299313 else 0))
300314 if (if (!(isAdmin))
301315 then lockStatus
302316 else false)
303317 then throw(makeString(["WithdrawFunds () =>", "All transactions are temporarily suspended.", "Мax. ETA:", toMinuteString((maxTimeout - etaTimer)), "min."], " "))
304318 else if (if (if (if ((1 > ratsAmount))
305319 then true
306320 else (ratsAmount > maxAmount))
307321 then true
308322 else if ((amount0 > 0))
309323 then (asset0 != ratsAsset)
310324 else false)
311325 then true
312326 else if ((amount1 > 0))
313327 then (asset1 != ratsAsset)
314328 else false)
315329 then throw(makeString(["WithdrawFunds () =>", "Please attach Ratatouille (RATS) asset.", "Max. amount:", toAmountString(maxAmount, usdMult, false), "RATS"], " "))
316330 else if ((minTimeout > etaTimer))
317331 then throw(makeString(["DepositFunds () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((minTimeout - etaTimer)), "min."], " "))
318- else ((withdraw(i, ratsAmount, true) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
332+ else ((withdraw(i, ratsAmount) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
319333 then [DeleteEntry("suspended")]
320334 else nil))
321335 }
322336
323337
324338
325339 @Callable(i)
326340 func TakeCommission () = {
327341 let isAdmin = if ((i.caller == this))
328342 then true
329343 else (i.callerPublicKey == adminPublicKey)
330344 if (!(isAdmin))
331345 then throw(makeString(["TakeCommission () =>", "This action can only be performed by authorized persons!"], " "))
332346 else if ((size(i.payments) > 0))
333347 then throw(makeString(["TakeCommission () =>", "Don't attach payment when calling this function ..."], " "))
334348 else if ((minTimeout > etaTimer))
335349 then throw(makeString(["TakeCommission () =>", "The balancing of dollar funds is going on ...", "Please wait less than", toMinuteString((minTimeout - etaTimer)), "min."], " "))
336- else ((((withdraw(i, ratsFunds, false) ++ deposit(i, (usdxFunds + pfeeFunds), false)) :+ IntegerEntry("teamstamp", lastBlock.timestamp)) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
350+ else ((management(i) :+ IntegerEntry("timestamp", lastBlock.timestamp)) ++ (if ((lockStatus != suspended))
337351 then [DeleteEntry("suspended")]
338352 else nil))
339353 }
340354
341355
342356
343357 @Callable(i)
344-func AirdropWasher (air0,air1,air2,air3,air4,air5,air6,air7,air8,air9) = {
358+func AirdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = {
345359 let isAdmin = if ((i.caller == this))
346360 then true
347361 else (i.callerPublicKey == adminPublicKey)
348362 let isManager = if (isAdmin)
349363 then true
350364 else containsElement(guarantors, i.callerPublicKey)
365+ let idBytes = (((((((((id0 + id1) + id2) + id3) + id4) + id5) + id6) + id7) + id8) + id9)
351366 let recipient = Address(valueOrElse(getBinary(this, "washbin"), admin.bytes))
352- let bulkBytes = (((((((((air0 + air1) + air2) + air3) + air4) + air5) + air6) + air7) + air8) + air9)
353367 if (!(isManager))
354368 then throw(makeString(["AirdropWasher () =>", "This action can only be performed by authorized persons!"], " "))
355369 else if ((size(i.payments) > 0))
356370 then throw(makeString(["AirdropWasher () =>", "Don't attach payment when calling this function ..."], " "))
357- else if ((bulkBytes == base58''))
371+ else if ((idBytes == base58''))
358372 then throw(makeString(["AirdropWasher () =>", "Please enter asset IDs in the fields below ..."], " "))
359- else (((((((((airdropTransfer(recipient, air0) ++ airdropTransfer(recipient, air1)) ++ airdropTransfer(recipient, air2)) ++ airdropTransfer(recipient, air3)) ++ airdropTransfer(recipient, air4)) ++ airdropTransfer(recipient, air5)) ++ airdropTransfer(recipient, air6)) ++ airdropTransfer(recipient, air7)) ++ airdropTransfer(recipient, air8)) ++ airdropTransfer(recipient, air9))
373+ else (((((((((airdropTransfer(recipient, id0) ++ airdropTransfer(recipient, id1)) ++ airdropTransfer(recipient, id2)) ++ airdropTransfer(recipient, id3)) ++ airdropTransfer(recipient, id4)) ++ airdropTransfer(recipient, id5)) ++ airdropTransfer(recipient, id6)) ++ airdropTransfer(recipient, id7)) ++ airdropTransfer(recipient, id8)) ++ airdropTransfer(recipient, id9))
360374 }
361375
362376
363377
364378 @Callable(i)
365379 func EmergencyMode (status) = {
366380 let isAdmin = if ((i.caller == this))
367381 then true
368382 else (i.callerPublicKey == adminPublicKey)
369383 let isManager = if (isAdmin)
370384 then true
371385 else containsElement(guarantors, i.callerPublicKey)
372386 if (if (if (!(isAdmin))
373387 then !(status)
374388 else false)
375389 then true
376390 else !(isManager))
377391 then throw(makeString(["EmergencyMode () =>", "This action can only be performed by authorized persons!"], " "))
378392 else if ((size(i.payments) > 0))
379393 then throw(makeString(["EmergencyMode () =>", "Don't attach payment when calling this function ..."], " "))
380394 else if ((status == suspended))
381395 then throw(makeString(["EmergencyMode () =>", "The status is already activated / deactivated.", "Current value:", toString(suspended)], " "))
382396 else ((nil :+ BooleanEntry("suspended", status)) :+ IntegerEntry("timestamp", lastBlock.timestamp))
383397 }
384398
385399
386400 @Verifier(tx)
387401 func verify () = {
388402 let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
389403 let isValidAdmin = if (isValidOwner)
390404 then true
391405 else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
392406 let isTradingBot = if (isValidOwner)
393407 then true
394408 else sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], traderPublicKey)
395409 let isValidGuarantors = ((((if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
396410 then 1
397411 else 0) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
398412 then 1
399413 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
400414 then 1
401415 else 0)) >= minSignatures)
402416 match tx {
403417 case o: Order =>
404418 if (if (isTradingBot)
405419 then (o.matcherPublicKey == matcherPublicKey)
406420 else false)
407421 then if (if (if (containsElement(portfolio, o.assetPair.priceAsset))
408422 then containsElement(portfolio, o.assetPair.amountAsset)
409423 else false)
410424 then if (if (if (!(isValidOwner))
411425 then (maxTimeout >= (o.expiration - o.timestamp))
412426 else false)
413427 then true
414428 else if (if ((o.orderType == Buy))
415429 then ((o.expiration - o.timestamp) >= maxTimeout)
416430 else false)
417431 then (o.matcherFeeAssetId == o.assetPair.priceAsset)
418432 else false)
419433 then true
420434 else if (if ((o.orderType == Sell))
421435 then ((o.expiration - o.timestamp) >= maxTimeout)
422436 else false)
423437 then (o.matcherFeeAssetId == o.assetPair.amountAsset)
424438 else false
425439 else false)
426440 then true
427441 else if (if (!(containsElement((portfolio ++ ourAssets), o.matcherFeeAssetId)))
428442 then !(containsElement((portfolio ++ ourAssets), o.assetPair.priceAsset))
429443 else false)
430444 then !(containsElement((portfolio ++ ourAssets), o.assetPair.amountAsset))
431445 else false
432446 else false
433447 case b: BurnTransaction =>
434448 if (isValidOwner)
435449 then !(containsElement((portfolio ++ ourAssets), b.assetId))
436450 else false
437451 case _: LeaseCancelTransaction|LeaseTransaction =>
438452 isValidOwner
439453 case t: TransferTransaction =>
440454 if (if (isValidOwner)
441455 then !(containsElement((portfolio ++ ourAssets), t.assetId))
442456 else false)
443457 then !(containsElement((portfolio ++ ourAssets), t.feeAssetId))
444458 else false
445459 case _: SetScriptTransaction|DataTransaction =>
446460 if (isValidAdmin)
447461 then isValidGuarantors
448462 else false
449463 case _ =>
450464 false
451465 }
452466 }
453467

github/deemru/w8io/3ef1775 
106.11 ms