tx · CWRUgeH5y1pzcfkxgXUfRXw66JRjSAFM2h4R89MsmwuG

3NCwNisZfi6BRFvN2dior4BRmxHsV9DU6F5:  -0.02000000 Waves

2022.02.24 15:30 [1937732] smart account 3NCwNisZfi6BRFvN2dior4BRmxHsV9DU6F5 > SELF 0.00000000 Waves

{ "type": 13, "id": "CWRUgeH5y1pzcfkxgXUfRXw66JRjSAFM2h4R89MsmwuG", "fee": 2000000, "feeAssetId": null, "timestamp": 1645705810691, "version": 1, "sender": "3NCwNisZfi6BRFvN2dior4BRmxHsV9DU6F5", "senderPublicKey": "F6s5T7gH1tCEWtkLQazwWPMSPe9FYMMTmHjXYouPnpy8", "proofs": [ "5roxQSD2Sbyt8CgjQn3b3y6nbLf7Bhm3thdcwqwvvfRo8me1oePF494soiiSjXmqfzfkuXTneskRptcTQELSRv1g" ], "script": "base64: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YWxJbnQJAAACAAAAAQIAAAAVZmFpbCB0byBjYXN0IGludG8gSW50AQAAABNmb3JtYXRIaXN0b3J5UmVjb3JkAAAABAAAAAlvbGRBbW91bnQAAAAIb2xkU3RhcnQAAAAJbmV3QW1vdW50AAAACG5ld1N0YXJ0CQAEuQAAAAIJAARMAAAAAgIAAAAMJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAZoZWlnaHQJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAACW9sZEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAACG9sZFN0YXJ0CQAETAAAAAIJAAGkAAAAAQUAAAAJbmV3QW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAIbmV3U3RhcnQFAAAAA25pbAUAAAAJc2VwYXJhdG9yAQAAABJIaXN0b3J5UmVjb3JkRW50cnkAAAAHAAAABHR5cGUAAAALdXNlckFkZHJlc3MAAAAEdHhJZAAAAAlvbGRBbW91bnQAAAAIb2xkU3RhcnQAAAAJbmV3QW1vdW50AAAACG5ld1N0YXJ0CQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5SGlzdG9yeVJlY29yZAAAAAMFAAAABHR5cGUFAAAAC3VzZXJBZGRyZXNzBQAAAAR0eElkCQEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAQFAAAACW9sZEFtb3VudAUAAAAIb2xkU3RhcnQFAAAACW5ld0Ftb3VudAUAAAAIbmV3U3RhcnQBAAAAClN0YXRzRW50cnkAAAADAAAADnRvdGFsTG9ja2VkSW5jAAAADGxvY2tDb3VudEluYwAAAA11c2Vyc0NvdW50SW5jBAAAAApsb2Nrc0NvdW50CQEAAAAMZ2V0SW50T3JaZXJvAAAAAQkBAAAAEmtleVN0YXRzTG9ja3NDb3VudAAAAAAEAAAACnVzZXJzQ291bnQJAQAAAAxnZXRJbnRPclplcm8AAAABCQEAAAASa2V5U3RhdHNVc2Vyc0NvdW50AAAAAAQAAAALdG90YWxBbW91bnQJAQAAAAxnZXRJbnRPclplcm8AAAABCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5U3RhdHNMb2Nrc0NvdW50AAAAAAkAAGQAAAACBQAAAApsb2Nrc0NvdW50BQAAAAxsb2NrQ291bnRJbmMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJrZXlTdGF0c1VzZXJzQ291bnQAAAAACQAAZAAAAAIFAAAACnVzZXJzQ291bnQFAAAADXVzZXJzQ291bnRJbmMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAAAAAJAABkAAAAAgUAAAALdG90YWxBbW91bnQFAAAADnRvdGFsTG9ja2VkSW5jBQAAAANuaWwBAAAAD0xvY2tQYXJhbXNFbnRyeQAAAAMAAAALdXNlckFkZHJlc3MAAAAGYW1vdW50AAAABXN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAAAAAQUAAAALdXNlckFkZHJlc3MFAAAABXN0YXJ0BQAAAANuaWwBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAAACQAFFgAAAAQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAGWtleUF1Y3Rpb25Db250cmFjdEFkZHJlc3MAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAAxrZXlCb25kQXNzZXQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAC2tleUhhbGZMaWZlAAAAAAEAAAAMaXNVc2VyRXhpc3RzAAAAAQAAAAt1c2VyQWRkcmVzcwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABBQAAAAt1c2VyQWRkcmVzcwEAAAATZ2V0VXNlclBhcmFtc09yVW5pdAAAAAEAAAALdXNlckFkZHJlc3MDCQEAAAAMaXNVc2VyRXhpc3RzAAAAAQUAAAALdXNlckFkZHJlc3MJAAUUAAAAAgkBAAAADGdldEludE9yRmFpbAAAAAEJAQAAABZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AAAAAQUAAAALdXNlckFkZHJlc3MJAQAAAAxnZXRJbnRPckZhaWwAAAABCQEAAAAWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAAR1bml0AQAAABNnZXRVc2VyUGFyYW1zT3JGYWlsAAAAAQAAAAt1c2VyQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAATZ2V0VXNlclBhcmFtc09yVW5pdAAAAAEFAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAFVXNlciAJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MCAAAADyBpcyBub3QgZGVmaW5lZAAAAAUAAAABaQEAAAALY29uc3RydWN0b3IAAAAEAAAAF25ldXRyaW5vQ29udHJhY3RBZGRyZXNzAAAAE21hdGhDb250cmFjdEFkZHJlc3MAAAANbWluTG9ja0Ftb3VudAAAAAhoYWxmTGlmZQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAAABQAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWa2V5TWF0aENvbnRyYWN0QWRkcmVzcwAAAAAFAAAAE21hdGhDb250cmFjdEFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBrZXlNaW5Mb2NrQW1vdW50AAAAAAUAAAANbWluTG9ja0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAC2tleUhhbGZMaWZlAAAAAAUAAAAIaGFsZkxpZmUFAAAAA25pbAAAAAFpAQAAAAVzdGFrZQAAAAAEAAAACyR0MDQ0NDI0NTIxCQEAAAAPZ2V0UGFyYW1zT3JGYWlsAAAAAAQAAAAPYXVjdGlvbkNvbnRyYWN0CAUAAAALJHQwNDQ0MjQ1MjEAAAACXzEEAAAAC2JvbmRBc3NldElkCAUAAAALJHQwNDQ0MjQ1MjEAAAACXzIEAAAADW1pbkxvY2tBbW91bnQIBQAAAAskdDA0NDQyNDUyMQAAAAJfMwQAAAAIaGFsZkxpZmUIBQAAAAskdDA0NDQyNDUyMQAAAAJfNAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAVSW52YWxpZCBwYXltZW50cyBzaXplBAAAAAdwYXltZW50CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAATaW52YWxpZEFzc2V0TWVzc2FnZQkAASwAAAACCQABLAAAAAICAAAAD0ludmFsaWQgYXNzZXQuIAkAAlgAAAABBQAAAAtib25kQXNzZXRJZAIAAAAMIGlzIGV4cGVjdGVkBAAAAAdhc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAE2ludmFsaWRBc3NldE1lc3NhZ2UDCQEAAAACIT0AAAACBQAAAAdhc3NldElkBQAAAAtib25kQXNzZXRJZAkAAAIAAAABBQAAABNpbnZhbGlkQXNzZXRNZXNzYWdlBAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAAskdDA1MDIwNTE5MgQAAAAHJG1hdGNoMAkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKKEludCwgSW50KQQAAAABcAUAAAAHJG1hdGNoMAkABRUAAAADBwgFAAAAAXAAAAACXzEIBQAAAAFwAAAAAl8yAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CQAFFQAAAAMGAAAAAAAAAAAAAP//////////CQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAAAlpc05ld1VzZXIIBQAAAAskdDA1MDIwNTE5MgAAAAJfMQQAAAAKbG9ja0Ftb3VudAgFAAAACyR0MDUwMjA1MTkyAAAAAl8yBAAAAA9sb2NrU3RhcnRIZWlnaHQIBQAAAAskdDA1MDIwNTE5MgAAAAJfMwQAAAAMbWVyZ2VkQW1vdW50AwUAAAAJaXNOZXdVc2VyBQAAAAZhbW91bnQJAABkAAAAAgUAAAAGYW1vdW50BQAAAApsb2NrQW1vdW50BAAAABFtZXJnZWRTdGFydEhlaWdodAMFAAAACWlzTmV3VXNlcgUAAAAGaGVpZ2h0BAAAAAxtYXRoQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAWa2V5TWF0aENvbnRyYWN0QWRkcmVzcwAAAAAJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAAA9tZXJnZVN0YWtlc01BVEgJAARMAAAAAgUAAAAGYW1vdW50CQAETAAAAAIFAAAABmhlaWdodAkABEwAAAACBQAAAApsb2NrQW1vdW50CQAETAAAAAIFAAAAD2xvY2tTdGFydEhlaWdodAUAAAADbmlsBQAAAANuaWwDCQAAZgAAAAIFAAAADW1pbkxvY2tBbW91bnQFAAAADG1lcmdlZEFtb3VudAkAAAIAAAABCQABLAAAAAICAAAAE01pbiBsb2NrIGFtb3VudCBpcyAJAAGkAAAAAQUAAAANbWluTG9ja0Ftb3VudAkABE4AAAACCQAETgAAAAIJAARMAAAAAgkBAAAAEkhpc3RvcnlSZWNvcmRFbnRyeQAAAAcCAAAABXN0YWtlBQAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAKbG9ja0Ftb3VudAUAAAAPbG9ja1N0YXJ0SGVpZ2h0BQAAAAxtZXJnZWRBbW91bnQFAAAAEW1lcmdlZFN0YXJ0SGVpZ2h0BQAAAANuaWwJAQAAAA9Mb2NrUGFyYW1zRW50cnkAAAADBQAAAAt1c2VyQWRkcmVzcwUAAAAMbWVyZ2VkQW1vdW50BQAAABFtZXJnZWRTdGFydEhlaWdodAkBAAAAClN0YXRzRW50cnkAAAADBQAAAAZhbW91bnQAAAAAAAAAAAEDBQAAAAlpc05ld1VzZXIAAAAAAAAAAAEAAAAAAAAAAAAAAAABaQEAAAAHdW5zdGFrZQAAAAEAAAAGYW1vdW50BAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAAskdDA1OTYwNjAzOAkBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAADmF1Y3Rpb25BZGRyZXNzCAUAAAALJHQwNTk2MDYwMzgAAAACXzEEAAAAC2JvbmRBc3NldElkCAUAAAALJHQwNTk2MDYwMzgAAAACXzIEAAAADW1pbkxvY2tBbW91bnQIBQAAAAskdDA1OTYwNjAzOAAAAAJfMwQAAAAIaGFsZkxpZmUIBQAAAAskdDA1OTYwNjAzOAAAAAJfNAQAAAALJHQwNjA0MTYxMDQJAQAAABNnZXRVc2VyUGFyYW1zT3JGYWlsAAAAAQUAAAALdXNlckFkZHJlc3MEAAAACmxvY2tBbW91bnQIBQAAAAskdDA2MDQxNjEwNAAAAAJfMQQAAAAJbG9ja1N0YXJ0CAUAAAALJHQwNjA0MTYxMDQAAAACXzIDCQAAZwAAAAIAAAAAAAAAAAAFAAAACmxvY2tBbW91bnQJAAACAAAAAQIAAAASTm90aGluZyB0byB1bnN0YWtlAwkAAGYAAAACBQAAAAZhbW91bnQFAAAACmxvY2tBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAKUmVxdWVzdGVkIAkAAaQAAAABBQAAAAZhbW91bnQCAAAAEiwgYnV0IHN0YWtlZCBvbmx5IAkAAaQAAAABBQAAAApsb2NrQW1vdW50BAAAAAxtYXRoQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAWa2V5TWF0aENvbnRyYWN0QWRkcmVzcwAAAAAEAAAAD2NvbWlzc2lvbkFtb3VudAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAHWdldFVuc3Rha2VDb21pc3Npb25BbW91bnRNQVRICQAETAAAAAIFAAAABmFtb3VudAkABEwAAAACBQAAAAlsb2NrU3RhcnQFAAAAA25pbAUAAAADbmlsCQAETgAAAAIJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAt1c2VyQWRkcmVzcwkAAGUAAAACBQAAAAZhbW91bnQFAAAAD2NvbWlzc2lvbkFtb3VudAUAAAALYm9uZEFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABBQAAAA5hdWN0aW9uQWRkcmVzcwUAAAAPY29taXNzaW9uQW1vdW50BQAAAAtib25kQXNzZXRJZAkABEwAAAACCQEAAAASSGlzdG9yeVJlY29yZEVudHJ5AAAABwIAAAAHdW5zdGFrZQUAAAALdXNlckFkZHJlc3MIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAACmxvY2tBbW91bnQFAAAACWxvY2tTdGFydAkAAGUAAAACBQAAAApsb2NrQW1vdW50BQAAAAZhbW91bnQFAAAACWxvY2tTdGFydAUAAAADbmlsCQEAAAAPTG9ja1BhcmFtc0VudHJ5AAAAAwUAAAALdXNlckFkZHJlc3MJAABlAAAAAgUAAAAKbG9ja0Ftb3VudAUAAAAGYW1vdW50BQAAAAlsb2NrU3RhcnQJAQAAAApTdGF0c0VudHJ5AAAAAwkBAAAAAS0AAAABBQAAAAZhbW91bnQDCQAAAAAAAAIFAAAABmFtb3VudAUAAAAKbG9ja0Ftb3VudAD//////////wAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGYW1vdW50BQAAAApsb2NrQW1vdW50AP//////////AAAAAAAAAAAAAAAAAWkBAAAAE2dOc2J0QW1vdW50UkVBRE9OTFkAAAABAAAADnVzZXJBZGRyZXNzU3RyBAAAAAt1c2VyQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIJAAUUAAAAAgUAAAADbmlsAwkBAAAADGlzVXNlckV4aXN0cwAAAAEFAAAAC3VzZXJBZGRyZXNzCAkBAAAAE2dldFVzZXJQYXJhbXNPckZhaWwAAAABBQAAAAt1c2VyQWRkcmVzcwAAAAJfMQAAAAAAAAAAAAAAAAFpAQAAAB5uc2J0U3Rha2luZ0luZm9XcmFwcGVyUkVBRE9OTFkAAAABAAAADnVzZXJBZGRyZXNzU3RyBAAAAAskdDA3MzI2NzYyNgMJAAAAAAAAAgUAAAAOdXNlckFkZHJlc3NTdHICAAAAAAkABRQAAAACAAAAAAAAAAAAAAAAAAAAAAAABAAAAAt1c2VyQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIDCQEAAAAMaXNVc2VyRXhpc3RzAAAAAQUAAAALdXNlckFkZHJlc3MEAAAACyR0MDc1MTU3NTcwCQEAAAATZ2V0VXNlclBhcmFtc09yRmFpbAAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAAZhbW91bnQIBQAAAAskdDA3NTE1NzU3MAAAAAJfMQQAAAAFc3RhcnQIBQAAAAskdDA3NTE1NzU3MAAAAAJfMgkABRQAAAACBQAAAANuaWwJAAUUAAAAAgUAAAAGYW1vdW50BQAAAAVzdGFydAkABRQAAAACBQAAAANuaWwJAAUUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAHbnNidEFtdAgFAAAACyR0MDczMjY3NjI2AAAAAl8xBAAAAAxzdGFraW5nU3RhcnQIBQAAAAskdDA3MzI2NzYyNgAAAAJfMgkABRQAAAACBQAAAANuaWwJAAUUAAAAAgUAAAAHbnNidEFtdAUAAAAMc3Rha2luZ1N0YXJ0AAAAADxIJAQ=", "chainId": 84, "height": 1937732, "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 separator = "__"
5+
6+let MULT8 = 100000000
7+
8+func keyBondAsset () = "bond_asset_id"
9+
10+
11+func keyAuctionContractAddress () = "auction_contract"
12+
13+
14+func keyNeutrinoContractAddress () = "%s__neutrinoContractAddress"
15+
16+
17+func keyMathContractAddress () = "%s__mathContract"
18+
19+
20+func keyMinLockAmount () = "%s__minLockAmount"
21+
22+
23+func keyHalfLife () = "%s__halfLife"
24+
25+
26+func keyLockParamUserAmount (userAddress) = makeString(["%s%s%s", "paramByUser", toString(userAddress), "amount"], separator)
27+
28+
29+func keyLockParamStartBlock (userAddress) = makeString(["%s%s%s", "paramByUser", toString(userAddress), "start"], separator)
30+
31+
32+func keyHistoryRecord (type,userAddress,txId) = makeString(["%s%s%s%s", "history", type, toString(userAddress), toBase58String(txId)], separator)
33+
34+
35+func keyLockParamTotalAmount () = makeString(["%s%s", "stats", "activeTotalLocked"], separator)
36+
37+
38+func keyStatsLocksCount () = makeString(["%s%s", "stats", "locksCount"], separator)
39+
40+
41+func keyStatsUsersCount () = makeString(["%s%s", "stats", "activeUsersCount"], separator)
42+
43+
44+func keyNextPeriod () = "%s__nextPeriod"
45+
46+
47+func getIntOrZero (key) = valueOrElse(getInteger(this, key), 0)
48+
49+
50+func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (("Mandatory this." + key) + " is not defined"))
51+
52+
53+func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (("Mandatory this." + key) + " is not defined"))
54+
55+
56+func asInt (val) = match val {
57+ case valInt: Int =>
58+ valInt
59+ case _ =>
60+ throw("fail to cast into Int")
61+}
62+
63+
64+func formatHistoryRecord (oldAmount,oldStart,newAmount,newStart) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(oldAmount), toString(oldStart), toString(newAmount), toString(newStart)], separator)
65+
66+
67+func HistoryRecordEntry (type,userAddress,txId,oldAmount,oldStart,newAmount,newStart) = StringEntry(keyHistoryRecord(type, userAddress, txId), formatHistoryRecord(oldAmount, oldStart, newAmount, newStart))
68+
69+
70+func StatsEntry (totalLockedInc,lockCountInc,usersCountInc) = {
71+ let locksCount = getIntOrZero(keyStatsLocksCount())
72+ let usersCount = getIntOrZero(keyStatsUsersCount())
73+ let totalAmount = getIntOrZero(keyLockParamTotalAmount())
74+[IntegerEntry(keyStatsLocksCount(), (locksCount + lockCountInc)), IntegerEntry(keyStatsUsersCount(), (usersCount + usersCountInc)), IntegerEntry(keyLockParamTotalAmount(), (totalAmount + totalLockedInc))]
75+ }
76+
77+
78+func LockParamsEntry (userAddress,amount,start) = [IntegerEntry(keyLockParamUserAmount(userAddress), amount), IntegerEntry(keyLockParamStartBlock(userAddress), start)]
79+
80+
81+func getParamsOrFail () = {
82+ let neutrinoContract = addressFromStringValue(getStringOrFail(keyNeutrinoContractAddress()))
83+ $Tuple4(fromBase58String(getStringValue(neutrinoContract, keyAuctionContractAddress())), fromBase58String(getStringValue(neutrinoContract, keyBondAsset())), getIntOrFail(keyMinLockAmount()), getIntOrFail(keyHalfLife()))
84+ }
85+
86+
87+func isUserExists (userAddress) = isDefined(getInteger(this, keyLockParamStartBlock(userAddress)))
88+
89+
90+func getUserParamsOrUnit (userAddress) = if (isUserExists(userAddress))
91+ then $Tuple2(getIntOrFail(keyLockParamUserAmount(userAddress)), getIntOrFail(keyLockParamStartBlock(userAddress)))
92+ else unit
93+
94+
95+func getUserParamsOrFail (userAddress) = valueOrErrorMessage(getUserParamsOrUnit(userAddress), (("User " + toString(userAddress)) + " is not defined"))
96+
97+
98+@Callable(i)
99+func constructor (neutrinoContractAddress,mathContractAddress,minLockAmount,halfLife) = if ((i.caller != this))
100+ then throw("Permission denied")
101+ else [StringEntry(keyNeutrinoContractAddress(), neutrinoContractAddress), StringEntry(keyMathContractAddress(), mathContractAddress), IntegerEntry(keyMinLockAmount(), minLockAmount), IntegerEntry(keyHalfLife(), halfLife)]
102+
103+
104+
105+@Callable(i)
106+func stake () = {
107+ let $t044424521 = getParamsOrFail()
108+ let auctionContract = $t044424521._1
109+ let bondAssetId = $t044424521._2
110+ let minLockAmount = $t044424521._3
111+ let halfLife = $t044424521._4
112+ if ((size(i.payments) != 1))
113+ then throw("Invalid payments size")
114+ else {
115+ let payment = i.payments[0]
116+ let amount = payment.amount
117+ let invalidAssetMessage = (("Invalid asset. " + toBase58String(bondAssetId)) + " is expected")
118+ let assetId = valueOrErrorMessage(payment.assetId, invalidAssetMessage)
119+ if ((assetId != bondAssetId))
120+ then throw(invalidAssetMessage)
121+ else {
122+ let userAddress = i.caller
123+ let $t050205192 = match getUserParamsOrUnit(userAddress) {
124+ case p: (Int, Int) =>
125+ $Tuple3(false, p._1, p._2)
126+ case _: Unit =>
127+ $Tuple3(true, 0, -1)
128+ case _ =>
129+ throw("Match error")
130+ }
131+ let isNewUser = $t050205192._1
132+ let lockAmount = $t050205192._2
133+ let lockStartHeight = $t050205192._3
134+ let mergedAmount = if (isNewUser)
135+ then amount
136+ else (amount + lockAmount)
137+ let mergedStartHeight = if (isNewUser)
138+ then height
139+ else {
140+ let mathContract = addressFromStringValue(getStringOrFail(keyMathContractAddress()))
141+ asInt(invoke(mathContract, "mergeStakesMATH", [amount, height, lockAmount, lockStartHeight], nil))
142+ }
143+ if ((minLockAmount > mergedAmount))
144+ then throw(("Min lock amount is " + toString(minLockAmount)))
145+ else (([HistoryRecordEntry("stake", userAddress, i.transactionId, lockAmount, lockStartHeight, mergedAmount, mergedStartHeight)] ++ LockParamsEntry(userAddress, mergedAmount, mergedStartHeight)) ++ StatsEntry(amount, 1, if (isNewUser)
146+ then 1
147+ else 0))
148+ }
149+ }
150+ }
151+
152+
153+
154+@Callable(i)
155+func unstake (amount) = {
156+ let userAddress = i.caller
157+ let $t059606038 = getParamsOrFail()
158+ let auctionAddress = $t059606038._1
159+ let bondAssetId = $t059606038._2
160+ let minLockAmount = $t059606038._3
161+ let halfLife = $t059606038._4
162+ let $t060416104 = getUserParamsOrFail(userAddress)
163+ let lockAmount = $t060416104._1
164+ let lockStart = $t060416104._2
165+ if ((0 >= lockAmount))
166+ then throw("Nothing to unstake")
167+ else if ((amount > lockAmount))
168+ then throw(((("Requested " + toString(amount)) + ", but staked only ") + toString(lockAmount)))
169+ else {
170+ let mathContract = addressFromStringValue(getStringOrFail(keyMathContractAddress()))
171+ let comissionAmount = asInt(invoke(mathContract, "getUnstakeComissionAmountMATH", [amount, lockStart], nil))
172+ (([ScriptTransfer(userAddress, (amount - comissionAmount), bondAssetId), ScriptTransfer(Address(auctionAddress), comissionAmount, bondAssetId), HistoryRecordEntry("unstake", userAddress, i.transactionId, lockAmount, lockStart, (lockAmount - amount), lockStart)] ++ LockParamsEntry(userAddress, (lockAmount - amount), lockStart)) ++ StatsEntry(-(amount), if ((amount == lockAmount))
173+ then -1
174+ else 0, if ((amount == lockAmount))
175+ then -1
176+ else 0))
177+ }
178+ }
179+
180+
181+
182+@Callable(i)
183+func gNsbtAmountREADONLY (userAddressStr) = {
184+ let userAddress = addressFromStringValue(userAddressStr)
185+ $Tuple2(nil, if (isUserExists(userAddress))
186+ then getUserParamsOrFail(userAddress)._1
187+ else 0)
188+ }
189+
190+
191+
192+@Callable(i)
193+func nsbtStakingInfoWrapperREADONLY (userAddressStr) = {
194+ let $t073267626 = if ((userAddressStr == ""))
195+ then $Tuple2(0, 0)
196+ else {
197+ let userAddress = addressFromStringValue(userAddressStr)
198+ if (isUserExists(userAddress))
199+ then {
200+ let $t075157570 = getUserParamsOrFail(userAddress)
201+ let amount = $t075157570._1
202+ let start = $t075157570._2
203+ $Tuple2(nil, $Tuple2(amount, start))
204+ }
205+ else $Tuple2(nil, $Tuple2(0, 0))
206+ }
207+ let nsbtAmt = $t073267626._1
208+ let stakingStart = $t073267626._2
209+ $Tuple2(nil, $Tuple2(nsbtAmt, stakingStart))
210+ }
211+
212+

github/deemru/w8io/3ef1775 
29.61 ms