tx · 2u3faHFP2Kn2Gsp5oiLk9QUFc3PhWj3ogPyf3PG5t52o

3MxovCV2pBS5Z6YEcj3Gap5ish6dX3YERfP:  -0.05000000 Waves

2022.11.09 21:00 [2309929] smart account 3MxovCV2pBS5Z6YEcj3Gap5ish6dX3YERfP > SELF 0.00000000 Waves

{ "type": 13, "id": "2u3faHFP2Kn2Gsp5oiLk9QUFc3PhWj3ogPyf3PG5t52o", "fee": 5000000, "feeAssetId": null, "timestamp": 1668016866900, "version": 2, "chainId": 84, "sender": "3MxovCV2pBS5Z6YEcj3Gap5ish6dX3YERfP", "senderPublicKey": "6aZUzHaTgW7zPizjKqNFNAaKdYXVUaNwstd6E3NsD3YF", "proofs": [ "36jTcEoJc5RihMJhhTYrpYBfJHS8Lfb6kYFzcyujJH6SQSLV1pko4727fCzAN7drZQxXVDXaraFooEKMRuXw6Fcx" ], "script": "base64:AAIFAAAAAAAAAA0IAhIDCgEIEgASABIAAAAAEwAAAAAJcHJlY2lzaW9uAA3gtrOnZAAAAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkABCIAAAABAgAAABBtYW5hZ2VyUHVibGljS2V5AQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAA1tdXN0Tm90SW5pdGVkAAAAAAQAAAAHJG1hdGNoMAkABCAAAAABAgAAAAZpbml0ZWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAABmluaXRlZAUAAAAHJG1hdGNoMAMJAAAAAAAAAgUAAAAGaW5pdGVkBwYJAAACAAAAAQIAAAAOQWxyZWFkeSBpbml0ZWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQHCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAtjYW5jZWxMZWFzZQAAAAAEAAAAByRtYXRjaDAJAAQhAAAAAQIAAAAHbGVhc2VJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAJAARMAAAAAgkBAAAAC0xlYXNlQ2FuY2VsAAAAAQUAAAACaWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQIAAAAHbGVhc2VJZAUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAANuaWwJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAACmdldEJhbGFuY2UAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAECAAAAB2JhbGFuY2UAAAAAAAAAAAABAAAACnNldEJhbGFuY2UAAAABAAAABmFtb3VudAkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAB2JhbGFuY2UFAAAABmFtb3VudAEAAAAFbGVhc2UAAAABAAAABmFtb3VudAMJAAAAAAAAAgUAAAAGYW1vdW50AAAAAAAAAAAABQAAAANuaWwEAAAADWxlYXNlckFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABAgAAAA1sZWFzZXJBZGRyZXNzBAAAAA1jdXJyZW50QW1vdW50CQEAAAAKZ2V0QmFsYW5jZQAAAAAEAAAACW5ld0Ftb3VudAkAAGQAAAACBQAAAA1jdXJyZW50QW1vdW50BQAAAAZhbW91bnQEAAAADGxlYXNlQWN0aW9ucwMJAABmAAAAAgUAAAAJbmV3QW1vdW50AAAAAAAAAAAABAAAAAhuZXdMZWFzZQkABEQAAAACBQAAAA1sZWFzZXJBZGRyZXNzBQAAAAluZXdBbW91bnQEAAAACm5ld0xlYXNlSWQJAAQ5AAAAAQUAAAAIbmV3TGVhc2UJAARMAAAAAgUAAAAIbmV3TGVhc2UJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgIAAAAHbGVhc2VJZAUAAAAKbmV3TGVhc2VJZAUAAAADbmlsBQAAAANuaWwJAARNAAAAAgkABE4AAAACCQEAAAALY2FuY2VsTGVhc2UAAAAABQAAAAxsZWFzZUFjdGlvbnMJAQAAAApzZXRCYWxhbmNlAAAAAQUAAAAJbmV3QW1vdW50AQAAAAtpc3N1ZVNXYXZlcwAAAAEAAAAGYW1vdW50BAAAAA1zV2F2ZXNBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAECAAAADXNXYXZlc0Fzc2V0SWQJAQAAAAdSZWlzc3VlAAAAAwUAAAANc1dhdmVzQXNzZXRJZAUAAAAGYW1vdW50BgEAAAAKYnVyblNXYXZlcwAAAAEAAAAGYW1vdW50BAAAAA1zV2F2ZXNBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAECAAAADXNXYXZlc0Fzc2V0SWQJAQAAAARCdXJuAAAAAgUAAAANc1dhdmVzQXNzZXRJZAUAAAAGYW1vdW50AQAAAApzZW5kU1dhdmVzAAAAAgAAAAlyZWNpcGllbnQAAAAGYW1vdW50BAAAAA1zV2F2ZXNBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAECAAAADXNXYXZlc0Fzc2V0SWQJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACXJlY2lwaWVudAUAAAAGYW1vdW50BQAAAA1zV2F2ZXNBc3NldElkAQAAAAlzZW5kV2F2ZXMAAAACAAAACXJlY2lwaWVudAAAAAZhbW91bnQJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACXJlY2lwaWVudAUAAAAGYW1vdW50BQAAAAR1bml0AQAAAA5zV2F2ZXNRdWFudGl0eQAAAAAEAAAAB2Fzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQIAAAANc1dhdmVzQXNzZXRJZAQAAAAHJG1hdGNoMAkAA+wAAAABBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAAFYXNzZXQFAAAAByRtYXRjaDAIBQAAAAVhc3NldAAAAAhxdWFudGl0eQkAAAIAAAABAgAAABBDYW4ndCBmaW5kIGFzc2V0AQAAAA5nZXRFeGNlc3NXYXZlcwAAAAAEAAAADWxlYXNlckFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABAgAAAA1sZWFzZXJBZGRyZXNzCAkAA+8AAAABBQAA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", "height": 2309929, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6ZAaHhj1he28UkFKT3YcTsLXLfvhizgYniWba3Rkta6x Next: D4fQUVJCGNPLJ4gUXXZ5QLPw5VAW9t1oR3QgjPhHYvgm Diff:
OldNewDifferences
159159 else {
160160 let rate = currentRate(dt)
161161 let excessWaves = getExcessWaves()
162- let growthRate = (fraction(excessWaves, precision, sWavesTotal) / dt)
163- let withdrawResult = withdraw()
164- if ((withdrawResult == withdrawResult))
165- then (lease(excessWaves) ++ setRate(rate, growthRate))
162+ if ((excessWaves == excessWaves))
163+ then {
164+ let growthRate = (fraction(excessWaves, precision, sWavesTotal) / dt)
165+ let withdrawResult = withdraw()
166+ if ((withdrawResult == withdrawResult))
167+ then (lease(excessWaves) ++ setRate(rate, growthRate))
168+ else throw("Strict value is not equal to itself.")
169+ }
166170 else throw("Strict value is not equal to itself.")
167171 }
168172 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let precision = 1000000000000000000
55
66 func keyManagerPublicKey () = getString("managerPublicKey")
77
88
99 func managerPublicKeyOrUnit () = match keyManagerPublicKey() {
1010 case s: String =>
1111 fromBase58String(s)
1212 case _: Unit =>
1313 unit
1414 case _ =>
1515 throw("Match error")
1616 }
1717
1818
1919 func mustManager (i) = {
2020 let pd = throw("permission denied")
2121 match managerPublicKeyOrUnit() {
2222 case pk: ByteVector =>
2323 if ((i.callerPublicKey == pk))
2424 then true
2525 else pd
2626 case _: Unit =>
2727 if ((i.caller == this))
2828 then true
2929 else pd
3030 case _ =>
3131 throw("Match error")
3232 }
3333 }
3434
3535
3636 func mustNotInited () = match getBoolean("inited") {
3737 case inited: Boolean =>
3838 if ((inited == false))
3939 then true
4040 else throw("Already inited")
4141 case _: Unit =>
4242 false
4343 case _ =>
4444 throw("Match error")
4545 }
4646
4747
4848 func cancelLease () = match getBinary("leaseId") {
4949 case id: ByteVector =>
5050 [LeaseCancel(id), DeleteEntry("leaseId")]
5151 case _: Unit =>
5252 nil
5353 case _ =>
5454 throw("Match error")
5555 }
5656
5757
5858 func getBalance () = valueOrElse(getInteger("balance"), 0)
5959
6060
6161 func setBalance (amount) = IntegerEntry("balance", amount)
6262
6363
6464 func lease (amount) = if ((amount == 0))
6565 then nil
6666 else {
6767 let leaserAddress = Address(fromBase58String(getStringValue("leaserAddress")))
6868 let currentAmount = getBalance()
6969 let newAmount = (currentAmount + amount)
7070 let leaseActions = if ((newAmount > 0))
7171 then {
7272 let newLease = Lease(leaserAddress, newAmount)
7373 let newLeaseId = calculateLeaseId(newLease)
7474 [newLease, BinaryEntry("leaseId", newLeaseId)]
7575 }
7676 else nil
7777 ((cancelLease() ++ leaseActions) :+ setBalance(newAmount))
7878 }
7979
8080
8181 func issueSWaves (amount) = {
8282 let sWavesAssetId = fromBase58String(getStringValue("sWavesAssetId"))
8383 Reissue(sWavesAssetId, amount, true)
8484 }
8585
8686
8787 func burnSWaves (amount) = {
8888 let sWavesAssetId = fromBase58String(getStringValue("sWavesAssetId"))
8989 Burn(sWavesAssetId, amount)
9090 }
9191
9292
9393 func sendSWaves (recipient,amount) = {
9494 let sWavesAssetId = fromBase58String(getStringValue("sWavesAssetId"))
9595 ScriptTransfer(recipient, amount, sWavesAssetId)
9696 }
9797
9898
9999 func sendWaves (recipient,amount) = ScriptTransfer(recipient, amount, unit)
100100
101101
102102 func sWavesQuantity () = {
103103 let assetId = fromBase58String(getStringValue("sWavesAssetId"))
104104 match assetInfo(assetId) {
105105 case asset: Asset =>
106106 asset.quantity
107107 case _ =>
108108 throw("Can't find asset")
109109 }
110110 }
111111
112112
113113 func getExcessWaves () = {
114114 let leaserAddress = Address(fromBase58String(getStringValue("leaserAddress")))
115115 wavesBalance(leaserAddress).regular
116116 }
117117
118118
119119 func setRate (rate,growthRate) = [IntegerEntry("lastRate", rate), IntegerEntry("lastTimestamp", lastBlock.timestamp), IntegerEntry("growthRate", growthRate)]
120120
121121
122122 func withdraw () = {
123123 let minerAddress = Address(fromBase58String(getStringValue("leaserAddress")))
124124 let result = invoke(minerAddress, "withdraw", nil, nil)
125125 if ((result == result))
126126 then result
127127 else throw("Strict value is not equal to itself.")
128128 }
129129
130130
131131 func currentRate (dt) = (getIntegerValue("lastRate") + (getIntegerValue("growthRate") * dt))
132132
133133
134134 func getCompoundTimestampDiff () = (lastBlock.timestamp - getIntegerValue("lastTimestamp"))
135135
136136
137137 @Callable(i)
138138 func init (leaserAddress) = {
139139 let checks = [mustManager(i), mustNotInited()]
140140 if ((checks == checks))
141141 then {
142142 let sWaves = Issue("sWaves", "", 0, 8, true, unit, 0)
143143 let sWavesAssetId = calculateAssetId(sWaves)
144144 [BooleanEntry("inited", true), StringEntry("sWavesAssetId", toBase58String(sWavesAssetId)), StringEntry("leaserAddress", leaserAddress), IntegerEntry("lastRate", precision), IntegerEntry("lastTimestamp", lastBlock.timestamp), IntegerEntry("growthRate", 0), IntegerEntry("balance", 0), sWaves]
145145 }
146146 else throw("Strict value is not equal to itself.")
147147 }
148148
149149
150150
151151 @Callable(i)
152152 func compound () = {
153153 let dt = getCompoundTimestampDiff()
154154 let sWavesTotal = sWavesQuantity()
155155 if (if ((dt == 0))
156156 then true
157157 else (sWavesTotal == 0))
158158 then nil
159159 else {
160160 let rate = currentRate(dt)
161161 let excessWaves = getExcessWaves()
162- let growthRate = (fraction(excessWaves, precision, sWavesTotal) / dt)
163- let withdrawResult = withdraw()
164- if ((withdrawResult == withdrawResult))
165- then (lease(excessWaves) ++ setRate(rate, growthRate))
162+ if ((excessWaves == excessWaves))
163+ then {
164+ let growthRate = (fraction(excessWaves, precision, sWavesTotal) / dt)
165+ let withdrawResult = withdraw()
166+ if ((withdrawResult == withdrawResult))
167+ then (lease(excessWaves) ++ setRate(rate, growthRate))
168+ else throw("Strict value is not equal to itself.")
169+ }
166170 else throw("Strict value is not equal to itself.")
167171 }
168172 }
169173
170174
171175
172176 @Callable(i)
173177 func stake () = {
174178 let payment = i.payments[0]
175179 if ((payment.assetId != unit))
176180 then throw("Only WAVES supported")
177181 else if ((size(i.payments) != 1))
178182 then throw("Wrong payments amount")
179183 else {
180184 let dt = getCompoundTimestampDiff()
181185 let rate = currentRate(dt)
182186 let toReissue = fraction(payment.amount, precision, rate)
183187 let result = invoke(this, "compound", nil, nil)
184188 if ((result == result))
185189 then ((lease(payment.amount) :+ issueSWaves(toReissue)) :+ sendSWaves(i.caller, toReissue))
186190 else throw("Strict value is not equal to itself.")
187191 }
188192 }
189193
190194
191195
192196 @Callable(i)
193197 func unstake () = {
194198 let payment = i.payments[0]
195199 let sWavesAssetId = fromBase58String(getStringValue("sWavesAssetId"))
196200 if ((payment.assetId != sWavesAssetId))
197201 then throw("Only sWAVES supported")
198202 else if ((size(i.payments) != 1))
199203 then throw("Wrong payments amount")
200204 else {
201205 let dt = getCompoundTimestampDiff()
202206 let rate = currentRate(dt)
203207 let transferAmount = fraction(payment.amount, rate, precision)
204208 let result = invoke(this, "compound", nil, nil)
205209 if ((result == result))
206210 then ((lease(-(transferAmount)) :+ burnSWaves(payment.amount)) :+ sendWaves(i.caller, transferAmount))
207211 else throw("Strict value is not equal to itself.")
208212 }
209213 }
210214
211215
212216 @Verifier(tx)
213217 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
214218

github/deemru/w8io/169f3d6 
51.31 ms