tx · C7QouzH5xg39kibSSuVJjn1Lgn9L81TGRRcJyzC5LqYU

3PEFxzL8xBTELa8nMxGbtR39Sbv18BPbGpd:  -0.01500000 Waves

2023.11.26 21:16 [3926586] smart account 3PEFxzL8xBTELa8nMxGbtR39Sbv18BPbGpd > SELF 0.00000000 Waves

{ "type": 13, "id": "C7QouzH5xg39kibSSuVJjn1Lgn9L81TGRRcJyzC5LqYU", "fee": 1500000, "feeAssetId": null, "timestamp": 1701022632346, "version": 2, "chainId": 87, "sender": "3PEFxzL8xBTELa8nMxGbtR39Sbv18BPbGpd", "senderPublicKey": "2waZvVofkM5fkVXd5b9ub2mdmbpp9bG98cjtGVmiV9YM", "proofs": [ "3mdAnNoWCYzj7QacKqrgj5PFLhhDVrCJ2AKbPriPkT33rWEahUg2CKVyNxSs1S5DueroWwQCuDSohcrxH7QK8rqo" ], "script": "base64:AAIFAAAAAAAAACMIAhIDCgEIEgMKAQgSAwoBCBIECgIICBIDCgEIEgMKAQESAAAAACcAAAAABVNjYWxlAAAAAAAF9eEAAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAABdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAAAAACAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzAQAAABRzdGF0aWNLZXlfZWdnQXNzZXRJZAAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAAAAAgAAABJzdGF0aWNfYnVybkFkZHJlc3MBAAAAEnN0YXRpY0tleV9leHRyYUZlZQAAAAACAAAAD3N0YXRpY19leHRyYUZlZQEAAAAXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAAAAAgAAABRzdGF0aWNfZmVlQWdncmVnYXRvcgEAAAAac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAAYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAAAAAIAAAAVc3RhdGljX2JyZWVkZXJBZGRyZXNzAQAAABxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAAAAAIAAAAZc3RhdGljX3JlZkNvbnRyYWN0QWRkcmVzcwEAAAAYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAAAAAIAAAAVc3RhdGljX2NvdXBvbnNBZGRyZXNzAQAAABtzdGF0aWNLZXlfYWNjQm9vc3RlckFkZHJlc3MAAAAAAgAAABhzdGF0aWNfYWNjQm9vc3RlckFkZHJlc3MBAAAAFnN0YXRpY0tleV92ZWdnUGVyY2hGZWUAAAAAAgAAABNzdGF0aWNfdmVnZ1BlcmNoRmVlAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAQAAAAdhZGRyZXNzCQABLAAAAAIJAAQlAAAAAQUAAAAHYWRkcmVzcwIAAAAIX2NsYWltZWQBAAAADnRvdGFsU3Rha2VkS2V5AAAAAAIAAAAMdG90YWxfc3Rha2VkAQAAABJ0b3RhbFN0YWtlZFVzZXJLZXkAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgIAAAANdG90YWxfc3Rha2VkXwUAAAAHYWRkcmVzcwAAAAAVa2V5R2xvYmFsTGFzdEludGVyZXN0AgAAABlnbG9iYWxfbGFzdENoZWNrX2ludGVyZXN0AQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAEAAAAHYWRkcmVzcwkAASwAAAACCQAEJQAAAAEFAAAAB2FkZHJlc3MCAAAAE19sYXN0Q2hlY2tfaW50ZXJlc3QAAAAAD2tleUdsb2JhbEVhcm5lZAIAAAAPZ2xvYmFsX2Vhcm5pbmdzAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAABdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAAAAABAAAADWdldEVnZ0Fzc2V0SWQAAAAACQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAAAAAQAAAA5nZXRCdXJuQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFXN0YXRpY0tleV9idXJuQWRkcmVzcwAAAAABAAAAEGdldEZlZUFnZ3JlZ2F0b3IAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgAAAAABAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAAAAAEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGnN0YXRpY0tleV9pbmN1YmF0b3JBZGRyZXNzAAAAAAEAAAAVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwAAAAABAAAAEWdldENvdXBvbnNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAAAAAEAAAAUZ2V0QWNjQm9vc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABtzdGF0aWNLZXlfYWNjQm9vc3RlckFkZHJlc3MAAAAAAQAAABZjaGVja0FkZGl0aW9uYWxQYXltZW50AAAAAQAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAZRkNBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQAAAAJZmVlQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAEnN0YXRpY0tleV9leHRyYUZlZQAAAAADCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAACWZlZUFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAcRkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkAAaQAAAABBQAAAAlmZWVBbW91bnQCAAAAEyBhbW91bnQgb2Ygd2F2ZWxldHMJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEGdldEZlZUFnZ3JlZ2F0b3IAAAAABQAAAAlmZWVBbW91bnQFAAAABHVuaXQFAAAAA25pbAEAAAAFYXNJbnQAAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAANpbnQFAAAAByRtYXRjaDAFAAAAA2ludAkAAAIAAAABAgAAAB5GQUk6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBAAAAEmNsYWltU3Rha2luZ1Jlc3VsdAAAAAEAAAAHYWRkcmVzcwQAAAAPY3VycmVudEludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAQAAAARbGFzdENoZWNrSW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAFGtleUxhc3RDaGVja0ludGVyZXN0AAAAAQUAAAAHYWRkcmVzcwQAAAAMc3Rha2VkQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABJ0b3RhbFN0YWtlZFVzZXJLZXkAAAABCQAEJQAAAAEFAAAAB2FkZHJlc3MEAAAABnJld2FyZAMJAABmAAAAAgUAAAARbGFzdENoZWNrSW50ZXJlc3QAAAAAAAAAAAAJAABrAAAAAwkAAGUAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAAEWxhc3RDaGVja0ludGVyZXN0BQAAAAxzdGFrZWRBbW91bnQFAAAABVNjYWxlAAAAAAAAAAAABAAAAAxpbnZva2VSZXN1bHQDCQAAZgAAAAIFAAAABnJld2FyZAAAAAAAAAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAECQEAAAARZ2V0Q291cG9uc0FkZHJlc3MAAAAAAgAAABFhZGRDb3Vwb25zRmFybWluZwkABEwAAAACCQAEJQAAAAEFAAAAB2FkZHJlc3MJAARMAAAAAgUAAAAGcmV3YXJkBQAAAANuaWwFAAAAA25pbAUAAAAEdW5pdAMJAAAAAAAAAgUAAAAMaW52b2tlUmVzdWx0BQAAAAxpbnZva2VSZXN1bHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAEFAAAAB2FkZHJlc3MFAAAAD2N1cnJlbnRJbnRlcmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEHJld2FyZENsYWltZWRLZXkAAAABBQAAAAdhZGRyZXNzCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEHJld2FyZENsYWltZWRLZXkAAAABBQAAAAdhZGRyZXNzBQAAAAZyZXdhcmQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAAEmhhbmRsZVN0YWtpbmdUb3BVcAAAAAEAAAAGYW1vdW50BAAAAA9jdXJyZW50SW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAVa2V5R2xvYmFsTGFzdEludGVyZXN0BAAAABF0b3RhbFN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAOdG90YWxTdGFrZWRLZXkAAAAABAAAAA1pbnRlcmVzdERlbHRhAwkAAGYAAAACBQAAABF0b3RhbFN0YWtlZEFtb3VudAAAAAAAAAAAAAkAAGsAAAADBQAAAAZhbW91bnQFAAAABVNjYWxlBQAAABF0b3RhbFN0YWtlZEFtb3VudAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPa2V5R2xvYmFsRWFybmVkCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAPa2V5R2xvYmFsRWFybmVkBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAkAAGQAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAADWludGVyZXN0RGVsdGEFAAAAA25pbAEAAAAJYXNCb29sZWFuAAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAB2Jvb2xlYW4FAAAAByRtYXRjaDAFAAAAB2Jvb2xlYW4JAAACAAAAAQIAAAAiRkFCOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogQm9vbGVhbgEAAAATY2FsY3VsYXRlUGVyY2hQcmljZQAAAAEAAAAHYWRkcmVzcwQAAAARaGFzQXJ0ZWZhY3RTdGFrZWQJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAABRnZXRBY2NCb29zdGVyQWRkcmVzcwAAAAAJAAEsAAAAAgkAASwAAAACAgAAAAtBUlQtWE1JU1RMXwUAAAAHYWRkcmVzcwIAAAAGX293bmVyBAAAAApwZXJjaFByaWNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFnN0YXRpY0tleV92ZWdnUGVyY2hGZWUAAAAAAwkAAAAAAAACBQAAABFoYXNBcnRlZmFjdFN0YWtlZAIAAAAABQAAAApwZXJjaFByaWNlCQAAaAAAAAIJAABpAAAAAgUAAAAKcGVyY2hQcmljZQAAAAAAAAAACgAAAAAAAAAACQEAAAAOZ2V0QXNzZXRPcmlnaW4AAAABAAAACmdlbmVyYXRpb24DCQAAAAAAAAIFAAAACmdlbmVyYXRpb24CAAAAAUcJAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAEAAAAOZ2V0QXNzZXRSYXJpdHkAAAACAAAACGdlbm90eXBlAAAACmdlbmVyYXRpb24EAAAACHF1YW50aXR5CQEAAAATdmFsdWVPckVycm9yTWVz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", "height": 3926586, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FyfY6cw4nMSyAFWQaVSxcev6ov46zNHRFuALWVcfQ3Jn Next: 7RvUeFneHsZ8C2ra2WSpSj3dmMNRpJFjZFQGLn2GYadW Diff:
OldNewDifferences
123123 let reward = if ((lastCheckInterest > 0))
124124 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
125125 else 0
126- let transfer = if ((reward > 0))
127- then nil
128- else nil
129- (transfer ++ [IntegerEntry(keyLastCheckInterest(address), currentInterest), IntegerEntry(rewardClaimedKey(address), (tryGetInteger(rewardClaimedKey(address)) + reward))])
126+ let invokeResult = if ((reward > 0))
127+ then asInt(invoke(getCouponsAddress(), "addCouponsFarming", [toString(address), reward], nil))
128+ else unit
129+ if ((invokeResult == invokeResult))
130+ then [IntegerEntry(keyLastCheckInterest(address), currentInterest), IntegerEntry(rewardClaimedKey(address), (tryGetInteger(rewardClaimedKey(address)) + reward))]
131+ else throw("Strict value is not equal to itself.")
130132 }
131133
132134
361363
362364
363365 @Callable(i)
364-func topUpReward (amount) = {
365- let resHandleStaking = handleStakingTopUp(amount)
366- $Tuple2(resHandleStaking, true)
367- }
366+func topUpReward (amount) = if ((i.caller != getCouponsAddress()))
367+ then throw("VFTUP: Only couponsdapp can do topup!")
368+ else {
369+ let resHandleStaking = handleStakingTopUp(amount)
370+ $Tuple2(resHandleStaking, true)
371+ }
368372
369373
370374
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale = 100000000
55
66 func tryGetInteger (key) = match getInteger(this, key) {
77 case b: Int =>
88 b
99 case _ =>
1010 0
1111 }
1212
1313
1414 func tryGetStringExternal (address,key) = match getString(address, key) {
1515 case a: String =>
1616 a
1717 case _ =>
1818 ""
1919 }
2020
2121
2222 func tryGetString (key) = tryGetStringExternal(this, key)
2323
2424
2525 func staticKey_oracleAddress () = "static_oracleAddress"
2626
2727
2828 func staticKey_eggAssetId () = "static_eggAssetId"
2929
3030
3131 func staticKey_burnAddress () = "static_burnAddress"
3232
3333
3434 func staticKey_extraFee () = "static_extraFee"
3535
3636
3737 func staticKey_feeAggregator () = "static_feeAggregator"
3838
3939
4040 func staticKey_incubatorAddress () = "static_incubatorAddress"
4141
4242
4343 func staticKey_breederAddress () = "static_breederAddress"
4444
4545
4646 func staticKey_refContractAddress () = "static_refContractAddress"
4747
4848
4949 func staticKey_couponsAddress () = "static_couponsAddress"
5050
5151
5252 func staticKey_accBoosterAddress () = "static_accBoosterAddress"
5353
5454
5555 func staticKey_veggPerchFee () = "static_veggPerchFee"
5656
5757
5858 func rewardClaimedKey (address) = (toString(address) + "_claimed")
5959
6060
6161 func totalStakedKey () = "total_staked"
6262
6363
6464 func totalStakedUserKey (address) = ("total_staked_" + address)
6565
6666
6767 let keyGlobalLastInterest = "global_lastCheck_interest"
6868
6969 func keyLastCheckInterest (address) = (toString(address) + "_lastCheck_interest")
7070
7171
7272 let keyGlobalEarned = "global_earnings"
7373
7474 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
7575
7676
7777 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
7878
7979
8080 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
8181
8282
8383 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
8484
8585
8686 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
8787
8888
8989 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
9090
9191
9292 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
9393
9494
9595 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
9696
9797
9898 func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_accBoosterAddress())))
9999
100100
101101 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
102102 then throw("FCAP: Please attach waves")
103103 else {
104104 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
105105 if ((payment.amount != feeAmount))
106106 then throw((("FCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
107107 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
108108 }
109109
110110
111111 func asInt (value) = match value {
112112 case int: Int =>
113113 int
114114 case _ =>
115115 throw("FAI: wrong type, expected: Int")
116116 }
117117
118118
119119 func claimStakingResult (address) = {
120120 let currentInterest = tryGetInteger(keyGlobalLastInterest)
121121 let lastCheckInterest = tryGetInteger(keyLastCheckInterest(address))
122122 let stakedAmount = tryGetInteger(totalStakedUserKey(toString(address)))
123123 let reward = if ((lastCheckInterest > 0))
124124 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
125125 else 0
126- let transfer = if ((reward > 0))
127- then nil
128- else nil
129- (transfer ++ [IntegerEntry(keyLastCheckInterest(address), currentInterest), IntegerEntry(rewardClaimedKey(address), (tryGetInteger(rewardClaimedKey(address)) + reward))])
126+ let invokeResult = if ((reward > 0))
127+ then asInt(invoke(getCouponsAddress(), "addCouponsFarming", [toString(address), reward], nil))
128+ else unit
129+ if ((invokeResult == invokeResult))
130+ then [IntegerEntry(keyLastCheckInterest(address), currentInterest), IntegerEntry(rewardClaimedKey(address), (tryGetInteger(rewardClaimedKey(address)) + reward))]
131+ else throw("Strict value is not equal to itself.")
130132 }
131133
132134
133135 func handleStakingTopUp (amount) = {
134136 let currentInterest = tryGetInteger(keyGlobalLastInterest)
135137 let totalStakedAmount = tryGetInteger(totalStakedKey())
136138 let interestDelta = if ((totalStakedAmount > 0))
137139 then fraction(amount, Scale, totalStakedAmount)
138140 else 0
139141 [IntegerEntry(keyGlobalEarned, (tryGetInteger(keyGlobalEarned) + amount)), IntegerEntry(keyGlobalLastInterest, (currentInterest + interestDelta))]
140142 }
141143
142144
143145 func asBoolean (value) = match value {
144146 case boolean: Boolean =>
145147 boolean
146148 case _ =>
147149 throw("FAB: wrong type, expected: Boolean")
148150 }
149151
150152
151153 func calculatePerchPrice (address) = {
152154 let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner"))
153155 let perchPrice = getIntegerValue(getOracle(), staticKey_veggPerchFee())
154156 if ((hasArtefactStaked == ""))
155157 then perchPrice
156158 else ((perchPrice / 10) * 9)
157159 }
158160
159161
160162 func getAssetOrigin (generation) = if ((generation == "G"))
161163 then getIncubatorAddress()
162164 else getBreederAddress()
163165
164166
165167 func getAssetRarity (genotype,generation) = {
166168 let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found"))
167169 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
168170 if ((power > 0))
169171 then power
170172 else 2
171173 }
172174
173175
174176 func asString (value) = match value {
175177 case string: String =>
176178 string
177179 case _ =>
178180 throw("FAS: wrong type, expected: String")
179181 }
180182
181183
182184 @Callable(i)
183185 func configureOracle (oracle) = if ((i.caller != this))
184186 then throw("ICU: admin only")
185187 else [StringEntry("static_oracleAddress", oracle)]
186188
187189
188190
189191 @Callable(i)
190192 func calculateFarmPower (assetId) = if (!(if ((value(assetInfo(fromBase58String(assetId))).issuer == getBreederAddress()))
191193 then true
192194 else (value(assetInfo(fromBase58String(assetId))).issuer == getIncubatorAddress())))
193195 then throw("This does not seem like a valid Duck!")
194196 else {
195197 let assetName = value(assetInfo(fromBase58String(assetId))).name
196198 let gen = takeRight(assetName, 1)
197199 let genotype = split(dropRight(drop(assetName, 5), 3), "")
198200 func uniqueArrayFilter (accum,nextGen) = if (!(containsElement(accum, nextGen)))
199201 then (accum :+ nextGen)
200202 else accum
201203
202204 let uniqueList = {
203205 let $l = genotype
204206 let $s = size($l)
205207 let $acc0 = nil
206208 func $f0_1 ($a,$i) = if (($i >= $s))
207209 then $a
208210 else uniqueArrayFilter($a, $l[$i])
209211
210212 func $f0_2 ($a,$i) = if (($i >= $s))
211213 then $a
212214 else throw("List size exceeds 8")
213215
214216 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
215217 }
216218 let totalGenes = if ((gen == "U"))
217219 then 8
218220 else size(uniqueList)
219221 let power = pow(15, 1, totalGenes, 0, 2, DOWN)
220222 let multiplier = (((height - 3750000) * 100) / (((60 * 24) * 30) * 3))
221223 let finalPower = ((power * multiplier) / 100)
222224 $Tuple2([IntegerEntry(("DEBUG_" + assetName), finalPower), IntegerEntry(("DEBUG_COEFFICIENT_" + assetName), multiplier)], power)
223225 }
224226
225227
226228
227229 @Callable(i)
228230 func calculateFarmPowerAssetName (assetName) = {
229231 let gen = takeRight(assetName, 1)
230232 let genotype = split(dropRight(drop(assetName, 5), 3), "")
231233 func uniqueArrayFilter (accum,nextGen) = if (!(containsElement(accum, nextGen)))
232234 then (accum :+ nextGen)
233235 else accum
234236
235237 let uniqueList = {
236238 let $l = genotype
237239 let $s = size($l)
238240 let $acc0 = nil
239241 func $f0_1 ($a,$i) = if (($i >= $s))
240242 then $a
241243 else uniqueArrayFilter($a, $l[$i])
242244
243245 func $f0_2 ($a,$i) = if (($i >= $s))
244246 then $a
245247 else throw("List size exceeds 8")
246248
247249 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
248250 }
249251 let totalGenes = if ((gen == "U"))
250252 then 8
251253 else size(uniqueList)
252254 let power = pow(15, 1, totalGenes, 0, 1, DOWN)
253255 let multiplier = (((height - 3750000) * 100) / (((60 * 24) * 30) * 3))
254256 let finalPower = ((power * multiplier) / 100)
255257 $Tuple2([IntegerEntry(("DEBUG_" + assetName), finalPower), IntegerEntry(("DEBUG_COEFFICIENT_" + assetName), multiplier)], power)
256258 }
257259
258260
259261
260262 @Callable(i)
261263 func buyPerch (colorI,refererAddress) = {
262264 let validPayment = checkAdditionalPayment(i.payments[0])
263265 if ((validPayment == validPayment))
264266 then {
265267 let color = if ((colorI == "U"))
266268 then "B"
267269 else colorI
268270 if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
269271 then throw("you need to set color properly")
270272 else {
271273 let exactPrice = calculatePerchPrice(toString(i.caller))
272274 let leftToPay = if ((i.originCaller == i.caller))
273275 then {
274276 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
275277 if ((amountPaidByCoupons == amountPaidByCoupons))
276278 then (exactPrice - amountPaidByCoupons)
277279 else throw("Strict value is not equal to itself.")
278280 }
279281 else exactPrice
280282 let payment = if ((leftToPay != 0))
281283 then {
282284 let firstPayment = if ((size(i.payments) == 2))
283285 then value(i.payments[1])
284286 else value(i.payments[0])
285287 if ((firstPayment.assetId != getEggAssetId()))
286288 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
287289 else if ((firstPayment.amount != leftToPay))
288290 then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller)))
289291 else {
290292 let refererRewardForPerch = fraction(leftToPay, 5, 100)
291293 let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
292294 if ((refCall == refCall))
293295 then {
294296 let toBurn = if (refCall)
295297 then (leftToPay - refererRewardForPerch)
296298 else leftToPay
297299 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
298300 if ((burnCall == burnCall))
299301 then leftToPay
300302 else throw("Strict value is not equal to itself.")
301303 }
302304 else throw("Strict value is not equal to itself.")
303305 }
304306 }
305307 else 0
306308 if ((payment == payment))
307309 then {
308310 let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
309311 let perchAmount = tryGetInteger(perchAmountKey)
310312 ([IntegerEntry(perchAmountKey, (perchAmount + 1))] ++ validPayment)
311313 }
312314 else throw("Strict value is not equal to itself.")
313315 }
314316 }
315317 else throw("Strict value is not equal to itself.")
316318 }
317319
318320
319321
320322 @Callable(i)
321323 func stakeNFT (jColor) = {
322324 let validPayment = checkAdditionalPayment(i.payments[0])
323325 if ((validPayment == validPayment))
324326 then {
325327 let pmt = value(i.payments[1])
326328 let assetId = value(pmt.assetId)
327329 let assetName = value(value(assetInfo(assetId)).name)
328330 let isJackpot = (takeRight(assetName, 1) != "U")
329331 let rarity = if (isJackpot)
330332 then 100
331333 else {
332334 let generation = take(takeRight(assetName, 2), 1)
333335 let farmGen = asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
334336 if ((farmGen == farmGen))
335337 then getAssetRarity(farmGen, generation)
336338 else throw("Strict value is not equal to itself.")
337339 }
338340 if ((70 > rarity))
339341 then throw("Only ducks with a rarity above 70 can be locked!")
340342 else {
341343 let address = toString(i.caller)
342344 let color = if (isJackpot)
343345 then jColor
344346 else takeRight(assetName, 1)
345347 let availablePerches = tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color))
346348 if ((pmt.amount != 1))
347349 then throw("NFT is not attached")
348350 else if ((0 >= availablePerches))
349351 then throw(("no perch available for the type " + color))
350352 else {
351353 let farmingPower = asInt(invoke(this, "calculateFarmPower", [toBase58String(assetId)], nil))
352354 if ((farmingPower == farmingPower))
353355 then (([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower)), IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((toBase58String(assetId) + "_owner"), address), IntegerEntry((toBase58String(assetId) + "_power"), farmingPower), IntegerEntry((((("assetId_" + toBase58String(assetId)) + "_owner_") + address) + "_power"), farmingPower)] ++ claimStakingResult(i.caller)) ++ validPayment)
354356 else throw("Strict value is not equal to itself.")
355357 }
356358 }
357359 }
358360 else throw("Strict value is not equal to itself.")
359361 }
360362
361363
362364
363365 @Callable(i)
364-func topUpReward (amount) = {
365- let resHandleStaking = handleStakingTopUp(amount)
366- $Tuple2(resHandleStaking, true)
367- }
366+func topUpReward (amount) = if ((i.caller != getCouponsAddress()))
367+ then throw("VFTUP: Only couponsdapp can do topup!")
368+ else {
369+ let resHandleStaking = handleStakingTopUp(amount)
370+ $Tuple2(resHandleStaking, true)
371+ }
368372
369373
370374
371375 @Callable(i)
372376 func claimReward () = {
373377 let validPayment = checkAdditionalPayment(i.payments[0])
374378 if ((validPayment == validPayment))
375379 then if ((size(i.payments) > 1))
376380 then throw("Please don't add extra payments")
377381 else (claimStakingResult(i.caller) ++ validPayment)
378382 else throw("Strict value is not equal to itself.")
379383 }
380384
381385

github/deemru/w8io/3ef1775 
44.17 ms