tx · FrbZp5wxWqiQqKQadzEiUGxCPds75W2hAKnLVLiUGotw

3PG2vMhK5CPqsCDodvLGzQ84QkoHXCJ3oNP:  -0.01400000 Waves

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

{ "type": 13, "id": "FrbZp5wxWqiQqKQadzEiUGxCPds75W2hAKnLVLiUGotw", "fee": 1400000, "feeAssetId": null, "timestamp": 1575041661399, "version": 1, "sender": "3PG2vMhK5CPqsCDodvLGzQ84QkoHXCJ3oNP", "senderPublicKey": "5RM3w4ysmDbtgfswnVNPx7DQkNwVAG3RoxNFHgt6ToNU", "proofs": [ "3hi2hyoxkMmkdB8g8B5Vfo8qgQvRa3Q7wULsJVyYJN2xat7Q4NJ2kZrQA4uRkLc6TQCop5jQq2PzRhbC5jm6DogB" ], "script": "base64:AAIDAAAAAAAAAA8IARIECgIBARIDCgEIEgAAAAA2AQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAAAAAAHV0FWRUxFVAAAAAAABfXhAAAAAAAQT1JERVJTUExJVFNZTUJPTAIAAAABXwAAAAAFUEFVTEkAAAAAAAAPQkAAAAAAD1BFUkNFTlRBQ0NVUkFDWQAAAAAAAAAD6AAAAAALTUFYRElTQ09VTlQAAAAAAAAAADIAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAADTkVXAgAAAANuZXcAAAAABkZJTExFRAIAAAAGZmlsbGVkAAAAABNOZXV0cmlub0NvbnRyYWN0S2V5AgAAABFuZXV0cmlub19jb250cmFjdAAAAAAMT3JkZXJib29rS2V5AgAAAAlvcmRlcmJvb2sAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAAOQm9uZEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAAEk5ldXRyaW5vQXNzZXRJZEtleQIAAAARbmV1dHJpbm9fYXNzZXRfaWQAAAAAEkNvbnRyb2xDb250cmFjdEtleQIAAAAQY29udHJvbF9jb250cmFjdAAAAAAQQmFsYW5jZUxvY2Vka0tleQIAAAANYmFsYW5jZV9sb2NrXwAAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEEJhbGFuY2VMb2NlZGtLZXkCAAAABXdhdmVzAAAAABhOZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkJAAEsAAAAAgUAAAAQQmFsYW5jZUxvY2Vka0tleQIAAAAIbmV1dHJpbm8BAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAAMb3JkZXJfcHJpY2VfBQAAAAdvcmRlcklkAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADG9yZGVyX3RvdGFsXwUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAxvcmRlcl9vd25lcl8FAAAAB29yZGVySWQBAAAAEWdldE9yZGVySGVpZ2h0S2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADW9yZGVyX2hlaWdodF8FAAAAB29yZGVySWQBAAAAEWdldE9yZGVyU3RhdHVzS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADW9yZGVyX3N0YXR1c18FAAAAB29yZGVySWQBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAATb3JkZXJfZmlsbGVkX3RvdGFsXwUAAAAHb3JkZXJJZAEAAAASZ2V0T3JkZXJIaXN0b3J5S2V5AAAAAQAAAAZoZWlnaHQJAAEsAAAAAgIAAAAOb3JkZXJfaGlzdG9yeV8JAAGkAAAAAQUAAAAGaGVpZ2h0AQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABpAAAAAgkAAGgAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAGYW1vdW50AAAAAAAAAABkBQAAAAVwcmljZQUAAAAHV0FWRUxFVAUAAAAFUEFVTEkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGkAAAACCQAAaAAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAZhbW91bnQFAAAABXByaWNlAAAAAAAAAABkBQAAAAVQQVVMSQUAAAAHV0FWRUxFVAEAAAAVY29udmVydE5ldXRyaW5vVG9Cb25kAAAAAQAAAAZhbW91bnQJAABpAAAAAgUAAAAGYW1vdW50BQAAAAVQQVVMSQEAAAAVY29udmVydEJvbmRUb05ldXRyaW5vAAAAAQAAAAZhbW91bnQJAABoAAAAAgUAAAAGYW1vdW50BQAAAAVQQVVMSQEAAAASY29udmVydFdhdmVzVG9Cb25kAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UAAAAACW9yZGVyYm9vawkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAMT3JkZXJib29rS2V5AAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAE05ldXRyaW5vQ29udHJhY3RLZXkAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASQ29udHJvbENvbnRyYWN0S2V5AAAAAAxjdXJyZW50UHJpY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QFAAAACFByaWNlS2V5AAAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAAtib25kQXNzZXRJZAkAAlkAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAOQm9uZEFzc2V0SWRLZXkAAAAAB3Jlc2VydmUJAABlAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQAAAAAObmV1dHJpbm9TdXBwbHkJAABkAAAAAgkAAGUAAAACCAkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAAAAAhxdWFudGl0eQkAA+sAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQAAAAAHZGVmaWNpdAkAAGUAAAACBQAAAA5uZXV0cmlub1N1cHBseQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAdyZXNlcnZlBQAAAAxjdXJyZW50UHJpY2UAAAAAB3N1cnBsdXMJAABlAAAAAgkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAdyZXNlcnZlBQAAAAxjdXJyZW50UHJpY2UFAAAADm5ldXRyaW5vU3VwcGx5AQAAAA1nZXRPcmRlclByaWNlAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAAJpZAEAAAANZ2V0T3JkZXJUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclRvdGFs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AAACBQAAAAZvcmRlcnMJAABlAAAAAgUAAAAIcG9zaXRpb24AAAAAAAAAAAEEAAAADm5leHRPcmRlclByaWNlCQEAAAANZ2V0T3JkZXJQcmljZQAAAAEFAAAAC25leHRPcmRlcklkBAAAABBpc05leHRPcmRlckVycm9yAwMJAQAAAAIhPQAAAAIFAAAAC25leHRPcmRlcklkAgAAAAAJAABmAAAAAgUAAAAFcHJpY2UFAAAADm5leHRPcmRlclByaWNlBwYHBAAAAAtwcmV2T3JkZXJJZAkAAZEAAAACBQAAAAZvcmRlcnMFAAAACHBvc2l0aW9uBAAAAA5wcmV2T3JkZXJQcmljZQkBAAAADWdldE9yZGVyUHJpY2UAAAABBQAAAAtwcmV2T3JkZXJJZAQAAAAQaXNQcmV2T3JkZXJFcnJvcgMJAABnAAAAAgUAAAAOcHJldk9yZGVyUHJpY2UFAAAABXByaWNlBgcDAwUAAAAQaXNOZXh0T3JkZXJFcnJvcgYFAAAAEGlzUHJldk9yZGVyRXJyb3IJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAfaW52YWxpZCBvcmRlciBpc1ByZXZPcmRlckVycm9yOgkAAaUAAAABBQAAABBpc1ByZXZPcmRlckVycm9yAgAAABIgaXNOZXh0T3JkZXJFcnJvcjoJAAGlAAAAAQUAAAAQaXNOZXh0T3JkZXJFcnJvcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMT3JkZXJib29rS2V5CQEAAAAIYWRkT3JkZXIAAAACBQAAAApuZXdPcmRlcklkBQAAAAhwb3NpdGlvbgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAApuZXdPcmRlcklkBQAAAAVwcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGdldE9yZGVyVG90YWxLZXkAAAABBQAAAApuZXdPcmRlcklkCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABBQAAAApuZXdPcmRlcklkCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEWdldE9yZGVySGVpZ2h0S2V5AAAAAQUAAAAKbmV3T3JkZXJJZAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAApuZXdPcmRlcklkBQAAAANORVcFAAAAA25pbAAAAAFpAQAAAAtjYW5jZWxPcmRlcgAAAAEAAAAHb3JkZXJJZAQAAAAFb3duZXIJAQAAAA1nZXRPcmRlck93bmVyAAAAAQUAAAAHb3JkZXJJZAQAAAAGYW1vdW50CQAAZQAAAAIJAQAAAA1nZXRPcmRlclRvdGFsAAAAAQUAAAAHb3JkZXJJZAkBAAAAE2dldE9yZGVyRmlsbGVkVG90YWwAAAABBQAAAAdvcmRlcklkAwkBAAAAAiE9AAAAAgUAAAAFb3duZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkAwkBAAAAAiE9AAAAAgkBAAAADmdldE9yZGVyU3RhdHVzAAAAAQUAAAAHb3JkZXJJZAUAAAADTkVXCQAAAgAAAAECAAAAFGludmFsaWQgb3JkZXIgc3RhdHVzCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMT3JkZXJib29rS2V5CQEAAAAJZHJvcE9yZGVyAAAAAQUAAAAHb3JkZXJJZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEWdldE9yZGVyU3RhdHVzS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAAIQ0FOQ0VMRUQFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAABaQEAAAAIc2VsbEJvbmQAAAAABAAAAAtib25kQmFsYW5jZQkAA+sAAAACBQAAAAR0aGlzBQAAAAtib25kQXNzZXRJZAQAAAAPZGVmaWNpdFBvc2l0aXZlAwkAAGcAAAACAAAAAAAAAAAABQAAAAdkZWZpY2l0AAAAAAAAAAAABQAAAAdkZWZpY2l0BAAAAApib25kQW1vdW50AwkAAGcAAAACBQAAAA9kZWZpY2l0UG9zaXRpdmUFAAAAC2JvbmRCYWxhbmNlBQAAAAtib25kQmFsYW5jZQUAAAAPZGVmaWNpdFBvc2l0aXZlBAAAAAxyZXR1cm5BbW91bnQDCQAAZwAAAAIFAAAAD2RlZmljaXRQb3NpdGl2ZQUAAAALYm9uZEJhbGFuY2UAAAAAAAAAAAAJAABlAAAAAgUAAAALYm9uZEJhbGFuY2UFAAAAD2RlZmljaXRQb3NpdGl2ZQMDCQAAAAAAAAIFAAAADHJldHVybkFtb3VudAAAAAAAAAAAAAkAAAAAAAACBQAAAApib25kQW1vdW50AAAAAAAAAAAABwkAAAIAAAABAgAAAA93aXRob3V0IGRlZmljaXQDCQAAAAAAAAIFAAAACmJvbmRBbW91bnQAAAAAAAAAAAAJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAMcmV0dXJuQW1vdW50BQAAAAtib25kQXNzZXRJZAUAAAADbmlsAwkAAAAAAAACBQAAAAlvcmRlcmJvb2sCAAAAAAkAAAIAAAABAgAAAA9lbXB0eSBvcmRlcmJvb2sEAAAAB29yZGVySWQJAAGRAAAAAgkBAAAAFGdldE9yZGVyc0luT3JkZXJib29rAAAAAQUAAAAJb3JkZXJib29rAAAAAAAAAAAABAAAAAtmaWxsZWRUb3RhbAkBAAAAE2dldE9yZGVyRmlsbGVkVG90YWwAAAABBQAAAAdvcmRlcklkBAAAAApvcmRlclRvdGFsCQEAAAANZ2V0T3JkZXJUb3RhbAAAAAEFAAAAB29yZGVySWQEAAAACm9yZGVyUHJpY2UJAQAAAA1nZXRPcmRlclByaWNlAAAAAQUAAAAHb3JkZXJJZAQAAAAKb3JkZXJPd25lcgkBAAAADWdldE9yZGVyT3duZXIAAAABBQAAAAdvcmRlcklkBAAAAAZhbW91bnQJAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABCQAAaQAAAAIJAABoAAAAAgkAAGUAAAACBQAAAApvcmRlclRvdGFsBQAAAAtmaWxsZWRUb3RhbAAAAAAAAAAAZAUAAAAKb3JkZXJQcmljZQQAAAAMZmlsbGVkQW1vdW50AwkAAGcAAAACBQAAAApib25kQW1vdW50BQAAAAZhbW91bnQFAAAABmFtb3VudAUAAAAKYm9uZEFtb3VudAQAAAAFdG90YWwJAABpAAAAAgkAAGgAAAACCQAAaAAAAAIFAAAADGZpbGxlZEFtb3VudAUAAAAKb3JkZXJQcmljZQUAAAAFUEFVTEkAAAAAAAAAAGQEAAAABnN0YXR1cwMJAABnAAAAAgUAAAAKYm9uZEFtb3VudAUAAAAGYW1vdW50BQAAAAZGSUxMRUQFAAAAA05FVwMJAAAAAAAAAgUAAAAFdG90YWwAAAAAAAAAAAAJAAACAAAAAQIAAAAQdG90YWwgZXF1YWwgemVybwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADE9yZGVyYm9va0tleQMJAABnAAAAAgUAAAAKYm9uZEFtb3VudAUAAAAGYW1vdW50CQEAAAAJZHJvcE9yZGVyAAAAAQUAAAAHb3JkZXJJZAUAAAAJb3JkZXJib29rCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAWZ2V0T3JkZXJGaWxsZWRUb3RhbEtleQAAAAEFAAAAB29yZGVySWQJAABkAAAAAgUAAAALZmlsbGVkVG90YWwFAAAABXRvdGFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAZzdGF0dXMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRPcmRlckhpc3RvcnlLZXkAAAABBQAAAAZoZWlnaHQFAAAACm9yZGVyUHJpY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAACm9yZGVyT3duZXIFAAAADGZpbGxlZEFtb3VudAUAAAALYm9uZEFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAFdG90YWwFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsAAAAAGsRRY8=", "chainId": 87, "height": 1817175, "spentComplexity": 0 } View: original | compacted Prev: Dw46QqcwwzzkSNs9Rfn6CgtJqcr1VakfNSLNMQ3EunZ1 Next: DiFeVsgDWR5sTsVe8h1mcFam3JJjUUDM8WJXWuBcPKxZ 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 getOrderPriceKey (orderId) = ("order_price_" + orderId)
7171
111111
112112 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
113113
114-let swapLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapLockedBalanceKey)
114+let neutrinoLockedBalance = getNumberByKey(NeutrinoLockedBalanceKey)
115115
116-let swapNeutrinoLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapNeutrinoLockedBalanceKey)
117-
118-let swapWavesLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapWavesLockedBalanceKey)
116+let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
119117
120118 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
121119
122120 let bondAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, BondAssetIdKey))
123121
124-let reserve = (wavesBalance(neutrinoContract) - swapWavesLockedBalance)
122+let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
125123
126-let neutrinoSupply = ((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + swapNeutrinoLockedBalance)
124+let neutrinoSupply = ((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + neutrinoLockedBalance)
127125
128126 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, currentPrice))
129127
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 getOrderPriceKey (orderId) = ("order_price_" + orderId)
7171
7272
7373 func getOrderTotalKey (orderId) = ("order_total_" + orderId)
7474
7575
7676 func getOrderOwnerKey (orderId) = ("order_owner_" + orderId)
7777
7878
7979 func getOrderHeightKey (orderId) = ("order_height_" + orderId)
8080
8181
8282 func getOrderStatusKey (orderId) = ("order_status_" + orderId)
8383
8484
8585 func getOrderFilledTotalKey (orderId) = ("order_filled_total_" + orderId)
8686
8787
8888 func getOrderHistoryKey (height) = ("order_history_" + toString(height))
8989
9090
9191 func convertNeutrinoToWaves (amount,price) = ((((amount * 100) / price) * WAVELET) / PAULI)
9292
9393
9494 func convertWavesToNeutrino (amount,price) = ((((amount * price) / 100) * PAULI) / WAVELET)
9595
9696
9797 func convertNeutrinoToBond (amount) = (amount / PAULI)
9898
9999
100100 func convertBondToNeutrino (amount) = (amount * PAULI)
101101
102102
103103 func convertWavesToBond (amount,price) = convertNeutrinoToBond(convertWavesToNeutrino(amount, price))
104104
105105
106106 let orderbook = getStringByKey(OrderbookKey)
107107
108108 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
109109
110110 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
111111
112112 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
113113
114-let swapLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapLockedBalanceKey)
114+let neutrinoLockedBalance = getNumberByKey(NeutrinoLockedBalanceKey)
115115
116-let swapNeutrinoLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapNeutrinoLockedBalanceKey)
117-
118-let swapWavesLockedBalance = getNumberByAddressAndKey(neutrinoContract, SwapWavesLockedBalanceKey)
116+let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
119117
120118 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
121119
122120 let bondAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, BondAssetIdKey))
123121
124-let reserve = (wavesBalance(neutrinoContract) - swapWavesLockedBalance)
122+let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
125123
126-let neutrinoSupply = ((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + swapNeutrinoLockedBalance)
124+let neutrinoSupply = ((extract(assetInfo(neutrinoAssetId)).quantity - assetBalance(neutrinoContract, neutrinoAssetId)) + neutrinoLockedBalance)
127125
128126 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, currentPrice))
129127
130128 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
131129
132130 func getOrderPrice (id) = getNumberByKey(getOrderPriceKey(id))
133131
134132
135133 func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id))
136134
137135
138136 func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id))
139137
140138
141139 func getOrderStatus (id) = getStringByKey(getOrderStatusKey(id))
142140
143141
144142 func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id))
145143
146144
147145 func getOrderElementById (id) = (id + ORDERSPLITSYMBOL)
148146
149147
150148 func addOrder (orderId,position) = {
151149 let orders = split(orderbook, ORDERSPLITSYMBOL)
152150 let newOrder = getOrderElementById(orderId)
153151 if ((position == 0))
154152 then (newOrder + orderbook)
155153 else if ((position >= (size(orders) - 1)))
156154 then (orderbook + newOrder)
157155 else {
158156 let parts = split(orderbook, getOrderElementById(orders[position]))
159157 (((parts[0] + newOrder) + getOrderElementById(orders[position])) + parts[1])
160158 }
161159 }
162160
163161
164162 func dropOrder (orderId) = {
165163 let parts = split(orderbook, getOrderElementById(orderId))
166164 (parts[0] + parts[1])
167165 }
168166
169167
170168 func getOrdersInOrderbook (orderbook) = split(orderbook, ORDERSPLITSYMBOL)
171169
172170
173171 @Callable(i)
174172 func addBuyBondOrder (price,position) = {
175173 let pmt = extract(i.payment)
176174 let newOrderId = toBase58String(keccak256((((toBytes(price) + toBytes(pmt.amount)) + i.caller.bytes) + toBytes(height))))
177175 if ((MAXDISCOUNT > price))
178176 then throw("max discount is 50%")
179177 else if ((pmt.assetId != neutrinoAssetId))
180178 then throw("can use neutrino only")
181179 else if ((0 >= price))
182180 then throw("price less zero")
183181 else if ((getOrderOwner(newOrderId) != ""))
184182 then throw("order exists")
185183 else {
186184 let orders = getOrdersInOrderbook(orderbook)
187185 let nextOrderId = if ((position == 0))
188186 then ""
189187 else orders[(position - 1)]
190188 let nextOrderPrice = getOrderPrice(nextOrderId)
191189 let isNextOrderError = if (if ((nextOrderId != ""))
192190 then (price > nextOrderPrice)
193191 else false)
194192 then true
195193 else false
196194 let prevOrderId = orders[position]
197195 let prevOrderPrice = getOrderPrice(prevOrderId)
198196 let isPrevOrderError = if ((prevOrderPrice >= price))
199197 then true
200198 else false
201199 if (if (isNextOrderError)
202200 then true
203201 else isPrevOrderError)
204202 then throw(((("invalid order isPrevOrderError:" + toString(isPrevOrderError)) + " isNextOrderError:") + toString(isNextOrderError)))
205203 else WriteSet([DataEntry(OrderbookKey, addOrder(newOrderId, position)), DataEntry(getOrderPriceKey(newOrderId), price), DataEntry(getOrderTotalKey(newOrderId), pmt.amount), DataEntry(getOrderOwnerKey(newOrderId), toString(i.caller)), DataEntry(getOrderHeightKey(newOrderId), height), DataEntry(getOrderStatusKey(newOrderId), NEW)])
206204 }
207205 }
208206
209207
210208
211209 @Callable(i)
212210 func cancelOrder (orderId) = {
213211 let owner = getOrderOwner(orderId)
214212 let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
215213 if ((owner != toString(i.caller)))
216214 then throw("permission denied")
217215 else if ((getOrderStatus(orderId) != NEW))
218216 then throw("invalid order status")
219217 else ScriptResult(WriteSet([DataEntry(OrderbookKey, dropOrder(orderId)), DataEntry(getOrderStatusKey(orderId), CANCELED)]), TransferSet([ScriptTransfer(i.caller, amount, neutrinoAssetId)]))
220218 }
221219
222220
223221
224222 @Callable(i)
225223 func sellBond () = {
226224 let bondBalance = assetBalance(this, bondAssetId)
227225 let deficitPositive = if ((0 >= deficit))
228226 then 0
229227 else deficit
230228 let bondAmount = if ((deficitPositive >= bondBalance))
231229 then bondBalance
232230 else deficitPositive
233231 let returnAmount = if ((deficitPositive >= bondBalance))
234232 then 0
235233 else (bondBalance - deficitPositive)
236234 if (if ((returnAmount == 0))
237235 then (bondAmount == 0)
238236 else false)
239237 then throw("without deficit")
240238 else if ((bondAmount == 0))
241239 then TransferSet([ScriptTransfer(neutrinoContract, returnAmount, bondAssetId)])
242240 else if ((orderbook == ""))
243241 then throw("empty orderbook")
244242 else {
245243 let orderId = getOrdersInOrderbook(orderbook)[0]
246244 let filledTotal = getOrderFilledTotal(orderId)
247245 let orderTotal = getOrderTotal(orderId)
248246 let orderPrice = getOrderPrice(orderId)
249247 let orderOwner = getOrderOwner(orderId)
250248 let amount = convertNeutrinoToBond((((orderTotal - filledTotal) * 100) / orderPrice))
251249 let filledAmount = if ((bondAmount >= amount))
252250 then amount
253251 else bondAmount
254252 let total = (((filledAmount * orderPrice) * PAULI) / 100)
255253 let status = if ((bondAmount >= amount))
256254 then FILLED
257255 else NEW
258256 if ((total == 0))
259257 then throw("total equal zero")
260258 else ScriptResult(WriteSet([DataEntry(OrderbookKey, if ((bondAmount >= amount))
261259 then dropOrder(orderId)
262260 else orderbook), DataEntry(getOrderFilledTotalKey(orderId), (filledTotal + total)), DataEntry(getOrderStatusKey(orderId), status), DataEntry(getOrderHistoryKey(height), orderPrice)]), TransferSet([ScriptTransfer(addressFromStringValue(orderOwner), filledAmount, bondAssetId), ScriptTransfer(neutrinoContract, total, neutrinoAssetId)]))
263261 }
264262 }
265263
266264

github/deemru/w8io/3ef1775 
66.67 ms