tx · 4Q3ViMPUf2Ufn8YTa93SEEQqqCaxdYnAfmThzfR5XHR3

3Mxdu4m4tstwdDbFGHeQhutMT8hnzYsEPdS:  -0.00400000 Waves

2024.10.02 16:23 [3309285] smart account 3Mxdu4m4tstwdDbFGHeQhutMT8hnzYsEPdS > SELF 0.00000000 Waves

{ "type": 13, "id": "4Q3ViMPUf2Ufn8YTa93SEEQqqCaxdYnAfmThzfR5XHR3", "fee": 400000, "feeAssetId": null, "timestamp": 1727875466812, "version": 2, "chainId": 84, "sender": "3Mxdu4m4tstwdDbFGHeQhutMT8hnzYsEPdS", "senderPublicKey": "G9rWED3PvHj7gka1akrtQgGMgNrXxmBwpF7nCWwkRfpY", "proofs": [ "4Hzo8iczhpyeQdkuigj59qPcMSAyRvWjSgCZofLiZj1WiE7q9FwqCaPretuvwiPaGrTRzo9bS8Yn18vDctbbaKw1" ], "script": "base64:BgIbCAISABIDCgEBEgQKAggBEgMKAQgSABIDCgEIFQEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhjaGFuZ2VCeQIDa2V5BXZhbHVlCQEId3JpdGVJbnQCBQNrZXkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAABQV2YWx1ZQASY29uZmlnQWRkcmVzc1N0b3JlAgZjb25maWcABmNvbmZpZwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRJjb25maWdBZGRyZXNzU3RvcmUCGGNvbmZpZyBhZGRyZXNzIG5vdCBmb3VuZAIWaW52YWxpZCBjb25maWcgYWRkcmVzcwAHdm91dGluZwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQZjb25maWcCD2NvbnRyYWN0X3ZvdGluZwIXY29udHJhY3Rfdm90aW5nIG5vdCBzZXQCH2ludmFsaWQgY29udHJhY3Rfdm90aW5nIGFkZHJlc3MBB2FsbG93ZWQBAm9wCQD8BwQFBmNvbmZpZwIJb3BBbGxvd2VkCQDMCAIFAm9wBQNuaWwFA25pbAAPdW5pdHNBc3NldElkU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGY29uZmlnAgt1bml0c19hc3NldAIVdW5pdHNfYXNzZXQgbm90IGZvdW5kAAx1bml0c0Fzc2V0SWQJANkEAQUPdW5pdHNBc3NldElkU3RyABVzdGFraW5nQWRkcmVzc2VzU3RvcmUCEHN0YWtpbmdBZGRyZXNzZXMAEHN0YWtpbmdBZGRyZXNzZXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUGY29uZmlnBRVzdGFraW5nQWRkcmVzc2VzU3RvcmUCAAELc3Rha2VkU3RvcmUBB2FkZHJlc3MJAKwCAgIHc3Rha2VkXwUHYWRkcmVzcwEJbG9ja0Jsb2NrAQdhZGRyZXNzCQCsAgICC2Jsb2NrX2xvY2tfBQdhZGRyZXNzAQt1bmxvY2tCbG9jawEHYWRkcmVzcwkArAICAg1ibG9ja191bmxvY2tfBQdhZGRyZXNzAQZzdGFrZWQBB2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBC3N0YWtlZFN0b3JlAQUHYWRkcmVzcwAAABB0b3RhbFN0YWtlZFN0b3JlAgxzdGFrZWRfdG90YWwAC3RvdGFsU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEHRvdGFsU3Rha2VkU3RvcmUAAAALbWluTG9ja1RpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZjb25maWcJAKwCAgkApQgBBQR0aGlzAhBfbWluX2xvY2tfYmxvY2tzAhhfbWluX2xvY2tfYmxvY2tzIG5vdCBzZXQABkhFSUdIVAUGaGVpZ2h0AQZhZHZpc2UACQCsAgIJAKwCAgkArAICAghoZWlnaHQ6IAkApAMBBQZIRUlHSFQCECwgdG90YWxfc3Rha2VkOiAJAKQDAQULdG90YWxTdGFrZWQBCmFkdmlzZVVzZXIBB2FjY291bnQECnVzZXJTdGFrZWQJAQZzdGFrZWQBBQdhY2NvdW50CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAghoZWlnaHQ6IAkApAMBBQZIRUlHSFQCCywgYWNjb3VudDogBQdhY2NvdW50AgosIHN0YWtlZDogCQCkAwEFCnVzZXJTdGFrZWQDCQAAAgUKdXNlclN0YWtlZAAAAiIsIGxvY2tfYmxvY2s6IC0xLCB1bmxvY2tfYmxvY2s6IC0xCQCsAgIJAKwCAgkArAICAg4sIGxvY2tfYmxvY2s6IAkApAMBCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEJbG9ja0Jsb2NrAQUHYWNjb3VudAIQLCB1bmxvY2tfYmxvY2s6IAkApAMBCQERQGV4dHJOYXRpdmUoMTA1NSkBCQELdW5sb2NrQmxvY2sBBQdhY2NvdW50BgFpAQVzdGFrZQAEAWEJAQdhbGxvd2VkAQIFc3Rha2UDCQAAAgUBYQUBYQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECGXNpbmdsZSBwYXltZW50IGlzIGFsbG93ZWQDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHVuaXRzQXNzZXRJZAkAAgECFWludmFsaWQgcGF5bWVudCBhc3NldAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECnVzZXJTdGFrZWQJAQtzdGFrZWRTdG9yZQEFBHVzZXIED2FkZGl0aW9uYWxTdGFrZQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAMwIAgkBCGNoYW5nZUJ5AgUKdXNlclN0YWtlZAUPYWRkaXRpb25hbFN0YWtlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJbG9ja0Jsb2NrAQUEdXNlcgUGSEVJR0hUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELdW5sb2NrQmxvY2sBBQR1c2VyCQBkAgUGSEVJR0hUBQttaW5Mb2NrVGltZQkAzAgCCQEIY2hhbmdlQnkCBRB0b3RhbFN0YWtlZFN0b3JlBQ9hZGRpdGlvbmFsU3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQd1bnN0YWtlAQZhbW91bnQEAWEJAQdhbGxvd2VkAQIHdW5zdGFrZQMJAAACBQFhBQFhAwkAZwIAAAUGYW1vdW50CQACAQIZYW1vdW50IHNob3VsZCBiZSBwb3NpdGl2ZQQEdXNlcgkApQgBCAUBaQZjYWxsZXIECnVzZXJTdGFrZWQJAQtzdGFrZWRTdG9yZQEFBHVzZXIEDHN0YWtlZEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUKdXNlclN0YWtlZAMJAGcCAAAFDHN0YWtlZEFtb3VudAkAAgECDm5vdGhpbmcgc3Rha2VkBAx1bmxvY2tIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQt1bmxvY2tCbG9jawEFBHVzZXIDCQBmAgUMdW5sb2NrSGVpZ2h0BQZIRUlHSFQJAAIBCQCsAgICEmxvY2tlZCB0aWxsIGJsb2NrIAkApAMBBQx1bmxvY2tIZWlnaHQJAM4IAgkAzAgCCQEIY2hhbmdlQnkCBRB0b3RhbFN0YWtlZFN0b3JlCQEBLQEFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAUMdW5pdHNBc3NldElkBQNuaWwDCQAAAgUMc3Rha2VkQW1vdW50BQZhbW91bnQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKdXNlclN0YWtlZAkAzAgCCQELRGVsZXRlRW50cnkBCQEJbG9ja0Jsb2NrAQUEdXNlcgkAzAgCCQELRGVsZXRlRW50cnkBCQELdW5sb2NrQmxvY2sBBQR1c2VyBQNuaWwJAMwIAgkBCGNoYW5nZUJ5AgUKdXNlclN0YWtlZAkBAS0BBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdsb2NrRm9yAgdhZGRyZXNzBnVubG9jawMJAQIhPQIIBQFpBmNhbGxlcgUHdm91dGluZwkAAgECBmRlbmllZAQNY3VycmVudFVubG9jawkBC3ZhbHVlT3JFbHNlAgkAnwgBCQELdW5sb2NrQmxvY2sBBQdhZGRyZXNzAAADCQBnAgUNY3VycmVudFVubG9jawUGdW5sb2NrBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQt1bmxvY2tCbG9jawEFB2FkZHJlc3MFBnVubG9jawUDbmlsAWkBCXVzZXJTdGFrZQEHYWRkcmVzcwkAlAoCBQNuaWwJAQZzdGFrZWQBBQdhZGRyZXNzAWkBCnRvdGFsU3Rha2UACQCUCgIFA25pbAULdG90YWxTdGFrZWQBaQEEaW5pdAEEY29uZgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIFEmNvbmZpZ0FkZHJlc3NTdG9yZQUEY29uZgUDbmlsAO1cMXY=", "height": 3309285, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func a (b,c) = if (!(isDefined(getString(this, b))))
5+ then StringEntry(b, c)
6+ else throw(("already initialized: " + b))
7+
8+
9+func d (b,c) = if ((0 > c))
10+ then throw(((("writing negative value " + toString(c)) + " for key ") + b))
11+ else IntegerEntry(b, c)
12+
13+
14+func e (b,c) = d(b, (valueOrElse(getInteger(this, b), 0) + c))
15+
16+
17+let f = "config"
18+
19+let g = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, f), "config address not found")), "invalid config address")
20+
21+let h = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(g, "contract_voting"), "contract_voting not set")), "invalid contract_voting address")
22+
23+func i (j) = invoke(g, "opAllowed", [j], nil)
24+
25+
26+let k = valueOrErrorMessage(getString(g, "units_asset"), "units_asset not found")
27+
28+let l = fromBase58String(k)
29+
30+let m = "stakingAddresses"
31+
32+let n = valueOrElse(getString(g, m), "")
33+
34+func o (p) = ("staked_" + p)
35+
36+
37+func q (p) = ("block_lock_" + p)
38+
39+
40+func r (p) = ("block_unlock_" + p)
41+
42+
43+func s (p) = valueOrElse(getInteger(this, o(p)), 0)
44+
45+
46+let t = "staked_total"
47+
48+let u = valueOrElse(getInteger(this, t), 0)
49+
50+let v = valueOrErrorMessage(getInteger(g, (toString(this) + "_min_lock_blocks")), "_min_lock_blocks not set")
51+
52+let w = height
53+
54+func x () = ((("height: " + toString(w)) + ", total_staked: ") + toString(u))
55+
56+
57+func y (z) = {
58+ let A = s(z)
59+ (((((("height: " + toString(w)) + ", account: ") + z) + ", staked: ") + toString(A)) + (if ((A == 0))
60+ then ", lock_block: -1, unlock_block: -1"
61+ else (((", lock_block: " + toString(getIntegerValue(q(z)))) + ", unlock_block: ") + toString(getIntegerValue(r(z))))))
62+ }
63+
64+
65+@Callable(B)
66+func stake () = {
67+ let C = i("stake")
68+ if ((C == C))
69+ then if ((size(B.payments) != 1))
70+ then throw("single payment is allowed")
71+ else if ((B.payments[0].assetId != l))
72+ then throw("invalid payment asset")
73+ else {
74+ let D = toString(B.caller)
75+ let A = o(D)
76+ let E = B.payments[0].amount
77+[e(A, E), IntegerEntry(q(D), w), IntegerEntry(r(D), (w + v)), e(t, E)]
78+ }
79+ else throw("Strict value is not equal to itself.")
80+ }
81+
82+
83+
84+@Callable(B)
85+func unstake (F) = {
86+ let C = i("unstake")
87+ if ((C == C))
88+ then if ((0 >= F))
89+ then throw("amount should be positive")
90+ else {
91+ let D = toString(B.caller)
92+ let A = o(D)
93+ let G = getIntegerValue(this, A)
94+ if ((0 >= G))
95+ then throw("nothing staked")
96+ else {
97+ let H = getIntegerValue(r(D))
98+ if ((H > w))
99+ then throw(("locked till block " + toString(H)))
100+ else ([e(t, -(F)), ScriptTransfer(B.caller, F, l)] ++ (if ((G == F))
101+ then [DeleteEntry(A), DeleteEntry(q(D)), DeleteEntry(r(D))]
102+ else [e(A, -(F))]))
103+ }
104+ }
105+ else throw("Strict value is not equal to itself.")
106+ }
107+
108+
109+
110+@Callable(B)
111+func lockFor (p,I) = if ((B.caller != h))
112+ then throw("denied")
113+ else {
114+ let J = valueOrElse(getInteger(r(p)), 0)
115+ if ((J >= I))
116+ then nil
117+ else [IntegerEntry(r(p), I)]
118+ }
119+
120+
121+
122+@Callable(B)
123+func userStake (p) = $Tuple2(nil, s(p))
124+
125+
126+
127+@Callable(B)
128+func totalStake () = $Tuple2(nil, u)
129+
130+
131+
132+@Callable(B)
133+func init (K) = [a(f, K)]
134+
135+

github/deemru/w8io/c3f4982 
12.66 ms