tx · EAoPAcMdVCeHYBYsVc3fhBCYRLvGcHF7PUWjSvukAuQz

3P57bgJaKkzVZZ4KB3hL5s8CP91z5ykVrkS:  -0.01400000 Waves

2021.06.14 17:12 [2634858] smart account 3P57bgJaKkzVZZ4KB3hL5s8CP91z5ykVrkS > SELF 0.00000000 Waves

{ "type": 13, "id": "EAoPAcMdVCeHYBYsVc3fhBCYRLvGcHF7PUWjSvukAuQz", "fee": 1400000, "feeAssetId": null, "timestamp": 1623679946809, "version": 2, "chainId": 87, "sender": "3P57bgJaKkzVZZ4KB3hL5s8CP91z5ykVrkS", "senderPublicKey": "Co7TMNmKiLjZf3t5dX7hbokpv2vHQYc5MvpfJVquVM1s", "proofs": [ "4KjiKXsKirS25yEqDuc8GW1yi6rMX4b1aiKvWStLBEaAgXRgjyTtbKvsT7azmEAFbYY1y1jC4PuhqqhJaHZTRrZ2" ], "script": "base64:AAIEAAAAAAAAAA0IAhIAEgASAwoBCBIAAAAACwAAAAALZWdnc0Fzc2V0SWQBAAAAIDwYu9vARYLHTe7NzGKFe40UZooJ37kdH4kGPL41PsJWAAAAAApwZXJjaFByaWNlAAAAAAAAAABkAAAAAAVzY2FsZQAAAAAAAAAnEAEAAAARZ2V0UmV3YXJkUGVyQmxvY2sAAAAAAAAAAAAAAAAHAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAA3ZhbAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgAAAAAAAAAAAAUAAAADdmFsAQAAABRnZXRBc3NldEZhcm1pbmdQb3dlcgAAAAEAAAAHYXNzZXRJZAAAAAAAAAAAZAEAAAAYZ2V0TGFzdEtub3duRmFybWluZ1Bvd2VyAAAAAQAAAAdhc3NldElkAAAAAAAAAABkAQAAAAxjYWxjSW50ZXJlc3QAAAADAAAAEHByZXZpb3VzSW50ZXJlc3QAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAAAABF0b3RhbEZhcm1pbmdQb3dlcgkAAGQAAAACBQAAABBwcmV2aW91c0ludGVyZXN0CQAAaQAAAAIJAABoAAAAAgkAAGgAAAACBQAAAAVzY2FsZQkBAAAAEWdldFJld2FyZFBlckJsb2NrAAAAAAkAAGUAAAACBQAAAAZoZWlnaHQFAAAAFnByZXZpb3VzSW50ZXJlc3RIZWlnaHQFAAAAEXRvdGFsRmFybWluZ1Bvd2VyAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAAAwkAAGYAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEnRvdGFsX2Zhcm1pbmdQb3dlcgAAAAAAAAAAAAQAAAAQcHJldmlvdXNJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAQAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAB10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAQAAAARdG90YWxGYXJtaW5nUG93ZXIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyCQEAAAAMY2FsY0ludGVyZXN0AAAAAwUAAAAQcHJldmlvdXNJbnRlcmVzdAUAAAAWcHJldmlvdXNJbnRlcmVzdEhlaWdodAUAAAARdG90YWxGYXJtaW5nUG93ZXIDCQAAZwAAAAIFAAAABmhlaWdodAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABF0b3RhbF9zdGFydEhlaWdodAAAAAAAAAAAAAkAAAIAAAABAgAAABxmYXJtaW5nIGlzIG5vdCBsYXVuY2hlZCwgeWV0AQAAABNjYWxjVXNlclJld2FyZERlbHRhAAAAAQAAAAdhZGRyZXNzBAAAABVsYXN0Q2hlY2tVc2VySW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABJfbGFzdENoZWNrSW50ZXJlc3QEAAAAEHVzZXJGYXJtaW5nUG93ZXIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAA1fZmFybWluZ1Bvd2VyBAAAAA9jdXJyZW50SW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAAaAAAAAIFAAAAEHVzZXJGYXJtaW5nUG93ZXIJAABlAAAAAgUAAAAPY3VycmVudEludGVyZXN0BQAAABVsYXN0Q2hlY2tVc2VySW50ZXJlc3QBAAAAE2dldENoZWNrRGF0YUNoYW5nZXMAAAADAAAAEWFzc2V0RmFybWluZ1Bvd2VyAAAAB2FkZHJlc3MAAAAPdXNlclJld2FyZERlbHRhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIFAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAANX2Zhcm1pbmdQb3dlcgkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAANX2Zhcm1pbmdQb3dlcgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAASX2xhc3RDaGVja0ludGVyZXN0CQEAAAASZ2V0Q3VycmVudEludGVyZXN0AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABZfbGFzdENoZWNrRmFybWVkQW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABZfbGFzdENoZWNrRmFybWVkQW1vdW50BQAAAA91c2VyUmV3YXJkRGVsdGEFAAAAA25pbAAAAAQAAAABaQEAAAAEaW5pdAAAAAADCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAKYWRtaW4gb25seQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARdG90YWxfc3RhcnRIZWlnaHQFAAAABmhlaWdodAUAAAADbmlsAAAAAWkBAAAACHN0YWtlTkZUAAAAAAQAAAAHYXNzZXRJZAkBAAAABXZhbHVlAAAAAQgJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAHYWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAEWFzc2V0RmFybWluZ1Bvd2VyCQEAAAAUZ2V0QXNzZXRGYXJtaW5nUG93ZXIAAAABBQAAAAdhc3NldElkBAAAAA91c2VyUmV3YXJkRGVsdGEJAQAAABNjYWxjVXNlclJld2FyZERlbHRhAAAAAQUAAAAHYWRkcmVzcwkBAAAAE2dldENoZWNrRGF0YUNoYW5nZXMAAAADBQAAABFhc3NldEZhcm1pbmdQb3dlcgUAAAAHYWRkcmVzcwUAAAAPdXNlclJld2FyZERlbHRhAAAAAWkBAAAACnVuc3Rha2VORlQAAAABAAAABWFzc2V0BAAAAAdhc3NldElkCQACWQAAAAEFAAAABWFzc2V0BAAAAAdhZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAabGFzdEtub3duQXNzZXRGYXJtaW5nUG93ZXIJAQAAABRnZXRBc3NldEZhcm1pbmdQb3dlcgAAAAEFAAAAB2Fzc2V0SWQEAAAAD3VzZXJSZXdhcmREZWx0YQkBAAAAE2NhbGNVc2VyUmV3YXJkRGVsdGEAAAABBQAAAAdhZGRyZXNzBAAAAAZyZXR1cm4JAQAAABNnZXRDaGVja0RhdGFDaGFuZ2VzAAAAAwkBAAAAAS0AAAABBQAAABpsYXN0S25vd25Bc3NldEZhcm1pbmdQb3dlcgUAAAAHYWRkcmVzcwUAAAAPdXNlclJld2FyZERlbHRhCQAETgAAAAIFAAAABnJldHVybgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAGQFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAtjbGFpbVJld2FyZAAAAAAEAAAAB2FkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAxmYXJtZWRBbW91bnQJAABkAAAAAgkBAAAAE2NhbGNVc2VyUmV3YXJkRGVsdGEAAAABBQAAAAdhZGRyZXNzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAWX2xhc3RDaGVja0Zhcm1lZEFtb3VudAQAAAAPd2l0aGRyYXduQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAQX3dpdGhkcmF3bkFtb3VudAQAAAAGcmV3YXJkCQAAaQAAAAIJAABlAAAAAgUAAAAMZmFybWVkQW1vdW50BQAAAA93aXRoZHJhd25BbW91bnQFAAAABXNjYWxlAwkAAGcAAAACAAAAAAAAAAAABQAAAAZyZXdhcmQJAAACAAAAAQIAAAAceW91IGhhdmUgbm8gRUdHcyB0byB3aXRoZHJhdwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABBfd2l0aGRyYXduQW1vdW50BQAAAAxmYXJtZWRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAZyZXdhcmQFAAAAC2VnZ3NBc3NldElkBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tlebkzJYM=", "height": 2634858, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3gknejiXS7mo1dwfz86S7UGuTAJgzWRk71xnj5dn9txF Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb'
5+
6+let perchPrice = 100
7+
48 let scale = 10000
59
610 func getRewardPerBlock () = 7
7882 }
7983
8084
85+
86+@Callable(i)
87+func claimReward () = {
88+ let address = toString(i.caller)
89+ let farmedAmount = (calcUserRewardDelta(address) + tryGetInteger((("address_" + address) + "_lastCheckFarmedAmount")))
90+ let withdrawnAmount = tryGetInteger((("address_" + address) + "_withdrawnAmount"))
91+ let reward = ((farmedAmount - withdrawnAmount) / scale)
92+ if ((0 >= reward))
93+ then throw("you have no EGGs to withdraw")
94+ else [IntegerEntry((("address_" + address) + "_withdrawnAmount"), farmedAmount), ScriptTransfer(i.caller, reward, eggsAssetId)]
95+ }
96+
97+
8198 @Verifier(tx)
8299 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
83100
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb'
5+
6+let perchPrice = 100
7+
48 let scale = 10000
59
610 func getRewardPerBlock () = 7
711
812
913 func tryGetInteger (key) = {
1014 let val = match getInteger(this, key) {
1115 case b: Int =>
1216 b
1317 case _ =>
1418 0
1519 }
1620 val
1721 }
1822
1923
2024 func getAssetFarmingPower (assetId) = 100
2125
2226
2327 func getLastKnownFarmingPower (assetId) = 100
2428
2529
2630 func calcInterest (previousInterest,previousInterestHeight,totalFarmingPower) = (previousInterest + (((scale * getRewardPerBlock()) * (height - previousInterestHeight)) / totalFarmingPower))
2731
2832
2933 func getCurrentInterest () = if ((tryGetInteger("total_farmingPower") > 0))
3034 then {
3135 let previousInterest = tryGetInteger("total_lastCheckInterest")
3236 let previousInterestHeight = tryGetInteger("total_lastCheckInterestHeight")
3337 let totalFarmingPower = tryGetInteger("total_farmingPower")
3438 calcInterest(previousInterest, previousInterestHeight, totalFarmingPower)
3539 }
3640 else if ((height >= tryGetInteger("total_startHeight")))
3741 then 0
3842 else throw("farming is not launched, yet")
3943
4044
4145 func calcUserRewardDelta (address) = {
4246 let lastCheckUserInterest = tryGetInteger((("address_" + address) + "_lastCheckInterest"))
4347 let userFarmingPower = tryGetInteger((("address_" + address) + "_farmingPower"))
4448 let currentInterest = getCurrentInterest()
4549 (userFarmingPower * (currentInterest - lastCheckUserInterest))
4650 }
4751
4852
4953 func getCheckDataChanges (assetFarmingPower,address,userRewardDelta) = [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), IntegerEntry((("address_" + address) + "_farmingPower"), (tryGetInteger((("address_" + address) + "_farmingPower")) + assetFarmingPower)), IntegerEntry((("address_" + address) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((("address_" + address) + "_lastCheckFarmedAmount"), (tryGetInteger((("address_" + address) + "_lastCheckFarmedAmount")) + userRewardDelta))]
5054
5155
5256 @Callable(i)
5357 func init () = if ((i.caller != this))
5458 then throw("admin only")
5559 else [IntegerEntry("total_startHeight", height)]
5660
5761
5862
5963 @Callable(i)
6064 func stakeNFT () = {
6165 let assetId = value(value(i.payments[0]).assetId)
6266 let address = toString(i.caller)
6367 let assetFarmingPower = getAssetFarmingPower(assetId)
6468 let userRewardDelta = calcUserRewardDelta(address)
6569 getCheckDataChanges(assetFarmingPower, address, userRewardDelta)
6670 }
6771
6872
6973
7074 @Callable(i)
7175 func unstakeNFT (asset) = {
7276 let assetId = fromBase58String(asset)
7377 let address = toString(i.caller)
7478 let lastKnownAssetFarmingPower = getAssetFarmingPower(assetId)
7579 let userRewardDelta = calcUserRewardDelta(address)
7680 let return = getCheckDataChanges(-(lastKnownAssetFarmingPower), address, userRewardDelta)
7781 (return ++ [ScriptTransfer(i.caller, 100, assetId)])
7882 }
7983
8084
85+
86+@Callable(i)
87+func claimReward () = {
88+ let address = toString(i.caller)
89+ let farmedAmount = (calcUserRewardDelta(address) + tryGetInteger((("address_" + address) + "_lastCheckFarmedAmount")))
90+ let withdrawnAmount = tryGetInteger((("address_" + address) + "_withdrawnAmount"))
91+ let reward = ((farmedAmount - withdrawnAmount) / scale)
92+ if ((0 >= reward))
93+ then throw("you have no EGGs to withdraw")
94+ else [IntegerEntry((("address_" + address) + "_withdrawnAmount"), farmedAmount), ScriptTransfer(i.caller, reward, eggsAssetId)]
95+ }
96+
97+
8198 @Verifier(tx)
8299 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
83100

github/deemru/w8io/6500d08 
45.76 ms