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:
Old | New | Differences | |
---|---|---|---|
46 | 46 | } | |
47 | 47 | ||
48 | 48 | ||
49 | - | func isPayment (i) = if ((size(i | |
49 | + | func isPayment (i) = if ((size(i) != 1)) | |
50 | 50 | then throw("Wrong payments attached") | |
51 | 51 | else { | |
52 | - | let payment = value(i | |
52 | + | let payment = value(i[0]) | |
53 | 53 | let amount = value(payment.amount) | |
54 | 54 | $Tuple2(payment, amount) | |
55 | 55 | } | |
70 | 70 | } | |
71 | 71 | ||
72 | 72 | ||
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) = { | |
75 | 87 | let validP = validatePayment(i) | |
76 | 88 | let amountP = validP._1 | |
77 | 89 | let assetIdP = validP._2 | |
78 | 90 | if (!(isDefined(amountP))) | |
79 | 91 | 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) | |
86 | 93 | } | |
94 | + | ||
95 | + | ||
96 | + | @Callable(i) | |
97 | + | func validateAndProcessPayment () = validateAndProcessPaymentInternal(i.payments) | |
87 | 98 | ||
88 | 99 | ||
89 | 100 | ||
98 | 109 | ||
99 | 110 | @Callable(i) | |
100 | 111 | 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) | |
112 | 119 | } | |
113 | 120 | ||
114 | 121 | ||
115 | 122 | ||
116 | 123 | @Callable(i) | |
117 | 124 | 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) | |
128 | 131 | } | |
129 | 132 | ||
130 | 133 | ||
131 | 134 | ||
132 | 135 | @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)) | |
139 | 137 | ||
140 | 138 | ||
141 | 139 | ||
142 | 140 | @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) | |
154 | 142 | ||
155 | 143 | ||
156 | 144 | @Verifier(tx) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let oracleKey = "oracleKey" | |
5 | 5 | ||
6 | 6 | let Scale = 1000000 | |
7 | 7 | ||
8 | 8 | func tryGetInteger (key) = match getInteger(this, key) { | |
9 | 9 | case b: Int => | |
10 | 10 | b | |
11 | 11 | case _ => | |
12 | 12 | 0 | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func tryGetString (key) = match getString(this, key) { | |
17 | 17 | case a: String => | |
18 | 18 | a | |
19 | 19 | case _ => | |
20 | 20 | "" | |
21 | 21 | } | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | let oracle = tryGetString(oracleKey) | |
25 | 25 | ||
26 | 26 | let oracleFee = value(addressFromString(oracle)) | |
27 | 27 | ||
28 | 28 | func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle") | |
29 | 29 | ||
30 | 30 | ||
31 | 31 | let SconexAssetId = fromBase58String(getStringValue(oracleFee, "SconexAssetId")) | |
32 | 32 | ||
33 | 33 | let currentFeeSconex = getIntegerByKeyFromOracle(("fee_" + toBase58String(SconexAssetId))) | |
34 | 34 | ||
35 | 35 | let stakeDapp = addressFromString(valueOrErrorMessage(getString(oracleFee, "stakeDapp"), "sconexDapp not found")) | |
36 | 36 | ||
37 | 37 | func claimResult (address) = { | |
38 | 38 | let addressStr = toString(address) | |
39 | 39 | let currentInterest = tryGetInteger("global_lastCheck_SCONEX_interest") | |
40 | 40 | let lastCheckInterest = tryGetInteger((addressStr + "_lastCheck_SCONEX_interest")) | |
41 | 41 | let stakedAmount = tryGetInteger((addressStr + "_SCONEX_staked")) | |
42 | 42 | let reward = if ((lastCheckInterest > 0)) | |
43 | 43 | then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale) | |
44 | 44 | else 0 | |
45 | 45 | [IntegerEntry((addressStr + "_lastCheck_SCONEX_interest"), currentInterest), IntegerEntry((addressStr + "_SCONEX_claimed"), (tryGetInteger((addressStr + "_SCONEX_claimed")) + reward)), ScriptTransfer(address, reward, SconexAssetId)] | |
46 | 46 | } | |
47 | 47 | ||
48 | 48 | ||
49 | - | func isPayment (i) = if ((size(i | |
49 | + | func isPayment (i) = if ((size(i) != 1)) | |
50 | 50 | then throw("Wrong payments attached") | |
51 | 51 | else { | |
52 | - | let payment = value(i | |
52 | + | let payment = value(i[0]) | |
53 | 53 | let amount = value(payment.amount) | |
54 | 54 | $Tuple2(payment, amount) | |
55 | 55 | } | |
56 | 56 | ||
57 | 57 | ||
58 | 58 | func validatePayment (i) = { | |
59 | 59 | let t089829018 = isPayment(i) | |
60 | 60 | let payment = t089829018._1 | |
61 | 61 | let amount = t089829018._2 | |
62 | 62 | let assetId = if (if (isDefined(payment.assetId)) | |
63 | 63 | then (payment.assetId == SconexAssetId) | |
64 | 64 | else false) | |
65 | 65 | then payment.assetId | |
66 | 66 | else throw((("Only " + toBase58String(SconexAssetId)) + " token accepted as transaction fee")) | |
67 | 67 | if ((amount != currentFeeSconex)) | |
68 | 68 | then throw(((("Payment amount should be " + toString(currentFeeSconex)) + " but is: ") + toString(amount))) | |
69 | 69 | else $Tuple2(amount, assetId) | |
70 | 70 | } | |
71 | 71 | ||
72 | 72 | ||
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) = { | |
75 | 87 | let validP = validatePayment(i) | |
76 | 88 | let amountP = validP._1 | |
77 | 89 | let assetIdP = validP._2 | |
78 | 90 | if (!(isDefined(amountP))) | |
79 | 91 | 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) | |
86 | 93 | } | |
94 | + | ||
95 | + | ||
96 | + | @Callable(i) | |
97 | + | func validateAndProcessPayment () = validateAndProcessPaymentInternal(i.payments) | |
87 | 98 | ||
88 | 99 | ||
89 | 100 | ||
90 | 101 | @Callable(i) | |
91 | 102 | func initDapp (dappKey) = if ((i.caller != this)) | |
92 | 103 | then throw("You cannot do this action") | |
93 | 104 | else if ((oracle != "")) | |
94 | 105 | then throw("oracle already set, you can't override!") | |
95 | 106 | else [StringEntry(oracleKey, dappKey)] | |
96 | 107 | ||
97 | 108 | ||
98 | 109 | ||
99 | 110 | @Callable(i) | |
100 | 111 | 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) | |
112 | 119 | } | |
113 | 120 | ||
114 | 121 | ||
115 | 122 | ||
116 | 123 | @Callable(i) | |
117 | 124 | 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) | |
128 | 131 | } | |
129 | 132 | ||
130 | 133 | ||
131 | 134 | ||
132 | 135 | @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)) | |
139 | 137 | ||
140 | 138 | ||
141 | 139 | ||
142 | 140 | @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) | |
154 | 142 | ||
155 | 143 | ||
156 | 144 | @Verifier(tx) | |
157 | 145 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
158 | 146 |
github/deemru/w8io/169f3d6 88.75 ms ◑![]()