tx · A7E4eiFKTSKsBWTKqZ18cWsJGHmN52HjNzABb6a29yV3 3MqpRA12epGbUr77DaY49oG6vThLgDfYAqu: -0.01000000 Waves 2022.06.02 15:05 [2078685] smart account 3MqpRA12epGbUr77DaY49oG6vThLgDfYAqu > SELF 0.00000000 Waves
{ "type": 13, "id": "A7E4eiFKTSKsBWTKqZ18cWsJGHmN52HjNzABb6a29yV3", "fee": 1000000, "feeAssetId": null, "timestamp": 1654171515581, "version": 2, "chainId": 84, "sender": "3MqpRA12epGbUr77DaY49oG6vThLgDfYAqu", "senderPublicKey": "5zTdxm2C13mhCkkD8hK2mjmPyKaS4qvJ3iSNYSgDFUsZ", "proofs": [ "25qFLLhwsbA8jxLk4e86bdPZiwSmmn5GuyzeAKvJgW3hBxhRDVyFAGMhyASHVc86eTSFSFJjeBvbBb7xrnpqTd8m" ], "script": "base64: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", "height": 2078685, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 356sQahzvBgozx3ijCuH6SALVRhPtG9EzsZANw2hfpLd Next: none Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let lockingStore = "lockingStore" | |
4 | + | let lockingStore = "staker" | |
5 | + | ||
6 | + | let admin = "admin" | |
5 | 7 | ||
6 | 8 | func getI (key) = getInteger(this, key) | |
7 | 9 | ||
40 | 42 | else true | |
41 | 43 | ||
42 | 44 | ||
45 | + | func adminOnly (i) = if ((toString(i.caller) != valueOrElse(getString(this, admin), "no admin defined"))) | |
46 | + | then throw("only an admin can call this function") | |
47 | + | else true | |
48 | + | ||
49 | + | ||
43 | 50 | @Callable(i) | |
44 | - | func init (pLockingStore) = [writeConstString(lockingStore, pLockingStore)] | |
51 | + | func init (pLockingStore,pAdmin) = [writeConstString(lockingStore, pLockingStore), writeConstString(admin, pAdmin)] | |
52 | + | ||
53 | + | ||
54 | + | ||
55 | + | @Callable(i) | |
56 | + | func removeLockingStore (address) = { | |
57 | + | let checks = adminOnly(i) | |
58 | + | if ((checks == checks)) | |
59 | + | then [DeleteEntry(lockingStore)] | |
60 | + | else throw("Strict value is not equal to itself.") | |
61 | + | } | |
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | @Callable(i) | |
66 | + | func updateLockingStore (address) = { | |
67 | + | let checks = adminOnly(i) | |
68 | + | if ((checks == checks)) | |
69 | + | then [DeleteEntry(lockingStore), writeConstString(lockingStore, address)] | |
70 | + | else throw("Strict value is not equal to itself.") | |
71 | + | } | |
45 | 72 | ||
46 | 73 | ||
47 | 74 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let lockingStore = "lockingStore" | |
4 | + | let lockingStore = "staker" | |
5 | + | ||
6 | + | let admin = "admin" | |
5 | 7 | ||
6 | 8 | func getI (key) = getInteger(this, key) | |
7 | 9 | ||
8 | 10 | ||
9 | 11 | func getS (key) = getString(this, key) | |
10 | 12 | ||
11 | 13 | ||
12 | 14 | func getIV (key) = value(getInteger(this, key)) | |
13 | 15 | ||
14 | 16 | ||
15 | 17 | func getSV (key) = value(getString(this, key)) | |
16 | 18 | ||
17 | 19 | ||
18 | 20 | func writeInt (key,value) = if ((0 > value)) | |
19 | 21 | then throw(((("writing negative value " + toString(value)) + " for key ") + key)) | |
20 | 22 | else IntegerEntry(key, value) | |
21 | 23 | ||
22 | 24 | ||
23 | 25 | func writeStr (key,value) = if ((" " == value)) | |
24 | 26 | then throw(("writing an empty string " + value)) | |
25 | 27 | else StringEntry(key, value) | |
26 | 28 | ||
27 | 29 | ||
28 | 30 | func writeConstString (key,value) = if (!(isDefined(getS(key)))) | |
29 | 31 | then writeStr(key, value) | |
30 | 32 | else throw(("already initialized: " + key)) | |
31 | 33 | ||
32 | 34 | ||
33 | 35 | func writeConstInteger (key,value) = if (!(isDefined(getS(key)))) | |
34 | 36 | then writeInt(key, value) | |
35 | 37 | else throw(("already initialized: " + key)) | |
36 | 38 | ||
37 | 39 | ||
38 | 40 | func lockingStoreOnly (i) = if ((toString(i.caller) != valueOrElse(getString(this, lockingStore), "no store address"))) | |
39 | 41 | then throw("only the staker contract can call this function") | |
40 | 42 | else true | |
41 | 43 | ||
42 | 44 | ||
45 | + | func adminOnly (i) = if ((toString(i.caller) != valueOrElse(getString(this, admin), "no admin defined"))) | |
46 | + | then throw("only an admin can call this function") | |
47 | + | else true | |
48 | + | ||
49 | + | ||
43 | 50 | @Callable(i) | |
44 | - | func init (pLockingStore) = [writeConstString(lockingStore, pLockingStore)] | |
51 | + | func init (pLockingStore,pAdmin) = [writeConstString(lockingStore, pLockingStore), writeConstString(admin, pAdmin)] | |
52 | + | ||
53 | + | ||
54 | + | ||
55 | + | @Callable(i) | |
56 | + | func removeLockingStore (address) = { | |
57 | + | let checks = adminOnly(i) | |
58 | + | if ((checks == checks)) | |
59 | + | then [DeleteEntry(lockingStore)] | |
60 | + | else throw("Strict value is not equal to itself.") | |
61 | + | } | |
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | @Callable(i) | |
66 | + | func updateLockingStore (address) = { | |
67 | + | let checks = adminOnly(i) | |
68 | + | if ((checks == checks)) | |
69 | + | then [DeleteEntry(lockingStore), writeConstString(lockingStore, address)] | |
70 | + | else throw("Strict value is not equal to itself.") | |
71 | + | } | |
45 | 72 | ||
46 | 73 | ||
47 | 74 | ||
48 | 75 | @Callable(i) | |
49 | 76 | func transferInterest (user,amount,assetID) = { | |
50 | 77 | let checks = lockingStoreOnly(i) | |
51 | 78 | if ((checks == checks)) | |
52 | 79 | then [ScriptTransfer(addressFromStringValue(user), amount, assetID)] | |
53 | 80 | else throw("Strict value is not equal to itself.") | |
54 | 81 | } | |
55 | 82 | ||
56 | 83 |
github/deemru/w8io/169f3d6 29.16 ms ◑