2019.09.19 15:51 [1713242] smart account 3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo > SELF 0.00000000 Waves

{ "type": 13, "id": "RCM2C4bxUcZNExbKGEEqCXbKvXG3Pnx5XpK1YHVpbxh", "fee": 1400000, "feeAssetId": null, "timestamp": 1568897499503, "version": 1, "sender": "3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo", "senderPublicKey": "BRnVwSVctnV8pge5vRpsJdWnkjWEJspFb6QvrmZvu3Ht", "proofs": [ "5iayvdyegJuBrXXaFuL7An1utyREJad8cT9M5fiWkK6vQpebvBfczm97VjFHh6fTDoQLcsPfagQj87ec37YW88nD" ], "script": "base64:AAIDAAAAAAAAAAAAAAAzAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5S2V5QW5kQWRkcmVzcwAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlLZXlBbmRBZGRyZXNzAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFmdldEJvb2xCeUtleUFuZEFkZHJlc3MAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwAAAAAPTGlzdFNwbGl0U3ltYm9sAgAAAAFfAAAAABBCYWxhbmNlTG9ja0Jsb2NrAAAAAAAAAAAAAAAAABNMaXN0RGF0YVNwbGl0U3ltYm9sAgAAAAErAAAAAAdXYXZlbGV0AAAAAAAF9eEAAAAAABBNaW5pbWFsQm9uZE9yZGVyCQAAaAAAAAIAAAAAAAAAAAoFAAAAB1dhdmVsZXQAAAAADk1pbmltYWxTdXJwbHVzCQAAaAAAAAIAAAAAAAAAAAoFAAAAB1dhdmVsZXQAAAAAEUFwcGx5QmxvY2tUaW1lb3V0AAAAAAAAAAAKAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAAA5Cb25kQXNzZXRJZEtleQIAAAANYm9uZF9hc3NldF9pZAAAAAASQXVjdGlvbkNvbnRyYWN0S2V5AgAAABBhdWN0aW9uX2NvbnRyYWN0AAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAAEk5ldXRyaW5vQmFsYW5jZUtleQIAAAAJbmV1dHJpbm9fAAAAAA9XYXZlc0JhbGFuY2VLZXkCAAAABndhdmVzXwAAAAAPQmFsYW5jZUJsb2NrS2V5AgAAAA5iYWxhbmNlX2Jsb2NrXwAAAAAMT3JkZXJib29rS2V5AgAAAAlvcmRlcmJvb2sAAAAADU9yZGVyVG90YWxLZXkCAAAADG9yZGVyX3RvdGFsXwAAAAANT3JkZXJPd25lcktleQIAAAAMb3JkZXJfb3duZXJfAAAAAA5PcmRlckhlaWdodEtleQIAAAANb3JkZXJfaGVpZ2h0XwAAAAATT3JkZXJGaWxsZWRUb3RhbEtleQIAAAATb3JkZXJfZmlsbGVkX3RvdGFsXwAAAAAOT3JkZXJTdGF0dXNLZXkCAAAADW9yZGVyX3N0YXR1c18AAAAACU9yYWNsZUtleQIAAAAGb3JhY2xlAAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEkF1Y3Rpb25Db250cmFjdEtleQAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AAAAAAdyZXNlcnZlCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAEdGhpcwAAAAAJb3JkZXJib29rCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAAxPcmRlcmJvb2tLZXkAAAAAC2JvbmRBc3NldElkCQACWQAAAAEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAADkJvbmRBc3NldElkS2V5AAAAAAZvcmFjbGUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACU9yYWNsZUtleQAAAAAKYm9uZFN1cHBseQQAAAAEaW5mbwkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAC2JvbmRBc3NldElkCQAAZQAAAAIIBQAAAARpbmZvAAAACHF1YW50aXR5CQAD6wAAAAIFAAAABHRoaXMFAAAAC2JvbmRBc3NldElkAAAAAA5uZXV0cmlub1N1cHBseQQAAAAEaW5mbwkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAkAAGUAAAACCAUAAAAEaW5mbwAAAAhxdWFudGl0eQkAA+sAAAACBQAAAAR0aGlzBQAAAA9uZXV0cmlub0Fzc2V0SWQBAAAAD2dldFdhdmVzQmFsYW5jZQAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAAEsAAAAAgUAAAAPV2F2ZXNCYWxhbmNlS2V5BQAAAAVvd25lcgEAAAASZ2V0TmV1dHJpbm9CYWxhbmNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkAASwAAAACBQAAABJOZXV0cmlub0JhbGFuY2VLZXkFAAAABW93bmVyAQAAAA9nZXRCYWxhbmNlQmxvY2sAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQABLAAAAAIFAAAAD0JhbGFuY2VCbG9ja0tleQUAAAAFb3duZXIBAAAADWdldE9yZGVyVG90YWwAAAABAAAAAmlkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQABLAAAAAIFAAAADU9yZGVyVG90YWxLZXkFAAAAAmlkAQAAAA1nZXRPcmRlck93bmVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkAASwAAAACBQAAAA1PcmRlck93bmVyS2V5BQAAAAJpZAEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAAEsAAAAAgUAAAATT3JkZXJGaWxsZWRUb3RhbEtleQUAAAACaWQBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAABAAAABmFtb3VudAkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAAAAAAAAAAAZAUAAAAFcHJpY2UBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAABAAAABmFtb3VudAkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UAAAAAAAAAAGQBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEAAAAGYW1vdW50CQAAaQAAAAIFAAAABmFtb3VudAUAAAAHV2F2ZWxldAEAAAAVY29udmVydEJvbmRUb05ldXRyaW5vAAAAAQAAAAZhbW91bnQJAABoAAAAAgUAAAAGYW1vdW50BQAAAAdXYXZlbGV0AQAAABJjb252ZXJ0V2F2ZXNUb0JvbmQAAAABAAAABmFtb3VudAkBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAQUAAAAGYW1vdW50AAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAQUAAAAHcmVzZXJ2ZQUAAAAObmV1dHJpbm9TdXBwbHkAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAADTkVXAgAAAANuZXcAAAAABkZJTExFRAIAAAAGZmlsbGVkAAAACAAAAAFpAQAAAA9zZXRDdXJyZW50UHJpY2UAAAABAAAABXByaWNlBAAAAAdhY2NvdW50CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAA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b3RhbAUAAAALc3VycGx1c0JvbmQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxPcmRlcmJvb2tLZXkJAAGRAAAAAgkABLUAAAACBQAAAAlvcmRlcmJvb2sJAAEsAAAAAgUAAAAHb3JkZXJJZAUAAAAPTGlzdFNwbGl0U3ltYm9sAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAE09yZGVyRmlsbGVkVG90YWxLZXkFAAAAB29yZGVySWQJAABkAAAAAgUAAAALZmlsbGVkVG90YWwFAAAADm5ld0ZpbGxlZFRvdGFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADk9yZGVyU3RhdHVzS2V5BQAAAAdvcmRlcklkBQAAAAZzdGF0dXMFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAACm9yZGVyT3duZXIJAQAAABVjb252ZXJ0Qm9uZFRvTmV1dHJpbm8AAAABBQAAAA5uZXdGaWxsZWRUb3RhbAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAAAPsof6g==", "chainId": 87, "height": 1713242, "spentComplexity": 0 } View: original | compacted Prev: none Next: F9LmrEz8o4hdQZJFMFNwkiwVxUv4A3oPivQC8ESZyiLA Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func getNumberByKey (key) = match getInteger(this, key) {
5+ case a: Int =>
6+ a
7+ case _ =>
8+ 0
9+}
10+
11+
12+func getStringByKey (key) = match getString(this, key) {
13+ case a: String =>
14+ a
15+ case _ =>
16+ ""
17+}
18+
19+
20+func getBoolByKey (key) = match getBoolean(this, key) {
21+ case a: Boolean =>
22+ a
23+ case _ =>
24+ false
25+}
26+
27+
28+func getNumberByKeyAndAddress (address,key) = match getInteger(addressFromStringValue(address), key) {
29+ case a: Int =>
30+ a
31+ case _ =>
32+ 0
33+}
34+
35+
36+func getStringByKeyAndAddress (address,key) = match getString(addressFromStringValue(address), key) {
37+ case a: String =>
38+ a
39+ case _ =>
40+ ""
41+}
42+
43+
44+func getBoolByKeyAndAddress (address,key) = match getBoolean(addressFromStringValue(address), key) {
45+ case a: Boolean =>
46+ a
47+ case _ =>
48+ false
49+}
50+
51+
52+let ListSplitSymbol = "_"
53+
54+let BalanceLockBlock = 0
55+
56+let ListDataSplitSymbol = "+"
57+
58+let Wavelet = 100000000
59+
60+let MinimalBondOrder = (10 * Wavelet)
61+
62+let MinimalSurplus = (10 * Wavelet)
63+
64+let ApplyBlockTimeout = 10
65+
66+let NeutrinoAssetIdKey = "neutrino_asset_id"
67+
68+let BondAssetIdKey = "bond_asset_id"
69+
70+let AuctionContractKey = "auction_contract"
71+
72+let PriceKey = "price"
73+
74+let NeutrinoBalanceKey = "neutrino_"
75+
76+let WavesBalanceKey = "waves_"
77+
78+let BalanceBlockKey = "balance_block_"
79+
80+let OrderbookKey = "orderbook"
81+
82+let OrderTotalKey = "order_total_"
83+
84+let OrderOwnerKey = "order_owner_"
85+
86+let OrderHeightKey = "order_height_"
87+
88+let OrderFilledTotalKey = "order_filled_total_"
89+
90+let OrderStatusKey = "order_status_"
91+
92+let OracleKey = "oracle"
93+
94+let neutrinoAssetId = fromBase58String(getStringByKey(NeutrinoAssetIdKey))
95+
96+let auctionContract = getStringByKey(AuctionContractKey)
97+
98+let price = getNumberByKey(PriceKey)
99+
100+let reserve = wavesBalance(this)
101+
102+let orderbook = getStringByKey(OrderbookKey)
103+
104+let bondAssetId = fromBase58String(getStringByKey(BondAssetIdKey))
105+
106+let oracle = getStringByKey(OracleKey)
107+
108+let bondSupply = {
109+ let info = extract(assetInfo(bondAssetId))
110+ (info.quantity - assetBalance(this, bondAssetId))
111+ }
112+
113+let neutrinoSupply = {
114+ let info = extract(assetInfo(neutrinoAssetId))
115+ (info.quantity - assetBalance(this, neutrinoAssetId))
116+ }
117+
118+func getWavesBalance (owner) = getNumberByKey((WavesBalanceKey + owner))
119+
120+
121+func getNeutrinoBalance (owner) = getNumberByKey((NeutrinoBalanceKey + owner))
122+
123+
124+func getBalanceBlock (owner) = getNumberByKey((BalanceBlockKey + owner))
125+
126+
127+func getOrderTotal (id) = getNumberByKey((OrderTotalKey + id))
128+
129+
130+func getOrderOwner (id) = getStringByKey((OrderOwnerKey + id))
131+
132+
133+func getOrderFilledTotal (id) = getNumberByKey((OrderFilledTotalKey + id))
134+
135+
136+func convertNeutrinoToWaves (amount) = ((amount * 100) / price)
137+
138+
139+func convertWavesToNeutrino (amount) = ((amount * price) / 100)
140+
141+
142+func convertNeutrinoToBond (amount) = (amount / Wavelet)
143+
144+
145+func convertBondToNeutrino (amount) = (amount * Wavelet)
146+
147+
148+func convertWavesToBond (amount) = convertNeutrinoToBond(convertWavesToNeutrino(amount))
149+
150+
151+let surplus = (convertWavesToNeutrino(reserve) - neutrinoSupply)
152+
153+let CANCELED = "canceled"
154+
155+let NEW = "new"
156+
157+let FILLED = "filled"
158+
159+@Callable(i)
160+func setCurrentPrice (price) = {
161+ let account = toString(i.caller)
162+ if ((account != oracle))
163+ then throw("permission denied")
164+ else WriteSet([DataEntry(PriceKey, price), DataEntry(((PriceKey + ListSplitSymbol) + toString(height)), price)])
165+ }
166+
167+
168+
169+@Callable(i)
170+func swapWavesToNeutrino () = {
171+ let pmt = extract(i.payment)
172+ if (isDefined(pmt.assetId))
173+ then throw("can use waves only")
174+ else {
175+ let account = toBase58String(i.caller.bytes)
176+ let amount = convertWavesToNeutrino(pmt.amount)
177+ WriteSet([DataEntry((NeutrinoBalanceKey + toString(i.caller)), (amount + getNeutrinoBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), height)])
178+ }
179+ }
180+
181+
182+
183+@Callable(i)
184+func swapNeutrinoToWaves () = {
185+ let pmt = extract(i.payment)
186+ if ((pmt.assetId != neutrinoAssetId))
187+ then throw("can use neutrino only")
188+ else {
189+ let account = toBase58String(i.caller.bytes)
190+ let amount = convertNeutrinoToWaves(pmt.amount)
191+ WriteSet([DataEntry((WavesBalanceKey + toString(i.caller)), (amount + getWavesBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), height)])
192+ }
193+ }
194+
195+
196+
197+@Callable(i)
198+func withdraw (account) = if (((getBalanceBlock(account) + BalanceLockBlock) >= height))
199+ then throw("wait a couple of blocks for withdraw")
200+ else ScriptResult(WriteSet([DataEntry((WavesBalanceKey + account), 0), DataEntry((NeutrinoBalanceKey + account), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(account), getNeutrinoBalance(account), neutrinoAssetId), ScriptTransfer(addressFromStringValue(account), getWavesBalance(account), unit)]))
201+
202+
203+
204+@Callable(i)
205+func generateBond () = {
206+ let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve))
207+ let balanceAuction = assetBalance(addressFromStringValue(auctionContract), bondAssetId)
208+ let amount = (convertNeutrinoToBond(deficit) - balanceAuction)
209+ if ((amount > 0))
210+ then TransferSet([ScriptTransfer(addressFromStringValue(auctionContract), amount, bondAssetId)])
211+ else throw("bond were generated or do not need it")
212+ }
213+
214+
215+
216+@Callable(i)
217+func setOrder () = {
218+ let pmt = extract(i.payment)
219+ let newOrderId = toBase58String(keccak256(((toBytes(pmt.amount) + i.caller.bytes) + toBytes(height))))
220+ if ((pmt.assetId != bondAssetId))
221+ then throw("can use bond only")
222+ else if ((getOrderOwner(newOrderId) != ""))
223+ then throw("order exists")
224+ else WriteSet([DataEntry(OrderbookKey, ((orderbook + newOrderId) + ListSplitSymbol)), DataEntry((OrderTotalKey + newOrderId), pmt.amount), DataEntry((OrderOwnerKey + newOrderId), toString(i.caller)), DataEntry((OrderHeightKey + newOrderId), height), DataEntry((OrderStatusKey + newOrderId), NEW)])
225+ }
226+
227+
228+
229+@Callable(i)
230+func cancelOrder (orderId) = {
231+ let owner = getOrderOwner(orderId)
232+ let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
233+ if ((owner != toString(i.caller)))
234+ then throw("permission denied")
235+ else {
236+ let parts = split(orderbook, (orderId + ListSplitSymbol))
237+ ScriptResult(WriteSet([DataEntry(OrderbookKey, (parts[0] + parts[1])), DataEntry((OrderStatusKey + orderId), CANCELED)]), TransferSet([ScriptTransfer(i.caller, amount, bondAssetId)]))
238+ }
239+ }
240+
241+
242+
243+@Callable(i)
244+func executeOrder () = {
245+ let orderId = split(orderbook, ListSplitSymbol)[0]
246+ let orderTotal = getOrderTotal(orderId)
247+ let orderOwner = getOrderOwner(orderId)
248+ let filledTotal = getOrderFilledTotal(orderId)
249+ if ((0 >= surplus))
250+ then throw("surplus is less than zero")
251+ else {
252+ let amount = (orderTotal - filledTotal)
253+ let surplusBond = convertNeutrinoToBond(surplus)
254+ let status = if ((surplusBond >= amount))
255+ then FILLED
256+ else NEW
257+ let newFilledTotal = if ((surplusBond >= amount))
258+ then orderTotal
259+ else surplusBond
260+ ScriptResult(WriteSet([DataEntry(OrderbookKey, split(orderbook, (orderId + ListSplitSymbol))[1]), DataEntry((OrderFilledTotalKey + orderId), (filledTotal + newFilledTotal)), DataEntry((OrderStatusKey + orderId), status)]), TransferSet([ScriptTransfer(addressFromStringValue(orderOwner), convertBondToNeutrino(newFilledTotal), neutrinoAssetId)]))
261+ }
262+ }
263+
264+

github/deemru/w8io/786bc32 
70.82 ms