tx · 2HvynjoJsnWHg732uTpZgkZVFdFZi8z3HaTFNC46XY8H

3PJKJ1ndephdRt8nStkn7MZDt7icRgrfRWj:  -0.01000000 Waves

2023.07.19 10:47 [3738085] smart account 3PJKJ1ndephdRt8nStkn7MZDt7icRgrfRWj > SELF 0.00000000 Waves

{ "type": 13, "id": "2HvynjoJsnWHg732uTpZgkZVFdFZi8z3HaTFNC46XY8H", "fee": 1000000, "feeAssetId": null, "timestamp": 1689752908829, "version": 2, "chainId": 87, "sender": "3PJKJ1ndephdRt8nStkn7MZDt7icRgrfRWj", "senderPublicKey": "8MxitwDZ5QDTBqAnzuqTzrX9n8iYjmpi4K4ZK7Yc2geN", "proofs": [ "4e417NZqDZf2c2xvBiwtdnH8vwS8MvBXQBVJefKBi6nGfjh6CoYf9qNkF2kcc6MjbVC7TjWJ9Y3NUqs7k2DNquvj" ], "script": "base64:BgIZCAISAwoBCBIECgIIARIAEgMKAQgSAwoBCA4AB2tfZnVuZHMCB2tfZnVuZHMAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwARa19tYW5hZ2VyX2FkZHJlc3MCEWtfbWFuYWdlcl9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwEJYmFsYW5jZU9mAQhfYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQdrX2Z1bmRzBQhfYXNzZXRJZAAAAQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIoQ29vcmRpbmF0b3Igbm90IHNldCBTaW1wbGUgQXNzZXQgTWFuYWdlcgEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQCD01hbmFnZXIgbm90IHNldAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwELaXNXaGl0ZWxpc3QBCF9hZGRyZXNzCQAAAgUIX2FkZHJlc3MJAKUIAQkBDm1hbmFnZXJBZGRyZXNzAAELdXBkYXRlRnVuZHMCCF9hc3NldElkBl92YWx1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUHa19mdW5kcwUIX2Fzc2V0SWQFBl92YWx1ZQUDbmlsAQpzdHJBc3NldElkAQZfYXNzZXQDCQEJaXNEZWZpbmVkAQUGX2Fzc2V0CQDYBAEJAQV2YWx1ZQEFBl9hc3NldAIFV0FWRVMFAWkBCmluaXRpYWxpemUBDF9jb29yZGluYXRvcgMDCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVW5hYmxlIHRvIGluaXRpYWxpemUJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAWkBCHdpdGhkcmF3AghfYXNzZXRJZAdfYW1vdW50AwMDCQEBIQEJAQtpc1doaXRlbGlzdAEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkAZgIFB19hbW91bnQJAQliYWxhbmNlT2YBBQhfYXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICL0ludmFsaWQgd2l0aGRyYXcgcGFyYW1zIChzaW1wbGUgYXNzZXQgbWFuYWdlcikgCQCkAwEFB19hbW91bnQCAyA+IAkApAMBCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQEE2N1cnJlbnRBc3NldEJhbGFuY2UJAGUCCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQFB19hbW91bnQJAM4IAgkBC3VwZGF0ZUZ1bmRzAgUIX2Fzc2V0SWQFE2N1cnJlbnRBc3NldEJhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdfYW1vdW50AwkAAAIFCF9hc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQhfYXNzZXRJZAUDbmlsAWkBB2RlcG9zaXQABAdfYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQJAQpzdHJBc3NldElkAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAwMJAQEhAQkBC2luaXRpYWxpemVkAAYDCQEBIQEJAQtpc1doaXRlbGlzdAEJAKUIAQgFAWkGY2FsbGVyCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABwkAAgECLUludmFsaWQgZGVwb3NpdCBwYXJhbXMgKHNpbXBsZSBhc3NldCBtYW5hZ2VyKQQTY3VycmVudEFzc2V0QmFsYW5jZQkAZAIJAQliYWxhbmNlT2YBBQhfYXNzZXRJZAUHX2Ftb3VudAkBC3VwZGF0ZUZ1bmRzAgUIX2Fzc2V0SWQFE2N1cnJlbnRBc3NldEJhbGFuY2UBaQELY2xhaW1Qcm9maXQBCF9hc3NldElkAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgkBDm1hbmFnZXJBZGRyZXNzAAkAAgECMUludmFsaWQgY2xhaW1Qcm9maXQgcGFyYW1zIChzaW1wbGUgYXNzZXQgbWFuYWdlcikJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAAMJAAACBQhfYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUIX2Fzc2V0SWQFA25pbAAAAWkBEHZpZXdfY2xhaW1Qcm9maXQBCF9hc3NldElkAwkBASEBCQELaW5pdGlhbGl6ZWQACQACAQI2SW52YWxpZCB2aWV3X2NsYWltUHJvZml0IHBhcmFtcyAoc2ltcGxlIGFzc2V0IG1hbmFnZXIpBAZwcm9maXQAAAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQCASwJAKQDAQkBCWJhbGFuY2VPZgEFCF9hc3NldElkAgEsCQCkAwEFBnByb2ZpdAECdHgBBnZlcmlmeQAEDmNvb3JkaW5hdG9yU3RyCQCdCAIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAwkBCWlzRGVmaW5lZAEFDmNvb3JkaW5hdG9yU3RyBAVhZG1pbgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQ5jb29yZGluYXRvclN0cgUPa19hZG1pbl9hZGRyZXNzAwkBCWlzRGVmaW5lZAEFBWFkbWluCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBWFkbWluCQCsAgIJAKwCAgkArAICAgdzdGF0dXNfCQClCAEFBHRoaXMCAV8JANgEAQgFAnR4AmlkBwkAAgECLnVuYWJsZSB0byB2ZXJpZnk6IGFkbWluIG5vdCBzZXQgaW4gY29vcmRpbmF0b3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkjmfZj", "height": 3738085, "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+let k_funds = "k_funds"
5+
6+let k_coordinatorAddress = "k_coordinatorAddress"
7+
8+let k_manager_address = "k_manager_address"
9+
10+let k_admin_address = "k_admin_address"
11+
12+let k_initialized = "k_initialized"
13+
14+func toCompositeKey (_key,_address) = ((_key + "_") + _address)
15+
16+
17+func balanceOf (_assetId) = valueOrElse(getInteger(this, toCompositeKey(k_funds, _assetId)), 0)
18+
19+
20+func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set Simple Asset Manager")
21+
22+
23+func managerAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_manager_address), "Manager not set")), "Manager not set")
24+
25+
26+func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
27+
28+
29+func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
30+
31+
32+func isWhitelist (_address) = (_address == toString(managerAddress()))
33+
34+
35+func updateFunds (_assetId,_value) = [IntegerEntry(toCompositeKey(k_funds, _assetId), _value)]
36+
37+
38+func strAssetId (_asset) = if (isDefined(_asset))
39+ then toBase58String(value(_asset))
40+ else "WAVES"
41+
42+
43+@Callable(i)
44+func initialize (_coordinator) = if (if (initialized())
45+ then true
46+ else (i.caller != this))
47+ then throw("Unable to initialize")
48+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), BooleanEntry(k_initialized, true)]
49+
50+
51+
52+@Callable(i)
53+func withdraw (_assetId,_amount) = if (if (if (!(isWhitelist(toString(i.caller))))
54+ then true
55+ else !(initialized()))
56+ then true
57+ else (_amount > balanceOf(_assetId)))
58+ then throw(((("Invalid withdraw params (simple asset manager) " + toString(_amount)) + " > ") + toString(balanceOf(_assetId))))
59+ else {
60+ let currentAssetBalance = (balanceOf(_assetId) - _amount)
61+ (updateFunds(_assetId, currentAssetBalance) ++ [ScriptTransfer(i.caller, _amount, if ((_assetId == "WAVES"))
62+ then unit
63+ else fromBase58String(_assetId))])
64+ }
65+
66+
67+
68+@Callable(i)
69+func deposit () = {
70+ let _amount = i.payments[0].amount
71+ let _assetId = strAssetId(i.payments[0].assetId)
72+ if (if (!(initialized()))
73+ then true
74+ else if (!(isWhitelist(toString(i.caller))))
75+ then (i.caller != adminAddress())
76+ else false)
77+ then throw("Invalid deposit params (simple asset manager)")
78+ else {
79+ let currentAssetBalance = (balanceOf(_assetId) + _amount)
80+ updateFunds(_assetId, currentAssetBalance)
81+ }
82+ }
83+
84+
85+
86+@Callable(i)
87+func claimProfit (_assetId) = if (if (!(initialized()))
88+ then true
89+ else (i.caller != managerAddress()))
90+ then throw("Invalid claimProfit params (simple asset manager)")
91+ else $Tuple2([ScriptTransfer(i.caller, 0, if ((_assetId == "WAVES"))
92+ then unit
93+ else fromBase58String(_assetId))], 0)
94+
95+
96+
97+@Callable(i)
98+func view_claimProfit (_assetId) = if (!(initialized()))
99+ then throw("Invalid view_claimProfit params (simple asset manager)")
100+ else {
101+ let profit = 0
102+ throw(((((toString(balanceOf(_assetId)) + ",") + toString(balanceOf(_assetId))) + ",") + toString(profit)))
103+ }
104+
105+
106+@Verifier(tx)
107+func verify () = {
108+ let coordinatorStr = getString(this, k_coordinatorAddress)
109+ if (isDefined(coordinatorStr))
110+ then {
111+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
112+ if (isDefined(admin))
113+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
114+ else throw("unable to verify: admin not set in coordinator")
115+ }
116+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
117+ }
118+

github/deemru/w8io/873ac7e 
26.94 ms