2022.03.09 14:11 [3021460] smart account 3PJKKT7gsWiPBJj11gkF3Xv7gKt8s2WPdTr > SELF 0.00000000 Waves

{ "type": 13, "id": "Gu2H3W8GtE6sdWn3pjU2amDcZBEMFG3EeRXEEP7MsBUh", "fee": 1000000, "feeAssetId": null, "timestamp": 1646824258496, "version": 1, "sender": "3PJKKT7gsWiPBJj11gkF3Xv7gKt8s2WPdTr", "senderPublicKey": "FAqqjX7JqvqLh2QGTR3ziyCnSsWSoj9gVo4uPahtmhKr", "proofs": [ "4v3VuCnNTsA5c3yCJ6b24inUTUm2aQAtMaYe8mknrsJS4rLjwt1MVKeFza7AQtG6wakgnwKofPVhcGDMhohHv9B" ], "script": "base64:AAIFAAAAAAAAACIIAhIDCgEIEgASAwoBCBIAEgMKAQgSBQoDCAgBEgQKAggIAAAAKAEAAAAHdGhyb3dJZgAAAAIAAAAJY29uZGl0aW9uAAAABWVycm9yAwUAAAAJY29uZGl0aW9uCQAAAgAAAAEFAAAABWVycm9yBgEAAAAId3JpdGVJbnQAAAACAAAAA2tleQAAAAV2YWx1ZQMJAABmAAAAAgAAAAAAAAAAAAUAAAAFdmFsdWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAAGkAAAAAQUAAAAFdmFsdWUCAAAACSBmb3Iga2V5IAUAAAADa2V5CQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAIY2hhbmdlQnkAAAACAAAAA2tleQAAAAV2YWx1ZQkBAAAACHdyaXRlSW50AAAAAgUAAAADa2V5CQAAZAAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAABQAAAAV2YWx1ZQEAAAAMZnJhY3Rpb25DZWlsAAAAAwAAAAV2YWx1ZQAAAAludW1lcmF0b3IAAAALZGVub21pbmF0b3IEAAAABGNhbmQJAABrAAAAAwUAAAAFdmFsdWUFAAAACW51bWVyYXRvcgUAAAALZGVub21pbmF0b3IEAAAAAUQAAAAAALUE8zMEAAAABWV4YWN0CQAAAAAAAAIJAABqAAAAAgkAAGgAAAACCQAAagAAAAIFAAAABGNhbmQFAAAAAUQJAABqAAAAAgUAAAALZGVub21pbmF0b3IFAAAAAUQFAAAAAUQJAABqAAAAAgkAAGgAAAACCQAAagAAAAIFAAAABXZhbHVlBQAAAAFECQAAagAAAAIFAAAACW51bWVyYXRvcgUAAAABRAUAAAABRAMFAAAABWV4YWN0BQAAAARjYW5kCQAAZAAAAAIFAAAABGNhbmQAAAAAAAAAAAEBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgIAAAAVYWxyZWFkeSBpbml0aWFsaXplZDogBQAAAANrZXkAAAAAEmNvbmZpZ0FkZHJlc3NTdG9yZQIAAAANY29uZmlnQWRkcmVzcwAAAAALb3JhY2xlU3RvcmUCAAAADm9yYWNsZV9hZGRyZXNzAQAAABJyZXNlcnZlRmFjdG9yU3RvcmUAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgUAAAAHYXNzZXRJZAIAAAAOX1Jlc2VydmVGYWN0b3IAAAAACW1haW5TdG9yZQIAAAAEbWFpbgAAAAANY29uZmlnQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAABJjb25maWdBZGRyZXNzU3RvcmUCAAAAI3Byb3RlY3RlZC1yZXNlcnZlOiBubyBjb25maWdBZGRyZXNzAgAAABZpbnZhbGlkIGNvbmZpZyBhZGRyZXNzAQAAAA1yZXNlcnZlRmFjdG9yAAAAAQAAAAdhc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwkBAAAAEnJlc2VydmVGYWN0b3JTdG9yZQAAAAEFAAAAB2Fzc2V0SWQCAAAAEG5vIHJlc2VydmVGYWN0b3IBAAAACmdldEJhbGFuY2UAAAACAAAADmFkZHJlc3NPckFsaWFzAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmJ2BQAAAAckbWF0Y2gwCQAD8AAAAAIFAAAADmFkZHJlc3NPckFsaWFzBQAAAAJidgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdQUAAAAHJG1hdGNoMAgJAAPvAAAAAQUAAAAOYWRkcmVzc09yQWxpYXMAAAAJYXZhaWxhYmxlCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAlvcEFsbG93ZWQAAAACAAAAB2Fzc2V0SWQAAAACb3AEAAAAByRtYXRjaDAJAAP8AAAABAUAAAANY29uZmlnQWRkcmVzcwIAAAAJb3BBbGxvd2VkCQAETAAAAAIFAAAAB2Fzc2V0SWQJAARMAAAAAgUAAAACb3AFAAAAA25pbAUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwAwUAAAABYgYJAAACAAAAAQIAAAALbm90IGFsbG93ZWQJAAACAAAAAQIAAAAhb3BBbGxvd2VkOiB1bmV4cGVjdGVkIHJlc3VsdCB0eXBlAQAAAAhtYWluT25seQAAAAEAAAABaQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzBQAAAAltYWluU3RvcmUCAAAAEW5vIG1haW4gaW4gY29uZmlnAgAAABRpbnZhbGlkIG1haW4gYWRkcmVzcwkAAAIAAAABAgAAABBvbmx5IG1haW4gY2FuIGRvBgAAAAASbWF5YmVPcmFjbGVBZGRyZXNzBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MFAAAAC29yYWNsZVN0b3JlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAQmAAAAAQUAAAABcwUAAAAEdW5pdAEAAAALb3JhY2xlUHJpY2UAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAJAAP8AAAABAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACBQAAABJtYXliZU9yYWNsZUFkZHJlc3MCAAAACW5vIG9yYWNsZQIAAAAFcHJpY2UJAARMAAAAAgUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAANuaWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQkAAAIAAAABAgAAAA9iYWQgb3JhY2xlIGRhdGEAAAAABkhFSUdIVAUAAAAGaGVpZ2h0AAAAAAZhc3NldHMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAAYcHJvdGVjdGVkX3Jlc2VydmVfYXNzZXRzAgAAAAAAAAAAC2Fzc2V0c0FycmF5AwkAAAAAAAACBQAAAAZhc3NldHMCAAAAAAUAAAADbmlsCQAEtQAAAAIFAAAABmFzc2V0cwIAAAABfAEAAAARdG90YWxEZXBvc2l0U3RvcmUAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgIAAAAMdG90YWxTdXBwbHlfBQAAAAdhc3NldElkAQAAABB0b3RhbFNoYXJlc1N0b3JlAAAAAQAAAAdhc3NldElkCQABLAAAAAICAAAADHRvdGFsU2hhcmVzXwUAAAAHYXNzZXRJZAEAAAAPdXNlclNoYXJlc1N0b3JlAAAAAgAAAAdhc3NldElkAAAABHVzZXIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC3VzZXJTaGFyZXNfBQAAAAdhc3NldElkAgAAAAFfBQAAAAR1c2VyAQAAABFoYXNQcm90ZWN0ZWRTdG9yZQAAAAEAAAAEdXNlcgkAASwAAAACAgAAABVwcm90ZWN0ZWRfY29sbGF0ZXJhbF8FAAAABHVzZXIBAAAAE3Byb3RlY3RlZEFzc2V0U3RvcmUAAAABAAAABHVzZXIJAAEsAAAAAgIAAAAQcHJvdGVjdGVkX2Fzc2V0XwUAAAAEdXNlcgEAAAAMdG90YWxEZXBvc2l0AAAAAQAAAAdhc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAABF0b3RhbERlcG9zaXRTdG9yZQAAAAEFAAAAB2Fzc2V0SWQAAAAAAAAAAAABAAAAC3RvdGFsU2hhcmVzAAAAAQAAAAdhc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAABB0b3RhbFNoYXJlc1N0b3JlAAAAAQUAAAAHYXNzZXRJZAAAAAAAAAAAAAEAAAAKdXNlclNoYXJlcwAAAAIAAAAHYXNzZXRJZAAAAAR1c2VyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAAA91c2VyU2hhcmVzU3RvcmUAAAACBQAAAAdhc3NldElkBQAAAAR1c2VyAAAAAAAA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aDAFAAAADnByb3RlY3RlZEFzc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDADCQAAAAAAAAIFAAAAAXMFAAAAB2Fzc2V0SWQGCQAAAgAAAAECAAAAO3Byb3RlY3RlZC1yZXNlcnZlOiBjYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgYXNzZXQgcHJvdGVjdGVkCQAAAgAAAAECAAAAIHByb3RlY3RlZC1yZXNlcnZlOmNsZWFuIHVwIGZpcnN0BAAAAAckbWF0Y2gwBQAAAA5wcm90ZWN0ZWRBc3NldAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQAAAgAAAAECAAAAI3Byb3RlY3RlZC1yZXNlcnZlOiBtaXNjb25maWd1cmF0aW9uBgQAAAAQY29uc2lzdGVuY3lDaGVjawkBAAAAB3Rocm93SWYAAAACCQEAAAABIQAAAAEFAAAAC2NvbnNpc3RlbmN5AgAAAA1pbmNvbnNpc3RlbmN5AwkAAAAAAAACBQAAABBjb25zaXN0ZW5jeUNoZWNrBQAAABBjb25zaXN0ZW5jeUNoZWNrBAAAAAluZXdTaGFyZXMJAQAAAA5hbW91bnRUb1NoYXJlcwAAAAMFAAAAB2Fzc2V0SWQFAAAABmFtb3VudAcEAAAAB3N0YWtpbmcJAQAAAA1zdGFraW5nQWN0aW9uAAAAAgUAAAAHYXNzZXRJZAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAHc3Rha2luZwUAAAAHc3Rha2luZwkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACCQEAAAARdG90YWxEZXBvc2l0U3RvcmUAAAABBQAAAAdhc3NldElkBQAAAAZhbW91bnQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgkBAAAAEHRvdGFsU2hhcmVzU3RvcmUAAAABBQAAAAdhc3NldElkBQAAAAluZXdTaGFyZXMJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgkBAAAAD3VzZXJTaGFyZXNTdG9yZQAAAAIFAAAAB2Fzc2V0SWQFAAAABHVzZXIFAAAACW5ld1NoYXJlcwkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAEWhhc1Byb3RlY3RlZFN0b3JlAAAAAQUAAAAEdXNlcgYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE3Byb3RlY3RlZEFzc2V0U3RvcmUAAAABBQAAAAR1c2VyBQAAAAdhc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAHAAAAAWkBAAAACmluaXRpYWxpemUAAAABAAAADWNvbmZpZ0FkZHJlc3MJAARMAAAAAgkBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACBQAAABJjb25maWdBZGRyZXNzU3RvcmUFAAAADWNvbmZpZ0FkZHJlc3MFAAAAA25pbAAAAAFpAQAAAAthZGRJbnRlcmVzdAAAAAAEAAAAB2Fzc2V0SWQJAQAAAAphc3NldElkU3RyAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAGY2hlY2tzCQEAAAAPdmFsaWRhdGVBc3NldElkAAAAAQUAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAAB3N0YWtpbmcJAQAAAA1zdGFraW5nQWN0aW9uAAAAAgUAAAAHYXNzZXRJZAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAHc3Rha2luZwUAAAAHc3Rha2luZwQAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgkBAAAAEXRvdGFsRGVwb3NpdFN0b3JlAAAAAQUAAAAHYXNzZXRJZAUAAAAGYW1vdW50BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtib3Jyb3dQb3dlcgAAAAEAAAAEdXNlcgkABRQAAAACBQAAAANuaWwJAQAAAAJicAAAAAEFAAAABHVzZXIAAAABaQEAAAAGc3VwcGx5AAAAAAkBAAAADnN1cHBseUludGVybmFsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAAWkAAAABaQEAAAAJc3VwcGx5Rm9yAAAAAQAAAAR1c2VyBAAAAAZjaGVja3MJAQAAAAhtYWluT25seQAAAAEFAAAAAWkDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQEAAAAOc3VwcGx5SW50ZXJuYWwAAAACBQAAAAR1c2VyBQAAAAFpCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAt3aXRoZHJhd0ZvcgAAAAMAAAAEdXNlcgAAAAdhc3NldElkAAAABmFtb3VudAQAAAAGY2hlY2tzAwkBAAAACG1haW5Pbmx5AAAAAQUAAAABaQkBAAAACW9wQWxsb3dlZAAAAAIFAAAAB2Fzc2V0SWQCAAAAHXdpdGhkcmF3X3Byb3RlY3RlZF9jb2xsYXRlcmFsBwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAQAAABB3aXRoZHJhd0ludGVybmFsAAAABAUAAAAEdXNlcgUAAAAEdXNlcgUAAAAHYXNzZXRJZAUAAAAGYW1vdW50CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA53aXRoZHJhd1RvTWFpbgAAAAIAAAAEdXNlcgAAAAdhc3NldElkBAAAAAZjaGVja3MDCQEAAAAIbWFpbk9ubHkAAAABBQAAAAFpCQEAAAAJb3BBbGxvd2VkAAAAAgUAAAAHYXNzZXRJZAIAAAAdY29sbGFwc2VfcHJvdGVjdGVkX2NvbGxhdGVyYWwHAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwkBAAAAEHdpdGhkcmF3SW50ZXJuYWwAAAAEBQAAAAR1c2VyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAHYXNzZXRJZAD//////////wkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAAtl6fPw==", "chainId": 87, "height": 3021460, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5Eavzk8oCagrUAguJsQJghsZTdgEGRkkHHnrSg9khy43 Next: 6QQqieoQUEHHu6vNAB7ve5CYMXGEEYEAx7gQBmUNPNfu Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getI (key) = getInteger(this, key)
5-
6-
7-func getS (key) = getString(this, key)
8-
9-
10-func getSV (key) = value(getString(this, key))
11-
12-
134 func throwIf (condition,error) = if (condition)
145 then throw(error)
156 else true
2011 else IntegerEntry(key, value)
2112
2213
23-func changeBy (key,value) = writeInt(key, (valueOrElse(getI(key), 0) + value))
14+func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
2415
2516
2617 func fractionCeil (value,numerator,denominator) = {
4031
4132 let configAddressStore = "configAddress"
4233
43-let oracleStore = "oracleAddress"
34+let oracleStore = "oracle_address"
4435
4536 func reserveFactorStore (assetId) = (assetId + "_ReserveFactor")
4637
4738
4839 let mainStore = "main"
4940
50-let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getS(configAddressStore), "no configAddress")), "invalid config address")
41+let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "protected-reserve: no configAddress")), "invalid config address")
5142
5243 func reserveFactor (assetId) = valueOrErrorMessage(getInteger(configAddress, reserveFactorStore(assetId)), "no reserveFactor")
5344
7768 else true
7869
7970
80-let maybeOracleAddress = match getS(oracleStore) {
71+let maybeOracleAddress = match getString(configAddress, oracleStore) {
8172 case s: String =>
8273 addressFromString(s)
8374 case _ =>
135126
136127
137128 func hasRegularDeposit (user) = {
138- let reserves = split(valueOrErrorMessage(getString(addressFromStringValue(getStringValue(configAddress, mainStore)), "reserves"), "protected: no reserves found in main"), "|")
129+ let reserves = split(valueOrErrorMessage(getString(configAddress, "primary_reserves"), "protected: no reserves found in main"), "|")
139130 func asUserBalanceData (value) = match value {
140131 case x: (Int, Int, Int, Int, Int, Boolean) =>
141132 x
200191 func assetToUsd (assetId,amount) = fraction(amount, oraclePrice(assetId), pow10(assetDecimals(assetId)))
201192
202193 func fold (acc,data) = (acc + {
203- let $t052925317 = data
204- let assetId = $t052925317._1
205- let amt = $t052925317._2
194+ let $t051195144 = data
195+ let assetId = $t051195144._1
196+ let amt = $t051195144._2
206197 fraction(assetToUsd(assetId, amt), collateralFactor(assetId), factorsBase)
207198 })
208199
312303 if ((checks == checks))
313304 then {
314305 let realShares = userShares(assetId, from)
315- let $t076947978 = if ((amount == -1))
306+ let $t075217805 = if ((amount == -1))
316307 then {
317308 let realAmount = sharesToAmount(assetId, realShares)
318309 $Tuple2(realShares, realAmount)
320311 else if ((0 >= amount))
321312 then throw("protected-reserve: non-positive amount")
322313 else $Tuple2(amountToShares(assetId, amount, true), amount)
323- let wdShares = $t076947978._1
324- let wdAmount = $t076947978._2
314+ let wdShares = $t075217805._1
315+ let wdAmount = $t075217805._2
325316 let maybeCleanUp = if ((realShares == wdShares))
326317 then [BooleanEntry(hasProtectedStore(from), false), DeleteEntry(protectedAssetStore(from))]
327318 else nil
383374
384375
385376 @Callable(i)
386-func initialize (configAddress,oracleAddr) = [writeConstString(configAddressStore, configAddress), writeConstString(oracleStore, oracleAddr)]
377+func initialize (configAddress) = [writeConstString(configAddressStore, configAddress)]
387378
388379
389380
449440 }
450441
451442
452-
453-@Callable(i)
454-func cleanUpUser (user) = {
455- func fold (firstNonZero,assetId) = if (isDefined(firstNonZero))
456- then firstNonZero
457- else if ((userShares(assetId, user) > 0))
458- then assetId
459- else unit
460-
461- let nonZero = {
462- let $l = assetsArray
463- let $s = size($l)
464- let $acc0 = unit
465- func $f0_1 ($a,$i) = if (($i >= $s))
466- then $a
467- else fold($a, $l[$i])
468-
469- func $f0_2 ($a,$i) = if (($i >= $s))
470- then $a
471- else throw("List size exceeds 7")
472-
473- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
474- }
475- match nonZero {
476- case s: String =>
477-[StringEntry(protectedAssetStore(user), s), BooleanEntry(hasProtectedStore(user), true)]
478- case _ =>
479-[DeleteEntry(protectedAssetStore(user)), BooleanEntry(hasProtectedStore(user), false)]
480- }
481- }
482-
483-
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getI (key) = getInteger(this, key)
5-
6-
7-func getS (key) = getString(this, key)
8-
9-
10-func getSV (key) = value(getString(this, key))
11-
12-
134 func throwIf (condition,error) = if (condition)
145 then throw(error)
156 else true
167
178
189 func writeInt (key,value) = if ((0 > value))
1910 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
2011 else IntegerEntry(key, value)
2112
2213
23-func changeBy (key,value) = writeInt(key, (valueOrElse(getI(key), 0) + value))
14+func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
2415
2516
2617 func fractionCeil (value,numerator,denominator) = {
2718 let cand = fraction(value, numerator, denominator)
2819 let D = 3037000499
2920 let exact = ((((cand % D) * (denominator % D)) % D) == (((value % D) * (numerator % D)) % D))
3021 if (exact)
3122 then cand
3223 else (cand + 1)
3324 }
3425
3526
3627 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
3728 then StringEntry(key, value)
3829 else throw(("already initialized: " + key))
3930
4031
4132 let configAddressStore = "configAddress"
4233
43-let oracleStore = "oracleAddress"
34+let oracleStore = "oracle_address"
4435
4536 func reserveFactorStore (assetId) = (assetId + "_ReserveFactor")
4637
4738
4839 let mainStore = "main"
4940
50-let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getS(configAddressStore), "no configAddress")), "invalid config address")
41+let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "protected-reserve: no configAddress")), "invalid config address")
5142
5243 func reserveFactor (assetId) = valueOrErrorMessage(getInteger(configAddress, reserveFactorStore(assetId)), "no reserveFactor")
5344
5445
5546 func getBalance (addressOrAlias,assetId) = match assetId {
5647 case bv: ByteVector =>
5748 assetBalance(addressOrAlias, bv)
5849 case u: Unit =>
5950 wavesBalance(addressOrAlias).available
6051 case _ =>
6152 throw("Match error")
6253 }
6354
6455
6556 func opAllowed (assetId,op) = match invoke(configAddress, "opAllowed", [assetId, op], nil) {
6657 case b: Boolean =>
6758 if (b)
6859 then true
6960 else throw("not allowed")
7061 case _ =>
7162 throw("opAllowed: unexpected result type")
7263 }
7364
7465
7566 func mainOnly (i) = if ((i.caller != valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, mainStore), "no main in config")), "invalid main address")))
7667 then throw("only main can do")
7768 else true
7869
7970
80-let maybeOracleAddress = match getS(oracleStore) {
71+let maybeOracleAddress = match getString(configAddress, oracleStore) {
8172 case s: String =>
8273 addressFromString(s)
8374 case _ =>
8475 unit
8576 }
8677
8778 func oraclePrice (assetId) = match invoke(valueOrErrorMessage(maybeOracleAddress, "no oracle"), "price", [assetId], nil) {
8879 case i: Int =>
8980 i
9081 case _ =>
9182 throw("bad oracle data")
9283 }
9384
9485
9586 let HEIGHT = height
9687
9788 let assets = valueOrElse(getString(configAddress, "protected_reserve_assets"), "")
9889
9990 let assetsArray = if ((assets == ""))
10091 then nil
10192 else split(assets, "|")
10293
10394 func totalDepositStore (assetId) = ("totalSupply_" + assetId)
10495
10596
10697 func totalSharesStore (assetId) = ("totalShares_" + assetId)
10798
10899
109100 func userSharesStore (assetId,user) = ((("userShares_" + assetId) + "_") + user)
110101
111102
112103 func hasProtectedStore (user) = ("protected_collateral_" + user)
113104
114105
115106 func protectedAssetStore (user) = ("protected_asset_" + user)
116107
117108
118109 func totalDeposit (assetId) = valueOrElse(getInteger(totalDepositStore(assetId)), 0)
119110
120111
121112 func totalShares (assetId) = valueOrElse(getInteger(totalSharesStore(assetId)), 0)
122113
123114
124115 func userShares (assetId,user) = valueOrElse(getInteger(userSharesStore(assetId, user)), 0)
125116
126117
127118 func userDeposit (assetId,user) = {
128119 let ts = totalShares(assetId)
129120 let td = totalDeposit(assetId)
130121 let us = userShares(assetId, user)
131122 if ((ts == 0))
132123 then 0
133124 else fraction(td, us, ts)
134125 }
135126
136127
137128 func hasRegularDeposit (user) = {
138- let reserves = split(valueOrErrorMessage(getString(addressFromStringValue(getStringValue(configAddress, mainStore)), "reserves"), "protected: no reserves found in main"), "|")
129+ let reserves = split(valueOrErrorMessage(getString(configAddress, "primary_reserves"), "protected: no reserves found in main"), "|")
139130 func asUserBalanceData (value) = match value {
140131 case x: (Int, Int, Int, Int, Int, Boolean) =>
141132 x
142133 case t =>
143134 throw("wrong type, expected: Int5&Boolean")
144135 }
145136
146137 func fold (acc,reserve) = {
147138 let ubd = asUserBalanceData(invoke(addressFromStringValue(reserve), "userBalance", [user], nil))
148139 if ((ubd._1 > 0))
149140 then throw("can't have protected when regular exists")
150141 else false
151142 }
152143
153144 let $l = reserves
154145 let $s = size($l)
155146 let $acc0 = false
156147 func $f0_1 ($a,$i) = if (($i >= $s))
157148 then $a
158149 else fold($a, $l[$i])
159150
160151 func $f0_2 ($a,$i) = if (($i >= $s))
161152 then $a
162153 else throw("List size exceeds 7")
163154
164155 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
165156 }
166157
167158
168159 func userState (user) = {
169160 func fold (acc,assetId) = (acc ++ [$Tuple2(assetId, userDeposit(assetId, user))])
170161
171162 let $l = assetsArray
172163 let $s = size($l)
173164 let $acc0 = nil
174165 func $f0_1 ($a,$i) = if (($i >= $s))
175166 then $a
176167 else fold($a, $l[$i])
177168
178169 func $f0_2 ($a,$i) = if (($i >= $s))
179170 then $a
180171 else throw("List size exceeds 7")
181172
182173 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
183174 }
184175
185176
186177 func bp (user) = {
187178 let factorsBase = 1000
188179 func collateralFactor (assetId) = valueOrErrorMessage(getInteger(configAddress, (assetId + "_CollateralFactor")), "no CollateralFactor in config")
189180
190181 func pow10 (n) = if ((n == 6))
191182 then 1000000
192183 else if ((n == 8))
193184 then 100000000
194185 else throw(("bad decimals: " + toString(n)))
195186
196187 func assetDecimals (assetId) = if ((assetId == "WAVES"))
197188 then 8
198189 else valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "bad asset").decimals
199190
200191 func assetToUsd (assetId,amount) = fraction(amount, oraclePrice(assetId), pow10(assetDecimals(assetId)))
201192
202193 func fold (acc,data) = (acc + {
203- let $t052925317 = data
204- let assetId = $t052925317._1
205- let amt = $t052925317._2
194+ let $t051195144 = data
195+ let assetId = $t051195144._1
196+ let amt = $t051195144._2
206197 fraction(assetToUsd(assetId, amt), collateralFactor(assetId), factorsBase)
207198 })
208199
209200 let $l = userState(user)
210201 let $s = size($l)
211202 let $acc0 = 0
212203 func $f0_1 ($a,$i) = if (($i >= $s))
213204 then $a
214205 else fold($a, $l[$i])
215206
216207 func $f0_2 ($a,$i) = if (($i >= $s))
217208 then $a
218209 else throw("List size exceeds 7")
219210
220211 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
221212 }
222213
223214
224215 func adviseUser (user) = {
225216 let borrowPower = bp(user)
226217 (("borrowPower = " + toString(borrowPower)) + {
227218 func fold (acc,pair) = ((((acc + ", ") + pair._1) + " = ") + toString(pair._2))
228219
229220 let $l = userState(user)
230221 let $s = size($l)
231222 let $acc0 = ""
232223 func $f0_1 ($a,$i) = if (($i >= $s))
233224 then $a
234225 else fold($a, $l[$i])
235226
236227 func $f0_2 ($a,$i) = if (($i >= $s))
237228 then $a
238229 else throw("List size exceeds 7")
239230
240231 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
241232 })
242233 }
243234
244235
245236 func sharesToAmount (assetId,shares) = {
246237 let ts = totalShares(assetId)
247238 let td = totalDeposit(assetId)
248239 if (if ((ts == 0))
249240 then true
250241 else (td == 0))
251242 then shares
252243 else fraction(shares, td, ts)
253244 }
254245
255246
256247 func amountToShares (assetId,amt,ceil) = {
257248 let ts = totalShares(assetId)
258249 let td = totalDeposit(assetId)
259250 if (if ((ts == 0))
260251 then true
261252 else (td == 0))
262253 then amt
263254 else if (ceil)
264255 then fractionCeil(amt, ts, td)
265256 else fraction(amt, ts, td)
266257 }
267258
268259
269260 func validateAssetId (assetId) = throwIf(!(contains(assets, assetId)), "assetId not permitted")
270261
271262
272263 func assetIdStr (aid) = match aid {
273264 case bv: ByteVector =>
274265 toBase58String(bv)
275266 case u: Unit =>
276267 "WAVES"
277268 case _ =>
278269 throw("Match error")
279270 }
280271
281272
282273 func assetStrToId (assetId) = if ((assetId == "WAVES"))
283274 then unit
284275 else fromBase58String(assetId)
285276
286277
287278 func stakingAction (assetId,keepAtBalance) = {
288279 let actualBalance = if ((assetId == "WAVES"))
289280 then wavesBalance(this).available
290281 else assetBalance(this, fromBase58String(assetId))
291282 if ((actualBalance == keepAtBalance))
292283 then unit
293284 else {
294285 let stakingEnabled = valueOrElse(getBoolean(configAddress, ("protected_staking_enabled_" + assetId)), false)
295286 if (!(stakingEnabled))
296287 then unit
297288 else {
298289 let stakingAddress = {
299290 let addr = valueOrErrorMessage(getString(configAddress, ("protected_staking_config_" + assetId)), ("no staking address for " + assetId))
300291 valueOrErrorMessage(addressFromString(addr), ((("protectedReserve: bad staking address for " + assetId) + ": ") + addr))
301292 }
302293 if ((actualBalance > keepAtBalance))
303294 then invoke(stakingAddress, "put", nil, [AttachedPayment(assetStrToId(assetId), (actualBalance - keepAtBalance))])
304295 else invoke(stakingAddress, "get", [(keepAtBalance - actualBalance)], nil)
305296 }
306297 }
307298 }
308299
309300
310301 func withdrawInternal (from,to,assetId,amount) = {
311302 let checks = validateAssetId(assetId)
312303 if ((checks == checks))
313304 then {
314305 let realShares = userShares(assetId, from)
315- let $t076947978 = if ((amount == -1))
306+ let $t075217805 = if ((amount == -1))
316307 then {
317308 let realAmount = sharesToAmount(assetId, realShares)
318309 $Tuple2(realShares, realAmount)
319310 }
320311 else if ((0 >= amount))
321312 then throw("protected-reserve: non-positive amount")
322313 else $Tuple2(amountToShares(assetId, amount, true), amount)
323- let wdShares = $t076947978._1
324- let wdAmount = $t076947978._2
314+ let wdShares = $t075217805._1
315+ let wdAmount = $t075217805._2
325316 let maybeCleanUp = if ((realShares == wdShares))
326317 then [BooleanEntry(hasProtectedStore(from), false), DeleteEntry(protectedAssetStore(from))]
327318 else nil
328319 let staking = stakingAction(assetId, wdAmount)
329320 if ((staking == staking))
330321 then $Tuple2((maybeCleanUp ++ [changeBy(totalDepositStore(assetId), -(wdAmount)), changeBy(totalSharesStore(assetId), -(wdShares)), changeBy(userSharesStore(assetId, from), -(wdShares)), ScriptTransfer(addressFromStringValue(to), wdAmount, assetStrToId(assetId))]), wdAmount)
331322 else throw("Strict value is not equal to itself.")
332323 }
333324 else throw("Strict value is not equal to itself.")
334325 }
335326
336327
337328 func supplyInternal (user,i) = if (hasRegularDeposit(user))
338329 then throw("protected-reserve: can't have protected when regular exists")
339330 else if ((size(i.payments) != 1))
340331 then throw("protected-reserve: single payment required")
341332 else {
342333 let assetId = assetIdStr(i.payments[0].assetId)
343334 let amount = i.payments[0].amount
344335 if ((amount == 0))
345336 then nil
346337 else {
347338 let checks = if (validateAssetId(assetId))
348339 then opAllowed(assetId, "supply_protected_collateral")
349340 else false
350341 if ((checks == checks))
351342 then {
352343 let protectedFlag = valueOrElse(getBoolean(this, hasProtectedStore(user)), false)
353344 let protectedAsset = getString(this, protectedAssetStore(user))
354345 let consistency = if (protectedFlag)
355346 then match protectedAsset {
356347 case s: String =>
357348 if ((s == assetId))
358349 then true
359350 else throw("protected-reserve: can't have more than one asset protected")
360351 case _ =>
361352 throw("protected-reserve:clean up first")
362353 }
363354 else match protectedAsset {
364355 case s: String =>
365356 throw("protected-reserve: misconfiguration")
366357 case _ =>
367358 true
368359 }
369360 let consistencyCheck = throwIf(!(consistency), "inconsistency")
370361 if ((consistencyCheck == consistencyCheck))
371362 then {
372363 let newShares = amountToShares(assetId, amount, false)
373364 let staking = stakingAction(assetId, 0)
374365 if ((staking == staking))
375366 then [changeBy(totalDepositStore(assetId), amount), changeBy(totalSharesStore(assetId), newShares), changeBy(userSharesStore(assetId, user), newShares), BooleanEntry(hasProtectedStore(user), true), StringEntry(protectedAssetStore(user), assetId)]
376367 else throw("Strict value is not equal to itself.")
377368 }
378369 else throw("Strict value is not equal to itself.")
379370 }
380371 else throw("Strict value is not equal to itself.")
381372 }
382373 }
383374
384375
385376 @Callable(i)
386-func initialize (configAddress,oracleAddr) = [writeConstString(configAddressStore, configAddress), writeConstString(oracleStore, oracleAddr)]
377+func initialize (configAddress) = [writeConstString(configAddressStore, configAddress)]
387378
388379
389380
390381 @Callable(i)
391382 func addInterest () = {
392383 let assetId = assetIdStr(i.payments[0].assetId)
393384 let checks = validateAssetId(assetId)
394385 if ((checks == checks))
395386 then {
396387 let staking = stakingAction(assetId, 0)
397388 if ((staking == staking))
398389 then {
399390 let amount = i.payments[0].amount
400391 [changeBy(totalDepositStore(assetId), amount)]
401392 }
402393 else throw("Strict value is not equal to itself.")
403394 }
404395 else throw("Strict value is not equal to itself.")
405396 }
406397
407398
408399
409400 @Callable(i)
410401 func borrowPower (user) = $Tuple2(nil, bp(user))
411402
412403
413404
414405 @Callable(i)
415406 func supply () = supplyInternal(toString(i.caller), i)
416407
417408
418409
419410 @Callable(i)
420411 func supplyFor (user) = {
421412 let checks = mainOnly(i)
422413 if ((checks == checks))
423414 then supplyInternal(user, i)
424415 else throw("Strict value is not equal to itself.")
425416 }
426417
427418
428419
429420 @Callable(i)
430421 func withdrawFor (user,assetId,amount) = {
431422 let checks = if (mainOnly(i))
432423 then opAllowed(assetId, "withdraw_protected_collateral")
433424 else false
434425 if ((checks == checks))
435426 then withdrawInternal(user, user, assetId, amount)
436427 else throw("Strict value is not equal to itself.")
437428 }
438429
439430
440431
441432 @Callable(i)
442433 func withdrawToMain (user,assetId) = {
443434 let checks = if (mainOnly(i))
444435 then opAllowed(assetId, "collapse_protected_collateral")
445436 else false
446437 if ((checks == checks))
447438 then withdrawInternal(user, toString(i.caller), assetId, -1)
448439 else throw("Strict value is not equal to itself.")
449440 }
450441
451442
452-
453-@Callable(i)
454-func cleanUpUser (user) = {
455- func fold (firstNonZero,assetId) = if (isDefined(firstNonZero))
456- then firstNonZero
457- else if ((userShares(assetId, user) > 0))
458- then assetId
459- else unit
460-
461- let nonZero = {
462- let $l = assetsArray
463- let $s = size($l)
464- let $acc0 = unit
465- func $f0_1 ($a,$i) = if (($i >= $s))
466- then $a
467- else fold($a, $l[$i])
468-
469- func $f0_2 ($a,$i) = if (($i >= $s))
470- then $a
471- else throw("List size exceeds 7")
472-
473- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
474- }
475- match nonZero {
476- case s: String =>
477-[StringEntry(protectedAssetStore(user), s), BooleanEntry(hasProtectedStore(user), true)]
478- case _ =>
479-[DeleteEntry(protectedAssetStore(user)), BooleanEntry(hasProtectedStore(user), false)]
480- }
481- }
482-
483-

github/deemru/w8io/786bc32 
63.00 ms