tx · 3nJkUjxdAteAU7TY77b5Lc8PtxpHnu5wL4SA31XLrt22

3N65ziw5oaWWQHthPW5jzsh9VxjYxHwpv33:  -0.01300000 Waves

2023.02.28 14:24 [2469488] smart account 3N65ziw5oaWWQHthPW5jzsh9VxjYxHwpv33 > SELF 0.00000000 Waves

{ "type": 13, "id": "3nJkUjxdAteAU7TY77b5Lc8PtxpHnu5wL4SA31XLrt22", "fee": 1300000, "feeAssetId": null, "timestamp": 1677583500491, "version": 2, "chainId": 84, "sender": "3N65ziw5oaWWQHthPW5jzsh9VxjYxHwpv33", "senderPublicKey": "5yoY2Atq5TS6YzXkDHGig1DJdaYnWskuGToqK61rQWQd", "proofs": [ "453CC5awaEBwwjqdJUNSKaZYoEJPmomqYFRGT5ot4WuE1dVKs4S9W87ReB6Q8iSNUcBpFKg8rVZfvFAKyH8WCTBo" ], "script": "base64:BgILCAISABIDCgEIEgANARNrZXlJbnZlc3RXeFh0bkRlbGF5AAITJV9faW52ZXN0V3hYdG5EZWxheQEXa2V5SW52ZXN0V3hYdG5BbW91bnRYdG4AAhclX19pbnZlc3RXeFh0bkFtb3VudFh0bgEMa2V5V3hYdG5Qb29sAAIMJV9fd3hYdG5Qb29sAQ1rZXlYdG5Bc3NldElkAAINJV9feHRuQXNzZXRJZAEKa2V5V3hYdG5McAACCiVfX3d4WHRuTHABDmtleUxwVG9BZGRyZXNzAAIOJV9fbHBUb0FkZHJlc3MBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBGGtleUludmVzdFd4WHRuTGFzdEhlaWdodAACGCVfX2ludmVzdFd4WHRuTGFzdEhlaWdodAEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQh0aHJvd0VycgEDbXNnCQACAQkAuQkCCQDMCAICDmludmVzdG9yLnJpZGU6CQDMCAIFA21zZwUDbmlsAgEgAQttdXN0TWFuYWdlcgEBaQQCcGQJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDADCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQJwawYFAnBkAwkAAQIFByRtYXRjaDACBFVuaXQDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgUCcGQJAAIBAgtNYXRjaCBlcnJvcgMBaQELaW52ZXN0V3hYdG4ABAhsYXN0Q2FsbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEYa2V5SW52ZXN0V3hYdG5MYXN0SGVpZ2h0AAAABAVkZWxheQkBEUBleHRyTmF0aXZlKDEwNTUpAQkBE2tleUludmVzdFd4WHRuRGVsYXkABAZjaGVja3MJAMwIAgMJAGYCBQZoZWlnaHQJAGQCBQhsYXN0Q2FsbAUFZGVsYXkGCQEIdGhyb3dFcnIBAg53YWl0IHRvIGludmVzdAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAlscEFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBCmtleVd4WHRuTHAABAhscEJlZm9yZQkA8AcCBQR0aGlzBQlscEFzc2V0SWQDCQAAAgUIbHBCZWZvcmUFCGxwQmVmb3JlBANpbnYJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBDGtleVd4WHRuUG9vbAACCXB1dE9uZVRrbgkAzAgCAAAJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBCQERQGV4dHJOYXRpdmUoMTA1OCkBCQENa2V5WHRuQXNzZXRJZAAJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARdrZXlJbnZlc3RXeFh0bkFtb3VudFh0bgAFA25pbAMJAAACBQNpbnYFA2ludgQHbHBBZnRlcgkA8AcCBQR0aGlzBQlscEFzc2V0SWQDCQAAAgUHbHBBZnRlcgUHbHBBZnRlcgQFbHBHb3QJAGUCBQdscEFmdGVyBQhscEJlZm9yZQQJbm90WmVyb0xwAwkAAAIFBWxwR290AAAJAQh0aHJvd0VycgECEWxwIHRvIGdldCBpcyB6ZXJvBQR1bml0AwkAAAIFCW5vdFplcm9McAUJbm90WmVyb0xwCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5SW52ZXN0V3hYdG5MYXN0SGVpZ2h0AAUGaGVpZ2h0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQ5rZXlMcFRvQWRkcmVzcwAFBWxwR290BQlscEFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb25maXJtTWFuYWdlcgAEAnBtCQEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAVoYXNQTQMJAQlpc0RlZmluZWQBBQJwbQYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUFaGFzUE0FBWhhc1BNBAdjaGVja1BNAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCcG0GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFB2NoZWNrUE0FB2NoZWNrUE0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleU1hbmFnZXJQdWJsaWNLZXkACQDYBAEJAQV2YWx1ZQEFAnBtCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tlefMjKbM=", "height": 2469488, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: rr6jZmPznQKKAccT35nDiQz8JTSPm2zJ3JmuJToRooh Next: C7YJ5Jd4Sm89gwyG2Pinfr3LKUM57LiAL7XD7eL39g7m Diff:
OldNewDifferences
2222 func keyManagerPublicKey () = "%s__managerPublicKey"
2323
2424
25+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
26+
27+
2528 func keyInvestWxXtnLastHeight () = "%__investWxXtnLastHeight"
2629
2730
3538 }
3639
3740
41+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
42+ case s: String =>
43+ fromBase58String(s)
44+ case _: Unit =>
45+ unit
46+ case _ =>
47+ throw("Match error")
48+}
49+
50+
3851 func throwErr (msg) = throw(makeString(["investor.ride:", msg], " "))
52+
53+
54+func mustManager (i) = {
55+ let pd = throwErr("permission denied")
56+ match managerPublicKeyOrUnit() {
57+ case pk: ByteVector =>
58+ if ((i.callerPublicKey == pk))
59+ then true
60+ else pd
61+ case _: Unit =>
62+ if ((i.caller == this))
63+ then true
64+ else pd
65+ case _ =>
66+ throw("Match error")
67+ }
68+ }
3969
4070
4171 @Callable(i)
75105 }
76106
77107
108+
109+@Callable(i)
110+func setManager (pendingManagerPublicKey) = {
111+ let checkCaller = mustManager(i)
112+ if ((checkCaller == checkCaller))
113+ then {
114+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
115+ if ((checkManagerPublicKey == checkManagerPublicKey))
116+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
117+ else throw("Strict value is not equal to itself.")
118+ }
119+ else throw("Strict value is not equal to itself.")
120+ }
121+
122+
123+
124+@Callable(i)
125+func confirmManager () = {
126+ let pm = pendingManagerPublicKeyOrUnit()
127+ let hasPM = if (isDefined(pm))
128+ then true
129+ else throw("No pending manager")
130+ if ((hasPM == hasPM))
131+ then {
132+ let checkPM = if ((i.callerPublicKey == value(pm)))
133+ then true
134+ else throw("You are not pending manager")
135+ if ((checkPM == checkPM))
136+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
137+ else throw("Strict value is not equal to itself.")
138+ }
139+ else throw("Strict value is not equal to itself.")
140+ }
141+
142+
78143 @Verifier(tx)
79144 func verify () = {
80145 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyInvestWxXtnDelay () = "%__investWxXtnDelay"
55
66
77 func keyInvestWxXtnAmountXtn () = "%__investWxXtnAmountXtn"
88
99
1010 func keyWxXtnPool () = "%__wxXtnPool"
1111
1212
1313 func keyXtnAssetId () = "%__xtnAssetId"
1414
1515
1616 func keyWxXtnLp () = "%__wxXtnLp"
1717
1818
1919 func keyLpToAddress () = "%__lpToAddress"
2020
2121
2222 func keyManagerPublicKey () = "%s__managerPublicKey"
2323
2424
25+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
26+
27+
2528 func keyInvestWxXtnLastHeight () = "%__investWxXtnLastHeight"
2629
2730
2831 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
2932 case s: String =>
3033 fromBase58String(s)
3134 case _: Unit =>
3235 unit
3336 case _ =>
3437 throw("Match error")
3538 }
3639
3740
41+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
42+ case s: String =>
43+ fromBase58String(s)
44+ case _: Unit =>
45+ unit
46+ case _ =>
47+ throw("Match error")
48+}
49+
50+
3851 func throwErr (msg) = throw(makeString(["investor.ride:", msg], " "))
52+
53+
54+func mustManager (i) = {
55+ let pd = throwErr("permission denied")
56+ match managerPublicKeyOrUnit() {
57+ case pk: ByteVector =>
58+ if ((i.callerPublicKey == pk))
59+ then true
60+ else pd
61+ case _: Unit =>
62+ if ((i.caller == this))
63+ then true
64+ else pd
65+ case _ =>
66+ throw("Match error")
67+ }
68+ }
3969
4070
4171 @Callable(i)
4272 func investWxXtn () = {
4373 let lastCall = valueOrElse(getInteger(keyInvestWxXtnLastHeight()), 0)
4474 let delay = getIntegerValue(keyInvestWxXtnDelay())
4575 let checks = [if ((height > (lastCall + delay)))
4676 then true
4777 else throwErr("wait to invest")]
4878 if ((checks == checks))
4979 then {
5080 let lpAssetId = fromBase58String(getStringValue(keyWxXtnLp()))
5181 let lpBefore = assetBalance(this, lpAssetId)
5282 if ((lpBefore == lpBefore))
5383 then {
5484 let inv = invoke(addressFromStringValue(getStringValue(keyWxXtnPool())), "putOneTkn", [0, false], [AttachedPayment(fromBase58String(getStringValue(keyXtnAssetId())), getIntegerValue(keyInvestWxXtnAmountXtn()))])
5585 if ((inv == inv))
5686 then {
5787 let lpAfter = assetBalance(this, lpAssetId)
5888 if ((lpAfter == lpAfter))
5989 then {
6090 let lpGot = (lpAfter - lpBefore)
6191 let notZeroLp = if ((lpGot == 0))
6292 then throwErr("lp to get is zero")
6393 else unit
6494 if ((notZeroLp == notZeroLp))
6595 then [IntegerEntry(keyInvestWxXtnLastHeight(), height), ScriptTransfer(addressFromStringValue(getStringValue(keyLpToAddress())), lpGot, lpAssetId)]
6696 else throw("Strict value is not equal to itself.")
6797 }
6898 else throw("Strict value is not equal to itself.")
6999 }
70100 else throw("Strict value is not equal to itself.")
71101 }
72102 else throw("Strict value is not equal to itself.")
73103 }
74104 else throw("Strict value is not equal to itself.")
75105 }
76106
77107
108+
109+@Callable(i)
110+func setManager (pendingManagerPublicKey) = {
111+ let checkCaller = mustManager(i)
112+ if ((checkCaller == checkCaller))
113+ then {
114+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
115+ if ((checkManagerPublicKey == checkManagerPublicKey))
116+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
117+ else throw("Strict value is not equal to itself.")
118+ }
119+ else throw("Strict value is not equal to itself.")
120+ }
121+
122+
123+
124+@Callable(i)
125+func confirmManager () = {
126+ let pm = pendingManagerPublicKeyOrUnit()
127+ let hasPM = if (isDefined(pm))
128+ then true
129+ else throw("No pending manager")
130+ if ((hasPM == hasPM))
131+ then {
132+ let checkPM = if ((i.callerPublicKey == value(pm)))
133+ then true
134+ else throw("You are not pending manager")
135+ if ((checkPM == checkPM))
136+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
137+ else throw("Strict value is not equal to itself.")
138+ }
139+ else throw("Strict value is not equal to itself.")
140+ }
141+
142+
78143 @Verifier(tx)
79144 func verify () = {
80145 let targetPublicKey = match managerPublicKeyOrUnit() {
81146 case pk: ByteVector =>
82147 pk
83148 case _: Unit =>
84149 tx.senderPublicKey
85150 case _ =>
86151 throw("Match error")
87152 }
88153 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
89154 }
90155

github/deemru/w8io/873ac7e 
39.84 ms