Compare commits

..
Author SHA1 Message Date
Luis Fernando Molina 45bfccfb18 Update AppSchema.json 2020-11-16 10:22:19 +01:00
Luis Fernando Molina 70ec4efb38 Bug hot fix 2020-11-15 20:41:12 +01:00
Luis Fernando Molina 6cb3307be3 Update README.md 2020-11-14 16:00:34 +01:00
Luis Fernando Molina 385bf38a02 Merge pull request #292 from Superalgos/develop
SP4 bug fix
2020-11-13 20:54:49 +01:00
Luis Fernando Molina 0f7b40cca7 SP4 again 2020-11-13 20:52:29 +01:00
Luis Fernando Molina b66e4c0dd6 Bug fix 2020-11-13 20:32:30 +01:00
Luis Fernando Molina 6969542ed6 Beta 7, again, with ETH Node connectivity 2020-11-13 19:13:27 +01:00
Luis Fernando Molina 04f20402fa Merge pull request #291 from 9808us/develop
Zeus Data Mine Fix
2020-11-12 20:58:07 +01:00
9808us 43070ea333 Zeus Data Mine Fix 2020-11-12 18:07:23 +01:00
Luis Fernando Molina 126dc6331b Merge pull request #290 from Superalgos/develop
Beta 6, Service Pack 4
2020-11-11 18:46:45 +01:00
Luis Fernando Molina b72ddfb20b Beta 6, SP4 2020-11-11 18:38:47 +01:00
Luis Fernando Molina 77bbcc9e99 Update DrawPrint.js 2020-11-10 19:18:25 +01:00
Luis Fernando Molina b820e165c4 Panel Improvements 2020-11-10 18:46:32 +01:00
Luis Fernando Molina 6fbc0b709c Update README.md 2020-11-10 14:07:33 +01:00
Luis Fernando Molina c8eee46ece Update README.md 2020-11-10 14:05:21 +01:00
Julian Molina 6fe81b9e17 Update README.md 2020-11-09 16:32:30 +01:00
Luis Fernando Molina 20fec1eccd Beta 6 SP4 RC 1 2020-11-09 10:01:38 +01:00
Luis Fernando Molina 66012c9d48 Update README.md 2020-11-07 17:18:13 +01:00
Luis Fernando Molina 69ad61ff8e Perf Improvement 2020-11-07 13:25:35 +01:00
Luis Fernando Molina 9627ef5941 Bug Fixes 2020-11-07 11:25:09 +01:00
Luis Fernando Molina ce1d474bfa Mines Updated 2020-11-06 16:48:56 +01:00
Luis Fernando Molina 75b9b38259 Plugins Upgraded to Beta 7 2020-11-06 14:35:58 +01:00
Luis Fernando Molina 1532baea55 Update README.md 2020-11-06 09:50:29 +01:00
Luis Fernando Molina 59b4ad9671 Update README.md 2020-11-06 09:44:11 +01:00
Luis Fernando Molina f98f4ae3d4 Update README.md 2020-11-06 09:36:32 +01:00
Luis Fernando Molina a85b945cf3 Update README.md 2020-11-06 09:35:16 +01:00
Luis Fernando Molina 52f385d64e Texts splitted 2020-11-05 20:12:19 +01:00
Luis Fernando Molina 3b33406a55 Update README.md 2020-11-05 19:35:05 +01:00
Luis Fernando Molina 5de7cdc4e8 Update README.md 2020-11-05 19:32:31 +01:00
Luis Fernando Molina 96572e6e09 Update README.md 2020-11-05 16:25:51 +01:00
Luis Fernando Molina 591e863994 Update README.md 2020-11-05 16:23:37 +01:00
Luis Fernando Molina 7dd461ca8d Parameters and Bug Fix 2020-11-05 15:57:29 +01:00
Luis Fernando Molina 5a82a3bd35 Update Plotter.js 2020-11-05 13:08:22 +01:00
Luis Fernando Molina 1abb1e4b00 Update Masters.json 2020-11-05 13:01:54 +01:00
Luis Fernando Molina 0192863203 Merge pull request #289 from 9808us/develop
Zeus update
2020-11-05 12:49:11 +01:00
9808us ded65cc12c Zeus update 2020-11-05 12:46:40 +01:00
Luis Fernando Molina b3da2cf6bc Update AppSchema.json 2020-11-05 12:41:59 +01:00
Luis Fernando Molina eb427eb146 Superalgos Beta 7, first commit. 2020-11-05 10:38:10 +01:00
Luis Fernando Molina c877072b7c Refactoring and Bug Fixes 2020-10-31 21:08:57 +01:00
Luis Fernando Molina c94f7fc747 Fix Workspaces 2020-10-29 17:21:18 +01:00
Luis Fernando Molina 221cd70d53 Candle Analisys 2020-10-29 12:05:08 +01:00
Luis Fernando Molina 1262b339c6 Latest fixes 2020-10-28 11:28:34 +01:00
Luis Fernando Molina 850018265e Bug at mouse position 2020-10-27 20:10:39 +01:00
Luis Fernando Molina 8022578c46 More Warnings 2020-10-27 17:59:04 +01:00
Luis Fernando Molina d3e097e316 Fixes 2020-10-27 17:20:20 +01:00
Luis Fernando Molina 5c18a1a976 Timeline Charts Order Inverted 2020-10-27 11:16:57 +01:00
Luis Fernando Molina 9c29d4f45d Update OrdersSimulations.js 2020-10-27 09:44:41 +01:00
Luis Fernando Molina 5cda19de6a Fix 2020-10-27 09:18:25 +01:00
Luis Fernando Molina 8deaea9330 Create Ethereum-Integration-Demo.json 2020-10-27 08:14:29 +01:00
Luis Fernando Molina 589c8ddee5 Update OrdersSimulations.js 2020-10-26 17:53:49 +01:00
Luis Fernando Molina 5012cf35e8 Decimals 2020-10-26 17:41:59 +01:00
Luis Fernando Molina ae0ec9499b Fixes 2020-10-26 16:03:54 +01:00
Luis Fernando Molina 3d7919fd54 Scale Fixed 2020-10-26 15:48:10 +01:00
Luis Fernando Molina b3ab20ef74 Decimals 2020-10-26 15:19:25 +01:00
Luis Fernando Molina 209eb6d2cb Warnings 2020-10-26 13:22:36 +01:00
Luis Fernando Molina 6a0bc7b6c2 Warnings Improved 2020-10-26 12:40:49 +01:00
Luis Fernando Molina 31dd974a6d Update UiObject.js 2020-10-26 11:18:51 +01:00
Luis Fernando Molina 87a65cc7ea Warnings Improved 2020-10-26 10:06:53 +01:00
Luis Fernando Molina 12bb518cc9 More fixes 2020-10-25 18:53:20 +01:00
Luis Fernando Molina f5af6f3bdf Balance not below zero validation 2020-10-25 17:29:55 +01:00
Luis Fernando Molina 903933220c Merge pull request #285 from 9808us/develop
Develop
2020-10-25 15:42:12 +01:00
Luis Fernando Molina d3da5c220b Complete Review of Trading Orders 2020-10-25 13:09:10 +01:00
9808us bec81ef962 Fixed names Upper/Lower case 2020-10-25 09:50:04 +01:00
9808us 7fa5a332ae Fix properties names 2020-10-25 08:33:36 +01:00
Luis Fernando Molina 7cacff86d0 Actual Size, Size to be Filled and Fees To be Paid 2020-10-23 19:41:57 +02:00
9808us 11996d801e Removed useless indicator 2020-10-23 17:40:23 +02:00
9808us d8e5fb3e28 Add files via upload 2020-10-23 17:37:09 +02:00
Luis Fernando Molina 3a500976a2 Latest fixes 2020-10-23 10:36:26 +02:00
Luis Fernando Molina 6bf36f3aee Merge branch 'master' into develop 2020-10-22 14:57:22 +02:00
Luis Fernando Molina 4848c577d9 Initial and Final Values 2020-10-22 14:56:59 +02:00
Luis Fernando Molina c3bdd64f2e Update README.md 2020-10-22 14:56:35 +02:00
Luis Fernando Molina e0f683aec3 STOP TP fixes 2020-10-22 13:09:31 +02:00
Luis Fernando Molina b7811b2914 Fixes 2020-10-21 19:52:54 +02:00
Luis Fernando Molina 715ba11867 Placeholders 2020-10-21 19:07:41 +02:00
Luis Fernando Molina 6bcce5b25f Missing Files 2020-10-21 19:00:09 +02:00
Luis Fernando Molina f68ebb63ca Fix 2020-10-21 18:47:02 +02:00
Luis Fernando Molina 85b1d86493 Multi Project 2020-10-21 18:31:43 +02:00
Luis Fernando Molina 3519e0ea43 Update README.md 2020-10-17 13:06:34 +02:00
Luis Fernando Molina f19c82cf5b Update README.md 2020-10-17 13:05:49 +02:00
Luis Fernando Molina ef1c869476 Update README.md 2020-10-15 11:00:29 +02:00
Luis Fernando Molina 3f71e7fcb6 Delete Untitled-10.js 2020-10-14 15:32:07 +02:00
Luis Fernando Molina 88e81a0461 Update README.md 2020-10-14 14:44:15 +02:00
Luis Fernando Molina 3c72a210f5 Update README.md 2020-10-14 14:36:13 +02:00
Luis Fernando Molina 0881f43643 Update README.md 2020-10-14 14:35:49 +02:00
Luis Fernando Molina b716b47972 Update README.md 2020-10-14 14:28:55 +02:00
Luis Fernando Molina 92b4a1abee Update README.md 2020-10-14 14:25:01 +02:00
Luis Fernando Molina f11a8128a3 Update README.md 2020-10-14 14:24:24 +02:00
Luis Fernando Molina a28c2ef6be Update README.md 2020-10-14 14:23:38 +02:00
Luis Fernando Molina 68fea0183a Update README.md 2020-10-14 14:22:41 +02:00
Luis Fernando Molina fea45905eb Update README.md 2020-10-14 14:20:42 +02:00
Luis Fernando Molina 803adbc900 Update README.md 2020-10-14 13:14:37 +02:00
Luis Fernando Molina 0e0d5c9068 Update README.md 2020-10-14 11:59:17 +02:00
Luis Fernando Molina b11ed02836 Update README.md 2020-10-14 11:53:06 +02:00
Luis Fernando Molina f64581d38f Merge pull request #282 from Superalgos/develop
Beta 6 SP3
2020-10-14 11:45:18 +02:00
Luis Fernando Molina 1ba794084b Lastest Review 2020-10-14 11:38:58 +02:00
Luis Fernando Molina f97a36f4cd Update TutorialSpace.js 2020-10-13 21:07:39 +02:00
Luis Fernando Molina df81951e51 Update TutorialSpace.js 2020-10-13 21:04:04 +02:00
Luis Fernando Molina eef64df5a4 Update TutorialSpace.js 2020-10-13 20:59:08 +02:00
Luis Fernando Molina 8fe6babb47 fix 2020-10-13 19:54:11 +02:00
Luis Fernando Molina 36b241a8a7 Latest Icons 2020-10-13 19:13:55 +02:00
Luis Fernando Molina 17cb2fa87b Update superalgos-platform.jpg 2020-10-13 16:17:17 +02:00
Luis Fernando Molina 9a056d51de Merge pull request #281 from Superalgos/develop
hot fix
2020-10-13 11:57:39 +02:00
Luis Fernando Molina 5d705c6fd7 Bug Fix 2020-10-13 11:55:23 +02:00
Luis Fernando Molina 3d8d8b5b49 Merge branch 'master' into develop 2020-10-13 10:30:53 +02:00
Luis Fernando Molina 5767faab65 Update AppSchema.json 2020-10-13 10:30:37 +02:00
Luis Fernando Molina 199a81fd75 Update AppSchema.json 2020-10-13 10:27:33 +02:00
Luis Fernando Molina c2b8e3c50b Fix 2020-10-13 10:01:42 +02:00
Luis Fernando Molina ef49ad7db1 Update README.md 2020-10-13 09:48:21 +02:00
Luis Fernando Molina 55b27266e9 Merge pull request #280 from Superalgos/develop
Beta 6 SP2
2020-10-12 15:15:30 +02:00
Luis Fernando Molina eeeef403a2 Merge branch 'master' into develop 2020-10-12 15:12:45 +02:00
Luis Fernando Molina dc225093d5 Tutorials Tested 2020-10-12 15:12:26 +02:00
Luis Fernando Molina 0c66f27beb Lastes fixes 2020-10-12 14:23:04 +02:00
Luis Fernando Molina 32cdb0972a Update README.md 2020-10-12 12:41:17 +02:00
Luis Fernando Molina ed2d13502e Update README.md 2020-10-12 11:44:13 +02:00
Luis Fernando Molina ecb2ebd444 Update README.md 2020-10-12 11:42:54 +02:00
Luis Fernando Molina 08e576de99 Update README.md 2020-10-12 11:40:46 +02:00
Luis Fernando Molina 40c5f81ad2 Update README.md 2020-10-12 11:38:17 +02:00
Luis Fernando Molina 0c2c2db0ac Update README.md 2020-10-12 11:35:43 +02:00
Luis Fernando Molina b811750d95 Update README.md 2020-10-12 11:34:40 +02:00
Luis Fernando Molina d3261016b5 Update README.md 2020-10-12 11:33:43 +02:00
Luis Fernando Molina 4f071c4f14 Update README.md 2020-10-12 11:32:04 +02:00
Luis Fernando Molina 7aa7981bc4 Update README.md 2020-10-12 11:27:33 +02:00
Luis Fernando Molina 3695b50cef Update README.md 2020-10-12 11:26:30 +02:00
Luis Fernando Molina e01a8c1f80 Update README.md 2020-10-12 11:25:53 +02:00
Luis Fernando Molina a158f7089e Update README.md 2020-10-12 11:24:33 +02:00
Luis Fernando Molina 72d8c2f1bb Update README.md 2020-10-12 11:21:14 +02:00
Luis Fernando Molina 9978605d29 Update README.md 2020-10-12 11:18:56 +02:00
Luis Fernando Molina 23c3bf2a1f Update README.md 2020-10-12 11:15:42 +02:00
Luis Fernando Molina 74544c5f9b Update README.md 2020-10-12 11:14:23 +02:00
Luis Fernando Molina 5217f3fb6a Update README.md 2020-10-12 11:13:45 +02:00
Luis Fernando Molina 6dfa199ff0 Update README.md 2020-10-12 11:12:45 +02:00
Luis Fernando Molina ceb79fb4f3 Update README.md 2020-10-12 11:12:01 +02:00
Luis Fernando Molina 24f4c7d1b1 Update README.md 2020-10-12 11:10:44 +02:00
Luis Fernando Molina 97c4d79169 Update README.md 2020-10-12 11:04:35 +02:00
Luis Fernando Molina a4c6591b5b Update README.md 2020-10-12 10:49:28 +02:00
Luis Fernando Molina 94e6902375 Update README.md 2020-10-12 10:48:05 +02:00
Luis Fernando Molina 3bb9a37ec9 Update README.md 2020-10-12 10:45:50 +02:00
Luis Fernando Molina 4324220d7f Update README.md 2020-10-12 10:37:10 +02:00
Luis Fernando Molina 984723a682 Update README.md 2020-10-12 10:33:31 +02:00
Luis Fernando Molina dcf20d517f Update README.md 2020-10-12 10:29:24 +02:00
Luis Fernando Molina eb4841e602 Update README.md 2020-10-12 10:24:12 +02:00
Luis Fernando Molina 4eb42e2306 Update README.md 2020-10-12 10:23:51 +02:00
Luis Fernando Molina 117d02b317 Update README.md 2020-10-12 10:22:55 +02:00
Luis Fernando Molina 57a5c13155 Update README.md 2020-10-12 10:11:22 +02:00
Luis Fernando Molina cc5eac1449 Update README.md 2020-10-12 09:59:34 +02:00
Luis Fernando Molina c67f8e4408 Update README.md 2020-10-12 09:10:46 +02:00
Luis Fernando Molina 193fcf5ae8 Update README.md 2020-10-12 09:09:52 +02:00
Luis Fernando Molina b5444d6c77 Masters Indicators Upgrade 2020-10-11 16:11:42 +02:00
Luis Fernando Molina 01175c1232 WHB updated 2020-10-11 12:21:06 +02:00
Luis Fernando Molina 01577ceb60 Layers Manager 2020-10-10 14:03:29 +02:00
Luis Fernando Molina e58ddc49ef More fixes 2020-10-10 13:50:19 +02:00
Luis Fernando Molina f6321a1abc Charting Details Fixed 2020-10-10 12:37:04 +02:00
Luis Fernando Molina d5cd77e655 Update Plotter.js 2020-10-09 13:17:41 +02:00
Luis Fernando Molina c3c29c8f46 fix 2020-10-09 12:35:57 +02:00
Luis Fernando Molina b2d1e241b0 bug fixed 2020-10-09 10:15:41 +02:00
Luis Fernando Molina 8e0babd8a0 Deep Scan 2 2020-10-09 09:54:18 +02:00
Luis Fernando Molina b656806204 Merge pull request #279 from Superalgos/develop
Pre-Release Beta6 SP1
2020-10-08 15:24:42 +02:00
Luis Fernando Molina 4df4ce2016 Pre-Release Beta 6 SP1 2020-10-08 15:21:36 +02:00
Luis Fernando Molina 51f4bd4a4d Plugins 2020-10-07 23:54:14 +02:00
Luis Fernando Molina 48f1833533 Deep Scan Medium Severity 2020-10-07 23:42:26 +02:00
Luis Fernando Molina 851920181a Plugins 2020-10-07 19:45:12 +02:00
Luis Fernando Molina d1254895b2 Settings and Style 2020-10-07 17:54:38 +02:00
Luis Fernando Molina cf009b60e2 Port Already in Use Bug 2020-10-07 15:59:48 +02:00
Luis Fernando Molina 3eb034a93d Design Space Style 2020-10-06 21:18:21 +02:00
Luis Fernando Molina eecdcae883 Merge pull request #278 from Superalgos/develop
Cockpit space fixes
2020-10-05 19:01:43 +02:00
Luis Fernando Molina 1c1b395254 Cockpit space fixes 2020-10-05 19:00:30 +02:00
Luis Fernando Molina f83e65bc61 Merge pull request #277 from Superalgos/develop
Update Default.json
2020-10-05 18:20:56 +02:00
Luis Fernando Molina e31ee7460e Update Default.json 2020-10-05 18:20:19 +02:00
Luis Fernando Molina 42b8d44fd7 Merge pull request #276 from Superalgos/develop
Beta 6 Pre-Release
2020-10-05 18:07:15 +02:00
Luis Fernando Molina b6dfd35873 Update AppSchema.json 2020-10-05 17:48:22 +02:00
Luis Fernando Molina 55413214bf Merge branch 'master' into develop 2020-10-05 17:47:14 +02:00
Luis Fernando Molina 3a3f36722b doc 2020-10-05 17:12:24 +02:00
Luis Fernando Molina 5f89185604 Update TutorialSpace.js 2020-10-05 14:35:12 +02:00
Luis Fernando Molina 2b8fe455b5 Update TutorialSpace.js 2020-10-05 14:21:11 +02:00
Luis Fernando Molina 28b3c1a51f Update index.html 2020-10-05 13:50:37 +02:00
Luis Fernando Molina 035143ed98 changeNodeConfigWithEvalReferenceParent 2020-10-05 13:35:09 +02:00
Luis Fernando Molina 9511c713d4 Update Default.json 2020-10-04 12:22:59 +02:00
Luis Fernando Molina ddcb2d40a2 Credits 2020-10-03 14:45:53 +02:00
Luis Fernando Molina 835b6bb8af Getting Started Tutorial Ready 2020-10-03 09:25:56 +02:00
Luis Fernando Molina 1647e50355 Bug Fixed Live Trading 2020-10-02 12:22:17 +02:00
Luis Fernando Molina 40736120cb Create welcome-backtesting-trading-engine-visualization-02.gif 2020-10-02 08:37:51 +02:00
Luis Fernando Molina 5c2fc75533 Latest Tutorial 2020-10-01 19:10:19 +02:00
Luis Fernando Molina 9c3a72fd7a Fixes 2020-10-01 14:57:01 +02:00
Luis Fernando Molina 38c7e6c9c1 Update index.html 2020-10-01 11:29:17 +02:00
Luis Fernando Molina 3d553db2e3 Tutorial Space fixed 2020-10-01 10:22:36 +02:00
Luis Fernando Molina 9e90c5e3e3 Update Default.json 2020-09-30 17:10:33 +02:00
Luis Fernando Molina 39a116d1ef More Tutorials 2020-09-30 16:58:51 +02:00
Luis Fernando Molina 81e9db3ceb Fix exchange API 2020-09-30 13:07:57 +02:00
Luis Fernando Molina 689296cd90 Data MInes Upgraded 2020-09-30 09:19:22 +02:00
Luis Fernando Molina 489769b6ac Adjustments 2020-09-29 17:57:34 +02:00
Luis Fernando Molina 0ca2daf064 Session Resume 2020-09-29 15:45:14 +02:00
Luis Fernando Molina 3da75d372b Update Default.json 2020-09-29 14:26:13 +02:00
Luis Fernando Molina 98beae2cd9 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2020-09-29 11:41:12 +02:00
Luis Fernando Molina 847d9b8254 Tutorial Set 2020-09-29 11:40:54 +02:00
Julian Molina a0d7112582 Update Default.json 2020-09-29 11:36:06 +02:00
Luis Fernando Molina 86c2bcab2d Update TutorialSpace.js 2020-09-29 10:29:59 +02:00
Luis Fernando Molina 89dd941f78 New gifs 2020-09-29 09:43:30 +02:00
Luis Fernando Molina 555745d51b Update TutorialSpace.js 2020-09-27 13:44:58 +02:00
Luis Fernando Molina 343c77404a Update TutorialSpace.js 2020-09-27 13:43:29 +02:00
Luis Fernando Molina ce42307f0a Update TutorialSpace.js 2020-09-27 13:03:46 +02:00
Luis Fernando Molina ac1e3ea796 Update Canvas.js 2020-09-26 21:12:17 +02:00
Luis Fernando Molina 0890498bda Update Canvas.js 2020-09-26 21:01:18 +02:00
Luis Fernando Molina 0016fa3280 Update Canvas.js 2020-09-26 20:36:48 +02:00
Luis Fernando Molina 7117a18e5d Download Resize 2020-09-26 20:32:17 +02:00
Luis Fernando Molina 8da0b556a2 fix 2020-09-26 19:43:41 +02:00
Luis Fernando Molina 6be65b7813 Gifs 2020-09-26 19:18:25 +02:00
Luis Fernando Molina ec4450f0fe Session and Task Syncronization with the backend 2020-09-25 20:24:32 +02:00
Luis Fernando Molina 1c2a335f6f Update TutorialSpace.js 2020-09-25 11:44:29 +02:00
Luis Fernando Molina c5645a6b03 Key Pressed 2020-09-25 11:11:55 +02:00
Luis Fernando Molina 862156cd65 Controling key pressed 2020-09-25 10:07:45 +02:00
Luis Fernando Molina 5cc35ab8bb Update full-board.png 2020-09-25 09:18:49 +02:00
Luis Fernando Molina 8b57182226 Update TutorialSpace.js 2020-09-25 09:17:32 +02:00
Luis Fernando Molina 59c567c9cb Update webServer.js 2020-09-24 19:13:45 +02:00
Luis Fernando Molina 11d316624e Update main.css 2020-09-24 19:07:20 +02:00
Luis Fernando Molina 9041525347 get ready 2020-09-24 19:05:44 +02:00
Luis Fernando Molina 42b9ca3c20 Update TutorialSpace.js 2020-09-24 17:54:24 +02:00
Luis Fernando Molina 89443233ec Update TutorialSpace.js 2020-09-24 17:52:27 +02:00
Luis Fernando Molina 85428fd62e Concepts 2020-09-24 16:40:04 +02:00
Luis Fernando Molina 8f158999a2 Text Style to panels 2020-09-24 13:12:10 +02:00
Luis Fernando Molina 15ac6f80d4 Update main.css 2020-09-24 12:41:25 +02:00
Luis Fernando Molina bce9b3dba5 Dragging Bug Fixed 2020-09-24 12:40:36 +02:00
Luis Fernando Molina fa9bc508d6 Tutorial Zooming 2020-09-24 12:08:53 +02:00
Luis Fernando Molina 1d0d354bd5 Skip Tutorial Topic 2020-09-24 09:35:23 +02:00
Luis Fernando Molina 54c4134a4a tutorial fix 2020-09-23 19:24:13 +02:00
Luis Fernando Molina 538fe4b0a2 Bug fixes 2020-09-23 15:01:47 +02:00
Luis Fernando Molina a2e36a36c9 fix https://github.com/Superalgos/Superalgos/issues/270 2020-09-23 13:18:17 +02:00
Luis Fernando Molina 10d5236159 Update TutorialSpace.js 2020-09-23 13:02:27 +02:00
Luis Fernando Molina 68a2bbb86c focus 2020-09-23 12:03:50 +02:00
Luis Fernando Molina b275224cef Tutorial Reference Parent 2020-09-23 11:24:40 +02:00
Luis Fernando Molina c2e9f2dab6 useReferenceParentTo 2020-09-23 10:16:53 +02:00
Luis Fernando Molina 4d34b45d52 Build fixed 2020-09-23 09:36:19 +02:00
Luis Fernando Molina ff799ee345 Bug fixes 2020-09-23 09:27:30 +02:00
Luis Fernando Molina 7b454ee2ee Update TutorialSpace.js 2020-09-22 18:52:03 +02:00
Luis Fernando Molina 67e28af912 Tool Tips 2020-09-22 18:20:13 +02:00
Luis Fernando Molina 41f322f471 Bug Fixed 2020-09-21 21:42:49 +02:00
Luis Fernando Molina baca199cdc Includes without pin 2020-09-21 21:33:10 +02:00
Luis Fernando Molina c20afe16c5 Pinn Removed 2020-09-21 20:50:34 +02:00
Luis Fernando Molina 6cd77897bc No pinning 2020-09-21 20:17:07 +02:00
Luis Fernando Molina 7e6a95dd7c Positioning Fixed 2020-09-21 16:09:31 +02:00
Luis Fernando Molina 3986c9f71a Previous Implemented 2020-09-21 15:58:36 +02:00
Luis Fernando Molina 51d81286cf Tutorials Auto Starts 2020-09-21 13:23:46 +02:00
Luis Fernando Molina f1b49fbe04 Update UiObjectsFromNodes.js 2020-09-21 10:58:16 +02:00
Luis Fernando Molina 8c21c13562 Update Workspace.js 2020-09-21 10:34:56 +02:00
Luis Fernando Molina e494dd8ad9 Includes Implemented 2020-09-21 10:19:50 +02:00
Luis Fernando Molina c77b9af992 Tutorials Fixed 2020-09-18 15:37:14 +02:00
Luis Fernando Molina e446d5f1da Uninstall Markets 2020-09-16 18:29:51 +02:00
Luis Fernando Molina 4e7dc72ba6 Sessions References swapped 2020-09-16 16:45:35 +02:00
Luis Fernando Molina 03f13a8e16 Charts Organized 2020-09-16 12:51:27 +02:00
Luis Fernando Molina c0e0be2ef7 Refactoring 2020-09-16 10:34:00 +02:00
Luis Fernando Molina 04c8ddea58 Bug Fixes 2020-09-15 20:51:09 +02:00
Luis Fernando Molina d82d356bcd Install Market Complete 2020-09-15 20:25:09 +02:00
Luis Fernando Molina 4df70b629a Install Market in Network 2020-09-15 13:31:04 +02:00
Julian Molina 9ea8f64244 Update Workspace.json 2020-09-15 11:30:27 +02:00
Luis Fernando Molina ecbeeafd4e Bug Fixes 2020-09-14 20:46:48 +02:00
Luis Fernando Molina dc16bf3ed0 Forward Fixed 2020-09-14 19:50:19 +02:00
Luis Fernando Molina 19cc206953 Latest Fixes 2020-09-14 19:28:32 +02:00
Luis Fernando Molina d9a7f1492c Update Masters.json 2020-09-14 16:01:29 +02:00
Luis Fernando Molina 3f00d8658b Missing Time Machines 2020-09-14 15:53:34 +02:00
Julian Molina f105bd7c9c Update Workspace.json 2020-09-14 11:28:17 +02:00
Luis Fernando Molina f4da4859d7 build fixed 2020-09-14 11:22:22 +02:00
Luis Fernando Molina 62bc93a157 Update TaskFunctions.js 2020-09-13 21:42:36 +02:00
Luis Fernando Molina dba3e5440b Bug fixed Trading Mines 2020-09-13 21:04:48 +02:00
Luis Fernando Molina 79c2e0eadd Trading Mine implementation 2020-09-13 20:06:12 +02:00
Luis Fernando Molina d62169462f UI Performance Improvement 2020-09-12 15:20:27 +02:00
Luis Fernando Molina b98c244119 Trading Engines as Include 2020-09-12 14:24:53 +02:00
Luis Fernando Molina c381115b60 Data Dependencies with Folders 2020-09-11 15:20:38 +02:00
Luis Fernando Molina 75420a0ebb All Data Mines Included 2020-09-11 11:31:21 +02:00
Luis Fernando Molina 45afa8ccfd minMemo 2020-09-10 22:43:30 +02:00
Luis Fernando Molina f5c06374e1 IMPORTANT 2020-09-10 22:11:07 +02:00
Luis Fernando Molina 1c87fe32e7 New Icons, Memory Bug Fixed 2020-09-10 21:45:55 +02:00
Luis Fernando Molina ed2f3c197e Docs Improved 2020-09-09 19:09:33 +02:00
Luis Fernando Molina d906a681a7 Icons Functionality Improved 2020-09-09 17:44:15 +02:00
Julian Molina e67832dd9a Update Workspace.json 2020-09-08 12:18:30 +02:00
Luis Fernando Molina d543d3b82c Tutorials done 2020-09-07 18:52:27 +02:00
Luis Fernando Molina f4e2b97f3f Tutorials Version 1 2020-09-06 19:35:37 +02:00
Luis Fernando Molina 9049ca7e75 Bug Fixed 2020-09-05 11:49:40 +02:00
Luis Fernando Molina a7f3be7629 Fix 2020-09-04 17:57:35 +02:00
Luis Fernando Molina c319541541 Debugging Improved 2020-09-04 17:48:12 +02:00
Luis Fernando Molina a89c667401 1200 doc 2020-09-03 17:33:25 +02:00
Luis Fernando Molina a9839eb7ac Update AppSchema.json 2020-09-03 16:54:06 +02:00
Luis Fernando Molina 9af91c01c7 Update SidePanelTab.js 2020-09-03 16:48:41 +02:00
Luis Fernando Molina 6f474fd959 Intgrading the docs 2020-09-03 14:30:26 +02:00
Luis Fernando Molina 3f66d48e7a More fixes 2020-09-03 09:55:43 +02:00
Julian Molina b0f4f66506 Update Workspace.json 2020-09-03 09:18:42 +02:00
Luis Fernando Molina d9319e40e5 Live Trading Bug Fixes 2020-09-02 18:47:56 +02:00
Julian Molina 36a1738532 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2020-09-02 09:12:51 +02:00
Julian Molina 59618dcabb Correct chart scales 2020-09-02 09:12:47 +02:00
Luis Fernando Molina cb61cc1ef0 Bug Fixes + Folders 2020-09-01 21:00:40 +02:00
Julian Molina 17fe6ca50f Update Workspace.json 2020-09-01 10:51:19 +02:00
Luis Fernando Molina 7dccee2f63 Bug Fixed 2020-09-01 10:40:19 +02:00
Luis Fernando Molina beb66f2834 Cleaning 2020-08-31 14:38:12 +02:00
Julian Molina 6f736f6b41 Update README.md 2020-08-30 21:00:06 +02:00
Luis Fernando Molina ae62b783fb real time errors, warnings and infos 2020-08-29 17:49:22 +02:00
Luis Fernando Molina 92577e2fd0 Bug Fixed for Live 2020-08-28 22:49:04 +02:00
Luis Fernando Molina 01457071bb node path 2020-08-28 20:30:54 +02:00
Luis Fernando Molina 77cee92451 Look and Feel 2020-08-28 18:04:59 +02:00
Luis Fernando Molina 61fb1bb053 Polishing 2020-08-28 10:52:18 +02:00
Luis Fernando Molina 569a1a129d Bug Fixes 2020-08-25 14:27:38 +02:00
Luis Fernando Molina ac0f7ede40 Face Wash 2020-08-23 16:59:10 +02:00
Luis Fernando Molina c89d634473 Corrupting Workspace Bug Fixed 2020-08-23 11:02:26 +02:00
Luis Fernando Molina 2f386cbdef Network Error Improvements 2020-08-23 09:40:18 +02:00
Luis Fernando Molina 10307d60e5 Update FileStorage.js 2020-08-22 21:58:08 +02:00
Luis Fernando Molina 46d7d10777 Update index.html 2020-08-22 21:43:31 +02:00
Luis Fernando Molina ec81bca4af Update main.css 2020-08-22 21:41:40 +02:00
Luis Fernando Molina 68730498fc Fix Wences3 2020-08-22 21:29:56 +02:00
Luis Fernando Molina 2858ed8426 Fix Wences 2 2020-08-22 20:50:51 +02:00
Luis Fernando Molina 97f499e872 Wences Fix 2020-08-22 20:44:44 +02:00
Luis Fernando Molina 092219ec47 Improvements on Live Trading 2020-08-22 17:16:26 +02:00
Luis Fernando Molina b588db88dc Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2020-08-21 11:38:36 +02:00
Luis Fernando Molina 70cbbe5587 Execution Started Event at Task 2020-08-21 11:38:33 +02:00
Julian Molina 425e2c710e Workspace update 2020-08-21 10:44:29 +02:00
Luis Fernando Molina 7469c58e0e Paper Trading Fixed 2020-08-21 10:14:12 +02:00
Luis Fernando Molina da25a3b8f6 favico 2020-08-19 12:04:12 +02:00
Luis Fernando Molina 789d20807f Update AppSchema.json 2020-08-19 10:50:05 +02:00
Luis Fernando Molina dfb86967b8 More bug fixes 2020-08-18 18:06:22 +02:00
Luis Fernando Molina fdbffef52e Async Await implementation at Trading Process 2020-08-18 14:31:52 +02:00
Julian Molina ea047363af Default workspace 2020-08-16 16:18:19 +02:00
Julian Molina f35ab8d2c0 Default workspace 2020-08-16 16:14:15 +02:00
Luis Fernando Molina 2f0989e268 Default 2020-08-16 16:05:19 +02:00
Julian Molina b633940589 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2020-08-15 21:52:19 +02:00
Julian Molina 4a228b0ca7 Update Beta 6 - Testing WHB & BBTB.json 2020-08-15 21:52:16 +02:00
Luis Fernando Molina c1f64a9650 Precision bug 2020-08-15 19:48:59 +02:00
Luis Fernando Molina 79b3856f75 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2020-08-15 18:33:40 +02:00
Julian Molina 672e0fd278 WIP 2020-08-15 18:32:35 +02:00
Luis Fernando Molina 5f1f9d9c6e validation removed 2020-08-15 18:29:34 +02:00
Julian Molina f44a9884f1 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2020-08-15 18:24:37 +02:00
Julian Molina bdcecfe0ab Delete Beta 6 - Testing WHB & BBTB.json 2020-08-15 18:24:32 +02:00
Julian Molina 6f5449bedb WIP 2020-08-15 18:22:25 +02:00
Luis Fernando Molina 2e2d44ff8b plotting errors 2020-08-15 14:58:05 +02:00
Luis Fernando Molina fa88bb0ece Latest fixes and UI improvements 2020-08-15 14:08:40 +02:00
Julian Molina f7e299084e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2020-08-15 12:50:56 +02:00
Julian Molina 82efad2463 Updating 2020-08-15 12:50:51 +02:00
Luis Fernando Molina df07e2e7d8 Performance Fixes 2020-08-15 11:19:04 +02:00
Luis Fernando Molina aee420e01e Bug fixes 2020-08-15 09:10:07 +02:00
Luis Fernando Molina 593e53fea3 A lot of bugs fixed 2020-08-14 19:28:05 +02:00
Julian Molina 049e0d20a0 Update Beta 6 - Testing WHB & BBTB.json 2020-08-10 19:57:37 +02:00
Julian Molina ca12ab986e Create Beta 6 - Testing WHB & BBTB.json 2020-08-10 17:43:43 +02:00
Luis Fernando Molina 666e37bc6a Bug Fixes, related to Limit Orders 2020-08-10 13:50:25 +02:00
Julian Molina 51a8fd248c Merge branch 'master' of https://github.com/Superalgos/Superalgos 2020-08-09 13:18:37 +02:00
Julian Molina ea8b89f3dc Update README.md 2020-08-09 13:18:28 +02:00
Luis Fernando Molina d4af4a3865 Code Polishing Finished 2020-08-08 15:15:56 +02:00
Luis Fernando Molina b312313586 Final Polishing Iteration done 2020-08-08 12:52:24 +02:00
Luis Fernando Molina b0add9b805 Stages Plotted 2020-08-07 17:55:38 +02:00
Luis Fernando Molina ff0dd09dc7 Current Episode 2020-08-07 10:00:59 +02:00
Luis Fernando Molina 440ea1a88c Latest fixes 2020-08-06 23:19:19 +02:00
Luis Fernando Molina 8199198637 Latest iteration ready 2020-08-06 15:40:17 +02:00
Julian Molina 75d5f59a6f Update README.md 2020-08-05 11:10:50 +02:00
Julian Molina 81779c49a3 Update README.md 2020-08-05 11:10:02 +02:00
Julian Molina 4a0e1ad549 Update CONTRIBUTING.md 2020-08-05 10:43:33 +02:00
Julian Molina 8fb8682b89 Update CONTRIBUTING.md 2020-08-05 10:43:14 +02:00
Luis Fernando Molina e671ed7c4e Last changes 2020-08-04 20:06:59 +02:00
Luis Fernando Molina c5b44822c7 Stage Target Size Working 2020-08-04 18:33:24 +02:00
Luis Fernando Molina 84027b6d68 Create Beta 6 - Testing WHB.json 2020-08-03 20:25:30 +02:00
Luis Fernando Molina 02f9a04a7e Running with more than one trigger on 2020-08-03 14:54:32 +02:00
Luis Fernando Molina 60a88b781f Error handling improved 2020-08-03 10:40:58 +02:00
Luis Fernando Molina c777b3cd1f Bug Fixes 2020-08-03 09:04:35 +02:00
Luis Fernando Molina 84e927e420 Running again 2020-08-02 20:33:41 +02:00
Luis Fernando Molina 0b581fe837 Half Iteration upgrading the Trading Engine (not running) 2020-08-01 19:37:00 +02:00
Luis Fernando Molina a03b025b64 Update TradingExecution.js 2020-07-29 13:57:38 +02:00
Luis Fernando Molina 6c6a973b72 Update Masters-Trading.json 2020-07-29 11:28:37 +02:00
Luis Fernando Molina 53a82c19c4 Episode Panels 2020-07-29 11:16:43 +02:00
Luis Fernando Molina 02cd6b70fd Update Plotter.js 2020-07-29 10:34:52 +02:00
Luis Fernando Molina 9ba95a5b33 Fix Chart is not Defined 2020-07-29 09:26:13 +02:00
Luis Fernando Molina fe024c6338 Fix 2020-07-28 19:40:41 +02:00
Luis Fernando Molina 39660a8d2b Bug fixed with chart 2020-07-28 18:52:53 +02:00
Luis Fernando Molina 4d6c0ad493 Bug Dataset Updated Fixed 2020-07-28 17:28:22 +02:00
Luis Fernando Molina e90ccebe8f Beta6 update: Time Frame Files 2020-07-28 13:28:14 +02:00
Luis Fernando Molina 6ec5580cd4 Implementation Finished 2020-07-23 14:35:23 +02:00
Luis Fernando Molina 18139acad7 Update AppSchema.json 2020-07-22 14:51:25 +02:00
Luis Fernando Molina e84f8a6ed1 Orders Simulated 2020-07-20 11:40:34 +02:00
Luis Fernando Molina 6b7c58316b Move and Cancel Events Implemented 2020-07-19 14:46:17 +02:00
Luis Fernando Molina 2c288319c3 Bug Fixed 2020-07-17 20:21:16 +02:00
Luis Fernando Molina 784f81e462 Update Beta 6.json 2020-07-17 16:45:32 +02:00
Luis Fernando Molina 2c36279c94 Market Orders Simulated 2020-07-17 11:36:32 +02:00
Luis Fernando Molina faad10cb7a Bug fixed 2020-07-11 10:54:42 +02:00
Luis Fernando Molina 74eb22b590 Update UiObjectTitle.js 2020-07-11 10:35:38 +02:00
Luis Fernando Molina 6d140ed2b9 Update AppSchema.json 2020-07-08 15:01:31 +02:00
Luis Fernando Molina 1cece98445 Initialization Bug Fixed 2020-07-08 11:24:07 +02:00
Luis Fernando Molina 2ffaf51d84 New Data Mines 2020-07-07 20:23:03 +02:00
Luis Fernando Molina 30e2d27215 Missing file 2020-07-07 19:36:48 +02:00
Luis Fernando Molina b178081a01 Ports Changed 2020-07-07 19:18:17 +02:00
Luis Fernando Molina 3f8200fad8 Create Beta 6.json 2020-07-06 15:45:25 +02:00
Luis Fernando Molina d40b985f5e Beta 6 without Execution 2020-07-06 15:43:34 +02:00
Luis Fernando Molina 4033d4d07f Alpha Data Mine 2020-06-29 21:11:13 +02:00
Luis Fernando Molina c2cbe9adf8 Update AppSchema.json 2020-06-29 16:20:45 +02:00
Luis Fernando Molina aead4f1d2b Merge pull request #269 from EduRemix/develop
Update Buddha.json
2020-06-26 14:36:15 +02:00
Luis Fernando Molina dd1243ed6f Merge pull request #262 from rico4dev/master
Alpha Data Mine
2020-06-26 14:35:47 +02:00
rico4dev 91f17d0edf Alpha Mine - Bug Fix on Stochastic Indicator
Added check condition to avoid division by Zero on bad data from exchanges
2020-06-26 11:48:50 +02:00
Luis Fernando Molina 10d5bd782c Changes by Julian 2020-06-21 14:46:10 +02:00
Eduardo Remis cf9cedfb17 Update Buddha.json
Improvement implemented in the calculation speed. Inside "One-Candle Patterns" product code.
2020-06-16 14:17:14 +02:00
Luis Fernando Molina a171755e0b Buhdda Data Mine 2020-06-12 22:02:21 +02:00
Julian Molina 3a6a1029dc Update issue templates 2020-06-12 11:47:20 +02:00
Julian Molina 9f078bceae Update issue templates 2020-06-12 11:34:33 +02:00
Luis Fernando Molina 00c0f1bc3a Bug Fixed get Element returning and old element.
Backtesting showing a trade that later disappers.
2020-06-11 21:26:09 +02:00
Luis Fernando Molina 180a0e3a6c Merge pull request #261 from EduRemix/develop
Buddha Data Mine
2020-06-11 17:44:47 +02:00
rico4dev d3abe6ecbb Alpha Data Mine
Creation of new Data Mine, following Indicators available:
Average True Range (ATR) / Rate of Change (ROC) / Stochastic
2020-06-11 16:58:48 +02:00
Eduardo Remis a873a14a88 Buddha Data Mine 2020-06-11 14:42:50 +02:00
Luis Fernando Molina 57cef2fc52 Merge pull request #258 from Superalgos/develop
Update Workspace.json
2020-06-08 20:57:23 +02:00
Luis Fernando Molina 8dc32823fb Update Workspace.json 2020-06-08 20:56:56 +02:00
Julian Molina a496aa20a3 Update issue templates 2020-06-08 14:49:33 +02:00
Luis Fernando Molina 36b1c2af1a Merge pull request #257 from Superalgos/develop
Workspaces Fixed again
2020-06-07 23:33:14 +02:00
Luis Fernando Molina 064ee6f9cd Workspaces Fixed 2020-06-07 23:32:14 +02:00
Luis Fernando Molina 4604c5285a Merge pull request #253 from Superalgos/develop
Workspace with less tasks started
2020-06-04 22:22:45 +02:00
Luis Fernando Molina d7ea0b1ddf Workspace with less tasks started 2020-06-04 22:22:15 +02:00
Luis Fernando Molina f17ff7e561 Merge pull request #251 from Superalgos/develop
Develop
2020-06-02 21:23:42 +02:00
Luis Fernando Molina 25c529f488 Update Sparta-WHB-BTC-USDT.json 2020-06-02 21:23:10 +02:00
Luis Fernando Molina f14660ed48 Revert "Update Workspace.json"
This reverts commit bedd2c95e7.
2020-06-02 21:21:21 +02:00
Luis Fernando Molina c928e8452b Merge pull request #250 from Superalgos/develop
Update Workspace.json
2020-06-02 21:05:19 +02:00
Luis Fernando Molina bedd2c95e7 Update Workspace.json 2020-06-02 21:04:05 +02:00
Luis Fernando Molina d997eaef77 Merge pull request #249 from Superalgos/develop
Beta 5
2020-06-01 19:05:48 +02:00
Luis Fernando Molina 85819e5d0c Update Binance - WHB - BBTB.json 2020-06-01 09:30:03 +02:00
Luis Fernando Molina 79fb8fe6e0 Paper Trading Bug Fixed 2020-05-27 13:08:50 +02:00
Luis Fernando Molina 8ba5c56884 Julian changes 2020-05-24 16:25:15 +02:00
Luis Fernando Molina a9313a25e7 Announcements Formulas fixed 2020-05-19 09:42:32 +02:00
Luis Fernando Molina 2384b150dd Strategy Name at Plotter 2020-05-18 20:44:33 +02:00
Luis Fernando Molina c03a8c4170 Bug Fixed decimals on formulas 2020-05-18 18:35:03 +02:00
Luis Fernando Molina 3cb16b4e62 Fixes https://github.com/Superalgos/Superalgos/issues/215 2020-05-18 17:41:15 +02:00
Luis Fernando Molina 1326a9ae8c Bug fixed, not possible to use Resistance and Supports 2020-05-16 20:24:19 +02:00
Luis Fernando Molina fd09480984 Tax server error handling improved 2020-05-16 17:15:22 +02:00
Luis Fernando Molina 6b39c72151 Update TradingSimulation.js 2020-05-16 14:54:15 +02:00
Luis Fernando Molina 4ffbafffc2 report fixed 2020-05-16 09:21:03 +02:00
Luis Fernando Molina a890650b18 Fix bug in strategy selection 2020-05-15 11:28:00 +02:00
Luis Fernando Molina b9069f65a4 Update Workspace.js 2020-05-14 16:44:24 +02:00
Luis Fernando Molina c98d87d03c Side Space 2020-05-14 16:40:08 +02:00
Luis Fernando Molina 153a40e32a Panorama Feature 2020-05-13 21:46:54 +02:00
Luis Fernando Molina 95b32c27eb Update TradingSimulation.js 2020-05-11 20:48:10 +02:00
Luis Fernando Molina af5f316086 Saving and Loading Workspace from Backend 2020-05-11 20:24:30 +02:00
Luis Fernando Molina 8601c785bf Snapshots on Daily Files 2020-05-11 11:34:40 +02:00
Luis Fernando Molina 07e4c0264d bug fix 2020-05-11 09:58:22 +02:00
Luis Fernando Molina c0e0c2e0b6 Snapshots fixes 2020-05-10 18:22:08 +02:00
Luis Fernando Molina 6368221937 Snapshots 2020-05-10 14:17:33 +02:00
Luis Fernando Molina e91125801d Improvement on conditions editor 2020-05-10 09:00:58 +02:00
Luis Fernando Molina 17b3b67ba9 Bug Fixed Adding Javascript Code Node from condition 2020-05-10 08:44:07 +02:00
Luis Fernando Molina e1ac0cd646 Resistances & Supports 2020-05-08 19:53:56 +02:00
Luis Fernando Molina bc5a0cd4da conditional polygons 2020-05-08 09:47:05 +02:00
Luis Fernando Molina 570aad4cc4 Beta 5 2020-05-05 16:05:46 +02:00
Luis Fernando Molina 9c7428ad36 Merge pull request #216 from Superalgos/develop
Beta 4
2020-05-03 15:45:18 +02:00
Luis Fernando Molina e37b09ede6 Version Beta 4 2020-05-03 15:44:32 +02:00
Luis Fernando Molina 1f3f8e0325 Bug fixed 2020-05-02 10:16:21 +02:00
Luis Fernando Molina d5847c1ede Bug fixed 2020-05-01 16:32:39 +02:00
Luis Fernando Molina f9300a2d87 Update CONTRIBUTING.md 2020-05-01 10:06:44 +02:00
Luis Fernando Molina 879aefcfea conditions editor 2020-04-30 18:11:54 +02:00
Luis Fernando Molina ec6e9fc907 Bug fixes that improve resilience when running live 2020-04-27 10:13:52 +02:00
Luis Fernando Molina 9fb3241fe5 Update README.md 2020-04-26 17:16:26 +02:00
Luis Fernando Molina 7cd9727bab Update DataDependencies.js 2020-04-25 11:50:21 +02:00
Luis Fernando Molina 2b3f8a6e5f final bug fixed 2020-04-25 10:39:49 +02:00
Luis Fernando Molina 1decce05cf Final Bug Fixed 2020-04-25 10:13:54 +02:00
Luis Fernando Molina 123ea66eeb Bugs Fixed 2020-04-25 09:08:30 +02:00
Luis Fernando Molina 37dd81a551 Update StatusReport.js 2020-04-24 17:43:46 +02:00
Luis Fernando Molina 948bf6c75e Update StatusReport.js 2020-04-24 17:40:38 +02:00
Luis Fernando Molina d95ce8e48a Update StatusReport.js 2020-04-24 17:34:50 +02:00
Luis Fernando Molina 5aed29bd4c Bugs fixed 2020-04-24 16:31:46 +02:00
Luis Fernando Molina 0791d4e2f0 bug fixed 2020-04-24 15:50:49 +02:00
Luis Fernando Molina 4604a14326 Update ProcessExecutionEvents.js 2020-04-24 15:25:24 +02:00
Luis Fernando Molina 2fa549015b Update AppSchema.json 2020-04-24 15:06:49 +02:00
Luis Fernando Molina a3efd3eaf0 Home Network fully implemented 2020-04-24 13:40:42 +02:00
Luis Fernando Molina 2ed86e0118 Remote Backends 2020-04-22 14:41:23 +02:00
Luis Fernando Molina 4255c97998 Merge pull request #208 from Superalgos/develop
Beta SP2
2020-04-21 11:21:12 +02:00
Luis Fernando Molina 97247e3e29 Beta SP2 Closure 2020-04-21 11:20:21 +02:00
Luis Fernando Molina dc9285d6a8 Move to Phase Event Implementation 2020-04-20 16:59:10 +02:00
Luis Fernando Molina 387ab828ad Update Layer.js 2020-04-20 09:42:37 +02:00
Luis Fernando Molina a96ef676d7 Update Layer.js 2020-04-20 09:11:06 +02:00
Luis Fernando Molina 3c6221389e Update TradingBotProcessMainLoop.js 2020-04-19 22:08:39 +02:00
Luis Fernando Molina 7df55b86bf Renaming Trading Systems 2020-04-19 21:34:47 +02:00
Luis Fernando Molina 75b79af309 WHB Version 2 2020-04-19 21:02:24 +02:00
Luis Fernando Molina b72d6d5bd1 Bug fixed: downloading data from exchange 2020-04-19 20:31:54 +02:00
Luis Fernando Molina 6ed401c50f Dependencies Filters Implemented 2020-04-18 16:22:14 +02:00
Luis Fernando Molina 986f1cc7a1 webhooks without plotters working 2020-04-18 08:04:20 +02:00
Luis Fernando Molina baa1a2cfb1 Update UiObject.js 2020-04-17 10:49:31 +02:00
Luis Fernando Molina 59d8634c30 Webhooks Improved 2020-04-17 09:33:44 +02:00
Luis Fernando Molina 61810c939b WebHooks saving the Signals file 2020-04-16 22:06:15 +02:00
Luis Fernando Molina 80a209d447 Reset 2020-04-16 18:24:11 +02:00
Luis Fernando Molina bd80848dc3 Web Server Integrated to Backend Servers 2020-04-16 11:06:24 +02:00
Luis Fernando Molina 990d310a76 Update TradingBotProcessMainLoop.js 2020-04-15 15:41:01 +02:00
Luis Fernando Molina 4c5b2e02d5 bug fixes 2020-04-15 12:50:33 +02:00
Luis Fernando Molina 50ae194a2c Update TradingEngines.json 2020-04-15 10:41:59 +02:00
Luis Fernando Molina 2f1c9e8628 Sparta, Candle Channels, Bug Fixes 2020-04-15 09:23:03 +02:00
Luis Fernando Molina 3c54cef4c8 upper case 2020-04-13 18:04:23 +02:00
Luis Fernando Molina 54d6a29ec0 lowerecase test 2020-04-13 18:03:42 +02:00
Luis Fernando Molina 84075754d0 Merge pull request #198 from Superalgos/develop
Superalgos Beta Service Pack 1
2020-04-13 08:53:06 +02:00
Luis Fernando Molina 12b843f034 Update Plotter.js 2020-04-12 15:35:07 +02:00
Luis Fernando Molina 769f514080 Update Session.js 2020-04-12 12:30:14 +02:00
Luis Fernando Molina 9b2bb02a3b fix #195 2020-04-12 11:55:32 +02:00
Luis Fernando Molina cd061e355e Bug fixed saving status report for the first time 2020-04-12 11:07:17 +02:00
Luis Fernando Molina 88cb8b524b Stopping the session from the Telegram Bot 2020-04-11 15:14:40 +02:00
Luis Fernando Molina 6910ecc358 getElement Function and Previous Reports 2020-04-11 13:02:02 +02:00
Luis Fernando Molina f3031534b8 Data Building Procedure Upgraded 2020-04-10 20:06:21 +02:00
Luis Fernando Molina b4757923d4 Update ReferenceAttachDetach.js 2020-04-10 12:18:02 +02:00
Luis Fernando Molina 9ef85f40d9 Bug fixed when same listener wants to register itself twice 2020-04-10 12:02:22 +02:00
Luis Fernando Molina e66b4fbbc8 fix #192 2020-04-10 10:58:47 +02:00
Luis Fernando Molina 916b805163 Saving workspace before browser closing 2020-04-10 10:21:13 +02:00
Luis Fernando Molina 478ad46f94 Bug fixed - detaching 2020-04-09 10:13:51 +02:00
1311 changed files with 102068 additions and 73151 deletions

No files matched your search

+8 -17
View File
@@ -1,7 +1,7 @@
#PORT NUMBERS: If any of these ports are already in use by a different app, please pick a new number between 1 and 50000.
WEB_SERVER_PORT=34247
WEB_SOCKETS_SERVER_PORT=8080
WEB_SERVER_PORT=34248
WEB_SOCKETS_SERVER_PORT=18041
# TASK MANAGER VARIABLES:
@@ -10,17 +10,13 @@ TASK_SERVER_PATH=./TaskServer
# TASK SERVER VARIABLES:
INTER_PROCESS_FILES_PATH=./Inter-Process-Files
STORAGE_PATH=./Data-Storage
PLOTTERS_PATH=./Legacy-Code
DATA_MINES_PATH=./Data-Mines
TRADING_SYSTEMS_PATH=./Trading-Systems
SUPER_SCRIPTS_PATH=./Super-Scripts
USE_KEYVAULT=false
WRITE_LOGS_TO_FILES=true
BOTS_PATH=./Legacy-Code
LOG_PATH=./Log-Files
WEB_SERVER_URL=localhost
# WEB SERVER VARIABLES:
@@ -29,16 +25,11 @@ CONSOLE_LOG=false
CONSOLE_ERROR_LOG=true
LOG_FILE_CONTENT=false
# Server commands
REINITIALIZE_COMMAND=sdnacGYGdw756dnxasxbGGGjsdbd5576576gfdsxgvbnFFF
PROJECTS_PATH=./Integrations/Projects
PATH_TO_CANVAS_APP=./CanvasApp
PATH_TO_FILES_COMPONENT=./Files-Component/src
PATH_TO_WEB_SERVER=./WebServer/
APP_SCHEMA_PATH=./
WORKSPACE_PATH=./
GATEWAY_ENDPOINT=https://demo-api-dev.superalgos.org/graphql
PATH_TO_WEB_SERVER=./BackendServers/
DEFAULT_WORKSPACE_PATH=./Integrations/Projects/Superalgos/Plugins/Workspaces
MY_WORKSPACES_PATH=./My-Workspaces
PATH_TO_FONTS=./BackendServers/WebServer/Fonts
+66
View File
@@ -0,0 +1,66 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
## Before you open an issue
There are two requirements to open an issue:
1. You must first follow the [Troubleshooting Guide](https://docs.superalgos.org/suite-how-to-troubleshoot-an-issue.html)
2. If your issue hasn't been resolved by following the Troubleshooting Guide, then follow the guide on [How to Report an Issue](https://docs.superalgos.org/suite-how-to-report-an-issue.html).
## Context
*Complete and adjust the contents leaving the information that fits your case and deleting the information that doesn't.*
**Operating System:** Windows | MacOs | Linux | Other (include the version on either case)
**Software version:** today's master branch | today's develop branch
**Workspace version:** default Workspace.json (Getting Started Guide) | Simple Workspace.json | Workspace - Binance - WHB - BBTB.json | My custom workspace
**Reproducible:** the issue may | may not be reproduced.
## Explain your issue
### 1. Explain what the problem seems to be.
Type your explanation here.
### 2. Clearly explain what you wish to accomplish.
Type your explanation here.
### 3. Explain, step by step, what you've done to achieve the goal. The Team will follow these steps to reproduce the issue, so be precise.
Type your explanation here.
### 4. Explain what is the result you expect from your actions.
Type your explanation here.
### 5. Explain what happens instead of the expected results.
Type your explanation here.
### 6. Explain what errors you have found on-screen, on the browser console application, or in the ```Log-Files``` folder.
Type your explanation here.
## Attach a video reproducing the issue
Attach video here.
## Attach relevant log files and error screenshots
Attach logs here.
## Attach you custom workspace if any
Attach custom workspace here.
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+2 -1
View File
@@ -1,2 +1,3 @@
Data-Storage
Log-Files
Log-Files
My-Workspaces
+9866 -1164
View File
File diff suppressed because it is too large. Load diff
+3 -2
View File
@@ -8,5 +8,6 @@ WRITE_LOGS_TO_FILES=true
BOTS_PATH=../Legacy-Code
LOG_PATH=../Log-Files
WEB_SOCKETS_SERVER_PORT=8080
WEB_SOCKETS_SERVER_PORT=18041
WEB_SERVER_PORT=34248
WEB_SERVER_URL=localhost
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 945 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

File renamed without changes.
+11
View File
@@ -0,0 +1,11 @@
function getNewPlotterPanel(pDataMineOrHost, pPlotter, pModule, pPanel) {
let functionName = pDataMineOrHost + pPlotter + pModule + pPanel;
functionName = functionName.replace(/-/g, "");
functionName = 'new' + functionName
try {
return window[functionName]();
} catch (err) {
console.log('[ERROR] getNewPlotterPanel -> Error trying to Load a Plotter Panel. err = ' + err.stack)
console.log('[ERROR] getNewPlotterPanel -> functionName = ' + functionName)
}
}
+54
View File
@@ -0,0 +1,54 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Web3=t():e.Web3=t()}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=171)}([function(e,t,r){"use strict";e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t,r){"use strict";function n(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=n=function(e){return typeof e}:e.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(t)}e.exports=n},function(e,t,r){"use strict";(function(e){
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <http://feross.org>
* @license MIT
*/
var n=r(178),i=r(179),o=r(90);function a(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()<t)throw new RangeError("Invalid typed array length");return u.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=u.prototype:(null===e&&(e=new u(t)),e.length=t),e}function u(e,t,r){if(!(u.TYPED_ARRAY_SUPPORT||this instanceof u))return new u(e,t,r);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return f(this,e,t,r)}function f(e,t,r,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError("'offset' is out of bounds");if(t.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);u.TYPED_ARRAY_SUPPORT?(e=t).__proto__=u.prototype:e=d(e,t);return e}(e,t,r,n):"string"==typeof t?function(e,t,r){"string"==typeof r&&""!==r||(r="utf8");if(!u.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|p(t,r),i=(e=s(e,n)).write(t,r);i!==n&&(e=e.slice(0,i));return e}(e,t,r):function(e,t){if(u.isBuffer(t)){var r=0|l(t.length);return 0===(e=s(e,r)).length||t.copy(e,0,0,r),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?s(e,0):d(e,t);if("Buffer"===t.type&&o(t.data))return d(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function h(e,t){if(c(t),e=s(e,t<0?0:0|l(t)),!u.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function d(e,t){var r=t.length<0?0:0|l(t.length);e=s(e,r);for(var n=0;n<r;n+=1)e[n]=255&t[n];return e}function l(e){if(e>=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function p(e,t){if(u.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return D(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(e).length;default:if(n)return D(e).length;t=(""+t).toLowerCase(),n=!0}}function b(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return O(this,t,r);case"utf8":case"utf-8":return x(this,t,r);case"ascii":return M(this,t,r);case"latin1":case"binary":return I(this,t,r);case"base64":return E(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function m(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function y(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=u.from(t,n)),u.isBuffer(t))return 0===t.length?-1:v(e,t,r,n,i);if("number"==typeof t)return t&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):v(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function v(e,t,r,n,i){var o,a=1,s=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,r/=2}function f(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var c=-1;for(o=r;o<s;o++)if(f(e,o)===f(t,-1===c?0:o-c)){if(-1===c&&(c=o),o-c+1===u)return c*a}else-1!==c&&(o-=o-c),c=-1}else for(r+u>s&&(r=s-u),o=r;o>=0;o--){for(var h=!0,d=0;d<u;d++)if(f(e,o+d)!==f(t,d)){h=!1;break}if(h)return o}return-1}function g(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a<n;++a){var s=parseInt(t.substr(2*a,2),16);if(isNaN(s))return a;e[r+a]=s}return a}function w(e,t,r,n){return z(D(t,e.length-r),e,r,n)}function _(e,t,r,n){return z(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function k(e,t,r,n){return _(e,t,r,n)}function A(e,t,r,n){return z(q(t),eLine truncated
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/var n=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(e){n[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var r,s,u=a(e),f=1;f<arguments.length;f++){for(var c in r=Object(arguments[f]))i.call(r,c)&&(u[c]=r[c]);if(n){s=n(r);for(var h=0;h<s.length;h++)o.call(r,s[h])&&(u[s[h]]=r[s[h]])}}return u}},function(e,t,r){"use strict";var n=r(445);e.exports=Function.prototype.bind||n},function(e,t,r){"use strict";var n=r(0)(r(1)),i=Function.prototype.toString,o=/^\s*class\b/,a=function(e){try{var t=i.call(e);return o.test(t)}catch(e){return!1}},s=Object.prototype.toString,u="function"==typeof Symbol&&"symbol"===(0,n.default)(Symbol.toStringTag);e.exports=function(e){if(!e)return!1;if("function"!=typeof e&&"object"!==(0,n.default)(e))return!1;if("function"==typeof e&&!e.prototype)return!0;if(u)return function(e){try{return!a(e)&&(i.call(e),!0)}catch(e){return!1}}(e);if(a(e))return!1;var t=s.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t}},function(e,t,r){"use strict";(function(e){var n=r(0)(r(1)),i=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n<t.length;n++)r[t[n]]=Object.getOwnPropertyDescriptor(e,t[n]);return r},o=/%[sdj%]/g;t.format=function(e){if(!v(e)){for(var t=[],r=0;r<arguments.length;r++)t.push(u(arguments[r]));return t.join(" ")}r=1;for(var n=arguments,i=n.length,a=String(e).replace(o,(function(e){if("%%"===e)return"%";if(r>=i)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),s=n[r];r<i;s=n[++r])m(s)||!_(s)?a+=" "+s:a+=" "+u(s);return a},t.deprecate=function(r,n){if(void 0!==e&&!0===e.noDeprecation)return r;if(void 0===e)return function(){return t.deprecate(r,n).apply(this,arguments)};var i=!1;return function(){if(!i){if(e.throwDeprecation)throw new Error(n);e.traceDeprecation?console.trace(n):console.error(n),i=!0}return r.apply(this,arguments)}};var a,s={};function u(e,r){var n={seen:[],stylize:c};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),b(r)?n.showHidden=r:r&&t._extend(n,r),g(n.showHidden)&&(n.showHidden=!1),g(n.depth)&&(n.depth=2),g(n.colors)&&(n.colors=!1),g(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),h(n,e,n.depth)}function f(e,t){var r=u.styles[t];return r?"["+u.colors[r][0]+"m"+e+"["+u.colors[r][1]+"m":e}function c(e,t){return e}function h(e,r,n){if(e.customInspect&&r&&S(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return v(i)||(i=h(e,i,n)),i}var o=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(v(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(y(t))return e.stylize(""+t,"number");if(b(t))return e.stylize(""+t,"boolean");if(m(t))return e.stylize("null","null")}(e,r);if(o)return o;var a=Object.keys(r),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(r)),A(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return d(r);if(0===a.length){if(S(r)){var u=r.name?": "+r.name:"";return e.stylize("[Function"+u+"]","special")}if(w(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(k(r))return e.stylize(Date.prototype.toString.call(r),"date");if(A(r))return d(r)}var f,c="",_=!1,E=["{","}"];(p(r)&&(_=!0,E=["[","]"]),S(r))&&(c=" [Function"+(r.name?": "+r.name:"")+"]");return w(r)&&(c=" "+RegExp.prototype.toString.call(r)),k(r)&&(c=" "+Date.prototype.toUTCString.call(r)),A(r)&&(c=" "+d(r)),0!==a.length||_&&0!=r.length?n<0?w(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),f=_?function(e,t,r,n,i){for(var o=[],a=0,s=t.length;a<s;++a)O(t,String(a))?o.push(l(e,t,r,n,String(a),!0)):o.push("");return i.forEach((function(i){i.match(/^\d+$/)||o.push(l(e,t,r,n,i,!0))})),o}(e,r,n,s,a):a.map((function(t){return l(e,r,n,s,t,_)})),e.seen.pop(),function(e,t,r){if(e.reduce((function(e,t){return t.indexOf("\n")>=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(f,c,E)):E[0]+c+E[1]}function d(e){return"["+Error.prototype.toString.call(e)+"]"}function l(e,t,r,n,i,Line truncated
/*! https://mths.be/utf8js v3.0.0 by @mathias */!function(e){var t,r,n,i=String.fromCharCode;function o(e){for(var t,r,n=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<o?56320==(64512&(r=e.charCodeAt(i++)))?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),i--):n.push(t);return n}function a(e){if(e>=55296&&e<=57343)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function s(e,t){return i(e>>t&63|128)}function u(e){if(0==(4294967168&e))return i(e);var t="";return 0==(4294965248&e)?t=i(e>>6&31|192):0==(4294901760&e)?(a(e),t=i(e>>12&15|224),t+=s(e,6)):0==(4292870144&e)&&(t=i(e>>18&7|240),t+=s(e,12),t+=s(e,6)),t+=i(63&e|128)}function f(){if(n>=r)throw Error("Invalid byte index");var e=255&t[n];if(n++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function c(){var e,i;if(n>r)throw Error("Invalid byte index");if(n==r)return!1;if(e=255&t[n],n++,0==(128&e))return e;if(192==(224&e)){if((i=(31&e)<<6|f())>=128)return i;throw Error("Invalid continuation byte")}if(224==(240&e)){if((i=(15&e)<<12|f()<<6|f())>=2048)return a(i),i;throw Error("Invalid continuation byte")}if(240==(248&e)&&(i=(7&e)<<18|f()<<12|f()<<6|f())>=65536&&i<=1114111)return i;throw Error("Invalid UTF-8 detected")}e.version="3.0.0",e.encode=function(e){for(var t=o(e),r=t.length,n=-1,i="";++n<r;)i+=u(t[n]);return i},e.decode=function(e){t=o(e),r=t.length,n=0;for(var a,s=[];!1!==(a=c());)s.push(a);return function(e){for(var t,r=e.length,n=-1,o="";++n<r;)(t=e[n])>65535&&(o+=i((t-=65536)>>>10&1023|55296),t=56320|1023&t),o+=i(t);return o}(s)}}(t)},function(e,t,r){"use strict";var n=r(0)(r(1));Object.defineProperty(t,"__esModule",{value:!0});var i=r(186);function o(e){return"string"==typeof e&&(!!/^(0x)?[0-9a-f]{512}$/i.test(e)&&!(!/^(0x)?[0-9a-f]{512}$/.test(e)&&!/^(0x)?[0-9A-F]{512}$/.test(e)))}function a(e,t){"object"===(0,n.default)(t)&&t.constructor===Uint8Array&&(t=i.bytesToHex(t));for(var r=i.keccak256(t).replace("0x",""),o=0;o<12;o+=4){var a=(parseInt(r.substr(o,2),16)<<8)+parseInt(r.substr(o+2,2),16)&2047,u=1<<a%4;if((s(e.charCodeAt(e.length-1-Math.floor(a/4)))&u)!==u)return!1}return!0}function s(e){if(e>=48&&e<=57)return e-48;if(e>=65&&e<=70)return e-55;if(e>=97&&e<=102)return e-87;throw new Error("invalid bloom")}function u(e){return"string"==typeof e&&(!!/^(0x)?[0-9a-f]{64}$/i.test(e)&&!(!/^(0x)?[0-9a-f]{64}$/.test(e)&&!/^(0x)?[0-9A-F]{64}$/.test(e)))}function f(e){return"string"==typeof e&&(!!e.match(/^(0x)?[0-9a-fA-F]{40}$/)||!!e.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/))}t.isBloom=o,t.isInBloom=a,t.isUserEthereumAddressInBloom=function(e,t){if(!o(e))throw new Error("Invalid bloom given");if(!f(t))throw new Error('Invalid ethereum address given: "'.concat(t,'"'));return a(e,i.padLeft(t,64))},t.isContractAddressInBloom=function(e,t){if(!o(e))throw new Error("Invalid bloom given");if(!f(t))throw new Error('Invalid contract address given: "'.concat(t,'"'));return a(e,t)},t.isTopicInBloom=function(e,t){if(!o(e))throw new Error("Invalid bloom given");if(!u(t))throw new Error("Invalid topic");return a(e,t)},t.isTopic=u,t.isAddress=f},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(187);function i(e){if(null==e)throw new Error("cannot convert null value to array");if("string"==typeof e){var t=e.match(/^(0x)?[0-9a-fA-F]*$/);if(!t)throw new Error("invalid hexidecimal string");if("0x"!==t[1])throw new Error("hex string must have 0x prefix");(e=e.substring(2)).length%2&&(e="0"+e);for(var r=[],n=0;n<e.length;n+=2)r.push(parseInt(e.substr(n,2),16));return o(new Uint8Array(r))}if(function(e){if(!e||parseInt(String(e.length))!=e.length||"string"==typeof e)return!1;for(var t=0;t<e.length;t++){var r=e[t];if(r<0||r>=256||parseInt(String(r))!=r)return!1}return!0}(e))return o(new Uint8Array(e));throw new Error("invalid arrayify value")}function o(e){return e.slice||(e.slice=function(){var t=Array.prototype.slice.call(arguments);return o(new Uint8Array(Array.prototype.slice.apply(e,t)))}),e}t.keccak256=function(e){return"0x"+n.keccak_256(i(e))},t.padLeft=function(e,t){var r=/^0x/i.test(e)||"number"==typeof e,n=t-(e=e.toString().replace(/^0x/i,"")).length+1>=0?t-e.length+1:0;return(r?"0x":"")+new Array(n).join("0")+e},t.bytesToHex=function(e){for(var t=[],r=0;r<e.length;r++)t.push((e[r]>>>4).toString(16)),t.push((15&e[r]).toString(16));return"0x".concat(t.join("").replace(/^0+/,""))},t.toByteArray=i},function(e,t,r){"use strict";(function(e,n,i){var o,a=r(0)(r(1));
/**
* [js-sha3]{@link https://github.com/emn178/js-sha3}
*
* @version 0.8.0
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2015-2018
* @license MIT
*/
!function(){var s="input is invalid type",u="object"===("undefined"==typeof window?"undefined":(0,a.default)(window)),f=u?window:{};f.JS_SHA3_NO_WINDOW&&(u=!1);var c=!u&&"object"===("undefined"==typeof self?"undefined":(0,a.default)(self));!f.JS_SHA3_NO_NODE_JS&&"object"===(void 0===e?"undefined":(0,a.default)(e))&&e.versions&&e.versions.node?f=n:c&&(f=self);var h=!f.JS_SHA3_NO_COMMON_JS&&"object"===(0,a.default)(i)&&i.exports,d=r(62),l=!f.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,p="0123456789abcdef".split(""),b=[4,1024,262144,67108864],m=[0,8,16,24],y=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],v=[224,256,384,512],g=[128,256],w=["hex","buffer","arrayBuffer","array","digest"],_={128:168,256:136};!f.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!l||!f.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"===(0,a.default)(e)&&e.buffer&&e.buffer.constructor===ArrayBuffer});for(var k=function(e,t,r){return function(n){return new j(e,t,e).update(n)[r]()}},A=function(e,t,r){return function(n,i){return new j(e,t,i).update(n)[r]()}},S=function(e,t,r){return function(t,n,i,o){return O["cshake"+e].update(t,n,i,o)[r]()}},E=function(e,t,r){return function(t,n,i,o){return O["kmac"+e].update(t,n,i,o)[r]()}},x=function(e,t,r,n){for(var i=0;i<w.length;++i){var o=w[i];e[o]=t(r,n,o)}return e},M=function(e,t){var r=k(e,t,"hex");return r.create=function(){return new j(e,t,e)},r.update=function(e){return r.create().update(e)},x(r,k,e,t)},I=[{name:"keccak",padding:[1,256,65536,16777216],bits:v,createMethod:M},{name:"sha3",padding:[6,1536,393216,100663296],bits:v,createMethod:M},{name:"shake",padding:[31,7936,2031616,520093696],bits:g,createMethod:function(e,t){var r=A(e,t,"hex");return r.create=function(r){return new j(e,t,r)},r.update=function(e,t){return r.create(t).update(e)},x(r,A,e,t)}},{name:"cshake",padding:b,bits:g,createMethod:function(e,t){var r=_[e],n=S(e,0,"hex");return n.create=function(n,i,o){return i||o?new j(e,t,n).bytepad([i,o],r):O["shake"+e].create(n)},n.update=function(e,t,r,i){return n.create(t,r,i).update(e)},x(n,S,e,t)}},{name:"kmac",padding:b,bits:g,createMethod:function(e,t){var r=_[e],n=E(e,0,"hex");return n.create=function(n,i,o){return new L(e,t,i).bytepad(["KMAC",o],r).bytepad([n],r)},n.update=function(e,t,r,i){return n.create(e,r,i).update(t)},x(n,E,e,t)}}],O={},C=[],P=0;P<I.length;++P)for(var T=I[P],U=T.bits,B=0;B<U.length;++B){var R=T.name+"_"+U[B];if(C.push(R),O[R]=T.createMethod(U[B],T.padding),"sha3"!==T.name){var N=T.name+U[B];C.push(N),O[N]=O[R]}}function j(e,t,r){this.blocks=[],this.s=[],this.padding=t,this.outputBits=r,this.reset=!0,this.finalized=!1,this.block=0,this.start=0,this.blockCount=1600-(e<<1)>>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var n=0;n<50;++n)this.s[n]=0}function L(e,t,r){j.call(this,e,t,r)}j.prototype.update=function(e){if(this.finalized)throw new Error("finalize already called");var t,r=(0,a.default)(e);if("string"!==r){if("object"!==r)throw new Error(s);if(null===e)throw new Error(s);if(l&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||l&&ArrayBuffer.isView(e)))throw new Error(s);t=!0}for(var n,i,o=this.blocks,u=this.byteCount,f=e.length,c=this.blockCount,h=0,d=this.s;h<f;){if(this.reset)for(this.reset=!1,o[0]=this.block,n=1;n<c+1;++n)o[n]=0;if(t)for(n=this.start;h<f&&n<u;++h)o[n>>2]|=e[h]<<m[3&n++];else for(n=this.start;h<f&&n<u;++h)(i=e.charCodeAt(h))<128?o[n>>2]|=i<<m[3&n++]:i<2048?(o[n>>2]|=(192|i>>6)<<m[3&n++],o[n>>2]|=(128|63&i)<<m[3&n++]):i<55296||i>=57344?(o[n>>2]|=(224|i>>12)<<m[3&n++],o[n>>2]|=(128|i>>6&63)<<m[3&n++],o[n>>2]|=(128|63&i)<<m[3&n++]):(i=65536+((1023&i)<<10|1023&e.charCodeAt(++h)),o[n>>2]|=(240|i>>18)<<m[3&n++],o[n>>2]|=(128|i>>12&63)<<m[3&n++],o[n>>2]|=(128|i>>6&63)<<m[3&n++],o[n>>2]|=(128|63&i)<<m[3&n++]);if(this.lastByteIndex=n,n>=u){for(this.start=n-u,this.block=o[c],n=0;n<c;++n)d[n]^=o[n];F(d),this.reset=!0}else this.start=n}return this},j.prototype.encode=function(e,t){var r=255&e,n=1,i=[r];for(r=255&(e>>=8);r>0;)i.unshift(r),r=255&(e>>=8),++n;return t?i.push(n):i.unshift(n),this.update(i),i.length},j.prototype.encodeString=function(e){var t,r=(0,a.default)(e);if("string"!==r){if("object"!==r)throw new Error(s);if(null===e)throw new Error(s);if(l&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||l&&ArrayBuffer.isView(e)))throw new Error(s);t=!0}var n=0,i=e.length;if(t)n=i;else for(var o=0;o<e.length;++o){var u=e.charCodeAt(o);u<128?n+=1:u<2048?n+=2:u<55296||u>=57344?n+=3:(u=65536+((1023&u)<<10|1023&Line truncated
/*!
* v2.1.4-104-gc868b3a
*
*/
a=function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=7)}([function(e,t,r){r.d(t,"j",(function(){return i})),r.d(t,"d",(function(){return o})),r.d(t,"c",(function(){return a})),r.d(t,"h",(function(){return s})),r.d(t,"b",(function(){return u})),r.d(t,"k",(function(){return f})),r.d(t,"e",(function(){return c})),r.d(t,"g",(function(){return h})),r.d(t,"i",(function(){return d})),r.d(t,"a",(function(){return l})),r.d(t,"f",(function(){return p}));var n=r(1),i=f((function(e,t){var r=t.length;return f((function(n){for(var i=0;i<n.length;i++)t[r+i]=n[i];return t.length=r+n.length,e.apply(this,t)}))}));function o(e,t){return function(){return e.call(this,t.apply(this,arguments))}}function a(e){return function(t){return t[e]}}f((function(e){var t=Object(n.c)(e);function r(e,t){return[u(e,t)]}return f((function(e){return Object(n.f)(r,e,t)[0]}))}));var s=f((function(e){return f((function(t){for(var r,n=0;n<a("length")(e);n++)if(r=u(t,e[n]))return r}))}));function u(e,t){return t.apply(void 0,e)}function f(e){var t=e.length-1,r=Array.prototype.slice;if(0===t)return function(){return e.call(this,r.call(arguments))};if(1===t)return function(){return e.call(this,arguments[0],r.call(arguments,1))};var n=Array(e.length);return function(){for(var i=0;i<t;i++)n[i]=arguments[i];return n[t]=r.call(arguments,t),e.apply(this,n)}}function c(e){return function(t,r){return e(r,t)}}function h(e,t){return function(r){return e(r)&&t(r)}}function d(){}function l(){return!0}function p(e){return function(){return e}}},function(e,t,r){r.d(t,"d",(function(){return i})),r.d(t,"g",(function(){return o})),r.d(t,"l",(function(){return a})),r.d(t,"c",(function(){return s})),r.d(t,"h",(function(){return u})),r.d(t,"i",(function(){return f})),r.d(t,"j",(function(){return c})),r.d(t,"f",(function(){return h})),r.d(t,"m",(function(){return d})),r.d(t,"a",(function(){return l})),r.d(t,"b",(function(){return p})),r.d(t,"k",(function(){return b})),r.d(t,"e",(function(){return m}));var n=r(0);function i(e,t){return[e,t]}var o=Object(n.c)(0),a=Object(n.c)(1);function s(e){return b(e.reduce(Object(n.e)(i),null))}var u=Object(n.k)(s);function f(e){return h((function(e,t){return e.unshift(t),e}),[],e)}function c(e,t){return t?i(e(o(t)),c(e,a(t))):null}function h(e,t,r){return r?e(h(e,t,a(r)),o(r)):t}function d(e,t,r){return function e(r,n){return r?t(o(r))?(n(o(r)),a(r)):i(o(r),e(a(r),n)):null}(e,r||n.i)}function l(e,t){return!t||e(o(t))&&l(e,a(t))}function p(e,t){e&&(o(e).apply(null,t),p(a(e),t))}function b(e){return function e(t,r){return t?e(a(t),i(o(t),r)):r}(e,null)}function m(e,t){return t&&(e(o(t))?o(t):m(e,a(t)))}},function(e,t,r){r.d(t,"c",(function(){return o})),r.d(t,"e",(function(){return a})),r.d(t,"d",(function(){return s})),r.d(t,"a",(function(){return u})),r.d(t,"b",(function(){return f}));var n=r(1),i=r(0);function o(e,t){return t&&t.constructor===e}var a=Object(i.c)("length"),s=Object(i.j)(o,String);function u(e){return void 0!==e}function f(e,t){return t instanceof Object&&Object(n.a)((function(e){return e in t}),e)}},function(e,t,r){r.d(t,"f",(function(){return i})),r.d(t,"d",(function(){return o})),r.d(t,"g",(function(){return a})),r.d(t,"e",(function(){return s})),r.d(t,"b",(function(){return u})),r.d(t,"h",(function(){return f})),r.d(t,"i",(function(){return c})),r.d(t,"c",(function(){return h})),r.d(t,"m",(function(){return d})),r.d(t,"n",(function(){return l})),r.d(t,"a",(function(){return p})),r.d(t,"j",(function(){return b})),r.d(t,"l",(function(){return m})),r.d(t,"k",(function(){return y})),r.d(t,"o",(function(){return v}));var n=1,i=n++,o=n++,a=n++,s=n++,u="fail",f=n++,c=n++,h="start",d="data",l="end",p=n++,b=n++,m=n++,y=n++;function v(e,t,r){try{var n=JSON.parse(t)}catch(e){}return{statusCode:e,body:t,jsonBody:n,thrown:r}}},function(e,t,r){r.d(t,"b",(function(){return i})),r.d(t,"a",(function(){return o})),r.d(t,"c",(function(){return a}));var n=r(0);function i(e,t){return{key:e,node:t}}var o=Object(n.c)("key"),a=Object(n.c)("node")},function(e,t,r){r.d(t,"a",(function(){return u}));var n=r(1),i=r(0),o=r(2),a=r(8),s=r(9);function u(e){var t=Object(n.h)("resume","pause","pipe"),r=Object(i.j)(o.b,t);return e?r(e)||Object(o.d)(e)?Object(a.a)(s.a,e):Object(a.a)(s.a,e.url,e.method,e.body,e.headers,e.withCredentials,e.cached):Object(s.a)()}u.drop=function(){return u.drop}},function(e,t,r){r.d(t,"b",(function(){return u})),r.d(t,"a",(function(){return s}));var n=r(3),i=r(4),o=r(2),a=r(1),s={};function u(e){var t=e(n.f).emit,r=e(n.d).emit,u=e(n.i).emit,f=e(n.h).emit;function c(e,t,r){Object(i.c)(Object(a.g)Line truncated
/**
* [js-sha3]{@link https://github.com/emn178/js-sha3}
*
* @version 0.5.7
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2015-2016
* @license MIT
*/
!function(){var r="object"===("undefined"==typeof window?"undefined":(0,i.default)(window))?window:{};!r.JS_SHA3_NO_NODE_JS&&"object"===(void 0===e?"undefined":(0,i.default)(e))&&e.versions&&e.versions.node&&(r=t);for(var o=!r.JS_SHA3_NO_COMMON_JS&&"object"===(0,i.default)(n)&&n.exports,a="0123456789abcdef".split(""),s=[0,8,16,24],u=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],f=[224,256,384,512],c=["hex","buffer","arrayBuffer","array"],h=function(e,t,r){return function(n){return new k(e,t,e).update(n)[r]()}},d=function(e,t,r){return function(n,i){return new k(e,t,i).update(n)[r]()}},l=function(e,t){var r=h(e,t,"hex");r.create=function(){return new k(e,t,e)},r.update=function(e){return r.create().update(e)};for(var n=0;n<c.length;++n){var i=c[n];r[i]=h(e,t,i)}return r},p=[{name:"keccak",padding:[1,256,65536,16777216],bits:f,createMethod:l},{name:"sha3",padding:[6,1536,393216,100663296],bits:f,createMethod:l},{name:"shake",padding:[31,7936,2031616,520093696],bits:[128,256],createMethod:function(e,t){var r=d(e,t,"hex");r.create=function(r){return new k(e,t,r)},r.update=function(e,t){return r.create(t).update(e)};for(var n=0;n<c.length;++n){var i=c[n];r[i]=d(e,t,i)}return r}}],b={},m=[],y=0;y<p.length;++y)for(var v=p[y],g=v.bits,w=0;w<g.length;++w){var _=v.name+"_"+g[w];m.push(_),b[_]=v.createMethod(g[w],v.padding)}function k(e,t,r){this.blocks=[],this.s=[],this.padding=t,this.outputBits=r,this.reset=!0,this.block=0,this.start=0,this.blockCount=1600-(e<<1)>>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var n=0;n<50;++n)this.s[n]=0}k.prototype.update=function(e){var t="string"!=typeof e;t&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e));for(var r,n,i=e.length,o=this.blocks,a=this.byteCount,u=this.blockCount,f=0,c=this.s;f<i;){if(this.reset)for(this.reset=!1,o[0]=this.block,r=1;r<u+1;++r)o[r]=0;if(t)for(r=this.start;f<i&&r<a;++f)o[r>>2]|=e[f]<<s[3&r++];else for(r=this.start;f<i&&r<a;++f)(n=e.charCodeAt(f))<128?o[r>>2]|=n<<s[3&r++]:n<2048?(o[r>>2]|=(192|n>>6)<<s[3&r++],o[r>>2]|=(128|63&n)<<s[3&r++]):n<55296||n>=57344?(o[r>>2]|=(224|n>>12)<<s[3&r++],o[r>>2]|=(128|n>>6&63)<<s[3&r++],o[r>>2]|=(128|63&n)<<s[3&r++]):(n=65536+((1023&n)<<10|1023&e.charCodeAt(++f)),o[r>>2]|=(240|n>>18)<<s[3&r++],o[r>>2]|=(128|n>>12&63)<<s[3&r++],o[r>>2]|=(128|n>>6&63)<<s[3&r++],o[r>>2]|=(128|63&n)<<s[3&r++]);if(this.lastByteIndex=r,r>=a){for(this.start=r-a,this.block=o[u],r=0;r<u;++r)c[r]^=o[r];A(c),this.reset=!0}else this.start=r}return this},k.prototype.finalize=function(){var e=this.blocks,t=this.lastByteIndex,r=this.blockCount,n=this.s;if(e[t>>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[r],t=1;t<r+1;++t)e[t]=0;for(e[r-1]|=2147483648,t=0;t<r;++t)n[t]^=e[t];A(n)},k.prototype.toString=k.prototype.hex=function(){this.finalize();for(var e,t=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,s=0,u="";s<n;){for(o=0;o<t&&s<n;++o,++s)e=r[o],u+=a[e>>4&15]+a[15&e]+a[e>>12&15]+a[e>>8&15]+a[e>>20&15]+a[e>>16&15]+a[e>>28&15]+a[e>>24&15];s%t==0&&(A(r),o=0)}return i&&(e=r[o],i>0&&(u+=a[e>>4&15]+a[15&e]),i>1&&(u+=a[e>>12&15]+a[e>>8&15]),i>2&&(u+=a[e>>20&15]+a[e>>16&15])),u},k.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,a=0,s=this.outputBits>>3;e=i?new ArrayBuffer(n+1<<2):new ArrayBuffer(s);for(var u=new Uint32Array(e);a<n;){for(o=0;o<t&&a<n;++o,++a)u[a]=r[o];a%t==0&&A(r)}return i&&(u[o]=r[o],e=e.slice(0,s)),e},k.prototype.buffer=k.prototype.arrayBuffer,k.prototype.digest=k.prototype.array=function(){this.finalize();for(var e,t,r=this.blockCount,n=this.s,i=this.outputBlocks,o=this.extraBytes,a=0,s=0,u=[];s<i;){for(a=0;a<r&&s<i;++a,++s)e=s<<2,t=n[a],u[e]=255&t,u[e+1]=t>>8&255,u[e+2]=t>>16&255,u[e+3]=t>>24&255;s%r==0&&A(n)}return o&&(e=s<<2,t=n[a],o>0&&(u[e]=255&t),o>1&&(u[e+1]=t>>8&255),o>2&&(u[e+2]=t>>16&255)),u};var A=function(e){var t,r,n,i,o,a,s,f,c,h,d,l,p,b,m,y,v,g,w,_,k,A,S,E,x,M,I,O,C,P,T,U,B,R,N,j,L,F,D,q,z,H,K,V,G,W,Y,$,J,Z,X,Q,ee,te,re,ne,ie,oe,ae,se,ue,fe,ce;for(n=0;n<48;n+=2)i=e[0]^e[10]^e[20]^e[30]^e[40],o=e[1]^e[11]^e[21]^e[31]^e[41],a=e[2]^e[12]^e[22]^e[32]^e[42],s=e[3]^e[13]^e[23]^e[33]^e[43],f=e[4]^e[14]^e[24]^e[34]^e[44],c=e[5]^e[15]^e[25]^e[35]^e[45],h=e[6]^e[16]^e[26]^e[36]^e[46],d=e[7]^e[17]^e[27]^e[37]^e[47],t=(l=e[8]^e[18]^e[28]^e[38]^e[48])^(a<<1|s>>>31),r=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(s<<1|a>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=i^(f<<1|c>>>31),r=o^(c<<1|f>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=a^(h<<1|d>>>31),r=s^(d<<1|h>>>31),e[4]^=t,e[5]^=rLine truncated
/**
* [js-sha3]{@link https://github.com/emn178/js-sha3}
*
* @version 0.5.7
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2015-2016
* @license MIT
*/
!function(){var r="object"===("undefined"==typeof window?"undefined":(0,i.default)(window))?window:{};!r.JS_SHA3_NO_NODE_JS&&"object"===(void 0===e?"undefined":(0,i.default)(e))&&e.versions&&e.versions.node&&(r=t);for(var o=!r.JS_SHA3_NO_COMMON_JS&&"object"===(0,i.default)(n)&&n.exports,a="0123456789abcdef".split(""),s=[0,8,16,24],u=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],f=[224,256,384,512],c=["hex","buffer","arrayBuffer","array"],h=function(e,t,r){return function(n){return new k(e,t,e).update(n)[r]()}},d=function(e,t,r){return function(n,i){return new k(e,t,i).update(n)[r]()}},l=function(e,t){var r=h(e,t,"hex");r.create=function(){return new k(e,t,e)},r.update=function(e){return r.create().update(e)};for(var n=0;n<c.length;++n){var i=c[n];r[i]=h(e,t,i)}return r},p=[{name:"keccak",padding:[1,256,65536,16777216],bits:f,createMethod:l},{name:"sha3",padding:[6,1536,393216,100663296],bits:f,createMethod:l},{name:"shake",padding:[31,7936,2031616,520093696],bits:[128,256],createMethod:function(e,t){var r=d(e,t,"hex");r.create=function(r){return new k(e,t,r)},r.update=function(e,t){return r.create(t).update(e)};for(var n=0;n<c.length;++n){var i=c[n];r[i]=d(e,t,i)}return r}}],b={},m=[],y=0;y<p.length;++y)for(var v=p[y],g=v.bits,w=0;w<g.length;++w){var _=v.name+"_"+g[w];m.push(_),b[_]=v.createMethod(g[w],v.padding)}function k(e,t,r){this.blocks=[],this.s=[],this.padding=t,this.outputBits=r,this.reset=!0,this.block=0,this.start=0,this.blockCount=1600-(e<<1)>>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var n=0;n<50;++n)this.s[n]=0}k.prototype.update=function(e){var t="string"!=typeof e;t&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e));for(var r,n,i=e.length,o=this.blocks,a=this.byteCount,u=this.blockCount,f=0,c=this.s;f<i;){if(this.reset)for(this.reset=!1,o[0]=this.block,r=1;r<u+1;++r)o[r]=0;if(t)for(r=this.start;f<i&&r<a;++f)o[r>>2]|=e[f]<<s[3&r++];else for(r=this.start;f<i&&r<a;++f)(n=e.charCodeAt(f))<128?o[r>>2]|=n<<s[3&r++]:n<2048?(o[r>>2]|=(192|n>>6)<<s[3&r++],o[r>>2]|=(128|63&n)<<s[3&r++]):n<55296||n>=57344?(o[r>>2]|=(224|n>>12)<<s[3&r++],o[r>>2]|=(128|n>>6&63)<<s[3&r++],o[r>>2]|=(128|63&n)<<s[3&r++]):(n=65536+((1023&n)<<10|1023&e.charCodeAt(++f)),o[r>>2]|=(240|n>>18)<<s[3&r++],o[r>>2]|=(128|n>>12&63)<<s[3&r++],o[r>>2]|=(128|n>>6&63)<<s[3&r++],o[r>>2]|=(128|63&n)<<s[3&r++]);if(this.lastByteIndex=r,r>=a){for(this.start=r-a,this.block=o[u],r=0;r<u;++r)c[r]^=o[r];A(c),this.reset=!0}else this.start=r}return this},k.prototype.finalize=function(){var e=this.blocks,t=this.lastByteIndex,r=this.blockCount,n=this.s;if(e[t>>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[r],t=1;t<r+1;++t)e[t]=0;for(e[r-1]|=2147483648,t=0;t<r;++t)n[t]^=e[t];A(n)},k.prototype.toString=k.prototype.hex=function(){this.finalize();for(var e,t=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,s=0,u="";s<n;){for(o=0;o<t&&s<n;++o,++s)e=r[o],u+=a[e>>4&15]+a[15&e]+a[e>>12&15]+a[e>>8&15]+a[e>>20&15]+a[e>>16&15]+a[e>>28&15]+a[e>>24&15];s%t==0&&(A(r),o=0)}return i&&(e=r[o],i>0&&(u+=a[e>>4&15]+a[15&e]),i>1&&(u+=a[e>>12&15]+a[e>>8&15]),i>2&&(u+=a[e>>20&15]+a[e>>16&15])),u},k.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,a=0,s=this.outputBits>>3;e=i?new ArrayBuffer(n+1<<2):new ArrayBuffer(s);for(var u=new Uint32Array(e);a<n;){for(o=0;o<t&&a<n;++o,++a)u[a]=r[o];a%t==0&&A(r)}return i&&(u[o]=r[o],e=e.slice(0,s)),e},k.prototype.buffer=k.prototype.arrayBuffer,k.prototype.digest=k.prototype.array=function(){this.finalize();for(var e,t,r=this.blockCount,n=this.s,i=this.outputBlocks,o=this.extraBytes,a=0,s=0,u=[];s<i;){for(a=0;a<r&&s<i;++a,++s)e=s<<2,t=n[a],u[e]=255&t,u[e+1]=t>>8&255,u[e+2]=t>>16&255,u[e+3]=t>>24&255;s%r==0&&A(n)}return o&&(e=s<<2,t=n[a],o>0&&(u[e]=255&t),o>1&&(u[e+1]=t>>8&255),o>2&&(u[e+2]=t>>16&255)),u};var A=function(e){var t,r,n,i,o,a,s,f,c,h,d,l,p,b,m,y,v,g,w,_,k,A,S,E,x,M,I,O,C,P,T,U,B,R,N,j,L,F,D,q,z,H,K,V,G,W,Y,$,J,Z,X,Q,ee,te,re,ne,ie,oe,ae,se,ue,fe,ce;for(n=0;n<48;n+=2)i=e[0]^e[10]^e[20]^e[30]^e[40],o=e[1]^e[11]^e[21]^e[31]^e[41],a=e[2]^e[12]^e[22]^e[32]^e[42],s=e[3]^e[13]^e[23]^e[33]^e[43],f=e[4]^e[14]^e[24]^e[34]^e[44],c=e[5]^e[15]^e[25]^e[35]^e[45],h=e[6]^e[16]^e[26]^e[36]^e[46],d=e[7]^e[17]^e[27]^e[37]^e[47],t=(l=e[8]^e[18]^e[28]^e[38]^e[48])^(a<<1|s>>>31),r=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(s<<1|a>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=i^(f<<1|c>>>31),r=o^(c<<1|f>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=a^(h<<1|d>>>31),r=s^(d<<1|h>>>31),e[4]^=t,e[5]^=rLine truncated
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
* @license MIT
*/
function o(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0}function a(e){return t.Buffer&&"function"==typeof t.Buffer.isBuffer?t.Buffer.isBuffer(e):!(null==e||!e._isBuffer)}var s=r(88),u=Object.prototype.hasOwnProperty,f=Array.prototype.slice,c="foo"===function(){}.name;function h(e){return Object.prototype.toString.call(e)}function d(e){return!a(e)&&("function"==typeof t.ArrayBuffer&&("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):!!e&&(e instanceof DataView||!!(e.buffer&&e.buffer instanceof ArrayBuffer))))}var l=e.exports=g,p=/\s*function\s+([^\(\s]*)\s*/;function b(e){if(s.isFunction(e)){if(c)return e.name;var t=e.toString().match(p);return t&&t[1]}}function m(e,t){return"string"==typeof e?e.length<t?e:e.slice(0,t):e}function y(e){if(c||!s.isFunction(e))return s.inspect(e);var t=b(e);return"[Function"+(t?": "+t:"")+"]"}function v(e,t,r,n,i){throw new l.AssertionError({message:r,actual:e,expected:t,operator:n,stackStartFunction:i})}function g(e,t){e||v(e,!0,t,"==",l.ok)}function w(e,t,r,i){if(e===t)return!0;if(a(e)&&a(t))return 0===o(e,t);if(s.isDate(e)&&s.isDate(t))return e.getTime()===t.getTime();if(s.isRegExp(e)&&s.isRegExp(t))return e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase;if(null!==e&&"object"===(0,n.default)(e)||null!==t&&"object"===(0,n.default)(t)){if(d(e)&&d(t)&&h(e)===h(t)&&!(e instanceof Float32Array||e instanceof Float64Array))return 0===o(new Uint8Array(e.buffer),new Uint8Array(t.buffer));if(a(e)!==a(t))return!1;var u=(i=i||{actual:[],expected:[]}).actual.indexOf(e);return-1!==u&&u===i.expected.indexOf(t)||(i.actual.push(e),i.expected.push(t),function(e,t,r,n){if(null==e||null==t)return!1;if(s.isPrimitive(e)||s.isPrimitive(t))return e===t;if(r&&Object.getPrototypeOf(e)!==Object.getPrototypeOf(t))return!1;var i=_(e),o=_(t);if(i&&!o||!i&&o)return!1;if(i)return e=f.call(e),t=f.call(t),w(e,t,r);var a,u,c=S(e),h=S(t);if(c.length!==h.length)return!1;for(c.sort(),h.sort(),u=c.length-1;u>=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(a=c[u],!w(e[a],t[a],r,n))return!1;return!0}(e,t,r,i))}return r?e===t:e==t}function _(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function k(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function A(e,t,r,n){var i;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&v(i,r,"Missing expected exception"+n);var o="string"==typeof n,a=!e&&i&&!r;if((!e&&s.isError(i)&&o&&k(i,r)||a)&&v(i,r,"Got unwanted exception"+n),e&&i&&r&&!k(i,r)||!e&&i)throw i}l.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return m(y(e.actual),128)+" "+e.operator+" "+m(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var r=new Error;if(r.stack){var n=r.stack,i=b(t),o=n.indexOf("\n"+i);if(o>=0){var a=n.indexOf("\n",o+1);n=n.substring(a+1)}this.stack=n}}},s.inherits(l.AssertionError,Error),l.fail=v,l.ok=g,l.equal=function(e,t,r){e!=t&&v(e,t,r,"==",l.equal)},l.notEqual=function(e,t,r){e==t&&v(e,t,r,"!=",l.notEqual)},l.deepEqual=function(e,t,r){w(e,t,!1)||v(e,t,r,"deepEqual",l.deepEqual)},l.deepStrictEqual=function(e,t,r){w(e,t,!0)||v(e,t,r,"deepStrictEqual",l.deepStrictEqual)},l.notDeepEqual=function(e,t,r){w(e,t,!1)&&v(e,t,r,"notDeepEqual",l.notDeepEqual)},l.notDeepStrictEqual=function e(t,r,n){w(t,r,!0)&&v(t,r,n,"notDeepStrictEqual",e)},l.strictEqual=function(e,t,r){e!==t&&v(e,t,r,"===",l.strictEqual)},l.notStrictEqual=function(e,t,r){e===t&&v(e,t,r,"!==",l.notStrictEqual)},l.throws=function(e,t,r){A(!0,e,t,r)},l.doesNotThrow=function(e,t,r){A(!1,e,t,r)},l.ifError=function(e){if(e)throw e},l.strict=i((function e(t,r){t||v(t,!0,r,"==",e)}),l,{equal:l.strictEqual,deepEqual:l.deepStrictEqual,notEqual:l.notStrictEqual,notDeepEqual:l.notDeepStrictEqual}),l.strict.strict=l.strict;var S=Object.keys||function(e){var t=[];for(var r in e)u.call(e,r)&&t.push(r);return t}}).call(this,r(8))},function(e,t,r){"use strict";(function(t){var n=r(0)(r(1)),i=r(91),o=r(60);function a(e){var t=e;if("string"!=typeof t)throw new Error("[ethjs-util] while padding to even, value must be string, is currently "+(0,n.default)(t)+", while padToEven.");return t.length%2&&(t="0"+t),t}function s(e){return"0x"+e.toString(16)}e.exports={arrayContainsArray:function(e,t,r){if(!0!==Array.isArray(e))throw new Error("[ethjs-util] method arrayContainsArray requirLine truncated
//# sourceMappingURL=web3.min.js.map
@@ -0,0 +1,4 @@
/*!
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:'FontAwesome';src:url('../Fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../Fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../Fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../Fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../Fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../Fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f03Line truncated
+99
View File
@@ -0,0 +1,99 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>Superalgos</title>
<meta name="description" content="Free and Open Source Crypto Trading Tools">
<link rel="stylesheet" href="main.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="font-awasome.css" type="text/css" />
<link rel="shortcut icon" type="image/png/ico" href="Images/favicon.ico" />
<script type="text/javascript" src="WebServer/require.js"></script>
<script type="text/javascript" src="AppPreLoader.js"></script>
<script src="externalScripts/CCapture.all.min.js"></script>
<script src="externalScripts/web3.min.js"></script>
<!-- Documentation Style Sheets -->
<!-- -->
<script type="text/javascript">
function loadCanvas() {
// Prevent click-jacking
try {
if (window == window.top || window.chrome && chrome.app && chrome.app.window) {
document.documentElement.style.display = 'block'
} else {
top.location = self.location
}
} catch (e) { console.error('CJ protection', e) }
try {
loadSuperalgos();
} catch (err) {
console.log("[ERROR] CanvasApp can not be started. Please check that WebServer is running.", err);
}
}
function onResize() {
try {
if (canvas === undefined) { return }
if (canvas.eventHandler === undefined) { return }
if (DISABLE_BROWSER_RESIZE_EVENT === true) { return }
canvas.eventHandler.raiseEvent('Browser Resized')
} catch (err) {
console.log('Error Resizing. ' + err.stack)
}
}
</script>
</head>
<body id="body" onload="loadCanvas()"
style="overflow:hidden; background: url(Images/superalgos-platform.jpg); background-size: cover;"
onresize="onResize()">
<div id="contributors" class="credits">
<p>Superalgos is <span class="red">free</span> and <span class="red">open-source</span>, and is <span class="red">constantly improving</span> thanks to the involvement of contributors:</p>
<p>Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Matías Benitez, Ira Miller, Eduardo Remis,
Jeff Braun, rico4dev, 9808us, Barry Low, Nikola Bjelogrlic, Hirajin Koizuko, Francisco J. Santillán, Viktoria B., Guillermo V., Daniel J.,
Javier A., Gustavo J., Romina GS, Pedro P., Thais M., Andrey M., Loui M., Natalia M., Bashar A., Carlos V., Diego M.,
Sebastian E., Bogdan P., Marko V., Igor S., Niksa K., Rodrigo M., Nicanor M., Alejandro P., Mateo H., Lan T., Leon A., Uroš R., Filip M., Vladimir J. and Pavle B.</p>
<p><span class="red">You too can help grow and improve Superalgos. Become a contributor!</span></p>
</div>
<div id="masterApp"></div>
<div id="canvasApp"></div>
<div id="docApp" style="position:fixed; top:100000px; left:100000px">
<iframe id="docIFrame" style="border:none; " height="2000" width="900"></iframe>
</div>
<div id="chatApp" style="position:fixed; top:100000px; left:100000px">
<iframe id="chatIFrame" style="border:none; " height="2000" width="900"></iframe>
</div>
<div id="textAreaDiv"></div>
<div id="inputDiv" style="font-family:saira condensed;">&nbsp;</div>
<!-- Tutorial Template Divs -->
<div id="tutorialDiv" class="tutorial-step" style="position:fixed; top:100000px; left:100000px;"></div>
<div id="tutorialFormDiv" class="tutorial-form" style="position:fixed; top:100000px; left:100000px;">
<form>
<table class="tutorial-buttonsTable">
<tr>
<td align="center">
<label class="tutorial-font-small tutorial-stop-button" onclick="UI.projects.superalgos.spaces.tutorialSpace.stop()"
value="">&nbsp;&nbsp;Stop&nbsp;&nbsp;&nbsp;</label>
</td>
<td align="center">
<label class="tutorial-font-small tutorial-skip-button" onclick="UI.projects.superalgos.spaces.tutorialSpace.skip()"
value="">&nbsp;&nbsp;Skip&nbsp;&nbsp;&nbsp;</label>
</td>
<td align="center">
<label class="tutorial-font-small tutorial-previous-button"
onclick="UI.projects.superalgos.spaces.tutorialSpace.previous()" value="">Previous</label>
</td>
<td align="center">
<label class="tutorial-font-small tutorial-next-button" onclick="UI.projects.superalgos.spaces.tutorialSpace.next()"
value="">&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;</label>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
+346
View File
@@ -0,0 +1,346 @@
/* latin */
@font-face {
font-family: 'Saira';
font-style: normal;
font-weight: 300;
src: local('Saira Light'), local('Saira-Light'), url(Fonts/Saira.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Saira Condensed';
font-style: normal;
font-weight: 300;
src: local('Saira Condensed Light'), local('SairaCondensed-Light'), url(Fonts/Saira-Condensed.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: segoeui;
src: url(Fonts/segoeui.woff) format('woff');
font-weight: normal;
font-style: normal;
}
.credits {
width: 100%;
margin: auto;
margin-bottom: 50;
text-align: center;
position:absolute;
bottom:0;
}
.credits p {
font-family: 'Saira Condensed';
font-size: 140%;
color: whitesmoke;
padding: 0 100;
}
.red {
color: #e3493c;
font-weight: 700;
}
.tutorial-step {
padding: 15px;
margin-bottom: 20px;
border: 2px solid;
border-color: #1b998b;
border-radius: 8px;
background-color: #fdfdfd;
}
.tutorial-summary {
font-size:120%;
color: #808080;
margin:20px 0px 20px 0px;
border-left: 5px solid #fd6a33;
padding-left: 10px;
}
.tutorial-summary:before {
content: "Summary: ";
font-weight: bold;
}
.tutorial-definitionTable {
background-color: #f3f3f3;
border-top-color: #a6e1ec;
padding: 15px;
margin: 20px 0;
border: solid 0px;
vertical-align: middle;
min-width: 100px;
width: 100%;
}
.tutorial-alert-info {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
padding: 15px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #a6e1ec;
width: 90%;
}
.tutorial-alert-success {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
padding: 15px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #c9e2b3;
width: 90%;
}
.tutorial-alert-important {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
padding: 15px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #f7e1b5;
width: 90%;
}
.tutorial-alert-warning {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
padding: 15px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #e4b9c0;
width: 90%;
}
.tutorial-callout {
padding: 20px;
margin: 20px 0;
border: 1px solid #eee;
border-left-width: 5px;
border-radius: 3px;
border-left-color: #bcd643;
font-weight: 500;
width: 90%;
}
.tutorial-info-circle:before {
content:"\f05a"
}
.tutorial-check-square-o:before {
content:"\f046"
}
.tutorial-exclamation-circle:before {
content:"\f06a"
}
.tutorial-warning:before,.fa-exclamation-triangle:before {
content:"\f06a"
}
.tutorial-fa {
font:normal normal normal 14px/1 FontAwesome;
font-size:inherit;
text-rendering:auto;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale
}
.tutorial-font-small {
font:normal normal normal 14px/1 "segoeui";
font-size:inherit;
text-rendering:auto;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
line-height: 150%
}
li > .tutorial-font-small {
margin-bottom:7px;
}
div.tutorial-font-small {
margin-bottom:7px;
}
.tutorial-font-medium {
font:normal normal normal 32px/1 "segoeui";
text-rendering:auto;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
line-height: 150%
}
.tutorial-font-large {
font:bold normal normal 40px/1 "segoeui";
text-rendering:auto;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
line-height: 150%
}
.tutorial-font-bold-small {
font:bold normal normal 14px/1 "segoeui";
font-size:inherit;
text-rendering:auto;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
line-height: 150%
}
.tutorial-stop-button {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
padding: 12px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #e4b9c0;
min-width: 100px;
}
.tutorial-skip-button {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
padding: 12px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #f7e1b5;
min-width: 100px;
}
.tutorial-previous-button {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
padding: 12px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #c9e2b3;
min-width: 100px;
}
.tutorial-next-button {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
padding: 12px;
border: 1px solid transparent;
border-radius: 4px;
margin: 20px 0;
border-top-color: #c9e2b3;
min-width: 100px;
}
.tutorial-form {
padding: 5px;
border: solid 0px;
margin-left: auto;
margin-right: auto;
margin-bottom: 20px;
width: 100%;
}
.tutorial-buttonsTable {
border-top-color: #a6e1ec;
border: solid 0px;
vertical-align: middle;
min-width: 100px;
width: 95%;
margin-left: auto;
margin-right: auto;
}
.tutorial-image-container {
padding: 5px 15px 5px 5px;
border: solid 0px;
margin-left: auto;
margin-right: auto;
width: 100%;
}
/* Tooltip container */
.tooltip {
position: relative;
display: inline-block;
border-bottom: 1px dotted black; /* If you want dots under the hoverable text */
}
/* Tooltip text */
.tooltip .tooltiptext {
visibility: hidden;
width: 240px;
background-color: #0295aa;
color: #fff;
font-weight: normal;
font-size: 92%;
line-height: 130%;
text-align: center;
padding: 15px;
border-radius: 6px;
/* Position the tooltip text */
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -120px;
/* Fade in tooltip */
opacity: 0;
transition: opacity 0.3s;
}
/* Tooltip arrow */
.tooltip .tooltiptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #0295aa transparent transparent transparent;
}
/* Show the tooltip text when you mouse over the tooltip container */
.tooltip:hover .tooltiptext {
visibility: visible;
opacity: 1;
}
kbd {
padding: 2px 8px;
font-size: 125%;
font-weight: 500;
color: #000;
background-color: #bcd643;
border-radius: 5px;
border-style: outset;
border-width: 1px;
}
File renamed without changes.
+54
View File
@@ -0,0 +1,54 @@
<h2 id="trading-engine">Trading Engine</h2>
<table class="definitionTable"><tr><td>
<img src="images/icons/nodes/png150/trading-engine.png" />
</td><td>
<strong>The trading engine hierarchy is the data structure used by the trading bot to keep runtime information highly accessible and exposed to others.</strong>
</td></tr></table>
<p>You will use this hierarchy for two main purposes:</p>
<p>The hierarchy exposes—literally—all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users. The hierarchy exposes—literally—all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users.</p>
<ul>
<li>
<p><strong>To let your trading systems:</strong> This allows strategies to keep track of and react to current and past events—including those involving the exchange, such as orders placed or filled—as the bot is running.</p>
</li>
<li>
<p><strong>To keep track of the actions:</strong> By analyzing runtime information, you may gain a detailed understanding of what happens, when, and why, throughout a trading session.</p>
</li>
</ul>
<p>The hierarchy exposes—literally—all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users.</p>
<div class="bs-callout bs-callout-success">Este callout se usa para resaltar una idea particularmente importante. Algo se sobresale, como una conclusion, o algo por el estilo.</div>
<p>The hierarchy exposes all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users. The hierarchy exposes all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users.</p>
<div class="alert alert-info" role="alert"><i class="fa fa-info-circle"></i> <b>Note:</b> Esto es una nota, algo noteworthy.</div>
<div class="alert alert-success" role="alert"><i class="fa fa-check-square-o"></i> <b>Tip:</b> Esto es un tip.</div>
<div class="alert alert-warning" role="alert"><i class="fa fa-warning"></i> <b>Important:</b> Esto es algo importante.</div>
<div class="alert alert-danger" role="alert"><i class="fa fa-exclamation-circle"></i> <b>Warning:</b> Esto es una aviso de alerta.</div>
<h4 id="adding-a-trading-engine-node">Adding a Trading Engine Node</h4>
<p>Calculo que con este segundo nivel de titulo alcanza.</p>
<h4 id="este-es-otro-formato-tipico-de-la-doc--trading-engine">Este es otro formato tipico de la doc: Trading Engine</h4>
<table class="definitionTable"><tr><td>
<img src="images/icons/nodes/png50/trading-engine.png" />
</td><td>
The trading engine hierarchy is the data structure used by the trading bot to keep runtime information highly accessible and exposed to others.
</td></tr></table>
+9 -5
View File
@@ -183,16 +183,20 @@
function listenToEvent(eventHandlerName, eventType, callerId, handler, extraData) {
let eventSubscriptionId = Math.trunc(Math.random() * 1000000)
let found = false
/*
We can not allow to have the exact same listener more than once. In case that we find a listener trying to listen again, the first record will
be deleted and we are just going to consider the last one comming in.
*/
for (let i = 0; i < thisObject.listeners.length; i++) {
if (eventHandlerName === thisObject.listeners[i][0] && eventType === thisObject.listeners[i][1] && callerId === thisObject.listeners[i][2]) {
found = true
thisObject.listeners.splice(i, 1)
break
}
}
if (found === false) {
thisObject.listeners.push([eventHandlerName, eventType, callerId, handler, extraData, eventSubscriptionId])
}
thisObject.listeners.push([eventHandlerName, eventType, callerId, handler, extraData, eventSubscriptionId])
return eventSubscriptionId
}
File renamed without changes.
@@ -1,32 +1,27 @@
{
"_args": [
[
"balanced-match@1.0.0",
"C:\\Users\\Luis\\source\\repos\\AAMasters\\WebServer"
]
],
"_from": "balanced-match@1.0.0",
"_from": "balanced-match@^1.0.0",
"_id": "balanced-match@1.0.0",
"_inBundle": false,
"_integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"_location": "/balanced-match",
"_phantomChildren": {},
"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "balanced-match@1.0.0",
"raw": "balanced-match@^1.0.0",
"name": "balanced-match",
"escapedName": "balanced-match",
"rawSpec": "1.0.0",
"rawSpec": "^1.0.0",
"saveSpec": null,
"fetchSpec": "1.0.0"
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/brace-expansion"
],
"_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"_spec": "1.0.0",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\WebServer",
"_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
"_spec": "balanced-match@^1.0.0",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\BackendServers\\node_modules\\brace-expansion",
"author": {
"name": "Julian Gruber",
"email": "mail@juliangruber.com",
@@ -35,7 +30,9 @@
"bugs": {
"url": "https://github.com/juliangruber/balanced-match/issues"
},
"bundleDependencies": false,
"dependencies": {},
"deprecated": false,
"description": "Match balanced character pairs, like \"{\" and \"}\"",
"devDependencies": {
"matcha": "^0.7.0",
File renamed without changes.
@@ -1,32 +1,27 @@
{
"_args": [
[
"brace-expansion@1.1.11",
"C:\\Users\\Luis\\source\\repos\\AAMasters\\WebServer"
]
],
"_from": "brace-expansion@1.1.11",
"_from": "brace-expansion@^1.1.7",
"_id": "brace-expansion@1.1.11",
"_inBundle": false,
"_integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"_location": "/brace-expansion",
"_phantomChildren": {},
"_requested": {
"type": "version",
"type": "range",
"registry": true,
"raw": "brace-expansion@1.1.11",
"raw": "brace-expansion@^1.1.7",
"name": "brace-expansion",
"escapedName": "brace-expansion",
"rawSpec": "1.1.11",
"rawSpec": "^1.1.7",
"saveSpec": null,
"fetchSpec": "1.1.11"
"fetchSpec": "^1.1.7"
},
"_requiredBy": [
"/minimatch"
],
"_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"_spec": "1.1.11",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\WebServer",
"_shasum": "3c7fcbf529d87226f3d2f52b966ff5271eb441dd",
"_spec": "brace-expansion@^1.1.7",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\BackendServers\\node_modules\\minimatch",
"author": {
"name": "Julian Gruber",
"email": "mail@juliangruber.com",
@@ -35,10 +30,12 @@
"bugs": {
"url": "https://github.com/juliangruber/brace-expansion/issues"
},
"bundleDependencies": false,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
},
"deprecated": false,
"description": "Brace expansion as known from sh/bash",
"devDependencies": {
"matcha": "^0.7.0",
@@ -26,9 +26,9 @@ function cleanupOldTags () {
const tagsByMajorMinor = values (groupBy (tags, 'key')).sort ((a, b) => a[0].key - b[0].key)
// Preserve all tags for first 3 minor versions
// Preserve all tags for first 5 minor versions
for (let i = 0; i < 3; i++) {
for (let i = 0; i < 5; i++) {
const tags = tagsByMajorMinor.pop ()
File renamed without changes.
@@ -93,7 +93,7 @@ function createExchanges (ids) {
// ----------------------------------------------------------------------------
// TODO: REWRITE THIS ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
function exportSupportedAndCertifiedExchanges (exchanges, wikiPath) {
function exportSupportedAndCertifiedExchanges (exchanges, { allExchangesPaths, certifiedExchangesPaths, exchangesByCountriesPaths, proExchangesPaths }) {
// ............................................................................
// markup constants and helper functions
@@ -109,33 +109,35 @@ function exportSupportedAndCertifiedExchanges (exchanges, wikiPath) {
// ----------------------------------------------------------------------------
// list all supported exchanges
const exchangesNotListedInDocs = []
const exchangesNotListedInDocs = [ 'hitbtc2' ]
let tableData = values (exchanges)
.filter (exchange => !exchangesNotListedInDocs.includes (exchange.id))
.map (exchange => {
let logo = exchange.urls['logo']
let website = Array.isArray (exchange.urls.www) ? exchange.urls.www[0] : exchange.urls.www
let url = exchange.urls.referral || website
let doc = Array.isArray (exchange.urls.doc) ? exchange.urls.doc[0] : exchange.urls.doc
let version = exchange.version ? exchange.version : '\*'
let matches = version.match (/[^0-9]*([0-9].*)/)
if (matches) {
version = matches[1];
}
return [
'[![' + exchange.id + '](' + logo + ')](' + url + ')',
exchange.id,
'[' + exchange.name + '](' + url + ')',
version,
'[API](' + doc + ')',
exchange.certified ? ccxtCertifiedBadge : '',
exchange.pro ? ccxtProBadge : '',
]
})
function makeTableData (exchanges) {
return (
values (exchanges)
.filter (exchange => !exchangesNotListedInDocs.includes (exchange.id))
.map (exchange => {
let logo = exchange.urls['logo']
let website = Array.isArray (exchange.urls.www) ? exchange.urls.www[0] : exchange.urls.www
let url = exchange.urls.referral || website
let doc = Array.isArray (exchange.urls.doc) ? exchange.urls.doc[0] : exchange.urls.doc
let version = exchange.version ? exchange.version : '\*'
let matches = version.match (/[^0-9]*([0-9].*)/)
if (matches) {
version = matches[1];
}
return [
'[![' + exchange.id + '](' + logo + ')](' + url + ')',
exchange.id,
'[' + exchange.name + '](' + url + ')',
version,
'[API](' + doc + ')',
exchange.certified ? ccxtCertifiedBadge : '',
exchange.pro ? ccxtProBadge : '',
]
})
)
}
// prepend the table header
tableData.splice (0, 0, tableHeadings)
function makeTable (jsonArray) {
let table = asTable.configure ({ 'delimiter': ' | ' }) (jsonArray)
@@ -148,88 +150,128 @@ function exportSupportedAndCertifiedExchanges (exchanges, wikiPath) {
return lines.map (line => '|' + line + '|').join ("\n")
}
const exchangesTable = makeTable (tableData)
const numExchanges = keys (exchanges).length
const beginning = "The ccxt library currently supports the following "
const ending = " cryptocurrency exchange markets and trading APIs:\n\n"
const totalString = beginning + numExchanges + ending
const allExchanges = totalString + exchangesTable + "$1"
const allExchangesRegex = new RegExp ("[^\n]+[\n]{2}\\|[^`]+\\|([\n][\n]|[\n]$|$)", 'm')
logExportExchanges ('README.md', allExchangesRegex, allExchanges)
logExportExchanges (wikiPath + '/Manual.md', allExchangesRegex, allExchanges)
logExportExchanges (wikiPath + '/Exchange-Markets.md', allExchangesRegex, allExchanges)
if (allExchangesPaths) {
const certifiedFieldIndex = tableHeadings.indexOf ('certified')
const certified = tableData.filter ((x) => x[certifiedFieldIndex] !== '' )
const certifiedExchangesRegex = new RegExp ("^(## Certified Cryptocurrency Exchanges\n{3})(?:\\|.+\\|$\n)+", 'm')
const certifiedExchangesTable = makeTable (certified)
const certifiedExchanges = '$1' + certifiedExchangesTable + "\n"
logExportExchanges ('README.md', certifiedExchangesRegex, certifiedExchanges)
const tableData = makeTableData (exchanges)
const numExchanges = tableData.length
// prepend the table header
tableData.splice (0, 0, tableHeadings)
const exchangesTable = makeTable (tableData)
const beginning = "The CCXT library currently supports the following "
const ending = " cryptocurrency exchange markets and trading APIs:\n\n"
const totalString = beginning + numExchanges + ending
const allExchanges = totalString + exchangesTable + "$1"
const allExchangesRegex = new RegExp ("[^\n]+[\n]{2}\\|[^`]+\\|([\n][\n]|[\n]$|$)", 'm')
for (const path of allExchangesPaths) {
logExportExchanges (path, allExchangesRegex, allExchanges)
}
let exchangesByCountries = []
keys (countries).forEach (code => {
let country = countries[code]
let result = []
keys (exchanges).forEach (id => {
let exchange = exchanges[id]
let logo = exchange.urls['logo']
let website = Array.isArray (exchange.urls.www) ? exchange.urls.www[0] : exchange.urls.www
let url = exchange.urls.referral || website
let doc = Array.isArray (exchange.urls.doc) ? exchange.urls.doc[0] : exchange.urls.doc
let version = exchange.version ? exchange.version : '\*'
let matches = version.match (/[^0-9]*([0-9].*)/)
if (matches)
version = matches[1];
let shouldInclude = false
if (Array.isArray (exchange.countries)) {
if (exchange.countries.indexOf (code) > -1)
shouldInclude = true
// logExportExchanges ('README.md', allExchangesRegex, allExchanges)
// logExportExchanges (wikiPath + '/Manual.md', allExchangesRegex, allExchanges)
// logExportExchanges (wikiPath + '/Exchange-Markets.md', allExchangesRegex, allExchanges)
}
if (proExchangesPaths) {
const pro = values (exchanges).filter (exchange => exchange.pro)
const tableData = makeTableData (pro)
const numExchanges = tableData.length
// prepend the table header
tableData.splice (0, 0, tableHeadings)
const exchangesTable = makeTable (tableData)
const beginning = "The CCXT Pro library currently supports the following "
const ending = " cryptocurrency exchange markets and WebSocket trading APIs:\n\n"
const totalString = beginning + numExchanges + ending
const proExchanges = totalString + exchangesTable + "$1"
const proExchangesRegex = new RegExp ("[^\n]+[\n]{2}\\|[^`]+\\|([\n][\n]|[\n]$|$)", 'm')
for (const path of proExchangesPaths) {
logExportExchanges (path, proExchangesRegex, proExchanges)
}
}
if (certifiedExchangesPaths) {
const certified = values (exchanges).filter (exchange => exchange.certified)
const tableData = makeTableData (certified)
// prepend the table header
tableData.splice (0, 0, tableHeadings)
const certifiedExchangesRegex = new RegExp ("^(## Certified Cryptocurrency Exchanges\n{3})(?:\\|.+\\|$\n)+", 'm')
const certifiedExchangesTable = makeTable (tableData)
const certifiedExchanges = '$1' + certifiedExchangesTable + "\n"
for (const path of certifiedExchangesPaths) {
logExportExchanges (path, certifiedExchangesRegex, certifiedExchanges)
}
// logExportExchanges ('README.md', certifiedExchangesRegex, certifiedExchanges)
}
if (exchangesByCountriesPaths) {
let exchangesByCountries = []
keys (countries).forEach (code => {
let country = countries[code]
let result = []
keys (exchanges).forEach (id => {
let exchange = exchanges[id]
let logo = exchange.urls['logo']
let website = Array.isArray (exchange.urls.www) ? exchange.urls.www[0] : exchange.urls.www
let url = exchange.urls.referral || website
let doc = Array.isArray (exchange.urls.doc) ? exchange.urls.doc[0] : exchange.urls.doc
let version = exchange.version ? exchange.version : '\*'
let matches = version.match (/[^0-9]*([0-9].*)/)
if (matches)
version = matches[1];
let shouldInclude = false
if (Array.isArray (exchange.countries)) {
if (exchange.countries.indexOf (code) > -1)
shouldInclude = true
} else {
if (code == exchange.countries)
shouldInclude = true
}
if (shouldInclude) {
let entry = [
country,
'[![' + exchange.id + '](' + logo + ')](' + url + ')',
exchange.id,
'[' + exchange.name + '](' + url + ')',
version,
'[API](' + doc + ')',
// doesn't fit in width
// exchange.certified ? ccxtCertifiedBadge : '',
]
result.push (entry)
}
})
exchangesByCountries = exchangesByCountries.concat (result)
});
const countryKeyIndex = exchangesByCountryHeading.indexOf ('country / region')
exchangesByCountries = exchangesByCountries.sort ((a, b) => {
const countryA = a[countryKeyIndex].toLowerCase ()
const countryB = b[countryKeyIndex].toLowerCase ()
if (countryA > countryB) {
return 1
} else if (countryA < countryB) {
return -1;
} else {
if (code == exchange.countries)
shouldInclude = true
}
if (shouldInclude) {
let entry = [
country,
'[![' + exchange.id + '](' + logo + ')](' + url + ')',
exchange.id,
'[' + exchange.name + '](' + url + ')',
version,
'[API](' + doc + ')',
// doesn't fit in width
// exchange.certified ? ccxtCertifiedBadge : '',
]
result.push (entry)
if (a['id'] > b['id'])
return 1;
else if (a['id'] < b['id'])
return -1;
else
return 0;
}
})
exchangesByCountries = exchangesByCountries.concat (result)
});
let countryKeyIndex = exchangesByCountryHeading.indexOf ('country / region')
exchangesByCountries = exchangesByCountries.sort ((a, b) => {
let countryA = a[countryKeyIndex].toLowerCase ()
let countryB = b[countryKeyIndex].toLowerCase ()
if (countryA > countryB) {
return 1
} else if (countryA < countryB) {
return -1;
} else {
if (a['id'] > b['id'])
return 1;
else if (a['id'] < b['id'])
return -1;
else
return 0;
exchangesByCountries.splice (0, 0, exchangesByCountryHeading)
const lines = makeTable (exchangesByCountries)
const result = "# Exchanges By Country\n\nThe ccxt library currently supports the following cryptocurrency exchange markets and trading APIs:\n\n" + lines + "\n\n"
for (const path of exchangesByCountriesPaths) {
fs.truncateSync (path)
fs.writeFileSync (path, result)
}
})
exchangesByCountries.splice (0, 0, exchangesByCountryHeading)
let lines = makeTable (exchangesByCountries)
let result = "# Exchanges By Country\n\nThe ccxt library currently supports the following cryptocurrency exchange markets and trading APIs:\n\n" + lines + "\n\n"
let filename = wikiPath + '/Exchange-Markets-By-Country.md'
fs.truncateSync (filename)
fs.writeFileSync (filename, result)
}
}
// TODO: REWRITE THIS ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
@@ -237,7 +279,9 @@ function exportSupportedAndCertifiedExchanges (exchanges, wikiPath) {
function exportExchangeIdsToExchangesJson (exchanges) {
log.bright ('Exporting exchange ids to'.cyan, 'exchanges.json'.yellow)
fs.writeFileSync ('exchanges.json', JSON.stringify ({ ids: keys (exchanges) }, null, 4))
const ids = keys (exchanges)
console.log (ids)
fs.writeFileSync ('exchanges.json', JSON.stringify ({ ids }, null, 4))
}
// ----------------------------------------------------------------------------
@@ -284,19 +328,26 @@ function exportKeywordsToPackageJson (exchanges) {
}
packageJSON.keywords = [...keywords]
fs.writeFileSync ('./package.json', JSON.stringify (packageJSON, null, 2))
fs.writeFileSync ('./package.json', JSON.stringify (packageJSON, null, 2) + "\n")
}
// ----------------------------------------------------------------------------
function flatten (nested, result = []) {
for (const key in nested) {
result.push (key)
if (Object.keys (nested[key]).length)
flatten (nested[key], result)
}
return result
}
function exportEverything () {
const wikiPath = 'wiki'
, gitWikiPath = 'build/ccxt.wiki'
cloneGitHubWiki (gitWikiPath)
const ids = getIncludedExchangeIds ()
const errorHierarchy = require ('../js/base/errorHierarchy.js')
const flat = flatten (errorHierarchy)
flat.push ('error_hierarchy')
const replacements = [
{
@@ -314,6 +365,16 @@ function exportEverything () {
regex: /(?:from ccxt\.[^\.]+ import [^\s]+\s+\# noqa\: F401[\r]?[\n])+[\r]?[\n]exchanges/,
replacement: ids.map (id => ('from ccxt.' + id + ' import ' + id).padEnd (60) + '# noqa: F401').join ("\n") + "\n\nexchanges",
},
{
file: './python/ccxt/__init__.py',
regex: /(?:from ccxt\.base\.errors import [^\s]+\s+\# noqa\: F401[\r]?[\n])+[\r]?[\n]/,
replacement: flat.map (error => ('from ccxt.base.errors' + ' import ' + error).padEnd (60) + '# noqa: F401').join ("\n") + "\n\n",
},
{
file: './python/ccxt/async_support/__init__.py',
regex: /(?:from ccxt\.base\.errors import [^\s]+\s+\# noqa\: F401[\r]?[\n])+[\r]?[\n]/,
replacement: flat.map (error => ('from ccxt.base.errors' + ' import ' + error).padEnd (60) + '# noqa: F401').join ("\n") + "\n\n",
},
{
file: './python/ccxt/async_support/__init__.py',
regex: /(?:from ccxt\.async_support\.[^\.]+ import [^\s]+\s+\# noqa\: F401[\r]?[\n])+[\r]?[\n]exchanges/,
@@ -336,7 +397,28 @@ function exportEverything () {
// strategically placed exactly here (we can require it AFTER the export)
const exchanges = createExchanges (ids)
exportSupportedAndCertifiedExchanges (exchanges, wikiPath)
const wikiPath = 'wiki'
, gitWikiPath = 'build/ccxt.wiki'
cloneGitHubWiki (gitWikiPath)
exportSupportedAndCertifiedExchanges (exchanges, {
allExchangesPaths: [
'README.md',
wikiPath + '/Manual.md',
wikiPath + '/Exchange-Markets.md'
],
certifiedExchangesPaths: [
'README.md',
],
exchangesByCountriesPaths: [
wikiPath + '/Exchange-Markets-By-Country.md'
],
proExchangesPaths: [
wikiPath + '/ccxt.pro.manual.md',
],
})
exportExchangeIdsToExchangesJson (exchanges)
exportWikiToGitHub (wikiPath, gitWikiPath)
exportKeywordsToPackageJson (exchanges)
File renamed without changes.
@@ -5,16 +5,23 @@
"use strict";
const fs = require ('fs')
, log = require ('ololog')
, log = require ('ololog').unlimited
, _ = require ('ansicolor').nice
, errors = require ('../js/base/errors.js')
, { unCamelCase, precisionConstants, safeString } = require ('../js/base/functions.js')
, functions = require ('../js/base/functions.js')
, {
unCamelCase,
precisionConstants,
safeString,
unique,
} = functions
, { basename } = require ('path')
, {
createFolderRecursively,
replaceInFile,
overwriteFile,
} = require ('./fs.js')
, Exchange = require ('../js/base/Exchange.js')
class Transpiler {
@@ -60,6 +67,7 @@ class Transpiler {
[ /\.parseTrades\s/g, '.parse_trades'],
[ /\.parseTrade\s/g, '.parse_trade'],
[ /\.parseTradingViewOHLCV\s/g, '.parse_trading_view_ohlcv'],
[ /\.convertTradingViewToOHLCV\s/g, '.convert_trading_view_to_ohlcv'],
[ /\.parseTransaction\s/g, '.parse_transaction'],
[ /\.parseTransactions\s/g, '.parse_transactions'],
[ /\.parseOrderBook\s/g, '.parse_order_book'],
@@ -299,7 +307,9 @@ class Transpiler {
[ /this\.stringToBase64\s/g, 'base64_encode' ],
[ /this\.binaryToBase16\s/g, 'bin2hex' ],
[ /this\.base64ToBinary\s/g, 'base64_decode' ],
[ /this\.deepExtend\s/g, 'array_replace_recursive'],
// deepExtend is commented for PHP because it does not overwrite linear arrays
// a proper \ccxt\Exchange::deep_extend() base method is implemented instead
// [ /this\.deepExtend\s/g, 'array_replace_recursive'],
[ /(\w+)\.shift\s*\(\)/g, 'array_shift($1)' ],
[ /(\w+)\.pop\s*\(\)/g, 'array_pop($1)' ],
[ /Number\.MAX_SAFE_INTEGER/g, 'PHP_INT_MAX' ],
@@ -382,12 +392,27 @@ class Transpiler {
])
}
getBaseClass () {
return new Exchange ()
}
getBaseMethods () {
const baseExchange = this.getBaseClass ()
let object = baseExchange
let properties = []
while (object !== Object.prototype) {
properties = properties.concat (Object.getOwnPropertyNames (object))
object = Object.getPrototypeOf (object)
}
return properties.filter (x => typeof baseExchange[x] === 'function')
}
getPythonBaseMethods () {
return []
return this.getBaseMethods ()
}
getPHPBaseMethods () {
return []
return this.getBaseMethods ()
}
//-------------------------------------------------------------------------
@@ -589,10 +614,10 @@ class Transpiler {
methods = methods.concat (this.getPHPBaseMethods ())
for (let method of methods) {
const regex = new RegExp ('\\$this->(' + method + ')(\\s\\(|[^a-zA-Z0-9_])', 'g')
const regex = new RegExp ('\\$this->(' + method + ')\\s?(\\(|[^a-zA-Z0-9_])', 'g')
bodyAsString = bodyAsString.replace (regex,
(match, p1, p2) => {
return ((p2 === ' (') ?
return ((p2 === '(') ?
('$this->' + unCamelCase (p1) + p2) : // support direct php calls
("array($this, '" + unCamelCase (p1) + "')" + p2)) // as well as passing instance methods as callables
})
@@ -748,7 +773,7 @@ class Transpiler {
// ------------------------------------------------------------------------
transpileDerivedExchangeClass (contents) {
transpileDerivedExchangeClass (contents, methodNames = undefined) {
let exchangeClassDeclarationMatches = contents.match (/^module\.exports\s*=\s*class\s+([\S]+)\s+extends\s+([\S]+)\s+{([\s\S]+?)^};*/m)
@@ -763,7 +788,7 @@ class Transpiler {
let python3 = []
let php = []
let methodNames = []
methodNames = [] // methodNames || []
// run through all methods
for (let i = 0; i < methods.length; i++) {
@@ -839,7 +864,7 @@ class Transpiler {
// compile signature + body for PHP
php.push ('');
php.push (' public function ' + method + ' (' + phpArgs + ') {');
php.push (' public function ' + method + '(' + phpArgs + ') {');
php.push (phpBody);
php.push (' }')
@@ -866,8 +891,25 @@ class Transpiler {
try {
const { python2Folder, python3Folder, phpFolder } = options
const contents = fs.readFileSync (jsFolder + filename, 'utf8')
const { python2, python3, php, className, baseClass } = this.transpileDerivedExchangeClass (contents)
const path = jsFolder + filename
const contents = fs.readFileSync (path, 'utf8')
// function getMethodNames (object) {
// let functions = []
// let o = object
// do {
// functions = functions.concat (Object.getOwnPropertyNames (o))
// } while (o = Object.getPrototypeOf (o))
// return unique (functions.filter (f => (typeof object[f] === 'function')))
// }
// const exchangeClass = require ('.' + path)
// const exchange = new exchangeClass ()
// const methodNames = getMethodNames (exchange)
// const { python2, python3, php, className, baseClass } =
// this.transpileDerivedExchangeClass (contents, methodNames)
const { python2, python3, php, className, baseClass } =
this.transpileDerivedExchangeClass (contents)
log.cyan ('Transpiling from', filename.yellow)
@@ -943,9 +985,7 @@ class Transpiler {
// ========================================================================
exportTypeScriptDeclarations (classes) {
const file = './ccxt.d.ts'
exportTypeScriptDeclarations (file, classes) {
log.bright.cyan ('Exporting TypeScript declarations →', file.yellow)
@@ -1134,11 +1174,11 @@ class Transpiler {
"",
"",
"def toWei(amount, decimals):",
" return Exchange.toWei(amount, decimals)",
" return Exchange.to_wei(amount, decimals)",
"",
"",
"def fromWei(amount, decimals):",
" return Exchange.fromWei(amount, decimals)",
" return Exchange.from_wei(amount, decimals)",
"",
"",
].join ("\n")
@@ -1163,10 +1203,10 @@ class Transpiler {
" return Exchange::number_to_string ($x);",
"}",
"function toWei ($amount, $decimals) {",
" return Exchange::toWei ($amount, $decimals);",
" return Exchange::to_wei ($amount, $decimals);",
"}",
"function fromWei ($amount, $decimals) {",
" return Exchange::fromWei ($amount, $decimals);",
" return Exchange::from_wei ($amount, $decimals);",
"}",
"",
].join ("\n")
@@ -1274,7 +1314,7 @@ class Transpiler {
// HINT: if we're going to support specific class definitions
// this process won't work anymore as it will override the definitions
this.exportTypeScriptDeclarations (classes)
this.exportTypeScriptDeclarations ('./ccxt.d.ts', classes)
//*/
File renamed without changes.
File renamed without changes.
@@ -35,7 +35,7 @@ const Exchange = require ('./js/base/Exchange')
//-----------------------------------------------------------------------------
// this is updated by vss.js when building
const version = '1.23.67'
const version = '1.26.45'
Exchange.ccxtVersion = version
@@ -46,6 +46,7 @@ const exchanges = {
'acx': require ('./js/acx.js'),
'adara': require ('./js/adara.js'),
'anxpro': require ('./js/anxpro.js'),
'aofex': require ('./js/aofex.js'),
'bcex': require ('./js/bcex.js'),
'bequant': require ('./js/bequant.js'),
'bibox': require ('./js/bibox.js'),
@@ -62,7 +63,6 @@ const exchanges = {
'bitforex': require ('./js/bitforex.js'),
'bithumb': require ('./js/bithumb.js'),
'bitkk': require ('./js/bitkk.js'),
'bitlish': require ('./js/bitlish.js'),
'bitmart': require ('./js/bitmart.js'),
'bitmax': require ('./js/bitmax.js'),
'bitmex': require ('./js/bitmex.js'),
@@ -76,17 +76,16 @@ const exchanges = {
'braziliex': require ('./js/braziliex.js'),
'btcalpha': require ('./js/btcalpha.js'),
'btcbox': require ('./js/btcbox.js'),
'btcchina': require ('./js/btcchina.js'),
'btcmarkets': require ('./js/btcmarkets.js'),
'btctradeim': require ('./js/btctradeim.js'),
'btctradeua': require ('./js/btctradeua.js'),
'btcturk': require ('./js/btcturk.js'),
'buda': require ('./js/buda.js'),
'bw': require ('./js/bw.js'),
'bybit': require ('./js/bybit.js'),
'bytetrade': require ('./js/bytetrade.js'),
'cex': require ('./js/cex.js'),
'chilebit': require ('./js/chilebit.js'),
'cobinhood': require ('./js/cobinhood.js'),
'coinbase': require ('./js/coinbase.js'),
'coinbaseprime': require ('./js/coinbaseprime.js'),
'coinbasepro': require ('./js/coinbasepro.js'),
@@ -140,10 +139,8 @@ const exchanges = {
'mercado': require ('./js/mercado.js'),
'mixcoins': require ('./js/mixcoins.js'),
'oceanex': require ('./js/oceanex.js'),
'okcoincny': require ('./js/okcoincny.js'),
'okcoinusd': require ('./js/okcoinusd.js'),
'okcoin': require ('./js/okcoin.js'),
'okex': require ('./js/okex.js'),
'okex3': require ('./js/okex3.js'),
'paymium': require ('./js/paymium.js'),
'poloniex': require ('./js/poloniex.js'),
'rightbtc': require ('./js/rightbtc.js'),
File diff suppressed because it is too large. Load diff
File renamed without changes.
@@ -134,6 +134,8 @@ module.exports = class acx extends Exchange {
'quoteId': quoteId,
'precision': precision,
'info': market,
'active': undefined,
'limits': this.limits,
});
}
return result;
@@ -325,6 +327,7 @@ module.exports = class acx extends Exchange {
const id = this.safeString (order, 'id');
return {
'id': id,
'clientOrderId': undefined,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -339,6 +342,8 @@ module.exports = class acx extends Exchange {
'trades': undefined,
'fee': undefined,
'info': order,
'cost': undefined,
'average': undefined,
};
}
File renamed without changes.
@@ -469,6 +469,7 @@ module.exports = class anxpro extends Exchange {
'cost': cost,
'fee': undefined,
'info': trade,
'takerOrMaker': undefined,
};
}
@@ -974,6 +975,7 @@ module.exports = class anxpro extends Exchange {
const cost = executedAverageRate * filled;
return {
'id': this.safeString (order, 'orderId'),
'clientOrderId': undefined,
'symbol': symbol,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
@@ -989,6 +991,7 @@ module.exports = class anxpro extends Exchange {
'fee': undefined,
'trades': trades,
'info': order,
'average': undefined,
};
}
@@ -1066,6 +1069,7 @@ module.exports = class anxpro extends Exchange {
return {
'info': order,
'id': id,
'clientOrderId': undefined,
'symbol': symbol,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
@@ -1080,6 +1084,7 @@ module.exports = class anxpro extends Exchange {
'status': status,
'fee': fee,
'trades': trades,
'average': undefined,
};
}
+1125
View File
File diff suppressed because it is too large. Load diff
File renamed without changes.
@@ -166,6 +166,7 @@ module.exports = class Exchange {
'429': RateLimitExceeded,
'404': ExchangeNotAvailable,
'409': ExchangeNotAvailable,
'410': ExchangeNotAvailable,
'500': ExchangeNotAvailable,
'501': ExchangeNotAvailable,
'502': ExchangeNotAvailable,
@@ -461,42 +462,50 @@ module.exports = class Exchange {
}
}
print (... args) {
console.log (... args)
}
fetch (url, method = 'GET', headers = undefined, body = undefined) {
if (isNode && this.userAgent) {
if (typeof this.userAgent === 'string')
if (typeof this.userAgent === 'string') {
headers = extend ({ 'User-Agent': this.userAgent }, headers)
else if ((typeof this.userAgent === 'object') && ('User-Agent' in this.userAgent))
} else if ((typeof this.userAgent === 'object') && ('User-Agent' in this.userAgent)) {
headers = extend (this.userAgent, headers)
}
}
if (typeof this.proxy === 'function') {
url = this.proxy (url)
if (isNode)
if (isNode) {
headers = extend ({ 'Origin': this.origin }, headers)
}
} else if (typeof this.proxy === 'string') {
if (this.proxy.length)
if (isNode)
headers = extend ({ 'Origin': this.origin }, headers)
if (this.proxy.length && isNode) {
headers = extend ({ 'Origin': this.origin }, headers)
}
url = this.proxy + url
}
headers = extend (this.headers, headers)
if (this.verbose)
console.log ("fetch:\n", this.id, method, url, "\nRequest:\n", headers, "\n", body, "\n")
if (this.verbose) {
this.print ("fetch:\n", this.id, method, url, "\nRequest:\n", headers, "\n", body, "\n")
}
return this.executeRestRequest (url, method, headers, body)
}
async fetch2 (path, type = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
if (this.enableRateLimit)
if (this.enableRateLimit) {
await this.throttle (this.rateLimit)
}
const request = this.sign (path, type, method, params, headers, body)
return this.fetch (request.url, request.method, request.headers, request.body)
@@ -611,8 +620,9 @@ module.exports = class Exchange {
this.last_json_response = json // FIXME: for those classes that haven't switched to handleErrors yet
}
if (this.verbose)
console.log ("handleRestResponse:\n", this.id, method, url, response.status, response.statusText, "\nResponse:\n", responseHeaders, "\n", responseBody, "\n")
if (this.verbose) {
this.print ("handleRestResponse:\n", this.id, method, url, response.status, response.statusText, "\nResponse:\n", responseHeaders, "\n", responseBody, "\n")
}
this.handleErrors (response.status, response.statusText, url, method, responseHeaders, responseBody, json, requestHeaders, requestBody)
this.defaultErrorHandler (response.status, response.statusText, url, method, responseHeaders, responseBody, json)
@@ -634,7 +644,7 @@ module.exports = class Exchange {
if (currencies) {
this.currencies = deepExtend (currencies, this.currencies)
} else {
const baseCurrencies =
let baseCurrencies =
values.filter (market => 'base' in market)
.map (market => ({
id: market.baseId || market.base,
@@ -642,7 +652,7 @@ module.exports = class Exchange {
code: market.base,
precision: market.precision ? (market.precision.base || market.precision.amount) : 8,
}))
const quoteCurrencies =
let quoteCurrencies =
values.filter (market => 'quote' in market)
.map (market => ({
id: market.quoteId || market.quote,
@@ -650,6 +660,10 @@ module.exports = class Exchange {
code: market.quote,
precision: market.precision ? (market.precision.quote || market.precision.price) : 8,
}))
baseCurrencies = sortBy (baseCurrencies, 'code')
quoteCurrencies = sortBy (quoteCurrencies, 'code')
this.baseCurrencies = indexBy (baseCurrencies, 'code')
this.quoteCurrencies = indexBy (quoteCurrencies, 'code')
const allCurrencies = baseCurrencies.concat (quoteCurrencies)
const groupedCurrencies = groupBy (allCurrencies, 'code')
const currencies = Object.keys (groupedCurrencies).map (code =>
@@ -677,27 +691,19 @@ module.exports = class Exchange {
return this.setMarkets (markets, currencies)
}
async loadMarkets (reload = false, params = {}) {
if (this.marketsLoaded) {
if (reload) {
return this.loadMarketsHelper (reload, params)
}
return this.markets
} else {
if (!this.marketsLoading) {
this.marketsLoading = new Promise (async (resolve, reject) => {
try {
const result = await this.loadMarketsHelper (reload, params)
this.marketsLoaded = true
this.marketsLoading = false
resolve (result)
} catch (e) {
reject (e)
}
})
}
return this.marketsLoading
// is async (returns a promise)
loadMarkets (reload = false, params = {}) {
if ((reload && !this.reloadingMarkets) || !this.marketsLoading) {
this.reloadingMarkets = true
this.marketsLoading = this.loadMarketsHelper (reload, params).then ((resolved) => {
this.reloadingMarkets = false
return resolved
}, (error) => {
this.reloadingMarkets = false
throw error
})
}
return this.marketsLoading
}
async loadAccounts (reload = false, params = {}) {
@@ -737,43 +743,42 @@ module.exports = class Exchange {
}
parseTradingViewOHLCV (ohlcvs, market = undefined, timeframe = '1m', since = undefined, limit = undefined) {
const result = this.convertTradingViewToOHLCV (ohlcvs);
return this.parseOHLCVs (result, market, timeframe, since, limit);
const result = this.convertTradingViewToOHLCV (ohlcvs)
return this.parseOHLCVs (result, market, timeframe, since, limit)
}
convertTradingViewToOHLCV (ohlcvs) {
convertTradingViewToOHLCV (ohlcvs, t = 't', o = 'o', h = 'h', l = 'l', c = 'c', v = 'v', ms = false) {
const result = [];
for (let i = 0; i < ohlcvs['t'].length; i++) {
for (let i = 0; i < ohlcvs[t].length; i++) {
result.push ([
ohlcvs['t'][i] * 1000,
ohlcvs['o'][i],
ohlcvs['h'][i],
ohlcvs['l'][i],
ohlcvs['c'][i],
ohlcvs['v'][i],
]);
ms ? ohlcvs[t][i] : (ohlcvs[t][i] * 1000),
ohlcvs[o][i],
ohlcvs[h][i],
ohlcvs[l][i],
ohlcvs[c][i],
ohlcvs[v][i],
])
}
return result;
return result
}
convertOHLCVToTradingView (ohlcvs) {
const result = {
't': [],
'o': [],
'h': [],
'l': [],
'c': [],
'v': [],
};
convertOHLCVToTradingView (ohlcvs, t = 't', o = 'o', h = 'h', l = 'l', c = 'c', v = 'v', ms = false) {
const result = {}
result[t] = []
result[o] = []
result[h] = []
result[l] = []
result[c] = []
result[v] = []
for (let i = 0; i < ohlcvs.length; i++) {
result['t'].push (parseInt (ohlcvs[i][0] / 1000));
result['o'].push (ohlcvs[i][1]);
result['h'].push (ohlcvs[i][2]);
result['l'].push (ohlcvs[i][3]);
result['c'].push (ohlcvs[i][4]);
result['v'].push (ohlcvs[i][5]);
result[t].push (ms ? ohlcvs[i][0] : parseInt (ohlcvs[i][0] / 1000))
result[o].push (ohlcvs[i][1])
result[h].push (ohlcvs[i][2])
result[l].push (ohlcvs[i][3])
result[c].push (ohlcvs[i][4])
result[v].push (ohlcvs[i][5])
}
return result;
return result
}
fetchTicker (symbol, params = {}) {
@@ -1038,27 +1043,34 @@ module.exports = class Exchange {
return this.markets;
}
filterBySinceLimit (array, since = undefined, limit = undefined, key = 'timestamp') {
if (since !== undefined && since !== null)
array = array.filter (entry => entry[key] >= since)
if (limit !== undefined && limit !== null)
array = array.slice (0, limit)
filterBySinceLimit (array, since = undefined, limit = undefined, key = 'timestamp', tail = false) {
const sinceIsDefined = (since !== undefined && since !== null)
if (sinceIsDefined) {
array = array.filter ((entry) => entry[key] >= since)
}
if (limit !== undefined && limit !== null) {
array = (tail && !sinceIsDefined) ? array.slice (-limit) : array.slice (0, limit)
}
return array
}
filterByValueSinceLimit (array, field, value = undefined, since = undefined, limit = undefined) {
filterByValueSinceLimit (array, field, value = undefined, since = undefined, limit = undefined, key = 'timestamp', tail = false) {
const valueIsDefined = value !== undefined && value !== null
const sinceIsDefined = since !== undefined && since !== null
// single-pass filter for both symbol and since
if (valueIsDefined || sinceIsDefined)
array = Object.values (array).filter (entry =>
((valueIsDefined ? (entry[field] === value) : true) &&
(sinceIsDefined ? (entry.timestamp >= since) : true)))
if (valueIsDefined || sinceIsDefined) {
array = Object.values (array).filter ((entry) =>
((valueIsDefined ? (entry[field] === value) : true) &&
(sinceIsDefined ? (entry[key] >= since) : true)))
}
if (limit !== undefined && limit !== null)
array = Object.values (array).slice (0, limit)
if (limit !== undefined && limit !== null) {
array = ((tail && !sinceIsDefined) ?
Object.values (array).slice (-limit) :
Object.values (array).slice (0, limit))
}
return array
}
@@ -1076,13 +1088,15 @@ module.exports = class Exchange {
objects = Object.values (objects)
// return all of them if no values were passed
if (values === undefined || values === null)
if (values === undefined || values === null) {
return indexed ? indexBy (objects, key) : objects
}
const result = []
for (let i = 0; i < objects.length; i++) {
if (values.includes (objects[i][key]))
if (values.includes (objects[i][key])) {
result.push (objects[i])
}
}
return indexed ? indexBy (result, key) : result
@@ -1093,7 +1107,7 @@ module.exports = class Exchange {
// if (!this.isArray (trades)) {
// throw new ExchangeError (this.id + ' parseTrades expected an array in the trades argument, but got ' + typeof trades);
// }
let result = Object.values (trades || []).map (trade => this.extend (this.parseTrade (trade, market), params))
let result = Object.values (trades || []).map ((trade) => this.extend (this.parseTrade (trade, market), params))
result = sortBy (result, 'timestamp')
const symbol = (market !== undefined) ? market['symbol'] : undefined
return this.filterBySymbolSinceLimit (result, symbol, since, limit)
@@ -1104,7 +1118,7 @@ module.exports = class Exchange {
// if (!this.isArray (transactions)) {
// throw new ExchangeError (this.id + ' parseTransactions expected an array in the transactions argument, but got ' + typeof transactions);
// }
let result = Object.values (transactions || []).map (transaction => this.extend (this.parseTransaction (transaction, currency), params))
let result = Object.values (transactions || []).map ((transaction) => this.extend (this.parseTransaction (transaction, currency), params))
result = this.sortBy (result, 'timestamp');
const code = (currency !== undefined) ? currency['code'] : undefined;
return this.filterByCurrencySinceLimit (result, code, since, limit);
File renamed without changes.
File renamed without changes.
@@ -218,22 +218,19 @@ module.exports =
/* ............................................. */
, deepExtend: function deepExtend (...xs) {
let out = undefined
for (const x of xs) {
if (isDictionary (x)) {
if (!isObject (out))
if (!isObject (out)) {
out = {}
for (const k in x)
}
for (const k in x) {
out[k] = deepExtend (out[k], x[k])
} else out = x
}
} else {
out = x
}
}
return out
}
@@ -45,23 +45,27 @@ function numberToString (x) { // avoids scientific notation for too large and to
if (typeof x === 'string') return x
const s = x.toString ()
if (Math.abs (x) < 1.0) {
const s = x.toString ()
const e = parseInt (s.split ('e-')[1])
const neg = (s[0] === '-')
if (e) {
x *= Math.pow (10, e - 1)
x = (neg ? '-' : '') + '0.' + (new Array (e)).join ('0') + x.toString ().substring (neg ? 3 : 2)
return x
}
} else {
let e = parseInt (x.toString ().split ('+')[1])
if (e > 20) {
e -= 20
x /= Math.pow (10, e)
x += (new Array (e + 1)).join ('0')
const parts = s.split ('e')
if (parts[1]) {
let e = parseInt (parts[1])
const m = parts[0].split ('.')
if (m[1]) {
e -= m[1].length
}
return m[0] + m[1] + (new Array (e + 1)).join ('0')
}
}
return x.toString ()
return s;
}
//-----------------------------------------------------------------------------
@@ -108,8 +112,9 @@ const decimalToPrecision = (x, roundingMode
if (countingMode === TICK_SIZE) {
const precisionDigitsString = decimalToPrecision (numPrecisionDigits, ROUND, 100, DECIMAL_PLACES, NO_PADDING)
const newNumPrecisionDigits = precisionFromString (precisionDigitsString)
const missing = x % numPrecisionDigits
let missing = x % numPrecisionDigits
// See: https://github.com/ccxt/ccxt/pull/6486
missing = Number (decimalToPrecision (missing, ROUND, 8, DECIMAL_PLACES, NO_PADDING));
const fpError = decimalToPrecision (missing / numPrecisionDigits, ROUND, Math.max (newNumPrecisionDigits, 8), DECIMAL_PLACES, NO_PADDING)
if (precisionFromString (fpError) !== 0) {
if (roundingMode === ROUND) {
@@ -29,7 +29,7 @@ module.exports = class bcex extends Exchange {
'fetchTradingLimits': true,
},
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/43362240-21c26622-92ee-11e8-9464-5801ec526d77.jpg',
'logo': 'https://user-images.githubusercontent.com/51840849/77231516-851c6900-6bac-11ea-8fd6-ee5c23eddbd4.jpg',
'api': 'https://www.bcex.top',
'www': 'https://www.bcex.top',
'doc': 'https://github.com/BCEX-TECHNOLOGY-LIMITED/API_Docs/wiki/Interface',
@@ -75,8 +75,8 @@ module.exports = class bcex extends Exchange {
'trading': {
'tierBased': false,
'percentage': true,
'buy': 0.0,
'sell': 0.2 / 100,
'maker': 0.1 / 100,
'taker': 0.2 / 100,
},
'funding': {
'tierBased': false,
@@ -369,6 +369,7 @@ module.exports = class bcex extends Exchange {
'cost': cost,
'order': orderId,
'fee': undefined,
'takerOrMaker': undefined,
};
}
@@ -517,6 +518,8 @@ module.exports = class bcex extends Exchange {
'remaining': this.safeFloat (order, 'numberover'),
'status': status,
'fee': undefined,
'clientOrderId': undefined,
'trades': undefined,
};
}
@@ -543,6 +546,7 @@ module.exports = class bcex extends Exchange {
const result = {
'info': order,
'id': id,
'clientOrderId': undefined,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -557,6 +561,7 @@ module.exports = class bcex extends Exchange {
'remaining': remaining,
'status': status,
'fee': fee,
'trades': undefined,
};
return result;
}
@@ -671,16 +676,4 @@ module.exports = class bcex extends Exchange {
}
}
}
calculateFee (symbol, type, side, amount, price, takerOrMaker = 'taker', params = {}) {
const market = this.markets[symbol];
const rate = market[side];
const cost = parseFloat (this.costToPrecision (symbol, amount * price));
return {
'type': takerOrMaker,
'currency': market['quote'],
'rate': rate,
'cost': parseFloat (this.feeToPrecision (symbol, rate * cost)),
};
}
};
@@ -2,18 +2,22 @@
// ---------------------------------------------------------------------------
const hitbtc2 = require ('./hitbtc2');
const hitbtc = require ('./hitbtc');
// ---------------------------------------------------------------------------
module.exports = class bequant extends hitbtc2 {
module.exports = class bequant extends hitbtc {
describe () {
return this.deepExtend (super.describe (), {
'id': 'bequant',
'name': 'Bequant',
'countries': [ 'MT' ], // Malta
'pro': true,
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/55248342-a75dfe00-525a-11e9-8aa2-05e9dca943c6.jpg',
'api': 'https://api.bequant.io',
'api': {
'public': 'https://api.bequant.io',
'private': 'https://api.bequant.io',
},
'www': 'https://bequant.io',
'doc': [
'https://api.bequant.io/',
@@ -46,14 +46,14 @@ module.exports = class bibox extends Exchange {
'1w': 'week',
},
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/34902611-2be8bf1a-f830-11e7-91a2-11b2f292e750.jpg',
'logo': 'https://user-images.githubusercontent.com/51840849/77257418-3262b000-6c85-11ea-8fb8-20bdf20b3592.jpg',
'api': 'https://api.bibox.com',
'www': 'https://www.bibox.com',
'doc': [
'https://biboxcom.github.io/en/',
],
'fees': 'https://bibox.zendesk.com/hc/en-us/articles/360002336133',
'referral': 'https://www.bibox.com/signPage?id=11114745&lang=en',
'referral': 'https://w2.bibox.com/login/register?invite_code=05Kj3I',
},
'api': {
'public': {
@@ -86,7 +86,7 @@ module.exports = class bibox extends Exchange {
'tierBased': false,
'percentage': true,
'taker': 0.001,
'maker': 0.001,
'maker': 0.0008,
},
'funding': {
'tierBased': false,
@@ -713,6 +713,7 @@ module.exports = class bibox extends Exchange {
return {
'info': order,
'id': id,
'clientOrderId': undefined,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -727,6 +728,7 @@ module.exports = class bibox extends Exchange {
'remaining': remaining,
'status': status,
'fee': fee,
'trades': undefined,
};
}
@@ -735,6 +735,7 @@ module.exports = class bigone extends Exchange {
return {
'info': order,
'id': id,
'clientOrderId': undefined,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': lastTradeTimestamp,
@@ -922,7 +923,7 @@ module.exports = class bigone extends Exchange {
// }
//
const trades = this.safeValue (response, 'data', []);
return this.parseTrades (trades, market, since, limit, params);
return this.parseTrades (trades, market, since, limit);
}
parseOrderStatus (status) {
@@ -4,7 +4,7 @@
const Exchange = require ('./base/Exchange');
const { ExchangeError, ArgumentsRequired, ExchangeNotAvailable, InsufficientFunds, OrderNotFound, InvalidOrder, DDoSProtection, InvalidNonce, AuthenticationError, InvalidAddress, RateLimitExceeded, PermissionDenied } = require ('./base/errors');
const { ROUND } = require ('./base/functions/number');
const { ROUND, TRUNCATE } = require ('./base/functions/number');
// ---------------------------------------------------------------------------
@@ -57,6 +57,10 @@ module.exports = class binance extends Exchange {
},
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/29604020-d5483cdc-87ee-11e7-94c7-d1a8d9169293.jpg',
'test': {
'fapiPublic': 'https://testnet.binancefuture.com/fapi/v1',
'fapiPrivate': 'https://testnet.binancefuture.com/fapi/v1',
},
'api': {
'web': 'https://www.binance.com',
'wapi': 'https://api.binance.com/wapi/v3',
@@ -192,6 +196,8 @@ module.exports = class binance extends Exchange {
'ticker/24hr',
'ticker/price',
'ticker/bookTicker',
'allForceOrders',
'openInterest',
'leverageBracket',
],
},
@@ -209,6 +215,8 @@ module.exports = class binance extends Exchange {
'income',
],
'post': [
'batchOrders',
'positionSide/dual',
'positionMargin',
'marginType',
'order',
@@ -219,6 +227,7 @@ module.exports = class binance extends Exchange {
'listenKey',
],
'delete': [
'batchOrders',
'order',
'allOpenOrders',
'listenKey',
@@ -504,6 +513,13 @@ module.exports = class binance extends Exchange {
'max': this.safeFloat (filter, 'maxQty'),
};
}
if ('MARKET_LOT_SIZE' in filters) {
const filter = this.safeValue (filters, 'MARKET_LOT_SIZE', {});
entry['limits']['market'] = {
'min': this.safeFloat (filter, 'minQty'),
'max': this.safeFloat (filter, 'maxQty'),
};
}
if ('MIN_NOTIONAL' in filters) {
entry['limits']['cost']['min'] = this.safeFloat (filters['MIN_NOTIONAL'], 'minNotional');
}
@@ -678,7 +694,7 @@ module.exports = class binance extends Exchange {
}
async fetchStatus (params = {}) {
const response = await this.wapiGetSystemStatus ();
const response = await this.wapiGetSystemStatus (params);
let status = this.safeValue (response, 'status');
if (status !== undefined) {
status = (status === 0) ? 'ok' : 'maintenance';
@@ -965,6 +981,46 @@ module.exports = class binance extends Exchange {
}
parseOrder (order, market = undefined) {
//
// spot
//
// {
// "symbol": "LTCBTC",
// "orderId": 1,
// "clientOrderId": "myOrder1",
// "price": "0.1",
// "origQty": "1.0",
// "executedQty": "0.0",
// "cummulativeQuoteQty": "0.0",
// "status": "NEW",
// "timeInForce": "GTC",
// "type": "LIMIT",
// "side": "BUY",
// "stopPrice": "0.0",
// "icebergQty": "0.0",
// "time": 1499827319559,
// "updateTime": 1499827319559,
// "isWorking": true
// }
//
// futures
//
// {
// "symbol": "BTCUSDT",
// "orderId": 1,
// "clientOrderId": "myOrder1",
// "price": "0.1",
// "origQty": "1.0",
// "executedQty": "1.0",
// "cumQuote": "10.0",
// "status": "NEW",
// "timeInForce": "GTC",
// "type": "LIMIT",
// "side": "BUY",
// "stopPrice": "0.0",
// "updateTime": 1499827319559
// }
//
const status = this.parseOrderStatus (this.safeString (order, 'status'));
let symbol = undefined;
const marketId = this.safeString (order, 'symbol');
@@ -1049,9 +1105,11 @@ module.exports = class binance extends Exchange {
cost = parseFloat (this.costToPrecision (symbol, cost));
}
}
const clientOrderId = this.safeString (order, 'clientOrderId');
return {
'info': order,
'id': id,
'clientOrderId': clientOrderId,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -1094,10 +1152,12 @@ module.exports = class binance extends Exchange {
};
if (uppercaseType === 'MARKET') {
const quoteOrderQty = this.safeFloat (params, 'quoteOrderQty');
const precision = market['precision']['price'];
if (quoteOrderQty !== undefined) {
request['quoteOrderQty'] = this.costToPrecision (symbol, quoteOrderQty);
request['quoteOrderQty'] = this.decimalToPrecision (quoteOrderQty, TRUNCATE, precision, this.precisionMode);
params = this.omit (params, 'quoteOrderQty');
} else if (price !== undefined) {
request['quoteOrderQty'] = this.costToPrecision (symbol, amount * price);
request['quoteOrderQty'] = this.decimalToPrecision (amount * price, TRUNCATE, precision, this.precisionMode);
} else {
request['quantity'] = this.amountToPrecision (symbol, amount);
}
@@ -1772,7 +1832,7 @@ module.exports = class binance extends Exchange {
if (api === 'wapi') {
url += '.html';
}
const userDataStream = (path === 'userDataStream');
const userDataStream = (path === 'userDataStream') || (path === 'listenKey');
if (path === 'historicalTrades') {
if (this.apiKey) {
headers = {
@@ -1882,7 +1942,7 @@ module.exports = class binance extends Exchange {
}
// a workaround for {"code":-2015,"msg":"Invalid API-key, IP, or permissions for action."}
// despite that their message is very confusing, it is raised by Binance
// on a temporary ban (the API key is valid, but disabled for a while)
// on a temporary ban, the API key is valid, but disabled for a while
if ((error === '-2015') && this.options['hasAlreadyAuthenticatedSuccessfully']) {
throw new DDoSProtection (this.id + ' temporary banned: ' + body);
}
File renamed without changes.
File renamed without changes.
@@ -279,6 +279,7 @@ module.exports = class bit2c extends Exchange {
const status = this.safeString (order, 'status');
return {
'id': id,
'clientOrderId': undefined,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -294,6 +295,7 @@ module.exports = class bit2c extends Exchange {
'trades': undefined,
'fee': undefined,
'info': order,
'average': undefined,
};
}
@@ -313,6 +313,7 @@ module.exports = class bitbank extends Exchange {
const side = this.safeStringLower (order, 'side');
return {
'id': id,
'clientOrderId': undefined,
'datetime': this.iso8601 (timestamp),
'timestamp': timestamp,
'lastTradeTimestamp': undefined,
@@ -3,7 +3,7 @@
// ---------------------------------------------------------------------------
const Exchange = require ('./base/Exchange');
const { InvalidNonce, InsufficientFunds, AuthenticationError, InvalidOrder, ExchangeError, OrderNotFound, AccountSuspended, BadSymbol } = require ('./base/errors');
const { InvalidNonce, InsufficientFunds, AuthenticationError, InvalidOrder, ExchangeError, OrderNotFound, AccountSuspended, BadSymbol, OrderImmediatelyFillable, RateLimitExceeded } = require ('./base/errors');
// ---------------------------------------------------------------------------
@@ -53,6 +53,7 @@ module.exports = class bitbay extends Exchange {
'https://github.com/BitBayNet/API',
'https://docs.bitbay.net/v1.0.1-en/reference',
],
'support': 'https://support.bitbay.net',
'fees': 'https://bitbay.net/en/fees',
},
'api': {
@@ -157,6 +158,8 @@ module.exports = class bitbay extends Exchange {
'FUNDS_NOT_SUFFICIENT': InsufficientFunds,
'OFFER_FUNDS_NOT_EXCEEDING_MINIMUMS': InvalidOrder,
'OFFER_NOT_FOUND': OrderNotFound,
'OFFER_WOULD_HAVE_BEEN_PARTIALLY_FILLED': OrderImmediatelyFillable,
'ACTION_LIMIT_EXCEEDED': RateLimitExceeded,
},
});
}
@@ -288,6 +291,7 @@ module.exports = class bitbay extends Exchange {
}
return {
'id': this.safeString (order, 'id'),
'clientOrderId': undefined,
'info': order,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
@@ -1043,6 +1047,7 @@ module.exports = class bitbay extends Exchange {
'average': undefined,
'fee': undefined,
'trades': trades,
'clientOrderId': undefined,
};
}
@@ -845,6 +845,7 @@ module.exports = class bitfinex extends Exchange {
return {
'info': order,
'id': id,
'clientOrderId': undefined,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -858,6 +859,8 @@ module.exports = class bitfinex extends Exchange {
'filled': this.safeFloat (order, 'executed_amount'),
'status': status,
'fee': undefined,
'cost': undefined,
'trades': undefined,
};
}
@@ -517,6 +517,26 @@ module.exports = class bitfinex2 extends bitfinex {
return this.parseTicker (ticker, market);
}
parseSymbol (marketId) {
if (marketId === undefined) {
return marketId;
}
marketId = marketId.replace ('t', '');
let baseId = undefined;
let quoteId = undefined;
if (marketId.indexOf (':') >= 0) {
const parts = marketId.split (':');
baseId = parts[0];
quoteId = parts[1];
} else {
baseId = marketId.slice (0, 3);
quoteId = marketId.slice (3, 6);
}
const base = this.safeCurrencyCode (baseId);
const quote = this.safeCurrencyCode (quoteId);
return base + '/' + quote;
}
parseTrade (trade, market = undefined) {
//
// fetchTrades (public)
@@ -563,21 +583,29 @@ module.exports = class bitfinex2 extends bitfinex {
const timestamp = trade[timestampIndex];
if (isPrivate) {
const marketId = trade[1];
if (marketId !== undefined) {
if (marketId in this.markets_by_id) {
market = this.markets_by_id[marketId];
symbol = market['symbol'];
} else {
symbol = marketId;
}
if (marketId in this.markets_by_id) {
market = this.markets_by_id[marketId];
symbol = market['symbol'];
} else {
symbol = this.parseSymbol (marketId);
}
orderId = trade[3].toString ();
takerOrMaker = (trade[8] === 1) ? 'maker' : 'taker';
const feeCost = trade[9];
let feeCost = trade[9];
const feeCurrency = this.safeCurrencyCode (trade[10]);
if (feeCost !== undefined) {
feeCost = -feeCost;
if (symbol in this.markets) {
feeCost = this.feeToPrecision (symbol, feeCost);
} else {
const currencyId = 'f' + feeCurrency;
if (currencyId in this.currencies_by_id) {
const currency = this.currencies_by_id[currencyId];
feeCost = this.currencyToPrecision (currency['code'], feeCost);
}
}
fee = {
'cost': parseFloat (this.feeToPrecision (symbol, Math.abs (feeCost))),
'cost': parseFloat (feeCost),
'currency': feeCurrency,
};
}
@@ -671,7 +699,9 @@ module.exports = class bitfinex2 extends bitfinex {
'PARTIALLY FILLED': 'open',
'EXECUTED': 'closed',
'CANCELED': 'canceled',
'CANCELED was: PARTIALLY FILLED': 'canceled',
'INSUFFICIENT MARGIN': 'canceled',
'INSUFFICIENT BALANCE (G1) was: PARTIALLY FILLED': 'canceled',
'RSN_DUST': 'rejected',
'RSN_PAUSE': 'rejected',
};
@@ -684,11 +714,15 @@ module.exports = class bitfinex2 extends bitfinex {
const marketId = this.safeString (order, 3);
if (marketId in this.markets_by_id) {
market = this.markets_by_id[marketId];
} else {
symbol = this.parseSymbol (marketId);
}
if (market !== undefined) {
if ((symbol === undefined) && (market !== undefined)) {
symbol = market['symbol'];
}
const timestamp = this.safeTimestamp (order, 5);
// https://github.com/ccxt/ccxt/issues/6686
// const timestamp = this.safeTimestamp (order, 5);
const timestamp = this.safeInteger (order, 5);
const remaining = Math.abs (this.safeFloat (order, 6));
const amount = Math.abs (this.safeFloat (order, 7));
const filled = amount - remaining;
@@ -704,9 +738,11 @@ module.exports = class bitfinex2 extends bitfinex {
const price = this.safeFloat (order, 16);
const average = this.safeFloat (order, 17);
const cost = price * filled;
const clientOrderId = this.safeString (order, 2);
return {
'info': order,
'id': id,
'clientOrderId': clientOrderId,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -356,6 +356,7 @@ module.exports = class bitflyer extends Exchange {
const id = this.safeString (order, 'child_order_acceptance_id');
return {
'id': id,
'clientOrderId': undefined,
'info': order,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
@@ -370,6 +371,8 @@ module.exports = class bitflyer extends Exchange {
'filled': filled,
'remaining': remaining,
'fee': fee,
'average': undefined,
'trades': undefined,
};
}
@@ -312,6 +312,7 @@ module.exports = class bitforex extends Exchange {
'cost': cost,
'order': orderId,
'fee': undefined,
'takerOrMaker': undefined,
};
}
@@ -465,6 +466,7 @@ module.exports = class bitforex extends Exchange {
const result = {
'info': order,
'id': id,
'clientOrderId': undefined,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': lastTradeTimestamp,
@@ -479,6 +481,7 @@ module.exports = class bitforex extends Exchange {
'remaining': remaining,
'status': status,
'fee': fee,
'trades': undefined,
};
return result;
}
@@ -3,7 +3,7 @@
// ---------------------------------------------------------------------------
const Exchange = require ('./base/Exchange');
const { ExchangeError, ExchangeNotAvailable, AuthenticationError, BadRequest, PermissionDenied, InvalidAddress } = require ('./base/errors');
const { ExchangeError, ExchangeNotAvailable, AuthenticationError, BadRequest, PermissionDenied, InvalidAddress, ArgumentsRequired } = require ('./base/errors');
// ---------------------------------------------------------------------------
@@ -129,6 +129,8 @@ module.exports = class bithumb extends Exchange {
'max': undefined,
},
},
'baseId': undefined,
'quoteId': undefined,
});
}
return result;
@@ -342,18 +344,20 @@ module.exports = class bithumb extends Exchange {
async cancelOrder (id, symbol = undefined, params = {}) {
const side_in_params = ('side' in params);
if (!side_in_params) {
throw new ExchangeError (this.id + ' cancelOrder requires a `side` parameter (sell or buy) and a `currency` parameter');
throw new ArgumentsRequired (this.id + ' cancelOrder requires a `symbol` argument and a `side` parameter (sell or buy)');
}
const currency = this.safeString (params, 'currency');
if (currency === undefined) {
throw new ExchangeError (this.id + ' cancelOrder requires a `currency` parameter (a currency id)');
if (symbol === undefined) {
throw new ArgumentsRequired (this.id + ' cancelOrder requires a `symbol` argument and a `side` parameter (sell or buy)');
}
const market = this.market (symbol);
const side = (params['side'] === 'buy') ? 'bid' : 'ask';
params = this.omit (params, [ 'side', 'currency' ]);
// https://github.com/ccxt/ccxt/issues/6771
const request = {
'order_id': id,
'type': side,
'currency': currency,
'order_currency': market['base'],
'payment_currency': market['quote'],
};
return await this.privatePostTradeCancel (this.extend (request, params));
}
@@ -370,7 +374,7 @@ module.exports = class bithumb extends Exchange {
if (currency === 'XRP' || currency === 'XMR') {
const destination = this.safeString (params, 'destination');
if ((tag === undefined) && (destination === undefined)) {
throw new ExchangeError (this.id + ' ' + code + ' withdraw() requires a tag argument or an extra destination param');
throw new ArgumentsRequired (this.id + ' ' + code + ' withdraw() requires a tag argument or an extra destination param');
} else if (tag !== undefined) {
request['destination'] = tag;
}
File renamed without changes.
@@ -42,6 +42,7 @@ module.exports = class bitmart extends Exchange {
'www': 'https://www.bitmart.com/',
'doc': 'https://github.com/bitmartexchange/bitmart-official-api-docs',
'referral': 'http://www.bitmart.com/?r=rQCFLh',
'fees': 'https://www.bitmart.com/fee/en',
},
'requiredCredentials': {
'apiKey': true,
@@ -249,6 +250,7 @@ module.exports = class bitmart extends Exchange {
'precision': precision,
'limits': limits,
'info': market,
'active': undefined,
});
}
return result;
@@ -682,6 +684,7 @@ module.exports = class bitmart extends Exchange {
const type = undefined;
return {
'id': id,
'clientOrderId': undefined,
'info': order,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
@@ -52,7 +52,7 @@ module.exports = class bitmax extends Exchange {
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/66820319-19710880-ef49-11e9-8fbe-16be62a11992.jpg',
'api': 'https://bitmax.io',
'test': 'https://bitmax-test.io/api',
'test': 'https://bitmax-test.io',
'www': 'https://bitmax.io',
'doc': [
'https://github.com/bitmax-exchange/api-doc/blob/master/bitmax-api-doc-v1.2.md',
@@ -121,12 +121,17 @@ module.exports = class bitmax extends Exchange {
'exact': {
'2100': AuthenticationError, // {"code":2100,"message":"ApiKeyFailure"}
'5002': BadSymbol, // {"code":5002,"message":"Invalid Symbol"}
'6001': BadSymbol, // {"code":6001,"message":"Trading is disabled on symbol."}
'6010': InsufficientFunds, // {'code': 6010, 'message': 'Not enough balance.'}
'60060': InvalidOrder, // { 'code': 60060, 'message': 'The order is already filled or canceled.' }
'600503': InvalidOrder, // {"code":600503,"message":"Notional is too small."}
},
'broad': {},
},
'commonCurrencies': {
'BTCBEAR': 'BEAR',
'BTCBULL': 'BULL',
},
});
}
@@ -722,9 +727,11 @@ module.exports = class bitmax extends Exchange {
'currency': this.safeString (order, 'feeAsset'),
};
const average = this.safeFloat (order, 'avgPrice');
const clientOrderId = id;
return {
'info': order,
'id': id,
'clientOrderId': clientOrderId,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -1145,7 +1152,7 @@ module.exports = class bitmax extends Exchange {
headers['x-auth-coid'] = coid;
}
const signature = this.hmac (this.encode (auth), this.encode (this.secret), 'sha256', 'base64');
headers['x-auth-signature'] = signature;
headers['x-auth-signature'] = this.decode (signature);
if (method === 'GET') {
if (Object.keys (query).length) {
url += '?' + this.urlencode (query);
@@ -53,7 +53,7 @@ module.exports = class bitmex extends Exchange {
'https://github.com/BitMEX/api-connectors/tree/master/official-http',
],
'fees': 'https://www.bitmex.com/app/fees',
'referral': 'https://www.bitmex.com/register/rm3C16',
'referral': 'https://www.bitmex.com/register/upZpOX',
},
'api': {
'public': {
@@ -1111,9 +1111,11 @@ module.exports = class bitmex extends Exchange {
const id = this.safeString (order, 'orderID');
const type = this.safeStringLower (order, 'ordType');
const side = this.safeStringLower (order, 'side');
const clientOrderId = this.safeString (order, 'clOrdID');
return {
'info': order,
'id': id,
'clientOrderId': clientOrderId,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': lastTradeTimestamp,
@@ -1128,6 +1130,7 @@ module.exports = class bitmex extends Exchange {
'remaining': remaining,
'status': status,
'fee': undefined,
'trades': undefined,
};
}
@@ -139,6 +139,7 @@ module.exports = class bitso extends Exchange {
'info': market,
'limits': limits,
'precision': precision,
'active': undefined,
});
}
return result;
@@ -369,9 +370,11 @@ module.exports = class bitso extends Exchange {
filled = amount - remaining;
}
}
const clientOrderId = this.safeString (order, 'client_id');
return {
'info': order,
'id': id,
'clientOrderId': clientOrderId,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'lastTradeTimestamp': undefined,
@@ -385,6 +388,8 @@ module.exports = class bitso extends Exchange {
'filled': filled,
'status': status,
'fee': undefined,
'average': undefined,
'trades': undefined,
};
}
Loaded 100 of 1311 files, more files were not shown because too many files have changed in this diff. Show more