tx · 9DKTo2ro27Bn22kYERLHySftow8rMKFSUbhWeTUfEfrT

3NCEAB7ztTjq5UmTHHNdZHYMfJrXyQifGDS:  -0.01000000 Waves

2019.10.21 16:41 [729910] smart account 3NCEAB7ztTjq5UmTHHNdZHYMfJrXyQifGDS > SELF 0.00000000 Waves

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

github/deemru/w8io/3ef1775 
28.32 ms