tx · ARN9d5usKjGZ1MsD8kGa1kS7NRYcMrV8V6Pa6Bp3tb9w

3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7:  -0.01400000 Waves

2019.11.29 18:33 [1817175] smart account 3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7 > SELF 0.00000000 Waves

{ "type": 13, "id": "ARN9d5usKjGZ1MsD8kGa1kS7NRYcMrV8V6Pa6Bp3tb9w", "fee": 1400000, "feeAssetId": null, "timestamp": 1575041666260, "version": 1, "sender": "3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7", "senderPublicKey": "H8Gooqgk4486MkqEQVwACpgoyEjt5Px4eskysnEDZ1nR", "proofs": [ "4itbPNzZKRzDM8BPsBnCMQ5C3m9ao38mtg8JfpMTVrNFv4KkLWyhYeL9U5n8afYGzmFTgqgKV5LePWTCBtunHn1k" ], "script": "base64:AAIDAAAAAAAAAAsIARIAEgMKAQgSAAAAADIBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAABBPUkRFUlNQTElUU1lNQk9MAgAAAAFfAAAAAAVQQVVMSQAAAAAAAA9CQAAAAAAPUEVSQ0VOVEFDQ1VSQUNZAAAAAAAAAAPoAAAAAAtNQVhESVNDT1VOVAAAAAAAAAAAMgAAAAAIQ0FOQ0VMRUQCAAAACGNhbmNlbGVkAAAAAANORVcCAAAAA25ldwAAAAAGRklMTEVEAgAAAAZmaWxsZWQAAAAAE05ldXRyaW5vQ29udHJhY3RLZXkCAAAAEW5ldXRyaW5vX2NvbnRyYWN0AAAAAAxPcmRlcmJvb2tLZXkCAAAACW9yZGVyYm9vawAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAAA5Cb25kQXNzZXRJZEtleQIAAAANYm9uZF9hc3NldF9pZAAAAAASTmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAASQ29udHJvbENvbnRyYWN0S2V5AgAAABBjb250cm9sX2NvbnRyYWN0AAAAABBCYWxhbmNlTG9jZWRrS2V5AgAAAA1iYWxhbmNlX2xvY2tfAAAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkJAAEsAAAAAgUAAAAQQmFsYW5jZUxvY2Vka0tleQIAAAAFd2F2ZXMAAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQkAASwAAAACBQAAABBCYWxhbmNlTG9jZWRrS2V5AgAAAAhuZXV0cmlubwEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAxvcmRlcl90b3RhbF8FAAAAB29yZGVySWQBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAAMb3JkZXJfb3duZXJfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9oZWlnaHRfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9zdGF0dXNfBQAAAAdvcmRlcklkAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAE29yZGVyX2ZpbGxlZF90b3RhbF8FAAAAB29yZGVySWQBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGkAAAACCQAAaAAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAZhbW91bnQAAAAAAAAAAGQFAAAABXByaWNlBQAAAAdXQVZFTEVUBQAAAAVQQVVMSQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIAAAAGYW1vdW50AAAABXByaWNlCQAAaQAAAAIJAABoAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UAAAAAAAAAAGQFAAAABVBBVUxJBQAAAAdXQVZFTEVUAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABAAAABmFtb3VudAkAAGkAAAACBQAAAAZhbW91bnQFAAAABVBBVUxJAQAAABVjb252ZXJ0Qm9uZFRvTmV1dHJpbm8AAAABAAAABmFtb3VudAkAAGgAAAACBQAAAAZhbW91bnQFAAAABVBBVUxJAQAAABJjb252ZXJ0V2F2ZXNUb0JvbmQAAAACAAAABmFtb3VudAAAAAVwcmljZQkBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQAAAAAJb3JkZXJib29rCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAAxPcmRlcmJvb2tLZXkAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAATTmV1dHJpbm9Db250cmFjdEtleQAAAAAPY29udHJvbENvbnRyYWN0CQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABJDb250cm9sQ29udHJhY3RLZXkAAAAADGN1cnJlbnRQcmljZQkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAUAAAAIUHJpY2VLZXkAAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5AAAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFVdhdmVzTG9ja2VkQmFsYW5jZUtleQAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABJOZXV0cmlub0Fzc2V0SWRLZXkAAAAAC2JvbmRBc3NldElkCQACWQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAA5Cb25kQXNzZXRJZEtleQAAAAAHcmVzZXJ2ZQkAAGUAAAACCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASd2F2ZXNMb2NrZWRCYWxhbmNlAAAAAA5uZXV0cmlub1N1cHBseQkAAGUAAAACCQAAZAAAAAIJAABlAAAAAggJAQAAAAdleHRyYWN0AAAAAQkAA+wAAAABBQAAAA9uZXV0cmlub0Fzc2V0SWQAAAAIcXVhbnRpdHkJAAPrAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAAPrAAAAAgUAAAAEdGhpcwUAAAAPbmV1dHJpbm9Bc3NldElkAAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAHcmVzZXJ2ZQUAAAAMY3VycmVudFByaWNlBQAAAA5uZXV0cmlub1N1cHBseQEAAAANZ2V0T3JkZXJUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQUAAAACaWQBAAAADWdldE9yZGVyT3duZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEFAAAAAmlkAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEAAAACaWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEFAAAAAmlkAQAAABNnZXRPcmRlckZpbGxlZFRvdGFsAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABBQAAAAJpZAEAAAATZ2V0T3JkZXJFbGVt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DWdldE9yZGVyT3duZXIAAAABBQAAAAdvcmRlcklkBAAAAAZhbW91bnQJAABlAAAAAgkBAAAADWdldE9yZGVyVG90YWwAAAABBQAAAAdvcmRlcklkCQEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEFAAAAB29yZGVySWQDCQEAAAACIT0AAAACBQAAAAVvd25lcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQDCQEAAAACIT0AAAACCQEAAAAOZ2V0T3JkZXJTdGF0dXMAAAABBQAAAAdvcmRlcklkBQAAAANORVcJAAACAAAAAQIAAAAUaW52YWxpZCBvcmRlciBzdGF0dXMJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxPcmRlcmJvb2tLZXkJAQAAAAlkcm9wT3JkZXIAAAABBQAAAAdvcmRlcklkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAhDQU5DRUxFRAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAGYW1vdW50BQAAAAtib25kQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAADWxpcXVpZGF0ZUJvbmQAAAAABAAAAAdvcmRlcklkCQABkQAAAAIJAQAAABRnZXRPcmRlcnNJbk9yZGVyYm9vawAAAAEFAAAACW9yZGVyYm9vawAAAAAAAAAAAAQAAAAKb3JkZXJUb3RhbAkBAAAADWdldE9yZGVyVG90YWwAAAABBQAAAAdvcmRlcklkBAAAAApvcmRlck93bmVyCQEAAAANZ2V0T3JkZXJPd25lcgAAAAEFAAAAB29yZGVySWQEAAAAC2ZpbGxlZFRvdGFsCQEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEFAAAAB29yZGVySWQEAAAAC3N1cnBsdXNCb25kCQEAAAAVY29udmVydE5ldXRyaW5vVG9Cb25kAAAAAQUAAAAHc3VycGx1cwQAAAAPbmV1dHJpbm9CYWxhbmNlCQAD6wAAAAIFAAAABHRoaXMFAAAAD25ldXRyaW5vQXNzZXRJZAQAAAAPc3VycGx1c1Bvc2l0aXZlAwkAAGcAAAACAAAAAAAAAAAABQAAAAdzdXJwbHVzAAAAAAAAAAAABQAAAAdzdXJwbHVzBAAAAApib25kQW1vdW50AwkAAGcAAAACBQAAAA9zdXJwbHVzUG9zaXRpdmUFAAAAD25ldXRyaW5vQmFsYW5jZQUAAAAPbmV1dHJpbm9CYWxhbmNlBQAAAA9zdXJwbHVzUG9zaXRpdmUEAAAADHJldHVybkFtb3VudAMJAABnAAAAAgUAAAAPc3VycGx1c1Bvc2l0aXZlBQAAAA9uZXV0cmlub0JhbGFuY2UAAAAAAAAAAAAJAABlAAAAAgUAAAAPbmV1dHJpbm9CYWxhbmNlBQAAAA9zdXJwbHVzUG9zaXRpdmUDAwkAAAAAAAACBQAAAAxyZXR1cm5BbW91bnQAAAAAAAAAAAAJAAAAAAAAAgUAAAAPbmV1dHJpbm9CYWxhbmNlAAAAAAAAAAAABwkAAAIAAAABAgAAAA93aXRob3V0IHN1cnBsdXMDCQAAAAAAAAIFAAAAD25ldXRyaW5vQmFsYW5jZQAAAAAAAAAAAAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAAxyZXR1cm5BbW91bnQFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsAwkAAAAAAAACBQAAAAlvcmRlcmJvb2sCAAAAAAkAAAIAAAABAgAAAA9lbXB0eSBvcmRlcmJvb2sDCQAAZwAAAAIAAAAAAAAAAAAFAAAAC3N1cnBsdXNCb25kCQAAAgAAAAECAAAALnRoZXJlIGlzIG5vIHByb2ZpY2l0IG9uIHRoZSBzbWFydCBjb250cmFjdCBub3cDCQAAAAAAAAIFAAAACW9yZGVyYm9vawIAAAAACQAAAgAAAAECAAAAD2VtcHR5IG9yZGVyYm9vawQAAAAGYW1vdW50CQAAZQAAAAIFAAAACm9yZGVyVG90YWwFAAAAC2ZpbGxlZFRvdGFsBAAAAAZzdGF0dXMDCQAAZwAAAAIFAAAAC3N1cnBsdXNCb25kBQAAAAZhbW91bnQFAAAABkZJTExFRAUAAAADTkVXBAAAAA5uZXdGaWxsZWRUb3RhbAMJAABnAAAAAgUAAAALc3VycGx1c0JvbmQFAAAABmFtb3VudAUAAAAGYW1vdW50BQAAAAtzdXJwbHVzQm9uZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADE9yZGVyYm9va0tleQMJAABnAAAAAgUAAAALc3VycGx1c0JvbmQFAAAABmFtb3VudAkBAAAACWRyb3BPcmRlcgAAAAEFAAAAB29yZGVySWQFAAAACW9yZGVyYm9vawkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABBQAAAAdvcmRlcklkCQAAZAAAAAIFAAAAC2ZpbGxlZFRvdGFsBQAAAA5uZXdGaWxsZWRUb3RhbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEWdldE9yZGVyU3RhdHVzS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAAGc3RhdHVzBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAApvcmRlck93bmVyCQEAAAAVY29udmVydEJvbmRUb05ldXRyaW5vAAAAAQUAAAAObmV3RmlsbGVkVG90YWwFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsAAAAAKzNdF4=", "chainId": 87, "height": 1817175, "spentComplexity": 0 } View: original | compacted Prev: DtkoG6xHtkHT6PJkjD5P2YATWpf9q26fstkHnPDiLqu9 Next: CBuK4JXRAHnxEgdU1KiUxhTDo4Q9H5RowqP17VryhYbz Diff:
OldNewDifferences
6161
6262 let ControlContractKey = "control_contract"
6363
64-let SwapLockedBalanceKey = "swap_locked_balance"
64+let BalanceLocedkKey = "balance_lock_"
6565
66-let SwapNeutrinoLockedBalanceKey = "swap_neutrino_locked_balance"
66+let WavesLockedBalanceKey = (BalanceLocedkKey + "waves")
6767
68-let SwapWavesLockedBalanceKey = "swap_waves_locked_balance"
68+let NeutrinoLockedBalanceKey = (BalanceLocedkKey + "neutrino")
6969
7070 func getOrderTotalKey (orderId) = ("order_total_" + orderId)
7171
105105
106106 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
107107
108-let swapLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapLockedBalanceKey)
108+let neutrinoLockedBalance = getNumberByKey(NeutrinoLockedBalanceKey)
109109
110-let swapNeutrinoLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapNeutrinoLockedBalanceKey)
111-
112-let swapWavesLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapWavesLockedBalanceKey)
110+let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
113111
114112 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
115113
116114 let bondAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, BondAssetIdKey))
117115
118-let reserve = (wavesBalance(neutrinoContract) - swapWavesLockedBalance)
116+let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
119117
120-let neutrinoSupply = ((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + swapNeutrinoLockedBalance)
118+let neutrinoSupply = (((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + neutrinoLockedBalance) - assetBalance(this, neutrinoAssetId))
121119
122-let surplus = ((convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply) + assetBalance(this, neutrinoAssetId))
120+let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
123121
124122 func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id))
125123
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 getStringByAddressAndKey (address,key) = match getString(address, key) {
2121 case a: String =>
2222 a
2323 case _ =>
2424 ""
2525 }
2626
2727
2828 func getNumberByAddressAndKey (address,key) = match getInteger(address, key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 let WAVELET = 100000000
3737
3838 let ORDERSPLITSYMBOL = "_"
3939
4040 let PAULI = 1000000
4141
4242 let PERCENTACCURACY = 1000
4343
4444 let MAXDISCOUNT = 50
4545
4646 let CANCELED = "canceled"
4747
4848 let NEW = "new"
4949
5050 let FILLED = "filled"
5151
5252 let NeutrinoContractKey = "neutrino_contract"
5353
5454 let OrderbookKey = "orderbook"
5555
5656 let PriceKey = "price"
5757
5858 let BondAssetIdKey = "bond_asset_id"
5959
6060 let NeutrinoAssetIdKey = "neutrino_asset_id"
6161
6262 let ControlContractKey = "control_contract"
6363
64-let SwapLockedBalanceKey = "swap_locked_balance"
64+let BalanceLocedkKey = "balance_lock_"
6565
66-let SwapNeutrinoLockedBalanceKey = "swap_neutrino_locked_balance"
66+let WavesLockedBalanceKey = (BalanceLocedkKey + "waves")
6767
68-let SwapWavesLockedBalanceKey = "swap_waves_locked_balance"
68+let NeutrinoLockedBalanceKey = (BalanceLocedkKey + "neutrino")
6969
7070 func getOrderTotalKey (orderId) = ("order_total_" + orderId)
7171
7272
7373 func getOrderOwnerKey (orderId) = ("order_owner_" + orderId)
7474
7575
7676 func getOrderHeightKey (orderId) = ("order_height_" + orderId)
7777
7878
7979 func getOrderStatusKey (orderId) = ("order_status_" + orderId)
8080
8181
8282 func getOrderFilledTotalKey (orderId) = ("order_filled_total_" + orderId)
8383
8484
8585 func convertNeutrinoToWaves (amount,price) = ((((amount * 100) / price) * WAVELET) / PAULI)
8686
8787
8888 func convertWavesToNeutrino (amount,price) = ((((amount * price) / 100) * PAULI) / WAVELET)
8989
9090
9191 func convertNeutrinoToBond (amount) = (amount / PAULI)
9292
9393
9494 func convertBondToNeutrino (amount) = (amount * PAULI)
9595
9696
9797 func convertWavesToBond (amount,price) = convertNeutrinoToBond(convertWavesToNeutrino(amount, price))
9898
9999
100100 let orderbook = getStringByKey(OrderbookKey)
101101
102102 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
103103
104104 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
105105
106106 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
107107
108-let swapLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapLockedBalanceKey)
108+let neutrinoLockedBalance = getNumberByKey(NeutrinoLockedBalanceKey)
109109
110-let swapNeutrinoLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapNeutrinoLockedBalanceKey)
111-
112-let swapWavesLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapWavesLockedBalanceKey)
110+let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
113111
114112 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
115113
116114 let bondAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, BondAssetIdKey))
117115
118-let reserve = (wavesBalance(neutrinoContract) - swapWavesLockedBalance)
116+let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
119117
120-let neutrinoSupply = ((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + swapNeutrinoLockedBalance)
118+let neutrinoSupply = (((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + neutrinoLockedBalance) - assetBalance(this, neutrinoAssetId))
121119
122-let surplus = ((convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply) + assetBalance(this, neutrinoAssetId))
120+let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
123121
124122 func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id))
125123
126124
127125 func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id))
128126
129127
130128 func getOrderStatus (id) = getStringByKey(getOrderStatusKey(id))
131129
132130
133131 func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id))
134132
135133
136134 func getOrderElementById (id) = (id + ORDERSPLITSYMBOL)
137135
138136
139137 func addOrder (orderId,position) = {
140138 let orders = split(orderbook, ORDERSPLITSYMBOL)
141139 let newOrder = getOrderElementById(orderId)
142140 if ((position == 0))
143141 then (newOrder + orderbook)
144142 else if ((position >= (size(orders) - 1)))
145143 then (orderbook + newOrder)
146144 else {
147145 let parts = split(orderbook, getOrderElementById(orders[position]))
148146 (((parts[0] + newOrder) + getOrderElementById(orders[position])) + parts[1])
149147 }
150148 }
151149
152150
153151 func dropOrder (orderId) = {
154152 let parts = split(orderbook, getOrderElementById(orderId))
155153 (parts[0] + parts[1])
156154 }
157155
158156
159157 func getOrdersInOrderbook (orderbook) = split(orderbook, ORDERSPLITSYMBOL)
160158
161159
162160 @Callable(i)
163161 func addLiquidationOrder () = {
164162 let pmt = extract(i.payment)
165163 let newOrderId = toBase58String(keccak256(((toBytes(pmt.amount) + i.caller.bytes) + toBytes(height))))
166164 if ((pmt.assetId != bondAssetId))
167165 then throw("can use appropriate neutrino bonds tokens only")
168166 else if ((getOrderOwner(newOrderId) != ""))
169167 then throw("an order is already exists")
170168 else WriteSet([DataEntry(OrderbookKey, addOrder(newOrderId, size(getOrdersInOrderbook(orderbook)))), DataEntry(getOrderTotalKey(newOrderId), pmt.amount), DataEntry(getOrderOwnerKey(newOrderId), toString(i.caller)), DataEntry(getOrderHeightKey(newOrderId), height), DataEntry(getOrderStatusKey(newOrderId), NEW)])
171169 }
172170
173171
174172
175173 @Callable(i)
176174 func cancelOrder (orderId) = {
177175 let owner = getOrderOwner(orderId)
178176 let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
179177 if ((owner != toString(i.caller)))
180178 then throw("permission denied")
181179 else if ((getOrderStatus(orderId) != NEW))
182180 then throw("invalid order status")
183181 else ScriptResult(WriteSet([DataEntry(OrderbookKey, dropOrder(orderId)), DataEntry(getOrderStatusKey(orderId), CANCELED)]), TransferSet([ScriptTransfer(i.caller, amount, bondAssetId)]))
184182 }
185183
186184
187185
188186 @Callable(i)
189187 func liquidateBond () = {
190188 let orderId = getOrdersInOrderbook(orderbook)[0]
191189 let orderTotal = getOrderTotal(orderId)
192190 let orderOwner = getOrderOwner(orderId)
193191 let filledTotal = getOrderFilledTotal(orderId)
194192 let surplusBond = convertNeutrinoToBond(surplus)
195193 let neutrinoBalance = assetBalance(this, neutrinoAssetId)
196194 let surplusPositive = if ((0 >= surplus))
197195 then 0
198196 else surplus
199197 let bondAmount = if ((surplusPositive >= neutrinoBalance))
200198 then neutrinoBalance
201199 else surplusPositive
202200 let returnAmount = if ((surplusPositive >= neutrinoBalance))
203201 then 0
204202 else (neutrinoBalance - surplusPositive)
205203 if (if ((returnAmount == 0))
206204 then (neutrinoBalance == 0)
207205 else false)
208206 then throw("without surplus")
209207 else if ((neutrinoBalance == 0))
210208 then TransferSet([ScriptTransfer(neutrinoContract, returnAmount, neutrinoAssetId)])
211209 else if ((orderbook == ""))
212210 then throw("empty orderbook")
213211 else if ((0 >= surplusBond))
214212 then throw("there is no proficit on the smart contract now")
215213 else if ((orderbook == ""))
216214 then throw("empty orderbook")
217215 else {
218216 let amount = (orderTotal - filledTotal)
219217 let status = if ((surplusBond >= amount))
220218 then FILLED
221219 else NEW
222220 let newFilledTotal = if ((surplusBond >= amount))
223221 then amount
224222 else surplusBond
225223 ScriptResult(WriteSet([DataEntry(OrderbookKey, if ((surplusBond >= amount))
226224 then dropOrder(orderId)
227225 else orderbook), DataEntry(getOrderFilledTotalKey(orderId), (filledTotal + newFilledTotal)), DataEntry(getOrderStatusKey(orderId), status)]), TransferSet([ScriptTransfer(addressFromStringValue(orderOwner), convertBondToNeutrino(newFilledTotal), neutrinoAssetId)]))
228226 }
229227 }
230228
231229

github/deemru/w8io/873ac7e 
90.20 ms