tx · CNaxnZyhzLKz3TLJ4YM1gPzq47b3VAyYWDTTBSXPJGp8

3N71Hm3mrqKKXp3fvHKgFsni9HVC6aR538G:  -0.03700000 Waves

2022.06.15 14:18 [2097427] smart account 3N71Hm3mrqKKXp3fvHKgFsni9HVC6aR538G > SELF 0.00000000 Waves

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

github/deemru/w8io/873ac7e 
20.06 ms