tx · 5FQdBKvun9QA7cYwSGdEHKyT814iY5NaHsqaXx8SQ2NG

3NBGYJLwHsU6eJXLi74dB8cBbMfiTS2cTtu:  -0.01400000 Waves

2022.05.19 16:36 [2058613] smart account 3NBGYJLwHsU6eJXLi74dB8cBbMfiTS2cTtu > SELF 0.00000000 Waves

{ "type": 13, "id": "5FQdBKvun9QA7cYwSGdEHKyT814iY5NaHsqaXx8SQ2NG", "fee": 1400000, "feeAssetId": null, "timestamp": 1652967406970, "version": 2, "chainId": 84, "sender": "3NBGYJLwHsU6eJXLi74dB8cBbMfiTS2cTtu", "senderPublicKey": "DqoxVw7QE15hy21jZuVxZXM9E7WXmheH1up4dwp57Yb8", "proofs": [ "3mReLPzA7aVcmH8ykRJ6L4WyFEAaajugAkSVBd3EPp64Kme63PJKindLXa27WP4nBdxirXpyiNhVnhjxSoXGNepr" ], "script": "base64:AAIFAAAAAAAAABQIAhIAEgMKAQgSABIDCgEBEgASAAAAAA8AAAAACW9yYWNsZUtleQIAAAAJb3JhY2xlS2V5AAAAAAVTY2FsZQAAAAAAAA9CQAEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAAAAAAZvcmFjbGUJAQAAAAx0cnlHZXRTdHJpbmcAAAABBQAAAAlvcmFjbGVLZXkAAAAACW9yYWNsZUZlZQkBAAAABXZhbHVlAAAAAQkABCYAAAABBQAAAAZvcmFjbGUBAAAAGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAACW9yYWNsZUZlZQUAAAADa2V5AgAAAB9JbnRlZ2VyIHVuZGVmaW5lIG9yIDAgaW4gb3JhY2xlAAAAAA1TY29uZXhBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAACW9yYWNsZUZlZQIAAAANU2NvbmV4QXNzZXRJZAAAAAAQY3VycmVudEZlZVNjb25leAkBAAAAGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUAAAABCQABLAAAAAICAAAABGZlZV8JAAJYAAAAAQUAAAANU2NvbmV4QXNzZXRJZAAAAAAJc3Rha2VEYXBwCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAlvcmFjbGVGZWUCAAAACXN0YWtlRGFwcAIAAAAUc2NvbmV4RGFwcCBub3QgZm91bmQBAAAAC2NsYWltUmVzdWx0AAAAAQAAAAdhZGRyZXNzBAAAAAphZGRyZXNzU3RyCQAEJQAAAAEFAAAAB2FkZHJlc3MEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAACBnbG9iYWxfbGFzdENoZWNrX1NDT05FWF9pbnRlcmVzdAQAAAARbGFzdENoZWNrSW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAABpfbGFzdENoZWNrX1NDT05FWF9pbnRlcmVzdAQAAAAMc3Rha2VkQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAKYWRkcmVzc1N0cgIAAAAOX1NDT05FWF9zdGFrZWQEAAAABnJld2FyZAMJAABmAAAAAgUAAAARbGFzdENoZWNrSW50ZXJlc3QAAAAAAAAAAAAJAABrAAAAAwkAAGUAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAAEWxhc3RDaGVja0ludGVyZXN0BQAAAAxzdGFrZWRBbW91bnQFAAAABVNjYWxlAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAAGl9sYXN0Q2hlY2tfU0NPTkVYX2ludGVyZXN0BQAAAA9jdXJyZW50SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAKYWRkcmVzc1N0cgIAAAAPX1NDT05FWF9jbGFpbWVkCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAA9fU0NPTkVYX2NsYWltZWQFAAAABnJld2FyZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdhZGRyZXNzBQAAAAZyZXdhcmQFAAAADVNjb25leEFzc2V0SWQFAAAAA25pbAEAAAAJaXNQYXltZW50AAAAAQAAAAFpAwkBAAAAAiE9AAAAAgkAAZAAAAABBQAAAAFpAAAAAAAAAAABCQAAAgAAAAECAAAAF1dyb25nIHBheW1lbnRzIGF0dGFjaGVkBAAAAAdwYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIFAAAAAWkAAAAAAAAAAAAEAAAABmFtb3VudAkBAAAABXZhbHVlAAAAAQgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAFFAAAAAIFAAAAB3BheW1lbnQFAAAABmFtb3VudAEAAAAPdmFsaWRhdGVQYXltZW50AAAAAQAAAAFpBAAAAAp0MDg5ODI5MDE4CQEAAAAJaXNQYXltZW50AAAAAQUAAAABaQQAAAAHcGF5bWVudAgFAAAACnQwODk4MjkwMTgAAAACXzEEAAAABmFtb3VudAgFAAAACnQwODk4MjkwMTgAAAACXzIEAAAAB2Fzc2V0SWQDAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAAAAAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAANU2NvbmV4QXNzZXRJZAcIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAABU9ubHkgCQACWAAAAAEFAAAADVNjb25leEFzc2V0SWQCAAAAIiB0b2tlbiBhY2NlcHRlZCBhcyB0cmFuc2FjdGlvbiBmZWUDCQEAAAACIT0AAAACBQAAAAZhbW91bnQFAAAAEGN1cnJlbnRGZWVTY29uZXgJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAZUGF5bWVudCBhbW91bnQgc2hvdWxkIGJlIAkAAaQAAAABBQAAABBjdXJyZW50RmVlU2NvbmV4AgAAAAkgYnV0IGlzOiAJAAGkAAAAAQUAAAAGYW1vdW50CQAFFAAAAAIFAAAABmFtb3VudAUAAAAHYXNzZXRJZAEAAAATdG9wVXBSZXdhcmRJbnRlcm5hbAAAAAEAAAABaQQAAAAGYW1vdW50CQAAawAAAAMICQABkQAAAAIFAAAAAWkAAAAAAAAAAAAAAAAGYW1vdW50AAAAAAAAAAAJAAAAAAAAAAAKBAAAAA9jdXJyZW50SW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAgZ2xvYmFsX2xhc3RDaGVja19TQ09ORVhfaW50ZXJlc3QEAAAAEXRvdGFsU3Rha2VkQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADWdsb2JhbF9zdGFrZWQEAAAADWludGVyZXN0RGVsdGEDCQAAZgAAAAIFAAAAEXRvdGFsU3Rha2VkQW1vdW50AAAAAAAAAAAACQAAawAAAAMFAAAABmFtb3VudAUAAAAFU2NhbGUFAAAAEXRvdGFsU3Rha2VkQW1vdW50AAAAAAAAAAAAAwkBAAAAAiE9AAAAAggJAAGRAAAAAgUAAAABaQAAAAAAAAAAAAAAAAdhc3NldElkBQAAAA1TY29uZXhBc3NldElkCQAAAgAAAAECAAAAFHdyb25nIGFzc2V0IGF0dGFjaGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABZnbG9iYWxfU0NPTkVYX2Vhcm5pbmdzCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAWZ2xvYmFsX1NDT05FWF9lYXJuaW5ncwUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAACBnbG9iYWxfbGFzdENoZWNrX1NDT05FWF9pbnRlcmVzdAkAAGQAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAADWludGVyZXN0RGVsdGEFAAAAA25pbAEAAAAhdmFsaWRhdGVBbmRQcm9jZXNzUGF5bWVudEludGVybmFsAAAAAQAAAAFpBAAAAAZ2YWxpZFAJAQAAAA92YWxpZGF0ZVBheW1lbnQAAAABBQAAAAFpBAAAAAdhbW91bnRQCAUAAAAGdmFsaWRQAAAAAl8xBAAAAAhhc3NldElkUAgFAAAABnZhbGlkUAAAAAJfMgMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAB2Ftb3VudFAJAAACAAAAAQIAAAAUU29tZXRoaW5nIHdlbnQgd3JvbmcJAQAAABN0b3BVcFJld2FyZEludGVybmFsAAAAAQUAAAABaQAAAAYAAAABaQEAAAAZdmFsaWRhdGVBbmRQcm9jZXNzUGF5bWVudAAAAAAJAQAAACF2YWxpZGF0ZUFuZFByb2Nlc3NQYXltZW50SW50ZXJuYWwAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAFpAQAAAAhpbml0RGFwcAAAAAEAAAAHZGFwcEtleQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uAwkBAAAAAiE9AAAAAgUAAAAGb3JhY2xlAgAAAAAJAAACAAAAAQIAAAAnb3JhY2xlIGFscmVhZHkgc2V0LCB5b3UgY2FuJ3Qgb3ZlcnJpZGUhCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACW9yYWNsZUtleQUAAAAHZGFwcEtleQUAAAADbmlsAAAAAWkBAAAABXN0YWtlAAAAAAQAAAALcGF5bWVudERhdGEJAQAAACF2YWxpZGF0ZUFuZFByb2Nlc3NQYXltZW50SW50ZXJuYWwAAAABCAUAAAABaQAAAAhwYXltZW50cwQAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAZhbW91bnQEAAAACmFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABF0b3RhbFN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAA1nbG9iYWxfc3Rha2VkAwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAHYXNzZXRJZAUAAAANU2NvbmV4QXNzZXRJZAkAAAIAAAABAgAAABR3cm9uZyBhc3NldCBhdHRhY2hlZAkABE4AAAACCQAETgAAAAIJAQAAAAtjbGFpbVJlc3VsdAAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAANZ2xvYmFsX3N0YWtlZAkAAGQAAAACBQAAABF0b3RhbFN0YWtlZEFtb3VudAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADl9TQ09ORVhfc3Rha2VkCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAA5fU0NPTkVYX3N0YWtlZAUAAAAGYW1vdW50BQAAAANuaWwFAAAAC3BheW1lbnREYXRhAAAAAWkBAAAAB3VuU3Rha2UAAAABAAAABmFtb3VudAQAAAALcGF5bWVudERhdGEJAQAAACF2YWxpZGF0ZUFuZFByb2Nlc3NQYXltZW50SW50ZXJuYWwAAAABCAUAAAABaQAAAAhwYXltZW50cwQAAAAKYWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADHN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADl9TQ09ORVhfc3Rha2VkAwkAAGYAAAACBQAAAAZhbW91bnQFAAAADHN0YWtlZEFtb3VudAkAAAIAAAABAgAAAB95b3UgZG9uJ3QgaGF2ZSB0b2tlbnMgYXZhaWxhYmxlCQAETgAAAAIJAAROAAAAAgkBAAAAC2NsYWltUmVzdWx0AAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADl9TQ09ORVhfc3Rha2VkCQAAZQAAAAIFAAAADHN0YWtlZEFtb3VudAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA1nbG9iYWxfc3Rha2VkCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAANZ2xvYmFsX3N0YWtlZAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAGYW1vdW50BQAAAA1TY29uZXhBc3NldElkBQAAAANuaWwFAAAAC3BheW1lbnREYXRhAAAAAWkBAAAAC2NsYWltUmV3YXJkAAAAAAkABE4AAAACCQEAAAAhdmFsaWRhdGVBbmRQcm9jZXNzUGF5bWVudEludGVybmFsAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMJAQAAAAtjbGFpbVJlc3VsdAAAAAEIBQAAAAFpAAAABmNhbGxlcgAAAAFpAQAAAAt0b3BVcFJld2FyZAAAAAAJAQAAABN0b3BVcFJld2FyZEludGVybmFsAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleewMVuc=", "height": 2058613, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4uDHRyaYN55YQ2Cohjd94REj9PTdUmk4gzdGBVxd9be2 Next: HS7TMP8Z27kRBRCVBNfDEcW8TPwZG7ycsKgBErGQXMsN Diff:
OldNewDifferences
4646 }
4747
4848
49-func isPayment (i) = if ((size(i.payments) != 1))
49+func isPayment (i) = if ((size(i) != 1))
5050 then throw("Wrong payments attached")
5151 else {
52- let payment = value(i.payments[0])
52+ let payment = value(i[0])
5353 let amount = value(payment.amount)
5454 $Tuple2(payment, amount)
5555 }
7070 }
7171
7272
73-@Callable(i)
74-func validateAndProcessPayment () = {
73+func topUpRewardInternal (i) = {
74+ let amount = fraction(i[0].amount, 9, 10)
75+ let currentInterest = tryGetInteger("global_lastCheck_SCONEX_interest")
76+ let totalStakedAmount = tryGetInteger("global_staked")
77+ let interestDelta = if ((totalStakedAmount > 0))
78+ then fraction(amount, Scale, totalStakedAmount)
79+ else 0
80+ if ((i[0].assetId != SconexAssetId))
81+ then throw("wrong asset attached")
82+ else [IntegerEntry("global_SCONEX_earnings", (tryGetInteger("global_SCONEX_earnings") + amount)), IntegerEntry("global_lastCheck_SCONEX_interest", (currentInterest + interestDelta))]
83+ }
84+
85+
86+func validateAndProcessPaymentInternal (i) = {
7587 let validP = validatePayment(i)
7688 let amountP = validP._1
7789 let assetIdP = validP._2
7890 if (!(isDefined(amountP)))
7991 then throw("Something went wrong")
80- else {
81- let invokeTeamFeeSplit = invoke(valueOrErrorMessage(stakeDapp, "stakeDapp not found"), "topUpReward", nil, [AttachedPayment(assetIdP, amountP)])
82- if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
83- then nil
84- else throw("Strict value is not equal to itself.")
85- }
92+ else topUpRewardInternal(i)
8693 }
94+
95+
96+@Callable(i)
97+func validateAndProcessPayment () = validateAndProcessPaymentInternal(i.payments)
8798
8899
89100
98109
99110 @Callable(i)
100111 func stake () = {
101- let validateAndProcessPaymentInvoke = invoke(valueOrErrorMessage(this, "this not found"), "validateAndProcessPayment", nil, [i.payments[0]])
102- if ((validateAndProcessPaymentInvoke == validateAndProcessPaymentInvoke))
103- then {
104- let amount = i.payments[1].amount
105- let addressStr = toString(i.caller)
106- let totalStakedAmount = tryGetInteger("global_staked")
107- if ((i.payments[1].assetId != SconexAssetId))
108- then throw("wrong asset attached")
109- else (claimResult(i.caller) ++ [IntegerEntry("global_staked", (totalStakedAmount + amount)), IntegerEntry((addressStr + "_SCONEX_staked"), (tryGetInteger((addressStr + "_SCONEX_staked")) + amount))])
110- }
111- else throw("Strict value is not equal to itself.")
112+ let paymentData = validateAndProcessPaymentInternal(i.payments)
113+ let amount = i.payments[1].amount
114+ let addressStr = toString(i.caller)
115+ let totalStakedAmount = tryGetInteger("global_staked")
116+ if ((i.payments[1].assetId != SconexAssetId))
117+ then throw("wrong asset attached")
118+ else ((claimResult(i.caller) ++ [IntegerEntry("global_staked", (totalStakedAmount + amount)), IntegerEntry((addressStr + "_SCONEX_staked"), (tryGetInteger((addressStr + "_SCONEX_staked")) + amount))]) ++ paymentData)
112119 }
113120
114121
115122
116123 @Callable(i)
117124 func unStake (amount) = {
118- let validateAndProcessPaymentInvoke = invoke(valueOrErrorMessage(this, "this not found"), "validateAndProcessPayment", nil, [i.payments[0]])
119- if ((validateAndProcessPaymentInvoke == validateAndProcessPaymentInvoke))
120- then {
121- let addressStr = toString(i.caller)
122- let stakedAmount = tryGetInteger((addressStr + "_SCONEX_staked"))
123- if ((amount > stakedAmount))
124- then throw("you don't have tokens available")
125- else (claimResult(i.caller) ++ [IntegerEntry((addressStr + "_SCONEX_staked"), (stakedAmount - amount)), IntegerEntry("global_staked", (tryGetInteger("global_staked") - amount)), ScriptTransfer(i.caller, amount, SconexAssetId)])
126- }
127- else throw("Strict value is not equal to itself.")
125+ let paymentData = validateAndProcessPaymentInternal(i.payments)
126+ let addressStr = toString(i.caller)
127+ let stakedAmount = tryGetInteger((addressStr + "_SCONEX_staked"))
128+ if ((amount > stakedAmount))
129+ then throw("you don't have tokens available")
130+ else ((claimResult(i.caller) ++ [IntegerEntry((addressStr + "_SCONEX_staked"), (stakedAmount - amount)), IntegerEntry("global_staked", (tryGetInteger("global_staked") - amount)), ScriptTransfer(i.caller, amount, SconexAssetId)]) ++ paymentData)
128131 }
129132
130133
131134
132135 @Callable(i)
133-func claimReward () = {
134- let validateAndProcessPaymentInvoke = invoke(valueOrErrorMessage(this, "this not found"), "validateAndProcessPayment", nil, [i.payments[0]])
135- if ((validateAndProcessPaymentInvoke == validateAndProcessPaymentInvoke))
136- then claimResult(i.caller)
137- else throw("Strict value is not equal to itself.")
138- }
136+func claimReward () = (validateAndProcessPaymentInternal(i.payments) ++ claimResult(i.caller))
139137
140138
141139
142140 @Callable(i)
143-func topUpReward () = {
144- let amount = fraction(i.payments[0].amount, 9, 10)
145- let currentInterest = tryGetInteger("global_lastCheck_SCONEX_interest")
146- let totalStakedAmount = tryGetInteger("global_staked")
147- let interestDelta = if ((totalStakedAmount > 0))
148- then fraction(amount, Scale, totalStakedAmount)
149- else 0
150- if ((i.payments[0].assetId != SconexAssetId))
151- then throw("wrong asset attached")
152- else [IntegerEntry("global_SCONEX_earnings", (tryGetInteger("global_SCONEX_earnings") + amount)), IntegerEntry("global_lastCheck_SCONEX_interest", (currentInterest + interestDelta))]
153- }
141+func topUpReward () = topUpRewardInternal(i.payments)
154142
155143
156144 @Verifier(tx)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let oracleKey = "oracleKey"
55
66 let Scale = 1000000
77
88 func tryGetInteger (key) = match getInteger(this, key) {
99 case b: Int =>
1010 b
1111 case _ =>
1212 0
1313 }
1414
1515
1616 func tryGetString (key) = match getString(this, key) {
1717 case a: String =>
1818 a
1919 case _ =>
2020 ""
2121 }
2222
2323
2424 let oracle = tryGetString(oracleKey)
2525
2626 let oracleFee = value(addressFromString(oracle))
2727
2828 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
2929
3030
3131 let SconexAssetId = fromBase58String(getStringValue(oracleFee, "SconexAssetId"))
3232
3333 let currentFeeSconex = getIntegerByKeyFromOracle(("fee_" + toBase58String(SconexAssetId)))
3434
3535 let stakeDapp = addressFromString(valueOrErrorMessage(getString(oracleFee, "stakeDapp"), "sconexDapp not found"))
3636
3737 func claimResult (address) = {
3838 let addressStr = toString(address)
3939 let currentInterest = tryGetInteger("global_lastCheck_SCONEX_interest")
4040 let lastCheckInterest = tryGetInteger((addressStr + "_lastCheck_SCONEX_interest"))
4141 let stakedAmount = tryGetInteger((addressStr + "_SCONEX_staked"))
4242 let reward = if ((lastCheckInterest > 0))
4343 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
4444 else 0
4545 [IntegerEntry((addressStr + "_lastCheck_SCONEX_interest"), currentInterest), IntegerEntry((addressStr + "_SCONEX_claimed"), (tryGetInteger((addressStr + "_SCONEX_claimed")) + reward)), ScriptTransfer(address, reward, SconexAssetId)]
4646 }
4747
4848
49-func isPayment (i) = if ((size(i.payments) != 1))
49+func isPayment (i) = if ((size(i) != 1))
5050 then throw("Wrong payments attached")
5151 else {
52- let payment = value(i.payments[0])
52+ let payment = value(i[0])
5353 let amount = value(payment.amount)
5454 $Tuple2(payment, amount)
5555 }
5656
5757
5858 func validatePayment (i) = {
5959 let t089829018 = isPayment(i)
6060 let payment = t089829018._1
6161 let amount = t089829018._2
6262 let assetId = if (if (isDefined(payment.assetId))
6363 then (payment.assetId == SconexAssetId)
6464 else false)
6565 then payment.assetId
6666 else throw((("Only " + toBase58String(SconexAssetId)) + " token accepted as transaction fee"))
6767 if ((amount != currentFeeSconex))
6868 then throw(((("Payment amount should be " + toString(currentFeeSconex)) + " but is: ") + toString(amount)))
6969 else $Tuple2(amount, assetId)
7070 }
7171
7272
73-@Callable(i)
74-func validateAndProcessPayment () = {
73+func topUpRewardInternal (i) = {
74+ let amount = fraction(i[0].amount, 9, 10)
75+ let currentInterest = tryGetInteger("global_lastCheck_SCONEX_interest")
76+ let totalStakedAmount = tryGetInteger("global_staked")
77+ let interestDelta = if ((totalStakedAmount > 0))
78+ then fraction(amount, Scale, totalStakedAmount)
79+ else 0
80+ if ((i[0].assetId != SconexAssetId))
81+ then throw("wrong asset attached")
82+ else [IntegerEntry("global_SCONEX_earnings", (tryGetInteger("global_SCONEX_earnings") + amount)), IntegerEntry("global_lastCheck_SCONEX_interest", (currentInterest + interestDelta))]
83+ }
84+
85+
86+func validateAndProcessPaymentInternal (i) = {
7587 let validP = validatePayment(i)
7688 let amountP = validP._1
7789 let assetIdP = validP._2
7890 if (!(isDefined(amountP)))
7991 then throw("Something went wrong")
80- else {
81- let invokeTeamFeeSplit = invoke(valueOrErrorMessage(stakeDapp, "stakeDapp not found"), "topUpReward", nil, [AttachedPayment(assetIdP, amountP)])
82- if ((invokeTeamFeeSplit == invokeTeamFeeSplit))
83- then nil
84- else throw("Strict value is not equal to itself.")
85- }
92+ else topUpRewardInternal(i)
8693 }
94+
95+
96+@Callable(i)
97+func validateAndProcessPayment () = validateAndProcessPaymentInternal(i.payments)
8798
8899
89100
90101 @Callable(i)
91102 func initDapp (dappKey) = if ((i.caller != this))
92103 then throw("You cannot do this action")
93104 else if ((oracle != ""))
94105 then throw("oracle already set, you can't override!")
95106 else [StringEntry(oracleKey, dappKey)]
96107
97108
98109
99110 @Callable(i)
100111 func stake () = {
101- let validateAndProcessPaymentInvoke = invoke(valueOrErrorMessage(this, "this not found"), "validateAndProcessPayment", nil, [i.payments[0]])
102- if ((validateAndProcessPaymentInvoke == validateAndProcessPaymentInvoke))
103- then {
104- let amount = i.payments[1].amount
105- let addressStr = toString(i.caller)
106- let totalStakedAmount = tryGetInteger("global_staked")
107- if ((i.payments[1].assetId != SconexAssetId))
108- then throw("wrong asset attached")
109- else (claimResult(i.caller) ++ [IntegerEntry("global_staked", (totalStakedAmount + amount)), IntegerEntry((addressStr + "_SCONEX_staked"), (tryGetInteger((addressStr + "_SCONEX_staked")) + amount))])
110- }
111- else throw("Strict value is not equal to itself.")
112+ let paymentData = validateAndProcessPaymentInternal(i.payments)
113+ let amount = i.payments[1].amount
114+ let addressStr = toString(i.caller)
115+ let totalStakedAmount = tryGetInteger("global_staked")
116+ if ((i.payments[1].assetId != SconexAssetId))
117+ then throw("wrong asset attached")
118+ else ((claimResult(i.caller) ++ [IntegerEntry("global_staked", (totalStakedAmount + amount)), IntegerEntry((addressStr + "_SCONEX_staked"), (tryGetInteger((addressStr + "_SCONEX_staked")) + amount))]) ++ paymentData)
112119 }
113120
114121
115122
116123 @Callable(i)
117124 func unStake (amount) = {
118- let validateAndProcessPaymentInvoke = invoke(valueOrErrorMessage(this, "this not found"), "validateAndProcessPayment", nil, [i.payments[0]])
119- if ((validateAndProcessPaymentInvoke == validateAndProcessPaymentInvoke))
120- then {
121- let addressStr = toString(i.caller)
122- let stakedAmount = tryGetInteger((addressStr + "_SCONEX_staked"))
123- if ((amount > stakedAmount))
124- then throw("you don't have tokens available")
125- else (claimResult(i.caller) ++ [IntegerEntry((addressStr + "_SCONEX_staked"), (stakedAmount - amount)), IntegerEntry("global_staked", (tryGetInteger("global_staked") - amount)), ScriptTransfer(i.caller, amount, SconexAssetId)])
126- }
127- else throw("Strict value is not equal to itself.")
125+ let paymentData = validateAndProcessPaymentInternal(i.payments)
126+ let addressStr = toString(i.caller)
127+ let stakedAmount = tryGetInteger((addressStr + "_SCONEX_staked"))
128+ if ((amount > stakedAmount))
129+ then throw("you don't have tokens available")
130+ else ((claimResult(i.caller) ++ [IntegerEntry((addressStr + "_SCONEX_staked"), (stakedAmount - amount)), IntegerEntry("global_staked", (tryGetInteger("global_staked") - amount)), ScriptTransfer(i.caller, amount, SconexAssetId)]) ++ paymentData)
128131 }
129132
130133
131134
132135 @Callable(i)
133-func claimReward () = {
134- let validateAndProcessPaymentInvoke = invoke(valueOrErrorMessage(this, "this not found"), "validateAndProcessPayment", nil, [i.payments[0]])
135- if ((validateAndProcessPaymentInvoke == validateAndProcessPaymentInvoke))
136- then claimResult(i.caller)
137- else throw("Strict value is not equal to itself.")
138- }
136+func claimReward () = (validateAndProcessPaymentInternal(i.payments) ++ claimResult(i.caller))
139137
140138
141139
142140 @Callable(i)
143-func topUpReward () = {
144- let amount = fraction(i.payments[0].amount, 9, 10)
145- let currentInterest = tryGetInteger("global_lastCheck_SCONEX_interest")
146- let totalStakedAmount = tryGetInteger("global_staked")
147- let interestDelta = if ((totalStakedAmount > 0))
148- then fraction(amount, Scale, totalStakedAmount)
149- else 0
150- if ((i.payments[0].assetId != SconexAssetId))
151- then throw("wrong asset attached")
152- else [IntegerEntry("global_SCONEX_earnings", (tryGetInteger("global_SCONEX_earnings") + amount)), IntegerEntry("global_lastCheck_SCONEX_interest", (currentInterest + interestDelta))]
153- }
141+func topUpReward () = topUpRewardInternal(i.payments)
154142
155143
156144 @Verifier(tx)
157145 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
158146

github/deemru/w8io/169f3d6 
88.75 ms