tx · F9LmrEz8o4hdQZJFMFNwkiwVxUv4A3oPivQC8ESZyiLA

3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo:  -0.01400000 Waves

2019.09.30 15:56 [1729347] smart account 3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo > SELF 0.00000000 Waves

{ "type": 13, "id": "F9LmrEz8o4hdQZJFMFNwkiwVxUv4A3oPivQC8ESZyiLA", "fee": 1400000, "feeAssetId": null, "timestamp": 1569848212675, "version": 1, "sender": "3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo", "senderPublicKey": "BRnVwSVctnV8pge5vRpsJdWnkjWEJspFb6QvrmZvu3Ht", "proofs": [ "2nLbNcwh7XKr2K477kp7qHz32nbBo8WKAqsXxoetgZT6wpKqe7bc1W9DR2fcz1gqbYgvtjkUAzfqkBhQePSbKSDx" ], "script": "base64:AAIDAAAAAAAAAAAAAAAzAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5S2V5QW5kQWRkcmVzcwAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlLZXlBbmRBZGRyZXNzAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFmdldEJvb2xCeUtleUFuZEFkZHJlc3MAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwAAAAAPTGlzdFNwbGl0U3ltYm9sAgAAAAFfAAAAABBCYWxhbmNlTG9ja0Jsb2NrAAAAAAAAAAAKAAAAABNMaXN0RGF0YVNwbGl0U3ltYm9sAgAAAAErAAAAAAdXYXZlbGV0AAAAAAAF9eEAAAAAABBNaW5pbWFsQm9uZE9yZGVyCQAAaAAAAAIAAAAAAAAAAAoFAAAAB1dhdmVsZXQAAAAADk1pbmltYWxTdXJwbHVzCQAAaAAAAAIAAAAAAAAAAAoFAAAAB1dhdmVsZXQAAAAAEUFwcGx5QmxvY2tUaW1lb3V0AAAAAAAAAAAKAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAAA5Cb25kQXNzZXRJZEtleQIAAAANYm9uZF9hc3NldF9pZAAAAAASQXVjdGlvbkNvbnRyYWN0S2V5AgAAABBhdWN0aW9uX2NvbnRyYWN0AAAAAAhQcmljZUtleQIAAAAFcHJpY2UAAAAAEk5ldXRyaW5vQmFsYW5jZUtleQIAAAAJbmV1dHJpbm9fAAAAAA9XYXZlc0JhbGFuY2VLZXkCAAAABndhdmVzXwAAAAAPQmFsYW5jZUJsb2NrS2V5AgAAAA5iYWxhbmNlX2Jsb2NrXwAAAAAMT3JkZXJib29rS2V5AgAAAAlvcmRlcmJvb2sAAAAADU9yZGVyVG90YWxLZXkCAAAADG9yZGVyX3RvdGFsXwAAAAANT3JkZXJPd25lcktleQIAAAAMb3JkZXJfb3duZXJfAAAAAA5PcmRlckhlaWdodEtleQIAAAANb3JkZXJfaGVpZ2h0XwAAAAATT3JkZXJGaWxsZWRUb3RhbEtleQIAAAATb3JkZXJfZmlsbGVkX3RvdGFsXwAAAAAOT3JkZXJTdGF0dXNLZXkCAAAADW9yZGVyX3N0YXR1c18AAAAACU9yYWNsZUtleQIAAAAGb3JhY2xlAAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEkF1Y3Rpb25Db250cmFjdEtleQAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AAAAAAdyZXNlcnZlCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAEdGhpcwAAAAAJb3JkZXJib29rCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAAxPcmRlcmJvb2tLZXkAAAAAC2JvbmRBc3NldElkCQACWQAAAAEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAADkJvbmRBc3NldElkS2V5AAAAAAZvcmFjbGUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACU9yYWNsZUtleQAAAAAKYm9uZFN1cHBseQQAAAAEaW5mbwkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAC2JvbmRBc3NldElkCQAAZQAAAAIIBQAAAARpbmZvAAAACHF1YW50aXR5CQAD6wAAAAIFAAAABHRoaXMFAAAAC2JvbmRBc3NldElkAAAAAA5uZXV0cmlub1N1cHBseQQAAAAEaW5mbwkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAkAAGUAAAACCAUAAAAEaW5mbwAAAAhxdWFudGl0eQkAA+sAAAACBQAAAAR0aGlzBQAAAA9uZXV0cmlub0Fzc2V0SWQBAAAAD2dldFdhdmVzQmFsYW5jZQAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAAEsAAAAAgUAAAAPV2F2ZXNCYWxhbmNlS2V5BQAAAAVvd25lcgEAAAASZ2V0TmV1dHJpbm9CYWxhbmNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkAASwAAAACBQAAABJOZXV0cmlub0JhbGFuY2VLZXkFAAAABW93bmVyAQAAAA9nZXRCYWxhbmNlQmxvY2sAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQABLAAAAAIFAAAAD0JhbGFuY2VCbG9ja0tleQUAAAAFb3duZXIBAAAADWdldE9yZGVyVG90YWwAAAABAAAAAmlkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQABLAAAAAIFAAAADU9yZGVyVG90YWxLZXkFAAAAAmlkAQAAAA1nZXRPcmRlck93bmVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkAASwAAAACBQAAAA1PcmRlck93bmVyS2V5BQAAAAJpZAEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAAEsAAAAAgUAAAATT3JkZXJGaWxsZWRUb3RhbEtleQUAAAACaWQBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAABAAAABmFtb3VudAkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAAAAAAAAAAAZAUAAAAFcHJpY2UBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAABAAAABmFtb3VudAkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UAAAAAAAAAAGQBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEAAAAGYW1vdW50CQAAaQAAAAIFAAAABmFtb3VudAUAAAAHV2F2ZWxldAEAAAAVY29udmVydEJvbmRUb05ldXRyaW5vAAAAAQAAAAZhbW91bnQJAABoAAAAAgUAAAAGYW1vdW50BQAAAAdXYXZlbGV0AQAAABJjb252ZXJ0V2F2ZXNUb0JvbmQAAAABAAAABmFtb3VudAkBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAQUAAAAGYW1vdW50AAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAQUAAAAHcmVzZXJ2ZQUAAAAObmV1dHJpbm9TdXBwbHkAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAADTkVXAgAAAANuZXcAAAAABkZJTExFRAIAAAAGZmlsbGVkAAAACAAAAAFpAQAAAA9zZXRDdXJyZW50UHJpY2UAAAABAAAABXByaWNlBAAAAAdhY2NvdW50CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAA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bHVzQm9uZAUAAAAGYW1vdW50BQAAAApvcmRlclRvdGFsBQAAAAtzdXJwbHVzQm9uZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADE9yZGVyYm9va0tleQkAAZEAAAACCQAEtQAAAAIFAAAACW9yZGVyYm9vawkAASwAAAACBQAAAAdvcmRlcklkBQAAAA9MaXN0U3BsaXRTeW1ib2wAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAATT3JkZXJGaWxsZWRUb3RhbEtleQUAAAAHb3JkZXJJZAkAAGQAAAACBQAAAAtmaWxsZWRUb3RhbAUAAAAObmV3RmlsbGVkVG90YWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAOT3JkZXJTdGF0dXNLZXkFAAAAB29yZGVySWQFAAAABnN0YXR1cwUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAKb3JkZXJPd25lcgkBAAAAFWNvbnZlcnRCb25kVG9OZXV0cmlubwAAAAEFAAAADm5ld0ZpbGxlZFRvdGFsBQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAA25pbAAAAAA5tCl2", "chainId": 87, "height": 1729347, "spentComplexity": 0 } View: original | compacted Prev: RCM2C4bxUcZNExbKGEEqCXbKvXG3Pnx5XpK1YHVpbxh Next: DnW8skvSzGLGUhA92pVxtTssjk2SpbytVgqNcvWu5Jzw Diff:
OldNewDifferences
5151
5252 let ListSplitSymbol = "_"
5353
54-let BalanceLockBlock = 0
54+let BalanceLockBlock = 10
5555
5656 let ListDataSplitSymbol = "+"
5757
174174 else {
175175 let account = toBase58String(i.caller.bytes)
176176 let amount = convertWavesToNeutrino(pmt.amount)
177- WriteSet([DataEntry((NeutrinoBalanceKey + toString(i.caller)), (amount + getNeutrinoBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), height)])
177+ WriteSet([DataEntry((NeutrinoBalanceKey + toString(i.caller)), (amount + getNeutrinoBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), (height + BalanceLockBlock))])
178178 }
179179 }
180180
188188 else {
189189 let account = toBase58String(i.caller.bytes)
190190 let amount = convertNeutrinoToWaves(pmt.amount)
191- WriteSet([DataEntry((WavesBalanceKey + toString(i.caller)), (amount + getWavesBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), height)])
191+ WriteSet([DataEntry((WavesBalanceKey + toString(i.caller)), (amount + getWavesBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), (height + BalanceLockBlock))])
192192 }
193193 }
194194
195195
196196
197197 @Callable(i)
198-func withdraw (account) = if (((getBalanceBlock(account) + BalanceLockBlock) >= height))
198+func withdraw (account) = if ((getBalanceBlock(account) >= height))
199199 then throw("wait a couple of blocks for withdraw")
200200 else ScriptResult(WriteSet([DataEntry((WavesBalanceKey + account), 0), DataEntry((NeutrinoBalanceKey + account), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(account), getNeutrinoBalance(account), neutrinoAssetId), ScriptTransfer(addressFromStringValue(account), getWavesBalance(account), unit)]))
201201
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = match getInteger(this, key) {
55 case a: Int =>
66 a
77 case _ =>
88 0
99 }
1010
1111
1212 func getStringByKey (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func getBoolByKey (key) = match getBoolean(this, key) {
2121 case a: Boolean =>
2222 a
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func getNumberByKeyAndAddress (address,key) = match getInteger(addressFromStringValue(address), key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 func getStringByKeyAndAddress (address,key) = match getString(addressFromStringValue(address), key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 func getBoolByKeyAndAddress (address,key) = match getBoolean(addressFromStringValue(address), key) {
4545 case a: Boolean =>
4646 a
4747 case _ =>
4848 false
4949 }
5050
5151
5252 let ListSplitSymbol = "_"
5353
54-let BalanceLockBlock = 0
54+let BalanceLockBlock = 10
5555
5656 let ListDataSplitSymbol = "+"
5757
5858 let Wavelet = 100000000
5959
6060 let MinimalBondOrder = (10 * Wavelet)
6161
6262 let MinimalSurplus = (10 * Wavelet)
6363
6464 let ApplyBlockTimeout = 10
6565
6666 let NeutrinoAssetIdKey = "neutrino_asset_id"
6767
6868 let BondAssetIdKey = "bond_asset_id"
6969
7070 let AuctionContractKey = "auction_contract"
7171
7272 let PriceKey = "price"
7373
7474 let NeutrinoBalanceKey = "neutrino_"
7575
7676 let WavesBalanceKey = "waves_"
7777
7878 let BalanceBlockKey = "balance_block_"
7979
8080 let OrderbookKey = "orderbook"
8181
8282 let OrderTotalKey = "order_total_"
8383
8484 let OrderOwnerKey = "order_owner_"
8585
8686 let OrderHeightKey = "order_height_"
8787
8888 let OrderFilledTotalKey = "order_filled_total_"
8989
9090 let OrderStatusKey = "order_status_"
9191
9292 let OracleKey = "oracle"
9393
9494 let neutrinoAssetId = fromBase58String(getStringByKey(NeutrinoAssetIdKey))
9595
9696 let auctionContract = getStringByKey(AuctionContractKey)
9797
9898 let price = getNumberByKey(PriceKey)
9999
100100 let reserve = wavesBalance(this)
101101
102102 let orderbook = getStringByKey(OrderbookKey)
103103
104104 let bondAssetId = fromBase58String(getStringByKey(BondAssetIdKey))
105105
106106 let oracle = getStringByKey(OracleKey)
107107
108108 let bondSupply = {
109109 let info = extract(assetInfo(bondAssetId))
110110 (info.quantity - assetBalance(this, bondAssetId))
111111 }
112112
113113 let neutrinoSupply = {
114114 let info = extract(assetInfo(neutrinoAssetId))
115115 (info.quantity - assetBalance(this, neutrinoAssetId))
116116 }
117117
118118 func getWavesBalance (owner) = getNumberByKey((WavesBalanceKey + owner))
119119
120120
121121 func getNeutrinoBalance (owner) = getNumberByKey((NeutrinoBalanceKey + owner))
122122
123123
124124 func getBalanceBlock (owner) = getNumberByKey((BalanceBlockKey + owner))
125125
126126
127127 func getOrderTotal (id) = getNumberByKey((OrderTotalKey + id))
128128
129129
130130 func getOrderOwner (id) = getStringByKey((OrderOwnerKey + id))
131131
132132
133133 func getOrderFilledTotal (id) = getNumberByKey((OrderFilledTotalKey + id))
134134
135135
136136 func convertNeutrinoToWaves (amount) = ((amount * 100) / price)
137137
138138
139139 func convertWavesToNeutrino (amount) = ((amount * price) / 100)
140140
141141
142142 func convertNeutrinoToBond (amount) = (amount / Wavelet)
143143
144144
145145 func convertBondToNeutrino (amount) = (amount * Wavelet)
146146
147147
148148 func convertWavesToBond (amount) = convertNeutrinoToBond(convertWavesToNeutrino(amount))
149149
150150
151151 let surplus = (convertWavesToNeutrino(reserve) - neutrinoSupply)
152152
153153 let CANCELED = "canceled"
154154
155155 let NEW = "new"
156156
157157 let FILLED = "filled"
158158
159159 @Callable(i)
160160 func setCurrentPrice (price) = {
161161 let account = toString(i.caller)
162162 if ((account != oracle))
163163 then throw("permission denied")
164164 else WriteSet([DataEntry(PriceKey, price), DataEntry(((PriceKey + ListSplitSymbol) + toString(height)), price)])
165165 }
166166
167167
168168
169169 @Callable(i)
170170 func swapWavesToNeutrino () = {
171171 let pmt = extract(i.payment)
172172 if (isDefined(pmt.assetId))
173173 then throw("can use waves only")
174174 else {
175175 let account = toBase58String(i.caller.bytes)
176176 let amount = convertWavesToNeutrino(pmt.amount)
177- WriteSet([DataEntry((NeutrinoBalanceKey + toString(i.caller)), (amount + getNeutrinoBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), height)])
177+ WriteSet([DataEntry((NeutrinoBalanceKey + toString(i.caller)), (amount + getNeutrinoBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), (height + BalanceLockBlock))])
178178 }
179179 }
180180
181181
182182
183183 @Callable(i)
184184 func swapNeutrinoToWaves () = {
185185 let pmt = extract(i.payment)
186186 if ((pmt.assetId != neutrinoAssetId))
187187 then throw("can use neutrino only")
188188 else {
189189 let account = toBase58String(i.caller.bytes)
190190 let amount = convertNeutrinoToWaves(pmt.amount)
191- WriteSet([DataEntry((WavesBalanceKey + toString(i.caller)), (amount + getWavesBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), height)])
191+ WriteSet([DataEntry((WavesBalanceKey + toString(i.caller)), (amount + getWavesBalance(account))), DataEntry((BalanceBlockKey + toString(i.caller)), (height + BalanceLockBlock))])
192192 }
193193 }
194194
195195
196196
197197 @Callable(i)
198-func withdraw (account) = if (((getBalanceBlock(account) + BalanceLockBlock) >= height))
198+func withdraw (account) = if ((getBalanceBlock(account) >= height))
199199 then throw("wait a couple of blocks for withdraw")
200200 else ScriptResult(WriteSet([DataEntry((WavesBalanceKey + account), 0), DataEntry((NeutrinoBalanceKey + account), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(account), getNeutrinoBalance(account), neutrinoAssetId), ScriptTransfer(addressFromStringValue(account), getWavesBalance(account), unit)]))
201201
202202
203203
204204 @Callable(i)
205205 func generateBond () = {
206206 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve))
207207 let balanceAuction = assetBalance(addressFromStringValue(auctionContract), bondAssetId)
208208 let amount = (convertNeutrinoToBond(deficit) - balanceAuction)
209209 if ((amount > 0))
210210 then TransferSet([ScriptTransfer(addressFromStringValue(auctionContract), amount, bondAssetId)])
211211 else throw("bond were generated or do not need it")
212212 }
213213
214214
215215
216216 @Callable(i)
217217 func setOrder () = {
218218 let pmt = extract(i.payment)
219219 let newOrderId = toBase58String(keccak256(((toBytes(pmt.amount) + i.caller.bytes) + toBytes(height))))
220220 if ((pmt.assetId != bondAssetId))
221221 then throw("can use bond only")
222222 else if ((getOrderOwner(newOrderId) != ""))
223223 then throw("order exists")
224224 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)])
225225 }
226226
227227
228228
229229 @Callable(i)
230230 func cancelOrder (orderId) = {
231231 let owner = getOrderOwner(orderId)
232232 let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
233233 if ((owner != toString(i.caller)))
234234 then throw("permission denied")
235235 else {
236236 let parts = split(orderbook, (orderId + ListSplitSymbol))
237237 ScriptResult(WriteSet([DataEntry(OrderbookKey, (parts[0] + parts[1])), DataEntry((OrderStatusKey + orderId), CANCELED)]), TransferSet([ScriptTransfer(i.caller, amount, bondAssetId)]))
238238 }
239239 }
240240
241241
242242
243243 @Callable(i)
244244 func executeOrder () = {
245245 let orderId = split(orderbook, ListSplitSymbol)[0]
246246 let orderTotal = getOrderTotal(orderId)
247247 let orderOwner = getOrderOwner(orderId)
248248 let filledTotal = getOrderFilledTotal(orderId)
249249 if ((0 >= surplus))
250250 then throw("surplus is less than zero")
251251 else {
252252 let amount = (orderTotal - filledTotal)
253253 let surplusBond = convertNeutrinoToBond(surplus)
254254 let status = if ((surplusBond >= amount))
255255 then FILLED
256256 else NEW
257257 let newFilledTotal = if ((surplusBond >= amount))
258258 then orderTotal
259259 else surplusBond
260260 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)]))
261261 }
262262 }
263263
264264

github/deemru/w8io/6500d08 
79.81 ms