tx · BZ6nvQ7EsEmUFwXB9b6GNpFZN62Bsor3MBWmoeUyyKyW

3PMrcFXJx23B9zbxxUT49z6ET6wF2dKfTdW:  -0.01000000 Waves

2022.05.03 14:14 [3100893] smart account 3PMrcFXJx23B9zbxxUT49z6ET6wF2dKfTdW > SELF 0.00000000 Waves

{ "type": 13, "id": "BZ6nvQ7EsEmUFwXB9b6GNpFZN62Bsor3MBWmoeUyyKyW", "fee": 1000000, "feeAssetId": null, "timestamp": 1651576458635, "version": 1, "sender": "3PMrcFXJx23B9zbxxUT49z6ET6wF2dKfTdW", "senderPublicKey": "DCwRjW98gZsAvKFLyK4sgrn1zwQWLok27vhfYxz4Cok5", "proofs": [ "5ghV7raJFe1oW4XXRp7JR5Hmo8t7zQ6fNtLmY8Qtd2a6yQsLnZUsqVSa2y1Pk5sKvejHcrMwXkpbfZN5ZfbkAuDd" ], "script": "base64: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biB1c2VycyBiZWhhbGYGCQAAAgAAAAECAAAADGludmFsaWQgdXNlcgAAAAANY3VycmVudFN0YWtlZAQAAAAMc3Rha2VkSGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEXN0YWtlZEhlaWdodFN0b3JlAAAAAAAAAAAABAAAAAZzdGFrZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAALc3Rha2VkU3RvcmUAAAAAAAAAAAAEAAAAAWQJAABlAAAAAgUAAAAGSEVJR0hUBQAAAAxzdGFrZWRIZWlnaHQEAAAAAXIJAABkAAAAAgUAAAAFUkJhc2UJAABoAAAAAgUAAAABZAUAAAAJUlBlckJsb2NrCQAAawAAAAMFAAAABnN0YWtlZAUAAAABcgUAAAAFUkJhc2UBAAAADXZpcmVzVG9TaGFyZXMAAAABAAAAC3ZpcmVzQW1vdW50BAAAAAt0b3RhbFNoYXJlcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABB0b3RhbFNoYXJlc1N0b3JlAAAAAAAAAAAAAwkAAAAAAAACBQAAAAt0b3RhbFNoYXJlcwAAAAAAAAAAAAUAAAALdmlyZXNBbW91bnQJAABrAAAAAwUAAAALdmlyZXNBbW91bnQFAAAAC3RvdGFsU2hhcmVzBQAAAA1jdXJyZW50U3Rha2VkAQAAAA1zaGFyZXNUb1ZpcmVzAAAAAQAAAAxzaGFyZXNBbW91bnQEAAAAC3RvdGFsU2hhcmVzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEHRvdGFsU2hhcmVzU3RvcmUAAAAAAAAAAAADCQAAAAAAAAIFAAAAC3RvdGFsU2hhcmVzAAAAAAAAAAAABQAAAAxzaGFyZXNBbW91bnQJAABrAAAAAwUAAAAMc2hhcmVzQW1vdW50BQAAAA1jdXJyZW50U3Rha2VkBQAAAAt0b3RhbFNoYXJlcwEAAAASZW5zdXJlVmlyZXNCYWxhbmNlAAAAAQAAAAZhbW91bnQEAAAADHZpcmVzQmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAAx2aXJlc0Fzc2V0SWQDCQAA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aXRlSW50AAAAAgUAAAARc3Rha2VkSGVpZ2h0U3RvcmUFAAAABkhFSUdIVAkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACBQAAABB0b3RhbFNoYXJlc1N0b3JlBQAAAAxzaGFyZXNBbW91bnQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgkBAAAAD3VzZXJTaGFyZXNTdG9yZQAAAAEFAAAABHVzZXIFAAAADHNoYXJlc0Ftb3VudAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAx1bnN0YWtlVmlyZXMAAAACAAAABHVzZXIAAAAUYW1vdW50VmlyZXNUb1Vuc3Rha2UEAAAABmNoZWNrcwMJAQAAAAl2YWxpZFVzZXIAAAACBQAAAAFpBQAAAAR1c2VyCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAANdW5zdGFrZV92aXJlcwcDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAp1c2VyU2hhcmVzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAA91c2VyU2hhcmVzU3RvcmUAAAABBQAAAAR1c2VyAAAAAAAAAAAAAwkAAAAAAAACBQAAAAp1c2VyU2hhcmVzAAAAAAAAAAAACQAAAgAAAAECAAAAEm5vdGhpbmcgdG8gdW5zdGFrZQQAAAAMbWF4QXZhaWxhYmxlCQEAAAANc2hhcmVzVG9WaXJlcwAAAAEFAAAACnVzZXJTaGFyZXMEAAAABmFtb3VudAMJAAAAAAAAAgUAAAAUYW1vdW50VmlyZXNUb1Vuc3Rha2UA//////////8FAAAADG1heEF2YWlsYWJsZQUAAAAUYW1vdW50VmlyZXNUb1Vuc3Rha2UDCQAAZgAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAkAAAIAAAABAgAAAB5jYW5ub3QgdW5zdGFrZSBuZWdhdGl2ZSBhbW91bnQDCQAAZgAAAAIFAAAABmFtb3VudAUAAAAMbWF4QXZhaWxhYmxlCQAAAgAAAAECAAAAIWNhbm5vdCB1bnN0YWtlIG1vcmUgdGhhbiB5b3UgaGF2ZQQAAAAMc2hhcmVzQW1vdW50CQABlwAAAAEJAARMAAAAAgkBAAAADXZpcmVzVG9TaGFyZXMAAAABBQAAAAZhbW91bnQJAARMAAAAAgUAAAAKdXNlclNoYXJlcwUAAAADbmlsAwkAAAAAAAACBQAAAAxzaGFyZXNBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAXY2Fubm90IHVuc3Rha2UgMCBzaGFyZXMJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAALc3Rha2VkU3RvcmUJAABlAAAAAgUAAAANY3VycmVudFN0YWtlZAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAEXN0YWtlZEhlaWdodFN0b3JlBQAAAAZIRUlHSFQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgUAAAAQdG90YWxTaGFyZXNTdG9yZQkBAAAAAS0AAAABBQAAAAxzaGFyZXNBbW91bnQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgkBAAAAD3VzZXJTaGFyZXNTdG9yZQAAAAEFAAAABHVzZXIJAQAAAAEtAAAAAQUAAAAMc2hhcmVzQW1vdW50CQAETAAAAAIJAQAAAAZwYXlvdXQAAAACBQAAAAR1c2VyBQAAAAZhbW91bnQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAATdW5zdGFrZUFsbFZpcmVzRnJvbQAAAAEAAAAEdXNlcgQAAAAGY2hlY2tzAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABG1haW4JAQAAAAlvcEFsbG93ZWQAAAABAgAAAA11bnN0YWtlX3ZpcmVzBwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACnVzZXJTaGFyZXMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAD3VzZXJTaGFyZXNTdG9yZQAAAAEFAAAABHVzZXIAAAAAAAAAAAAEAAAADXVuc3Rha2VBbW91bnQJAQAAAA1zaGFyZXNUb1ZpcmVzAAAAAQUAAAAKdXNlclNoYXJlcwkABRQAAAACCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAC3N0YWtlZFN0b3JlCQAAZQAAAAIFAAAADWN1cnJlbnRTdGFrZWQFAAAADXVuc3Rha2VBbW91bnQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAARc3Rha2VkSGVpZ2h0U3RvcmUFAAAABkhFSUdIVAkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACBQAAABB0b3RhbFNoYXJlc1N0b3JlCQEAAAABLQAAAAEFAAAACnVzZXJTaGFyZXMJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgkBAAAAD3VzZXJTaGFyZXNTdG9yZQAAAAEFAAAABHVzZXIJAQAAAAEtAAAAAQUAAAAKdXNlclNoYXJlcwkABEwAAAACCQEAAAAGcGF5b3V0AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAADXVuc3Rha2VBbW91bnQFAAAAA25pbAUAAAANdW5zdGFrZUFtb3VudAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAAcn5KTA==", "chainId": 87, "height": 3100893, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E3YLgiJaTSyXvRiTTAwRfpEqpgNV79KsKHAjovfCat1 Next: none Diff:
OldNewDifferences
5050
5151 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, minterStore), "vires-staker: no viresMinter")), "invalid viresMinter")
5252
53-let main = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "main"), "no main")), "invalid main")
53+let main = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(configAddress, "main"), "no main"), "|")[0]), "invalid main")
5454
5555 let viresIdStr = valueOrErrorMessage(getString(viresMinter, viresAssetIdStore), "vires assetId not found")
5656
7070
7171 func validUser (i,user) = match addressFromString(user) {
7272 case a: Address =>
73- if (if ((i.caller == main))
73+ if (if (contains(getStringValue(configAddress, "main"), toString(i.caller)))
7474 then true
7575 else (toString(i.caller) == user))
7676 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func writeInt (key,value) = if ((0 > value))
55 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
66 else IntegerEntry(key, value)
77
88
99 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
1010
1111
1212 func userSharesStore (user) = (user + "_shares")
1313
1414
1515 let stakedHeightStore = "stakedHeight"
1616
1717 let totalSharesStore = "totalShares"
1818
1919 let stakedStore = "staked"
2020
2121 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
2222 then StringEntry(key, value)
2323 else throw(("already initialized: " + key))
2424
2525
2626 let viresAssetIdStore = "assetId"
2727
2828 let minterStore = "vires_minter"
2929
3030 let configStore = "config"
3131
3232 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configStore), "vires-staker: no configAddress")), "invalid config address")
3333
3434 let maybeOracleAddress = match getString(configAddress, "oracle_address") {
3535 case s: String =>
3636 addressFromString(s)
3737 case _ =>
3838 unit
3939 }
4040
4141 let HEIGHT = height
4242
4343 let RBase = 10000000000000000
4444
4545 let apr = valueOrErrorMessage(getInteger(configAddress, "vires_staker_apr"), "no vires_staker_apr")
4646
4747 let blocksPerYear = ((365 * 24) * 60)
4848
4949 let RPerBlock = fraction(apr, RBase, (1000 * blocksPerYear))
5050
5151 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, minterStore), "vires-staker: no viresMinter")), "invalid viresMinter")
5252
53-let main = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "main"), "no main")), "invalid main")
53+let main = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(configAddress, "main"), "no main"), "|")[0]), "invalid main")
5454
5555 let viresIdStr = valueOrErrorMessage(getString(viresMinter, viresAssetIdStore), "vires assetId not found")
5656
5757 let viresAssetId = valueOrErrorMessage(fromBase58String(viresIdStr), "invalid vires assetId")
5858
5959 func throwIf (condition,error) = if (condition)
6060 then throw(error)
6161 else true
6262
6363
6464 func viresPaymentOnly (i) = if (throwIf((0 >= i.payments[0].amount), "staking zero amount"))
6565 then throwIf(if ((i.payments[0].assetId != viresAssetId))
6666 then true
6767 else (size(i.payments) != 1), "staking only vires")
6868 else false
6969
7070
7171 func validUser (i,user) = match addressFromString(user) {
7272 case a: Address =>
73- if (if ((i.caller == main))
73+ if (if (contains(getStringValue(configAddress, "main"), toString(i.caller)))
7474 then true
7575 else (toString(i.caller) == user))
7676 then true
7777 else if ((i.caller != a))
7878 then throw("only main can do on users behalf")
7979 else true
8080 case _ =>
8181 throw("invalid user")
8282 }
8383
8484
8585 let currentStaked = {
8686 let stakedHeight = valueOrElse(getInteger(this, stakedHeightStore), 0)
8787 let staked = valueOrElse(getInteger(this, stakedStore), 0)
8888 let d = (HEIGHT - stakedHeight)
8989 let r = (RBase + (d * RPerBlock))
9090 fraction(staked, r, RBase)
9191 }
9292
9393 func viresToShares (viresAmount) = {
9494 let totalShares = valueOrElse(getInteger(this, totalSharesStore), 0)
9595 if ((totalShares == 0))
9696 then viresAmount
9797 else fraction(viresAmount, totalShares, currentStaked)
9898 }
9999
100100
101101 func sharesToVires (sharesAmount) = {
102102 let totalShares = valueOrElse(getInteger(this, totalSharesStore), 0)
103103 if ((totalShares == 0))
104104 then sharesAmount
105105 else fraction(sharesAmount, currentStaked, totalShares)
106106 }
107107
108108
109109 func ensureViresBalance (amount) = {
110110 let viresBalance = assetBalance(this, viresAssetId)
111111 if ((amount > viresBalance))
112112 then {
113113 let mint = invoke(viresMinter, "stakerMint", [toString(this), (amount - viresBalance)], nil)
114114 if ((mint == mint))
115115 then nil
116116 else throw("Strict value is not equal to itself.")
117117 }
118118 else nil
119119 }
120120
121121
122122 func payout (user,amount) = {
123123 let ensure = ensureViresBalance(amount)
124124 if ((ensure == ensure))
125125 then ScriptTransfer(addressFromStringValue(user), amount, viresAssetId)
126126 else throw("Strict value is not equal to itself.")
127127 }
128128
129129
130130 func opAllowed (op) = match invoke(configAddress, "opAllowed", [viresIdStr, op], nil) {
131131 case b: Boolean =>
132132 if (b)
133133 then true
134134 else throw("not allowed")
135135 case _ =>
136136 throw("opAllowed: unexpected result type")
137137 }
138138
139139
140140 @Callable(i)
141141 func advise () = {
142142 let totalShares = valueOrElse(getInteger(this, totalSharesStore), 0)
143143 let totalStaked = sharesToVires(totalShares)
144144 $Tuple2(nil, ("totalStaked: " + toString(totalStaked)))
145145 }
146146
147147
148148
149149 @Callable(i)
150150 func adviseUser (user) = {
151151 let userShares = valueOrElse(getInteger(this, userSharesStore(user)), 0)
152152 let available = sharesToVires(userShares)
153153 $Tuple2(nil, ((("viresStakedShares: " + toString(userShares)) + ", viresStaked: ") + toString(available)))
154154 }
155155
156156
157157
158158 @Callable(i)
159159 func init (configAddress) = [writeConstString(configStore, configAddress)]
160160
161161
162162
163163 @Callable(i)
164164 func stakeVires (user) = {
165165 let checks = if (if (viresPaymentOnly(i))
166166 then validUser(i, user)
167167 else false)
168168 then opAllowed("stake_vires")
169169 else false
170170 if ((checks == checks))
171171 then {
172172 let amount = i.payments[0].amount
173173 let sharesAmount = viresToShares(amount)
174174 [writeInt(stakedStore, (currentStaked + amount)), writeInt(stakedHeightStore, HEIGHT), changeBy(totalSharesStore, sharesAmount), changeBy(userSharesStore(user), sharesAmount)]
175175 }
176176 else throw("Strict value is not equal to itself.")
177177 }
178178
179179
180180
181181 @Callable(i)
182182 func unstakeVires (user,amountViresToUnstake) = {
183183 let checks = if (validUser(i, user))
184184 then opAllowed("unstake_vires")
185185 else false
186186 if ((checks == checks))
187187 then {
188188 let userShares = valueOrElse(getInteger(this, userSharesStore(user)), 0)
189189 if ((userShares == 0))
190190 then throw("nothing to unstake")
191191 else {
192192 let maxAvailable = sharesToVires(userShares)
193193 let amount = if ((amountViresToUnstake == -1))
194194 then maxAvailable
195195 else amountViresToUnstake
196196 if ((0 > amount))
197197 then throw("cannot unstake negative amount")
198198 else if ((amount > maxAvailable))
199199 then throw("cannot unstake more than you have")
200200 else {
201201 let sharesAmount = min([viresToShares(amount), userShares])
202202 if ((sharesAmount == 0))
203203 then throw("cannot unstake 0 shares")
204204 else [writeInt(stakedStore, (currentStaked - amount)), writeInt(stakedHeightStore, HEIGHT), changeBy(totalSharesStore, -(sharesAmount)), changeBy(userSharesStore(user), -(sharesAmount)), payout(user, amount)]
205205 }
206206 }
207207 }
208208 else throw("Strict value is not equal to itself.")
209209 }
210210
211211
212212
213213 @Callable(i)
214214 func unstakeAllViresFrom (user) = {
215215 let checks = if ((i.caller == main))
216216 then opAllowed("unstake_vires")
217217 else false
218218 if ((checks == checks))
219219 then {
220220 let userShares = valueOrElse(getInteger(this, userSharesStore(user)), 0)
221221 let unstakeAmount = sharesToVires(userShares)
222222 $Tuple2([writeInt(stakedStore, (currentStaked - unstakeAmount)), writeInt(stakedHeightStore, HEIGHT), changeBy(totalSharesStore, -(userShares)), changeBy(userSharesStore(user), -(userShares)), payout(toString(i.caller), unstakeAmount)], unstakeAmount)
223223 }
224224 else throw("Strict value is not equal to itself.")
225225 }
226226
227227

github/deemru/w8io/3ef1775 
36.29 ms