tx · Do9boHeu51KxmWGzdqvKSVHdSNrJ6c1EKyFaKrHexBmN

3Mu7bwtYrymjrXt1ttcqaQbFc1PqGhZndhv:  -0.01400000 Waves

2019.09.30 12:44 [699007] smart account 3Mu7bwtYrymjrXt1ttcqaQbFc1PqGhZndhv > SELF 0.00000000 Waves

{ "type": 13, "id": "Do9boHeu51KxmWGzdqvKSVHdSNrJ6c1EKyFaKrHexBmN", "fee": 1400000, "feeAssetId": null, "timestamp": 1569836658094, "version": 1, "sender": "3Mu7bwtYrymjrXt1ttcqaQbFc1PqGhZndhv", "senderPublicKey": "BxHnTcjvN9ZtnKfdKYp6aKRdkMB4ZHxHnTDr5dWx5Vz2", "proofs": [ "5wsBJaBXaZZib8cv6ZFLZWmLJ1BaBjm18wpG19MQiQHYh4FRfoC7DM9LBk8fcA9cbeDm4s7QsfwcdmoPocsVze8U" ], "script": "base64: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", "chainId": 84, "height": 699007, "spentComplexity": 0 } View: original | compacted Prev: BG3hvuFjaWQ5f1hffcaoqPjZuecSwt589Kg1yCs8Q6ko Next: GhN8QV1Z67tpAc8Ng12Di2WdpUhPLRf5mMCMLNBhioLq Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let uTokenId = base58'9qh2MiJhfqNS1o3R5wcUrAAWpeqZs9R8SLwQvCx88Vaf'
5+
6+func checkStatus (address) = {
7+ let statusUnlimited = match getBoolean(this, (address + "_unlimited")) {
8+ case bool: Boolean =>
9+ bool
10+ case _: Unit =>
11+ false
12+ case _ =>
13+ throw()
14+ }
15+ let statusTime = match getInteger(this, (address + "_time")) {
16+ case int: Int =>
17+ int
18+ case _: Unit =>
19+ 0
20+ case _ =>
21+ throw()
22+ }
23+ if (statusUnlimited)
24+ then true
25+ else (statusTime > lastBlock.timestamp)
26+ }
427
528
629 @Callable(i)
7-func makeSell (priceAsset,price) = if (if ((priceAsset != "WAVES"))
30+func addAsset (assetId) = {
31+ let addingPrice = (100 * 100000000)
32+ let addingPriceStr = "100"
33+ let payment = valueOrErrorMessage(i.payment, "Where is payment?")
34+ if (if (isDefined(payment.assetId))
35+ then (payment.assetId != uTokenId)
36+ else false)
37+ then throw("OTCu or WAVES only")
38+ else if ((payment.amount != addingPrice))
39+ then throw((("You have to pay " + addingPriceStr) + " OTCu or WAVES"))
40+ else if (!(isDefined(assetInfo(fromBase58String(assetId)))))
41+ then throw("There is no asset with specified id")
42+ else {
43+ let assets = match getString(this, "assets") {
44+ case str: String =>
45+ str
46+ case _: Unit =>
47+ ""
48+ case _ =>
49+ throw()
50+ }
51+ if (isDefined(indexOf(assets, assetId)))
52+ then throw("Asset is already available")
53+ else WriteSet([DataEntry("assets", (assets + assetId))])
54+ }
55+ }
56+
57+
58+
59+@Callable(i)
60+func pro (unlimited) = {
61+ let address = toBase58String(i.caller.bytes)
62+ let unlimitedPrice = (50 * 100000000)
63+ let unlimitedPriceStr = "50"
64+ let monthPrice = (10 * 100000000)
65+ let monthPriceStr = "10"
66+ let payment = valueOrErrorMessage(i.payment, "Where is payment?")
67+ if (if (isDefined(payment.assetId))
68+ then (payment.assetId != uTokenId)
69+ else false)
70+ then throw("OTCu or WAVES only")
71+ else if (if (unlimited)
72+ then (payment.amount != unlimitedPrice)
73+ else false)
74+ then throw((("You have to pay " + unlimitedPriceStr) + " OTCu or WAVES"))
75+ else if (if (!(unlimited))
76+ then (payment.amount != monthPrice)
77+ else false)
78+ then throw((("You have to pay " + monthPriceStr) + " OTCu or WAVES"))
79+ else {
80+ let currentUnlimited = match getBoolean(this, (address + "_unlimited")) {
81+ case bool: Boolean =>
82+ bool
83+ case _: Unit =>
84+ false
85+ case _ =>
86+ throw()
87+ }
88+ let currentTime = match getInteger(this, (address + "_time")) {
89+ case int: Int =>
90+ int
91+ case _: Unit =>
92+ 0
93+ case _ =>
94+ throw()
95+ }
96+ if (currentUnlimited)
97+ then throw("You have unlimited PRO status already. What do you want?")
98+ else {
99+ let month = 2629743000
100+ WriteSet([DataEntry((address + "_unlimited"), unlimited), DataEntry((address + "_time"), if (unlimited)
101+ then 0
102+ else (currentTime + month))])
103+ }
104+ }
105+ }
106+
107+
108+
109+@Callable(i)
110+func makeSell (priceAsset,price,all,password) = if (if ((priceAsset != "WAVES"))
8111 then !(isDefined(assetInfo(fromBase58String(priceAsset))))
9112 else false)
10113 then throw("There is no asset with specified id")
15118 if ((0 >= payment.amount))
16119 then throw("amount must be positive")
17120 else {
18- let orderId = ("sell_" + toBase58String(i.transactionId))
19121 let amountAsset = match payment.assetId {
20122 case p: ByteVector =>
21123 toBase58String(p)
22124 case _ =>
23125 "WAVES"
24126 }
25- WriteSet([DataEntry((orderId + "_amount"), payment.amount), DataEntry((orderId + "_amount_asset"), amountAsset), DataEntry((orderId + "_price"), price), DataEntry((orderId + "_price_asset"), priceAsset), DataEntry((orderId + "_owner"), toBase58String(i.caller.bytes)), DataEntry((orderId + "_spent"), 0)])
127+ let assets = valueOrErrorMessage(getString(this, "assets"), "There are not available assets")
128+ if (if (!(isDefined(indexOf(assets, priceAsset))))
129+ then true
130+ else !(isDefined(indexOf(assets, amountAsset))))
131+ then throw("Asset are not available for trading")
132+ else {
133+ let address = toBase58String(i.caller.bytes)
134+ if (if (!(checkStatus(address)))
135+ then if (all)
136+ then true
137+ else (password != "")
138+ else false)
139+ then throw("You must have pro status to use these features")
140+ else {
141+ let orderId = toBase58String(i.transactionId)
142+ let orders = match getString(this, "orders") {
143+ case s: String =>
144+ s
145+ case _: Unit =>
146+ ""
147+ case _ =>
148+ throw()
149+ }
150+ let passwordValid = fromBase58String(password)
151+ let data = ((((((((((((((toString(payment.amount) + "_") + amountAsset) + "_") + toString(price)) + "_") + priceAsset) + "_") + address) + "_") + toString(all)) + "_") + password) + "_") + toString(0))
152+ WriteSet([DataEntry("orders", (orders + orderId)), DataEntry(orderId, data)])
153+ }
154+ }
26155 }
27156 }
28157
29158
30159
31160 @Callable(i)
32-func makeBuy (amountAsset,price) = if (if ((amountAsset != "WAVES"))
161+func makeBuy (amountAsset,price,all,password) = if (if ((amountAsset != "WAVES"))
33162 then !(isDefined(assetInfo(fromBase58String(amountAsset))))
34163 else false)
35164 then throw("There is no asset with specified id")
40169 if ((0 >= payment.amount))
41170 then throw("amount must be positive")
42171 else {
43- let orderId = ("buy_" + toBase58String(i.transactionId))
44172 let priceAsset = match payment.assetId {
45173 case p: ByteVector =>
46174 toBase58String(p)
47175 case _ =>
48176 "WAVES"
49177 }
50- let amountAssetDecimals = if ((amountAsset == "WAVES"))
51- then 8
52- else value(assetInfo(fromBase58String(amountAsset))).decimals
53- let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
54- if ((buyAmount == 0))
55- then throw("invalid buy amount")
56- else WriteSet([DataEntry((orderId + "_amount"), buyAmount), DataEntry((orderId + "_amount_asset"), amountAsset), DataEntry((orderId + "_price"), price), DataEntry((orderId + "_price_asset"), priceAsset), DataEntry((orderId + "_owner"), toBase58String(i.caller.bytes)), DataEntry((orderId + "_spent"), 0)])
178+ let assets = valueOrErrorMessage(getString(this, "assets"), "There are not available assets")
179+ if (if (!(isDefined(indexOf(assets, priceAsset))))
180+ then true
181+ else !(isDefined(indexOf(assets, amountAsset))))
182+ then throw("Asset are not available for trading")
183+ else {
184+ let address = toBase58String(i.caller.bytes)
185+ if (if (!(checkStatus(address)))
186+ then if (all)
187+ then true
188+ else (password != "")
189+ else false)
190+ then throw("You must have pro status to use these features")
191+ else {
192+ let orderId = toBase58String(i.transactionId)
193+ let orders = match getString(this, "orders") {
194+ case s: String =>
195+ s
196+ case _: Unit =>
197+ ""
198+ case _ =>
199+ throw()
200+ }
201+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
202+ then 8
203+ else value(assetInfo(fromBase58String(amountAsset))).decimals
204+ let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
205+ if ((buyAmount == 0))
206+ then throw("invalid buy amount")
207+ else {
208+ let data = ((((((((((((((toString(buyAmount) + "_") + amountAsset) + "_") + toString(price)) + "_") + priceAsset) + "_") + address) + "_") + toString(all)) + "_") + password) + "_") + toString(0))
209+ WriteSet([DataEntry("orders", (orders + orderId)), DataEntry(orderId, data)])
210+ }
211+ }
212+ }
57213 }
58214 }
59215
60216
61217
62218 @Callable(i)
63-func takeSell (id) = {
219+func takeSell (orderId,sig) = {
64220 let payment = valueOrErrorMessage(i.payment, "where is payment?")
65221 if ((0 >= payment.amount))
66222 then throw("amount must be positive")
67223 else {
68- let orderId = ("sell_" + id)
69224 let paymentAsset = match payment.assetId {
70225 case p: ByteVector =>
71226 toBase58String(p)
72227 case _ =>
73228 "WAVES"
74229 }
75- let priceAsset = valueOrErrorMessage(getString(this, (orderId + "_price_asset")), "there is no order with specified id")
230+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
231+ let amount = parseIntValue(split(data, "_")[0])
232+ let amountAsset = split(data, "_")[1]
233+ let price = parseIntValue(split(data, "_")[2])
234+ let priceAsset = split(data, "_")[3]
235+ let owner = value(addressFromString(split(data, "_")[4]))
236+ let all = if ((split(data, "_")[5] == "true"))
237+ then true
238+ else false
239+ let password = split(data, "_")[6]
240+ let spent = parseIntValue(split(data, "_")[7])
76241 if ((priceAsset != paymentAsset))
77- then throw(("payment asset must be " + priceAsset))
242+ then throw(("Payment asset must be " + priceAsset))
78243 else {
79- let price = getIntegerValue(this, (orderId + "_price"))
80- let amount = getIntegerValue(this, (orderId + "_amount"))
81- let amountAsset = getStringValue(this, (orderId + "_amount_asset"))
82- let amountAssetDecimals = if ((amountAsset == "WAVES"))
83- then 8
84- else value(assetInfo(fromBase58String(amountAsset))).decimals
85- let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
86- if ((buyAmount == 0))
87- then throw("invalid amount")
244+ let valid = if ((password != ""))
245+ then sigVerify(i.callerPublicKey, fromBase58String(sig), fromBase58String(password))
246+ else true
247+ if (!(valid))
248+ then throw("The order is private")
88249 else {
89- let owner = value(addressFromString(getStringValue(this, (orderId + "_owner"))))
90- let spent = getIntegerValue(this, (orderId + "_spent"))
91- if ((buyAmount > (amount - spent)))
92- then throw("not enougth asset in order")
93- else ScriptResult(WriteSet([DataEntry((orderId + "_spent"), (spent + buyAmount))]), TransferSet([ScriptTransfer(i.caller, buyAmount, if ((amountAsset == "WAVES"))
94- then unit
95- else fromBase58String(amountAsset)), ScriptTransfer(owner, payment.amount, if ((priceAsset == "WAVES"))
96- then unit
97- else fromBase58String(priceAsset))]))
250+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
251+ then 8
252+ else value(assetInfo(fromBase58String(amountAsset))).decimals
253+ let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
254+ if ((buyAmount == 0))
255+ then throw("Invalid amount")
256+ else if (if (all)
257+ then (amount > buyAmount)
258+ else false)
259+ then throw("You must take all or none")
260+ else if ((buyAmount > (amount - spent)))
261+ then throw("Not enougth asset in order")
262+ else {
263+ let orders = match getString(this, "orders") {
264+ case s: String =>
265+ s
266+ case _: Unit =>
267+ ""
268+ case _ =>
269+ throw()
270+ }
271+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString((spent + buyAmount)))
272+ let index = value(indexOf(orders, orderId))
273+ let newOrders = if ((amount == (buyAmount + spent)))
274+ then (take(orders, index) + drop(orders, (index + size(orderId))))
275+ else orders
276+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, buyAmount, if ((amountAsset == "WAVES"))
277+ then unit
278+ else fromBase58String(amountAsset)), ScriptTransfer(owner, payment.amount, if ((priceAsset == "WAVES"))
279+ then unit
280+ else fromBase58String(priceAsset))]))
281+ }
98282 }
99283 }
100284 }
103287
104288
105289 @Callable(i)
106-func takeBuy (id) = {
290+func takeBuy (orderId,sig) = {
107291 let payment = valueOrErrorMessage(i.payment, "where is payment?")
108292 if ((0 >= payment.amount))
109293 then throw("amount must be positive")
110294 else {
111- let orderId = ("buy_" + id)
112295 let paymentAsset = match payment.assetId {
113296 case p: ByteVector =>
114297 toBase58String(p)
115298 case _ =>
116299 "WAVES"
117300 }
118- let amountAsset = valueOrErrorMessage(getString(this, (orderId + "_amount_asset")), "there is no order with specified id")
301+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
302+ let amount = parseIntValue(split(data, "_")[0])
303+ let amountAsset = split(data, "_")[1]
304+ let price = parseIntValue(split(data, "_")[2])
305+ let priceAsset = split(data, "_")[3]
306+ let owner = value(addressFromString(split(data, "_")[4]))
307+ let all = if ((split(data, "_")[5] == "true"))
308+ then true
309+ else false
310+ let password = split(data, "_")[6]
311+ let spent = parseIntValue(split(data, "_")[7])
119312 if ((amountAsset != paymentAsset))
120313 then throw(("payment asset must be " + amountAsset))
121314 else {
122- let price = getIntegerValue(this, (orderId + "_price"))
123- let amount = getIntegerValue(this, (orderId + "_amount"))
124- let priceAsset = getStringValue(this, (orderId + "_price_asset"))
125- let amountAssetDecimals = if ((amountAsset == "WAVES"))
126- then 8
127- else value(assetInfo(fromBase58String(amountAsset))).decimals
128- let priceAmount = ((payment.amount * price) / pow(10, 0, amountAssetDecimals, 0, 0, CEILING))
129- if ((priceAmount == 0))
130- then throw("invalid amount")
315+ let valid = if ((password != ""))
316+ then sigVerify(i.callerPublicKey, fromBase58String(sig), fromBase58String(password))
317+ else true
318+ if (!(valid))
319+ then throw("The order is private")
131320 else {
132- let owner = value(addressFromString(getStringValue(this, (orderId + "_owner"))))
133- let spent = getIntegerValue(this, (orderId + "_spent"))
134- if ((payment.amount > (amount - spent)))
135- then throw("not enougth asset in order")
136- else ScriptResult(WriteSet([DataEntry((orderId + "_spent"), (spent + payment.amount))]), TransferSet([ScriptTransfer(i.caller, priceAmount, if ((priceAsset == "WAVES"))
137- then unit
138- else fromBase58String(priceAsset)), ScriptTransfer(owner, payment.amount, if ((amountAsset == "WAVES"))
139- then unit
140- else fromBase58String(amountAsset))]))
321+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
322+ then 8
323+ else value(assetInfo(fromBase58String(amountAsset))).decimals
324+ let priceAmount = ((payment.amount * price) / pow(10, 0, amountAssetDecimals, 0, 0, CEILING))
325+ if ((priceAmount == 0))
326+ then throw("invalid amount")
327+ else if (if (all)
328+ then (amount > priceAmount)
329+ else false)
330+ then throw("You must take all or none")
331+ else if ((payment.amount > (amount - spent)))
332+ then throw("not enougth asset in order")
333+ else {
334+ let orders = match getString(this, "orders") {
335+ case s: String =>
336+ s
337+ case _: Unit =>
338+ ""
339+ case _ =>
340+ throw()
341+ }
342+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString((spent + payment.amount)))
343+ let index = value(indexOf(orders, orderId))
344+ let newOrders = if ((amount == (payment.amount + spent)))
345+ then (take(orders, index) + drop(orders, (index + size(orderId))))
346+ else orders
347+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, priceAmount, if ((priceAsset == "WAVES"))
348+ then unit
349+ else fromBase58String(priceAsset)), ScriptTransfer(owner, payment.amount, if ((amountAsset == "WAVES"))
350+ then unit
351+ else fromBase58String(amountAsset))]))
352+ }
141353 }
354+ }
355+ }
356+ }
357+
358+
359+
360+@Callable(i)
361+func returnBuy (orderId) = {
362+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
363+ let amount = parseIntValue(split(data, "_")[0])
364+ let amountAsset = split(data, "_")[1]
365+ let price = parseIntValue(split(data, "_")[2])
366+ let priceAsset = split(data, "_")[3]
367+ let owner = value(addressFromString(split(data, "_")[4]))
368+ let all = if ((split(data, "_")[5] == "true"))
369+ then true
370+ else false
371+ let password = split(data, "_")[6]
372+ let spent = parseIntValue(split(data, "_")[7])
373+ if ((owner != i.caller))
374+ then throw("Return should be called by order owner")
375+ else {
376+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
377+ then 8
378+ else value(assetInfo(fromBase58String(amountAsset))).decimals
379+ let returnAmount = (((amount - spent) * price) / pow(10, 0, amountAssetDecimals, 0, 0, CEILING))
380+ if ((0 >= returnAmount))
381+ then throw("nothing to return")
382+ else {
383+ let orders = match getString(this, "orders") {
384+ case s: String =>
385+ s
386+ case _: Unit =>
387+ ""
388+ case _ =>
389+ throw()
390+ }
391+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString(amount))
392+ let index = value(indexOf(orders, orderId))
393+ let newOrders = (take(orders, index) + drop(orders, (index + size(orderId))))
394+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, returnAmount, if ((priceAsset == "WAVES"))
395+ then unit
396+ else fromBase58String(priceAsset))]))
397+ }
398+ }
399+ }
400+
401+
402+
403+@Callable(i)
404+func returnSell (orderId) = {
405+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
406+ let amount = parseIntValue(split(data, "_")[0])
407+ let amountAsset = split(data, "_")[1]
408+ let price = parseIntValue(split(data, "_")[2])
409+ let priceAsset = split(data, "_")[3]
410+ let owner = value(addressFromString(split(data, "_")[4]))
411+ let all = if ((split(data, "_")[5] == "true"))
412+ then true
413+ else false
414+ let password = split(data, "_")[6]
415+ let spent = parseIntValue(split(data, "_")[7])
416+ if ((owner != i.caller))
417+ then throw("return should be called by order owner")
418+ else {
419+ let returnAmount = (amount - spent)
420+ if ((0 >= returnAmount))
421+ then throw("nothing to return")
422+ else {
423+ let orders = match getString(this, "orders") {
424+ case s: String =>
425+ s
426+ case _: Unit =>
427+ ""
428+ case _ =>
429+ throw()
430+ }
431+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString(amount))
432+ let index = value(indexOf(orders, orderId))
433+ let newOrders = (take(orders, index) + drop(orders, (index + size(orderId))))
434+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, returnAmount, if ((amountAsset == "WAVES"))
435+ then unit
436+ else fromBase58String(amountAsset))]))
142437 }
143438 }
144439 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let uTokenId = base58'9qh2MiJhfqNS1o3R5wcUrAAWpeqZs9R8SLwQvCx88Vaf'
5+
6+func checkStatus (address) = {
7+ let statusUnlimited = match getBoolean(this, (address + "_unlimited")) {
8+ case bool: Boolean =>
9+ bool
10+ case _: Unit =>
11+ false
12+ case _ =>
13+ throw()
14+ }
15+ let statusTime = match getInteger(this, (address + "_time")) {
16+ case int: Int =>
17+ int
18+ case _: Unit =>
19+ 0
20+ case _ =>
21+ throw()
22+ }
23+ if (statusUnlimited)
24+ then true
25+ else (statusTime > lastBlock.timestamp)
26+ }
427
528
629 @Callable(i)
7-func makeSell (priceAsset,price) = if (if ((priceAsset != "WAVES"))
30+func addAsset (assetId) = {
31+ let addingPrice = (100 * 100000000)
32+ let addingPriceStr = "100"
33+ let payment = valueOrErrorMessage(i.payment, "Where is payment?")
34+ if (if (isDefined(payment.assetId))
35+ then (payment.assetId != uTokenId)
36+ else false)
37+ then throw("OTCu or WAVES only")
38+ else if ((payment.amount != addingPrice))
39+ then throw((("You have to pay " + addingPriceStr) + " OTCu or WAVES"))
40+ else if (!(isDefined(assetInfo(fromBase58String(assetId)))))
41+ then throw("There is no asset with specified id")
42+ else {
43+ let assets = match getString(this, "assets") {
44+ case str: String =>
45+ str
46+ case _: Unit =>
47+ ""
48+ case _ =>
49+ throw()
50+ }
51+ if (isDefined(indexOf(assets, assetId)))
52+ then throw("Asset is already available")
53+ else WriteSet([DataEntry("assets", (assets + assetId))])
54+ }
55+ }
56+
57+
58+
59+@Callable(i)
60+func pro (unlimited) = {
61+ let address = toBase58String(i.caller.bytes)
62+ let unlimitedPrice = (50 * 100000000)
63+ let unlimitedPriceStr = "50"
64+ let monthPrice = (10 * 100000000)
65+ let monthPriceStr = "10"
66+ let payment = valueOrErrorMessage(i.payment, "Where is payment?")
67+ if (if (isDefined(payment.assetId))
68+ then (payment.assetId != uTokenId)
69+ else false)
70+ then throw("OTCu or WAVES only")
71+ else if (if (unlimited)
72+ then (payment.amount != unlimitedPrice)
73+ else false)
74+ then throw((("You have to pay " + unlimitedPriceStr) + " OTCu or WAVES"))
75+ else if (if (!(unlimited))
76+ then (payment.amount != monthPrice)
77+ else false)
78+ then throw((("You have to pay " + monthPriceStr) + " OTCu or WAVES"))
79+ else {
80+ let currentUnlimited = match getBoolean(this, (address + "_unlimited")) {
81+ case bool: Boolean =>
82+ bool
83+ case _: Unit =>
84+ false
85+ case _ =>
86+ throw()
87+ }
88+ let currentTime = match getInteger(this, (address + "_time")) {
89+ case int: Int =>
90+ int
91+ case _: Unit =>
92+ 0
93+ case _ =>
94+ throw()
95+ }
96+ if (currentUnlimited)
97+ then throw("You have unlimited PRO status already. What do you want?")
98+ else {
99+ let month = 2629743000
100+ WriteSet([DataEntry((address + "_unlimited"), unlimited), DataEntry((address + "_time"), if (unlimited)
101+ then 0
102+ else (currentTime + month))])
103+ }
104+ }
105+ }
106+
107+
108+
109+@Callable(i)
110+func makeSell (priceAsset,price,all,password) = if (if ((priceAsset != "WAVES"))
8111 then !(isDefined(assetInfo(fromBase58String(priceAsset))))
9112 else false)
10113 then throw("There is no asset with specified id")
11114 else if ((0 >= price))
12115 then throw("price must be positive")
13116 else {
14117 let payment = valueOrErrorMessage(i.payment, "where is payment?")
15118 if ((0 >= payment.amount))
16119 then throw("amount must be positive")
17120 else {
18- let orderId = ("sell_" + toBase58String(i.transactionId))
19121 let amountAsset = match payment.assetId {
20122 case p: ByteVector =>
21123 toBase58String(p)
22124 case _ =>
23125 "WAVES"
24126 }
25- WriteSet([DataEntry((orderId + "_amount"), payment.amount), DataEntry((orderId + "_amount_asset"), amountAsset), DataEntry((orderId + "_price"), price), DataEntry((orderId + "_price_asset"), priceAsset), DataEntry((orderId + "_owner"), toBase58String(i.caller.bytes)), DataEntry((orderId + "_spent"), 0)])
127+ let assets = valueOrErrorMessage(getString(this, "assets"), "There are not available assets")
128+ if (if (!(isDefined(indexOf(assets, priceAsset))))
129+ then true
130+ else !(isDefined(indexOf(assets, amountAsset))))
131+ then throw("Asset are not available for trading")
132+ else {
133+ let address = toBase58String(i.caller.bytes)
134+ if (if (!(checkStatus(address)))
135+ then if (all)
136+ then true
137+ else (password != "")
138+ else false)
139+ then throw("You must have pro status to use these features")
140+ else {
141+ let orderId = toBase58String(i.transactionId)
142+ let orders = match getString(this, "orders") {
143+ case s: String =>
144+ s
145+ case _: Unit =>
146+ ""
147+ case _ =>
148+ throw()
149+ }
150+ let passwordValid = fromBase58String(password)
151+ let data = ((((((((((((((toString(payment.amount) + "_") + amountAsset) + "_") + toString(price)) + "_") + priceAsset) + "_") + address) + "_") + toString(all)) + "_") + password) + "_") + toString(0))
152+ WriteSet([DataEntry("orders", (orders + orderId)), DataEntry(orderId, data)])
153+ }
154+ }
26155 }
27156 }
28157
29158
30159
31160 @Callable(i)
32-func makeBuy (amountAsset,price) = if (if ((amountAsset != "WAVES"))
161+func makeBuy (amountAsset,price,all,password) = if (if ((amountAsset != "WAVES"))
33162 then !(isDefined(assetInfo(fromBase58String(amountAsset))))
34163 else false)
35164 then throw("There is no asset with specified id")
36165 else if ((0 >= price))
37166 then throw("price must be positive")
38167 else {
39168 let payment = valueOrErrorMessage(i.payment, "where is payment?")
40169 if ((0 >= payment.amount))
41170 then throw("amount must be positive")
42171 else {
43- let orderId = ("buy_" + toBase58String(i.transactionId))
44172 let priceAsset = match payment.assetId {
45173 case p: ByteVector =>
46174 toBase58String(p)
47175 case _ =>
48176 "WAVES"
49177 }
50- let amountAssetDecimals = if ((amountAsset == "WAVES"))
51- then 8
52- else value(assetInfo(fromBase58String(amountAsset))).decimals
53- let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
54- if ((buyAmount == 0))
55- then throw("invalid buy amount")
56- else WriteSet([DataEntry((orderId + "_amount"), buyAmount), DataEntry((orderId + "_amount_asset"), amountAsset), DataEntry((orderId + "_price"), price), DataEntry((orderId + "_price_asset"), priceAsset), DataEntry((orderId + "_owner"), toBase58String(i.caller.bytes)), DataEntry((orderId + "_spent"), 0)])
178+ let assets = valueOrErrorMessage(getString(this, "assets"), "There are not available assets")
179+ if (if (!(isDefined(indexOf(assets, priceAsset))))
180+ then true
181+ else !(isDefined(indexOf(assets, amountAsset))))
182+ then throw("Asset are not available for trading")
183+ else {
184+ let address = toBase58String(i.caller.bytes)
185+ if (if (!(checkStatus(address)))
186+ then if (all)
187+ then true
188+ else (password != "")
189+ else false)
190+ then throw("You must have pro status to use these features")
191+ else {
192+ let orderId = toBase58String(i.transactionId)
193+ let orders = match getString(this, "orders") {
194+ case s: String =>
195+ s
196+ case _: Unit =>
197+ ""
198+ case _ =>
199+ throw()
200+ }
201+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
202+ then 8
203+ else value(assetInfo(fromBase58String(amountAsset))).decimals
204+ let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
205+ if ((buyAmount == 0))
206+ then throw("invalid buy amount")
207+ else {
208+ let data = ((((((((((((((toString(buyAmount) + "_") + amountAsset) + "_") + toString(price)) + "_") + priceAsset) + "_") + address) + "_") + toString(all)) + "_") + password) + "_") + toString(0))
209+ WriteSet([DataEntry("orders", (orders + orderId)), DataEntry(orderId, data)])
210+ }
211+ }
212+ }
57213 }
58214 }
59215
60216
61217
62218 @Callable(i)
63-func takeSell (id) = {
219+func takeSell (orderId,sig) = {
64220 let payment = valueOrErrorMessage(i.payment, "where is payment?")
65221 if ((0 >= payment.amount))
66222 then throw("amount must be positive")
67223 else {
68- let orderId = ("sell_" + id)
69224 let paymentAsset = match payment.assetId {
70225 case p: ByteVector =>
71226 toBase58String(p)
72227 case _ =>
73228 "WAVES"
74229 }
75- let priceAsset = valueOrErrorMessage(getString(this, (orderId + "_price_asset")), "there is no order with specified id")
230+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
231+ let amount = parseIntValue(split(data, "_")[0])
232+ let amountAsset = split(data, "_")[1]
233+ let price = parseIntValue(split(data, "_")[2])
234+ let priceAsset = split(data, "_")[3]
235+ let owner = value(addressFromString(split(data, "_")[4]))
236+ let all = if ((split(data, "_")[5] == "true"))
237+ then true
238+ else false
239+ let password = split(data, "_")[6]
240+ let spent = parseIntValue(split(data, "_")[7])
76241 if ((priceAsset != paymentAsset))
77- then throw(("payment asset must be " + priceAsset))
242+ then throw(("Payment asset must be " + priceAsset))
78243 else {
79- let price = getIntegerValue(this, (orderId + "_price"))
80- let amount = getIntegerValue(this, (orderId + "_amount"))
81- let amountAsset = getStringValue(this, (orderId + "_amount_asset"))
82- let amountAssetDecimals = if ((amountAsset == "WAVES"))
83- then 8
84- else value(assetInfo(fromBase58String(amountAsset))).decimals
85- let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
86- if ((buyAmount == 0))
87- then throw("invalid amount")
244+ let valid = if ((password != ""))
245+ then sigVerify(i.callerPublicKey, fromBase58String(sig), fromBase58String(password))
246+ else true
247+ if (!(valid))
248+ then throw("The order is private")
88249 else {
89- let owner = value(addressFromString(getStringValue(this, (orderId + "_owner"))))
90- let spent = getIntegerValue(this, (orderId + "_spent"))
91- if ((buyAmount > (amount - spent)))
92- then throw("not enougth asset in order")
93- else ScriptResult(WriteSet([DataEntry((orderId + "_spent"), (spent + buyAmount))]), TransferSet([ScriptTransfer(i.caller, buyAmount, if ((amountAsset == "WAVES"))
94- then unit
95- else fromBase58String(amountAsset)), ScriptTransfer(owner, payment.amount, if ((priceAsset == "WAVES"))
96- then unit
97- else fromBase58String(priceAsset))]))
250+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
251+ then 8
252+ else value(assetInfo(fromBase58String(amountAsset))).decimals
253+ let buyAmount = ((payment.amount * pow(10, 0, amountAssetDecimals, 0, 0, CEILING)) / price)
254+ if ((buyAmount == 0))
255+ then throw("Invalid amount")
256+ else if (if (all)
257+ then (amount > buyAmount)
258+ else false)
259+ then throw("You must take all or none")
260+ else if ((buyAmount > (amount - spent)))
261+ then throw("Not enougth asset in order")
262+ else {
263+ let orders = match getString(this, "orders") {
264+ case s: String =>
265+ s
266+ case _: Unit =>
267+ ""
268+ case _ =>
269+ throw()
270+ }
271+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString((spent + buyAmount)))
272+ let index = value(indexOf(orders, orderId))
273+ let newOrders = if ((amount == (buyAmount + spent)))
274+ then (take(orders, index) + drop(orders, (index + size(orderId))))
275+ else orders
276+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, buyAmount, if ((amountAsset == "WAVES"))
277+ then unit
278+ else fromBase58String(amountAsset)), ScriptTransfer(owner, payment.amount, if ((priceAsset == "WAVES"))
279+ then unit
280+ else fromBase58String(priceAsset))]))
281+ }
98282 }
99283 }
100284 }
101285 }
102286
103287
104288
105289 @Callable(i)
106-func takeBuy (id) = {
290+func takeBuy (orderId,sig) = {
107291 let payment = valueOrErrorMessage(i.payment, "where is payment?")
108292 if ((0 >= payment.amount))
109293 then throw("amount must be positive")
110294 else {
111- let orderId = ("buy_" + id)
112295 let paymentAsset = match payment.assetId {
113296 case p: ByteVector =>
114297 toBase58String(p)
115298 case _ =>
116299 "WAVES"
117300 }
118- let amountAsset = valueOrErrorMessage(getString(this, (orderId + "_amount_asset")), "there is no order with specified id")
301+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
302+ let amount = parseIntValue(split(data, "_")[0])
303+ let amountAsset = split(data, "_")[1]
304+ let price = parseIntValue(split(data, "_")[2])
305+ let priceAsset = split(data, "_")[3]
306+ let owner = value(addressFromString(split(data, "_")[4]))
307+ let all = if ((split(data, "_")[5] == "true"))
308+ then true
309+ else false
310+ let password = split(data, "_")[6]
311+ let spent = parseIntValue(split(data, "_")[7])
119312 if ((amountAsset != paymentAsset))
120313 then throw(("payment asset must be " + amountAsset))
121314 else {
122- let price = getIntegerValue(this, (orderId + "_price"))
123- let amount = getIntegerValue(this, (orderId + "_amount"))
124- let priceAsset = getStringValue(this, (orderId + "_price_asset"))
125- let amountAssetDecimals = if ((amountAsset == "WAVES"))
126- then 8
127- else value(assetInfo(fromBase58String(amountAsset))).decimals
128- let priceAmount = ((payment.amount * price) / pow(10, 0, amountAssetDecimals, 0, 0, CEILING))
129- if ((priceAmount == 0))
130- then throw("invalid amount")
315+ let valid = if ((password != ""))
316+ then sigVerify(i.callerPublicKey, fromBase58String(sig), fromBase58String(password))
317+ else true
318+ if (!(valid))
319+ then throw("The order is private")
131320 else {
132- let owner = value(addressFromString(getStringValue(this, (orderId + "_owner"))))
133- let spent = getIntegerValue(this, (orderId + "_spent"))
134- if ((payment.amount > (amount - spent)))
135- then throw("not enougth asset in order")
136- else ScriptResult(WriteSet([DataEntry((orderId + "_spent"), (spent + payment.amount))]), TransferSet([ScriptTransfer(i.caller, priceAmount, if ((priceAsset == "WAVES"))
137- then unit
138- else fromBase58String(priceAsset)), ScriptTransfer(owner, payment.amount, if ((amountAsset == "WAVES"))
139- then unit
140- else fromBase58String(amountAsset))]))
321+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
322+ then 8
323+ else value(assetInfo(fromBase58String(amountAsset))).decimals
324+ let priceAmount = ((payment.amount * price) / pow(10, 0, amountAssetDecimals, 0, 0, CEILING))
325+ if ((priceAmount == 0))
326+ then throw("invalid amount")
327+ else if (if (all)
328+ then (amount > priceAmount)
329+ else false)
330+ then throw("You must take all or none")
331+ else if ((payment.amount > (amount - spent)))
332+ then throw("not enougth asset in order")
333+ else {
334+ let orders = match getString(this, "orders") {
335+ case s: String =>
336+ s
337+ case _: Unit =>
338+ ""
339+ case _ =>
340+ throw()
341+ }
342+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString((spent + payment.amount)))
343+ let index = value(indexOf(orders, orderId))
344+ let newOrders = if ((amount == (payment.amount + spent)))
345+ then (take(orders, index) + drop(orders, (index + size(orderId))))
346+ else orders
347+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, priceAmount, if ((priceAsset == "WAVES"))
348+ then unit
349+ else fromBase58String(priceAsset)), ScriptTransfer(owner, payment.amount, if ((amountAsset == "WAVES"))
350+ then unit
351+ else fromBase58String(amountAsset))]))
352+ }
141353 }
354+ }
355+ }
356+ }
357+
358+
359+
360+@Callable(i)
361+func returnBuy (orderId) = {
362+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
363+ let amount = parseIntValue(split(data, "_")[0])
364+ let amountAsset = split(data, "_")[1]
365+ let price = parseIntValue(split(data, "_")[2])
366+ let priceAsset = split(data, "_")[3]
367+ let owner = value(addressFromString(split(data, "_")[4]))
368+ let all = if ((split(data, "_")[5] == "true"))
369+ then true
370+ else false
371+ let password = split(data, "_")[6]
372+ let spent = parseIntValue(split(data, "_")[7])
373+ if ((owner != i.caller))
374+ then throw("Return should be called by order owner")
375+ else {
376+ let amountAssetDecimals = if ((amountAsset == "WAVES"))
377+ then 8
378+ else value(assetInfo(fromBase58String(amountAsset))).decimals
379+ let returnAmount = (((amount - spent) * price) / pow(10, 0, amountAssetDecimals, 0, 0, CEILING))
380+ if ((0 >= returnAmount))
381+ then throw("nothing to return")
382+ else {
383+ let orders = match getString(this, "orders") {
384+ case s: String =>
385+ s
386+ case _: Unit =>
387+ ""
388+ case _ =>
389+ throw()
390+ }
391+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString(amount))
392+ let index = value(indexOf(orders, orderId))
393+ let newOrders = (take(orders, index) + drop(orders, (index + size(orderId))))
394+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, returnAmount, if ((priceAsset == "WAVES"))
395+ then unit
396+ else fromBase58String(priceAsset))]))
397+ }
398+ }
399+ }
400+
401+
402+
403+@Callable(i)
404+func returnSell (orderId) = {
405+ let data = valueOrErrorMessage(getString(this, orderId), "Invalid order id")
406+ let amount = parseIntValue(split(data, "_")[0])
407+ let amountAsset = split(data, "_")[1]
408+ let price = parseIntValue(split(data, "_")[2])
409+ let priceAsset = split(data, "_")[3]
410+ let owner = value(addressFromString(split(data, "_")[4]))
411+ let all = if ((split(data, "_")[5] == "true"))
412+ then true
413+ else false
414+ let password = split(data, "_")[6]
415+ let spent = parseIntValue(split(data, "_")[7])
416+ if ((owner != i.caller))
417+ then throw("return should be called by order owner")
418+ else {
419+ let returnAmount = (amount - spent)
420+ if ((0 >= returnAmount))
421+ then throw("nothing to return")
422+ else {
423+ let orders = match getString(this, "orders") {
424+ case s: String =>
425+ s
426+ case _: Unit =>
427+ ""
428+ case _ =>
429+ throw()
430+ }
431+ let newData = (dropRight(data, size(split(data, "_")[7])) + toString(amount))
432+ let index = value(indexOf(orders, orderId))
433+ let newOrders = (take(orders, index) + drop(orders, (index + size(orderId))))
434+ ScriptResult(WriteSet([DataEntry("orders", newOrders), DataEntry(orderId, newData)]), TransferSet([ScriptTransfer(i.caller, returnAmount, if ((amountAsset == "WAVES"))
435+ then unit
436+ else fromBase58String(amountAsset))]))
142437 }
143438 }
144439 }
145440
146441

github/deemru/w8io/169f3d6 
56.97 ms