tx · 515umsasrAUptR7EAuKonnhwGhQLJnudMg1YWfmbg84R

3MzVJhWvtXe4nNE6AwiGHUiYSBHjE19KdMf:  -0.01000000 Waves

2019.09.11 14:52 [671422] smart account 3MzVJhWvtXe4nNE6AwiGHUiYSBHjE19KdMf > SELF 0.00000000 Waves

{ "type": 13, "id": "515umsasrAUptR7EAuKonnhwGhQLJnudMg1YWfmbg84R", "fee": 1000000, "feeAssetId": null, "timestamp": 1568202739117, "version": 1, "sender": "3MzVJhWvtXe4nNE6AwiGHUiYSBHjE19KdMf", "senderPublicKey": "3a2E1JSK9D27J6nW5oULVGPUEAfDycTf8RanPBYvxSXT", "proofs": [ "8NBzTh7pDgs7hF4w2GM7gZQUj1d4qwiqf6McZ8rv9PN6udwKZ7xuszmGMuDf2pVW2XsE8LYsKPH7qMcFibaBjeX" ], "script": "base64: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AAALd2F2ZXNSYWlzZWQEAAAAByRtYXRjaDAFAAAAC3dhdmVzUmFpc2VkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABXdhdmVzBQAAAAckbWF0Y2gwBQAAAAV3YXZlcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAKZW1wdHlTdGF0ZQUAAAAHJG1hdGNoMAAAAAAAAAAAAAkBAAAABXRocm93AAAAAAEAAAATY2hlY2tJbnZlc3RvckluUGFnZQAAAAIAAAAHYWRkcmVzcwAAAARwYWdlBAAAABB3aGl0ZWxpc3RQYWdlS2V5CQABLAAAAAICAAAAFXdoaXRlbGlzdGVkSW52ZXN0b3JzLQkAAaQAAAABBQAAAARwYWdlBAAAAA13aGl0ZWxpc3RQYWdlCQAEHQAAAAIFAAAABHRoaXMFAAAAEHdoaXRlbGlzdFBhZ2VLZXkEAAAAByRtYXRjaDAFAAAADXdoaXRlbGlzdFBhZ2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAKcGFnZVN0cmluZwUAAAAHJG1hdGNoMAQAAAAPYWRkcmVzc1Bvc2l0aW9uCQAEswAAAAIFAAAACnBhZ2VTdHJpbmcFAAAAB2FkZHJlc3MEAAAAByRtYXRjaDEFAAAAD2FkZHJlc3NQb3NpdGlvbgMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAADSW50BAAAAANwb3MFAAAAByRtYXRjaDEGAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAAARVbml0BAAAAAVlbXB0eQUAAAAHJG1hdGNoMQcJAQAAAAV0aHJvdwAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAACWVtcHR5UGFnZQUAAAAHJG1hdGNoMAcJAQAAAAV0aHJvdwAAAAABAAAAF2NoZWNrSW52ZXN0b3JJbkFsbFBhZ2VzAAAAAQAAAAdhZGRyZXNzAwkBAAAAE2NoZWNrSW52ZXN0b3JJblBhZ2UAAAACBQAAAAdhZGRyZXNzAAAAAAAAAAAABgMJAQAAABNjaGVja0ludmVzdG9ySW5QYWdlAAAAAgUAAAAHYWRkcmVzcwAAAAAAAAAAAQYDCQEAAAATY2hlY2tJbnZlc3RvckluUGFnZQAAAAIFAAAAB2FkZHJlc3MAAAAAAAAAAAIGAwkBAAAAE2NoZWNrSW52ZXN0b3JJblBhZ2UAAAACBQAAAAdhZGRyZXNzAAAAAAAAAAADBgMJAQAAABNjaGVja0ludmVzdG9ySW5QYWdlAAAAAgUAAAAHYWRkcmVzcwAAAAAAAAAABAYDCQEAAAATY2hlY2tJbnZlc3RvckluUGFnZQAAAAIFAAAAB2FkZHJlc3MAAAAAAAAAAAUGAwkBAAAAE2NoZWNrSW52ZXN0b3JJblBhZ2UAAAACBQAAAAdhZGRyZXNzAAAAAAAAAAAGBgMJAQAAABNjaGVja0ludmVzdG9ySW5QYWdlAAAAAgUAAAAHYWRkcmVzcwAAAAAAAAAABwYDCQEAAAATY2hlY2tJbnZlc3RvckluUGFnZQAAAAIFAAAAB2FkZHJlc3MAAAAAAAAAAAgGAwkBAAAAE2NoZWNrSW52ZXN0b3JJblBhZ2UAAAACBQAAAAdhZGRyZXNzAAAAAAAAAAAJBgcBAAAAEGdldE1heEludmVzdG1lbnQAAAAABAAAABFkYXRhTWF4SW52ZXN0bWVudAkABBoAAAACBQAAAAR0aGlzAgAAAA1tYXhJbnZlc3RtZW50BAAAAAckbWF0Y2gwBQAAABFkYXRhTWF4SW52ZXN0bWVudAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAABRjaGFuZ2VkTWF4SW52ZXN0bWVudAUAAAAHJG1hdGNoMAUAAAAUY2hhbmdlZE1heEludmVzdG1lbnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAACm5vdENoYW5nZWQFAAAAByRtYXRjaDAFAAAAEm1heEludmVzdG1lbnRXYXZlcwkBAAAABXRocm93AAAAAAAAAAYAAAABaQEAAAAJYnV5VG9rZW5zAAAAAAQAAAAPaW52ZXN0b3JBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADHNlbmRlZEFtb3VudAgJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAAAAAZhbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAADHNlbmRlZEFtb3VudAkAAAIAAAABAgAAACFDYW5ub3QgYWNjZXB0IHplcm8gdmFsdWUgcGF5bWVudHMDCQAAZgAAAAIFAAAADHNlbmRlZEFtb3VudAkBAAAAEGdldE1heEludmVzdG1lbnQAAAAACQAAAgAAAAECAAAAJ0F0dGFjaGVkIHBheW1lbnQgaXMgYWJvdmUgbWF4aW11bSBwcmljZQMJAQAAAAEhAAAAAQkBAAAACmhhc1N0YXJ0ZWQAAAAACQAAAgAAAAECAAAAG1NUTyB0aW1lIGlzIG5vdCBzdGFydGVkIHlldAMJAQAAAAtoYXNGaW5pc2hlZAAAAAAJAAACAAAAAQIAAAAQU1RPIGlzIGZpbmFsaXplZAMJAQAAAAhoYXNFbmRlZAAAAAAJAAACAAAAAQIAAAAZU1RPIHRpbWUgaXMgYWxyZWFkeSBlbmRlZAQAAAALd2F2ZXNSYWlzZWQJAQAAAA5nZXRXYXZlc1JhaXNlZAAAAAAEAAAAC3dhdmVzT2Zmc2V0CQAAaQAAAAIFAAAADXdhdmVzRGVjaW1hbHMFAAAAE3Rva2VuRGVjaW1hbHNPZmZzZXQEAAAADGhhcmRDYXBXYXZlcwkAAGgAAAACCQAAaQAAAAIFAAAADWhhcmRDYXBUb2tlbnMFAAAACXRva2VuUmF0ZQUAAAALd2F2ZXNPZmZzZXQEAAAAEnVwZGF0ZWRXYXZlc1JhaXNlZAkAAGQAAAACBQAAAAt3YXZlc1JhaXNlZAUAAAAMc2VuZGVkQW1vdW50AwkAAGYAAAACBQAAABJ1cGRhdGVkV2F2ZXNSYWlzZWQFAAAADGhhcmRDYXBXYXZlcwkAAAIAAAABAgAAACJBdHRhY2hlZCBwYXltZW50IG92ZXJmbG93cyBoYXJkY2FwBAAAAA50b2tlbkFtb3VudFJhdwkAAGgAAAACBQAAAAxzZW5kZWRBbW91bnQFAAAACXRva2VuUmF0ZQMJAABmAAAAAgUAAAALd2F2ZXNPZmZzZXQFAAAADnRva2VuQW1vdW50UmF3CQAAAgAAAAECAAAAMEF0dGFjaGVkIHBheW1lbnQgaXMgdG9vIGxvdyB0byBidXkgdW5pdCBvZiB0b2tlbgQAAAALdG9rZW5BbW91bnQJAABpAAAAAgUAAAAOdG9rZW5BbW91bnRSYXcFAAAAC3dhdmVzT2Zmc2V0CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdy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", "chainId": 84, "height": 671422, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let managementAddress = base58'3N3D5RSGqheZjpKb7BW417F99Y5TsfxZUcC'
5+
6+let coldVault = extract(addressFromString("3N3D5RSGqheZjpKb7BW417F99Y5TsfxZUcC"))
7+
8+let token = base58'2aCkKu1bprzo5jX6DGZeEyGhSaWNbYxZ8hXtndd8TTJW'
9+
10+let tokenRate = 2
11+
12+let tokenDecimalsOffset = pow(10, 0, 8, 0, 0, Up())
13+
14+let hardCapTokens = 1000000000
15+
16+let maxInvestmentWaves = 400000000
17+
18+let allowDatesChange = false
19+
20+let startTime = 1568201340
21+
22+let endTime = 1568275500
23+
24+let wavesDecimals = pow(10, 0, 8, 0, 0, Up())
25+
26+func onlyManager (callerBytes) = {
27+ let caller = toBase58String(callerBytes)
28+ let managementAddressString = toBase58String(managementAddress)
29+ if ((caller != managementAddressString))
30+ then false
31+ else true
32+ }
33+
34+
35+func getTimeNow () = {
36+ let blockInfo = value(blockInfoByHeight(height))
37+ (blockInfo.timestamp / 1000)
38+ }
39+
40+
41+func getStartTime () = {
42+ let dataStartTime = getInteger(this, "startTime")
43+ match dataStartTime {
44+ case changedStartTime: Int =>
45+ changedStartTime
46+ case notChanged: Unit =>
47+ startTime
48+ case _ =>
49+ throw()
50+ }
51+ }
52+
53+
54+func getEndTime () = {
55+ let dataEndTime = getInteger(this, "endTime")
56+ match dataEndTime {
57+ case changedEndTime: Int =>
58+ changedEndTime
59+ case notChanged: Unit =>
60+ endTime
61+ case _ =>
62+ throw()
63+ }
64+ }
65+
66+
67+func hasStarted () = if ((getTimeNow() > getStartTime()))
68+ then true
69+ else false
70+
71+
72+func hasEnded () = if ((getTimeNow() > getEndTime()))
73+ then true
74+ else false
75+
76+
77+func hasFinished () = {
78+ let isFinalized = getBoolean(this, "finalized")
79+ match isFinalized {
80+ case dataFinalized: Boolean =>
81+ dataFinalized
82+ case notFinalized: Unit =>
83+ false
84+ case _ =>
85+ throw()
86+ }
87+ }
88+
89+
90+func getWavesRaised () = {
91+ let wavesRaised = getInteger(this, "wavesRaised")
92+ match wavesRaised {
93+ case waves: Int =>
94+ waves
95+ case emptyState: Unit =>
96+ 0
97+ case _ =>
98+ throw()
99+ }
100+ }
101+
102+
103+func checkInvestorInPage (address,page) = {
104+ let whitelistPageKey = ("whitelistedInvestors-" + toString(page))
105+ let whitelistPage = getString(this, whitelistPageKey)
106+ match whitelistPage {
107+ case pageString: String =>
108+ let addressPosition = indexOf(pageString, address)
109+ match addressPosition {
110+ case pos: Int =>
111+ true
112+ case empty: Unit =>
113+ false
114+ case _ =>
115+ throw()
116+ }
117+ case emptyPage: Unit =>
118+ false
119+ case _ =>
120+ throw()
121+ }
122+ }
123+
124+
125+func checkInvestorInAllPages (address) = if (checkInvestorInPage(address, 0))
126+ then true
127+ else if (checkInvestorInPage(address, 1))
128+ then true
129+ else if (checkInvestorInPage(address, 2))
130+ then true
131+ else if (checkInvestorInPage(address, 3))
132+ then true
133+ else if (checkInvestorInPage(address, 4))
134+ then true
135+ else if (checkInvestorInPage(address, 5))
136+ then true
137+ else if (checkInvestorInPage(address, 6))
138+ then true
139+ else if (checkInvestorInPage(address, 7))
140+ then true
141+ else if (checkInvestorInPage(address, 8))
142+ then true
143+ else if (checkInvestorInPage(address, 9))
144+ then true
145+ else false
146+
147+
148+func getMaxInvestment () = {
149+ let dataMaxInvestment = getInteger(this, "maxInvestment")
150+ match dataMaxInvestment {
151+ case changedMaxInvestment: Int =>
152+ changedMaxInvestment
153+ case notChanged: Unit =>
154+ maxInvestmentWaves
155+ case _ =>
156+ throw()
157+ }
158+ }
159+
160+
161+@Callable(i)
162+func buyTokens () = {
163+ let investorAddress = toBase58String(i.caller.bytes)
164+ let sendedAmount = extract(i.payment).amount
165+ if ((0 >= sendedAmount))
166+ then throw("Cannot accept zero value payments")
167+ else if ((sendedAmount > getMaxInvestment()))
168+ then throw("Attached payment is above maximum price")
169+ else if (!(hasStarted()))
170+ then throw("STO time is not started yet")
171+ else if (hasFinished())
172+ then throw("STO is finalized")
173+ else if (hasEnded())
174+ then throw("STO time is already ended")
175+ else {
176+ let wavesRaised = getWavesRaised()
177+ let wavesOffset = (wavesDecimals / tokenDecimalsOffset)
178+ let hardCapWaves = ((hardCapTokens / tokenRate) * wavesOffset)
179+ let updatedWavesRaised = (wavesRaised + sendedAmount)
180+ if ((updatedWavesRaised > hardCapWaves))
181+ then throw("Attached payment overflows hardcap")
182+ else {
183+ let tokenAmountRaw = (sendedAmount * tokenRate)
184+ if ((wavesOffset > tokenAmountRaw))
185+ then throw("Attached payment is too low to buy unit of token")
186+ else {
187+ let tokenAmount = (tokenAmountRaw / wavesOffset)
188+ ScriptResult(WriteSet([DataEntry("wavesRaised", updatedWavesRaised)]), TransferSet([ScriptTransfer(coldVault, sendedAmount, unit), ScriptTransfer(i.caller, tokenAmount, token)]))
189+ }
190+ }
191+ }
192+ }
193+
194+
195+
196+@Callable(i)
197+func finalize () = if (!(onlyManager(i.caller.bytes)))
198+ then throw("Only for administration")
199+ else if (hasFinished())
200+ then throw("Already finalized")
201+ else if (hasEnded())
202+ then WriteSet([DataEntry("finalized", true)])
203+ else throw("STO not finished yet")
204+
205+
206+
207+@Callable(i)
208+func setStartTime (newStartTime) = if (!(onlyManager(i.caller.bytes)))
209+ then throw("Only for administration")
210+ else if (!(allowDatesChange))
211+ then throw("changing dates is not supported")
212+ else if ((getTimeNow() >= newStartTime))
213+ then throw("Cannot set time to past")
214+ else if ((newStartTime > getEndTime()))
215+ then throw("Start date must be lower than end date")
216+ else WriteSet([DataEntry("startTime", newStartTime)])
217+
218+
219+
220+@Callable(i)
221+func setEndTime (newEndTime) = if (!(onlyManager(i.caller.bytes)))
222+ then throw("Only for administration")
223+ else if (!(allowDatesChange))
224+ then throw("changing dates is not supported")
225+ else if ((getTimeNow() >= newEndTime))
226+ then throw("Cannot set time to past")
227+ else if ((getStartTime() > newEndTime))
228+ then throw("End date must be higher than start date")
229+ else WriteSet([DataEntry("endTime", newEndTime)])
230+
231+
232+
233+@Callable(i)
234+func setStartAndEndTimes (newStartTime,newEndTime) = if (!(onlyManager(i.caller.bytes)))
235+ then throw("Only for administration")
236+ else if (!(allowDatesChange))
237+ then throw("changing dates is not supported")
238+ else if ((getTimeNow() >= newStartTime))
239+ then throw("Cannot set start time to past")
240+ else if ((newStartTime > newEndTime))
241+ then throw("Start date must be lower than end date")
242+ else if ((getTimeNow() >= newEndTime))
243+ then throw("Cannot set end time to past")
244+ else WriteSet([DataEntry("startTime", newStartTime), DataEntry("endTime", newEndTime)])
245+
246+
247+
248+@Callable(i)
249+func setMaxInvestment (newValue) = if (!(onlyManager(i.caller.bytes)))
250+ then throw("Only for administration")
251+ else WriteSet([DataEntry("maxInvestment", newValue)])
252+
253+
254+@Verifier(tx)
255+func verify () = false
256+

github/deemru/w8io/169f3d6 
30.38 ms