tx · 5vY7SQV7opabuV7gKuD9yZh5fKArmnDLBkgKpx5EHr3x

3MvwsE52cFC6JqbRqe7FykmsYJrCjS5prJa:  -0.03200000 Waves

2022.06.12 16:56 [2093253] smart account 3MvwsE52cFC6JqbRqe7FykmsYJrCjS5prJa > SELF 0.00000000 Waves

{ "type": 13, "id": "5vY7SQV7opabuV7gKuD9yZh5fKArmnDLBkgKpx5EHr3x", "fee": 3200000, "feeAssetId": null, "timestamp": 1655042256599, "version": 2, "chainId": 84, "sender": "3MvwsE52cFC6JqbRqe7FykmsYJrCjS5prJa", "senderPublicKey": "AvkNrJfaSpgzDrwWuAckfs5Zts96BioQuWV5qX4JxER2", "proofs": [ "3Xi78X6gBYWq5r5HGCCsniokJ8ftj8nACHmDgeyHrkoggEhfSasaMSUDxHCG3ryNx9pWLxW2R8TjRDt92eZAi2jh" ], "script": "base64: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AAAAAQAAAAdfc3Rha2VyCQEAAAAEaW50MAAAAAEJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAAFGtfdXNlclJld2FyZFBlclRva2VuBQAAAAdfc3Rha2VyAQAAAAliYWxhbmNlT2YAAAABAAAAB19zdGFrZXIJAQAAAARpbnQwAAAAAQkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAJa19iYWxhbmNlBQAAAAdfc3Rha2VyAQAAABN1cGRhdGVSZXdhcmRCYWxhbmNlAAAAAQAAAAZfZGVsdGEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tfcmV3YXJkQmFsYW5jZQkAAGQAAAACCQEAAAANcmV3YXJkQmFsYW5jZQAAAAAFAAAABl9kZWx0YQUAAAADbmlsAQAAABB1cGRhdGVSZXdhcmRSYXRlAAAAAQAAAAtfcmV3YXJkUmF0ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa19yZXdhcmRSYXRlBQAAAAtfcmV3YXJkUmF0ZQUAAAADbmlsAQAAAAp1cGRhdGVUaW1lAAAAAgAAAA9fbGFzdFVwZGF0ZVRpbWUAAAANX3BlcmlvZEZpbmlzaAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAQa19sYXN0VXBkYXRlVGltZQUAAAAPX2xhc3RVcGRhdGVUaW1lCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA5rX3BlcmlvZEZpbmlzaAUAAAANX3BlcmlvZEZpbmlzaAUAAAADbmlsAQAAABp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAAAAAEAAAAVX3Jld2FyZFBlclRva2VuU3RvcmVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZrX3Jld2FyZFBlclRva2VuU3RvcmVkBQAAABVfcmV3YXJkUGVyVG9rZW5TdG9yZWQFAAAAA25pbAEAAAARdXBkYXRlVXNlclJld2FyZHMAAAADAAAAB19zdGFrZXIAAAAHX3Jld2FyZAAAABNfdXNlclJld2FyZFBlclRva2VuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAAxrX3VzZXJSZXdhcmQFAAAAB19zdGFrZXIFAAAAB19yZXdhcmQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAAFGtfdXNlclJld2FyZFBlclRva2VuBQAAAAdfc3Rha2VyBQAAABNfdXNlclJld2FyZFBlclRva2VuBQAAAANuaWwBAAAADXVwZGF0ZUJhbGFuY2UAAAACAAAAB19zdGFrZXIAAAAGX2RlbHRhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAAlrX2JhbGFuY2UFAAAAB19zdGFrZXIJAABkAAAAAgkBAAAACWJhbGFuY2VPZgAAAAEFAAAAB19zdGFrZXIFAAAABl9kZWx0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa190b3RhbFN1cHBseQkAAGQAAAACCQEAAAALdG90YWxTdXBwbHkAAAAABQAAAAZfZGVsdGEFAAAAA25pbAEAAAATY3VycmVudFRpbWVzdGFtcFNlYwAAAAAJAABpAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAAAAA+gBAAAAGGxhc3RUaW1lUmV3YXJkQXBwbGljYWJsZQAAAAAJAQAAAARtaW52AAAAAgkBAAAAE2N1cnJlbnRUaW1lc3RhbXBTZWMAAAAACQEAAAAMcGVyaW9kRmluaXNoAAAAAAEAAAAOcmV3YXJkUGVyVG9rZW4AAAABAAAADV9iYWxhbmNlRGVsdGEDCQAAAAAAAAIJAABkAAAAAgkBAAAAC3RvdGFsU3VwcGx5AAAAAAUAAAANX2JhbGFuY2VEZWx0YQAAAAAAAAAAAAkBAAAAFHJld2FyZFBlclRva2VuU3RvcmVkAAAAAAQAAAAMdGltZUludGVydmFsCQAAZQAAAAIJAQAAABhsYXN0VGltZVJld2FyZEFwcGxpY2FibGUAAAAACQEAAAAObGFzdFVwZGF0ZVRpbWUAAAAABAAAAARkaWZmCQAAaAAAAAIJAQAAAARkaXZkAAAAAgkBAAAACnJld2FyZFJhdGUAAAAACQAAZAAAAAIJAQAAAAt0b3RhbFN1cHBseQAAAAAFAAAADV9iYWxhbmNlRGVsdGEFAAAADHRpbWVJbnRlcnZhbAkAAGQAAAACCQEAAAAUcmV3YXJkUGVyVG9rZW5TdG9yZWQAAAAABQAAAARkaWZmAQAAAAZlYXJuZWQAAAACAAAAB19zdGFrZXIAAAANX2JhbGFuY2VEZWx0YQQAAAALcmV3YXJkRGVsdGEJAABlAAAAAgkBAAAADnJld2FyZFBlclRva2VuAAAAAQUAAAANX2JhbGFuY2VEZWx0YQkBAAAAFnVzZXJSZXdhcmRQZXJUb2tlblBhaWQAAAABBQAAAAdfc3Rha2VyCQAAZAAAAAIJAQAAAARtdWxkAAAAAgkAAGQAAAACCQEAAAAJYmFsYW5jZU9mAAAAAQUAAAAHX3N0YWtlcgUAAAANX2JhbGFuY2VEZWx0YQUAAAALcmV3YXJkRGVsdGEJAQAAAAdyZXdhcmRzAAAAAQUAAAAHX3N0YWtlcgEAAAAMdXBkYXRlUmV3YXJkAAAAAgAAAAdfc3Rha2VyAAAADV9iYWxhbmNlRGVsdGEEAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAAOcmV3YXJkUGVyVG9rZW4AAAABBQAAAA1fYmFsYW5jZURlbHRhBAAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAAE2N1cnJlbnRUaW1lc3RhbXBTZWMAAAAABAAAAAskdDA0MTE1NDMwNwMJAQAAAAIhPQAAAAIFAAAAB19zdGFrZXICAAAAAAkABRQAAAACCQEAAAAGZWFybmVkAAAAAgUAAAAHX3N0YWtlcgUAAAANX2JhbGFuY2VEZWx0YQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAAUUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNDExNTQzMDcAAAACXzEEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDQxMTU0MzA3AAAAAl8yCQAFFgAAAAQFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkBQAAABFuZXdMYXN0VXBkYXRlVGltZQUAAAAMc3Rha2VyRWFybmVkBQAAABhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQAAAAGAAAAAWkBAAAABXN0YWtlAAAAAAQAAAAHX3N0YWtlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAB19hbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAAA1RTTgkAAAIAAAABAgAAABVJbnZhbGlkIHN0YWtpbmcgYXNzZXQEAAAACyR0MDQ2NDc0ODE4CQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAHX3N0YWtlcgUAAAAHX2Ftb3VudAQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQAAAAskdDA0NjQ3NDgxOAAAAAJfMQQAAAARbmV3TGFzdFVwZGF0ZVRpbWUIBQAAAAskdDA0NjQ3NDgxOAAAAAJfMgQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNDY0NzQ4MTgAAAACXzMEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDQ2NDc0ODE4AAAAAl80CQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAARdXBkYXRlVXNlclJld2FyZHMAAAADBQAAAAdfc3Rha2VyAAAAAAAAAAAABQAAABhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQJAQAAABp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAAAAAEFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAAKdXBkYXRlVGltZQAAAAIFAAAAEW5ld0xhc3RVcGRhdGVUaW1lCQEAAAAMcGVyaW9kRmluaXNoAAAAAAkBAAAADXVwZGF0ZUJhbGFuY2UAAAACBQAAAAdfc3Rha2VyBQAAAAdfYW1vdW50AAAAAWkBAAAAB3VuU3Rha2UAAAABAAAAB19hbW91bnQEAAAAB19zdGFrZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACBQAAAAdfYW1vdW50CQEAAAAJYmFsYW5jZU9mAAAAAQUAAAAHX3N0YWtlcgkAAAIAAAABAgAAAA9JbnZhbGlkIGJhbGFuY2UEAAAACyR0MDUyNjU1NDM3CQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAHX3N0YWtlcgkBAAAAAS0AAAABBQAAAAdfYW1vdW50BAAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFAAAACyR0MDUyNjU1NDM3AAAAAl8xBAAAABFuZXdMYXN0VXBkYXRlVGltZQgFAAAACyR0MDUyNjU1NDM3AAAAAl8yBAAAAAxzdGFrZXJFYXJuZWQIBQAAAAskdDA1MjY1NTQzNwAAAAJfMwQAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUAAAALJHQwNTI2NTU0MzcAAAACXzQJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAAEXVwZGF0ZVVzZXJSZXdhcmRzAAAAAwUAAAAHX3N0YWtlcgAAAAAAAAAAAAUAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAQAAAA11cGRhdGVCYWxhbmNlAAAAAgUAAAAHX3N0YWtlcgkBAAAAAS0AAAABBQAAAAdfYW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAHX2Ftb3VudAUAAAADVFNOBQAAAANuaWwAAAABaQEAAAAPd2l0aGRyYXdSZXdhcmRzAAAAAAQAAAAHX3N0YWtlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACyR0MDU4ODg2MDMzCQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAHX3N0YWtlcgAAAAAAAAAAAAQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQAAAAskdDA1ODg4NjAzMwAAAAJfMQQAAAARbmV3TGFzdFVwZGF0ZVRpbWUIBQAAAAskdDA1ODg4NjAzMwAAAAJfMgQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNTg4ODYwMzMAAAACXzMEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDU4ODg2MDMzAAAAAl80AwkAAGcAAAACAAAAAAAAAAAABQAAAAxzdGFrZXJFYXJuZWQJAAACAAAAAQIAAAAJTm8gcmV3YXJkCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIAAAAAAAAAAAAFAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBAAAAGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAAAAAQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAARbmV3TGFzdFVwZGF0ZVRpbWUJAQAAAAxwZXJpb2RGaW5pc2gAAAAACQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEJAQAAAAEtAAAAAQUAAAAMc3Rha2VyRWFybmVkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMc3Rha2VyRWFybmVkBQAAAARVU0ROBQAAAANuaWwAAAABaQEAAAAKYWRkUmV3YXJkcwAAAAADCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAARVU0ROCQAAAgAAAAECAAAAGkludmFsaWlkIGFkZFJld2FyZHMgcGFyYW1zBAAAAAdfcmV3YXJkCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAkBAAAADHVwZGF0ZVJld2FyZAAAAAIFAAAAC05PX0FERERSRVNTBQAAAAlOT19TVEFLRVIAAAACXzEEAAAACXRpbWVzdGFtcAkBAAAAE2N1cnJlbnRUaW1lc3RhbXBTZWMAAAAABAAAAA1uZXdSZXdhcmRSYXRlAwkAAGYAAAACBQAAAAl0aW1lc3RhbXAJAQAAAAxwZXJpb2RGaW5pc2gAAAAACQAAaQAAAAIFAAAAB19yZXdhcmQFAAAACERVUkFUSU9OBAAAAA1yZW1haW5pbmdUaW1lCQAAZQAAAAIJAQAAAAxwZXJpb2RGaW5pc2gAAAAABQAAAAl0aW1lc3RhbXAEAAAACGxlZnRvdmVyCQAAaAAAAAIJAQAAAApyZXdhcmRSYXRlAAAAAAUAAAANcmVtYWluaW5nVGltZQkAAGkAAAACCQAAZAAAAAIFAAAAB19yZXdhcmQFAAAACGxlZnRvdmVyBQAAAAhEVVJBVElPTgkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAAEHVwZGF0ZVJld2FyZFJhdGUAAAABBQAAAA1uZXdSZXdhcmRSYXRlCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAAE3VwZGF0ZVJld2FyZEJhbGFuY2UAAAABBQAAAAdfcmV3YXJkCQEAAAAKdXBkYXRlVGltZQAAAAIFAAAACXRpbWVzdGFtcAkAAGQAAAACBQAAAAl0aW1lc3RhbXAFAAAACERVUkFUSU9OAAAAAWkBAAAACmFja1Jld2FyZHMAAAAABAAAAA5jdXJyZW50QmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAARVU0ROBAAAAA5yZXdhcmRCYWxhbmNlZQkBAAAADXJld2FyZEJhbGFuY2UAAAAABAAAAAtyZXdhcmREZWx0YQkAAGUAAAACBQAAAA5jdXJyZW50QmFsYW5jZQUAAAAOcmV3YXJkQmFsYW5jZWUDCQAAAAAAAAIFAAAAC3Jld2FyZERlbHRhAAAAAAAAAAAACQAAAgAAAAECAAAAGkludmFsaWlkIGFja1Jld2FyZHMgcGFyYW1zBAAAAAdfcmV3YXJkBQAAAAtyZXdhcmREZWx0YQQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQICQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAALTk9fQURERFJFU1MFAAAACU5PX1NUQUtFUgAAAAJfMQQAAAAJdGltZXN0YW1wCQEAAAATY3VycmVudFRpbWVzdGFtcFNlYwAAAAAEAAAADW5ld1Jld2FyZFJhdGUDCQAAZgAAAAIFAAAACXRpbWVzdGFtcAkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAABpAAAAAgUAAAAHX3Jld2FyZAUAAAAIRFVSQVRJT04EAAAADXJlbWFpbmluZ1RpbWUJAABlAAAAAgkBAAAADHBlcmlvZEZpbmlzaAAAAAAFAAAACXRpbWVzdGFtcAQAAAAIbGVmdG92ZXIJAABoAAAAAgkBAAAACnJld2FyZFJhdGUAAAAABQAAAA1yZW1haW5pbmdUaW1lCQAAaQAAAAIJAABkAAAAAgUAAAAHX3Jld2FyZAUAAAAIbGVmdG92ZXIFAAAACERVUkFUSU9OCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAAQdXBkYXRlUmV3YXJkUmF0ZQAAAAEFAAAADW5ld1Jld2FyZFJhdGUJAQAAABp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAAAAAEFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEFAAAAB19yZXdhcmQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAAJdGltZXN0YW1wCQAAZAAAAAIFAAAACXRpbWVzdGFtcAUAAAAIRFVSQVRJT04AAAABaQEAAAALdmlld19yZXdhcmQAAAABAAAAB19zdGFrZXIEAAAADHN0YWtlckVhcm5lZAgJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAdfc3Rha2VyAAAAAAAAAAAAAAAAAl8zCQAAAgAAAAEJAAGkAAAAAQUAAAAMc3Rha2VyRWFybmVkAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXlwVB2c", "height": 2093253, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let k_totalSupply = "k_totalSupply"
5+
6+let k_rewardBalance = "k_rewardBalance"
7+
8+let k_lastUpdateTime = "k_lastUpdateTime"
9+
10+let k_rewardPerTokenStored = "k_rewardPerTokenStored"
11+
12+let k_rewardRate = "k_rewardRate"
13+
14+let k_periodFinish = "k_periodFinish"
15+
16+let k_balance = "k_balance"
17+
18+let k_userRewardPerToken = "k_userRewardPerToken"
19+
20+let k_userReward = "k_userReward"
21+
22+let ADMIN_ADDRESS = Address(base58'3N9TX4VTous51izBtUjw29qBn3dTUqEQJ4Z')
23+
24+let USDN = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
25+
26+let TSN = base58'HL6bTgU1e5SoaSDxp9PV1Bj8WvKAk8jReNwgax44d5S6'
27+
28+let DECIMAL_UNIT = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
29+
30+let DURATION = ((60 * 60) * 24)
31+
32+let NO_ADDDRESS = ""
33+
34+let NO_STAKER = 0
35+
36+func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
37+
38+
39+func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
40+
41+
42+func abs (_x) = if ((_x > 0))
43+ then _x
44+ else -(_x)
45+
46+
47+func minv (_x,_y) = if ((_x > _y))
48+ then _y
49+ else _x
50+
51+
52+func toCompositeKey (_key,_address) = ((_key + "_") + _address)
53+
54+
55+func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
56+
57+
58+func int0 (k) = valueOrElse(getInteger(this, k), 0)
59+
60+
61+func totalSupply () = int0(k_totalSupply)
62+
63+
64+func rewardPerTokenStored () = int0(k_rewardPerTokenStored)
65+
66+
67+func lastUpdateTime () = int0(k_lastUpdateTime)
68+
69+
70+func rewardRate () = int0(k_rewardRate)
71+
72+
73+func periodFinish () = int0(k_periodFinish)
74+
75+
76+func rewardBalance () = int0(k_rewardBalance)
77+
78+
79+func rewards (_staker) = int0(toCompositeKey(k_userReward, _staker))
80+
81+
82+func userRewardPerTokenPaid (_staker) = int0(toCompositeKey(k_userRewardPerToken, _staker))
83+
84+
85+func balanceOf (_staker) = int0(toCompositeKey(k_balance, _staker))
86+
87+
88+func updateRewardBalance (_delta) = [IntegerEntry(k_rewardBalance, (rewardBalance() + _delta))]
89+
90+
91+func updateRewardRate (_rewardRate) = [IntegerEntry(k_rewardRate, _rewardRate)]
92+
93+
94+func updateTime (_lastUpdateTime,_periodFinish) = [IntegerEntry(k_lastUpdateTime, _lastUpdateTime), IntegerEntry(k_periodFinish, _periodFinish)]
95+
96+
97+func updateRewardPerTokenStored (_rewardPerTokenStored) = [IntegerEntry(k_rewardPerTokenStored, _rewardPerTokenStored)]
98+
99+
100+func updateUserRewards (_staker,_reward,_userRewardPerToken) = [IntegerEntry(toCompositeKey(k_userReward, _staker), _reward), IntegerEntry(toCompositeKey(k_userRewardPerToken, _staker), _userRewardPerToken)]
101+
102+
103+func updateBalance (_staker,_delta) = [IntegerEntry(toCompositeKey(k_balance, _staker), (balanceOf(_staker) + _delta)), IntegerEntry(k_totalSupply, (totalSupply() + _delta))]
104+
105+
106+func currentTimestampSec () = (lastBlock.timestamp / 1000)
107+
108+
109+func lastTimeRewardApplicable () = minv(currentTimestampSec(), periodFinish())
110+
111+
112+func rewardPerToken (_balanceDelta) = if (((totalSupply() + _balanceDelta) == 0))
113+ then rewardPerTokenStored()
114+ else {
115+ let timeInterval = (lastTimeRewardApplicable() - lastUpdateTime())
116+ let diff = (divd(rewardRate(), (totalSupply() + _balanceDelta)) * timeInterval)
117+ (rewardPerTokenStored() + diff)
118+ }
119+
120+
121+func earned (_staker,_balanceDelta) = {
122+ let rewardDelta = (rewardPerToken(_balanceDelta) - userRewardPerTokenPaid(_staker))
123+ (muld((balanceOf(_staker) + _balanceDelta), rewardDelta) + rewards(_staker))
124+ }
125+
126+
127+func updateReward (_staker,_balanceDelta) = {
128+ let newRewardPerTokenStored = rewardPerToken(_balanceDelta)
129+ let newLastUpdateTime = currentTimestampSec()
130+ let $t041154307 = if ((_staker != ""))
131+ then $Tuple2(earned(_staker, _balanceDelta), newRewardPerTokenStored)
132+ else $Tuple2(0, 0)
133+ let stakerEarned = $t041154307._1
134+ let stakerRewardPerTokenPaid = $t041154307._2
135+ $Tuple4(newRewardPerTokenStored, newLastUpdateTime, stakerEarned, stakerRewardPerTokenPaid)
136+ }
137+
138+
139+@Callable(i)
140+func stake () = {
141+ let _staker = toString(i.caller)
142+ let _amount = i.payments[0].amount
143+ if ((i.payments[0].assetId != TSN))
144+ then throw("Invalid staking asset")
145+ else {
146+ let $t046474818 = updateReward(_staker, _amount)
147+ let newRewardPerTokenStored = $t046474818._1
148+ let newLastUpdateTime = $t046474818._2
149+ let stakerEarned = $t046474818._3
150+ let stakerRewardPerTokenPaid = $t046474818._4
151+ (((updateUserRewards(_staker, 0, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, _amount))
152+ }
153+ }
154+
155+
156+
157+@Callable(i)
158+func unStake (_amount) = {
159+ let _staker = toString(i.caller)
160+ if ((_amount > balanceOf(_staker)))
161+ then throw("Invalid balance")
162+ else {
163+ let $t052655437 = updateReward(_staker, -(_amount))
164+ let newRewardPerTokenStored = $t052655437._1
165+ let newLastUpdateTime = $t052655437._2
166+ let stakerEarned = $t052655437._3
167+ let stakerRewardPerTokenPaid = $t052655437._4
168+ ((((updateUserRewards(_staker, 0, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, -(_amount))) ++ [ScriptTransfer(i.caller, _amount, TSN)])
169+ }
170+ }
171+
172+
173+
174+@Callable(i)
175+func withdrawRewards () = {
176+ let _staker = toString(i.caller)
177+ let $t058886033 = updateReward(_staker, 0)
178+ let newRewardPerTokenStored = $t058886033._1
179+ let newLastUpdateTime = $t058886033._2
180+ let stakerEarned = $t058886033._3
181+ let stakerRewardPerTokenPaid = $t058886033._4
182+ if ((0 >= stakerEarned))
183+ then throw("No reward")
184+ else ((((updateUserRewards(_staker, 0, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateRewardBalance(-(stakerEarned))) ++ [ScriptTransfer(i.caller, stakerEarned, USDN)])
185+ }
186+
187+
188+
189+@Callable(i)
190+func addRewards () = if ((i.payments[0].assetId != USDN))
191+ then throw("Invaliid addRewards params")
192+ else {
193+ let _reward = i.payments[0].amount
194+ let newRewardPerTokenStored = updateReward(NO_ADDDRESS, NO_STAKER)._1
195+ let timestamp = currentTimestampSec()
196+ let newRewardRate = if ((timestamp > periodFinish()))
197+ then (_reward / DURATION)
198+ else {
199+ let remainingTime = (periodFinish() - timestamp)
200+ let leftover = (rewardRate() * remainingTime)
201+ ((_reward + leftover) / DURATION)
202+ }
203+ (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
204+ }
205+
206+
207+
208+@Callable(i)
209+func ackRewards () = {
210+ let currentBalance = assetBalance(this, USDN)
211+ let rewardBalancee = rewardBalance()
212+ let rewardDelta = (currentBalance - rewardBalancee)
213+ if ((rewardDelta == 0))
214+ then throw("Invaliid ackRewards params")
215+ else {
216+ let _reward = rewardDelta
217+ let newRewardPerTokenStored = updateReward(NO_ADDDRESS, NO_STAKER)._1
218+ let timestamp = currentTimestampSec()
219+ let newRewardRate = if ((timestamp > periodFinish()))
220+ then (_reward / DURATION)
221+ else {
222+ let remainingTime = (periodFinish() - timestamp)
223+ let leftover = (rewardRate() * remainingTime)
224+ ((_reward + leftover) / DURATION)
225+ }
226+ (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
227+ }
228+ }
229+
230+
231+
232+@Callable(i)
233+func view_reward (_staker) = {
234+ let stakerEarned = updateReward(_staker, 0)._3
235+ throw(toString(stakerEarned))
236+ }
237+
238+
239+@Verifier(tx)
240+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
241+

github/deemru/w8io/169f3d6 
31.69 ms