tx · ArLxYcb6pUpVmyfyyzwchaUv41kL3VY3YjYXxAvBnSMZ

3PAuTLuchPr3N8mDaoN2wMb2JtHe5MBE7g2:  -0.00300000 Waves

2022.08.05 12:43 [3236527] smart account 3PAuTLuchPr3N8mDaoN2wMb2JtHe5MBE7g2 > SELF 0.00000000 Waves

{ "type": 13, "id": "ArLxYcb6pUpVmyfyyzwchaUv41kL3VY3YjYXxAvBnSMZ", "fee": 300000, "feeAssetId": null, "timestamp": 1659692643705, "version": 1, "sender": "3PAuTLuchPr3N8mDaoN2wMb2JtHe5MBE7g2", "senderPublicKey": "7hQKEVCKLNemvXdXDzHCqBh5MVBYfF4SNRVuWgK3g45d", "proofs": [ "5sApPzzj6KfJVcddDhVKvRrM3PLjNE3oRyMG1furTGoEv7jGoDZMCjM9DQgjqGVjQg7gK4MVUTZTvLFiDLUCMnD9" ], "script": "base64:BgIWCAISBgoECAgIARIDCgEBEgASAwoBARcBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBC2FzSW50U3RySW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAISKEludCwgU3RyaW5nLCBJbnQpBAlpbnRTdHJJbnQFByRtYXRjaDAFCWludFN0ckludAMJAAECBQckbWF0Y2gwAg0oSW50LCBTdHJpbmcpBAZpbnRTdHIFByRtYXRjaDAJAJUKAwgFBmludFN0cgJfMQgFBmludFN0cgJfMgAACQACAQIjd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IChJbnQsIFN0cmluZykAC2NvbmZpZ1N0b3JlAgZjb25maWcADWNvbmZpZ0FkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULY29uZmlnU3RvcmUCH2V4cC1kaXZpZGVuZHM6IG5vIGNvbmZpZ0FkZHJlc3MCFmludmFsaWQgY29uZmlnIGFkZHJlc3MAEm1heWJlT3JhY2xlQWRkcmVzcwQHJG1hdGNoMAkAnQgCBQ1jb25maWdBZGRyZXNzAg5vcmFjbGVfYWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwUEdW5pdAAGSEVJR0hUBQZoZWlnaHQBB3Rocm93SWYCCWNvbmRpdGlvbgVlcnJvcgMFCWNvbmRpdGlvbgkAAgEFBWVycm9yBgEId3JpdGVJbnQCA2tleQV2YWx1ZQMJAGYCAAAFBXZhbHVlCQACAQkArAICCQCsAgIJAKwCAgIXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAKQDAQUFdmFsdWUCCSBmb3Iga2V5IAUDa2V5CQEMSW50ZWdlckVudHJ5AgUDa2V5BQV2YWx1ZQELd3JpdGVTdHJJbnQCA2tleQV2YWx1ZQMJAGYCAAAFBXZhbHVlCQACAQkArAICCQCsAgIJAKwCAgIXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAKQDAQUFdmFsdWUCCSBmb3Iga2V5IAUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkJAKQDAQUFdmFsdWUBEHdyaXRlQ29uc3RTdHJpbmcCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQEIY2hhbmdlQnkCA2tleQV2YWx1ZQkBCHdyaXRlSW50AgUDa2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAUFdmFsdWUACXVzZG5TdG9yZQIHYXNzZXRJZAAEdXNkbgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJdXNkblN0b3JlABFleHBEaXZpZGVuZHNTdG9yZQIMZXhwRGl2aWRlbmRzAAxleHBEaXZpZGVuZHMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRFleHBEaXZpZGVuZHNTdG9yZQIWZGFvLWI6IG5vIGV4cERpdmlkZW5kcwASaW5pdGlhbEhlaWdodFN0b3JlAg1pbml0aWFsSGVpZ2h0AA1pbml0aWFsSGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRJpbml0aWFsSGVpZ2h0U3RvcmUAEHRvdGFsQW1vdW50U3RvcmUCC3RvdGFsQW1vdW50AAt0b3RhbEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUQdG90YWxBbW91bnRTdG9yZQANdmVzdGluZ1BlcmlvZAkAaAIAPACgCwAMY2xhaW1lZFN0b3JlAgtkaXN0cmlidXRlZAAHY2xhaW1lZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxjbGFpbWVkU3RvcmUAAAAJYXZhaWxhYmxlAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzBRJpbml0aWFsSGVpZ2h0U3RvcmUAAAMJAGYCBQ1pbml0aWFsSGVpZ2h0BQZIRUlHSFQAAAQGdmVzdGVkCQCXAwEJAMwIAgULdG90YWxBbW91bnQJAMwIAgkAawMFC3RvdGFsQW1vdW50CQBlAgUGSEVJR0hUBQ1pbml0aWFsSGVpZ2h0BQ12ZXN0aW5nUGVyaW9kBQNuaWwJAJYDAQkAzAgCCQBlAgUGdmVzdGVkBQdjbGFpbWVkCQDMCAIAAAUDbmlsBAFpAQRpbml0BA1jb25maWdBZGRyZXNzC3VzZG5Bc3NldElkCWRpdmlkZW5kcwltaW5BbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhZvbmx5IHNlbGYgY2FuIGNvbnRpbnVlCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgULY29uZmlnU3RvcmUFDWNvbmZpZ0FkZHJlc3MJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCBQl1c2RuU3RvcmUJAKwCAgULdXNkbkFzc2V0SWQCCV9kYW9Cb251cwkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIFEWV4cERpdmlkZW5kc1N0b3JlBQlkaXZpZGVuZHMJAMwIAgkBDEludGVnZXJFbnRyeQICDG1pblVzZG5TdGFydAUJbWluQW1vdW50BQNuaWwBaQEHc3RhcnRBdAEBaAMJAQlpc0RlZmluZWQBCQCfCAEFEmluaXRpYWxIZWlnaHRTdG9yZQkAAgECE2FscmVhZHkgaW5pdGlhbGl6ZWQDCQECIT0CCQDYBAEJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkAkQMCCQC1CQIFBHVzZG4CAV8AAAkAAgECDmV4cGVjdGVkOiBVU0ROAwkAZgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzAgxtaW5Vc2RuU3RhcnQCCG5vdCBpbml0CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECD3RvbyBsaXR0bGUgdXNkbgkAzAgCCQEId3JpdGVJbnQCBRJpbml0aWFsSGVpZ2h0U3RvcmUFAWgJAMwIAgkBCHdyaXRlSW50AgUQdG90YWxBbW91bnRTdG9yZQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA25pbAFpARJnZXRSZXNlcnZlRGl2c0luZm8ACQCUCgIFA25pbAkAlQoDBQlhdmFpbGFibGUFBHVzZG4AAAFpARN3aXRoZHJhd0Zyb21SZXNlcnZlAQF2AwkBAiE9AgUBdgD///////////8BCQACAQIHLTEgb25seQMJAQIhPQIIBQFpBmNhbGxlcgUMZXhwRGl2aWRlbmRzCQACAQIeb25seSBleHBEaXZpZGVuZHMgY2FuIHdpdGhkcmF3CQCUCgIJAMwIAgkBCGNoYW5nZUJ5AgUMY2xhaW1lZFN0b3JlBQlhdmFpbGFibGUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlhdmFpbGFibGUJANkEAQkAkQMCCQC1CQIFBHVzZG4CAV8AAAUDbmlsBQlhdmFpbGFibGUAB5va0A==", "chainId": 87, "height": 3236527, "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 asInt (value) = match value {
5+ case int: Int =>
6+ int
7+ case _ =>
8+ throw("wrong type, expected: Int")
9+}
10+
11+
12+func asIntStrInt (value) = match value {
13+ case intStrInt: (Int, String, Int) =>
14+ intStrInt
15+ case intStr: (Int, String) =>
16+ $Tuple3(intStr._1, intStr._2, 0)
17+ case _ =>
18+ throw("wrong type, expected: (Int, String)")
19+}
20+
21+
22+let configStore = "config"
23+
24+let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configStore), "exp-dividends: no configAddress")), "invalid config address")
25+
26+let maybeOracleAddress = match getString(configAddress, "oracle_address") {
27+ case s: String =>
28+ addressFromString(s)
29+ case _ =>
30+ unit
31+}
32+
33+let HEIGHT = height
34+
35+func throwIf (condition,error) = if (condition)
36+ then throw(error)
37+ else true
38+
39+
40+func writeInt (key,value) = if ((0 > value))
41+ then throw(((("writing negative value " + toString(value)) + " for key ") + key))
42+ else IntegerEntry(key, value)
43+
44+
45+func writeStrInt (key,value) = if ((0 > value))
46+ then throw(((("writing negative value " + toString(value)) + " for key ") + key))
47+ else StringEntry(key, toString(value))
48+
49+
50+func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
51+ then StringEntry(key, value)
52+ else throw(("already initialized: " + key))
53+
54+
55+func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
56+
57+
58+let usdnStore = "assetId"
59+
60+let usdn = getStringValue(this, usdnStore)
61+
62+let expDividendsStore = "expDividends"
63+
64+let expDividends = addressFromStringValue(valueOrErrorMessage(getString(this, expDividendsStore), "dao-b: no expDividends"))
65+
66+let initialHeightStore = "initialHeight"
67+
68+let initialHeight = getIntegerValue(this, initialHeightStore)
69+
70+let totalAmountStore = "totalAmount"
71+
72+let totalAmount = getIntegerValue(this, totalAmountStore)
73+
74+let vestingPeriod = (60 * 1440)
75+
76+let claimedStore = "distributed"
77+
78+let claimed = valueOrElse(getInteger(this, claimedStore), 0)
79+
80+let available = if (!(isDefined(getInteger(this, initialHeightStore))))
81+ then 0
82+ else if ((initialHeight > HEIGHT))
83+ then 0
84+ else {
85+ let vested = min([totalAmount, fraction(totalAmount, (HEIGHT - initialHeight), vestingPeriod)])
86+ max([(vested - claimed), 0])
87+ }
88+
89+@Callable(i)
90+func init (configAddress,usdnAssetId,dividends,minAmount) = if ((i.caller != this))
91+ then throw("only self can continue")
92+ else [writeConstString(configStore, configAddress), writeConstString(usdnStore, (usdnAssetId + "_daoBonus")), writeConstString(expDividendsStore, dividends), IntegerEntry("minUsdnStart", minAmount)]
93+
94+
95+
96+@Callable(i)
97+func startAt (h) = if (isDefined(getInteger(initialHeightStore)))
98+ then throw("already initialized")
99+ else if ((toBase58String(value(i.payments[0].assetId)) != split(usdn, "_")[0]))
100+ then throw("expected: USDN")
101+ else if ((valueOrErrorMessage(getInteger(this, "minUsdnStart"), "not init") > i.payments[0].amount))
102+ then throw("too little usdn")
103+ else [writeInt(initialHeightStore, h), writeInt(totalAmountStore, i.payments[0].amount)]
104+
105+
106+
107+@Callable(i)
108+func getReserveDivsInfo () = $Tuple2(nil, $Tuple3(available, usdn, 0))
109+
110+
111+
112+@Callable(i)
113+func withdrawFromReserve (v) = if ((v != -1))
114+ then throw("-1 only")
115+ else if ((i.caller != expDividends))
116+ then throw("only expDividends can withdraw")
117+ else $Tuple2([changeBy(claimedStore, available), ScriptTransfer(i.caller, available, fromBase58String(split(usdn, "_")[0]))], available)
118+
119+

github/deemru/w8io/6500d08 
19.38 ms