tx · DL2dv4wiSKpTn7AfqGiN1zGohxwQvRYwx6WPnVc6t2MU 3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW: -0.02800000 Waves 2022.08.11 18:53 [3245515] smart account 3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW > SELF 0.00000000 Waves
{ "type": 13, "id": "DL2dv4wiSKpTn7AfqGiN1zGohxwQvRYwx6WPnVc6t2MU", "fee": 2800000, "feeAssetId": null, "timestamp": 1660233201800, "version": 2, "chainId": 87, "sender": "3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW", "senderPublicKey": "DSNxHVyf38CbPoz2oSJ1b4FWqRvqFsAphCzdtrPeWPHa", "proofs": [ "4Jxw19H7s8oTofk3HMNmQAuMfmRRovtwimRyPWF1pRpz6FFNUqSExXXZEc5cnPdE4CVPeQAzT9wwHESR3WkTQhvL" ], "script": "base64:AAIFAAAAAAAAAC0IAhIDCgEIEgASBAoCCAgSBAoCCAgSABIAEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAAqAAAAAApwZXJjaFByaWNlCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAPQkAAAAAABXNjYWxlAAAAAAAAACcQAAAAAAZzY2FsZTIAAAAAAAAPQkABAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAlnZXRPcmFjbGUAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAARc3RhdGljX2VnZ0Fzc2V0SWQBAAAAE2dldEluY3ViYXRvckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX3JlYmlydGhBZGRyZXNzAQAAABNnZXRTd29wUHJvbW9BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfc3dvcFByb21vQWRkcmVzcwEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19icmVlZGVyQWRkcmVzcwEAAAAVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABlzdGF0aWNfcmVmQ29udHJhY3RBZGRyZXNzAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAE3N0YXRpY19pdGVtc0FkZHJlc3MBAAAAEmdldE1ldGFyYWNlQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAWc3RhdGljX21ldGFSYWNlQWRkcmVzcwEAAAAUZ2V0QWNjQm9vc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAGHN0YXRpY19hY2NCb29zdGVyQWRkcmVzcwEAAAAPZ2V0UHJveHlTdGFraW5nAAAAAAkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAHHN0YXRpY19wcm94eVN0YWtpbmdDb250cmFjdHMBAAAADmdldE1haW50ZW5hbmNlAAAAAAkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEnN0YXRpY19tYWludGVuYW5jZQEAAAASZ2V0Q2ZNYXN0ZXJB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YWxfbGFzdENoZWNrSW50ZXJlc3QEAAAAFnByZXZpb3VzSW50ZXJlc3RIZWlnaHQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAddG90YWxfbGFzdENoZWNrSW50ZXJlc3RIZWlnaHQEAAAAEXRvdGFsRmFybWluZ1Bvd2VyCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgkBAAAADGNhbGNJbnRlcmVzdAAAAAMFAAAAEHByZXZpb3VzSW50ZXJlc3QFAAAAFnByZXZpb3VzSW50ZXJlc3RIZWlnaHQFAAAAEXRvdGFsRmFybWluZ1Bvd2VyAwkBAAAAAiE9AAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABF0b3RhbF9zdGFydEhlaWdodAAAAAAAAAAAAAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAkAAAIAAAABAgAAABxmYXJtaW5nIGlzIG5vdCBsYXVuY2hlZCwgeWV0AQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMAAAAHYWRkcmVzcwAAAAdhc3NldElkAAAAEWFzc2V0RmFybWluZ1Bvd2VyBAAAABZsYXN0Q2hlY2tBc3NldEludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAAB2Fzc2V0SWQCAAAAEl9sYXN0Q2hlY2tJbnRlcmVzdAQAAAAPY3VycmVudEludGVyZXN0CQEAAAASZ2V0Q3VycmVudEludGVyZXN0AAAAAAkAAGgAAAACBQAAABFhc3NldEZhcm1pbmdQb3dlcgkAAGUAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAAFmxhc3RDaGVja0Fzc2V0SW50ZXJlc3QBAAAAFGFkZEFzc2V0SWRUb0dlbkVudHJ5AAAAAgAAAAdhc3NldElkAAAACGFzc2V0R2VuBAAAAAxjdXJyZW50VmFsdWUJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHYXNzZXRzXwUAAAAIYXNzZXRHZW4CAAAAB19sb2NrZWQDCQAAAAAAAAIFAAAADGN1cnJlbnRWYWx1ZQIAAAAABQAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgUAAAAMY3VycmVudFZhbHVlAgAAAAEsBQAAAAdhc3NldElkAQAAAA5nZXRTdGFrZVJlc3VsdAAAAAQAAAAHYWRkcmVzcwAAAAdhc3NldElkAAAAEWFzc2V0RmFybWluZ1Bvd2VyAAAACHVuc3Rha2VyBAAAAAVhc3NldAkAAlgAAAABBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABmFzc2V0XwUAAAAFYXNzZXQCAAAABl9vd25lcgUAAAAHYWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAADV9mYXJtaW5nUG93ZXIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAASX2xhc3RDaGVja0ludGVyZXN0CQEAAAASZ2V0Q3Vy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IHlvdXIgZmFybWluZyByZXdhcmRzIHRpbGwgdGhlIGVuZCBvZiBEdWNrU3F1aWQgZ2FtZS4gUXVhY2sgaW4gcGVhY2UhBAAAAAdhc3NldElkCQACWQAAAAEFAAAABWFzc2V0BAAAAAdhZGRyZXNzAwkBAAAAEGlzUHJveHlTdGFraW5nU2MAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAADYWRkCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAIdW5zdGFrZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAJX3Vuc3Rha2VyBAAAABFhc3NldEZhcm1pbmdQb3dlcgkBAAAAHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAABRjYWxjQXNzZXRSZXdhcmREZWx0YQAAAAMFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAMZmFybWVkQW1vdW50CQAAZAAAAAIFAAAAEGFzc2V0UmV3YXJkRGVsdGEJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQEAAAAD3dpdGhkcmF3bkFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVkQW1vdW50BQAAAA93aXRoZHJhd25BbW91bnQJAABoAAAAAgUAAAAFc2Nh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c3NldElkCQACWQAAAAEFAAAABWFzc2V0BAAAAAVjb2xvcgkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAAtfcGVyY2hDb2xvcgQAAAARYXNzZXRGYXJtaW5nUG93ZXIJAQAAAB1nZXRMYXN0S25vd25Bc3NldEZhcm1pbmdQb3dlcgAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BAAAABBhc3NldFJld2FyZERlbHRhCQEAAAAUY2FsY0Fzc2V0UmV3YXJkRGVsdGEAAAADBQAAAAdhZGRyZXNzBQAAAAVhc3NldAUAAAARYXNzZXRGYXJtaW5nUG93ZXIEAAAADGZhcm1lZEFtb3VudAkAAGQAAAACBQAAABBhc3NldFJld2FyZERlbHRhCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABZfbGFzdENoZWNrRmFybWVkQW1vdW50BAAAAA93aXRoZHJhd25BbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEF93aXRoZHJhd25BbW91bnQEAAAABnJld2FyZAkAAGkAAAACCQAAZQAAAAIFAAAADGZhcm1lZEFtb3VudAUAAAAPd2l0aGRyYXduQW1vdW50CQAAaAAAAAIFAAAABXNjYWxlAAAAAAAAAABkBAAAAAh1bnN0YWtlcgkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAAAlfdW5zdGFrZXIDAwkBAAAAAiE9AAAAAgUAAAAIdW5zdGFrZXICAAAAAAkB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", "height": 3245515, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BFaf1NheFD6ryoDkHSKJTRVnaKmWuQDE7xjNAEcf7PSJ Next: 9q1UyeJh7rjLNPqs6mhcRGkQw9b9TmWfLvSDoWUNcF5W Diff:
Old | New | Differences | |
---|---|---|---|
245 | 245 | then throw("you need to set color properly") | |
246 | 246 | else { | |
247 | 247 | let exactPrice = calculatePerchPrice(toString(i.caller)) | |
248 | - | let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil)) | |
249 | - | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
248 | + | let leftToPay = if ((i.originCaller == i.caller)) | |
250 | 249 | then { | |
251 | - | let leftToPay = (exactPrice - amountPaidByCoupons) | |
252 | - | let payment = if ((leftToPay != 0)) | |
253 | - | then { | |
254 | - | let firstPayment = value(i.payments[0]) | |
255 | - | if ((firstPayment.assetId != getEggAssetId())) | |
256 | - | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
257 | - | else if ((firstPayment.amount != leftToPay)) | |
258 | - | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller))) | |
259 | - | else { | |
260 | - | let refererRewardForPerch = fraction(leftToPay, RefererReward, 100) | |
261 | - | let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]) | |
262 | - | if ((refCall == refCall)) | |
263 | - | then { | |
264 | - | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))]) | |
265 | - | if ((burnCall == burnCall)) | |
266 | - | then leftToPay | |
267 | - | else throw("Strict value is not equal to itself.") | |
268 | - | } | |
250 | + | let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil)) | |
251 | + | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
252 | + | then (exactPrice - amountPaidByCoupons) | |
253 | + | else throw("Strict value is not equal to itself.") | |
254 | + | } | |
255 | + | else exactPrice | |
256 | + | let payment = if ((leftToPay != 0)) | |
257 | + | then { | |
258 | + | let firstPayment = value(i.payments[0]) | |
259 | + | if ((firstPayment.assetId != getEggAssetId())) | |
260 | + | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
261 | + | else if ((firstPayment.amount != leftToPay)) | |
262 | + | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller))) | |
263 | + | else { | |
264 | + | let refererRewardForPerch = fraction(leftToPay, RefererReward, 100) | |
265 | + | let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]) | |
266 | + | if ((refCall == refCall)) | |
267 | + | then { | |
268 | + | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))]) | |
269 | + | if ((burnCall == burnCall)) | |
270 | + | then leftToPay | |
269 | 271 | else throw("Strict value is not equal to itself.") | |
270 | 272 | } | |
271 | - | } | |
272 | - | else 0 | |
273 | - | if ((payment == payment)) | |
274 | - | then { | |
275 | - | let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color) | |
276 | - | let perchAmount = tryGetInteger(perchAmountKey) | |
273 | + | else throw("Strict value is not equal to itself.") | |
274 | + | } | |
275 | + | } | |
276 | + | else 0 | |
277 | + | if ((payment == payment)) | |
278 | + | then { | |
279 | + | let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color) | |
280 | + | let perchAmount = tryGetInteger(perchAmountKey) | |
277 | 281 | [IntegerEntry(perchAmountKey, (perchAmount + 1))] | |
278 | - | } | |
279 | - | else throw("Strict value is not equal to itself.") | |
280 | 282 | } | |
281 | 283 | else throw("Strict value is not equal to itself.") | |
282 | 284 | } | |
325 | 327 | else if ((0 >= availablePerches)) | |
326 | 328 | then throw(("no perches available for the color " + color)) | |
327 | 329 | else { | |
328 | - | let $ | |
329 | - | let assetGen = $ | |
330 | - | let assetFarmingPower = $ | |
330 | + | let $t01158811661 = getAssetFarmingPower(assetId, address) | |
331 | + | let assetGen = $t01158811661._1 | |
332 | + | let assetFarmingPower = $t01158811661._2 | |
331 | 333 | (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1))]) | |
332 | 334 | } | |
333 | 335 | } | |
351 | 353 | if ((pmt.amount != 1)) | |
352 | 354 | then throw("NFT is not attached") | |
353 | 355 | else { | |
354 | - | let $ | |
355 | - | let assetGen = $ | |
356 | - | let assetFarmingPower = $ | |
356 | + | let $t01228512358 = getAssetFarmingPower(assetId, address) | |
357 | + | let assetGen = $t01228512358._1 | |
358 | + | let assetFarmingPower = $t01228512358._2 | |
357 | 359 | let asset = toBase58String(assetId) | |
358 | 360 | let realCaller = toString(i.caller) | |
359 | 361 | (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [BooleanEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"), true)]) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let perchPrice = (100 * 1000000) | |
5 | 5 | ||
6 | 6 | let scale = 10000 | |
7 | 7 | ||
8 | 8 | let scale2 = 1000000 | |
9 | 9 | ||
10 | 10 | func tryGetStringExternal (address,key) = match getString(address, key) { | |
11 | 11 | case a: String => | |
12 | 12 | a | |
13 | 13 | case _ => | |
14 | 14 | "" | |
15 | 15 | } | |
16 | 16 | ||
17 | 17 | ||
18 | 18 | func tryGetString (key) = tryGetStringExternal(this, key) | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress"))) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId")) | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress"))) | |
28 | 28 | ||
29 | 29 | ||
30 | 30 | func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress"))) | |
31 | 31 | ||
32 | 32 | ||
33 | 33 | func getSwopPromoAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_swopPromoAddress"))) | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress"))) | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress"))) | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress"))) | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func getMetaraceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_metaRaceAddress"))) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_accBoosterAddress"))) | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func getProxyStaking () = tryGetStringExternal(getOracle(), "static_proxyStakingContracts") | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func getMaintenance () = tryGetStringExternal(getOracle(), "static_maintenance") | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func getCfMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_cfMasterAddress"))) | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func getDuckWrapperSc () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_duckWrapper"))) | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress"))) | |
64 | 64 | ||
65 | 65 | ||
66 | 66 | func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress"))) | |
67 | 67 | ||
68 | 68 | ||
69 | 69 | let RefererReward = 5 | |
70 | 70 | ||
71 | 71 | func getRewardPerBlock () = 684 | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func isLocked () = if ((getMaintenance() != "")) | |
75 | 75 | then throw(getMaintenance()) | |
76 | 76 | else 0 | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | func tryGetInteger (key) = match getInteger(this, key) { | |
80 | 80 | case b: Int => | |
81 | 81 | b | |
82 | 82 | case _ => | |
83 | 83 | 0 | |
84 | 84 | } | |
85 | 85 | ||
86 | 86 | ||
87 | 87 | func tryGetBoolean (key) = match getBoolean(this, key) { | |
88 | 88 | case b: Boolean => | |
89 | 89 | b | |
90 | 90 | case _ => | |
91 | 91 | false | |
92 | 92 | } | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | func isUserBlacklisted (address) = false | |
96 | 96 | ||
97 | 97 | ||
98 | 98 | func getAssetOrigin (generation) = if ((generation == "G")) | |
99 | 99 | then getIncubatorAddress() | |
100 | 100 | else getBreederAddress() | |
101 | 101 | ||
102 | 102 | ||
103 | 103 | func getAssetRarity (genotype,generation) = { | |
104 | 104 | let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found")) | |
105 | 105 | let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR) | |
106 | 106 | if ((power > 0)) | |
107 | 107 | then power | |
108 | 108 | else 2 | |
109 | 109 | } | |
110 | 110 | ||
111 | 111 | ||
112 | 112 | func asString (value) = match value { | |
113 | 113 | case string: String => | |
114 | 114 | string | |
115 | 115 | case _ => | |
116 | 116 | throw("FAS: wrong type, expected: String") | |
117 | 117 | } | |
118 | 118 | ||
119 | 119 | ||
120 | 120 | func asInt (value) = match value { | |
121 | 121 | case int: Int => | |
122 | 122 | int | |
123 | 123 | case _ => | |
124 | 124 | throw("FAI: wrong type, expected: Int") | |
125 | 125 | } | |
126 | 126 | ||
127 | 127 | ||
128 | 128 | func getAssetFarmingPower (assetId,address) = if (if ((value(assetInfo(assetId)).issuer == getBreederAddress())) | |
129 | 129 | then true | |
130 | 130 | else (value(assetInfo(assetId)).issuer == getIncubatorAddress())) | |
131 | 131 | then { | |
132 | 132 | let farmBoost = asInt(invoke(getItemsAddress(), "calculateFarmingPowerBoost", [toBase58String(assetId), address], nil)) | |
133 | 133 | if ((farmBoost == farmBoost)) | |
134 | 134 | then { | |
135 | 135 | let assetName = value(assetInfo(assetId)).name | |
136 | 136 | let isJackpot = (takeRight(value(assetName), 1) == "U") | |
137 | 137 | let farmGen = if (isJackpot) | |
138 | 138 | then "" | |
139 | 139 | else asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil)) | |
140 | 140 | if ((farmGen == farmGen)) | |
141 | 141 | then { | |
142 | 142 | let rarity = if (isJackpot) | |
143 | 143 | then 100 | |
144 | 144 | else { | |
145 | 145 | let generation = take(takeRight(assetName, 2), 1) | |
146 | 146 | getAssetRarity(farmGen, generation) | |
147 | 147 | } | |
148 | 148 | let totalFarmingPower = (rarity + fraction(rarity, farmBoost, 100)) | |
149 | 149 | $Tuple2(farmGen, totalFarmingPower) | |
150 | 150 | } | |
151 | 151 | else throw("Strict value is not equal to itself.") | |
152 | 152 | } | |
153 | 153 | else throw("Strict value is not equal to itself.") | |
154 | 154 | } | |
155 | 155 | else throw("not valid NFT") | |
156 | 156 | ||
157 | 157 | ||
158 | 158 | func getLastKnownAssetFarmingPower (address,assetId) = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_farmingPower")) | |
159 | 159 | ||
160 | 160 | ||
161 | 161 | func getAssetsByGen (gen) = { | |
162 | 162 | let s = tryGetString(("assets_" + gen)) | |
163 | 163 | if ((s == "")) | |
164 | 164 | then nil | |
165 | 165 | else split(s, ",") | |
166 | 166 | } | |
167 | 167 | ||
168 | 168 | ||
169 | 169 | func calcInterest (previousInterest,previousInterestHeight,totalFarmingPower) = (previousInterest + (((scale * getRewardPerBlock()) * (height - previousInterestHeight)) / totalFarmingPower)) | |
170 | 170 | ||
171 | 171 | ||
172 | 172 | func getCurrentInterest () = if ((tryGetInteger("total_farmingPower") > 0)) | |
173 | 173 | then { | |
174 | 174 | let previousInterest = tryGetInteger("total_lastCheckInterest") | |
175 | 175 | let previousInterestHeight = tryGetInteger("total_lastCheckInterestHeight") | |
176 | 176 | let totalFarmingPower = tryGetInteger("total_farmingPower") | |
177 | 177 | calcInterest(previousInterest, previousInterestHeight, totalFarmingPower) | |
178 | 178 | } | |
179 | 179 | else if ((tryGetInteger("total_startHeight") != 0)) | |
180 | 180 | then tryGetInteger("total_lastCheckInterest") | |
181 | 181 | else throw("farming is not launched, yet") | |
182 | 182 | ||
183 | 183 | ||
184 | 184 | func calcAssetRewardDelta (address,assetId,assetFarmingPower) = { | |
185 | 185 | let lastCheckAssetInterest = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_lastCheckInterest")) | |
186 | 186 | let currentInterest = getCurrentInterest() | |
187 | 187 | (assetFarmingPower * (currentInterest - lastCheckAssetInterest)) | |
188 | 188 | } | |
189 | 189 | ||
190 | 190 | ||
191 | 191 | func addAssetIdToGenEntry (assetId,assetGen) = { | |
192 | 192 | let currentValue = tryGetString((("assets_" + assetGen) + "_locked")) | |
193 | 193 | if ((currentValue == "")) | |
194 | 194 | then assetId | |
195 | 195 | else ((currentValue + ",") + assetId) | |
196 | 196 | } | |
197 | 197 | ||
198 | 198 | ||
199 | 199 | func getStakeResult (address,assetId,assetFarmingPower,unstaker) = { | |
200 | 200 | let asset = toBase58String(assetId) | |
201 | 201 | [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), StringEntry((("asset_" + asset) + "_owner"), address), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), assetFarmingPower), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), StringEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker"), unstaker)] | |
202 | 202 | } | |
203 | 203 | ||
204 | 204 | ||
205 | 205 | func getUnstakeResult (address,assetId,rewardDelta,withdrawnAmount,assetFarmingPower) = { | |
206 | 206 | let asset = toBase58String(assetId) | |
207 | 207 | [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + asset) + "_owner")), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_unstaker")), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (withdrawnAmount * scale2))), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")) + rewardDelta))] | |
208 | 208 | } | |
209 | 209 | ||
210 | 210 | ||
211 | 211 | func calculatePerchPrice (address) = { | |
212 | 212 | let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner")) | |
213 | 213 | if ((hasArtefactStaked == "")) | |
214 | 214 | then perchPrice | |
215 | 215 | else ((perchPrice / 10) * 9) | |
216 | 216 | } | |
217 | 217 | ||
218 | 218 | ||
219 | 219 | func isProxyStakingSc (address) = { | |
220 | 220 | let allowedContracts = getProxyStaking() | |
221 | 221 | let allowedContractsList = split(allowedContracts, ";") | |
222 | 222 | (indexOf(allowedContractsList, address) != unit) | |
223 | 223 | } | |
224 | 224 | ||
225 | 225 | ||
226 | 226 | @Callable(i) | |
227 | 227 | func configureOracle (oracle) = if ((i.caller != this)) | |
228 | 228 | then throw("FCO: admin only") | |
229 | 229 | else [StringEntry("static_oracleAddress", oracle)] | |
230 | 230 | ||
231 | 231 | ||
232 | 232 | ||
233 | 233 | @Callable(i) | |
234 | 234 | func init () = if ((i.caller != this)) | |
235 | 235 | then throw("FI: admin only") | |
236 | 236 | else [IntegerEntry("total_startHeight", height)] | |
237 | 237 | ||
238 | 238 | ||
239 | 239 | ||
240 | 240 | @Callable(i) | |
241 | 241 | func buyPerch (color,refererAddress) = { | |
242 | 242 | let locked = isLocked() | |
243 | 243 | if ((locked == locked)) | |
244 | 244 | then if ((0 > value(indexOf(["B", "R", "G", "Y"], color)))) | |
245 | 245 | then throw("you need to set color properly") | |
246 | 246 | else { | |
247 | 247 | let exactPrice = calculatePerchPrice(toString(i.caller)) | |
248 | - | let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil)) | |
249 | - | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
248 | + | let leftToPay = if ((i.originCaller == i.caller)) | |
250 | 249 | then { | |
251 | - | let leftToPay = (exactPrice - amountPaidByCoupons) | |
252 | - | let payment = if ((leftToPay != 0)) | |
253 | - | then { | |
254 | - | let firstPayment = value(i.payments[0]) | |
255 | - | if ((firstPayment.assetId != getEggAssetId())) | |
256 | - | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
257 | - | else if ((firstPayment.amount != leftToPay)) | |
258 | - | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller))) | |
259 | - | else { | |
260 | - | let refererRewardForPerch = fraction(leftToPay, RefererReward, 100) | |
261 | - | let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]) | |
262 | - | if ((refCall == refCall)) | |
263 | - | then { | |
264 | - | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))]) | |
265 | - | if ((burnCall == burnCall)) | |
266 | - | then leftToPay | |
267 | - | else throw("Strict value is not equal to itself.") | |
268 | - | } | |
250 | + | let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil)) | |
251 | + | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
252 | + | then (exactPrice - amountPaidByCoupons) | |
253 | + | else throw("Strict value is not equal to itself.") | |
254 | + | } | |
255 | + | else exactPrice | |
256 | + | let payment = if ((leftToPay != 0)) | |
257 | + | then { | |
258 | + | let firstPayment = value(i.payments[0]) | |
259 | + | if ((firstPayment.assetId != getEggAssetId())) | |
260 | + | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
261 | + | else if ((firstPayment.amount != leftToPay)) | |
262 | + | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller))) | |
263 | + | else { | |
264 | + | let refererRewardForPerch = fraction(leftToPay, RefererReward, 100) | |
265 | + | let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]) | |
266 | + | if ((refCall == refCall)) | |
267 | + | then { | |
268 | + | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))]) | |
269 | + | if ((burnCall == burnCall)) | |
270 | + | then leftToPay | |
269 | 271 | else throw("Strict value is not equal to itself.") | |
270 | 272 | } | |
271 | - | } | |
272 | - | else 0 | |
273 | - | if ((payment == payment)) | |
274 | - | then { | |
275 | - | let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color) | |
276 | - | let perchAmount = tryGetInteger(perchAmountKey) | |
273 | + | else throw("Strict value is not equal to itself.") | |
274 | + | } | |
275 | + | } | |
276 | + | else 0 | |
277 | + | if ((payment == payment)) | |
278 | + | then { | |
279 | + | let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color) | |
280 | + | let perchAmount = tryGetInteger(perchAmountKey) | |
277 | 281 | [IntegerEntry(perchAmountKey, (perchAmount + 1))] | |
278 | - | } | |
279 | - | else throw("Strict value is not equal to itself.") | |
280 | 282 | } | |
281 | 283 | else throw("Strict value is not equal to itself.") | |
282 | 284 | } | |
283 | 285 | else throw("Strict value is not equal to itself.") | |
284 | 286 | } | |
285 | 287 | ||
286 | 288 | ||
287 | 289 | ||
288 | 290 | @Callable(i) | |
289 | 291 | func addFreePerch (address,color) = { | |
290 | 292 | let locked = isLocked() | |
291 | 293 | if ((locked == locked)) | |
292 | 294 | then if ((0 > value(indexOf(["B", "R", "G", "Y"], color)))) | |
293 | 295 | then throw("you need to set color properly") | |
294 | 296 | else if (if (if ((i.caller != getRebirthAddress())) | |
295 | 297 | then (i.caller != this) | |
296 | 298 | else false) | |
297 | 299 | then (i.caller != getSwopPromoAddress()) | |
298 | 300 | else false) | |
299 | 301 | then throw("rebirth and swop promo only") | |
300 | 302 | else { | |
301 | 303 | let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color) | |
302 | 304 | let perchAmount = tryGetInteger(perchAmountKey) | |
303 | 305 | $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + 1))], "") | |
304 | 306 | } | |
305 | 307 | else throw("Strict value is not equal to itself.") | |
306 | 308 | } | |
307 | 309 | ||
308 | 310 | ||
309 | 311 | ||
310 | 312 | @Callable(i) | |
311 | 313 | func stakeNFT () = { | |
312 | 314 | let locked = isLocked() | |
313 | 315 | if ((locked == locked)) | |
314 | 316 | then { | |
315 | 317 | let pmt = value(i.payments[0]) | |
316 | 318 | let assetId = value(value(i.payments[0]).assetId) | |
317 | 319 | let realCaller = toString(i.caller) | |
318 | 320 | let address = if (isProxyStakingSc(toString(i.caller))) | |
319 | 321 | then toString(i.originCaller) | |
320 | 322 | else realCaller | |
321 | 323 | let color = takeRight(value(assetInfo(assetId)).name, 1) | |
322 | 324 | let availablePerches = tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) | |
323 | 325 | if ((pmt.amount != 1)) | |
324 | 326 | then throw("NFT is not attached") | |
325 | 327 | else if ((0 >= availablePerches)) | |
326 | 328 | then throw(("no perches available for the color " + color)) | |
327 | 329 | else { | |
328 | - | let $ | |
329 | - | let assetGen = $ | |
330 | - | let assetFarmingPower = $ | |
330 | + | let $t01158811661 = getAssetFarmingPower(assetId, address) | |
331 | + | let assetGen = $t01158811661._1 | |
332 | + | let assetFarmingPower = $t01158811661._2 | |
331 | 333 | (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1))]) | |
332 | 334 | } | |
333 | 335 | } | |
334 | 336 | else throw("Strict value is not equal to itself.") | |
335 | 337 | } | |
336 | 338 | ||
337 | 339 | ||
338 | 340 | ||
339 | 341 | @Callable(i) | |
340 | 342 | func stakeNFTWithoutPerch () = { | |
341 | 343 | let locked = isLocked() | |
342 | 344 | if ((locked == locked)) | |
343 | 345 | then { | |
344 | 346 | let dappToCall = toString(i.caller) | |
345 | 347 | if (!(isProxyStakingSc(dappToCall))) | |
346 | 348 | then throw("FSNWP: Only trusted smart contracts can stake without a perch!") | |
347 | 349 | else { | |
348 | 350 | let pmt = value(i.payments[0]) | |
349 | 351 | let assetId = value(value(i.payments[0]).assetId) | |
350 | 352 | let address = toString(i.originCaller) | |
351 | 353 | if ((pmt.amount != 1)) | |
352 | 354 | then throw("NFT is not attached") | |
353 | 355 | else { | |
354 | - | let $ | |
355 | - | let assetGen = $ | |
356 | - | let assetFarmingPower = $ | |
356 | + | let $t01228512358 = getAssetFarmingPower(assetId, address) | |
357 | + | let assetGen = $t01228512358._1 | |
358 | + | let assetFarmingPower = $t01228512358._2 | |
357 | 359 | let asset = toBase58String(assetId) | |
358 | 360 | let realCaller = toString(i.caller) | |
359 | 361 | (getStakeResult(address, assetId, assetFarmingPower, realCaller) ++ [BooleanEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"), true)]) | |
360 | 362 | } | |
361 | 363 | } | |
362 | 364 | } | |
363 | 365 | else throw("Strict value is not equal to itself.") | |
364 | 366 | } | |
365 | 367 | ||
366 | 368 | ||
367 | 369 | ||
368 | 370 | @Callable(i) | |
369 | 371 | func unstakeNFT (asset) = { | |
370 | 372 | let locked = isLocked() | |
371 | 373 | if ((locked == locked)) | |
372 | 374 | then { | |
373 | 375 | let add = toString(i.originCaller) | |
374 | 376 | if (isUserBlacklisted(add)) | |
375 | 377 | then throw("FUN: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
376 | 378 | else { | |
377 | 379 | let assetId = fromBase58String(asset) | |
378 | 380 | let address = if (isProxyStakingSc(toString(i.caller))) | |
379 | 381 | then add | |
380 | 382 | else toString(i.caller) | |
381 | 383 | let unstaker = tryGetString((((("address_" + address) + "_asset_") + asset) + "_unstaker")) | |
382 | 384 | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
383 | 385 | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
384 | 386 | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
385 | 387 | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
386 | 388 | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
387 | 389 | let color = takeRight(value(assetInfo(assetId)).name, 1) | |
388 | 390 | let realCaller = toString(i.caller) | |
389 | 391 | if (if ((unstaker != "")) | |
390 | 392 | then (unstaker != realCaller) | |
391 | 393 | else false) | |
392 | 394 | then throw(((((((("FUN: It seems duck was staked throuh a dapp, not directly, please unstake through dapp! " + unstaker) + " ") + realCaller) + " ") + address) + " ") + add)) | |
393 | 395 | else if ((0 >= assetFarmingPower)) | |
394 | 396 | then throw("FUN: asset not available") | |
395 | 397 | else { | |
396 | 398 | let isWithoutPerch = tryGetBoolean((((("address_" + address) + "_asset_") + asset) + "_without_perch")) | |
397 | 399 | if ((color == "U")) | |
398 | 400 | then throw("FUN: use another function to unstake Jackpot NFT") | |
399 | 401 | else { | |
400 | 402 | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
401 | 403 | let appendPerches = if (isWithoutPerch) | |
402 | 404 | then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))] | |
403 | 405 | else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))] | |
404 | 406 | $Tuple2(((result ++ [ScriptTransfer(i.caller, (reward * 1000000), getEggAssetId()), ScriptTransfer(i.caller, 1, assetId)]) ++ appendPerches), (reward * 1000000)) | |
405 | 407 | } | |
406 | 408 | } | |
407 | 409 | } | |
408 | 410 | } | |
409 | 411 | else throw("Strict value is not equal to itself.") | |
410 | 412 | } | |
411 | 413 | ||
412 | 414 | ||
413 | 415 | ||
414 | 416 | @Callable(i) | |
415 | 417 | func stakeJackpot (color) = { | |
416 | 418 | let locked = isLocked() | |
417 | 419 | if ((locked == locked)) | |
418 | 420 | then { | |
419 | 421 | let pmt = value(i.payments[0]) | |
420 | 422 | let assetId = value(pmt.assetId) | |
421 | 423 | let realCaller = toString(i.caller) | |
422 | 424 | let address = if (isProxyStakingSc(toString(i.caller))) | |
423 | 425 | then toString(i.originCaller) | |
424 | 426 | else realCaller | |
425 | 427 | let availablePerches = tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) | |
426 | 428 | let assetIssuer = value(assetInfo(assetId)).issuer | |
427 | 429 | if ((pmt.amount != 1)) | |
428 | 430 | then throw("NFT is not attached") | |
429 | 431 | else if (if ((assetIssuer == getIncubatorAddress())) | |
430 | 432 | then true | |
431 | 433 | else (assetIssuer == getBreederAddress())) | |
432 | 434 | then if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U")) | |
433 | 435 | then throw("jackpot only") | |
434 | 436 | else if ((0 >= availablePerches)) | |
435 | 437 | then throw(("FSJ: no perches available for the color " + color)) | |
436 | 438 | else { | |
437 | 439 | let farmingPower = getAssetFarmingPower(assetId, address) | |
438 | 440 | (getStakeResult(address, assetId, farmingPower._2, realCaller) ++ [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]) | |
439 | 441 | } | |
440 | 442 | else throw("asset is not valid") | |
441 | 443 | } | |
442 | 444 | else throw("Strict value is not equal to itself.") | |
443 | 445 | } | |
444 | 446 | ||
445 | 447 | ||
446 | 448 | ||
447 | 449 | @Callable(i) | |
448 | 450 | func unstakeJackpot (asset) = { | |
449 | 451 | let locked = isLocked() | |
450 | 452 | if ((locked == locked)) | |
451 | 453 | then { | |
452 | 454 | let realCaller = toString(i.caller) | |
453 | 455 | let address = if (isProxyStakingSc(toString(i.caller))) | |
454 | 456 | then toString(i.originCaller) | |
455 | 457 | else realCaller | |
456 | 458 | if (isUserBlacklisted(address)) | |
457 | 459 | then throw("FUJ: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
458 | 460 | else { | |
459 | 461 | let assetId = fromBase58String(asset) | |
460 | 462 | let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor")) | |
461 | 463 | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
462 | 464 | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
463 | 465 | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
464 | 466 | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
465 | 467 | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
466 | 468 | let unstaker = tryGetString((((("address_" + address) + "_asset_") + asset) + "_unstaker")) | |
467 | 469 | if (if ((unstaker != "")) | |
468 | 470 | then (unstaker != realCaller) | |
469 | 471 | else false) | |
470 | 472 | then throw("FUJ: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
471 | 473 | else if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U")) | |
472 | 474 | then throw("jackpot only") | |
473 | 475 | else if ((assetFarmingPower > 0)) | |
474 | 476 | then { | |
475 | 477 | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
476 | 478 | let isWithoutPerch = tryGetBoolean((((("address_" + address) + "_asset_") + asset) + "_without_perch")) | |
477 | 479 | let appendPerches = if (isWithoutPerch) | |
478 | 480 | then [DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_without_perch"))] | |
479 | 481 | else [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))] | |
480 | 482 | $Tuple2(((result ++ appendPerches) ++ [ScriptTransfer(i.caller, (reward * 1000000), getEggAssetId()), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
481 | 483 | } | |
482 | 484 | else throw("FUJ: Asset farming power not bigger then 0") | |
483 | 485 | } | |
484 | 486 | } | |
485 | 487 | else throw("Strict value is not equal to itself.") | |
486 | 488 | } | |
487 | 489 | ||
488 | 490 | ||
489 | 491 | ||
490 | 492 | @Callable(i) | |
491 | 493 | func claimReward (asset) = { | |
492 | 494 | let locked = isLocked() | |
493 | 495 | if ((locked == locked)) | |
494 | 496 | then { | |
495 | 497 | let address = if ((i.originCaller == getCfMasterAddress())) | |
496 | 498 | then toString(i.caller) | |
497 | 499 | else toString(i.originCaller) | |
498 | 500 | if (isUserBlacklisted(address)) | |
499 | 501 | then throw("FCR: Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
500 | 502 | else { | |
501 | 503 | let assetId = fromBase58String(asset) | |
502 | 504 | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
503 | 505 | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
504 | 506 | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
505 | 507 | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
506 | 508 | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
507 | 509 | if ((0 >= reward)) | |
508 | 510 | then throw("FCR: you have no EGGs to withdraw") | |
509 | 511 | else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), getEggAssetId())], (reward * 1000000)) | |
510 | 512 | } | |
511 | 513 | } | |
512 | 514 | else throw("Strict value is not equal to itself.") | |
513 | 515 | } | |
514 | 516 | ||
515 | 517 |
github/deemru/w8io/0e76f2f 77.29 ms ◑