tx · PKN4pu2gwmnFLjp1pj3oV3vBUNCgb9fqbjpiGZAzq5Q

3MtjjMsh1dowrf9upVcE54WuAVDT7LELHkT:  -0.03200000 Waves

2022.06.16 15:29 [2098926] smart account 3MtjjMsh1dowrf9upVcE54WuAVDT7LELHkT > SELF 0.00000000 Waves

{ "type": 13, "id": "PKN4pu2gwmnFLjp1pj3oV3vBUNCgb9fqbjpiGZAzq5Q", "fee": 3200000, "feeAssetId": null, "timestamp": 1655382551154, "version": 2, "chainId": 84, "sender": "3MtjjMsh1dowrf9upVcE54WuAVDT7LELHkT", "senderPublicKey": "3HRztajeDZA7KDR9KBd7je5hw4mhuQQRwEtVpeQn4Y2S", "proofs": [ "4uhaZ57sbw2QxDMXq1qZwpnLWmXGs9Bp5SSF6xKwwLdgq8puy9VWnHZ6j2LbDVLxHKkCphenSE5gDWK2T3FvhHJX" ], "script": "base64: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AAIFAAAADGtfdXNlclJld2FyZAUAAAAHX3N0YWtlcgEAAAAWdXNlclJld2FyZFBlclRva2VuUGFpZAAAAAEAAAAHX3N0YWtlcgkBAAAABGludDAAAAABCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABRrX3VzZXJSZXdhcmRQZXJUb2tlbgUAAAAHX3N0YWtlcgEAAAAJYmFsYW5jZU9mAAAAAQAAAAdfc3Rha2VyCQEAAAAEaW50MAAAAAEJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAACWtfYmFsYW5jZQUAAAAHX3N0YWtlcgEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEAAAAGX2RlbHRhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rX3Jld2FyZEJhbGFuY2UJAABkAAAAAgkBAAAADXJld2FyZEJhbGFuY2UAAAAABQAAAAZfZGVsdGEFAAAAA25pbAEAAAAQdXBkYXRlUmV3YXJkUmF0ZQAAAAEAAAALX3Jld2FyZFJhdGUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtfcmV3YXJkUmF0ZQUAAAALX3Jld2FyZFJhdGUFAAAAA25pbAEAAAAKdXBkYXRlVGltZQAAAAIAAAAPX2xhc3RVcGRhdGVUaW1lAAAADV9wZXJpb2RGaW5pc2gJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGtfbGFzdFVwZGF0ZVRpbWUFAAAAD19sYXN0VXBkYXRlVGltZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOa19wZXJpb2RGaW5pc2gFAAAADV9wZXJpb2RGaW5pc2gFAAAAA25pbAEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABAAAAFV9yZXdhcmRQZXJUb2tlblN0b3JlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAWa19yZXdhcmRQZXJUb2tlblN0b3JlZAUAAAAVX3Jld2FyZFBlclRva2VuU3RvcmVkBQAAAANuaWwBAAAAEXVwZGF0ZVVzZXJSZXdhcmRzAAAAAwAAAAdfc3Rha2VyAAAAB19yZXdhcmQAAAATX3VzZXJSZXdhcmRQZXJUb2tlbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAMa191c2VyUmV3YXJkBQAAAAdfc3Rha2VyBQAAAAdfcmV3YXJkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABRrX3VzZXJSZXdhcmRQZXJUb2tlbgUAAAAHX3N0YWtlcgUAAAATX3VzZXJSZXdhcmRQZXJUb2tlbgUAAAADbmlsAQAAAA11cGRhdGVCYWxhbmNlAAAAAgAAAAdfc3Rha2VyAAAABl9kZWx0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAJa19iYWxhbmNlBQAAAAdfc3Rha2VyCQAAZAAAAAIJAQAAAAliYWxhbmNlT2YAAAABBQAAAAdfc3Rha2VyBQAAAAZfZGVsdGEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtfdG90YWxTdXBwbHkJAABkAAAAAgkBAAAAC3RvdGFsU3VwcGx5AAAAAAUAAAAGX2RlbHRhBQAAAANuaWwBAAAAE2N1cnJlbnRUaW1lc3RhbXBTZWMAAAAACQAAaQAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAAAAPoAQAAABhsYXN0VGltZVJld2FyZEFwcGxpY2FibGUAAAAACQEAAAAEbWludgAAAAIJAQAAABNjdXJyZW50VGltZXN0YW1wU2VjAAAAAAkBAAAADHBlcmlvZEZpbmlzaAAAAAABAAAADnJld2FyZFBlclRva2VuAAAAAQAAAA1fYmFsYW5jZURlbHRhAwkAAAAAAAACCQAAZAAAAAIJAQAAAAt0b3RhbFN1cHBseQAAAAAFAAAADV9iYWxhbmNlRGVsdGEAAAAAAAAAAAAJAQAAABRyZXdhcmRQZXJUb2tlblN0b3JlZAAAAAAEAAAADHRpbWVJbnRlcnZhbAkAAGUAAAACCQEAAAAYbGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlAAAAAAkBAAAADmxhc3RVcGRhdGVUaW1lAAAAAAQAAAARYWN0dWFsVGltZUludGV2YWwDCQAAZgAAAAIAAAAAAAAAAAAFAAAADHRpbWVJbnRlcnZhbAAAAAAAAAAAAAUAAAAMdGltZUludGVydmFsBAAAAARkaWZmCQAAaAAAAAIJAQAAAARkaXZkAAAAAgkBAAAACnJld2FyZFJhdGUAAAAACQAAZAAAAAIJAQAAAAt0b3RhbFN1cHBseQAAAAAFAAAADV9iYWxhbmNlRGVsdGEFAAAAEWFjdHVhbFRpbWVJbnRldmFsCQAAZAAAAAIJAQAAABRyZXdhcmRQZXJUb2tlblN0b3JlZAAAAAAFAAAABGRpZmYBAAAABmVhcm5lZAAAAAIAAAAHX3N0YWtlcgAAAA1fYmFsYW5jZURlbHRhBAAAAAtyZXdhcmREZWx0YQkAAGUAAAACCQEAAAAOcmV3YXJkUGVyVG9rZW4AAAABBQAAAA1fYmFsYW5jZURlbHRhCQEAAAAWdXNlclJld2FyZFBlclRva2VuUGFpZAAAAAEFAAAAB19zdGFrZXIJAABkAAAAAgkBAAAABG11bGQAAAACCQAAZAAAAAIJAQAAAAliYWxhbmNlT2YAAAABBQAAAAdfc3Rha2VyBQAAAA1fYmFsYW5jZURlbHRhBQAAAAtyZXdhcmREZWx0YQkBAAAAB3Jld2FyZHMAAAABBQAAAAdfc3Rha2VyAQAAAAx1cGRhdGVSZXdhcmQAAAACAAAAB19zdGFrZXIAAAANX2JhbGFuY2VEZWx0YQQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQAAAA5yZXdhcmRQZXJUb2tlbgAAAAEFAAAADV9iYWxhbmNlRGVsdGEEAAAAEW5ld0xhc3RVcGRhdGVUaW1lCQEAAAATY3VycmVudFRpbWVzdGFtcFNlYwAAAAAEAAAACyR0MDQyNzU0NDY3AwkBAAAAAiE9AAAAAgUAAAAHX3N0YWtlcgIAAAAACQAFFAAAAAIJAQAAAAZlYXJuZWQAAAACBQAAAAdfc3Rha2VyBQAAAA1fYmFsYW5jZURlbHRhBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkABRQAAAACAAAAAAAAAAAAAAAAAAAAAAAABAAAAAxzdGFrZXJFYXJuZWQIBQAAAAskdDA0Mjc1NDQ2NwAAAAJfMQQAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUAAAALJHQwNDI3NTQ0NjcAAAACXzIJAAUWAAAABAUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQFAAAAEW5ld0xhc3RVcGRhdGVUaW1lBQAAAAxzdGFrZXJFYXJuZWQFAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAAAAAYAAAABaQEAAAAFc3Rha2UAAAAABAAAAAdfc3Rha2VyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAHX2Ftb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAADVFNOCQAAAgAAAAECAAAAFUludmFsaWQgc3Rha2luZyBhc3NldAQAAAALJHQwNDgwNzQ5NzIJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAdfc3Rha2VyAAAAAAAAAAAABAAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFAAAACyR0MDQ4MDc0OTcyAAAAAl8xBAAAABFuZXdMYXN0VXBkYXRlVGltZQgFAAAACyR0MDQ4MDc0OTcyAAAAAl8yBAAAAAxzdGFrZXJFYXJuZWQIBQAAAAskdDA0ODA3NDk3MgAAAAJfMwQAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUAAAALJHQwNDgwNzQ5NzIAAAACXzQJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIFAAAADHN0YWtlckVhcm5lZAUAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAQAAAA11cGRhdGVCYWxhbmNlAAAAAgUAAAAHX3N0YWtlcgUAAAAHX2Ftb3VudAAAAAFpAQAAAAd1blN0YWtlAAAAAQAAAAdfYW1vdW50BAAAAAdfc3Rha2VyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMDCQAAZgAAAAIFAAAAB19hbW91bnQJAQAAAAliYWxhbmNlT2YAAAABBQAAAAdfc3Rha2VyBgkBAAAAAiE9AAAAAggFAAAAAWkAAAAIcGF5bWVudHMFAAAAA25pbAkAAAIAAAABAgAAABtJbnZhbGlkIHVuU3Rha2UgcGFyYW1ldGV0cnMEAAAACyR0MDU0ODA1NjQ1CQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAHX3N0YWtlcgAAAAAAAAAAAAQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQAAAAskdDA1NDgwNTY0NQAAAAJfMQQAAAARbmV3TGFzdFVwZGF0ZVRpbWUIBQAAAAskdDA1NDgwNTY0NQAAAAJfMgQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNTQ4MDU2NDUAAAACXzMEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDU0ODA1NjQ1AAAAAl80CQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIFAAAADHN0YWtlckVhcm5lZAUAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAQAAAA11cGRhdGVCYWxhbmNlAAAAAgUAAAAHX3N0YWtlcgkBAAAAAS0AAAABBQAAAAdfYW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAHX2Ftb3VudAUAAAADVFNOBQAAAANuaWwAAAABaQEAAAAPd2l0aGRyYXdSZXdhcmRzAAAAAAQAAAAHX3N0YWtlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACyR0MDYxMDc2MjUyCQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAHX3N0YWtlcgAAAAAAAAAAAAQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQAAAAskdDA2MTA3NjI1MgAAAAJfMQQAAAARbmV3TGFzdFVwZGF0ZVRpbWUIBQAAAAskdDA2MTA3NjI1MgAAAAJfMgQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNjEwNzYyNTIAAAACXzMEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDYxMDc2MjUyAAAAAl80AwkAAGcAAAACAAAAAAAAAAAABQAAAAxzdGFrZXJFYXJuZWQJAAACAAAAAQIAAAAJTm8gcmV3YXJkCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIAAAAAAAAAAAAFAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBAAAAGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAAAAAQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAARbmV3TGFzdFVwZGF0ZVRpbWUJAQAAAAxwZXJpb2RGaW5pc2gAAAAACQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEJAQAAAAEtAAAAAQUAAAAMc3Rha2VyRWFybmVkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMc3Rha2VyRWFybmVkBQAAAARVU0ROBQAAAANuaWwAAAABaQEAAAAKYWRkUmV3YXJkcwAAAAADCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAARVU0ROCQAAAgAAAAECAAAAGkludmFsaWlkIGFkZFJld2FyZHMgcGFyYW1zBAAAAAdfcmV3YXJkCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAkBAAAADHVwZGF0ZVJld2FyZAAAAAIFAAAAC05PX0FERERSRVNTBQAAAAlOT19TVEFLRVIAAAACXzEEAAAACXRpbWVzdGFtcAkBAAAAE2N1cnJlbnRUaW1lc3RhbXBTZWMAAAAABAAAAA1uZXdSZXdhcmRSYXRlAwkAAGYAAAACBQAAAAl0aW1lc3RhbXAJAQAAAAxwZXJpb2RGaW5pc2gAAAAACQAAaQAAAAIFAAAAB19yZXdhcmQFAAAACERVUkFUSU9OBAAAAA1yZW1haW5pbmdUaW1lCQAAZQAAAAIJAQAAAAxwZXJpb2RGaW5pc2gAAAAABQAAAAl0aW1lc3RhbXAEAAAACGxlZnRvdmVyCQAAaAAAAAIJAQAAAApyZXdhcmRSYXRlAAAAAAUAAAANcmVtYWluaW5nVGltZQkAAGkAAAACCQAAZAAAAAIFAAAAB19yZXdhcmQFAAAACGxlZnRvdmVyBQAAAAhEVVJBVElPTgkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAAEHVwZGF0ZVJld2FyZFJhdGUAAAABBQAAAA1uZXdSZXdhcmRSYXRlCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAAE3VwZGF0ZVJld2FyZEJhbGFuY2UAAAABBQAAAAdfcmV3YXJkCQEAAAAKdXBkYXRlVGltZQAAAAIFAAAACXRpbWVzdGFtcAkAAGQAAAACBQAAAAl0aW1lc3RhbXAFAAAACERVUkFUSU9OAAAAAWkBAAAACmFja1Jld2FyZHMAAAAABAAAAA5jdXJyZW50QmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAARVU0ROBAAAAA5yZXdhcmRCYWxhbmNlZQkBAAAADXJld2FyZEJhbGFuY2UAAAAABAAAAAtyZXdhcmREZWx0YQkAAGUAAAACBQAAAA5jdXJyZW50QmFsYW5jZQUAAAAOcmV3YXJkQmFsYW5jZWUDCQAAZwAAAAIAAAAAAAAAAAAFAAAAC3Jld2FyZERlbHRhCQAAAgAAAAECAAAAGkludmFsaWlkIGFja1Jld2FyZHMgcGFyYW1zBAAAAAdfcmV3YXJkBQAAAAtyZXdhcmREZWx0YQQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQICQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAALTk9fQURERFJFU1MFAAAACU5PX1NUQUtFUgAAAAJfMQQAAAAJdGltZXN0YW1wCQEAAAATY3VycmVudFRpbWVzdGFtcFNlYwAAAAAEAAAADW5ld1Jld2FyZFJhdGUDCQAAZgAAAAIFAAAACXRpbWVzdGFtcAkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAABpAAAAAgUAAAAHX3Jld2FyZAUAAAAIRFVSQVRJT04EAAAADXJlbWFpbmluZ1RpbWUJAABlAAAAAgkBAAAADHBlcmlvZEZpbmlzaAAAAAAFAAAACXRpbWVzdGFtcAQAAAAIbGVmdG92ZXIJAABoAAAAAgkBAAAACnJld2FyZFJhdGUAAAAABQAAAA1yZW1haW5pbmdUaW1lCQAAaQAAAAIJAABkAAAAAgUAAAAHX3Jld2FyZAUAAAAIbGVmdG92ZXIFAAAACERVUkFUSU9OCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAAQdXBkYXRlUmV3YXJkUmF0ZQAAAAEFAAAADW5ld1Jld2FyZFJhdGUJAQAAABp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAAAAAEFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEFAAAAB19yZXdhcmQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAAJdGltZXN0YW1wCQAAZAAAAAIFAAAACXRpbWVzdGFtcAUAAAAIRFVSQVRJT04AAAABaQEAAAALdmlld19yZXdhcmQAAAABAAAAB19zdGFrZXIEAAAADHN0YWtlckVhcm5lZAgJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAdfc3Rha2VyAAAAAAAAAAAAAAAAAl8zCQAAAgAAAAEJAAGkAAAAAQUAAAAMc3Rha2VyRWFybmVkAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEEFETUlOX1BVQkxJQ19LRVlg8W4p", "height": 2098926, "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'3NBZ9EADejDGYng8PcwNjGVkDDqJ9uCiMm3')
23+
24+let ADMIN_PUBLIC_KEY = base58'7VpAAqshFScLUJt5MnWjmYhKFqMANizJ74JCZoJEgjoA'
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 actualTimeInteval = if ((0 > timeInterval))
119+ then 0
120+ else timeInterval
121+ let diff = (divd(rewardRate(), (totalSupply() + _balanceDelta)) * actualTimeInteval)
122+ (rewardPerTokenStored() + diff)
123+ }
124+
125+
126+func earned (_staker,_balanceDelta) = {
127+ let rewardDelta = (rewardPerToken(_balanceDelta) - userRewardPerTokenPaid(_staker))
128+ (muld((balanceOf(_staker) + _balanceDelta), rewardDelta) + rewards(_staker))
129+ }
130+
131+
132+func updateReward (_staker,_balanceDelta) = {
133+ let newRewardPerTokenStored = rewardPerToken(_balanceDelta)
134+ let newLastUpdateTime = currentTimestampSec()
135+ let $t042754467 = if ((_staker != ""))
136+ then $Tuple2(earned(_staker, _balanceDelta), newRewardPerTokenStored)
137+ else $Tuple2(0, 0)
138+ let stakerEarned = $t042754467._1
139+ let stakerRewardPerTokenPaid = $t042754467._2
140+ $Tuple4(newRewardPerTokenStored, newLastUpdateTime, stakerEarned, stakerRewardPerTokenPaid)
141+ }
142+
143+
144+@Callable(i)
145+func stake () = {
146+ let _staker = toString(i.caller)
147+ let _amount = i.payments[0].amount
148+ if ((i.payments[0].assetId != TSN))
149+ then throw("Invalid staking asset")
150+ else {
151+ let $t048074972 = updateReward(_staker, 0)
152+ let newRewardPerTokenStored = $t048074972._1
153+ let newLastUpdateTime = $t048074972._2
154+ let stakerEarned = $t048074972._3
155+ let stakerRewardPerTokenPaid = $t048074972._4
156+ (((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, _amount))
157+ }
158+ }
159+
160+
161+
162+@Callable(i)
163+func unStake (_amount) = {
164+ let _staker = toString(i.caller)
165+ if (if ((_amount > balanceOf(_staker)))
166+ then true
167+ else (i.payments != nil))
168+ then throw("Invalid unStake parametetrs")
169+ else {
170+ let $t054805645 = updateReward(_staker, 0)
171+ let newRewardPerTokenStored = $t054805645._1
172+ let newLastUpdateTime = $t054805645._2
173+ let stakerEarned = $t054805645._3
174+ let stakerRewardPerTokenPaid = $t054805645._4
175+ ((((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, -(_amount))) ++ [ScriptTransfer(i.caller, _amount, TSN)])
176+ }
177+ }
178+
179+
180+
181+@Callable(i)
182+func withdrawRewards () = {
183+ let _staker = toString(i.caller)
184+ let $t061076252 = updateReward(_staker, 0)
185+ let newRewardPerTokenStored = $t061076252._1
186+ let newLastUpdateTime = $t061076252._2
187+ let stakerEarned = $t061076252._3
188+ let stakerRewardPerTokenPaid = $t061076252._4
189+ if ((0 >= stakerEarned))
190+ then throw("No reward")
191+ else ((((updateUserRewards(_staker, 0, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateRewardBalance(-(stakerEarned))) ++ [ScriptTransfer(i.caller, stakerEarned, USDN)])
192+ }
193+
194+
195+
196+@Callable(i)
197+func addRewards () = if ((i.payments[0].assetId != USDN))
198+ then throw("Invaliid addRewards params")
199+ else {
200+ let _reward = i.payments[0].amount
201+ let newRewardPerTokenStored = updateReward(NO_ADDDRESS, NO_STAKER)._1
202+ let timestamp = currentTimestampSec()
203+ let newRewardRate = if ((timestamp > periodFinish()))
204+ then (_reward / DURATION)
205+ else {
206+ let remainingTime = (periodFinish() - timestamp)
207+ let leftover = (rewardRate() * remainingTime)
208+ ((_reward + leftover) / DURATION)
209+ }
210+ (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
211+ }
212+
213+
214+
215+@Callable(i)
216+func ackRewards () = {
217+ let currentBalance = assetBalance(this, USDN)
218+ let rewardBalancee = rewardBalance()
219+ let rewardDelta = (currentBalance - rewardBalancee)
220+ if ((0 >= rewardDelta))
221+ then throw("Invaliid ackRewards params")
222+ else {
223+ let _reward = rewardDelta
224+ let newRewardPerTokenStored = updateReward(NO_ADDDRESS, NO_STAKER)._1
225+ let timestamp = currentTimestampSec()
226+ let newRewardRate = if ((timestamp > periodFinish()))
227+ then (_reward / DURATION)
228+ else {
229+ let remainingTime = (periodFinish() - timestamp)
230+ let leftover = (rewardRate() * remainingTime)
231+ ((_reward + leftover) / DURATION)
232+ }
233+ (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
234+ }
235+ }
236+
237+
238+
239+@Callable(i)
240+func view_reward (_staker) = {
241+ let stakerEarned = updateReward(_staker, 0)._3
242+ throw(toString(stakerEarned))
243+ }
244+
245+
246+@Verifier(tx)
247+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], ADMIN_PUBLIC_KEY)
248+

github/deemru/w8io/169f3d6 
33.37 ms