tx · HLcDSYguKSprwDfD35bGfWZYS2uaB18kJw3DA7tn7aUn

3PNbBGH1omxP5yMewxvDcuLrb4RAKgKt1uD:  -0.00900000 Waves

2022.07.18 18:23 [3210913] smart account 3PNbBGH1omxP5yMewxvDcuLrb4RAKgKt1uD > SELF 0.00000000 Waves

{ "type": 13, "id": "HLcDSYguKSprwDfD35bGfWZYS2uaB18kJw3DA7tn7aUn", "fee": 900000, "feeAssetId": null, "timestamp": 1658157816759, "version": 2, "chainId": 87, "sender": "3PNbBGH1omxP5yMewxvDcuLrb4RAKgKt1uD", "senderPublicKey": "2LSzvnP35jSjvLYXs8xfXuNbz3J5vtLhvHoXgSxSV1QV", "proofs": [ "5YwEkkt4nDEj3XvtDtC7E3p2mgFnSepy6wSq55ude8RuLTC1w2db8GJeF8CLC9iXQkTLxd1ngpoXb9ETti394NYQ" ], "script": "base64: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", "height": 3210913, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2opTtHRxHqEd6QVtSJj7nV2X2oZP6AjoDw2d13SG4Hw7 Next: 89F3wK8J6zaPNvQ9Bn2LiHxCB4F2C51xRHhCFtEyVLXY Diff:
OldNewDifferences
111111 else {
112112 let invoker = toString(i.caller)
113113 let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
114- if ((artefactId == ""))
115- then throw(("You didnt stake " + artefactName))
116- else {
117- let boostDuck = if ((artefactName == "ART-LAKE"))
118- then invoke(getItemsAddress(), "manipulateBoostAccount", [-2, invoker], nil)
119- else if ((artefactName == "ART-XTREE"))
120- then invoke(getItemsAddress(), "manipulateBoostAccount", [-3, invoker], nil)
121- else nil
122- if ((boostDuck == boostDuck))
123- then [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
124- else throw("Strict value is not equal to itself.")
125- }
114+ if ((artefactId == "ART-XSOCK"))
115+ then throw("You can not unstake ART-XSOCK anymore")
116+ else if ((artefactId == ""))
117+ then throw(("You didnt stake " + artefactName))
118+ else {
119+ let boostDuck = if ((artefactName == "ART-LAKE"))
120+ then invoke(getItemsAddress(), "manipulateBoostAccount", [-2, invoker], nil)
121+ else if ((artefactName == "ART-XTREE"))
122+ then invoke(getItemsAddress(), "manipulateBoostAccount", [-3, invoker], nil)
123+ else nil
124+ if ((boostDuck == boostDuck))
125+ then [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
126+ else throw("Strict value is not equal to itself.")
127+ }
126128 }
127129
128130
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
55
66
77 func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
88
99
1010 let stakeable = ["ART-LAKE", "ART-XTREE", "ART-XSOCK", "ART-XMISTL"]
1111
1212 func tryGetString (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func tryGetInteger (key) = match getInteger(this, key) {
2121 case a: Int =>
2222 a
2323 case _ =>
2424 0
2525 }
2626
2727
2828 func tryGetStringExternal (address,key) = match getString(address, key) {
2929 case a: String =>
3030 a
3131 case _ =>
3232 ""
3333 }
3434
3535
3636 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
3737
3838
3939 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
4040
4141
4242 func asString (value) = match value {
4343 case string: String =>
4444 string
4545 case _ =>
4646 throw("wrong type, expected: String")
4747 }
4848
4949
5050 func asInt (value) = match value {
5151 case int: Int =>
5252 int
5353 case _ =>
5454 throw("wrong type, expected: Int")
5555 }
5656
5757
5858 func itemIsInCoolDown (artefactName,artefactId) = {
5959 let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId))
6060 let cooldownPeriod = 240
6161 if ((height > (unstakeHeightLast + cooldownPeriod)))
6262 then false
6363 else true
6464 }
6565
6666
6767 @Callable(i)
6868 func configureOracle (oracle) = if ((i.caller != this))
6969 then throw("admin only")
7070 else [StringEntry("static_oracleAddress", oracle)]
7171
7272
7373
7474 @Callable(i)
7575 func stakeItem () = if (!(if ((size(i.payments) == 1))
7676 then (i.payments[0].amount == 1)
7777 else false))
7878 then throw("Invalid payment")
7979 else {
8080 let assetId = value(i.payments[0].assetId)
8181 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
8282 if ((artefactName == artefactName))
8383 then if (!(containsElement(stakeable, artefactName)))
8484 then throw("You can't stake this artafect")
8585 else if (itemIsInCoolDown(artefactName, toBase58String(assetId)))
8686 then throw("Item can't be staked yet, it's in cooldown")
8787 else {
8888 let invoker = toString(i.caller)
8989 let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
9090 if ((artefactId != ""))
9191 then throw(("You are already staking " + artefactName))
9292 else {
9393 let boostDuck = if ((artefactName == "ART-LAKE"))
9494 then invoke(getItemsAddress(), "manipulateBoostAccount", [2, invoker], nil)
9595 else if ((artefactName == "ART-XTREE"))
9696 then invoke(getItemsAddress(), "manipulateBoostAccount", [3, invoker], nil)
9797 else nil
9898 if ((boostDuck == boostDuck))
9999 then [StringEntry(keyArtefactOwner(artefactName, invoker), toBase58String(assetId))]
100100 else throw("Strict value is not equal to itself.")
101101 }
102102 }
103103 else throw("Strict value is not equal to itself.")
104104 }
105105
106106
107107
108108 @Callable(i)
109109 func unstakeItem (artefactName) = if (!(containsElement(stakeable, artefactName)))
110110 then throw("This artefact doesn't exist")
111111 else {
112112 let invoker = toString(i.caller)
113113 let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
114- if ((artefactId == ""))
115- then throw(("You didnt stake " + artefactName))
116- else {
117- let boostDuck = if ((artefactName == "ART-LAKE"))
118- then invoke(getItemsAddress(), "manipulateBoostAccount", [-2, invoker], nil)
119- else if ((artefactName == "ART-XTREE"))
120- then invoke(getItemsAddress(), "manipulateBoostAccount", [-3, invoker], nil)
121- else nil
122- if ((boostDuck == boostDuck))
123- then [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
124- else throw("Strict value is not equal to itself.")
125- }
114+ if ((artefactId == "ART-XSOCK"))
115+ then throw("You can not unstake ART-XSOCK anymore")
116+ else if ((artefactId == ""))
117+ then throw(("You didnt stake " + artefactName))
118+ else {
119+ let boostDuck = if ((artefactName == "ART-LAKE"))
120+ then invoke(getItemsAddress(), "manipulateBoostAccount", [-2, invoker], nil)
121+ else if ((artefactName == "ART-XTREE"))
122+ then invoke(getItemsAddress(), "manipulateBoostAccount", [-3, invoker], nil)
123+ else nil
124+ if ((boostDuck == boostDuck))
125+ then [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
126+ else throw("Strict value is not equal to itself.")
127+ }
126128 }
127129
128130
129131 @Verifier(tx)
130132 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
131133

github/deemru/w8io/3ef1775 
32.83 ms