Compare commits

..
Author SHA1 Message Date
Luis Fernando Molina 5b52de8153 Merge pull request #1085 from Superalgos/develop
Beta 10 Release
2021-06-05 10:35:00 -04:00
Luis Fernando Molina db855b27ad Merge pull request #1084 from Superalgos/plugins-docs
Plugins docs into Develop
2021-06-05 10:26:45 -04:00
Luis Fernando Molina cabe806c1e Merge pull request #1083 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Demo Workspace cleaned
2021-06-05 10:20:45 -04:00
Luis Fernando Molina 8e703c2f0a API Data Fetcher Demo Workspace cleaned 2021-06-05 16:16:33 +02:00
Luis Fernando Molina 3cf13a37d0 Merge pull request #1081 from harrellbm/develop
Initial API Map and Mine docs edited and complete
2021-06-05 09:04:16 -04:00
Luis Fernando Molina cfa0a51fca Merge pull request #1078 from Smidy13/develop
Bug Fix: Display Error if Trading System Formula Evaluates as Undefined
2021-06-05 09:03:55 -04:00
B Harrell 15edbc807d Merge branch 'Superalgos:develop' into develop 2021-06-05 07:45:05 -05:00
Brenden Harrell cdb945b99b Initial API Map and Mine docs edited and complete 2021-06-05 07:43:54 -05:00
Julian Molina f18d9953ec Merge pull request #1079 from julian-molina/develop
Contribution: Small fixes to user variables docs
2021-06-05 12:21:32 +02:00
Julian Molina 1d2dc5a646 Merge branch 'develop' into develop 2021-06-05 12:21:23 +02:00
Julian Molina 4750803fae Small fixes to user variables docs 2021-06-05 12:19:45 +02:00
Smidy13 68697c7280 Bug Fix: Display Error if Trading System Formula Evaluates as Undefined 2021-06-05 16:51:25 +12:00
Luis Fernando Molina b3d37de39f Merge pull request #1077 from harrellbm/develop
Finish API Map node docs
2021-06-05 00:03:19 -04:00
Brenden Harrell ebe64b7f8e Finish API Map node docs 2021-06-04 22:41:48 -05:00
Julian Molina 1629752c80 Merge pull request #1076 from PLuv/develop
Change: Small change to complete user-defined-variables docs
2021-06-04 19:56:13 +02:00
Julian Molina b9647c1a35 Merge pull request #1075 from GENS-Tools/plugins-docs
Contribution: My Superalgos Review
2021-06-04 19:55:37 +02:00
Philip Love d0d25c42a3 Change: Small change to complete user-defined-variables docs 2021-06-04 13:45:39 -04:00
GENS-Tools 9c6a2a06a8 My Superalgos Review 2021-06-04 17:33:51 +02:00
Luis Fernando Molina a2c2e9e49c Merge pull request #1074 from harrellbm/develop
Optimize Coingecko API Map and Start on API Map docs
2021-06-03 23:04:27 -04:00
Brenden Harrell 25c007fb3f Start on API Map node docs 2021-06-03 21:49:34 -05:00
Brenden Harrell d3ff0c5c49 API Map config fix 2021-06-03 21:49:13 -05:00
Brenden Harrell b80b04a905 Optimize CoinGecko API Map with Query Parameters 2021-06-03 18:53:29 -05:00
Luis Fernando Molina dc9fa31163 Merge pull request #1071 from Smidy13/develop
Bug Fix: Tutorials Load for Plugin Workspaces
2021-06-03 07:51:07 -04:00
Luis Fernando Molina bc121adef5 Merge pull request #1069 from harrellbm/develop
Harden replaceBy config options, update coingecko map and add docs
2021-06-03 07:50:18 -04:00
Julian Molina 8dd57b239e Merge pull request #1070 from PLuv/develop
Add: Pluvtech Data Mine Docs
2021-06-03 13:27:55 +02:00
Smidy13 98cca71c5a Bug Fix: Load Tutorials for Plugins Workspaces 2021-06-03 23:23:51 +12:00
Smidy13 42741386f3 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-06-03 21:40:41 +12:00
Philip Love 76120c1028 Add: Pluvtech Data Mine Docs 2021-06-03 01:13:14 -04:00
B Harrell ee955824fb Merge branch 'Superalgos:develop' into develop 2021-06-02 22:31:42 -05:00
Brenden Harrell c35727f919 Docs for CoinGecko Api Map and Mine 2021-06-02 22:22:26 -05:00
Brenden Harrell 13119ad755 Update CoinGecko Api Map 2021-06-02 22:20:15 -05:00
Brenden Harrell 39e567c057 Harden replaceBy config options 2021-06-02 22:19:56 -05:00
Luis Fernando Molina de4e257a7e Merge pull request #1066 from harrellbm/develop
Initial CoinGecko Api map and data mine
2021-06-02 15:45:27 -04:00
Brenden Harrell d2c49e91be Initial CoinGecko Api map and data mine 2021-06-02 12:54:12 -05:00
Luis Fernando Molina 63c2b8dcf9 Merge pull request #1064 from harrellbm/develop
Fix Aggregate Avg and Min Methods
2021-06-02 12:36:45 -04:00
Brenden Harrell c88d398d5f Fix Aggregate Avg and Min Methods 2021-06-02 11:14:08 -05:00
Julian Molina 76b6fa4eb3 Merge pull request #1062 from julian-molina/develop
Contribution: Getting started tutorials repagination
2021-06-02 17:43:46 +02:00
Julian Molina 36b5856bbc Getting started tutorials repagination 2021-06-02 17:34:11 +02:00
Julian Molina 6b29a47117 Merge pull request #1061 from julian-molina/develop
Contribution: Mention of API Maps in Basic Education
2021-06-02 17:26:23 +02:00
Julian Molina 4ac8f90eee Mention of API Maps in Basic Education 2021-06-02 17:07:21 +02:00
Brenden Harrell 9971d6aa16 Merge branch 'develop' of https://github.com/harrellbm/Superalgos into develop 2021-06-02 09:22:11 -05:00
Brenden Harrell 894eada595 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-06-02 09:20:40 -05:00
B Harrell b0000d1439 Merge branch 'Superalgos:develop' into develop 2021-06-02 09:19:14 -05:00
Luis Fernando Molina 7fda589615 Merge pull request #1059 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher bot Bug Fixed. Timestamp record property expected only as Number.
2021-06-02 08:12:11 -04:00
Luis Fernando Molina fab078f38f API Data Fetcher bot Bug Fixed. Timestamp record property expected only as Number. 2021-06-02 14:11:15 +02:00
Julian Molina 3b36eda278 Merge pull request #1058 from julian-molina/develop
Contribution: Styles in workspaces panel
2021-06-02 13:34:19 +02:00
Julian Molina a2c8d31bfc Styles in workspaces panel 2 2021-06-02 13:33:37 +02:00
Julian Molina 8ae34f3d4e Styles in workspaces panel 2021-06-02 13:29:37 +02:00
Julian Molina e4f3e9b807 Merge pull request #1057 from julian-molina/develop
Contribution: Exchanges reorg 2
2021-06-02 11:48:48 +02:00
Julian Molina f2dad9389e Continuing reorg 2021-06-02 11:46:26 +02:00
Julian Molina c860d14e1e Exchanges reorg 2 2021-06-02 11:31:58 +02:00
Julian Molina 6c4975d051 Merge pull request #1056 from julian-molina/develop
Contribution: Workspaces reorg
2021-06-02 11:16:27 +02:00
Julian Molina 08a82d52cd Workspaces reorg 2021-06-02 11:15:14 +02:00
Brenden Harrell 1790cbf752 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-06-01 15:36:38 -05:00
Julian Molina 7723636f4b Merge pull request #1054 from julian-molina/develop
Contribution: Refactoring tradingEngine.current. - tradingEngine.tradingCurrent.
2021-06-01 22:14:27 +02:00
Julian Molina 2d7f2f7a79 Refactoring tradingEngine.current. - tradingEngine.tradingCurrent. 2021-06-01 21:59:05 +02:00
Julian Molina 804fa72d5f Merge pull request #1053 from julian-molina/develop
Contribution: Exchange Key Test workspace revision
2021-06-01 21:44:28 +02:00
Julian Molina f97b6286ec Exchange Key Test workspace revision 2021-06-01 21:36:26 +02:00
B Harrell 9afcbb56b4 Merge branch 'Superalgos:develop' into develop 2021-06-01 13:22:53 -05:00
Julian Molina 51f3119ad3 Merge pull request #1052 from julian-molina/develop
Contribution: BBTP finished
2021-06-01 18:27:52 +02:00
Julian Molina d936333bff BBTP finished 2021-06-01 18:23:12 +02:00
Julian Molina dc7d19efd9 Merge pull request #1051 from julian-molina/develop
Contribution:  TSDT finished
2021-06-01 16:44:42 +02:00
Julian Molina ebd825104c TSDT finished 2021-06-01 16:42:52 +02:00
Luis Fernando Molina 1e7a8869ed Merge pull request #1050 from Luis-Fernando-Molina/develop
Contribution: replaceBy config property extended
2021-06-01 10:31:51 -04:00
Luis Fernando Molina bac0e8be04 replaceBy config property extended 2021-06-01 16:28:39 +02:00
Julian Molina e26e5664fc Merge pull request #1047 from julian-molina/develop
Contribution: WHB Workspace and Install Market tutorial ready
2021-06-01 13:12:54 +02:00
Julian Molina d252bb108c WHB Workspace and Install Market tutorial ready 2021-06-01 13:11:50 +02:00
Brenden Harrell c8443b0c68 Pull Dia Plugin 2021-05-31 18:07:35 -05:00
Brenden Harrell 91e112c756 Map and Mine for Initial Dia Data endpoint 2021-05-31 17:15:51 -05:00
Julian Molina a02f03b334 Merge pull request #1045 from julian-molina/develop
Contribution: TSDT 3rd tutorial
2021-05-31 21:49:06 +02:00
Julian Molina cf7c1652f8 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-31 21:48:18 +02:00
Julian Molina 598ebcefcc TSDT 3rd tutorial 2021-05-31 21:47:58 +02:00
Luis Fernando Molina 7e5cb6bfdf Merge pull request #1043 from PLuv/develop
Modify: PluginFilePosition auto-spawn==true per Julian request
2021-05-31 14:49:06 -04:00
Philip Love d69e1ed670 Modify: PluginFilePosition auto-spawn==true per Julian request 2021-05-31 13:22:08 -04:00
Luis Fernando Molina fe615e979f Merge pull request #1042 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher replaceBy Config Property Extended
2021-05-31 12:17:58 -04:00
Luis Fernando Molina d26ce4bde1 Merge pull request #1041 from harrellbm/develop
Data mining Docs fixes and updates
2021-05-31 12:17:21 -04:00
Luis Fernando Molina e2dc178ec1 API Data Fetcher replaceBy Config Property Extended 2021-05-31 18:16:52 +02:00
Brenden Harrell 8127696f89 Merge branch 'develop' of https://github.com/harrellbm/Superalgos into develop 2021-05-31 10:33:50 -05:00
Brenden Harrell 5875921221 Small data mining docs addtions 2021-05-31 10:33:46 -05:00
B Harrell 449c49b552 Merge branch 'Superalgos:develop' into develop 2021-05-31 10:33:18 -05:00
Luis Fernando Molina b8211fa91b Merge pull request #1040 from Luis-Fernando-Molina/develop
Contribution: Docs Improved API Data Fetcher Bot not reference at API Map Reference node
2021-05-31 11:05:19 -04:00
Luis Fernando Molina 366336097e Docs Improved API Data Fetcher Bot not reference at API Map Reference node 2021-05-31 17:05:01 +02:00
Luis Fernando Molina 597227353b Merge pull request #1038 from Luis-Fernando-Molina/develop
Contribution: -Version Branch added
2021-05-31 09:59:59 -04:00
Luis Fernando Molina 991f05c335 -Version Branch added 2021-05-31 15:56:40 +02:00
Luis Fernando Molina 8dcb1667c6 Merge pull request #1037 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher node initial value bug fixed
2021-05-31 08:54:12 -04:00
Luis Fernando Molina d8711f68b8 API Data Fetcher node initial value bug fixed 2021-05-31 14:53:35 +02:00
Luis Fernando Molina b4d8f0bba6 Merge pull request #1035 from Smidy13/develop
Bug Fix: Tutorial Reference Missing
2021-05-31 08:30:42 -04:00
Julian Molina b70b244ed0 Merge pull request #1036 from julian-molina/develop
Contribution: Trading system design tutorials, 2nd
2021-05-31 13:47:18 +02:00
Brenden Harrell b95fbf127d Merge branch 'develop' of https://github.com/harrellbm/Superalgos into develop 2021-05-31 06:40:05 -05:00
Brenden Harrell e11fe7ccd3 more typo fixes 2021-05-31 06:40:01 -05:00
B Harrell d08fd76f5e Merge branch 'Superalgos:develop' into develop 2021-05-31 06:37:31 -05:00
Julian Molina 792fef2371 Trading system design tutorials, 2nd 2021-05-31 13:07:42 +02:00
Smidy13 b85218705d Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-31 19:42:47 +12:00
Smidy13 fd130bffe2 Merge branch 'master' of https://github.com/Superalgos/Superalgos into develop 2021-05-31 19:41:54 +12:00
Smidy 2396381390 Merge branch 'Superalgos:develop' into develop 2021-05-31 19:22:34 +12:00
Smidy13 a182a2c3df Bug Fix: Tutorial Reference Missing 2021-05-31 19:11:21 +12:00
Luis Fernando Molina d72ee8ab8c Merge pull request #1034 from Superalgos/dependabot/npm_and_yarn/Client/ws-7.4.6
Bump ws from 7.2.3 to 7.4.6 in /Client
2021-05-30 19:41:22 -04:00
dependabot[bot] 1ba978d9f7 Bump ws from 7.2.3 to 7.4.6 in /Client
Bumps [ws](https://github.com/websockets/ws) from 7.2.3 to 7.4.6.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.2.3...7.4.6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-30 23:19:05 +00:00
Julian Molina 2303e58844 Merge pull request #1033 from julian-molina/develop
Contribution: Beyond the basics review
2021-05-30 18:52:42 +02:00
Julian Molina 1b9c70e14b Beyond the basics review 2021-05-30 18:50:11 +02:00
Julian Molina 2694a6a401 Merge pull request #1032 from 9808us/develop
Hello World Workspace + Tutorial Fix for Beta10
2021-05-30 17:23:48 +02:00
Julian Molina 0484b55077 Merge pull request #1030 from RalfWeiss/plugins-docs
Contribution: My Superalgos Review
2021-05-30 17:23:23 +02:00
Julian Molina e68d3e4dfc Merge pull request #1026 from brombispi/plugins-docs
Contribution: Best Ever
2021-05-30 17:22:33 +02:00
9808us 94a6f7b8a8 Hello World Workspace + Tutorial Fix for Beta10 2021-05-30 16:55:22 +02:00
Luis Fernando Molina 2e28514a00 Merge pull request #1031 from 9808us/develop
Hello World Workspace fix for Beta10
2021-05-30 10:26:42 -04:00
9808us f468b146d9 Hello World Workspace Fix for Beta10 2021-05-30 16:24:24 +02:00
ralf 9532c6cdb7 My Superalgos Review 2021-05-30 15:36:25 +02:00
Julian Molina f5202e36d4 Merge pull request #1029 from julian-molina/develop
Contribution: Basic education revision complete
2021-05-30 15:01:53 +02:00
Julian Molina 9f10e4b83b Basic education revision complete 2021-05-30 15:00:27 +02:00
9808us d978df049e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-30 13:49:40 +02:00
Julian Molina bea3bf2de4 Merge pull request #1028 from julian-molina/develop
Contribution: Basic Education pages + Masters data mine
2021-05-30 13:47:06 +02:00
Julian Molina bfc8e6931f Basic Education pages + Masters data mine 2021-05-30 13:45:43 +02:00
Julian Molina 13a2a26f73 Merge pull request #1027 from julian-molina/develop
Contribution: Welcome tutorial finished
2021-05-30 12:38:07 +02:00
Julian Molina 129001a041 Welcome tutorial finished 2021-05-30 12:35:27 +02:00
9808us 2638ad0c4d Merge branch 'master' of https://github.com/Superalgos/Superalgos into develop 2021-05-30 12:28:45 +02:00
Razvan Dumitru 8f761c5477 Best Ever 2021-05-30 09:39:04 +02:00
Razvan Dumitru b3f197482f Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-30 09:04:39 +02:00
Julian Molina 1f91a84654 Merge pull request #1017 from julian-molina/develop
Contribution: Welcome tutorial updates
2021-05-30 00:41:17 +02:00
Luis Fernando Molina 50546e05f2 Merge pull request #1025 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Bot Demo Workspace Plugin updated
2021-05-29 16:18:16 -04:00
Luis Fernando Molina 79c79c54ef API Data Fetcher Bot Demo Workspace Plugin updated 2021-05-29 22:17:03 +02:00
Luis Fernando Molina 0e0c17b0f8 Merge pull request #1024 from Luis-Fernando-Molina/develop
Contribution: Plotting Improvements
2021-05-29 15:48:11 -04:00
Luis Fernando Molina 1538ab7f47 Plotting Improvements 2021-05-29 21:47:01 +02:00
Luis Fernando Molina fd599c254e Merge pull request #1022 from PLuv/develop
Docs Updates
2021-05-29 12:41:10 -04:00
Philip Love f97a35b005 Update: Docs for Close Stage Behaviour 2021-05-29 11:10:24 -04:00
Philip Love fa64a8d37b Update: Some Docs Definitions 2021-05-29 10:56:17 -04:00
Philip Love 6b2d6847c7 Merge remote-tracking branch 'upstream/develop' into develop 2021-05-29 10:54:15 -04:00
Brenden Harrell 2f47213ab8 Type Fixes 2021-05-29 08:35:40 -05:00
Luis Fernando Molina f814a03e0a Merge pull request #1020 from harrellbm/develop
Add Package.json for API Data Fetcher Dep Install
2021-05-29 09:04:51 -04:00
Luis Fernando Molina fbf6bd9339 Merge pull request #1021 from Luis-Fernando-Molina/develop
Contribution: Docs Imprevementes - Questions Answered
2021-05-29 09:03:23 -04:00
Luis Fernando Molina c7534a3a8e Docs Imprevementes - Questions Answered 2021-05-29 15:02:18 +02:00
Brenden Harrell f00cbc0409 Add Package.json for API Data Fetcher Dep Install 2021-05-28 22:08:26 -05:00
Philip Love ae0018348f Docs: user-defined-variables 2021-05-28 21:04:57 -04:00
Luis Fernando Molina 5fc83ea7eb Merge pull request #1018 from harrellbm/develop
Finish Initial Data Mining Docs Edit
2021-05-28 19:41:26 -04:00
Brenden Harrell 0edf17e5f1 Finish initial edit of data mining docs 2021-05-28 17:04:49 -05:00
Brenden Harrell 4a885047a5 Data Mining Docs Edit pp 11-15 2021-05-28 15:39:07 -05:00
Julian Molina 92295f3f3c Welcome tutorial updates 2021-05-28 22:36:12 +02:00
Luis Fernando Molina d69cefecb5 Merge pull request #1016 from harrellbm/develop
Data Mining Edit pp 6-10
2021-05-28 13:53:13 -04:00
B Harrell 12ea0c809b Merge branch 'Superalgos:develop' into develop 2021-05-28 12:44:13 -05:00
Brenden Harrell 33bffbbd5e Data Mining Edit pp 5-10 2021-05-28 12:42:54 -05:00
Luis Fernando Molina 55cb35be44 Merge pull request #1015 from Luis-Fernando-Molina/develop
Contribution: https module replaced by node-fetch, plus bug fixes at API Data Fetcher Bot
2021-05-28 13:12:23 -04:00
Luis Fernando Molina 6130e9e1e5 https module replaced by node-fetch, plus bug fixes at API Data Fetcher Bot 2021-05-28 19:10:51 +02:00
Julian Molina 82e4a1f141 Merge pull request #1014 from julian-molina/develop
Contribution: Delete workspace
2021-05-28 17:40:18 +02:00
Julian Molina 011c5fc5e0 Delete workspace 2021-05-28 17:39:42 +02:00
Luis Fernando Molina e897a554c6 Merge pull request #1013 from Jefferson111/plugins-docs
Contribution: My Superalgos Review
2021-05-28 10:49:28 -04:00
Jefferson111 89b52f3edc My Superalgos Review 2021-05-28 22:46:22 +08:00
Luis Fernando Molina 19455657ab Merge pull request #1002 from PLuv/develop
Manage Stage No longer required to exist ; Close-Stage now closes strategy if no Target asset exists to Trade
2021-05-28 10:44:17 -04:00
Luis Fernando Molina 0658d2d284 Merge pull request #1012 from harrellbm/develop
Update Charting Workspace for Mine Split and Edit Data Docs PP 1-5
2021-05-28 10:43:06 -04:00
Brenden Harrell 4b21756d1d Edit and Style PP 1-5 Data Mining Docs 2021-05-28 09:39:22 -05:00
Luis Fernando Molina 167a9bedd1 Merge pull request #1011 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed Bollinger Bands Processes Failing after Master Data Mine Split
2021-05-28 10:37:31 -04:00
Luis Fernando Molina 8993f50169 Bug Fixed Bollinger Bands Processes Failing after Master Data Mine Split 2021-05-28 16:35:56 +02:00
Luis Fernando Molina 1ee6040f0f Merge pull request #1009 from Luis-Fernando-Molina/develop
Contribution: Default Workspace renamed
2021-05-28 10:05:32 -04:00
Luis Fernando Molina 5d5c04bc41 Default Workspace renamed 2021-05-28 16:05:08 +02:00
Luis Fernando Molina b89de0b437 Merge pull request #1008 from Luis-Fernando-Molina/develop
Contribution: BUG Fixed Tutorial Previous after Resume sending you to the begining
2021-05-28 09:56:36 -04:00
Luis Fernando Molina ec7654a9b7 BUG Fixed Tutorial Previous after Resume sending you to the begining 2021-05-28 15:55:09 +02:00
Julian Molina ae379e3086 Merge pull request #1007 from julian-molina/develop
Contribution: Getting Started Tutorials workspace revision
2021-05-28 15:32:09 +02:00
Julian Molina 91d990759b Getting Started Tutorials workspace and updates 2021-05-28 15:31:08 +02:00
Julian Molina 06d7679684 Getting Started Tutorials workspace revision 2021-05-28 15:20:37 +02:00
B Harrell 88826a90c7 Merge branch 'Superalgos:develop' into develop 2021-05-28 06:13:43 -05:00
Julian Molina bb9f5e391d Merge pull request #1006 from 9808us/develop
Misspelling Fix
2021-05-28 13:08:16 +02:00
9808us 4876963d85 Misspelling Fix 2021-05-28 13:05:20 +02:00
Julian Molina 6f1cdf099d Merge pull request #1005 from julian-molina/develop
Contribution: Getting started workspace
2021-05-28 10:05:24 +02:00
Julian Molina 838e01e358 Getting started workspace 2021-05-28 09:26:07 +02:00
Luis Fernando Molina 312d0740c6 Merge pull request #1004 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Demo Plugin Upated
2021-05-28 00:32:51 -04:00
Luis Fernando Molina 17f0a3631f API Data Fetcher Demo Plugin Upated 2021-05-28 06:31:25 +02:00
Brenden Harrell 3e45c646d8 Update Workspace and Tutorial for Masters Split 2021-05-27 22:32:41 -05:00
Luis Fernando Molina fd54e62137 Merge pull request #1003 from Luis-Fernando-Molina/develop
Contribution: API Maps now can be Plugins
2021-05-27 22:02:34 -04:00
Luis Fernando Molina 2a16d70393 API Maps now can be Plugins 2021-05-28 04:01:04 +02:00
Philip Love d633fb1ef3 Fix: Close-Stage not closing strategy in event no Target Asset available to be traded; Open-Stage force to closing when Close-Stage in Opening 2021-05-27 21:11:33 -04:00
Philip Love 7d4804940d Merge remote-tracking branch 'upstream/develop' into develop 2021-05-27 20:50:34 -04:00
Luis Fernando Molina 3a603a067d Merge pull request #1001 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher feature parameters with default values at the API Map
2021-05-27 20:31:35 -04:00
Luis Fernando Molina dfff4b387d API Data Fetcher DeepScan Bugs Fixed 2021-05-28 02:29:46 +02:00
Luis Fernando Molina d24604ec24 API Data Fetcher feature parameters with default values at the API Map 2021-05-28 02:05:22 +02:00
Luis Fernando Molina 126ea143a3 Merge pull request #1000 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Bot Resilience Improved: No Connection Exception Handled
2021-05-27 15:04:14 -04:00
Luis Fernando Molina b7f36f8d4c New Troubleshooting Page 2021-05-27 21:03:08 +02:00
Luis Fernando Molina ad8c47abc3 API Data Fetcher Bot Resilience Improved: No Connection Exception Handled 2021-05-27 20:12:05 +02:00
Luis Fernando Molina 304e1cf5ad Merge pull request #999 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed at Dataset Type Converter
2021-05-27 11:54:00 -04:00
Luis Fernando Molina 128c4c14fb Bug Fixed at Dataset Type Converter 2021-05-27 17:45:37 +02:00
Luis Fernando Molina 0906b748ee Merge pull request #998 from Luis-Fernando-Molina/develop
Contribution: Node Docs Improved
2021-05-27 09:09:47 -04:00
Luis Fernando Molina 87116a5983 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-27 15:08:24 +02:00
Luis Fernando Molina b904277d8d Node Docs Improved 2021-05-27 15:07:58 +02:00
Julian Molina c00ef37516 Merge pull request #997 from julian-molina/develop
Contribution: Getting started provisional workspace
2021-05-27 11:53:57 +02:00
Julian Molina ac8556d18e Getting started provisional workspace 2021-05-27 11:52:11 +02:00
Philip Love 156786f8a7 Fix: Manage-Stage no longer needs to exist per the docs 2021-05-26 23:16:40 -04:00
Luis Fernando Molina 2be56c941e Merge pull request #996 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed, Removing Masters Hardcoded name after Masters Data Mine splitted
2021-05-26 18:29:54 -04:00
Luis Fernando Molina 136f72c906 Bug Fixed, Removing Masters Hardcoded name after Masters Data Mine splitted 2021-05-27 00:26:22 +02:00
Luis Fernando Molina bcc103c73e Merge pull request #995 from Luis-Fernando-Molina/develop
Contribution: bug fixed Custom Plotters Code Moved
2021-05-26 17:05:27 -04:00
Luis Fernando Molina 74bdae6681 bug fixed Custom Plotters Code Moved 2021-05-26 23:03:13 +02:00
Luis Fernando Molina 37d510003f Merge pull request #994 from Luis-Fernando-Molina/develop
Contribution: bug fixed Plotters with hardcoded Data Mine Name
2021-05-26 16:50:18 -04:00
Luis Fernando Molina 11d48f3c0e bug fixed Plotters with hardcoded Data Mine Name 2021-05-26 22:49:15 +02:00
Luis Fernando Molina 2a35196c64 Merge pull request #993 from Luis-Fernando-Molina/develop
Contribution: bug fixed Bollinger Bands with hardcoded Data Mine Name
2021-05-26 16:12:11 -04:00
Luis Fernando Molina f52aaa40fd bug fixed Bollinger Bands with hardcoded Data Mine Name 2021-05-26 22:09:44 +02:00
Luis Fernando Molina 1c72dfaea1 Merge pull request #992 from Luis-Fernando-Molina/develop
Contribution: bug fixed Candles Volumes with hardcoded Data Mine Name
2021-05-26 15:41:30 -04:00
Luis Fernando Molina 178caee4b8 bug fixed Candles Volumes with hardcoded Data Mine Name 2021-05-26 21:34:46 +02:00
Luis Fernando Molina 6f58f3cc3f Merge pull request #990 from harrellbm/develop
Edit Refactor section of Readme
2021-05-26 15:05:36 -04:00
Luis Fernando Molina a9c1d15823 Merge pull request #991 from Luis-Fernando-Molina/develop
Contribution: New Superalgos Concepts at the Docs
2021-05-26 14:59:14 -04:00
Luis Fernando Molina 1a582183d0 bug fixed Exchange Raw Data with hardcoded mine name 2021-05-26 20:58:22 +02:00
Luis Fernando Molina 08e2e0f96f New Superalgos Concepts at the Docs 2021-05-26 20:37:59 +02:00
B Harrell 58b2e7d69e Edit Refactor section of Readme 2021-05-26 13:01:44 -05:00
Luis Fernando Molina 513c0fef75 Merge pull request #989 from harrellbm/develop
Clarify Readme language
2021-05-26 13:38:55 -04:00
B Harrell a48f7f6f05 Clarify Readme language 2021-05-26 12:26:19 -05:00
Luis Fernando Molina de873393f6 Update README.md 2021-05-26 18:48:18 +02:00
Luis Fernando Molina 9233783ded Merge pull request #988 from Luis-Fernando-Molina/develop
Contribution: Huge Refactoring Multi-Perio into Multi Time Frame
2021-05-26 12:46:48 -04:00
Luis Fernando Molina c77999c8e4 Huge Refactoring Multi-Perio into Multi Time Frame 2021-05-26 18:05:11 +02:00
Luis Fernando Molina 1b47e77a83 Merge pull request #987 from Superalgos/plugins-docs
Plugins docs into Develop in preparation for release of Beta 10
2021-05-26 10:09:14 -04:00
Luis Fernando Molina 530c87bfb6 Merge pull request #985 from julian-molina/plugins-docs
Contribution: Beyond the Basics tutorial...
2021-05-26 10:06:57 -04:00
Luis Fernando Molina 2907b9bf39 Merge pull request #983 from Luis-Fernando-Molina/develop
Contribution: Docs Inproved
2021-05-26 10:04:28 -04:00
Luis Fernando Molina c44b42b7a0 Merge pull request #986 from harrellbm/develop
Add Note for Setup Script to ReadMe
2021-05-26 10:02:40 -04:00
B Harrell 48a289085e Add Setup Script note to ReadMe 2021-05-26 08:06:04 -05:00
Julian Molina f24276a3da Beyond the Basics tutorial... 2021-05-26 14:02:38 +02:00
Julian Molina 622e8f83de Merge pull request #984 from julian-molina/plugins-docs
Contribution: Charts tutorial fixes
2021-05-26 09:28:56 +02:00
Julian Molina bb4954de9b Charts tutorial fixes 2021-05-26 09:27:53 +02:00
Luis Fernando Molina 82751bd9ba Docs Inproved 2021-05-26 04:03:46 +02:00
Luis Fernando Molina c9b0685db0 Merge pull request #982 from harrellbm/plugins-docs
Final Touches on First Charting Space Tutorial
2021-05-25 22:00:22 -04:00
B Harrell 3f3b08e578 Merge branch 'Superalgos:develop' into develop 2021-05-25 20:24:53 -05:00
Brenden Harrell f3685ffc4a Final Listing of First Charting Space Tutorial 2021-05-25 20:20:04 -05:00
Brenden Harrell 02986a1879 Update Tutorial Step for Binance.com 2021-05-25 19:47:51 -05:00
Brenden Harrell 2d9da9380c Update Workspace 2021-05-25 19:44:36 -05:00
Brenden Harrell c863353fce Update Tutorial Page 2021-05-25 18:54:41 -05:00
Brenden Harrell 01c4853fba Rename Charting Space Tutorial 2021-05-25 18:47:30 -05:00
Luis Fernando Molina 6788f1653d Merge pull request #981 from Luis-Fernando-Molina/develop
Contribution: API Fetcher Bot docs polishing iteration finished
2021-05-25 17:40:38 -04:00
Luis Fernando Molina 72c3e3d6ec API Fetcher Bot DeepScan Bug Fixed 2021-05-25 23:39:18 +02:00
Luis Fernando Molina 909412eeb9 API Fetcher Bot docs polishing iteration finished 2021-05-25 23:35:25 +02:00
B Harrell a08860d9fc Revert "Add Back tfjs Source Files"
This reverts commit 8ca90466e4.
2021-05-25 11:05:23 -05:00
B Harrell 42276e9c65 Revert "Remove TensorFlow Project from Setup Process"
This reverts commit f1cc1caf20.
2021-05-25 11:05:06 -05:00
B Harrell 6cdcbcede7 Revert "TensorFlow Source files"
This reverts commit cab277cf2c.
2021-05-25 11:04:58 -05:00
B Harrell f1da5ab2f0 Revert "TensorFlow Source"
This reverts commit e1791c2630.
2021-05-25 11:04:52 -05:00
B Harrell bcf55dfded Revert "Tensorflow Source"
This reverts commit a58bf292a9.
2021-05-25 11:04:46 -05:00
B Harrell 18ad1ad641 Revert "TensorFlow Source"
This reverts commit 3d3ab2548d.
2021-05-25 11:04:38 -05:00
B Harrell 58be63eca6 Revert "TensorFlow Source"
This reverts commit 8c7ff0c1d9.
2021-05-25 11:04:28 -05:00
B Harrell c83fab32a9 Revert "TensorFlow Source"
This reverts commit 45a00fb17f.
2021-05-25 11:04:19 -05:00
B Harrell c4269bbd3a Revert "TensorFlow Source"
This reverts commit 12d53f218e.
2021-05-25 11:04:10 -05:00
B Harrell bc9d981422 Revert "TensorFlow source"
This reverts commit 938b5fbfb4.
2021-05-25 11:04:03 -05:00
B Harrell ad1ad9bb27 Revert "TensorFlow Source"
This reverts commit 6c046725e5.
2021-05-25 11:03:55 -05:00
B Harrell 702fe61068 Revert "TensorFlow Linux Binaries"
This reverts commit 244c43a20e.
2021-05-25 11:03:45 -05:00
B Harrell 270bf7b96e Revert "TensorFlow Linux Binaries"
This reverts commit 59534f0846.
2021-05-25 11:03:39 -05:00
B Harrell a92ae52de0 Revert "TensorFlow Binary"
This reverts commit 74ad625e53.
2021-05-25 11:03:31 -05:00
B Harrell f19065dc2a Revert "Remove gitattributes"
This reverts commit 683d6d2948.
2021-05-25 11:03:24 -05:00
B Harrell ed3920b245 Revert "Revert Setup Process"
This reverts commit 044e2b63e9.
2021-05-25 11:03:12 -05:00
B Harrell 6088d1d50a Revert "Revert gitignore"
This reverts commit 9133f2cc73.
2021-05-25 11:03:04 -05:00
B Harrell 1c44426ff2 Revert "Remove tfjs-node Deps"
This reverts commit 831437c1aa.
2021-05-25 11:02:48 -05:00
B Harrell 076800ed2d Revert "Remove more node_module deps"
This reverts commit 2fca1d5e74.
2021-05-25 11:02:34 -05:00
B Harrell 0f0b8c0339 Revert "Finish removing tfjs-node"
This reverts commit 9ea4666211.
2021-05-25 11:02:13 -05:00
Brenden Harrell 9ea4666211 Finish removing tfjs-node 2021-05-25 10:49:15 -05:00
Brenden Harrell 2fca1d5e74 Remove more node_module deps 2021-05-25 10:48:22 -05:00
Brenden Harrell 831437c1aa Remove tfjs-node Deps 2021-05-25 10:47:22 -05:00
Brenden Harrell 9133f2cc73 Revert gitignore 2021-05-25 10:43:45 -05:00
Brenden Harrell 044e2b63e9 Revert Setup Process 2021-05-25 10:42:39 -05:00
B Harrell c4e16038a4 Merge branch 'Superalgos:develop' into develop 2021-05-25 10:33:12 -05:00
Luis Fernando Molina 1aaa39e284 Merge pull request #980 from Luis-Fernando-Molina/develop
Contribution: New Docs Concepts
2021-05-25 11:26:27 -04:00
Luis Fernando Molina f4c8f1abce New Docs Concepts 2021-05-25 17:25:21 +02:00
Brenden Harrell 683d6d2948 Remove gitattributes 2021-05-25 10:12:24 -05:00
Luis Fernando Molina 69bf426a08 Merge pull request #979 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Docs improved
2021-05-25 10:56:28 -04:00
Luis Fernando Molina 7d1fe263aa API Data Fetcher Docs improved 2021-05-25 16:54:35 +02:00
Brenden Harrell 74ad625e53 TensorFlow Binary 2021-05-25 09:44:30 -05:00
Brenden Harrell 59534f0846 TensorFlow Linux Binaries 2021-05-25 09:31:05 -05:00
Brenden Harrell 244c43a20e TensorFlow Linux Binaries 2021-05-25 09:28:55 -05:00
Brenden Harrell 6c046725e5 TensorFlow Source 2021-05-25 09:28:18 -05:00
Brenden Harrell 938b5fbfb4 TensorFlow source 2021-05-25 09:27:30 -05:00
Brenden Harrell 12d53f218e TensorFlow Source 2021-05-25 09:25:59 -05:00
Brenden Harrell 45a00fb17f TensorFlow Source 2021-05-25 09:24:25 -05:00
Brenden Harrell 8c7ff0c1d9 TensorFlow Source 2021-05-25 09:17:10 -05:00
Brenden Harrell 3d3ab2548d TensorFlow Source 2021-05-25 09:16:24 -05:00
Brenden Harrell a58bf292a9 Tensorflow Source 2021-05-25 09:15:39 -05:00
Brenden Harrell e1791c2630 TensorFlow Source 2021-05-25 09:14:13 -05:00
Brenden Harrell cab277cf2c TensorFlow Source files 2021-05-25 09:13:11 -05:00
Brenden Harrell f1cc1caf20 Remove TensorFlow Project from Setup Process 2021-05-25 09:01:19 -05:00
Brenden Harrell 8ca90466e4 Add Back tfjs Source Files 2021-05-25 08:37:47 -05:00
Luis Fernando Molina 0cc1d6b378 Merge pull request #978 from Luis-Fernando-Molina/develop
Contribution: BUG FIX Workspace List not loading plugins
2021-05-25 06:57:07 -04:00
Luis Fernando Molina 5e068f0012 BUG FIX Workspace List not loading plugins 2021-05-25 12:55:49 +02:00
Luis Fernando Molina ea7179d12b Merge pull request #977 from Luis-Fernando-Molina/develop
Contribution: Final set of icons for API Data Fetcher by Hirajin Koizuko (Ron)
2021-05-24 23:00:45 -04:00
Luis Fernando Molina 97572ed0a4 Final set of icons for API Data Fetcher by Hirajin Koizuko (Ron) 2021-05-25 04:57:06 +02:00
Luis Fernando Molina 1c4282b743 Merge pull request #976 from Luis-Fernando-Molina/develop
Contribution: Data Mining Docs Topic Reviewed
2021-05-24 21:30:50 -04:00
Luis Fernando Molina 0f8dce49c1 Merge pull request #975 from harrellbm/develop
Update Windows Launch Script and Rebuild Tensorflow Package files
2021-05-24 21:29:58 -04:00
Luis Fernando Molina 173f752dc1 Data Mining Docs Topic Reviewed 2021-05-25 03:25:30 +02:00
B Harrell dd2ad0397b Merge branch 'Superalgos:develop' into develop 2021-05-24 19:52:06 -05:00
Brenden Harrell cc50d576f1 Rebuild: Tensorflow Package Files 2021-05-24 19:51:37 -05:00
Luis Fernando Molina 347c15189b Merge pull request #974 from Luis-Fernando-Molina/develop
Contribution: Available Workspaces Look and Feel Improved
2021-05-24 19:22:04 -04:00
Luis Fernando Molina 0f0ede81b2 Available Workspaces Look and Feel Improved 2021-05-25 01:19:43 +02:00
Brenden Harrell 04dad67c01 Fix: remove unecissary dep for tensorflow 2021-05-24 15:09:49 -05:00
Luis Fernando Molina 543aac058c Refining the error handling 2021-05-24 21:47:04 +02:00
Brenden Harrell 38bd1badb9 Update: package files with windows-build-tools 2021-05-24 13:57:03 -05:00
Luis Fernando Molina 99376d2072 Utilities Error Handling Functions imlpemented 2021-05-24 20:03:16 +02:00
Julian Molina 4ed52e3df7 Merge pull request #973 from rjkilpatrick/patch-2
Update README.md
2021-05-24 20:00:23 +02:00
John Kilpatrick 9824567998 Update README.md
Fix small typos and grammar mistakes
2021-05-24 18:31:32 +01:00
Brenden Harrell 207311b14c Fix: Windows Launch for Shortcut on Diff Drive 2021-05-24 12:25:15 -05:00
Julian Molina a04b2be446 Merge pull request #972 from julian-molina/plugins-docs
Contribution: Contributing tutorials
2021-05-24 19:08:37 +02:00
Julian Molina 5f147eca7f Contributing tutorials 2021-05-24 19:04:40 +02:00
Luis Fernando Molina 350e45825a Merge pull request #970 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Bot Error Handling
2021-05-24 11:49:50 -04:00
Luis Fernando Molina b544a2e69c DeepScan Bug Fixed 2021-05-24 17:48:47 +02:00
Luis Fernando Molina 9b1714b2e7 API Data Fetcher Bot Error Handling 2021-05-24 17:43:51 +02:00
Luis Fernando Molina 258347bc94 Merge pull request #969 from Luis-Fernando-Molina/develop
Contribution: Some Error Handling at API Data Fetcher and reduced console log width
2021-05-24 09:16:56 -04:00
Luis Fernando Molina 15e2e1ac67 Some Error Handling at API Data Fetcher and reduced console log width 2021-05-24 15:12:44 +02:00
Luis Fernando Molina 81ac113e8f Making things more clear 2021-05-24 14:00:38 +02:00
Luis Fernando Molina d475ac95e3 Merge pull request #968 from harrellbm/develop
Unified Shortcut/Uninstall Scripts and Doc Updates
2021-05-23 22:05:07 -04:00
Brenden Harrell df1fb3f0ef Fix: clean up code 2021-05-23 20:24:06 -05:00
B Harrell e2ff7ecac6 Update: Readme for Unified Scripts
Explanations for automatic shortcut creation, noShortcuts flag and unified Uninstall added.
2021-05-23 16:55:51 -05:00
B Harrell 990f1c1c3c Merge branch 'Superalgos:develop' into develop 2021-05-23 16:15:20 -05:00
Brenden Harrell a3ff7c3116 Update: Docs for Launch-Scripts 2021-05-23 16:13:22 -05:00
Brenden Harrell b1bd4a350a Delete: Old Uninstall Script 2021-05-23 15:21:50 -05:00
Brenden Harrell 987eb76023 Add: Finish Unified Uninstall Script 2021-05-23 15:21:10 -05:00
Brenden Harrell 32eee83073 Add: Unified uninstall Script Finished Ubuntu side 2021-05-23 13:14:33 -06:00
Brenden Harrell 8319db6588 Modify: Optimize Launch Script for Linux and Mac 2021-05-23 12:52:13 -06:00
Brenden Harrell eef8f6e03c Fix: Adjust Paths for Setup Run 2021-05-23 12:06:13 -06:00
Brenden Harrell 8d64c231c0 Add: Create Shortcut Command to Setup Script 2021-05-23 12:01:34 -06:00
Brenden Harrell 8e87370cfb Delete: Old create-shortcut Scripts 2021-05-23 10:06:16 -06:00
Brenden Harrell 46cfe71c32 Modify: Unified create-shortcut Script 2021-05-23 10:05:09 -06:00
Luis Fernando Molina aa30e40791 Infraestructure Ready to integrate API Data Fetcher to the Docs 2021-05-23 17:13:13 +02:00
Luis Fernando Molina f9e276f1f6 Merge pull request #967 from Luis-Fernando-Molina/develop
Contribution: More Icons provided by Ron for API Data Fetcher Bot
2021-05-23 09:23:42 -04:00
Luis Fernando Molina 3764fcb274 More Icons provided by Ron for API Data Fetcher Bot 2021-05-23 15:22:40 +02:00
Brenden Harrell f2877386c8 Unified Shortcut Script, Windows finished 2021-05-22 21:21:37 -05:00
Luis Fernando Molina a0e37220ad Merge pull request #966 from Luis-Fernando-Molina/develop
Contribution: Data Mining Topic Documentation expanded.
2021-05-22 18:46:40 -04:00
Luis Fernando Molina e6061da09a Data Mining Topic Documentation expanded. 2021-05-23 00:45:13 +02:00
Luis Fernando Molina 1d5138753a Merge branch 'plugins-docs' into develop 2021-05-23 00:24:15 +02:00
Luis Fernando Molina 3042cede1d Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-23 00:23:23 +02:00
Luis Fernando Molina 387a8204fa Merge pull request #962 from PLuv/develop
Fixed: Bug where checkUserDefinedCode called even if stage didn't exist
2021-05-22 15:17:04 -04:00
Julian Molina c710014392 Merge pull request #963 from julian-molina/plugins-docs
Contribution: Basic Education tutorial fixes
2021-05-22 13:49:05 +02:00
Julian Molina 38550c54a5 Basic Education tutorial fixes 2021-05-22 13:47:28 +02:00
Julian Molina ce9acc2900 Merge pull request #960 from tikry2021/plugins-docs
Contribution: Workspace panel is on the left
2021-05-22 11:15:48 +02:00
Philip Love 6f1c506d9b Modify: Fix user variables in trading engine numbered 0-9 - add 2 more market buy/sell for users 2021-05-21 21:54:19 -04:00
Philip Love 5edc510c2c Fixed: Bug where checkUserDefinedCode called even if stage didn't exist 2021-05-21 21:52:32 -04:00
Luis Fernando Molina 2ef6136989 Merge pull request #961 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Daily Files working, all time high being plotted
2021-05-21 18:12:57 -04:00
Luis Fernando Molina f5a46b5a06 API Data Fetcher Daily Files working, all time high being plotted 2021-05-22 00:11:05 +02:00
Luis Fernando Molina 6c117f3eab Tyding up the code 2021-05-21 23:38:48 +02:00
Till Rupp ed76069cc3 Workspace panel is on the left 2021-05-21 22:14:12 +02:00
Luis Fernando Molina e3a2e60209 Merge pull request #959 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Daily Files being processed
2021-05-21 15:01:28 -04:00
Luis Fernando Molina 4fa59deaab Merge pull request #957 from ssplatt/docker-update
Update Dockerfile for latest code update dependencies
2021-05-21 15:01:07 -04:00
Julian Molina e4066686ea Merge pull request #958 from harrellbm/plugins-docs
Add Insertion Carat Back to Docs Textareas
2021-05-21 20:38:03 +02:00
ssplatt 97f816c113 fix volume mounts 2021-05-21 14:21:51 -04:00
Brenden Harrell b888018b22 Add Insertion Carat Back to Docs Textareas 2021-05-21 13:17:37 -05:00
Luis Fernando Molina 32c1ac5e56 Bug Fixed Daily is now running 2021-05-21 19:26:33 +02:00
Luis Fernando Molina 3676d4ac8c Refactoring TimePeriods for TimeFramesArray 2021-05-21 19:16:00 +02:00
Luis Fernando Molina ca5573459e Bug Fixes Daily partially running 2021-05-21 19:02:17 +02:00
Julian Molina 60fd72479d Merge pull request #956 from harrellbm/plugins-docs
Charting Space Tutorial Revision 5 and MapToggle option and Insertion Carat Css fix
2021-05-21 17:43:46 +02:00
Luis Fernando Molina 328963e196 Update FetchingProcess.js 2021-05-21 17:39:15 +02:00
ssplatt fc3037358d update dockerfile for latest code update dependencies 2021-05-21 11:27:09 -04:00
Brenden Harrell 4227252627 Update Custom Charts Workspace 2021-05-21 09:13:11 -05:00
Brenden Harrell b6be55f2d0 Fix Insertion Carat Showing up in Docs and Tutorial Panel 2021-05-21 09:09:22 -05:00
Luis Fernando Molina bda5920088 Merge pull request #955 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Bug Fixes & Aggregation Library
2021-05-21 09:44:00 -04:00
Luis Fernando Molina 74e4533d8e Merge pull request #954 from suttridge/develop
Contribution: Updated tested exchanges to indicate that Luno exchange is not longer suitable for use.
2021-05-21 09:43:37 -04:00
Luis Fernando Molina 88afcd237e Bug fixed with beginingOfTheMarket context variable 2021-05-21 15:40:37 +02:00
Brenden Harrell 0b9fdaf513 Repaginate Charting Space Tutorial 2021-05-21 08:36:21 -05:00
Luis Fernando Molina 4ab1b9d86c Data Aggregation Functions Library fully implemented and running 2021-05-21 14:46:18 +02:00
Steve Langridge e569c72573 Updated tested exchanges to indicate that Luno exchange is not longer suitable for use. 2021-05-21 11:09:07 +02:00
Luis Fernando Molina 198fc130b2 Merge pull request #953 from harrellbm/develop
Update Readme for New Dependency Setup
2021-05-20 22:51:15 -04:00
B Harrell bf053c688e Update Readme for New Dependency Setup 2021-05-20 21:27:57 -05:00
Luis Fernando Molina 4db9e0e3ce Common Function Library Implemented for Market and Daily Frameworks 2021-05-21 01:41:34 +02:00
Luis Fernando Molina 1a3ec7d03b Merge pull request #952 from Luis-Fernando-Molina/develop
Contribution: node_modules folders removed
2021-05-20 15:44:12 -04:00
Luis Fernando Molina 44111f6dea Update .gitignore 2021-05-20 21:39:31 +02:00
Luis Fernando Molina ac5774dfb2 node_modules folders removed from all places 2021-05-20 21:39:08 +02:00
Luis Fernando Molina f7423e26b2 Merge pull request #950 from harrellbm/develop
Initial Script to Install node dependencies
2021-05-20 15:28:03 -04:00
Luis Fernando Molina 94fe3511d0 Merge pull request #951 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher bot, working for Market Files with Messari demo.
2021-05-20 13:49:25 -04:00
Luis Fernando Molina ab3fe8ab6c API Data Fetcher bot, working for Market Files with Messari demo. 2021-05-20 19:29:57 +02:00
Luis Fernando Molina 9eb6732638 Market Files Working up to All Time High Plotter 2021-05-20 19:23:55 +02:00
Brenden Harrell 2a6632f159 Charting Space Tutorial Revision 5 2021-05-20 10:17:29 -05:00
Luis Fernando Molina 26a5567f1c Update FromOneMinToMultiPeriodMarket.js 2021-05-20 16:26:54 +02:00
B Harrell b3710db27d Merge branch 'Superalgos:plugins-docs' into plugins-docs 2021-05-20 09:04:46 -05:00
Brenden Harrell 518c993e39 Type Fix 2021-05-19 20:01:33 -05:00
Brenden Harrell 77c00b8a3c Finished Initial Setup Script 2021-05-19 19:58:47 -05:00
Luis Fernando Molina 9d0e5aa3da API Data Fetcher Aggregated File Being Saved 2021-05-19 23:26:58 +02:00
Luis Fernando Molina afc81903c5 API Data Fetcher bot process improved 2021-05-19 22:38:11 +02:00
Brenden Harrell a337f6f4c0 Tweaks for setup script 2021-05-19 15:23:17 -05:00
Brenden Harrell 4b32d7c30a Add node_modules to .gitignore 2021-05-19 13:28:46 -05:00
Brenden Harrell a3afb73cf2 Package.jsons to Handle npm ci Command 2021-05-19 13:22:19 -05:00
Brenden Harrell ec2db1e887 Initial Setup Script to install Node Dependencies 2021-05-19 12:50:34 -05:00
Luis Fernando Molina 98f79f5162 Merge pull request #946 from Luis-Fernando-Molina/develop
Contribution: This is my contribution to Superalgos
2021-05-19 12:29:02 -04:00
Luis Fernando Molina 232b2ef63c API Data Fetcher DeepScan more fixes 2021-05-19 18:26:59 +02:00
Luis Fernando Molina 5bd2f0c554 API Data Fetcher DeepScan fixes 2021-05-19 18:23:30 +02:00
Luis Fernando Molina a5928dc51d Update Footer.js 2021-05-19 18:02:03 +02:00
Luis Fernando Molina e7e39bb5bd docs improvements: buttons for User Manual, Data Mines and Reviews 2021-05-19 17:29:11 +02:00
Luis Fernando Molina 098843221f Updated Icons 2021-05-19 16:35:15 +02:00
Julian Molina aefa41cd83 Merge pull request #949 from Spodeian/plugins-docs
Contribution: My Superalgos Review
2021-05-19 13:10:27 +02:00
Spodeian efe3f90eaa My Superalgos Review 2021-05-19 20:45:58 +10:00
Julian Molina b8ec01b52d Merge pull request #948 from tikry2021/plugins-docs
Contribution: My Superalgos Review
2021-05-19 08:58:01 +02:00
Julian Molina 7d615ac2f6 Merge pull request #947 from MarcelloPersico/plugins-docs
Contribution: review
2021-05-19 08:56:25 +02:00
Luis Fernando Molina 30644ff9e4 Aggregation Functions fully implemented 2021-05-18 23:58:50 +02:00
Luis Fernando Molina 35164873c2 Aggregation Function semi implemented 2021-05-18 23:36:17 +02:00
Till Rupp 3fe4517286 My Superalgos Review 2021-05-18 23:20:12 +02:00
Marcello Persico 783ea687ba review 2021-05-18 22:41:19 +02:00
Luis Fernando Molina 1b421bfec7 loadExistingFiles function implemented 2021-05-18 21:11:30 +02:00
Luis Fernando Molina 2bccf3518c Some Icons for API Data Fetcher Bot and getContextVariables function implementation 2021-05-18 20:36:27 +02:00
Luis Fernando Molina d18f8cefd7 Hooking the new Framework module to the Indicator Bot 2021-05-18 19:07:45 +02:00
Luis Fernando Molina 2b076c7c41 removing referencies to Candle 2021-05-18 18:19:39 +02:00
Luis Fernando Molina 6030725029 All volume related stuff removed from code 2021-05-18 18:11:24 +02:00
Luis Fernando Molina b787498759 Merge pull request #945 from Luis-Fernando-Molina/develop
Contribution: API CodeBase general mantainance: let thisObject missing fixed
2021-05-18 11:13:51 -04:00
Luis Fernando Molina 29702850b5 API CodeBase general mantainance: let thisObject missing fixed 2021-05-18 16:52:13 +02:00
Luis Fernando Molina 3322ae7272 Merge pull request #944 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher bot, One Min datasets handling
2021-05-18 09:17:00 -04:00
Luis Fernando Molina adcd2f8169 API Data Fetcher bot, One Min datasets handling 2021-05-18 15:16:39 +02:00
B Harrell 20e13e348a Merge branch 'Superalgos:plugins-docs' into plugins-docs 2021-05-18 08:02:31 -05:00
Till Rupp 8483f6b9a9 My Superalgos Review 2021-05-18 00:47:12 +02:00
Luis Fernando Molina 4376ffc3e8 Merge pull request #943 from Luis-Fernando-Molina/develop
Contribution: Legacy Code Mantainance
2021-05-17 14:23:09 -04:00
Luis Fernando Molina e873f5379f Legacy Code Mantainance 2021-05-17 20:21:54 +02:00
Luis Fernando Molina 0de5eba7a5 Merge pull request #941 from PLuv/develop
Fixed: Limit Buy & Sell Quoted Panels
2021-05-17 11:49:15 -04:00
Philip Love 523cd53a9f Fixed: Limit Buy & Sell Quoted Panels 2021-05-17 10:27:57 -04:00
Philip Love 0ff245bdd5 Merge remote-tracking branch 'upstream/develop' into develop 2021-05-17 10:24:13 -04:00
Luis Fernando Molina d072fae4bf Merge pull request #940 from Superalgos/plugins-docs
Plugins docs Service Pack: Include bug fixes at plugins, new Docs, etc.
2021-05-17 10:10:19 -04:00
Luis Fernando Molina 2c125dbe38 Merge pull request #939 from Luis-Fernando-Molina/develop
Contribution: Plugins Docs Merged
2021-05-17 09:58:26 -04:00
Luis Fernando Molina f1d9a05b1f Merge branch 'plugins-docs' into develop 2021-05-17 15:57:40 +02:00
Luis Fernando Molina 68d6bd9c0f Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-17 15:57:06 +02:00
Luis Fernando Molina 8c795d79c2 Merge pull request #938 from Luis-Fernando-Molina/develop
Contribution: API Fetcher Bot: Messari Data Mine with first indicator and plotter tested.
2021-05-17 09:56:31 -04:00
Julian Molina 4a2ffa4ed3 Merge pull request #937 from julian-molina/plugins-docs
Contribution: BBTP syntax fix to tradingCurrent
2021-05-17 14:08:59 +02:00
Julian Molina 60143ba4d0 BBTP syntax fix to tradingCurrent 2021-05-17 14:08:09 +02:00
Julian Molina c2077aedb3 Merge pull request #935 from elCoderCP4H/plugins-docs
Contribution: elcoder's Superalgos Review
2021-05-17 11:52:30 +02:00
Luis Fernando Molina 0ee65aa180 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-16 16:34:52 +02:00
Luis Fernando Molina abd4b605b5 API Fetcher Bot Implementation: All Time High Indicator and Plotter implemented and tested. 2021-05-16 15:26:49 +02:00
zil0 c487fe9939 Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-15 01:45:38 -05:00
Luis Fernando Molina 680d066fa4 Merge pull request #934 from Luis-Fernando-Molina/develop
Contribution: Merge fo Plugins Docs into Develop
2021-05-14 22:57:04 -04:00
Luis Fernando Molina c19b7d0190 Refactoring of User Variables for User Defined Variables 2021-05-15 04:55:40 +02:00
Luis Fernando Molina b25bf3fc9b Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-15 04:26:28 +02:00
Luis Fernando Molina 0a9374b831 Merge pull request #932 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher, now it can fetch fields from any part of the response
2021-05-14 16:23:02 -04:00
Luis Fernando Molina 40be21e6a8 Basic Documentation of the nodes related to the API Data Fetcher bot 2021-05-14 22:21:32 +02:00
Philip Love 0fd8b2a645 Modify: Pluvtech Data-Mine - Lighten Waddah Trend bars 2021-05-14 15:24:54 -04:00
Julian Molina ed1b3896c5 Merge pull request #933 from julian-molina/plugins-docs
Contribution: User defined icons
2021-05-14 20:09:31 +02:00
Julian Molina 61ca4b60ce User defined icons 2021-05-14 20:07:25 +02:00
Luis Fernando Molina 8d5fdf3ed4 API Data Fetcher, now it can fetch fields from any part of the response 2021-05-14 18:55:14 +02:00
Luis Fernando Molina 1f505a2c14 Merge pull request #931 from PLuv/develop
Modify: PLUVTECH-DM -> Pluvtech ; Modify: 'whileAtStage_whenToRun' -> 'whileAtStageWhenToRun'
2021-05-14 11:55:06 -04:00
Philip Love 96b52132f2 Remove: Unnecessary Condition in checkUserDefinedCode() 2021-05-14 11:51:47 -04:00
Philip Love 9cc2bbdee2 Modify: 'whileAtStage_whenToRun' -> 'whileAtStageWhenToRun' 2021-05-14 11:32:37 -04:00
Philip Love 0b566f59c4 Modify: PLUVTECH-DM -> Pluvtech 2021-05-14 11:20:40 -04:00
Luis Fernando Molina 27d0d41b42 Merge pull request #930 from Luis-Fernando-Molina/develop
Contribution: BIG FIX: Undefined indicators discovered at BB Top Bounce
2021-05-14 10:21:27 -04:00
Luis Fernando Molina fb0566afe3 BUG FIX: Suggestion of Deep Scan 2021-05-14 16:19:59 +02:00
Luis Fernando Molina 6c369a3192 BIG FIX: Undefined indicators discovered at BB Top Bounce 2021-05-14 16:12:32 +02:00
Julian Molina 34eaa8d06a Merge pull request #929 from julian-molina/plugins-docs
Contribution: README welcoming
2021-05-14 10:04:35 +02:00
Julian Molina 5e1ba8cb9e README welcoming 2021-05-14 10:04:21 +02:00
Julian Molina 27c213b6fd Merge pull request #928 from julian-molina/plugins-docs
Contribution: README link
2021-05-14 10:03:07 +02:00
Julian Molina a6ecba31a1 README link 2021-05-14 10:02:46 +02:00
Luis Fernando Molina 72dee4e8a3 Merge pull request #925 from PLuv/develop
Add: PLUVTECH-DM to Masters-Trading-Mine Dependencies - Add: User Defined Variables - Add: User Defined Code
2021-05-13 16:52:36 -04:00
Luis Fernando Molina 257fcc3da9 Merge pull request #926 from Luis-Fernando-Molina/develop
Contribution: API Fetcher Demo saving Messari Asset Metrics
2021-05-13 16:19:27 -04:00
Luis Fernando Molina b1970da932 Fix to Deep Scan bug 2021-05-13 22:18:00 +02:00
Luis Fernando Molina a891d6e209 Fix to Deep Scan bug 2021-05-13 22:13:50 +02:00
Luis Fernando Molina 3c12df4245 API Fetcher Demo saving Messari Asset Metrics 2021-05-13 22:11:17 +02:00
Philip Love 35b852ff2a Add: User-Defined-Code for Stages 2021-05-13 14:48:10 -04:00
Philip Love 3e8ca6a5ae Add: Episodes->User-Defined-Variables nodes 2021-05-13 14:43:41 -04:00
Philip Love 141f84d78e Add: PLUVTECH-DM to Masters-Trading-Mine Dependencies 2021-05-13 14:40:47 -04:00
Julian Molina 58aafeb73a Merge pull request #924 from julian-molina/plugins-docs
Contribution: README
2021-05-13 20:04:36 +02:00
Julian Molina 33dc3c994d README 2021-05-13 20:04:17 +02:00
Julian Molina b688f5ef0a Merge pull request #923 from julian-molina/plugins-docs
Contribution: README final fixes
2021-05-13 20:02:05 +02:00
Julian Molina 45755c18d2 README final fixes 2021-05-13 19:56:28 +02:00
Julian Molina ffb12ae9f2 Merge pull request #922 from julian-molina/plugins-docs
Contribution: README last fixes
2021-05-13 19:54:44 +02:00
Julian Molina 9afb4d3433 README last fixes 2021-05-13 19:54:22 +02:00
Julian Molina 6348891a93 Merge pull request #921 from julian-molina/plugins-docs
Contribution: README more fixes
2021-05-13 19:49:20 +02:00
Julian Molina 796f622d34 README more fixes 2021-05-13 19:49:00 +02:00
Julian Molina abdced0801 Merge pull request #920 from julian-molina/plugins-docs
Contribution: README fixes
2021-05-13 19:44:58 +02:00
Julian Molina 6c4ccc1e1a README fixes 2021-05-13 19:44:38 +02:00
Julian Molina 2096323d88 Merge pull request #919 from julian-molina/plugins-docs
Contribution: README
2021-05-13 19:18:43 +02:00
Julian Molina cf36649f03 README 2021-05-13 19:16:21 +02:00
Luis Fernando Molina 7a818d5a89 Merge pull request #918 from Luis-Fernando-Molina/develop
Contribution: Plugins Docs Merged into Develop
2021-05-13 12:18:19 -04:00
Luis Fernando Molina b52ed20caf Merge branch 'plugins-docs' into develop 2021-05-13 18:17:31 +02:00
Luis Fernando Molina 8e2b791bc2 Merge pull request #917 from Luis-Fernando-Molina/develop
Contribution: Bug Fix Exchange Bands was failing to run
2021-05-13 12:15:13 -04:00
Luis Fernando Molina 01bb8e7843 Bug Fix Exchange Bands was failing to rrun 2021-05-13 18:08:45 +02:00
Julian Molina 4d5e5f04dc Merge pull request #916 from julian-molina/plugins-docs
Contribution: FR flag
2021-05-13 17:51:19 +02:00
Julian Molina 6d2cdf4cbd FR flag 2021-05-13 17:50:24 +02:00
Luis Fernando Molina 3a32953c66 Merge pull request #915 from Luis-Fernando-Molina/develop
Contribution: Api Fetcher bot Task Installation Process Implemented and tested
2021-05-13 09:02:30 -04:00
Luis Fernando Molina 32a898d7c7 Api Fetcher bot Task Installation Process Implemented and tested 2021-05-13 15:02:05 +02:00
Brenden Harrell 6647bef3f5 Update Tutorial Step Doc 2021-05-12 19:53:41 -05:00
Brenden Harrell 5004324744 Update Charting Tutorial for Toggle Map Option 2021-05-12 19:30:39 -05:00
Brenden Harrell 4d7f9cf419 Merge branch 'plugins-docs' of https://github.com/harrellbm/Superalgos into plugins-docs 2021-05-12 19:28:40 -05:00
Brenden Harrell 4bcee11574 Add toggleMapView Function for Tutorial Steps 2021-05-12 19:28:34 -05:00
zil0 d4c52f95ec My Superalgos Review 2021-05-12 18:48:09 -05:00
Luis Fernando Molina 7190ff7806 Merge pull request #914 from Luis-Fernando-Molina/develop
Contribution: Docs updated
2021-05-12 16:00:12 -04:00
Luis Fernando Molina cd72460f46 Docs updated 2021-05-12 21:59:55 +02:00
Luis Fernando Molina 87e6f34428 Merge pull request #913 from Luis-Fernando-Molina/develop
Contribution: Troubleshooting Saving
2021-05-12 15:49:15 -04:00
Luis Fernando Molina 9de6d99d58 Troubleshooting Saving 2021-05-12 21:48:56 +02:00
Luis Fernando Molina 2cd52259ea Merge pull request #912 from Luis-Fernando-Molina/develop
Contribution: Fetcher Workspace Plugin Updated
2021-05-12 14:13:44 -04:00
Luis Fernando Molina 9c7373197b Fetcher Workspace Plugin Updated 2021-05-12 20:09:14 +02:00
Luis Fernando Molina cc75447b55 Merge pull request #911 from harrellbm/develop
Finished Windows Shortcut Scripts and Docs
2021-05-12 11:12:03 -04:00
Brenden Harrell 2fc5d2f810 Update Docs for Windows Scripts 2021-05-11 22:19:24 -05:00
Brenden Harrell 85a6f6edb4 Merge branch 'develop' of https://github.com/harrellbm/Superalgos into develop 2021-05-11 22:07:24 -05:00
Brenden Harrell d2dbddce49 Comment out Debug Lines 2021-05-11 22:07:18 -05:00
B Harrell 9d5d2d2671 Update Readme for Windows Shortcut Scripts 2021-05-11 22:03:34 -05:00
Brenden Harrell 3b2e2c0e3b Finished Windows Shortcut Scripts 2021-05-11 21:48:03 -05:00
Luis Fernando Molina f819213e29 Merge pull request #910 from ssplatt/add-slack-announce
initial commit of slack bot for announcements
2021-05-11 19:19:10 -04:00
Brett Taylor 3574ee7d59 initial commit of slack bot 2021-05-11 18:30:25 -04:00
Luis Fernando Molina 631a702499 Merge pull request #909 from Luis-Fernando-Molina/develop
Contribution: French Language Added
2021-05-11 13:26:45 -04:00
Luis Fernando Molina 594c553206 Bug Fixed when a formula at live trade referenced a .previous at market files 2021-05-11 18:57:02 +02:00
Luis Fernando Molina 8b4576c6f4 French Language Added 2021-05-11 16:00:00 +02:00
Luis Fernando Molina 31233588db Merge pull request #904 from ssplatt/discord-text
Add formatting option for Discord announcement messages
2021-05-11 09:38:47 -04:00
Luis Fernando Molina d552b229f8 Merge pull request #908 from Luis-Fernando-Molina/develop
Contribution: Master Data Mine without API Fetcher Example
2021-05-11 09:36:38 -04:00
Luis Fernando Molina ebcb783207 Master Data Mine without API Fetcher Example 2021-05-11 15:35:48 +02:00
Julian Molina b2cfed488e Merge pull request #905 from 9808us/plugins-docs
Contribution: This is my contribution to Superalgos
2021-05-11 10:00:12 +02:00
9808us f4607447b1 This is my contribution to Superalgos 2021-05-11 09:57:52 +02:00
Brett Taylor 5303f0672c pass in config 2021-05-11 00:01:16 -04:00
Brett Taylor c1da48bff8 add message format option 2021-05-10 23:57:41 -04:00
Brenden Harrell 70b26543fc Merge branch 'plugins-docs' of https://github.com/harrellbm/Superalgos into plugins-docs 2021-05-10 20:33:25 -05:00
Brenden Harrell a4cf1cbe3c Charting Space Tutorial Hierarchy Refinements 2021-05-10 20:17:08 -05:00
Julian Molina f6adc7aa9f Merge pull request #903 from julian-molina/plugins-docs
Contribution: Tutorial tips update
2021-05-10 13:32:29 +02:00
Julian Molina 45a768c9c5 Tutorial tips update 2021-05-10 13:31:06 +02:00
Julian Molina 52368451b9 Merge pull request #902 from superharoun/plugins-docs
Fix typos
2021-05-10 10:08:04 +02:00
Haroun 62f46efba8 This is my contribution to Superalgos 2021-05-09 22:28:51 +02:00
Luis Fernando Molina 8dc4f28be8 Merge pull request #899 from harrellbm/develop
Ubuntu create shortcut script
2021-05-09 10:16:59 -04:00
Brenden Harrell ba54382272 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-09 07:31:44 -05:00
Luis Fernando Molina ff6ecbd0ac Merge pull request #898 from Luis-Fernando-Molina/develop
Contribution: Mege of Plugin Docs
2021-05-09 08:05:46 -04:00
Luis Fernando Molina c68fbe2c97 Merge remote-tracking branch 'upstream/plugins-docs' into develop 2021-05-09 14:04:41 +02:00
Luis Fernando Molina c5b1006fde Merge pull request #896 from Smidy13/develop
Improvement: Discord, Dogecoin Icons and Configuration
2021-05-09 07:57:37 -04:00
Smidy13 0e8580d376 Bug Fix: Defining Each Telegram and Discord Bot Array 2021-05-09 22:59:53 +12:00
Smidy13 a647dd6d59 Discord Bot Icons 2021-05-09 15:39:24 +12:00
Smidy 4ab3295917 Merge branch 'Superalgos:develop' into develop 2021-05-09 15:16:37 +12:00
Smidy13 82b75aa4e5 Dogecoin Icons and Configuration 2021-05-09 15:16:01 +12:00
Brenden Harrell 0ba846534b Merge branch 'develop' of https://github.com/harrellbm/Superalgos into develop 2021-05-08 19:38:18 -05:00
Brenden Harrell 81f8feb69a Update Launch Script Docs 2021-05-08 19:38:09 -05:00
Brenden Harrell 070a74dc89 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-08 19:34:25 -05:00
B Harrell 477e29dcf8 Add gifs to readme 2021-05-08 16:31:16 -05:00
Brenden Harrell 30da48d5de Update Docs for Ubuntu Shortcuts 2021-05-08 16:14:37 -05:00
Brenden Harrell f1daaaa752 Clean Linux Launch Script 2021-05-08 15:36:47 -05:00
Brenden Harrell f63dd40d18 Add Create Shortcut Script for Ubuntu 2021-05-08 15:36:22 -05:00
Julian Molina c0a74025ff Merge pull request #893 from julian-molina/plugins-docs
Contribution: Fix on contributions instructions
2021-05-08 21:28:07 +02:00
Julian Molina a05970ae49 Fix on contributions instructions 2021-05-08 21:27:28 +02:00
Julian Molina 3cc58b3c7d Merge pull request #891 from julian-molina/develop
Contribution: DE flag
2021-05-08 20:29:09 +02:00
Julian Molina f393eed63b Merge pull request #892 from kizniche/plugins-docs
Contribution: Grammar, instruction, and improper linking fixes
2021-05-08 20:28:32 +02:00
Kyle Gabriel 8846932335 Grammar, instruction, and improper linking fixes 2021-05-08 13:08:40 -04:00
Julian Molina e94b29402b DE flag 2021-05-08 17:11:08 +02:00
Luis Fernando Molina 07eacf19af Merge pull request #890 from Luis-Fernando-Molina/develop
Contribution: German Language  added and version labels switched to Beta 10
2021-05-08 08:33:25 -04:00
Luis Fernando Molina ec65381c01 German Language added and version labels switched to Beta 10 2021-05-08 14:27:41 +02:00
Julian Molina 4497d10a46 Merge pull request #887 from harrellbm/plugins-docs
Smooth Tutorial Step Transitions
2021-05-08 09:09:34 +02:00
B Harrell 68638187d1 Merge branch 'Superalgos:plugins-docs' into plugins-docs 2021-05-07 13:18:09 -05:00
B Harrell 1e062d73ec Merge branch 'Superalgos:develop' into develop 2021-05-07 13:16:57 -05:00
Brenden Harrell be218752b5 Smooth Tutorial Step Transitions 2021-05-07 08:47:00 -05:00
Luis Fernando Molina 6f82264d06 Merge pull request #886 from ssplatt/discord-integration-1
get discord announcements working
2021-05-07 06:32:19 -04:00
Brenden Harrell 875f86a8eb Add vendor prefix for browser compatibility 2021-05-06 22:09:55 -05:00
Brett Taylor 5475d3b1d6 get discord announcements working 2021-05-06 22:45:31 -04:00
Brenden Harrell 0829ce734e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-06 12:32:06 -06:00
Luis Fernando Molina 70a346ccc9 Merge pull request #879 from Smidy13/develop
Improvement: Interpreting Multiple Telegram Commands
2021-05-06 13:51:48 -04:00
Luis Fernando Molina a54c815533 Merge pull request #884 from frysee/add-delta-mine
added new mine containing Wilder-RSI and MFI indicators
2021-05-06 13:46:28 -04:00
Brenden Harrell 22a765649c Smooth Out Tutorial Step Transitions 2021-05-06 09:11:42 -05:00
Brenden Harrell 5b0d289106 Merge branch 'develop' of https://github.com/harrellbm/Superalgos into develop 2021-05-06 08:22:20 -05:00
frysee e199a24416 added new mine containing Wilder-RSI and MFI indicators 2021-05-06 12:25:52 +02:00
Julian Molina 68ef1b0891 Merge pull request #882 from harrellbm/plugins-docs
Charting Space Tutorial Fixes
2021-05-06 09:14:20 +02:00
Brenden Harrell 4f8b6da5e0 Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-05 21:16:40 -05:00
Brenden Harrell 173f715794 Update workspace 2021-05-05 21:11:18 -05:00
Brenden Harrell 81707deb28 Reindex Charting Space Tutorial 2021-05-05 21:09:20 -05:00
Brenden Harrell 3e52d518e4 Charting Space Tutorial fixes 2021-05-05 20:54:15 -05:00
Brenden Harrell fd7d5d1010 Fix: readd I See a Chart step 2021-05-05 15:27:22 -05:00
Brenden Harrell ca5fee2420 Merge branch 'plugins-docs' of https://github.com/harrellbm/Superalgos into plugins-docs 2021-05-05 06:58:02 -06:00
Brenden Harrell 4de1893713 Merge branch 'master' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-05 06:57:41 -06:00
Luis Fernando Molina 16c1443f49 Merge pull request #876 from harrellbm/develop
Launch Script Docs
2021-05-05 08:40:36 -04:00
Luis Fernando Molina 6e47c4e81f Merge pull request #874 from PLuv/develop
Fix: Plotters VWMA & WMA - Change: Minor Disk space optimization
2021-05-05 08:39:07 -04:00
Julian Molina f4d71fb7e9 Merge pull request #881 from julian-molina/plugins-docs
Contribution: Charting space tutorial typos
2021-05-05 12:11:01 +02:00
Julian Molina 6b10ea126d Charting space tutorial typos 2021-05-05 12:10:34 +02:00
Julian Molina 0f05db394d Merge pull request #880 from julian-molina/plugins-docs
Contribution: Tutorials
2021-05-05 09:16:07 +02:00
Julian Molina 3ba605d2fb Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-05 09:15:17 +02:00
Julian Molina cf5eb1f332 Tutorials 2021-05-05 09:15:00 +02:00
Smidy13 cf5d7415c7 Merge branch 'develop' of https://github.com/Smidy13/Superalgos into develop 2021-05-04 22:27:33 +12:00
Smidy13 f00b1b0cb1 Improvement: Interpreting Multiple Telegram Commands 2021-05-04 22:27:02 +12:00
Julian Molina bb82a4f179 Merge pull request #875 from harrellbm/plugins-docs
Charting Tutorial Revision 4
2021-05-03 18:42:54 +02:00
Brenden Harrell 861fa68b66 Lauch Scripts Docs 2021-05-03 09:53:43 -05:00
Brenden Harrell 26bc949218 Merge branch 'develop' of https://github.com/harrellbm/Superalgos into develop 2021-05-03 09:53:17 -05:00
Brenden Harrell 12866efd4f Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-03 09:53:05 -05:00
B Harrell 7d3fb6de2c Update for Launch Scripts 2021-05-03 09:17:02 -05:00
Brenden Harrell 7fed529503 Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-05-03 08:57:37 -05:00
Brenden Harrell 02f86cf454 Update Workspace 2021-05-03 08:54:12 -05:00
Brenden Harrell 364dea3357 Final Repagination Charting Tutorial Revison 4 2021-05-03 08:53:37 -05:00
Brenden Harrell 74c7ca2513 final changes Charting Tutorial Revision 4 2021-05-03 08:44:56 -05:00
Philip Love 56b8a24bfc Fix: Plotters VWMA & WMA - Change: Minor Disk space optimization 2021-05-02 23:02:15 -04:00
Brenden Harrell 542226bbca initial charting tutorial revision 4 2021-05-02 21:55:21 -05:00
Brenden Harrell 2975b0838d random small typo fix 2021-05-02 21:54:47 -05:00
Smidy 133fb4aecc Merge pull request #11 from Superalgos/develop
Merging Develop
2021-05-03 09:03:57 +12:00
Brenden Harrell 2ed90b1491 Merge branch 'master' of https://github.com/Superalgos/Superalgos into develop 2021-05-02 12:43:32 -05:00
Luis Fernando Molina d6692d45b3 Merge pull request #856 from Luis-Fernando-Molina/develop
Contribution: API Fetcher bot, basic implementation
2021-05-02 12:26:05 -04:00
Luis Fernando Molina 17624865c9 API Fetcher Bot - Workspace as Plugin 2021-05-02 18:22:18 +02:00
Luis Fernando Molina 81c20d148e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-05-02 18:22:07 +02:00
Luis Fernando Molina 4ec579c781 Merge pull request #871 from Smidy13/develop
Bug Fixes for getOHLCVs from CCXT Library Update
2021-05-02 12:16:36 -04:00
Luis Fernando Molina a1dca88328 Merge pull request #872 from suttridge/develop
Contribution: Added data mine with indicator and plotter for the Turtle S1 system indicator.
2021-05-02 12:11:42 -04:00
Luis Fernando Molina 4ef6ede664 Merge pull request #873 from PLuv/develop
New Data Mine + New Color Options
2021-05-02 12:10:44 -04:00
Philip Love 1578d44b26 Add: PLUVTECH-DM 2021-05-02 11:29:42 -04:00
Steve Langridge 16801dfbb9 This is my contribution to Superalgos 2021-05-02 16:25:00 +02:00
Philip Love 226c9c2c24 Add: Additional pre-defined style colors and update style doc-page to display 2021-05-02 10:15:13 -04:00
Smidy13 09fa1cca5d Further changes to HistoricOHLCVs.js after extensive testing 2021-05-02 20:18:13 +12:00
Luis Fernando Molina 53317c3c27 API Fetcher Bot - Mapping Property Records with Api Received Data Fields finished and debugged. 2021-05-02 02:47:09 +02:00
Luis Fernando Molina a753985890 API Data Fetcher - Managing Error codes implemented 2021-05-01 20:06:59 +02:00
Luis Fernando Molina 7ff18ccdda API Data Fercher First Debugging Completed 2021-05-01 16:57:29 +02:00
Luis Fernando Molina 04bb90ca9f Merge branch 'master' into develop 2021-05-01 14:59:46 +02:00
Luis Fernando Molina 1b953c165d Merge pull request #869 from Superalgos/plugins-docs
Master update with Plugins Docs
2021-05-01 08:59:02 -04:00
Julian Molina 9dfe17154f Merge pull request #867 from maxspecktor/plugins-docs
Contribution: my review
2021-05-01 11:51:21 +02:00
max specktor 7b614b957c my review 2021-05-01 11:26:09 +02:00
Julian Molina ab393285ca Merge pull request #866 from julian-molina/plugins-docs
Contribution: Readme
2021-04-30 21:35:55 +02:00
Julian Molina 15f25cfa75 Readme 2021-04-30 21:33:42 +02:00
Julian Molina 3ed18a2b1c Merge pull request #865 from julian-molina/plugins-docs
Contribution: This is my contribution to Superalgos
2021-04-30 21:23:59 +02:00
Julian Molina 49fc0d39b2 This is my contribution to Superalgos 2021-04-30 21:23:08 +02:00
Julian Molina 84951c1eea Merge pull request #864 from julian-molina/plugins-docs
Contribution: Switching languages in Welcome tutorial
2021-04-30 19:52:04 +02:00
Julian Molina db4f31fa67 Switching languages in Welcome tutorial 2021-04-30 19:49:27 +02:00
Julian Molina 4e02030b76 Merge pull request #863 from julian-molina/plugins-docs
Contribution: Recovering from bad merge
2021-04-30 17:06:20 +02:00
Julian Molina 5bc7b86f99 Recovering from bad merge 2021-04-30 17:04:15 +02:00
Julian Molina 84e9948299 Merge pull request #862 from julian-molina/plugins-docs
Contribution: Footer update
2021-04-30 15:03:34 +02:00
Julian Molina 36d6001d50 Footer update 2021-04-30 15:03:13 +02:00
Julian Molina afca80cbf1 Revert "Merge pull request #861 from maxspecktor/plugins-docs"
This reverts commit 7c62e64da9, reversing
changes made to 102dd5aa14.
2021-04-30 13:55:57 +02:00
Luis Fernando Molina 63d0147f69 Merge pull request #858 from NITEMAN/docker
Improve docker info
2021-04-30 07:54:44 -04:00
Julian Molina 7c62e64da9 Merge pull request #861 from maxspecktor/plugins-docs
Contribution: My Superalgos Review
2021-04-30 13:50:54 +02:00
Julian Molina 300ae26781 Delete contribute-to-superalgos-014-tutorial-step-update-the-app.json 2021-04-30 13:48:57 +02:00
Julian Molina 1d8bd433fd Delete contribute-to-superalgos-013-tutorial-step-welcome-back.json 2021-04-30 13:48:16 +02:00
Julian Molina 2e45e74ebb Delete contribute-to-superalgos-012-tutorial-step-lets-switch-already.json 2021-04-30 13:47:48 +02:00
Julian Molina f101a7eb6c Delete contribute-to-superalgos-008-tutorial-step-switching-branches.json 2021-04-30 13:47:29 +02:00
Julian Molina f117296ba9 Delete contribute-to-superalgos-007-tutorial-step-what-about-free-riders.json 2021-04-30 13:46:39 +02:00
max specktor 99ae95cf5b Fixed typo and changed some develop branch references to plugins/docs 2021-04-30 12:20:29 +02:00
max specktor 2e735d2395 Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-04-30 12:00:10 +02:00
max specktor 1ddf921a59 My Superalgos Review 2021-04-30 11:51:46 +02:00
Julian Molina 102dd5aa14 Merge pull request #859 from julian-molina/plugins-docs
Contribution: Random Stuff
2021-04-30 10:48:11 +02:00
Julian Molina 216e2f38e1 Random Stuff 2021-04-30 10:46:48 +02:00
Pedro González Serrano 0792bed42c Improve docker info 2021-04-30 08:07:56 +02:00
Julian Molina 5dca2edf44 Merge pull request #853 from 0xperez/plugins-docs
Translated Contribute to Superalgos Tutorial
2021-04-29 19:47:18 +02:00
Luis Fernando Molina 9d2c818372 API Fetcher bot, multi page feature bug fixed 2021-04-29 19:43:43 +02:00
Luis Fernando Molina a59418a386 API Fetcher bot, multi page feature implemented 2021-04-29 19:15:08 +02:00
Luis Fernando Molina 3e70cda005 API Fetcher bot, primary keys management 2021-04-29 18:08:57 +02:00
Luis Fernando Molina 2049216ab7 API Fetcher bot, basic implementation 2021-04-29 17:39:35 +02:00
Luis Fernando Molina 1313529204 Merge pull request #854 from NITEMAN/docker-tagging
Docker tagging & cleanup
2021-04-29 09:20:14 -04:00
Luis Fernando Molina b459ef91a2 Merge pull request #855 from ssplatt/discord-integration
fixes some ui elements of the social bots
2021-04-29 09:16:55 -04:00
Brett Taylor c28542bdcc fixes some ui elements of the social bots 2021-04-29 08:52:35 -04:00
Pedro González Serrano 3e1829cb3e Update docker run instructions 2021-04-29 13:23:09 +02:00
Pedro González Serrano 866932658f Remove duplicated namespace 2021-04-29 13:06:03 +02:00
Pedro González Serrano 618c1b323e Add tagging for develop branch 2021-04-29 12:33:39 +02:00
Pedro González Serrano 362a561bf6 Fix docker tagging 2021-04-29 12:20:50 +02:00
0xperez c828d92d42 Translated Contribute to Superalgos Tutorial 2021-04-28 22:37:00 +02:00
Julian Molina 19afab17c4 Merge pull request #852 from 9808us/plugins-docs
Fix fourth Not fifth bot english + italian
2021-04-28 16:57:05 +02:00
9808us 704ffb48e9 Fix fourth Not fifth bot english + italian 2021-04-28 16:36:05 +02:00
Smidy13 be094ba536 Renaming Variables to More Accurate Names, Adding in Promises for Functions 2021-04-28 22:50:51 +12:00
Julian Molina 5166d936e5 Merge pull request #850 from 0xperez/plugins-docs
Plugins docs
2021-04-28 11:02:56 +02:00
0xperez 0d944dd532 Translating Basic Edu Tutorial - Page 006 to 055 2021-04-28 08:59:23 +02:00
Smidy13 d052098b66 Moving back if statement moved during testing, setting InvalidDate at right point 2021-04-28 17:45:02 +12:00
Smidy13 0b9af11663 Bug Fix: Unnecessary Halt in getOHLCVs, Handling for Invalid Start Date on getOHLCVs & Handling for Exchange maintenance over limit 2021-04-28 17:13:45 +12:00
Luis Fernando Molina f0ad6c51eb Merge pull request #847 from ssplatt/discord-webhook-announce
WIP: Discord webhook announce
2021-04-27 20:50:58 -04:00
0xperez 51f8d1be23 Translating Basic Edu Tutorial - Page 036 to 043 2021-04-27 22:22:34 +02:00
Brett Taylor 3831809f6c add more discord bot config and docs 2021-04-27 14:41:06 -04:00
Brett Taylor f59dbeec3b initial discord webook bot 2021-04-27 09:39:10 -04:00
Julian Molina 05cb622da1 Merge pull request #844 from 0xperez/plugins-docs
Translating Basic Edu Tutorial - Page 002 to 017
2021-04-27 09:42:16 +02:00
0xperez 1a7fe13fb6 Translating Basic Edu Tutorial - Page 023 to 035 2021-04-27 08:07:47 +02:00
Luis Fernando Molina 396feb5c6b Merge pull request #845 from Luis-Fernando-Molina/develop
Contribution: Important Bug Fixed at Lighting Path Function Impacting sequence of same type nodes.
2021-04-26 18:08:52 -04:00
Luis Fernando Molina 2fc11db5b2 Important Bug Fixed at Lighting Path Function Impacting sequence of same type nodes. 2021-04-27 00:07:53 +02:00
0xperez cab94f8cd1 Translating Basic Edu Tutorial - Page 018 to 022 2021-04-26 22:03:52 +02:00
0xperez eff024dbbf Translating Basic Edu Tutorial - Page 002 to 017 2021-04-26 20:30:13 +02:00
Luis Fernando Molina a380bd8b05 Merge pull request #836 from harrellbm/develop
Create Windows Shortcut Script
2021-04-26 10:01:32 -04:00
Luis Fernando Molina 0e94b41d97 Merge pull request #843 from Luis-Fernando-Molina/develop
Contribution: Reapplied Telegram Bot Test Message definition
2021-04-26 09:42:37 -04:00
Luis Fernando Molina 576c930476 Reapplied Telegram Bot Test Message definition 2021-04-26 15:41:51 +02:00
Luis Fernando Molina 0184cc64d5 Merge pull request #824 from Luis-Fernando-Molina/develop
Contribution: API Data Fetcher Bots Implementation
2021-04-26 09:40:23 -04:00
Luis Fernando Molina bcc2513ff1 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-26 15:39:47 +02:00
Luis Fernando Molina 295b082521 Merge pull request #838 from Smidy13/develop
Bug Fix: 'Closing' state of Close Stage, Trading Session getting stuck on Run Request Sent & Improvement: Telegram Bot Test Function
2021-04-26 09:36:43 -04:00
Julian Molina 0ada5377c9 Merge pull request #839 from scarolan/plugins-docs
My Superalgos Review
2021-04-26 13:59:50 +02:00
Julian Molina 7d26bd3309 Merge pull request #837 from Smidy13/plugins-docs
Docs-Nodes: Announcement Node
2021-04-26 13:55:40 +02:00
Smidy13 9419d0b849 Adding ProjectSchema changes for Telegram Test Function. Also Bug Fix: Tutorial Not Loading 2021-04-26 17:34:09 +12:00
Brenden Harrell 290715c2a9 Initial work on Revision 4 2021-04-25 21:00:02 -06:00
Smidy13 17d21c501d Improvement: Telegram Test Function 2021-04-26 00:40:30 +12:00
Sean Carolan d90aeda34e My Superalgos Review 2021-04-25 12:35:01 +00:00
Smidy13 d9f4fef9ae Bug Fix: Trading Session getting stuck on Run Request Sent 2021-04-25 21:23:23 +12:00
Smidy13 ac29a6f863 Bug Fix: Adding in Handling for 'Closing' state of Close Stage 2021-04-25 18:35:46 +12:00
Smidy13 dbfac533c7 Docs-Nodes: Announcement Node 2021-04-25 09:06:49 +12:00
Smidy d5f37611e9 Merge pull request #9 from Superalgos/develop
Merge Develop
2021-04-25 08:43:02 +12:00
Luis Fernando Molina ece6b383e5 Stuck at possible bug on Lignting Path Function 2021-04-24 21:30:25 +02:00
Brenden Harrell fc4aa929e5 Rename Folder Launch-Scripts 2021-04-24 12:42:25 -06:00
Brenden Harrell 204cf9e3b6 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-24 10:12:17 -06:00
Brenden Harrell 2e309856ad move linux lauch script to GUI-Launch folder 2021-04-24 10:12:03 -06:00
Brenden Harrell ea1ff46c20 Create windows shortcut script 2021-04-24 10:42:28 -05:00
Luis Fernando Molina ba4eca543a Merge pull request #834 from harrellbm/develop
Simple Launch Scripts
2021-04-24 08:55:41 -04:00
Luis Fernando Molina 25c3e2d9a7 Merge pull request #835 from Smidy13/develop
Bug Fix: Close Stage Event not triggering / Improvement: Bot Using Commands and Greater Assistance
2021-04-24 08:54:09 -04:00
Smidy13 ffa1b25510 Improvement: Bot Using Commands and Greater Assistance 2021-04-24 22:13:08 +12:00
Smidy13 ebd1148e1f Bug Fix: Close Stage Event not triggering 2021-04-24 20:44:41 +12:00
Smidy13 5e0d39cb98 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-24 16:38:22 +12:00
Brenden Harrell 6b3acaa720 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-23 21:29:04 -05:00
Brenden Harrell afa1b8e1af windows launch script 2021-04-23 21:21:32 -05:00
Brenden Harrell 109ea8ff02 Linux Launch Script 2021-04-23 20:53:29 -05:00
Luis Fernando Molina 5d1804853d Tutorial Bug new text to refresh the UI 2021-04-23 23:00:28 +02:00
Luis Fernando Molina cbfdf6c321 Merge pull request #833 from 9808us/develop
Fix Left click with Right click
2021-04-23 12:44:00 -04:00
9808us bb4ebf1864 Fix Left click with Right click 2021-04-23 15:28:10 +02:00
Julian Molina e8afe2be01 Merge pull request #831 from harrellbm/plugins-docs
Setting up a New Chart Tutorial Revision 3
2021-04-21 20:23:36 +02:00
Brenden Harrell 0b5dc2200b Merge branch 'plugins-docs' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-04-21 12:18:22 -05:00
Brenden Harrell e59377e1f0 Update Workspace 2021-04-21 12:17:20 -05:00
Brenden Harrell 005dbbbbf7 Setting up a new Chart Tutorial Revision 3 2021-04-21 12:14:01 -05:00
Luis Fernando Molina 593258668b Ready to code the fetching of data from the API 2021-04-21 18:55:46 +02:00
Luis Fernando Molina 62bf2d0e5f Reaching the API Data Fetcher Fetching Process while Debugging. 2021-04-20 22:37:31 +02:00
Luis Fernando Molina 6e2742a930 Bug Fixed preventing Tasks to start 2021-04-20 21:19:31 +02:00
Luis Fernando Molina dde871e57e API Data Fetcher UI code fully implemented 2021-04-20 18:26:01 +02:00
Luis Fernando Molina 91b9969f68 API Data Fetcher added to UI code 2021-04-20 17:34:57 +02:00
Luis Fernando Molina 89bd9393a7 App Schema File Splitted into Individual Schema Documents Files 2021-04-20 15:31:23 +02:00
Luis Fernando Molina ee7cb0c835 API Map Schema at 90% 2021-04-20 14:31:03 +02:00
Smidy13 7c75576731 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-20 17:40:52 +12:00
Luis Fernando Molina 88a8b9d702 Get all News Messari Endpoint Fully Mapped 2021-04-19 21:02:25 +02:00
Luis Fernando Molina fca33e54ee Merge pull request #828 from Superalgos/plugins-docs
Token Task Force Docs
2021-04-19 14:06:49 -04:00
Luis Fernando Molina 88aa4f8838 Merge pull request #827 from Superalgos/plugins-docs
Token Task Force Docs
2021-04-19 14:06:09 -04:00
Julian Molina 178e93fbb2 Merge pull request #826 from julian-molina/plugins-docs
Contribution: Token task force
2021-04-19 19:38:23 +02:00
Julian Molina 922fbeecef Token task force 2021-04-19 19:37:02 +02:00
Julian Molina 021b9b0fde Merge pull request #825 from julian-molina/plugins-docs
Contribution: Superalgos chat groups
2021-04-19 17:50:22 +02:00
Julian Molina 1bab9e5dbc Superalgos chat groups topic 2021-04-19 17:34:54 +02:00
Luis Fernando Molina 1c7c3184e1 API Map Schema at 75% 2021-04-19 16:48:15 +02:00
Brenden Harrell 8a01d25b53 Remove "Quick Fix" page 2021-04-19 09:34:01 -05:00
Brenden Harrell 17b7479c3e Change titles to start with Tutorial Step 2021-04-19 09:33:17 -05:00
Luis Fernando Molina c5e0753bc3 API Map Schema at 50% 2021-04-19 16:17:25 +02:00
Brenden Harrell 890455bc7a Merge branch 'develop' of https://github.com/Superalgos/Superalgos into plugins-docs 2021-04-19 09:12:34 -05:00
Luis Fernando Molina 34e080360c API Data Fetcher Bots Implementation 2021-04-19 14:32:57 +02:00
Luis Fernando Molina 623418ee14 Merge branch 'master' into plugins-docs 2021-04-19 13:13:14 +02:00
Luis Fernando Molina 92f3a86f65 Merge pull request #823 from Superalgos/develop
Superalgos Beta 9 SP 2
2021-04-19 07:12:20 -04:00
Julian Molina 188339c860 Merge pull request #822 from HenningBertsch/origin/plugins-docs
Fixed a typo where 'of' was written instead of 'off'
2021-04-19 09:31:55 +02:00
Henning Bertsch 3d778eaf63 Merge remote-tracking branch 'upstream/plugins-docs' into origin/plugins-docs 2021-04-19 09:20:27 +02:00
Julian Molina 1057c87a2d Merge pull request #816 from 0xperez/develop
Translating the Welcome Tutorial - Final Review
2021-04-18 21:18:50 +02:00
Luis Fernando Molina d4d26671b7 Merge pull request #821 from Luis-Fernando-Molina/develop
Contribution: Bug Fix: Tutorial loading without Content and needing Refresh of the UI
2021-04-18 10:27:19 -04:00
Luis Fernando Molina 70de50d9d0 Bug Fix: Tutorial loading without Content and needing Refresh of the UI 2021-04-18 16:26:10 +02:00
Luis Fernando Molina 5a7a0ea99d Merge pull request #820 from Luis-Fernando-Molina/develop
Contribution: Detaching from Parent Node and from Reference Parent now only possible with Double Click
2021-04-18 09:54:42 -04:00
Luis Fernando Molina 7348983569 Detaching from Parent Node and from Reference Parent now only possible with Double Click 2021-04-18 15:53:41 +02:00
Luis Fernando Molina 182dad6662 Merge pull request #818 from Luis-Fernando-Molina/develop
Contribution: Indicators Parameters Defined at the Task Level
2021-04-18 09:04:32 -04:00
Luis Fernando Molina cbba6e5a2e Indicators Parameters Defined at the Task Level 2021-04-18 14:34:43 +02:00
0xperez 7bf7f7be83 Translating the Welcome Tutorial - Final Review 2021-04-17 12:05:11 +02:00
Henning Bertsch eaa71e5b23 Fixed a typo where the docs referred to the 'off state' but written was 'of' 2021-04-17 10:52:29 +02:00
Luis Fernando Molina 610c1db268 Merge branch 'master' into plugins-docs 2021-04-16 18:10:49 +02:00
Luis Fernando Molina a2c4c93dff Merge pull request #814 from Superalgos/develop
Superalgos Beta 9 SP1
2021-04-16 12:07:03 -04:00
Julian Molina 18c50f1276 Merge pull request #813 from julian-molina/develop
Contribution: Star request on main tutorials
2021-04-16 17:40:23 +02:00
Julian Molina 3b3b889f52 Star request on main tutorials 2021-04-16 17:37:54 +02:00
Julian Molina 7572e76e2c Merge pull request #812 from julian-molina/develop
Contribution: First token task force task
2021-04-16 11:05:24 +02:00
Julian Molina a370158e09 First token task force task 2021-04-16 11:04:04 +02:00
Julian Molina 1c351b80b9 Merge pull request #809 from Noeljarillo/develop
Contribution: This is my contribution to Superalgos
2021-04-15 10:01:55 +02:00
Julian Molina 7dfd20020a Merge pull request #808 from vaskosmihaylov/develop
Contribution: My Superalgos Review
2021-04-15 09:55:28 +02:00
Noeljarillo 047f2be264 [ES trans 2] 2021-04-15 00:35:03 +02:00
Noeljarillo c77a9f4041 [ES transalation] 2021-04-14 23:53:29 +02:00
Noeljarillo 487c797450 This is my contribution to Superalgos 2021-04-14 22:45:05 +02:00
Noeljarillo eda9cfa0ac Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-14 22:37:33 +02:00
vaskosmihaylov 6efb50f04e My Superalgos Review 2021-04-14 02:07:00 +03:00
vaskosmihaylov 5c5ec99158 My Superalgos Review 2021-04-14 01:20:49 +03:00
Julian Molina 494d4fcbbb Merge pull request #807 from julian-molina/develop
Contribution: Contribute tutorial plugins-docs branch update
2021-04-13 14:50:11 +02:00
Julian Molina b5c937bda5 Contribute tutorial plugins-docs branch update 2021-04-13 14:49:26 +02:00
Noeljarillo 0f50f3e378 This is my contribution to Superalgos 2021-04-13 12:19:19 +02:00
Julian Molina bfe45b1feb Merge pull request #805 from 9808us/develop
Contribution: This is my contribution to Superalgos
2021-04-13 10:08:53 +02:00
9808us 6232276012 This is my contribution to Superalgos 2021-04-13 09:58:57 +02:00
9808us c5ebfe1f6c Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-13 08:40:23 +02:00
Luis Fernando Molina 7e67c1a200 Merge pull request #801 from Luis-Fernando-Molina/develop
Contribution: Update CCXT library to version 1.47.49
2021-04-12 08:27:06 -04:00
Luis Fernando Molina 101ceb41d0 Update CCXT library to version 1.47.49 2021-04-12 14:25:11 +02:00
Luis Fernando Molina c1df92ad42 Merge pull request #800 from Smidy13/develop
Documentation Updates
2021-04-12 08:02:18 -04:00
Smidy13 68686165c3 Social Bots Documentation Update 2021-04-12 23:06:13 +12:00
Smidy13 942f518ba5 Revert "Bug Fix: Getting Started Tutorial Not Loading"
This reverts commit daf5eb465e.
2021-04-12 23:02:35 +12:00
Smidy ef49e7d12a Merge pull request #6 from Superalgos/develop
Updating Local Fork
2021-04-12 22:56:42 +12:00
Julian Molina 73444d97b5 Merge pull request #799 from raubot/develop
Contribution: This is my contribution to Superalgos
2021-04-11 23:27:34 +02:00
Jason Hardy 84cc5f30a0 This is my contribution to Superalgos 2021-04-11 16:14:02 -05:00
Jason Hardy 6c6b204072 This is my contribution to Superalgos 2021-04-11 16:02:25 -05:00
Jason Hardy 1201700332 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-11 15:33:08 -05:00
Julian Molina fd8619f2c3 Merge pull request #798 from julian-molina/develop
Contribution: Contribute tutorial plugins-docs branch update
2021-04-11 19:02:40 +02:00
Julian Molina 916562f632 Contribute tutorial plugins-docs branch update 2021-04-11 18:59:48 +02:00
Julian Molina 58a5fc59dc Merge pull request #796 from brycey12/develop
Contribution: My Superalgos Review
2021-04-11 17:35:44 +02:00
brycey12 48d084e2b3 My Superalgos Review 2021-04-11 23:04:52 +10:00
Julian Molina 36200eae5d Merge pull request #795 from 0xperez/develop
Completed first translation of the Welcome Tutorial in Italian
2021-04-11 11:01:10 +02:00
Julian Molina 9e8b758c39 Update welcome-to-superalgos-062-tutorial-step-machines-learn-too.json 2021-04-11 10:46:14 +02:00
Jason Hardy 67afd2c6a3 This is my contribution to Superalgos 2021-04-10 20:26:58 -05:00
0xperez 9a8d14f34e Translating the Welcome Tutorial - Page 63 to 112 2021-04-10 19:16:20 +02:00
0xperez 194ee13778 Translating the Welcome Tutorial - Page 58 to 62 2021-04-10 14:46:38 +02:00
Julian Molina 9769761b4d Merge pull request #793 from cozed-gh/develop
Contribution: Omega One Data Mine and Docs
2021-04-09 16:33:36 +02:00
cozed-gh 92c3d189a1 Name change to Omega-One 2021-04-09 16:28:02 +02:00
cozed-gh e9c00276b7 Delete Omega One.json 2021-04-09 16:27:44 +02:00
cozed-gh 89f07ef649 New name "Omega One" 2021-04-09 15:25:26 +02:00
cozed-gh 114d834d36 Merge branch 'develop' of https://github.com/cozed-gh/Superalgos into develop 2021-04-09 15:19:11 +02:00
cozed-gh cea708239e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-09 15:14:23 +02:00
cozed-gh e01ff6b78f Omega One Data Mine docs 2021-04-09 15:14:04 +02:00
cozed-gh e07253124c Change name of Omega to Omega One 2021-04-09 15:09:45 +02:00
Luis Fernando Molina 124fd3040d Merge pull request #791 from Luis-Fernando-Molina/develop
Contribution: Bug FIX: Coninbase Pro handling of cancelled orders
2021-04-09 08:10:02 -04:00
Luis Fernando Molina 17afa41ccb Bug FIX: Coninbase Pro handling of cancelled orders 2021-04-09 14:09:44 +02:00
Luis Fernando Molina 8cd9f15cb8 Merge pull request #788 from ssplatt/update-key-docs
update docs for coinbase pro api key password
2021-04-09 06:59:05 -04:00
Julian Molina 3075ecfc24 Merge pull request #790 from cozed-gh/develop
Contribution: Omega One Data Mine docs
2021-04-09 12:31:30 +02:00
cozed-gh c5fd0cb584 Merge branch 'develop' of https://github.com/cozed-gh/Superalgos into develop 2021-04-09 12:14:54 +02:00
cozed-gh a3c1edaa75 Omega One Data Mine (yes, it will become a series of indicators) :) 2021-04-09 11:58:07 +02:00
ssplatt 367a47fe71 update docs for coinbase pro api key password 2021-04-08 22:44:18 -04:00
Luis Fernando Molina c93f58dd01 Merge pull request #787 from Luis-Fernando-Molina/develop
Contribution: Coninbase Pro handling of cancelled orders
2021-04-08 17:33:31 -04:00
Luis Fernando Molina bfc83b2e32 Coninbase Pro handling of cancelled orders 2021-04-08 23:32:35 +02:00
Luis Fernando Molina 6c75258291 Merge pull request #785 from ssplatt/api-key-password
Add password to api key configuration
2021-04-08 16:16:18 -04:00
Julian Molina 562ff5efe0 Merge pull request #786 from julian-molina/develop
Contribution: Notes on how to contribute tutorials
2021-04-08 20:35:17 +02:00
Julian Molina a82959de1a Notes on how to contribute tutorials 2021-04-08 20:34:26 +02:00
ssplatt 2c01d2177a cleanup whitespace 2021-04-08 12:52:40 -04:00
ssplatt b7ac28b5c7 add password to api key config 2021-04-08 12:51:10 -04:00
Julian Molina 45254f3f10 Merge pull request #784 from harrellbm/develop
Charting Space Tutorial revision 2
2021-04-08 16:56:25 +02:00
Noeljarillo f7c2358d66 This is my contribution to Superalgos 2021-04-08 16:15:22 +02:00
Brenden Harrell c9e26f5396 Updated Workspace Creating Custom Charts 2021-04-08 08:40:21 -05:00
Brenden Harrell d3f514e66a Revised Charting Space Tutorial pt2 2021-04-08 08:34:49 -05:00
Noeljarillo a38c4078ac This is my contribution to Superalgos 2021-04-08 14:36:43 +02:00
Noeljarillo 139c8bb9fd This is my contribution to Superalgos 2021-04-08 14:11:40 +02:00
Brenden Harrell 1144e5ee4a Revisions to Charting Space Tutorial pt 1 2021-04-07 22:12:39 -05:00
Brenden Harrell 75cb6d54c3 title update 2021-04-07 07:00:49 -05:00
Smidy13 daf5eb465e Bug Fix: Getting Started Tutorial Not Loading 2021-04-07 23:34:58 +12:00
Luis Fernando Molina d35648ef08 Merge branch 'develop' into plugins-docs 2021-04-06 21:17:25 +02:00
Luis Fernando Molina 503587206f Merge pull request #777 from Luis-Fernando-Molina/develop
Contribution: New Branch Plugins/Docs
2021-04-06 15:15:57 -04:00
Luis Fernando Molina 802b422b40 Merge pull request #778 from Luis-Fernando-Molina/plugins-docs
Plugins docs
2021-04-06 15:15:28 -04:00
Luis Fernando Molina 418c6bb83e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-06 21:09:24 +02:00
Luis Fernando Molina e9f4f1c2a7 New Branch Plugins/Docs 2021-04-06 21:08:38 +02:00
Julian Molina 1aa8c87ee6 Merge pull request #776 from julian-molina/develop
Contribution: Contributing tutorials
2021-04-06 20:38:48 +02:00
Julian Molina cffcb79662 Contributing tutorials 2021-04-06 20:38:00 +02:00
Julian Molina 442cd88bd2 Merge pull request #775 from julian-molina/develop
Contribution: How to contribute tutorials
2021-04-06 20:30:08 +02:00
Julian Molina 4f82fa8125 How to contribute tutorials 2021-04-06 20:28:44 +02:00
Luis Fernando Molina 5b0e548204 Merge pull request #773 from Smidy13/develop
Bug Fix for Announcements + Browser Type / Version Check
2021-04-06 14:08:11 -04:00
cozed-gh 9894ac5e33 Merge branch 'develop' of https://github.com/cozed-gh/Superalgos into develop 2021-04-06 13:48:42 +02:00
cozed-gh 0c85f0df73 Merge pull request #1 from Superalgos/develop
Develop merge 2021-04-06
2021-04-06 12:25:12 +02:00
Julian Molina 844d1313c9 Merge pull request #772 from harrellbm/develop
Contribution: Revise Charting Space Tutorial and Add Creating Custom Charts Workspace
2021-04-06 10:22:29 +02:00
Smidy13 8e2172afd3 Browser User Agent Check + Warning 2021-04-06 14:40:00 +12:00
Smidy13 2bc7f91641 Bug Fix: Allow Announcements on Create Order Events 2021-04-06 10:40:38 +12:00
Brenden Harrell c565222963 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-05 17:35:01 -05:00
Brenden Harrell 0aab8e4828 Add Creating Custom Charts Workspace 2021-04-05 17:34:48 -05:00
Brenden Harrell 922f6dd9ce Revise How to set up a new Chart Tutorial docs 2021-04-05 17:34:20 -05:00
Julian Molina d22141bd6c Merge pull request #771 from julian-molina/develop
Contribution: Tutorial node page upgrade
2021-04-05 21:12:24 +02:00
Julian Molina de3e983504 Tutorial node page upgrade 2021-04-05 21:11:39 +02:00
Luis Fernando Molina 84f2aeb627 Merge pull request #770 from Superalgos/develop
Beta 9 Release
2021-04-05 11:49:51 -04:00
Julian Molina 9f4a25aee2 Merge pull request #768 from julian-molina/develop
Contribution: LF Trading Bot Data Structures Revision
2021-04-05 13:28:49 +02:00
Julian Molina ac8985bf10 LF Trading Bot Data Structures Revision 2021-04-05 13:27:33 +02:00
Julian Molina b9226c82d0 Merge pull request #767 from julian-molina/develop
Contribution: Scammers warnings on readme and welcome tutorial
2021-04-05 09:54:47 +02:00
Julian Molina 95ad39f020 Scammers warnings on readme and welcome tutorial 2021-04-05 09:53:46 +02:00
Julian Molina 25d06fe2c9 Merge pull request #765 from harrellbm/develop
Contribution: Charting Space Tutorials
2021-04-05 09:36:17 +02:00
Smidy 52b9d29c58 Merge pull request #4 from Superalgos/develop
Pulling Latest Changes to Smidy13 Fork
2021-04-05 14:10:45 +12:00
Luis Fernando Molina 8adc4e82a2 Merge pull request #766 from Luis-Fernando-Molina/develop
Contribution: Market name available at conditions and formulas of Trading System and Announcements
2021-04-04 21:32:40 -04:00
Luis Fernando Molina ecfd40bf70 Market name available at conditions and formulas of Trading System and Announcements 2021-04-05 03:32:09 +02:00
Luis Fernando Molina 951de0a56c Merge pull request #764 from Smidy13/develop
Fixing Typo & Social Bots Icons and Documentation
2021-04-04 21:23:35 -04:00
Smidy13 4567e8de23 Adding sessionParameters to Announcements 2021-04-05 10:54:03 +12:00
Brenden Harrell 8ad6838caf Merge remote-tracking branch 'upstream/master' 2021-04-03 09:05:50 -05:00
Brenden Harrell 911529b0cc Merge remote-tracking branch 'upstream/master' into develop 2021-04-03 08:47:36 -05:00
Brenden Harrell 3242b73023 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-03 08:02:14 -05:00
Brenden Harrell a58535dae5 Initial commit of Charting Space tutorials 2021-04-03 08:01:10 -05:00
Smidy13 41b443d444 Social Bots and Telegram Bot documentation improvements. 2021-04-04 00:13:08 +13:00
Smidy13 3655b2cdf1 Merge branch 'develop' of https://github.com/Smidy13/Superalgos into develop 2021-04-03 20:36:57 +13:00
Smidy13 50e7d5c710 Fixing Typo of doscs.save to docs.save 2021-04-03 20:35:31 +13:00
Smidy13 97216709e3 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-04-03 13:04:25 +13:00
Smidy f82ac03d2e Merge pull request #3 from Superalgos/develop
Updating Forked Develop Branch
2021-04-03 12:59:45 +13:00
Julian Molina eaf2a47dc5 Merge pull request #761 from julian-molina/develop
Contribution: Index credits message
2021-04-02 18:52:16 +02:00
Julian Molina 71ace4ef21 Index credits message 2021-04-02 18:47:46 +02:00
Luis Fernando Molina 571ceb61d4 Merge pull request #760 from Superalgos/develop
Beta 9 RC 2
2021-04-02 07:30:15 -04:00
Luis Fernando Molina 50c255fb26 Merge pull request #759 from Luis-Fernando-Molina/develop
Contribution: Turkish Language added
2021-04-02 07:18:08 -04:00
Luis Fernando Molina fd8b9aebe5 Turkish Language added 2021-04-02 13:17:17 +02:00
Julian Molina 4c4ff2ad5d Merge pull request #758 from julian-molina/develop
Contribution: Flag
2021-04-02 10:00:16 +02:00
Julian Molina c2c2a4c666 Flag 2021-04-02 09:59:36 +02:00
Brenden Harrell fb6d69a4eb This is my contribution to Superalgos 2021-04-01 19:07:41 -05:00
Julian Molina ac141949b3 Merge pull request #756 from julian-molina/develop
Contribution: TR Flag
2021-04-01 13:29:06 +02:00
Julian Molina d5584d498e TR Flag 2021-04-01 13:26:23 +02:00
Julian Molina 119ab2acb0 Merge pull request #755 from julian-molina/develop
Contribution: README and Index files
2021-04-01 12:33:19 +02:00
Julian Molina 86ba1f867e Merge pull request #754 from suttridge/develop
Contribution: Fixed grammar and spelling errors in Trading Farms documentation.
2021-04-01 12:32:42 +02:00
Julian Molina 0bc76f88e9 README and Index files 2021-04-01 12:30:27 +02:00
Steve Langridge d95f0d4888 Fixed grammar and spelling errors in Trading Farms documentation. 2021-04-01 10:10:05 +02:00
Luis Fernando Molina dfecdbd5e8 Update README.md 2021-04-01 01:30:10 +02:00
Luis Fernando Molina 4a14976d81 Merge pull request #753 from Superalgos/develop
Beta 9 Release Candidate
2021-03-31 19:26:11 -04:00
Luis Fernando Molina da6ec283fe Merge pull request #752 from Luis-Fernando-Molina/develop
Contribution: Pre-relese details at client console logs
2021-03-31 19:14:41 -04:00
Luis Fernando Molina 7668c130f5 Pre-relese details at client console logs 2021-04-01 01:13:28 +02:00
Julian Molina 514168ac9f Merge pull request #751 from julian-molina/develop
Contribution: Install a new market tutorial revision
2021-03-31 20:04:56 +02:00
Julian Molina c07369e5ed Install a new market tutorial revision 2021-03-31 20:03:05 +02:00
Julian Molina b916eb708b Merge pull request #750 from julian-molina/develop
Contribution: Tutorials book revision
2021-03-31 18:41:21 +02:00
Julian Molina d5d1661d41 Tutorials book revision 2021-03-31 18:38:18 +02:00
Julian Molina e4647a1df9 Merge pull request #748 from julian-molina/develop
Contribution: Trading system design tutorials revision
2021-03-31 18:18:25 +02:00
Julian Molina 27f34c95e9 Trading system design tutorials revision 2021-03-31 18:06:13 +02:00
Julian Molina 439c632c6a Merge pull request #747 from julian-molina/develop
Contribution: Trading bot layers tutorial revision
2021-03-31 12:27:00 +02:00
Julian Molina fd9e2f1f88 Trading bot layers tutorial revision 2021-03-31 12:23:16 +02:00
Luis Fernando Molina 335cdcf585 Merge pull request #746 from Luis-Fernando-Molina/develop
Contribution: BUG FIX: uid not defined after change for Bitstamp
2021-03-30 15:18:42 -04:00
Luis Fernando Molina a8e3c399bb BUG FIX: uid not defined after change for Bitstamp 2021-03-30 21:18:16 +02:00
Julian Molina 2478de7a16 Merge pull request #745 from julian-molina/develop
Contribution: Repagination of tutorials
2021-03-30 18:08:51 +02:00
Julian Molina 348e39f01c Repagination of tutorials 2021-03-30 18:06:35 +02:00
Brenden Harrell 3586d9ad06 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-30 10:04:18 -05:00
Luis Fernando Molina b7271a13e0 Merge pull request #743 from suttridge/develop
Contribution: Have to check for both undefined and null to prevent exceptions from stopping the trading task.
2021-03-30 10:08:45 -04:00
Julian Molina c401755bf0 Merge pull request #740 from julian-molina/develop
Contribution: Updating books and topics
2021-03-30 12:33:44 +02:00
Julian Molina 9406f5bbea TensorFlow icons relocated 2021-03-30 12:33:17 +02:00
Julian Molina 6b14e92ab6 Merge pull request #744 from Basalt09/develop
Develop
2021-03-30 12:30:26 +02:00
Basalt09 2d9ccfdb90 Add files via upload 2021-03-30 18:28:28 +08:00
Basalt09 7db1699f6f Add files via upload 2021-03-30 18:27:59 +08:00
Steve Langridge 9980cf637e Have to check for both undefined and null to prevent exceptions from stopping the trading task. 2021-03-30 12:26:03 +02:00
Steve Langridge 43312c05e6 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-30 12:23:57 +02:00
Julian Molina 847b3585f8 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-30 12:07:30 +02:00
Julian Molina 85a6d24ec2 Merge pull request #742 from Basalt09/develop
Develop
2021-03-30 12:06:33 +02:00
Basalt09 7a5c88acf7 Add files via upload 2021-03-30 17:58:16 +08:00
Basalt09 0c2db497a5 Add files via upload 2021-03-30 17:53:16 +08:00
Julian Molina 0871f3e571 Updating books and topics 2021-03-30 10:59:04 +02:00
Steve Langridge 02efde6dec Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-30 09:59:33 +02:00
Julian Molina 46898a348c Merge pull request #739 from julian-molina/develop
Contribution: Contributing tutorial
2021-03-29 20:15:07 +02:00
Julian Molina afe6efc232 Getting Started Plugin Workspace Done! 2021-03-29 20:00:02 +02:00
Julian Molina 3a9575bbb8 Contributing tutorial 2021-03-29 18:21:33 +02:00
Julian Molina 0f912f97b1 Merge pull request #738 from suttridge/develop
Contribution: Added XRP icon.
2021-03-29 17:18:34 +02:00
Steve Langridge fe376474ac Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-29 15:42:40 +02:00
Steve Langridge 8363e825a3 Added XRP icon. 2021-03-29 15:41:17 +02:00
Luis Fernando Molina 955cbb128b Merge pull request #737 from Luis-Fernando-Molina/develop
Contribution: searchPage command introduced to show search page
2021-03-29 09:37:46 -04:00
Luis Fernando Molina f6d5b1e794 searchPage command introduced to show search page 2021-03-29 15:36:10 +02:00
Julian Molina c31d3cfe48 Merge pull request #735 from DougJCook/develop
Contribution: My Superalgos Review
2021-03-29 15:35:48 +02:00
Luis Fernando Molina aee0d889c5 Merge pull request #736 from Luis-Fernando-Molina/develop
Contribution: closeTutorialEditor command improved to show search page
2021-03-29 09:25:37 -04:00
Luis Fernando Molina ae38c94bd7 closeTutorialEditor command improved to show search page 2021-03-29 15:24:19 +02:00
Julian Molina 5aa8bce1cc Delete superalgos-project-review-008-superalgos-review-your-review-title.json 2021-03-29 15:19:22 +02:00
Julian Molina fab48b0d7f Merge branch 'develop' into develop 2021-03-29 15:17:24 +02:00
Julian Molina 8f2ca7bed2 Merge pull request #734 from julian-molina/develop
Contribution: Contribute tutorial revision
2021-03-29 15:14:59 +02:00
Julian Molina 48efab796d This is my contribution to Superalgos 2021-03-29 15:13:21 +02:00
Julian Molina 3e872328af Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-29 14:37:53 +02:00
DougJCook edd02d984e My Superalgos Review 2021-03-29 08:29:52 -04:00
DougJCook 816bf451a1 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-29 08:01:05 -04:00
Julian Molina ddac685469 Contribute tutorial revision 2021-03-29 10:22:41 +02:00
Julian Molina dddbb186fe Merge pull request #733 from Mhnramin/develop
Contribution: This is my contribution to Superalgos
2021-03-28 19:40:53 +02:00
Mhnramin c9831e6449 This is my contribution to Superalgos 2021-03-29 01:08:54 +08:00
Luis Fernando Molina 95de7fa3d8 Merge pull request #732 from Smidy13/develop
Check if Host IP = OS IP for FileStorage.js
2021-03-28 09:29:27 -04:00
Smidy13 e9fdc0e50b FileStorage.js Including Localhost IP Addr Also 2021-03-28 02:26:42 +00:00
Julian Molina 2cbc1b3bfe Merge pull request #731 from julian-molina/develop
Contribution: Contribute tutorial update
2021-03-27 22:33:49 +01:00
Julian Molina 72d3ee37c3 Editing 2021-03-27 22:30:37 +01:00
Julian Molina 759f21bbb1 The command 2021-03-27 21:57:24 +01:00
Smidy13 eb969767cd Merge branch 'develop' of https://github.com/Smidy13/Superalgos into develop 2021-03-27 20:49:16 +00:00
Smidy13 6ed480374b Check if Host IP = OS IP for FileStorage.js 2021-03-27 20:48:44 +00:00
Julian Molina b632e3ab8d Switching branches 2021-03-27 20:35:05 +01:00
Julian Molina 5d603e24a4 Contribute tutorial update 2021-03-27 20:14:08 +01:00
Julian Molina cd95e9d112 Merge pull request #730 from julian-molina/develop
Contribution: Index page message
2021-03-27 19:40:44 +01:00
Julian Molina 8e09b1c163 Index page message 2021-03-27 19:37:20 +01:00
Luis Fernando Molina 31af3a2383 Merge pull request #729 from Luis-Fernando-Molina/develop
Contribution: Fixed Exchange Name
2021-03-26 20:35:03 -04:00
Luis Fernando Molina 2e1d3c944a Fixed Exchange Name 2021-03-27 01:34:13 +01:00
Luis Fernando Molina f6c3b01841 Merge pull request #720 from joenij/develop
Develop
2021-03-26 20:28:43 -04:00
Luis Fernando Molina ab42d3261f Merge branch 'develop' into develop 2021-03-26 20:28:32 -04:00
Luis Fernando Molina 9fbf585dc5 Merge pull request #726 from joenij/patch-1
Update AppSchema.json
2021-03-26 20:18:49 -04:00
Julian Molina 3cba131c30 Merge pull request #728 from Mhnramin/develop
Contribution: This is my contribution to Superalgos
2021-03-26 17:54:16 +01:00
Mhnramin 58d7acb51d This is my contribution to Superalgos 2021-03-27 00:02:31 +08:00
Steve Langridge 69d478fa5b Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-26 15:49:00 +02:00
Julian Molina 12151f20e4 Merge pull request #727 from julian-molina/develop
Contribution: Footer and translation pages
2021-03-26 14:19:11 +01:00
Julian Molina 38af8ffb85 Footer and translation pages 2021-03-26 14:15:02 +01:00
joenij 93193de4c3 Update AppSchema.json 2021-03-26 14:11:30 +01:00
Julian Molina 8729ae25d0 Merge pull request #725 from julian-molina/develop
Contribution: Contribute to Superalgos Tutorial Revision
2021-03-26 13:56:44 +01:00
Julian Molina 1c88103950 Contribute to Superalgos Tutorial Revision 2021-03-26 12:03:30 +01:00
Julian Molina a3ec64554e Merge pull request #724 from julian-molina/develop
Contribution: Getting Started Plugin Workspace update
2021-03-25 22:16:21 +01:00
Julian Molina 3fcfcec066 Getting Started Plugin Workspace update 2021-03-25 22:15:55 +01:00
Julian Molina 35a7188740 Merge pull request #723 from julian-molina/develop
Contribution: Repagination of tutorials in the Getting Started workspace
2021-03-25 21:57:37 +01:00
Julian Molina 2eb493291e Repagination of tutorials in the Getting Started workspace 2021-03-25 21:54:39 +01:00
Julian Molina 51a74ae782 Merge pull request #722 from Mhnramin/develop
Contribution: This is my contribution to Superalgos
2021-03-25 21:16:40 +01:00
Julian Molina 1461de3493 Merge branch 'develop' into develop 2021-03-25 21:15:58 +01:00
Julian Molina 26067ab0e2 Merge pull request #716 from julian-molina/develop
Contribution: Welcome tutorial revision
2021-03-25 20:34:34 +01:00
Julian Molina bb0c3f5d51 Revert "Intro and repagination of tutorials in the getting started workspace"
This reverts commit ec206fbf88.
2021-03-25 20:34:00 +01:00
Mhnramin a5fee10d6c This is my contribution to Superalgos 2021-03-26 03:23:37 +08:00
Julian Molina ec206fbf88 Intro and repagination of tutorials in the getting started workspace 2021-03-25 19:55:47 +01:00
Mhnramin 1ccb99cc23 Merge branch 'master' of https://github.com/Superalgos/Superalgos into develop 2021-03-26 02:07:56 +08:00
Julian Molina 5f7431b2a5 Tutorial ending 2021-03-25 19:07:03 +01:00
Julian Molina 257f18757c Getting Started Revision 2021-03-25 12:21:52 +01:00
Steve Langridge 8bb6a69b27 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-25 10:44:14 +02:00
Luis Fernando Molina f65b1d5316 Merge pull request #718 from Luis-Fernando-Molina/develop
Contribution: String Paste your exchange API name or label replaced for API Key
2021-03-24 15:40:57 -04:00
Luis Fernando Molina f58d1f44f7 String Paste your exchange API name or label replaced for API Key 2021-03-24 20:39:41 +01:00
Smidy b38630bf85 Merge pull request #1 from Superalgos/develop
Merge pull request #714 from Smidy13/develop
2021-03-24 16:23:28 +13:00
Steve Langridge ee7c870d3c Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-23 17:57:15 +02:00
Julian Molina aa7d5e8701 Welcome tutorial revision 2021-03-23 14:17:55 +01:00
Luis Fernando Molina f115bff859 Merge pull request #714 from Smidy13/develop
Announcement Formula Error Page & Repagination
2021-03-23 08:36:07 -04:00
joenij 7357974c8f This is my contribution to Superalgos 2021-03-23 10:44:49 +01:00
joenij d4c2704331 This is my contribution to Superalgos 2021-03-23 10:15:21 +01:00
suttridge feb19f7fd5 Merge pull request #1 from Superalgos/develop
Develop
2021-03-23 09:25:59 +02:00
smidy13 4867fd70ef Announcement Formula Error Page & Repagination 2021-03-23 05:02:41 +00:00
smidy13 2724e41fb0 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-23 02:39:39 +00:00
DougJCook f2b8d23a2c Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-22 14:08:50 -04:00
Julian Molina 3e260bf85f Merge pull request #713 from julian-molina/develop
Contribution: Welcome tutorial revision
2021-03-22 18:52:01 +01:00
Julian Molina 1be9018f8f App Schema 2021-03-22 18:50:46 +01:00
Julian Molina 394bee3a66 The Coolest Trick 2021-03-22 17:26:52 +01:00
Julian Molina 0790df29ce Sell It Quick 2021-03-22 17:00:38 +01:00
Julian Molina 25528d2d0e Aim High, Trade Big 2021-03-22 16:46:20 +01:00
Julian Molina 5761f656da Putting Things in Order 2021-03-22 13:42:17 +01:00
Julian Molina a54af6671b Are We Up to Date 2021-03-22 13:21:34 +01:00
Julian Molina 7dad199f74 Welcome tutorial revision 2021-03-22 12:58:26 +01:00
DougJCook 57eb4b200c Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-22 06:46:43 -04:00
Luis Fernando Molina 4d3f95acf0 Merge pull request #712 from Mhnramin/develop
Contribution: This is my contribution to Superalgos
2021-03-21 20:08:49 -04:00
Mhnramin 90f8e0a2b7 This is my contribution to Superalgos 2021-03-22 03:13:02 +08:00
Luis Fernando Molina 147202f6d9 Merge pull request #711 from pisukesoramame/develop
Contribution: My Superalgos Review
2021-03-21 11:15:25 -04:00
DougJCook d6b919dbc3 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-21 08:38:30 -04:00
smidy13 cd17059000 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-21 01:52:22 +00:00
smidy13 140c52d7d2 Merge branch 'master' of https://github.com/Superalgos/Superalgos into develop 2021-03-21 01:50:09 +00:00
Julian Molina 215885621a Merge pull request #709 from 9808us/develop
Crypto Ecosystem Reorganized
2021-03-20 19:24:18 +01:00
Julian Molina e582f0fa09 Merge pull request #710 from julian-molina/develop
Contribution: Basic Education Wrapping Up
2021-03-20 19:23:16 +01:00
Julian Molina 6c25401bd8 Tutorial ready 2021-03-20 19:21:57 +01:00
pisukesoramame 68c7b5999d My Superalgos Review 2021-03-20 18:59:41 +01:00
Julian Molina 96529afe92 Basic Education Wrapping Up 2021-03-20 18:13:17 +01:00
Julian Molina e721e92268 Merge pull request #707 from julian-molina/develop
Contribution: Basic Education - Data
2021-03-20 13:56:03 +01:00
Julian Molina 18ef3bdaf2 Minor fixes 2021-03-20 13:55:29 +01:00
9808us fa83d4b579 Crypto Ecosystem Reorganized 2021-03-20 13:17:04 +01:00
Julian Molina 7f27969f2b How About Strategies 2021-03-20 11:25:24 +01:00
Julian Molina ac704d002f More indicators 2021-03-20 10:42:56 +01:00
Luis Fernando Molina ead48b08b1 Merge pull request #708 from ndd91/develop
Contribution: My Superalgos Review
2021-03-19 15:43:48 -04:00
Julian Molina 71f32e750d Remove hardcoded autoplay from Youtube videos 2021-03-19 20:41:23 +01:00
Julian Molina 38e83f02e0 Building indicators 2021-03-19 20:26:09 +01:00
System Administrator 61d0b09b1a My Superalgos Review 2021-03-19 15:00:32 -04:00
Julian Molina 9e15617836 About Other Markets 2021-03-19 19:01:38 +01:00
Julian Molina f9cbabc706 Dealing With Data 2021-03-19 18:38:25 +01:00
Julian Molina d1c0835060 Basic Education - Data 2021-03-19 18:05:13 +01:00
Luis Fernando Molina 8048ddd076 Merge pull request #703 from 0xperez/develop
Translating the Welcome Tutorial - Page 50 to 56
2021-03-19 10:08:11 -04:00
Julian Molina e03ec36e3e Merge pull request #706 from julian-molina/develop
Contribution: Tested Exchanges Plugin Workspace
2021-03-19 13:16:14 +01:00
Julian Molina e131bd8293 Tested Exchanges Plugin Workspace 2021-03-19 13:15:35 +01:00
Julian Molina 335daa8830 Merge pull request #705 from julian-molina/develop
Contribution: Minor Docs fix
2021-03-19 12:52:57 +01:00
Julian Molina 9d72956865 Minor Docs fix 2021-03-19 12:52:47 +01:00
Julian Molina c6f51b5453 Merge pull request #704 from julian-molina/develop
Contribution: Organization of workspaces
2021-03-19 12:40:40 +01:00
Julian Molina e6304242ab Organization of workspaces 2021-03-19 12:39:05 +01:00
DougJCook 0d1a713183 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-18 17:59:13 -04:00
Julian Molina 96c326cc85 Merge pull request #697 from julian-molina/develop
Contribution: Basic Education - Exchanges
2021-03-18 21:29:23 +01:00
Julian Molina 8257225381 Autoplay in YouTube videos 2021-03-18 21:27:37 +01:00
Luis Fernando Molina 3d3f602242 Merge pull request #702 from suttridge/develop
Contribution: Fixed small spelling and grammar mistakes.
2021-03-18 17:03:33 +01:00
Steve Langridge b08277d5da Fixed small spelling and grammar mistakes. 2021-03-18 17:29:07 +02:00
Steve Langridge c50088db2e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-18 17:25:49 +02:00
Luis Fernando Molina c4af8dae12 Merge pull request #701 from Luis-Fernando-Molina/develop
Contribution: Docs page updated
2021-03-18 16:03:32 +01:00
Luis Fernando Molina 1593edc828 Docs page updated 2021-03-18 16:02:45 +01:00
Luis Fernando Molina d168ea1538 Merge pull request #694 from harrellbm/develop
Contribution: My Superalgos Review
2021-03-18 15:31:20 +01:00
Luis Fernando Molina faeeb398f0 Merge pull request #692 from suttridge/develop
Contribution: Fixed bug : null object value when targetNode.value is undefined, thus causing all trading to stop.
2021-03-18 15:27:29 +01:00
Luis Fernando Molina 6901d0f3c7 Merge pull request #700 from Smidy13/develop
Bug Fix: Telegram Announcement Formula and Condition Changes
2021-03-18 15:16:12 +01:00
Luis Fernando Molina 7c7f88f878 Update Announcements.js 2021-03-18 15:09:32 +01:00
Smidy13 d7a0dd6984 Bug Fix: Telegram Announcement Formula and Condition Changes 2021-03-19 01:36:42 +13:00
Julian Molina 44c40c960f Testing New Exchanges 2021-03-18 11:19:59 +01:00
Steve Langridge 6406975c6b Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-18 09:09:16 +02:00
Julian Molina 85ca464d1a Basic Education - Exchanges 2021-03-17 20:53:24 +01:00
Julian Molina d02503fc44 Merge pull request #696 from julian-molina/develop
Contribution: Reorganization of testing exchanges topics
2021-03-17 20:42:21 +01:00
Julian Molina 8fc5009140 Reorganization of testing exchanges topics 2021-03-17 20:40:15 +01:00
Julian Molina 7fe425bc3b Merge pull request #695 from julian-molina/develop
Contribution: Basic Education Tutorial
2021-03-17 20:00:18 +01:00
Julian Molina 0728668844 Improving a Plugin 2021-03-17 17:20:51 +01:00
Julian Molina 38aa11aba6 Starting From a Plugin 2021-03-17 16:43:14 +01:00
DougJCook 535a9bf5e0 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-17 07:34:43 -04:00
Julian Molina 59b5b24026 Basic Education Tutorial 2021-03-17 12:06:37 +01:00
0xperez 5425f9d8e8 Translating the Welcome Tutorial - Page 50 to 56 2021-03-17 08:03:31 +01:00
Steve Langridge 801df1bcab Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-17 08:51:00 +02:00
Brenden Harrell 28f0b0bdd0 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-16 22:10:02 -05:00
Brenden Harrell 396f523117 My Superalgos Review 2021-03-16 21:46:11 -05:00
Julian Molina 674d0e3888 Merge pull request #693 from julian-molina/develop
Contribution: Let's Talk Plugins
2021-03-16 21:22:49 +01:00
Julian Molina 27fb043f88 Placing Plugins 2021-03-16 21:22:08 +01:00
Julian Molina ebcc363202 Let's Talk Plugins 2021-03-16 18:53:14 +01:00
Julian Molina e8f245cf5c Merge pull request #690 from julian-molina/develop
Contribution: Basic Education Tutorial
2021-03-16 17:11:59 +01:00
Julian Molina 4a597252c0 User Examples book 2021-03-16 17:10:26 +01:00
Steve Langridge fedf02d35b Fixed bug : null object value when targetNode.value is undefined, thus causing all trading to stop. 2021-03-16 17:22:45 +02:00
Julian Molina 9af1255a4c The Current Workspace 2021-03-16 16:12:26 +01:00
Luis Fernando Molina dd3ce6b852 Merge pull request #691 from Luis-Fernando-Molina/develop
Contribution: TensorFlow definitions added to the Docs
2021-03-16 13:18:18 +01:00
Luis Fernando Molina 4f397ff76f TensorFlow definitions added to the Docs 2021-03-16 13:17:24 +01:00
Julian Molina 4eeec4cd7c Working with workspaces 2021-03-16 12:39:47 +01:00
Julian Molina f3906aee04 Basic Education Tutorial 2021-03-16 12:16:53 +01:00
Luis Fernando Molina af0f252242 Merge pull request #689 from Luis-Fernando-Molina/develop
Contribution: Refactoring Secuential for Sequential
2021-03-16 12:15:17 +01:00
Luis Fernando Molina 19150c9eb3 Refactoring Secuential for Sequential 2021-03-16 12:11:02 +01:00
DougJCook 273163deb8 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-16 05:49:17 -04:00
Julian Molina 4ff20878b2 Merge pull request #688 from Basalt09/develop
Add files via upload
2021-03-16 10:33:12 +01:00
Basalt09 2eeb551323 Add files via upload 2021-03-16 17:30:53 +08:00
Julian Molina a81f81de9d Merge pull request #687 from Basalt09/develop
Develop
2021-03-16 10:27:04 +01:00
Basalt09 1a68e96906 Add files via upload 2021-03-16 17:04:30 +08:00
Basalt09 a6f367f8b7 Merge pull request #1 from Superalgos/develop
Develop
2021-03-16 17:03:11 +08:00
Julian Molina 32fb108ae3 Merge pull request #661 from julian-molina/develop
Contribution: Basic Education Tutorial
2021-03-16 09:38:23 +01:00
Julian Molina d03266a151 TensorFlow Icons SVG Folder 2021-03-16 09:37:15 +01:00
Julian Molina ab96894b35 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-16 09:32:53 +01:00
Julian Molina aebd1b4f8f Merge pull request #686 from Basalt09/develop
Develop
2021-03-16 09:31:54 +01:00
Basalt09 bfda7c18e6 Add files via upload 2021-03-16 16:29:57 +08:00
Basalt09 9ecc5e9ebc Delete activation-function.png 2021-03-16 16:29:47 +08:00
Julian Molina 23aae0ee52 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-16 09:05:32 +01:00
Julian Molina 6ca92929b0 Merge pull request #685 from Basalt09/develop
Add files via upload
2021-03-16 09:05:11 +01:00
cozed-gh 72f135d983 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-16 08:58:37 +01:00
Basalt09 b04831b978 Add files via upload 2021-03-16 15:28:32 +08:00
DougJCook 25ef9e6813 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-15 18:42:34 -04:00
Julian Molina 5dc20acfd9 What About Clones 2021-03-15 21:15:09 +01:00
Julian Molina cd9dfa91c4 Clones update 2021-03-15 21:07:17 +01:00
Julian Molina de73c98dd0 No Need to Memorize 2021-03-15 18:58:30 +01:00
Julian Molina fd89a55379 One Last Backup! 2021-03-15 18:22:59 +01:00
Julian Molina 4c686dcb0f Back It Up Again 2021-03-15 18:05:52 +01:00
Julian Molina 9ae2e7e53d This is my contribution to Superalgos 2021-03-15 17:47:58 +01:00
Julian Molina a5ebb29ba3 Back to Backups 2021-03-15 17:02:14 +01:00
Julian Molina 9db90a25b7 Backups page and illustrations revision 2021-03-15 16:52:16 +01:00
Luis Fernando Molina 0b12741bf9 Merge pull request #684 from Luis-Fernando-Molina/develop
Contribution: Index message improved.
2021-03-15 14:18:09 +01:00
Luis Fernando Molina 47a0601e78 Index message improved. 2021-03-15 14:17:49 +01:00
Julian Molina 36517c7940 One Last Point! 2021-03-15 13:04:14 +01:00
Julian Molina c731272afa Is It Done 2021-03-15 12:40:35 +01:00
Julian Molina 66d4644ae1 Let's Get On With It 2021-03-15 12:27:44 +01:00
Julian Molina 5d802f8bf1 Establishing References 2021-03-15 12:13:26 +01:00
Julian Molina 3c773d5f1e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-15 11:50:36 +01:00
Julian Molina ce029e3720 Visualizing References 2021-03-15 11:48:59 +01:00
Luis Fernando Molina 51fe47c594 Merge pull request #677 from EdoFrenkel/develop
Add Github API location (In tutorial) and fix typo
2021-03-15 11:31:04 +01:00
Luis Fernando Molina 2935e1efae Merge pull request #678 from Sil3ntLight/master
Update welcome-to-superalgos-079-tutorial-step-lets-take-a-peek..json
2021-03-15 11:29:03 +01:00
Luis Fernando Molina 8b7cdbf13d Merge pull request #676 from whtv/develop
Update README
2021-03-15 11:08:01 +01:00
Julian Molina 07d8e8dce8 Dealing with References 2021-03-15 09:46:18 +01:00
Brenden Harrell 32f0602043 My Superalgos Review 2021-03-14 20:54:07 -05:00
Joren Miner 92c8c112fd Update welcome-to-superalgos-079-tutorial-step-lets-take-a-peek..json
Minor grammar fix for tutorial step in "Welcome to Superalgos" -> "Backtesting" -> "Trading system" -> "Let's Take a Peek".
2021-03-13 14:56:03 -07:00
Edo Frenkel 1d64272f80 Merge pull request #1 from EdoFrenkel/master
This is my contribution to Superalgos
2021-03-13 16:54:41 +02:00
DougJCook 93903d836d Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-13 05:45:12 -05:00
whtv 42b94fae44 Merge branch 'develop' of github.com:whtv/Superalgos into develop 2021-03-13 11:25:30 +01:00
whtv a7cd5732ec Update README.md 2021-03-13 11:21:34 +01:00
Luis Fernando Molina e8cd831a6c Merge pull request #675 from teehanming/develop
Contribution: This is my contribution to Superalgos
2021-03-13 11:03:27 +01:00
Luis Fernando Molina bf8a6ba8f1 Update index.html 2021-03-13 11:02:25 +01:00
teehanming 52840e70e6 This is my contribution to Superalgos 2021-03-13 13:11:10 +08:00
Edo Frenkel 6f4c2a2c84 This is my contribution to Superalgos 2021-03-13 02:03:50 +02:00
Julian Molina 29b3600124 Nodes' Attaching Rules 2021-03-12 22:09:02 +01:00
Julian Molina 192e5fabf3 Irrelevant Nodes 2021-03-12 20:02:52 +01:00
Julian Molina dfc5b658c4 Detaching and Attaching 2021-03-12 19:10:29 +01:00
DougJCook ec0be4eea0 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-12 13:06:37 -05:00
Julian Molina ad6bbf4291 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-12 18:44:25 +01:00
Luis Fernando Molina 221e3b7313 Merge pull request #673 from suttridge/develop
Contribution: Updated Luno exchange test status to now show live trading is possible.
2021-03-12 15:31:15 +01:00
Steve Langridge acdb16c8fc Updated Luno exchange test status to now show live trading is possible. 2021-03-12 14:00:28 +02:00
DougJCook 90815703a8 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-12 06:19:35 -05:00
Julian Molina 173357baf3 Working With Versions 2021-03-12 12:06:55 +01:00
Julian Molina f3a0f03e6f Let's Talk Backups 2021-03-12 11:54:20 +01:00
Julian Molina 651aef5d12 Freeze 2021-03-12 11:14:31 +01:00
Julian Molina 3ef582c935 Shall We Improve This 2021-03-11 21:19:44 +01:00
Luis Fernando Molina 4059fae940 Merge pull request #672 from Luis-Fernando-Molina/develop
Contribution: detachUsingMouse implemented at Space Settings so that users don't detach by mistake nodes
2021-03-11 17:14:54 +01:00
Luis Fernando Molina b5819e7a14 detachUsingMouse implemented at Space Settings so that users don't detach by mistake nodes 2021-03-11 17:13:56 +01:00
Julian Molina f8879d90bb How About The Hierarchy 2021-03-11 17:02:36 +01:00
Julian Molina a7cfb24713 This is my contribution to Superalgos 2021-03-11 16:57:08 +01:00
Julian Molina f88ed660f9 Play With The Tape! 2021-03-11 16:35:00 +01:00
Luis Fernando Molina 83dc55a398 Merge pull request #671 from Luis-Fernando-Molina/develop
Contribution: CCXT updated to latest version 1.42.77
2021-03-11 16:17:50 +01:00
Luis Fernando Molina f7d93ed994 CCXT updated to latest version 1.42.77 2021-03-11 16:14:50 +01:00
Luis Fernando Molina 3fbf95be13 Merge pull request #670 from teehanming/develop
Contribution: Fixing URL & stuff in Docs
2021-03-11 16:07:46 +01:00
Luis Fernando Molina 935a37138f Merge pull request #669 from suttridge/develop
Contribution: Updated the Luno Test Status docs.
2021-03-11 16:06:55 +01:00
Luis Fernando Molina e33c7343cf Merge pull request #668 from 9808us/develop
Tested Exchanges added Bittrex CoinbasePro
2021-03-11 16:05:46 +01:00
Julian Molina 3b31a7933e Tutorial Step - Controlling Distances 2021-03-11 16:04:10 +01:00
Julian Molina 63196b5262 Free-range Nodes 2021-03-11 15:49:44 +01:00
teehanming da82f7a60b This is my contribution to Superalgos 2021-03-11 19:28:02 +08:00
Steve Langridge d25ec06aca Fixed small spelling and grammer mistakes in App Update Commands section. 2021-03-11 12:32:44 +02:00
Steve Langridge f79088d7aa Updated the Luno Test Status docs. 2021-03-11 12:07:37 +02:00
DougJCook 6497dfe881 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-11 04:30:33 -05:00
9808us 1c76f03bf5 Tested Exchanges added Bittrex CoinbasePro 2021-03-11 10:06:39 +01:00
Julian Molina ea8b1daf39 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-11 09:09:44 +01:00
Luis Fernando Molina bf55671492 Merge pull request #666 from teehanming/develop
Contribution: This is my contribution to Superalgos
2021-03-10 16:12:36 +01:00
teehanming 8b24c35739 This is my contribution to Superalgos 2021-03-10 22:50:54 +08:00
Luis Fernando Molina 733cd4a67a Merge pull request #665 from whtv/develop
Fix docs context menu in Firefox
2021-03-10 15:28:31 +01:00
whtv 25272cf615 Fix docs context menu in Firefox 2021-03-10 14:44:14 +01:00
Luis Fernando Molina b4862427ec Merge pull request #663 from Luis-Fernando-Molina/develop
Contribution: Webhooks Updated
2021-03-10 14:19:12 +01:00
Luis Fernando Molina af572261a9 All webhooks functionality checked, docs improved. 2021-03-10 14:17:37 +01:00
DougJCook 37234dbf1d Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-10 06:12:55 -05:00
Luis Fernando Molina 0f004a4d12 Merge pull request #662 from suttridge/develop
Contribution: Fixed small problem when doing fetchTrades for fetchOHLCVs where the fetching could get stuck on a previous day, and could not proceed to the next day.
2021-03-10 11:28:19 +01:00
Luis Fernando Molina 1b74ebe914 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-10 11:25:23 +01:00
Luis Fernando Molina bbbdb43cdd Webhooks Updated 2021-03-10 11:24:36 +01:00
Steve Langridge c39260e194 Fixed small problem when doing fetchTrades for fetchOHLCVs where the fetching could get stuck on a previous day, and could not proceed to the next day. 2021-03-10 11:38:11 +02:00
Julian Molina 225d02eb63 Nodes Independence 2021-03-09 21:51:23 +01:00
Julian Molina 4c2ac7ffec 180 Degrees 2021-03-09 20:54:24 +01:00
Julian Molina de632bd38d Mary Go Round 2021-03-09 20:20:55 +01:00
Julian Molina 1c5670b6c1 Pinned Nodes Can't Dance 2021-03-09 20:05:16 +01:00
Julian Molina 05b3d08fc4 Pinned Nodes Can't Dance 2021-03-09 19:55:07 +01:00
Julian Molina ab42b60a4c Let's Start With the Menu 2021-03-09 19:39:51 +01:00
Julian Molina 9c994944ae This is my contribution to Superalgos 2021-03-09 19:23:08 +01:00
Julian Molina ec1afcb7d9 From the Ground Up 2021-03-09 18:36:12 +01:00
Julian Molina 64085bff34 Basic Education Tutorial 2021-03-09 18:04:01 +01:00
Luis Fernando Molina 303ad77a3c Merge pull request #660 from whtv/develop
Contribution: Fix italicization of every ‘This’ in the docs
2021-03-09 16:51:36 +01:00
whtv 9d105b3c32 Fix italicization of every ‘This’ in the docs 2021-03-09 16:38:49 +01:00
Julian Molina 9f42ffef74 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-09 16:11:35 +01:00
Luis Fernando Molina 4e13517da6 Merge pull request #659 from cozed-gh/develop
Fixed code typos and added another page
2021-03-09 15:03:23 +01:00
cozed-gh aa1be3a78a Fixed code typos and added another page 2021-03-09 14:59:14 +01:00
Luis Fernando Molina e665574593 Merge pull request #658 from Luis-Fernando-Molina/develop
Contribution: CCXT Library updated to latest version: 1.42.67
2021-03-09 14:47:38 +01:00
Luis Fernando Molina ac43839d5d CCXT Library updated to latest version: 1.42.67 2021-03-09 14:44:46 +01:00
Luis Fernando Molina 5273acd2cd Merge pull request #657 from Luis-Fernando-Molina/develop
Contribution: Docs update on how stages are closed.
2021-03-09 14:36:00 +01:00
Luis Fernando Molina 653b222acd Docs update on how stages are closed. 2021-03-09 14:35:29 +01:00
Luis Fernando Molina e265d871c3 Merge pull request #655 from whtv/develop
Ignore dust in either asset
2021-03-09 14:33:46 +01:00
Luis Fernando Molina 535473b304 Merge pull request #656 from Luis-Fernando-Molina/develop
Contribution: Signal Providers apperaring again at Crypto Ecosystem.
2021-03-09 14:21:05 +01:00
Luis Fernando Molina eba0f5880d Signal Providers apperaring again at Crypto Ecosystem. 2021-03-09 14:18:02 +01:00
DougJCook 426fa476dc Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-09 06:40:07 -05:00
cozed-gh f0f9014700 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-09 12:29:29 +01:00
Julian Molina 1710d4ba89 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-09 12:28:15 +01:00
Luis Fernando Molina 37e20e5910 Merge pull request #654 from cozed-gh/develop
Started the User Examples
2021-03-09 12:26:34 +01:00
cozed-gh 27d2c35e78 Started the User Examples 2021-03-09 12:19:10 +01:00
cozed-gh b058b0eff2 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-09 12:18:06 +01:00
cozed-gh 0805284d5a Started the "User Examples" docs 2021-03-09 12:13:46 +01:00
whtv 2c8a8d08d4 Merge branch 'develop' of github.com:whtv/Superalgos into develop 2021-03-09 11:49:57 +01:00
whtv 8750180c3d Ignore dust in either asset 2021-03-09 11:47:20 +01:00
whtv 3396f46433 Ignore dust in any asset 2021-03-09 11:25:37 +01:00
Julian Molina 6dcbe3ff9c Merge pull request #653 from 9808us/develop
Tested Exchange Kraken
2021-03-09 10:03:54 +01:00
9808us f44bb4e52f Updated Tested Exchanges 2021-03-09 09:35:58 +01:00
9808us df6b142292 Tested Exchange Kraken
Workspace Tested Exchange updated
2021-03-09 09:31:15 +01:00
cozed-gh aa0f66a53a Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-09 07:25:23 +01:00
Luis Fernando Molina e5d8e87777 Merge pull request #648 from Luis-Fernando-Molina/develop
Contribution: Integration of Tensor Flow: Plotting Predictions
2021-03-08 18:56:40 +01:00
Luis Fernando Molina cd7eb7b5eb final adjustments of plotting, panles, etc. 2021-03-08 18:56:16 +01:00
DougJCook 3d619a1637 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-08 11:39:08 -05:00
Luis Fernando Molina 28afdac2f7 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-08 15:39:29 +01:00
Luis Fernando Molina 2c5ef4d8cc Features and Labels at Learning Engine and Learning Mine 2021-03-08 15:39:12 +01:00
Luis Fernando Molina 3ace88042f Merge pull request #651 from 9808us/develop
Contribution: This is my contribution to Superalgos
2021-03-08 15:38:19 +01:00
9808us 9758b4cb4f This is my contribution to Superalgos 2021-03-08 14:50:27 +01:00
DougJCook f01dc02c09 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-08 08:18:52 -05:00
Luis Fernando Molina 1aeb49f6a4 Some fixes 2021-03-08 13:29:36 +01:00
Julian Molina c32a70343e Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-08 13:16:29 +01:00
Julian Molina 227cdcd6df Merge pull request #650 from 9808us/develop
Contribution: This is my contribution to Superalgos
2021-03-08 13:16:12 +01:00
9808us 561de6ed1f This is my contribution to Superalgos 2021-03-08 13:07:13 +01:00
Julian Molina b224ed2f82 Merge pull request #649 from julian-molina/develop
Contribution: Cross-linking Crypto Exchange node page
2021-03-08 12:11:19 +01:00
Julian Molina f9fc0dad95 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-08 12:10:35 +01:00
Julian Molina e185fe8a9b Cross-linking Crypto Exchange node page 2021-03-08 12:10:19 +01:00
Luis Fernando Molina c18b7fc3c6 Integration of Tensor Flow: Plotting Predictions 2021-03-08 12:09:17 +01:00
Luis Fernando Molina ac951074bb Merge pull request #647 from Luis-Fernando-Molina/develop
Contribution: Predictions showing up at Learning Engine.
2021-03-08 11:38:59 +01:00
Luis Fernando Molina 2828e5872c Predictions showing up at Learning Engine. 2021-03-08 11:37:50 +01:00
Luis Fernando Molina 7e6ae5db61 Merge pull request #646 from Luis-Fernando-Molina/develop
Contribution: Machine Learning: Saving Model Fixed, crating necesary folders before the file.
2021-03-08 09:47:53 +01:00
Luis Fernando Molina f22a679046 Machine Learning: Saving Model Fixed, crating necesary folders before the file. 2021-03-08 09:46:37 +01:00
Luis Fernando Molina 77c52824fb Merge pull request #645 from cozed-gh/develop
Data-Mine 'Omega'
2021-03-08 07:14:47 +01:00
Luis Fernando Molina 76c827023b Merge pull request #642 from 9808us/develop
Tested Exchanges Workspace
2021-03-08 07:13:49 +01:00
cozed-gh 901b31e05f Add files via upload 2021-03-08 00:48:20 +01:00
cozed-gh 41b3b7f64a Data-Mine 'Omega' 2021-03-08 00:44:14 +01:00
cozed-gh 1ab4856a6c Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-08 00:40:15 +01:00
cozed-gh dd7b200b6e Merge https://github.com/cozed-gh/Superalgos into develop 2021-03-08 00:15:55 +01:00
DougJCook 1383401850 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-07 16:54:48 -05:00
Julian Molina bdc4610345 Merge pull request #644 from julian-molina/develop
Contribution: Binance Test Status
2021-03-07 19:58:51 +01:00
Julian Molina 8965f0589c Binance Test Status 2021-03-07 19:52:59 +01:00
Julian Molina 243fd308d2 Merge pull request #643 from julian-molina/develop
Contribution: Icons
2021-03-07 19:07:45 +01:00
Julian Molina 6997bf418d Icons 2021-03-07 19:06:49 +01:00
9808us 79bca213f8 Tested Exchange add Bitfinex Kucoin 2021-03-07 18:38:07 +01:00
9808us 637f4ac38c Tested Exchanges Workspace 2021-03-07 16:27:51 +01:00
Luis Fernando Molina 446b663913 Merge pull request #641 from suttridge/develop
Contribution: Added Luno exchange icon, and ZAR asset icon.
2021-03-07 11:09:28 +01:00
Steve Langridge 4de7eb6a54 Added Luno exchange icon, and ZAR asset icon. 2021-03-07 11:09:21 +02:00
Luis Fernando Molina 6f1457758e Merge pull request #640 from Luis-Fernando-Molina/develop
Contribution: Fixieng Docker Image PR
2021-03-07 09:19:21 +01:00
Luis Fernando Molina 82d2e76f7c Fixieng Docker Image PR 2021-03-07 09:18:45 +01:00
Luis Fernando Molina 5c8e19bcda Merge pull request #639 from Luis-Fernando-Molina/develop
Contribution: Fixieng Docker Image PR
2021-03-07 09:15:02 +01:00
Luis Fernando Molina 7a525861e0 Fixieng Docker Image PR 2021-03-07 09:12:09 +01:00
Luis Fernando Molina 5b44671a05 Merge pull request #636 from unfernandito/develop
feature github-action for docker build
2021-03-07 09:08:33 +01:00
Luis Fernando Molina 8b1b59650d Delete Masters-Lightning-Strike.json
I don't think you changed this file on purpose, it looks like it go auto-formatted
2021-03-07 09:01:11 +01:00
Luis Fernando Molina 7a82bbd082 Merge pull request #638 from Luis-Fernando-Molina/develop
Contribution: This is my contribution to Superalgos
2021-03-07 08:29:47 +01:00
Luis Fernando Molina de0e709634 This is my contribution to Superalgos 2021-03-07 08:28:35 +01:00
Luis Fernando e82ea3cf6d revert file 2021-03-07 00:15:11 -03:00
Luis Fernando 8ecd917e83 fix array 2021-03-07 00:11:33 -03:00
Luis Fernando 37b1e66ad6 workflow fix 2021-03-07 00:09:38 -03:00
Luis Fernando 87c4665a2f github action to develop 2021-03-07 00:08:52 -03:00
Luis Fernando 733d761967 added github actions 2021-03-07 00:08:00 -03:00
Luis Fernando 184b1f817a Merge branch 'master' into develop 2021-03-07 00:05:08 -03:00
Luis Fernando 7d4dc6fa87 Merge pull request #4 from Superalgos/develop
Develop
2021-03-07 00:01:30 -03:00
Luis Fernando ea01d0255f Merge pull request #3 from unfernandito/feature/github-action-docker
use repository from ENV
2021-03-06 23:49:38 -03:00
Luis Fernando c30873e6a1 update reamde 2021-03-06 23:49:19 -03:00
Luis Fernando 2de9b52c11 action only in master branch 2021-03-06 23:40:53 -03:00
Luis Fernando b2adf284a4 comment action 2021-03-06 23:31:50 -03:00
Luis Fernando 17191f7aa6 added docker.pkg.github.com 2021-03-06 23:27:05 -03:00
Luis Fernando b966b99619 fix name in repositoy 2021-03-06 23:22:23 -03:00
Luis Fernando d8ef45eb91 fix ident in yml 2021-03-06 23:19:54 -03:00
Luis Fernando 5115df023c added lowercase to repository name 2021-03-06 23:19:06 -03:00
Luis Fernando f8a816017a another rework over github action 2021-03-06 23:14:04 -03:00
Luis Fernando fb12c2d710 fix ident in yml 2021-03-06 23:07:54 -03:00
Luis Fernando dba3da5a64 rework over action 2021-03-06 23:06:27 -03:00
Luis Fernando c64acf3bb4 rework over action 2021-03-06 23:01:50 -03:00
Luis Fernando 36aabe4914 update actions to v2 2021-03-06 22:51:29 -03:00
Luis Fernando 7c314137d0 changes in reposity field 2021-03-06 22:47:31 -03:00
Luis Fernando 6c3416983a on every push new version 2021-03-06 22:44:49 -03:00
Luis Fernando 9f111b8359 use repository from ENV 2021-03-06 22:43:34 -03:00
Luis Fernando 07f35f1525 Merge pull request #2 from unfernandito/feature/docker
added Dockerfile and action
2021-03-06 22:40:07 -03:00
Luis Fernando 4d47610eed added Dockerfile and action 2021-03-06 22:33:49 -03:00
Luis Fernando 96f57d8555 Merge pull request #1 from Superalgos/master
SYnc
2021-03-06 22:06:39 -03:00
DougJCook 4babbf12e8 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-06 19:30:11 -05:00
Luis Fernando Molina 80b79164cc Merge pull request #632 from Luis-Fernando-Molina/develop
Contribution: ABSOLUTE_DUST implementation to better control when stage should close.
2021-03-06 19:20:47 +01:00
Luis Fernando Molina 91d7af66e3 ABSOLUTE_DUST implementation to better control when stage should close. 2021-03-06 19:19:35 +01:00
Luis Fernando Molina 0d5776dad5 Merge pull request #629 from 9808us/develop
Fix Triangles on Low TF in chart
2021-03-06 18:23:06 +01:00
Julian Molina f947de9538 Merge pull request #630 from julian-molina/develop
Contribution: README Comments on Docs and Telefgram Groups
2021-03-06 18:21:55 +01:00
Julian Molina 458b3e2324 README Comments on Docs and Telefgram Groups 2021-03-06 18:16:38 +01:00
9808us 890053021b Fix Triangles on Low TF in chart
Deleted Supertrenhd Workspace
Updated Hello World Workspace with Fix
2021-03-06 15:14:14 +01:00
Luis Fernando Molina 123cbcea89 Merge pull request #628 from Luis-Fernando-Molina/develop
Contribution: ROUNDING_ERROR_CORRECTION_FACTOR now configurable
2021-03-06 14:24:00 +01:00
Luis Fernando Molina 5966d92669 Revert "FIX triangles for Quoted/Base Asset in chart"
This reverts commit 7353db6f92.
2021-03-06 14:17:22 +01:00
Luis Fernando Molina 52b7e12879 roundingErrorCorrectionFactor 2021-03-06 14:14:18 +01:00
DougJCook 1a5ddd81a4 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-06 04:24:43 -05:00
Luis Fernando Molina 9ae10c343d Merge pull request #627 from Luis-Fernando-Molina/develop
Contribution: Capitalize Docker Folder
2021-03-06 08:39:50 +01:00
Luis Fernando Molina 32801004b9 Capitalize Docker Folder 2021-03-06 08:39:25 +01:00
Luis Fernando Molina 280d20ba61 Folerr renamed 2021-03-06 08:38:11 +01:00
Luis Fernando Molina 1fb06ac435 Merge pull request #626 from ssplatt/docker-subdir
move docker files to docker folder
2021-03-06 08:35:31 +01:00
ssplatt 23e2e69e5b move docker files to docker folder 2021-03-05 16:50:33 -05:00
Luis Fernando Molina c7e1a960f9 Merge pull request #624 from suttridge/develop
Contribution: Fixed mistake where maxTradesPerFetch was not being read from the exchange API settings.
2021-03-05 18:46:17 +01:00
Steve Langridge 02fee7ba8e Fixed mistake where maxTradesPerFetch was not being read from the exchange API settings. 2021-03-05 16:45:15 +02:00
Luis Fernando Molina fdacf0f091 Merge pull request #623 from ssplatt/add-docker
add dockerfile and compose config
2021-03-05 15:33:08 +01:00
Luis Fernando Molina 3c7c067e5e Merge pull request #622 from Luis-Fernando-Molina/develop
Contribution: docs page improved
2021-03-05 14:41:20 +01:00
Luis Fernando Molina 86bc47fc33 docs page improved 2021-03-05 14:40:40 +01:00
ssplatt 2b3cf77c41 add dockerfile and compose config 2021-03-05 08:39:46 -05:00
Luis Fernando Molina 039d545fd4 Merge pull request #621 from Luis-Fernando-Molina/develop
Contribution: Guide to Write your own Action Functions
2021-03-05 12:35:24 +01:00
Luis Fernando Molina e1e0c690dd Guide to Write your own Action Functions 2021-03-05 12:34:53 +01:00
DougJCook 23bf365a7b Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-05 06:28:04 -05:00
Luis Fernando Molina 56d24742a1 repaginated 2021-03-05 12:09:40 +01:00
Luis Fernando Molina a3b5249563 Merge pull request #617 from suttridge/develop
Contribution: Added support to Exchange-Raw-Data sensor bot for exchanges that can only use fetchTrades instead of fetchOHLCVs (for example Luno exchange)
2021-03-05 07:25:31 +01:00
Luis Fernando Molina 3dc6c229a0 Merge pull request #618 from 0xperez/develop
Translating the Welcome Tutorial - Page 38 to 49
2021-03-05 07:22:42 +01:00
Luis Fernando Molina dce53590e5 Merge pull request #620 from Luis-Fernando-Molina/develop
Contribution: New Icons for TensorFlow project added to App Schema
2021-03-05 07:21:35 +01:00
Luis Fernando Molina 0b15c42837 New Icons for TensorFlow project added to App Schema 2021-03-05 07:20:16 +01:00
0xperez d87a61a5f2 Translating the Welcome Tutorial - Page 38 to 49 2021-03-04 22:51:32 +01:00
Steve Langridge d072938546 Added support to Exchange-Raw-Data sensor bot for exchanges that can only use fetchTrades instead of fetchOHLCVs (for example Luno exchange) 2021-03-04 22:05:13 +02:00
Julian Molina d3ca6760da Merge pull request #615 from Basalt09/develop
Add files via upload
2021-03-04 16:38:53 +01:00
Julian Molina 4862a9dc6c Merge pull request #616 from julian-molina/develop
Contribution: This is my contribution to Superalgos
2021-03-04 16:38:23 +01:00
Julian Molina 3f49ac5f13 This is my contribution to Superalgos 2021-03-04 16:35:56 +01:00
Basalt09 efb9be7d8b Add files via upload 2021-03-04 22:41:32 +08:00
Luis Fernando Molina edd64705fe Merge pull request #610 from suttridge/develop
Contribution: Fixed bug when logging in getOHLCVs() and flat array was incorrectly being accessed as a JSON object.  Also a couple of spelling mistakes.
2021-03-04 12:10:52 +01:00
Steve Langridge ee7436c880 Historic OHLCVs now retrieved from point where it left off, instead of always from beginning of day. 2021-03-04 12:48:02 +02:00
Steve Langridge 897b91414f Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-04 12:45:17 +02:00
Luis Fernando Molina 26159d1848 Merge pull request #613 from 0xperez/develop
Translating the Welcome Tutorial - Page 26 to 37
2021-03-04 11:33:23 +01:00
Luis Fernando Molina d43e4167de Merge pull request #614 from Luis-Fernando-Molina/develop
Contribution: Token Concept Page
2021-03-04 11:32:35 +01:00
Luis Fernando Molina 10d9beb86a Token Concept Page 2021-03-04 11:31:18 +01:00
davide-perez 363b587f07 Translating the Welcome Tutorial - Page 26 to 37 2021-03-04 10:01:18 +01:00
Steve Langridge e3ac8d0b8f Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-04 10:16:01 +02:00
Luis Fernando Molina d8a8d33815 How to Automate Actions Part 1 2021-03-04 08:33:52 +01:00
Luis Fernando Molina 42c2beae66 Merge pull request #612 from 0xperez/develop
Translating the Welcome Tutorial - Page 15 to 25
2021-03-03 21:31:31 +01:00
davide-perez 9c24c5dc8b Translating the Welcome Tutorial - Page 15 to 25 2021-03-03 18:36:45 +01:00
Julian Molina d6bcc5b727 Merge pull request #611 from julian-molina/develop
Contribution: README Business notes
2021-03-03 16:47:51 +01:00
Julian Molina d9948a622c README Business notes 2021-03-03 16:45:37 +01:00
DougJCook f3f81f3a06 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-03 06:20:15 -05:00
Luis Fernando Molina 75d0e5ec2b Merge pull request #608 from 0xperez/develop
Contribution: Started translating tutorial (Italian)
2021-03-03 10:07:01 +01:00
Steve Langridge 41b2a246c5 Fixed bug when logging in getOHLCVs() and flat array was incorrectly being accessed as a JSON object. Also a couple of spelling mistakes. 2021-03-03 10:28:21 +02:00
davide-perez 3cc580a29c Translating the Welcome Tutorial (Italian) 2021-03-02 22:42:45 +01:00
davide-perez aceae06205 Started translating tutorial (Italian) 2021-03-02 21:21:40 +01:00
Luis Fernando Molina 951067043a Merge pull request #607 from 0xperez/develop
Contribution: This is my contribution to Superalgos
2021-03-02 14:09:08 +01:00
davide-perez 39151ca0a7 This is my contribution to Superalgos 2021-03-01 20:20:46 +01:00
Luis Fernando Molina 4a5ce31889 Merge pull request #605 from 9808us/develop
FIX triangles for Quoted/Base Asset in chart
2021-03-01 15:58:55 +01:00
Luis Fernando Molina 331d275bd9 Merge pull request #604 from Luis-Fernando-Molina/develop
Contribution: Guide to debug sensor bbot updated
2021-03-01 15:43:53 +01:00
9808us 7353db6f92 FIX triangles for Quoted/Base Asset in chart
Removed Supertrend Workspace (I will update it and submit again)
Updated Hello World Tutorial
2021-03-01 15:40:50 +01:00
Luis Fernando Molina c2ef3f8ca9 Guide to debug sensor bbot updated 2021-03-01 15:40:00 +01:00
DougJCook 79f43bc017 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-03-01 07:43:19 -05:00
Luis Fernando Molina cf5da45f97 Merge pull request #603 from Luis-Fernando-Molina/develop
Contribution: More on the guide to debug Sensor Bot
2021-03-01 12:59:01 +01:00
Luis Fernando Molina 801934e104 More on the guide to debug Sensor Bot 2021-03-01 12:58:36 +01:00
Luis Fernando Molina 5816bb3cef Merge pull request #602 from Luis-Fernando-Molina/develop
Contribution: Guide to help users debug Exchange Raw Data when their Favorite Exchange is not Working
2021-03-01 11:16:17 +01:00
Luis Fernando Molina 2e0483ae0d Guide to help users debug Exchange Raw Data when their Favorite Exchange is not Working 2021-03-01 11:15:01 +01:00
Luis Fernando Molina f0fe94ab92 Merge pull request #597 from Mhnramin/develop
Contribution: This is my contribution to Superalgos
2021-03-01 09:50:59 +01:00
Luis Fernando Molina e1d45b4752 Update welcome-to-superalgos-006-tutorial-step-remote-access.json 2021-03-01 09:48:50 +01:00
Luis Fernando Molina 2ad85783dd Update welcome-to-superalgos-005-tutorial-step-lets-go-for-a-ride.json 2021-03-01 09:48:07 +01:00
Luis Fernando Molina 6efc4a87c2 Update welcome-to-superalgos-004-tutorial-step-expand-that-node.json 2021-03-01 09:47:18 +01:00
Luis Fernando Molina 530dfd9deb Update welcome-to-superalgos-003-tutorial-step-thats-me-on-the-right.json 2021-03-01 09:46:10 +01:00
Luis Fernando Molina 7f83dcfd02 Update welcome-to-superalgos-002-tutorial-step-use-chrome-or-safari.json 2021-03-01 09:45:29 +01:00
Luis Fernando Molina a964758a36 Update welcome-to-superalgos-001-tutorial-welcome-to-superalgos.json 2021-03-01 09:43:33 +01:00
DougJCook d92cba5d5f Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-28 18:25:41 -05:00
Julian Molina 284988235f Merge pull request #600 from julian-molina/develop
Contribution: Debugging Your Indicator Touchups
2021-02-28 12:42:04 +01:00
Julian Molina 9fe4f89b54 Debugging Your Indicator Touchups 2021-02-28 12:40:52 +01:00
Julian Molina 868be459ee Merge pull request #599 from julian-molina/develop
Contribution: This is my contribution to Superalgos
2021-02-28 12:05:05 +01:00
Julian Molina 7ad3d7eac7 This is my contribution to Superalgos 2021-02-28 11:21:27 +01:00
Mhnramin 56884d0658 This is my contribution to Superalgos 2021-02-28 00:44:51 +08:00
Mhnramin 6968a1547f This is my contribution to Superalgos 2021-02-27 20:44:00 +08:00
Luis Fernando Molina 6feb21102a Merge pull request #596 from Luis-Fernando-Molina/develop
Contribution: This is my contribution to Superalgos
2021-02-26 17:38:49 +01:00
Luis Fernando Molina 4a43f5064e This is my contribution to Superalgos 2021-02-26 17:37:26 +01:00
Luis Fernando Molina 6d5c510832 Trading Farm Topic updated 2021-02-26 16:24:32 +01:00
Luis Fernando Molina 2c19351019 Merge pull request #595 from Luis-Fernando-Molina/develop
Contribution: Contributor added to the list
2021-02-26 12:46:49 +01:00
Luis Fernando Molina 34bf5be290 Contributor added to the list 2021-02-26 12:45:50 +01:00
Luis Fernando Molina d440451382 Merge pull request #594 from Luis-Fernando-Molina/develop
Contribution: Standarizing the new Topic
2021-02-26 12:29:33 +01:00
Luis Fernando Molina b5882a15f2 Standarizing the new Topic 2021-02-26 12:29:12 +01:00
Luis Fernando Molina 8ae0743138 Merge pull request #593 from 9808us/develop
Tutorial and Workspace Hello World
2021-02-26 12:16:35 +01:00
Luis Fernando Molina 934df54066 Merge pull request #592 from cozed-gh/develop
Contribution: Debugging your indicator
2021-02-26 12:12:43 +01:00
9808us 98072dc05e Tutorial and Workspace Hello World
Deleted old Workspace
2021-02-26 11:19:38 +01:00
cozed-gh 44b308ece5 Debugging your indicator 2021-02-26 11:15:44 +01:00
DougJCook 192e51fa4b Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-25 07:46:12 -05:00
Luis Fernando Molina c2c3f7d67f Merge pull request #591 from Luis-Fernando-Molina/develop
Contribution: Design Space Performance Improvement by removing unnecesary code
2021-02-25 11:48:24 +01:00
Luis Fernando Molina f703377989 Design Space Performance Improvement by removing unnecesary code 2021-02-25 11:47:08 +01:00
Luis Fernando Molina b4180723aa Merge pull request #590 from Luis-Fernando-Molina/develop
Contribution: Desig Space Performance Improvement by calculating node proximity only when needed.
2021-02-25 11:21:57 +01:00
Luis Fernando Molina d5ce013d23 Desig Space Performance Improvement by calculating node proximity only when needed. 2021-02-25 11:20:53 +01:00
Luis Fernando Molina 7d5071ba50 Merge pull request #589 from Luis-Fernando-Molina/develop
Contribution: Improvement: keyboard arrow keys can be used at any of the scales to replace mouse wheel
2021-02-25 09:34:15 +01:00
Luis Fernando Molina 463ac96bcb Improvement: keyboard arrow keys can be used at any of the scales to replace mouse wheel 2021-02-25 09:32:40 +01:00
Luis Fernando Molina 83c53eeff1 Merge pull request #588 from Luis-Fernando-Molina/develop
Contribution: Contributions Plotter implemented
2021-02-25 08:12:58 +01:00
Luis Fernando Molina 9a0f8db94c Update Masters.json 2021-02-25 08:10:37 +01:00
Luis Fernando Molina 6ec48a9273 Predictions File being written 2021-02-24 11:44:44 +01:00
Luis Fernando Molina 48361c8e89 Predictions Stored at Trading Engine 2021-02-23 18:36:39 +01:00
DougJCook 8036386160 This is my contribution to Superalgos 2021-02-23 07:22:50 -05:00
Julian Molina 5c467d3fb4 Merge pull request #586 from julian-molina/develop
Contribution: Docs Add Command syntax fix
2021-02-23 11:35:54 +01:00
Julian Molina f29ebcb567 Docs Add Command syntax fix 2021-02-23 11:35:32 +01:00
Luis Fernando Molina 3f48e3b5b0 Merge pull request #585 from Luis-Fernando-Molina/develop
Contribution: Model being trained, loaded and saved to disk.
2021-02-22 13:01:00 +01:00
Luis Fernando Molina 7d5a997272 Model being trained, loaded and saved to disk. 2021-02-22 12:58:40 +01:00
Luis Fernando Molina 7682f58e84 Merge pull request #584 from Luis-Fernando-Molina/develop
Contribution: Docs remembering last page when tab is closed
2021-02-22 10:24:14 +01:00
Luis Fernando Molina 9cd43d5ee5 Docs remembering last page when tab is closed 2021-02-22 10:22:55 +01:00
Luis Fernando Molina b8d6e7e7bc Merge pull request #583 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed: nodes that do not want to get deleted
2021-02-22 08:08:40 +01:00
Luis Fernando Molina 278669b0a9 Bug Fixed: nodes that do not want to get deleted 2021-02-22 08:07:36 +01:00
Luis Fernando Molina a0f20c87c8 Merge pull request #582 from Luis-Fernando-Molina/develop
Contribution: Tutorial Initial Values updated
2021-02-22 07:31:00 +01:00
Luis Fernando Molina ec62859cf6 Tutorial Initial Values updated 2021-02-22 07:29:59 +01:00
Luis Fernando Molina c5b8193c32 Merge pull request #580 from Luis-Fernando-Molina/develop
Contribution: Update to .gitignore
2021-02-21 14:20:10 +01:00
Luis Fernando Molina f5ed463284 Update .gitignore 2021-02-21 14:18:33 +01:00
Luis Fernando Molina bbcd00d09c Merge pull request #579 from Mhnramin/develop
Contribution: This is my contribution to Superalgos
2021-02-21 14:10:49 +01:00
Luis Fernando Molina 96e5b4ac09 Delete superalgos-project-review-002-superalgos-review-indonesia-translation.json
This looks like just a test.
2021-02-21 14:07:09 +01:00
Luis Fernando Molina b2be80fe02 Merge pull request #566 from Noeljarillo/develop
Contribution: This is my contribution to Superalgos
2021-02-21 14:04:22 +01:00
Luis Fernando Molina f063f420bd Delete superalgos-project-review-004-superalgos-review-your-review-title.json
just a test
2021-02-21 14:01:28 +01:00
Luis Fernando Molina 3114aeb310 Delete superalgos-project-review-003-superalgos-review-test-review.json
just a test
2021-02-21 14:00:54 +01:00
Luis Fernando Molina 28e0913e73 Delete superalgos-project-review-002-superalgos-review-empezando.json
Just a test
2021-02-21 14:00:35 +01:00
Luis Fernando Molina ffb104432a Delete Superalgos.bat
This seems to be a .bat for your personal use
2021-02-21 13:58:46 +01:00
Mhnramin 233e31c946 This is my contribution to Superalgos 2021-02-21 17:55:22 +08:00
Mhnramin 0ba3abe7b9 This is my contribution to Superalgos 2021-02-21 06:47:34 +08:00
Mhnramin 367c21a9dc This is my contribution to Superalgos 2021-02-21 06:38:56 +08:00
Mhnramin fface4e14b This is my contribution to Superalgos 2021-02-21 05:27:36 +08:00
Julian Molina 3faae2385b Merge pull request #578 from julian-molina/develop
Contribution: Tutorials
2021-02-20 19:49:52 +01:00
Julian Molina fc94d06469 Done 2021-02-20 19:49:00 +01:00
Julian Molina 62e8fe8d98 Tutorials 2021-02-20 18:55:40 +01:00
Mhnramin 6b47fc8502 My Superalgos Review 2021-02-21 01:30:40 +08:00
Julian Molina e99ebfcef1 Merge pull request #577 from julian-molina/develop
Contribution: WHB and BBTB Fixed Key and Params
2021-02-20 17:29:27 +01:00
Julian Molina 7d4b256817 WHB and BBTB Fixed Key and Params 2021-02-20 17:28:51 +01:00
Julian Molina 8854c92d0e Merge pull request #576 from julian-molina/develop
Contribution: Reusable Snippets
2021-02-20 14:49:41 +01:00
Julian Molina 3b4cf43f86 Reusable Snippets 2021-02-20 14:49:34 +01:00
Julian Molina ce79f87032 Merge pull request #575 from julian-molina/develop
Contribution: How to contribute fix
2021-02-20 14:22:04 +01:00
Julian Molina f003720b2f How to contribute fix 2021-02-20 14:21:59 +01:00
Julian Molina 8d2f6e11d0 Merge pull request #574 from julian-molina/develop
Contribution: Languages
2021-02-20 13:59:08 +01:00
Julian Molina 5dee017e21 Done 2021-02-20 13:58:20 +01:00
Julian Molina d2ef380d34 How to Contribute Translations 2021-02-20 13:56:09 +01:00
Julian Molina 6bf5689585 Languages 2021-02-20 12:49:10 +01:00
Luis Fernando Molina 920bc22b13 Multiple Features and Labels 2021-02-20 12:16:56 +01:00
Julian Molina 38a7ba0346 Merge pull request #573 from julian-molina/develop
Contribution: How to Contribute to the Docs
2021-02-20 12:11:04 +01:00
Julian Molina 43816b1e91 Done 2021-02-20 12:10:48 +01:00
Luis Fernando Molina fd58d75dd2 fit Dataset with params from UI 2021-02-20 10:10:57 +01:00
Julian Molina 173a0fda5d How to Contribute to the Docs 2021-02-20 09:58:08 +01:00
Luis Fernando Molina 6180f79c56 training working 2021-02-20 08:44:36 +01:00
Luis Fernando Molina 10e693a59f Bug fixed with features and labels arrray 2021-02-20 08:33:10 +01:00
Julian Molina a6b199390c Merge pull request #572 from julian-molina/develop
Contribution: Docs Commands
2021-02-19 21:48:37 +01:00
Julian Molina faf6952a66 Done 2021-02-19 21:48:20 +01:00
Julian Molina e34d9f3fe7 Add 2021-02-19 21:17:05 +01:00
Julian Molina 4b2ee3d9a4 Docs Commands 2021-02-19 20:57:51 +01:00
Julian Molina 03940207d7 Merge pull request #571 from julian-molina/develop
Contribution: Docs Basics revision
2021-02-19 19:55:05 +01:00
Julian Molina 32e9025783 Done 2021-02-19 19:45:55 +01:00
Julian Molina 5e446f48ac Mid pages 2021-02-19 18:54:48 +01:00
Julian Molina fd0b6f0e5c This is my contribution to Superalgos 2021-02-19 18:17:03 +01:00
Julian Molina d977aaf66f Repagination 2021-02-19 17:49:55 +01:00
Julian Molina 8781496ff5 Docs Basics revision 2021-02-19 17:06:23 +01:00
Luis Fernando Molina 0491ce6ad8 Merge pull request #570 from Luis-Fernando-Molina/develop
Contribution: Machine Learning Implementation up to Features and Labels + Chinese and Bahasa languages added
2021-02-19 14:21:58 +01:00
Luis Fernando Molina 691f0a5001 Machine Learning Implementation up to Features and Labels + Chinese and Bahasa languages added 2021-02-19 14:16:56 +01:00
Luis Fernando Molina 715cb1a69a Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-19 13:59:42 +01:00
Julian Molina 427e05382a Merge pull request #569 from julian-molina/develop
Contribution: Flags CN ID
2021-02-19 12:17:05 +01:00
Julian Molina 91044c9be0 Flags CN ID 2021-02-19 12:16:15 +01:00
Julian Molina d9e1dba9e0 Merge pull request #568 from julian-molina/develop
Contribution: How to Contribute Icons
2021-02-19 11:46:37 +01:00
Julian Molina e630ff35cb How to Contribute Icons 2021-02-19 11:45:11 +01:00
Luis Fernando Molina a4050f6c8d features and labels calculated 2021-02-19 08:37:28 +01:00
Luis Fernando Molina a98aec38e0 Data Labels implemented 2021-02-18 17:45:40 +01:00
Luis Fernando Molina a9fd8b033b Merge pull request #567 from 9808us/develop
4 arrow icons Green and Red added
2021-02-18 16:52:45 +01:00
9808us 4acf35130c 4 arrow icons Green and Red added 2021-02-18 14:23:44 +01:00
Noeljarillo 643b18e3c5 This is my contribution to Superalgos 2021-02-17 22:00:18 +01:00
Noeljarillo 93f6e58845 My Superalgos Review 2021-02-17 21:35:12 +01:00
Julian Molina 5ecd9763ef Merge pull request #565 from julian-molina/develop
Contribution: Contributing to Superalgos
2021-02-17 21:21:46 +01:00
Julian Molina b6a22500b6 Icons 2021-02-17 21:20:46 +01:00
Julian Molina 04f6072fda Contributing to Superalgos 2021-02-17 20:33:59 +01:00
Luis Fernando Molina d0fb099c33 Model Compiling for the first time 2021-02-17 16:18:28 +01:00
Luis Fernando Molina 6f817933f2 Merge pull request #564 from 9808us/develop
Added 2 complete workspace with a Trading system ready to use
2021-02-17 11:48:42 +01:00
9808us 405c63d6d4 Two complete workspace with minimum indicators. Hello World is based on SMA cross. Supertrend is based on Supertrend indicator 2021-02-17 11:19:36 +01:00
9808us b2c3afd908 Merge remote-tracking branch 'upstream/develop' into develop 2021-02-17 11:14:58 +01:00
Luis Fernando Molina 6aa2ebd8fe adding config to all layer types 2021-02-17 09:48:38 +01:00
Luis Fernando Molina 7db1c6886a Layer succesfully added to model for first time 2021-02-17 09:08:32 +01:00
Luis Fernando Molina 76a6134185 Dense Layer Implemented 2021-02-16 18:47:32 +01:00
Luis Fernando Molina e58bc4d916 Execution Environment Implemented 2021-02-16 14:53:16 +01:00
Luis Fernando Molina 88e07e40de Installed Tensor Flow for Node.js 2021-02-16 12:56:04 +01:00
Luis Fernando Molina 7bbd42ea46 TensorFlow library initialized 2021-02-16 12:37:49 +01:00
Luis Fernando Molina 0da74ad323 Merge pull request #563 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed, Task Server was not running
2021-02-14 15:06:57 +01:00
Luis Fernando Molina ff9aed7253 Bug Fixed, Task Server was not running 2021-02-14 15:06:05 +01:00
Luis Fernando Molina 4f2bfdebad Merge pull request #562 from Luis-Fernando-Molina/develop
Contribution: Activating the Docs Search Engine
2021-02-14 14:26:00 +01:00
Luis Fernando Molina e6fe6a25dc Activating the Docs Search Engine 2021-02-14 14:24:52 +01:00
Luis Fernando Molina 1e2696012c Merge pull request #561 from Luis-Fernando-Molina/develop
Contribution: TensorFlow project implementation (part 1)
2021-02-14 12:19:57 +01:00
Luis Fernando Molina d63e078339 quick fix 2021-02-14 12:10:03 +01:00
Luis Fernando Molina d7f7e20c96 Tensor Flow Project Implementation (Part I) 2021-02-14 12:00:03 +01:00
Luis Fernando Molina a056cfe3fd Features 2021-02-14 11:51:28 +01:00
Luis Fernando Molina bc4fd1b45e Dense Layer Arguments Implemented 2021-02-13 20:36:39 +01:00
Luis Fernando Molina e12bf14b57 Input Shape 2021-02-13 13:48:32 +01:00
Luis Fernando Molina ff908749d3 all layer types implemented 2021-02-13 13:24:30 +01:00
Luis Fernando Molina 798c04ae0c Up to 10 items per Node Menu 2021-02-13 11:52:30 +01:00
Luis Fernando Molina a6b29e221c Up to Functional and Sequential Models 2021-02-13 08:39:08 +01:00
Luis Fernando Molina ffcb64815f Types of Learning 2021-02-13 07:26:10 +01:00
Luis Fernando Molina dc121a2941 Environment Flags Implemented 2021-02-11 18:04:52 +01:00
Luis Fernando Molina 17c9c076c0 Backends Nodes implemented 2021-02-11 16:58:45 +01:00
Luis Fernando Molina 09e4d26ceb Starting TensorFlow integration 2021-02-11 15:25:48 +01:00
Julian Molina 436447e871 Merge pull request #560 from julian-molina/master
Contribution: Hot Fix Lightning Strike Trading System
2021-02-11 11:56:27 +01:00
Julian Molina 7beb7b4b4a Hot Fix Lightning Strike Trading System 2021-02-11 11:55:35 +01:00
Julian Molina 35ff70cd04 Merge branch 'master' of https://github.com/Superalgos/Superalgos 2021-02-11 11:31:11 +01:00
Luis Fernando Molina ad61c92758 Merge pull request #559 from Luis-Fernando-Molina/develop
Contribution: gitignore updated
2021-02-11 08:05:22 +01:00
Luis Fernando Molina 350f673fcd gitignore updated 2021-02-11 08:04:41 +01:00
Luis Fernando Molina 6b818b5e7b Merge branch 'master' into develop 2021-02-11 08:01:44 +01:00
Luis Fernando Molina 1679b2854e Merge pull request #557 from mane/master
Delete .DS_Store
2021-02-11 07:55:46 +01:00
Eddy 0fdc01c8b7 Delete .DS_Store
This is a hidden file created by MacOS which shouldn't be committed into git.
2021-02-10 22:12:13 +01:00
Luis Fernando Molina 2074a68040 Merge branch 'master' into develop 2021-02-10 20:05:15 +01:00
Luis Fernando Molina 22f0df4dcc Merge pull request #556 from CaptainJeff/patch-1
Update README.md
2021-02-10 20:03:52 +01:00
CaptainJeff 83086d811c Update README.md
Fixed typo
2021-02-10 13:54:27 -05:00
Julian Molina a276a88dbe Merge pull request #555 from julian-molina/develop
Contribution: Docs language selection
2021-02-10 17:14:49 +01:00
Julian Molina 5827a311c1 Remove language label 2021-02-10 17:13:54 +01:00
Julian Molina 987f0f8f94 Docs language selection 2021-02-10 17:10:56 +01:00
Luis Fernando Molina fa7c1d84d3 Merge pull request #554 from Luis-Fernando-Molina/develop
Contribution: Language flags
2021-02-10 14:51:03 +01:00
Luis Fernando Molina ba8f88d057 Language flags 2021-02-10 14:49:22 +01:00
Julian Molina b54eea813a Merge pull request #551 from julian-molina/develop
Contribution: Footer buttons and language
2021-02-10 13:29:36 +01:00
Julian Molina fc0b884a03 Language in title 2021-02-10 13:26:43 +01:00
Luis Fernando Molina f1d254a38f Merge pull request #553 from Luis-Fernando-Molina/develop
Contribution: Bug Fix with exchange name instead of exchange codeName being used at Cloud File
2021-02-10 13:02:27 +01:00
Luis Fernando Molina b8c7069da2 Bug Fix with exchange name instead of exchange codeName being used at Cloud File 2021-02-10 13:01:29 +01:00
Luis Fernando Molina fa700ffb46 Merge pull request #552 from Luis-Fernando-Molina/develop
Contribution: Readme updated with migration instructions for Beta 9
2021-02-10 12:05:16 +01:00
Luis Fernando Molina cb55e883af Readme updated with migration instructions for Beta 9 2021-02-10 12:02:54 +01:00
Julian Molina 3ce1cbf568 Footer buttons and language 2021-02-10 11:49:35 +01:00
Luis Fernando Molina bf352a70f7 Merge pull request #549 from Luis-Fernando-Molina/develop
Contribution: Machine Learning Implementation with Icons
2021-02-09 21:04:14 +01:00
Luis Fernando Molina 1fbc981d97 Machine Learning Implementation with Icons 2021-02-09 21:03:23 +01:00
Julian Molina f51190bcc5 Merge pull request #548 from julian-molina/develop
Contribution: Learning icons
2021-02-09 20:50:54 +01:00
Julian Molina cdad9bfd42 Learning icons 2021-02-09 20:48:43 +01:00
Luis Fernando Molina ca512712d2 Merge pull request #547 from Luis-Fernando-Molina/develop
Contribution: Machinge Learning Bot implementation (icons missing)
2021-02-09 15:18:58 +01:00
Luis Fernando Molina acd6d2fd77 Machinge Learning Bot implementation (icons missing) 2021-02-09 15:17:35 +01:00
Luis Fernando Molina efcf92c964 Update troubleshooting-001-how-to-troubleshoot-an-issue.json 2021-02-09 14:36:45 +01:00
Luis Fernando Molina 90da52abe7 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-09 14:33:16 +01:00
Julian Molina 18f0bd2b44 Merge pull request #546 from julian-molina/develop
Contribution: Troubleshooting Guide
2021-02-09 14:15:51 +01:00
Julian Molina ffc6ee8c9d Troubleshooting Guide 2021-02-09 14:15:10 +01:00
Luis Fernando Molina 42b8225b5e Trading Algorithm Implementation 2021-02-09 13:17:00 +01:00
Luis Fernando Molina 16a1426414 Hot Fix : Bug with Binance US and Lighting Strike 2021-02-09 11:54:28 +01:00
Julian Molina af81aff87e Merge pull request #545 from julian-molina/develop
Contribution: Lightning Strike Binance US Fix
2021-02-09 11:21:19 +01:00
Julian Molina e45f5c072a Lightning Strike Binance US Fix 2021-02-09 11:19:09 +01:00
Luis Fernando Molina dc1024d1e6 Merge pull request #544 from Luis-Fernando-Molina/develop
Contribution: Learning Bot Layers checked.
2021-02-09 10:44:14 +01:00
Luis Fernando Molina f364321917 Values showing up at the Learning Engine 2021-02-09 10:41:54 +01:00
Luis Fernando Molina 7d4f7d2254 Learning Bot Running! 2021-02-09 08:52:24 +01:00
Luis Fernando Molina 5d634d70b0 Refactoring Bug Fixed 2021-02-09 08:37:49 +01:00
Luis Fernando Molina 2d0c95b170 Merge pull request #543 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed, search engine never started.
2021-02-08 20:31:13 +01:00
Luis Fernando Molina d21292600e Bug Fixed, search engine never started. 2021-02-08 20:30:47 +01:00
Luis Fernando Molina d1a703d72b Learning Mine Simplified 2021-02-08 19:44:07 +01:00
Luis Fernando Molina d70422593d Fixing Implementation Bugs 2021-02-08 19:00:16 +01:00
Luis Fernando Molina 5ceb1a8265 Merge branch 'master' into develop 2021-02-08 17:52:08 +01:00
Luis Fernando Molina f8035d7df4 Merge pull request #542 from 64bittuning/master
Readme update for Raspberry Pi users
2021-02-08 17:47:53 +01:00
64bittuning 9196257ba1 Update README.md 2021-02-08 10:43:46 -05:00
64bittuning 38e3798003 Update README.md 2021-02-08 10:13:37 -05:00
64bittuning 8e7cace491 Update README.md 2021-02-08 09:37:41 -05:00
Luis Fernando Molina 4969926b11 Merge pull request #541 from Luis-Fernando-Molina/develop
Contribution: Learning Engine minimun structure
2021-02-08 15:00:17 +01:00
Luis Fernando Molina f64044c5b8 Learning Engine minimun structure 2021-02-08 14:58:56 +01:00
Luis Fernando Molina 9e436bcbd6 Merge pull request #540 from Luis-Fernando-Molina/develop
Contribution: readme changess
2021-02-08 13:43:33 +01:00
Luis Fernando Molina 9dd30174d0 readme changess 2021-02-08 13:42:57 +01:00
Luis Fernando Molina 654ca36ef7 Merge pull request #539 from Luis-Fernando-Molina/develop
Contribution: readme changess
2021-02-08 13:40:57 +01:00
Luis Fernando Molina 8e40828ffd readme changess 2021-02-08 13:40:32 +01:00
Luis Fernando Molina 1578df6ce3 Merge pull request #538 from Luis-Fernando-Molina/develop
Contribution: Episode Children Refactoring
2021-02-08 13:36:04 +01:00
Luis Fernando Molina 6194ec92dd enabling search engine 2021-02-08 13:35:50 +01:00
Luis Fernando Molina f14ff40fbf Massive Refactoring... Distance To Event -> Distance To Trading Event 2021-02-08 12:07:48 +01:00
Luis Fernando Molina 65c72adf81 Massive Refactoring... Episode Statistics -> Trading Episode Statistics 2021-02-08 11:37:38 +01:00
Luis Fernando Molina a829aa94c2 Massive Refactoring Episode Counters -> Trading Episode Conuters 2021-02-08 10:41:27 +01:00
Luis Fernando Molina 2ae755ac28 Merge pull request #537 from Luis-Fernando-Molina/develop
Contribution: This is my contribution to Superalgos
2021-02-08 09:53:14 +01:00
Luis Fernando Molina 1a083ecc53 This is my contribution to Superalgos 2021-02-08 09:52:41 +01:00
Julian Molina 2d2eb1859e Merge pull request #536 from julian-molina/develop
Contribution: Trading System Design Tutorials final
2021-02-07 20:43:48 +01:00
Julian Molina 7849a17789 Trading System Design Tutorials final 2021-02-07 20:42:59 +01:00
Luis Fernando Molina 03aaa89462 Merge pull request #535 from Luis-Fernando-Molina/develop
Massive Refactorings
2021-02-07 18:59:03 +01:00
Luis Fernando Molina 1bedd0955a Update Masters.json 2021-02-07 18:58:30 +01:00
Luis Fernando Molina e2b94d520a image name corrected 2021-02-07 18:56:46 +01:00
Luis Fernando Molina b76ed95b64 Re Refactored Workspace with Tutorials 2021-02-07 18:48:17 +01:00
Luis Fernando Molina 6048eb8aaa Merge remote-tracking branch 'upstream/develop' into develop 2021-02-07 18:41:56 +01:00
Luis Fernando Molina a1d5a34bba Backups 2021-02-07 18:41:40 +01:00
Luis Fernando Molina 2ae512f3e8 Merge pull request #534 from julian-molina/develop
Contribution: TSD tutorial 4
2021-02-07 17:48:00 +01:00
Julian Molina ebd59d5831 TSD tutorial 4 2021-02-07 17:46:26 +01:00
Luis Fernando Molina c75fc91211 Massive Refactoring of Episode for Trading Episode done 2021-02-07 17:39:36 +01:00
Luis Fernando Molina 92f6f4f303 Refactoring Last for Trading Last 2021-02-07 16:52:53 +01:00
Luis Fernando Molina b9ff1ecd47 Massive Refactoring of Current for Trading Current 2021-02-07 16:38:38 +01:00
Luis Fernando Molina 575546ceea Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-07 16:04:02 +01:00
Julian Molina a20e7df6fa Merge pull request #533 from julian-molina/develop
Contribution: TSD tutorials and Welcome fix
2021-02-07 14:01:03 +01:00
Julian Molina 012abfa784 TSD tutorials and Welcome fix 2021-02-07 14:00:17 +01:00
Luis Fernando Molina 500726ed1d Update StatusReport.js 2021-02-07 12:56:38 +01:00
Luis Fernando Molina 4d38e06633 Learning Session Running 2021-02-07 12:48:50 +01:00
Luis Fernando Molina 6f96be5934 Learning Plugins Implemented 2021-02-07 11:25:12 +01:00
Luis Fernando Molina 6cd1d9d47f Learning Time Machines Implemented 2021-02-07 10:15:42 +01:00
Luis Fernando Molina e8a3cdceea Learning Tasks with their sessions being created 2021-02-07 09:22:50 +01:00
Julian Molina 01a8e85271 Welcome tutorial - strategy change to level 4 2021-02-06 18:49:49 +01:00
Julian Molina 50fde03087 Error messages fixes 2021-02-06 18:48:27 +01:00
Luis Fernando Molina fb775c5bfd Merge pull request #532 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed: When filters dont include Candles as Data Dependencies
2021-02-06 10:08:29 +01:00
Luis Fernando Molina 3cba3daad8 Bug Fixed: When filters dont include Candles as Data Dependencies 2021-02-06 10:07:09 +01:00
Luis Fernando Molina e7c16ae6e8 Merge pull request #531 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed with getPercentage at Bollinger Bands
2021-02-06 09:36:28 +01:00
Luis Fernando Molina 0d4a46dd44 Bug Fixed with getPercentage at Bollinger Bands 2021-02-06 09:34:48 +01:00
Luis Fernando Molina 731b28a6fa Merge pull request #530 from Luis-Fernando-Molina/develop
Contribution: Possible Bug Fix, tutorial loaded while Indexing Docs Seach Engine, without content.
2021-02-06 09:13:11 +01:00
Luis Fernando Molina ce6ca0b1ac Possible Bug Fix, tutorial loaded while Indexing Docs Seach Engine, without content. 2021-02-06 09:12:20 +01:00
Luis Fernando Molina 1acd66d6cd Update SearchEngine.js 2021-02-05 19:21:54 +01:00
Luis Fernando Molina d13667e414 Merge pull request #529 from Luis-Fernando-Molina/develop
Contribution: Enabling Search Engine
2021-02-05 19:15:23 +01:00
Luis Fernando Molina 7a6b10fc32 Enabling Search Engine 2021-02-05 19:15:04 +01:00
Luis Fernando Molina 5428718042 Merge pull request #528 from Luis-Fernando-Molina/develop
Contribution: Moving Towards Enabling a Learning Bot
2021-02-05 19:13:25 +01:00
Luis Fernando Molina 2b7ad6e3e3 Moving Towards Enabling a Learning Bot 2021-02-05 19:12:14 +01:00
Luis Fernando Molina 7ab832313d Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-05 17:54:47 +01:00
Julian Molina 93d1e1d3c8 Merge pull request #527 from julian-molina/develop
Contribution: Welcome tutorial fix, fourth level
2021-02-05 17:48:26 +01:00
Julian Molina acbd7b113f Welcome tutorial fix, fourth level 2021-02-05 17:47:18 +01:00
Luis Fernando Molina 5cdc8a1e46 Update README.md 2021-02-05 14:48:55 +01:00
Luis Fernando Molina ee72bfb807 Update README.md 2021-02-05 14:39:01 +01:00
Luis Fernando Molina ce488f074f Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-05 14:38:29 +01:00
Julian Molina 6a861682ce Merge pull request #526 from julian-molina/develop
Contribution: Readme after docs site takedown
2021-02-05 14:33:54 +01:00
Julian Molina aa5bf3b6c6 Readme after docs site takedown 2021-02-05 14:33:37 +01:00
Julian Molina 043fba0aa9 Merge pull request #525 from julian-molina/develop
Contribution: Readme after docs site takedown
2021-02-05 14:28:49 +01:00
Julian Molina 5c5ef68677 Readme after docs site takedown 2021-02-05 14:28:08 +01:00
Luis Fernando Molina 10698a49a7 Output Management Functions Implemented plus bug fixes 2021-02-05 12:02:22 +01:00
Luis Fernando Molina 12702289b0 Final Generalization 2021-02-04 17:17:32 +01:00
Luis Fernando Molina 578c31226a Finish generaliztion 2021-02-04 17:10:52 +01:00
Luis Fernando Molina 0444f1fb12 Removing Trading / Generalizing 2021-02-04 16:52:23 +01:00
Luis Fernando Molina 7c5090a032 Readme clarification 2021-02-04 16:44:47 +01:00
Luis Fernando Molina 76e97e38e1 Process Files Functions Implemented 2021-02-04 16:39:07 +01:00
Luis Fernando Molina 124e71d40c Bug Fixed, working again 2021-02-04 16:02:34 +01:00
Luis Fernando Molina 6521befc27 Data Dependency Functions Implementation 2021-02-04 14:48:28 +01:00
Luis Fernando Molina bc9ece59d3 Moving function to utilities 2021-02-04 13:52:31 +01:00
Luis Fernando Molina 089281344e Trading Process converted into a Stateless object 2021-02-04 13:42:23 +01:00
Luis Fernando Molina 4a8cb84f8c Simplifying step 1 2021-02-04 13:33:46 +01:00
Luis Fernando Molina e88df65f68 Merge pull request #524 from Luis-Fernando-Molina/develop
Contribution: Radme Title changed
2021-02-03 17:18:55 +01:00
Luis Fernando Molina c236b3887b Radme Title changed 2021-02-03 17:11:21 +01:00
Luis Fernando Molina ad7b2bbb87 Merge pull request #523 from Luis-Fernando-Molina/develop
Contribution: Beta 9 Fully Implemented
2021-02-03 13:09:07 +01:00
Luis Fernando Molina 44947c76bc Deppscan corrections 2021-02-03 13:08:16 +01:00
Luis Fernando Molina 86f67df3be Beta 9 Fully Implemented 2021-02-03 13:03:16 +01:00
Luis Fernando Molina 74b2ef40f8 Documentation ready 2021-02-03 12:48:12 +01:00
Luis Fernando Molina bc0ccd019c Final Bug Fixes 2021-02-03 11:40:05 +01:00
Luis Fernando Molina 3f78190575 bug fixed 2021-02-03 10:55:48 +01:00
Luis Fernando Molina d763639cb6 All code implemented for supporting new data sructures 2021-02-03 09:47:26 +01:00
Luis Fernando Molina 57ecc91039 Update README.md 2021-02-02 19:02:34 +01:00
Luis Fernando Molina 85211ab486 Bug Fixed, almost all debuged 2021-02-02 18:44:15 +01:00
Luis Fernando Molina 2789487ae2 Bug Fixes at Trading Process 2021-02-02 18:08:09 +01:00
Luis Fernando Molina d524e237a4 Dataset.js fully debugged 2021-02-02 17:32:27 +01:00
Luis Fernando Molina 5fbb451d33 UI implementation debugged 2021-02-02 15:32:26 +01:00
Luis Fernando Molina 463f8e0cda Using the Exchange codeName instead of the Exchange name as folder name and in keys 2021-02-02 15:08:52 +01:00
Luis Fernando Molina 604b1fbb0d Bug fixed on filters at the UI 2021-02-02 14:50:31 +01:00
Luis Fernando Molina 0341fe8ecc Bug fixed seting up filders at the UI 2021-02-02 14:39:12 +01:00
Luis Fernando Molina 2eb96dc048 Implementation finished, chart, market and exchange data structures available to conditions and formulas. 2021-02-02 13:25:42 +01:00
Luis Fernando Molina b18fc0335a Upto loading the right files implemented 2021-02-02 11:22:45 +01:00
Luis Fernando Molina 74e80cb43c Data Dependencies and Dataset implementation done 2021-02-02 11:19:15 +01:00
Luis Fernando Molina f630ecf212 Function to find the networkNode for a Dataset reimplemented 2021-02-02 09:50:36 +01:00
Luis Fernando Molina ea092fa6e5 Dependency Filer at the UI expanded to include the market and exchange data structures 2021-02-01 16:06:56 +01:00
Luis Fernando Molina 4432244041 Curated Node Array Refactoring 2021-02-01 15:17:23 +01:00
9808us c3db652d3d Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-02-01 15:03:38 +01:00
Luis Fernando Molina 56ca80ab92 Removing ; 2021-02-01 13:53:41 +01:00
Luis Fernando Molina f42a46dc48 Improving Code Comments 2021-02-01 13:50:46 +01:00
Luis Fernando Molina ab9cc4afdf Support at the Dependency Filert for market and exchange data structures 2021-02-01 11:32:56 +01:00
Luis Fernando Molina b526ee8d2f Dependency Filter Upgraded 2021-02-01 10:57:46 +01:00
Luis Fernando Molina 240d549fc7 Dependency Fileter Refactoring 2021-02-01 09:41:15 +01:00
Luis Fernando Molina bc5fa505d8 Merge pull request #522 from Luis-Fernando-Molina/develop
Contribution: Technical Debt Note at Client
2021-02-01 09:25:16 +01:00
Luis Fernando Molina d5f936a4b9 Technical Debt Note at Client 2021-02-01 09:23:59 +01:00
Luis Fernando Molina c736bdee86 Merge pull request #521 from Superalgos/develop
Beta 8 SP 4 Hotfix 1
2021-01-31 18:11:31 +01:00
Luis Fernando Molina 6a8e58f461 Merge pull request #520 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed: Images plotting on Design Space while they are supposed live at the Charting Space
2021-01-31 18:03:46 +01:00
Luis Fernando Molina 465cecb729 Bug Fixed: Texts also appearing over the Design Space instead of the Charting Space 2021-01-31 18:01:57 +01:00
Luis Fernando Molina a5634aa38e Bug Fixed: Images plotting on Design Space while they are supposed live at the Charting Space 2021-01-31 17:50:51 +01:00
Luis Fernando Molina c200b94b1a Merge pull request #519 from Superalgos/develop
Beta 8 SP 4
2021-01-31 12:45:09 +01:00
Luis Fernando Molina 31bf60fae2 Merge pull request #517 from Luis-Fernando-Molina/develop
Contribution: Improvement at Info Page
2021-01-31 12:38:24 +01:00
Julian Molina 5a8663c434 Merge pull request #518 from julian-molina/develop
Contribution: README Incentives
2021-01-31 12:37:58 +01:00
Julian Molina 466d1de1b8 README Incentives 2021-01-31 12:37:34 +01:00
Luis Fernando Molina 7fb25a639f Improvement at Info Page 2021-01-31 12:36:59 +01:00
Luis Fernando Molina 5b7d7d2689 Merge pull request #516 from Luis-Fernando-Molina/develop
Contribution: Improvement on Errors, Warnings and Infor Plotting over the charts, to be time-frame independent.
2021-01-31 11:51:35 +01:00
Luis Fernando Molina 9d22f4c0f8 Improvement on Errors, Warnings and Infor Plotting over the charts, to be time-frame independent. 2021-01-31 11:50:45 +01:00
Julian Molina 8344845884 Merge pull request #515 from julian-molina/develop
Contribution: README GIF Capture
2021-01-31 10:41:18 +01:00
Julian Molina 336613008b README GIF Capture 2021-01-31 10:40:58 +01:00
Julian Molina baca5e8e17 Merge pull request #514 from julian-molina/develop
Contribution: Index page credits
2021-01-31 09:40:53 +01:00
Julian Molina 0b4457b5ad Index page credits 2021-01-31 09:40:32 +01:00
Julian Molina a410020275 Revert "Masters trading mine plus index page"
This reverts commit c15b24260b.
2021-01-31 09:38:08 +01:00
Julian Molina c15b24260b Masters trading mine plus index page 2021-01-30 23:00:07 +01:00
Julian Molina 7b13217786 Merge branch 'master' of https://github.com/Superalgos/Superalgos 2021-01-30 10:18:44 +01:00
Luis Fernando Molina 3bdd1ea81d Merge pull request #512 from Superalgos/develop
Beta 8 SP 3
2021-01-30 09:38:12 +01:00
Luis Fernando Molina 57d1303de7 Merge pull request #511 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed: Highlights Displaced
2021-01-30 08:09:03 +01:00
Luis Fernando Molina 48f1e09f8a Bug Fixed: Highlights Displaced 2021-01-30 08:08:07 +01:00
Julian Molina cb54e70f3a Merge pull request #510 from julian-molina/develop
Contribution: Error fixes
2021-01-29 22:18:53 +01:00
Julian Molina 4fb9f36a38 Error fixes 2021-01-29 22:18:12 +01:00
Julian Molina 9b678ba765 Merge pull request #509 from julian-molina/develop
Contribution: Warning fixes
2021-01-29 22:07:45 +01:00
Julian Molina 06b1f7d004 Warning fixes 2021-01-29 22:07:18 +01:00
Julian Molina 8543a326cd Merge pull request #503 from julian-molina/develop
Contribution: TS LF Trading Bot Errors
2021-01-29 21:59:42 +01:00
Julian Molina 45457a3daa Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-01-29 21:54:49 +01:00
Julian Molina 9d6611b0ab Common language 2021-01-29 21:54:15 +01:00
Julian Molina 42c2bb59ca Execution Error 2021-01-29 21:46:18 +01:00
Julian Molina 9cb503a9a6 Get Order Unexpected Error 2021-01-29 21:31:14 +01:00
Julian Molina 25ae17e174 Annoucement Condition Evaluation Error 2021-01-29 20:54:56 +01:00
Luis Fernando Molina c9dd5c0e62 Merge pull request #508 from Luis-Fernando-Molina/develop
Contribution: SHARE button at the footer of the Docs to share a link to an specific page
2021-01-29 20:41:15 +01:00
Luis Fernando Molina 7282f6995d SHARE button at the footer of the Docs to share a link to an specific page 2021-01-29 20:40:20 +01:00
Luis Fernando Molina df5401d7c1 Merge pull request #507 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed, Youtube videos at the Docs not working.
2021-01-29 20:10:05 +01:00
Luis Fernando Molina bc25929722 Bug Fixed, Youtube videos at the Docs not working. 2021-01-29 20:09:09 +01:00
Julian Molina 39cd118770 Percentage Of Algorithm Size Property Not A Number 2021-01-29 19:33:42 +01:00
Julian Molina e7ac5964ba Rate Value Zero Or Negative 2021-01-29 19:04:33 +01:00
Julian Molina 12555cc5e3 Rate Value Undefined 2021-01-29 19:00:24 +01:00
Julian Molina 63e5091250 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-01-29 18:46:36 +01:00
Luis Fernando Molina 1f1111b6b4 Merge pull request #506 from Luis-Fernando-Molina/develop
Contribution: Switch between Trading Sessions
2021-01-29 18:32:33 +01:00
Luis Fernando Molina c1cddc6883 Switch between Trading Sessions 2021-01-29 18:30:12 +01:00
Julian Molina 0f43cdb98d This is my contribution to Superalgos 2021-01-29 18:25:51 +01:00
Julian Molina 8b41e13c76 Target Size Value Zero 2021-01-29 18:06:31 +01:00
Julian Molina 2cb0c1dc15 Missing node errors 2021-01-29 17:52:05 +01:00
Julian Molina 3412512e7d Initial Targets Node Missing 2021-01-29 17:42:59 +01:00
Luis Fernando Molina eb03a3ca36 Merge pull request #505 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed Candle Panel Not Showing it's content.
2021-01-29 16:34:45 +01:00
Luis Fernando Molina faff4a1b3a Bug Fixed Candle Panel Not Showing it's content. 2021-01-29 16:30:13 +01:00
Julian Molina ffb5feb152 Formula Value Not A Number 2021-01-29 14:26:55 +01:00
Luis Fernando Molina e060f84a6a Merge pull request #504 from Luis-Fernando-Molina/develop
Contribution: docs.reindex command improved, more responsive UI while reindexing
2021-01-29 14:26:55 +01:00
Luis Fernando Molina ef251bee80 docs.reindex command improved, more responsive UI while reindexing 2021-01-29 14:25:43 +01:00
Julian Molina 858a1b4ba4 TS LF Trading Bot Errors 2021-01-29 14:15:15 +01:00
Julian Molina b9f23bf9cc Merge pull request #500 from julian-molina/develop
Contribution: TS LF Trading Bot Warnings
2021-01-29 14:00:33 +01:00
Julian Molina f7eb5917cf Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-01-29 13:59:49 +01:00
Julian Molina c1690755f0 Replacing context paragraph 2021-01-29 13:59:32 +01:00
Luis Fernando Molina 4c533892db Merge pull request #502 from Luis-Fernando-Molina/develop
Contribution: Search Results Page Improved
2021-01-29 13:50:51 +01:00
Luis Fernando Molina 4369fd78ed Search Results Page Improved 2021-01-29 13:49:59 +01:00
Julian Molina 563432e6a2 Simulating - Actual Rate Too Low 2021-01-29 13:49:52 +01:00
Julian Molina 3cb0bc55df Simulating - Actual Rate Too Hight 2021-01-29 13:45:36 +01:00
Julian Molina c0578ffa8a Simulating - Actual Rate Based On Formula 2021-01-29 13:36:38 +01:00
Julian Molina 8984f1f95e Simulating - Slippage Added 2021-01-29 13:30:38 +01:00
Julian Molina e66ff1dbcf Simulating - Slippage Substracted 2021-01-29 13:27:05 +01:00
Julian Molina cf73442eca This is my contribution to Superalgos 2021-01-29 13:21:38 +01:00
Julian Molina 4083f7803e Calculating - Size Placed Recalculated 2021-01-29 13:19:47 +01:00
Julian Molina 2efd8e112e Calculating - Actual Size Recalculated 2021-01-29 13:17:24 +01:00
Julian Molina 00c5c6ab24 Order Status Not Sync With Exchange 2021-01-29 13:11:48 +01:00
Luis Fernando Molina dbe51ccead Merge pull request #501 from Luis-Fernando-Molina/develop
Contribution: Info Messages Handling improved and integrated with the Docs
2021-01-29 13:03:03 +01:00
Luis Fernando Molina 355a77029e Info Messages Handling improved and integrated with the Docs 2021-01-29 13:01:28 +01:00
Julian Molina 68523a2acd Possible Negative Balance 2021-01-29 12:56:56 +01:00
Julian Molina d35efd085e Order Size Shrinked 2021-01-29 11:45:10 +01:00
Julian Molina b74f495f45 Order Could Not Be Opened 2021-01-29 11:31:41 +01:00
Julian Molina 95e1d3b632 Order Size Value Zero Or Negative 2021-01-29 11:25:04 +01:00
Julian Molina 300628097b TS LF Trading Bot Warnings 2021-01-29 11:12:49 +01:00
Julian Molina 4aaf832c7a Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-01-29 10:40:01 +01:00
Luis Fernando Molina 6b8044ea24 Merge pull request #498 from Luis-Fernando-Molina/develop
Contribution: Warning Handling Improved at the LF Trading Engine
2021-01-29 10:11:39 +01:00
Luis Fernando Molina 86ba3bcfbe Warnings plotted, completely integrated with the docs 2021-01-29 10:10:31 +01:00
Julian Molina 91d0c98f6d Merge pull request #499 from julian-molina/develop
Contribution: Time Frame Node
2021-01-28 22:03:08 +01:00
Julian Molina 3d178945f2 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-01-28 22:01:13 +01:00
Julian Molina 5a9ec3e4e1 Time Frame Node 2021-01-28 22:00:57 +01:00
Luis Fernando Molina fce5866da8 Trading Data Mine upgraded to plot muktple warnings 2021-01-28 19:44:45 +01:00
Luis Fernando Molina b124192512 Rest of the Warnings Documented 2021-01-28 13:12:46 +01:00
Luis Fernando Molina 6d7a0c7bd2 Orders Calculations and Orders Simulations Warning UX Improved 2021-01-28 10:29:00 +01:00
Luis Fernando Molina 2e9f809f37 Warning Handling Improved at the LF Trading Engine 2021-01-28 10:04:40 +01:00
Luis Fernando Molina 9ef6a2bf1a Merge pull request #495 from Luis-Fernando-Molina/develop
Contribution: Improvement on Error Plottting UX
2021-01-28 07:45:06 +01:00
Luis Fernando Molina ba5c151f53 Finals details on Error Handling 2021-01-28 07:43:56 +01:00
Luis Fernando Molina 185d11224d Error Handling Improved, Different Errors Plotted with mouseover opens the Docs 2021-01-27 18:11:12 +01:00
Julian Molina 37f9459532 Merge pull request #497 from julian-molina/develop
Contribution: Renaming indicators
2021-01-27 17:50:08 +01:00
Julian Molina e39db797bb Renaming indicators 2021-01-27 17:49:21 +01:00
Julian Molina 09118ac74e Merge pull request #496 from julian-molina/develop
Contribution: Renaming Data Mine Indicators
2021-01-27 17:27:49 +01:00
Julian Molina 78bc19d5f1 Renaming Data Mine Indicators 2021-01-27 17:27:02 +01:00
Luis Fernando Molina 1e1501b222 Improvement on Error Plottting UX 2021-01-27 14:35:25 +01:00
Luis Fernando Molina 92949a25a3 Merge pull request #494 from Luis-Fernando-Molina/develop
Contribution: Update Radme / Permisionless Paragraph FIX3
2021-01-27 10:38:24 +01:00
Luis Fernando Molina 0be94d202c Update Radme / Permisionless Paragraph FIX3 2021-01-27 10:38:04 +01:00
Luis Fernando Molina efb19d53bf Merge pull request #493 from Luis-Fernando-Molina/develop
Contribution: Update Radme / Permisionless Paragraph FIX2
2021-01-27 10:36:20 +01:00
Luis Fernando Molina 4f528bb2d2 Update Radme / Permisionless Paragraph FIX2 2021-01-27 10:35:38 +01:00
Luis Fernando Molina 19e01ee90f Merge pull request #492 from Luis-Fernando-Molina/develop
Contribution: Update Radme / Permisionless Paragraph FIX
2021-01-27 10:32:22 +01:00
Luis Fernando Molina 3ff3c58d75 Update Radme / Permisionless Paragraph FIX 2021-01-27 10:32:05 +01:00
Luis Fernando Molina 713e2afaec Merge pull request #491 from Luis-Fernando-Molina/develop
Contribution: Update Radme / Permisionless Paragraph
2021-01-27 10:30:44 +01:00
Luis Fernando Molina 97d4dea4f1 Update Radme / Permisionless Paragraph 2021-01-27 10:30:18 +01:00
Luis Fernando Molina 7b04b5892c Merge pull request #490 from Luis-Fernando-Molina/develop
Contribution: Error Handling Improved at Exchage API modeule / Integration with the Docs
2021-01-27 10:08:20 +01:00
Luis Fernando Molina 67dc0a6b4e Error Handling Improved at Exchage API modeule / Integration with the Docs 2021-01-27 10:07:18 +01:00
Luis Fernando Molina 913e20d24a Merge pull request #489 from Luis-Fernando-Molina/develop
Contribution: Announcements Error Handling Improved
2021-01-27 08:55:29 +01:00
Luis Fernando Molina b23f7015e4 Announcements Error Handling Improved 2021-01-27 08:54:27 +01:00
Luis Fernando Molina 9f6e9e92a1 Merge pull request #488 from Luis-Fernando-Molina/develop
Contribution: Welcome Message Changed
2021-01-26 20:26:07 +01:00
Luis Fernando Molina 75289cfe0d Welcome Message Changed 2021-01-26 20:25:03 +01:00
Julian Molina 3bb9f76243 Merge pull request #487 from julian-molina/develop
Contribution: Community Data Mines Book
2021-01-26 19:50:54 +01:00
Julian Molina 8bada40b8f Community Data Mines Book 2021-01-26 19:49:07 +01:00
Luis Fernando Molina 5e11864541 Merge pull request #486 from Luis-Fernando-Molina/develop
Contribution: Fine Tunning Memory Management
2021-01-26 18:59:31 +01:00
Luis Fernando Molina 29174307b1 Fine Tunning Memory Management 2021-01-26 18:58:45 +01:00
Luis Fernando Molina a3410e34bc Merge pull request #484 from 9808us/develop
Proposal to improve RAM issues
2021-01-26 18:35:26 +01:00
Luis Fernando Molina 4de97a542e Merge pull request #485 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed with Improvement in error handler of Snapshot module
2021-01-26 18:33:01 +01:00
Luis Fernando Molina 6f88b6a60d Bug Fixed with Improvement in error handler of Snapshot module 2021-01-26 18:31:50 +01:00
9808us beabb0e467 Proposal to improve RAM issues 2021-01-26 18:27:53 +01:00
Luis Fernando Molina ca8b36fb9e Merge pull request #483 from Luis-Fernando-Molina/develop
Contribution: Error Handling Improved in a few modules of the LF Trading Bot
2021-01-26 18:24:20 +01:00
Luis Fernando Molina ded8100260 Error Handling Improved in a few modules of the LF Trading Bot 2021-01-26 18:23:25 +01:00
Julian Molina c419c02ea9 Merge pull request #482 from julian-molina/develop
Contribution: Trading systems
2021-01-26 17:59:13 +01:00
Julian Molina e68d21ae0b BB Top Bounce (BBTB) 2021-01-26 17:57:34 +01:00
Julian Molina a803f46dfe Trading systems 2021-01-26 17:09:26 +01:00
Luis Fernando Molina 5aeeba16e0 Merge pull request #481 from Luis-Fernando-Molina/develop
Contribution: Config of Crypto Exchange / Added limit parameter to enable usage in Coinbase Pro.
2021-01-26 16:52:47 +01:00
Luis Fernando Molina 8ac8834f9b Config of Crypto Exchange / Added limit parameter to enable usage in Coinbase Pro. 2021-01-26 16:51:51 +01:00
Julian Molina 6825736f39 Merge pull request #480 from julian-molina/develop
Contribution: Zeuz Data Mine
2021-01-26 16:33:55 +01:00
Julian Molina 0e5b48ab1a Super Trend 2021-01-26 16:32:13 +01:00
Julian Molina 8bbbdedc06 Wave Trend 2021-01-26 16:26:04 +01:00
Julian Molina 58131517fe Ichimoku Cloud 2021-01-26 16:20:20 +01:00
Julian Molina c4cd4cd401 Donchian Channel on the Charts 2021-01-26 16:10:54 +01:00
Julian Molina 7c8aa41d29 Zeuz Data Mine 2021-01-26 16:04:44 +01:00
Julian Molina 15c4ef4091 Merge pull request #479 from julian-molina/develop
Contribution: Sparta and Buddha Data Mines
2021-01-26 14:45:05 +01:00
Julian Molina 058842604f Candle Patterns 2021-01-26 14:43:53 +01:00
Julian Molina 280e2f36c2 Moving Average Convergence Divergence (MACD) 2021-01-26 13:05:05 +01:00
Julian Molina 55ad9d5663 Relative Strenght Index (RSI) 2021-01-26 12:59:33 +01:00
Julian Molina a29368b8e3 Exponential Moving Average (EMA) 2021-01-26 12:55:34 +01:00
Julian Molina a2975b1f05 Sparta and Buddha Data Mines 2021-01-26 12:48:59 +01:00
Julian Molina fde0b55670 Merge pull request #474 from julian-molina/develop
Contribution: Alpha Data Mine
2021-01-26 11:00:31 +01:00
Julian Molina d9ce77c4da Stochastic 2021-01-26 10:45:58 +01:00
Luis Fernando Molina 94d7fdc09f Merge pull request #476 from Superalgos/develop
Beta 8 SP2 Hot Fix
2021-01-26 10:41:19 +01:00
Julian Molina 9847afe392 Rate of Change (ROC) 2021-01-26 10:41:17 +01:00
Luis Fernando Molina 14081eb442 Merge pull request #475 from Luis-Fernando-Molina/develop
Contribution: Trading Order Error Handling Improved / Integrated with the Docs
2021-01-26 10:40:28 +01:00
Luis Fernando Molina 371f2cf2cd Trading Order Error Handling Improved / Integrated with the Docs 2021-01-26 10:39:32 +01:00
Julian Molina 3fc969104f Alpha Data Mine 2021-01-26 10:34:04 +01:00
Julian Molina 12e2d0dbf3 Merge pull request #473 from julian-molina/develop
Contribution: How To Pages
2021-01-26 10:03:31 +01:00
Julian Molina 079070e5a5 How to Test New Exchanges 2021-01-26 10:01:15 +01:00
Julian Molina a0f5df2600 How to Set Up a New Exchange 2021-01-26 09:58:14 +01:00
Julian Molina 0182015e0c How to Install a New Market 2021-01-26 09:54:22 +01:00
Julian Molina a2e8ad0175 How to Uninstall an Existing Market 2021-01-26 09:48:51 +01:00
Julian Molina 72baa9a239 How To Pages 2021-01-26 09:43:59 +01:00
Julian Molina 0fe342e9d3 Merge pull request #472 from julian-molina/develop
Contribution: Troubleshooting and typo fix on UIObjectConstructor
2021-01-26 09:32:40 +01:00
Julian Molina f0682ad9a2 Troubleshooting and typo fix on UIObjectConstructor 2021-01-26 09:31:31 +01:00
Luis Fernando Molina ff5727dfa8 Merge pull request #471 from Superalgos/develop
Beta 8 SP2
2021-01-26 08:00:05 +01:00
Julian Molina cdba2315f8 Merge pull request #470 from julian-molina/develop
Contribution: Contribute tutorial split from Welcome
2021-01-25 20:59:25 +01:00
Julian Molina 821c96564d Contribute tutorial split from Welcome 2021-01-25 20:58:02 +01:00
Luis Fernando Molina 5e1e47b2dc Merge pull request #469 from Luis-Fernando-Molina/develop
Contribution: Trading Position Error Handling improved, connected to the Docs.
2021-01-25 18:59:25 +01:00
Luis Fernando Molina 80f063e92a Trading Position Error Handling improved, connected to the Docs. 2021-01-25 18:58:48 +01:00
Luis Fernando Molina 7dc9d3f884 Merge pull request #468 from Luis-Fernando-Molina/develop
Contribution: Improvement of Error handling when reaching the Max or Min balance configured / Integration with the Docs
2021-01-25 17:02:32 +01:00
Luis Fernando Molina e588048edf Improvement of Error handling when reaching the Max or Min balance configured / Integration with the Docs 2021-01-25 17:01:39 +01:00
Luis Fernando Molina 788085d15b Merge pull request #467 from Luis-Fernando-Molina/develop
Contribution: Icon names refactoring
2021-01-25 16:09:45 +01:00
Luis Fernando Molina 3c758ff2cd Icon names refactoring 2021-01-25 16:08:52 +01:00
Luis Fernando Molina 13fe2e7cfb Merge pull request #466 from Luis-Fernando-Molina/develop
Contribution: Reference to Phase Node Missing Error handlling Improved / Integrated with Docs
2021-01-25 14:46:29 +01:00
Luis Fernando Molina 4cdf5db8fe Reference to Phase Node Missing Error handlling Improved / Integrated with Docs 2021-01-25 14:38:02 +01:00
Luis Fernando Molina ba77d3b297 Merge pull request #465 from Luis-Fernando-Molina/develop
Contribution: Formula evaluation to not numeric valuie, handling improved and intergrate to Docs
2021-01-25 14:13:30 +01:00
Luis Fernando Molina 9885fe2c5a Formula evaluation to not numeric valuie, handling improved and intergrate to Docs 2021-01-25 14:12:39 +01:00
Luis Fernando Molina cb693be776 Merge pull request #464 from Luis-Fernando-Molina/develop
Contribution: Improving on LF Trading Formula evaluation error handling and UX / integration with the Docs
2021-01-25 13:30:31 +01:00
Luis Fernando Molina 4839ee9da1 Improving on LF Trading Formula evaluation error handling and UX / integration with the Docs 2021-01-25 13:29:30 +01:00
Luis Fernando Molina ca5e1c9d30 Merge pull request #461 from Luis-Fernando-Molina/develop
Contribution: Master Datamine cleaned of unused proeprty at Bollinger Band Indicator (repo)
2021-01-25 11:53:34 +01:00
Luis Fernando Molina 461cdbc267 Improvement at the error handling of conditions / integration with Docs 2021-01-25 11:52:41 +01:00
Luis Fernando Molina 33ca84bb4c Master Datamine cleaned of unused proeprty at Bollinger Band Indicator (repo) 2021-01-25 08:39:21 +01:00
Julian Molina 2ba63da81c Merge pull request #460 from julian-molina/develop
Contribution: Troubleshooting
2021-01-24 20:19:23 +01:00
Julian Molina a61930cd95 Investigating Issues - Check the Integrity of Your Data 2021-01-24 20:17:31 +01:00
Julian Molina eba2d94359 Investigating Issues - Check for Errors at the Browser 2021-01-24 20:13:17 +01:00
Julian Molina 1a5525d14c Investigating Issues - On-Screen Errors and Warnings 2021-01-24 20:11:14 +01:00
Julian Molina 52c08f2efa Investigating Issues - I Think I Broke Something... How Do I Start Over 2021-01-24 20:04:07 +01:00
Julian Molina fe05a88dcb Perception Issues - Indicator Data Seems Wrong 2021-01-24 20:01:50 +01:00
Julian Molina 254f79e651 Perception Issues - Market Data or Indicators Seem to be Outdated 2021-01-24 19:48:01 +01:00
Julian Molina c3e25cba44 Perception Issues - There Are No Candles on The Charts 2021-01-24 19:46:45 +01:00
Julian Molina 0f7ad28f01 Perception Issues - My System Gets Slow 2021-01-24 19:42:43 +01:00
Julian Molina 6b63cb5663 Initial Setup - Superalgos Failed to Connect Via Websockets 2021-01-24 19:34:07 +01:00
Julian Molina f7453d92fc Initial Setup - Node is not Recognized as an Internal or External Command 2021-01-24 19:11:52 +01:00
Julian Molina ce1d06cd69 How to Upgrade Your Existing Installation 2021-01-24 19:06:52 +01:00
Julian Molina cb059822ab How to Report an Issue 2021-01-24 19:01:37 +01:00
Julian Molina 7b9d600a8b Troubleshooting 2021-01-24 18:37:22 +01:00
Julian Molina e5729e9ac0 Merge pull request #459 from julian-molina/develop
Contribution: User Manual
2021-01-24 16:56:36 +01:00
Julian Molina df135d57ff User Manual 2021-01-24 16:55:25 +01:00
Julian Molina cb11b3db7d Merge pull request #458 from julian-molina/develop
Contribution: Productivity tools
2021-01-24 13:23:55 +01:00
Julian Molina babaef4b55 Screen capture 2021-01-24 13:21:52 +01:00
Julian Molina fc2f4a0117 Shares 2021-01-24 13:18:04 +01:00
Julian Molina afed59d336 Clones 2021-01-24 13:15:41 +01:00
Julian Molina d3af74aec6 Productivity tools 2021-01-24 13:09:15 +01:00
Julian Molina ca2f80a5b2 Merge pull request #457 from julian-molina/develop
Contribution: Integrations (telegram announcements and webhooks)
2021-01-24 12:28:59 +01:00
Julian Molina 8be353b246 Integrations (telegram announcements and webhooks) 2021-01-24 12:21:24 +01:00
Julian Molina dd9fe3aed2 Merge pull request #455 from julian-molina/develop
Contribution: Data Mines
2021-01-24 11:23:31 +01:00
Julian Molina 6356587af0 Data Mines Done 2021-01-24 11:22:44 +01:00
Julian Molina 51b79063c4 Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-01-24 11:17:19 +01:00
Julian Molina 2d9e33eb44 WIP 2021-01-23 21:31:19 +01:00
Julian Molina 5352fd90a8 WIP 2021-01-23 21:09:06 +01:00
Julian Molina 29c9cc2cf8 WIP 2021-01-23 20:47:19 +01:00
Julian Molina 44d2ea2ff1 WIP 2021-01-23 19:34:06 +01:00
Luis Fernando Molina 7e729a5c93 Merge pull request #456 from Luis-Fernando-Molina/develop
Contribution: Imrpovement on Error Reporting from the TS to the Docs
2021-01-23 15:53:07 +01:00
Luis Fernando Molina 4e50f9a699 Imrpovement on Error Reporting from the TS to the Docs 2021-01-23 15:51:48 +01:00
Julian Molina 97ec6be8f8 WIP 2021-01-23 14:52:30 +01:00
Julian Molina e5729262e4 Data Mines 2021-01-23 14:20:34 +01:00
Luis Fernando Molina 0d9c664fef Merge pull request #454 from Luis-Fernando-Molina/develop
Contribution: Refactoring of Icon Names and unused Configs Removed
2021-01-23 11:36:28 +01:00
Luis Fernando Molina b566e3de72 Merge pull request #453 from julian-molina/develop
Contribution: Refactoring of menu icons
2021-01-23 11:36:21 +01:00
Luis Fernando Molina 1873332a3b Removing config feature from nodes that don;t need them. 2021-01-23 11:34:58 +01:00
Luis Fernando Molina a336f3a385 Refactoring in order to fit icon names with page names 2021-01-23 11:26:40 +01:00
Julian Molina f24d469455 Refactoring of menu icons 2021-01-23 11:21:39 +01:00
Luis Fernando Molina e37e86e571 Merge pull request #452 from Luis-Fernando-Molina/develop
Contribution: Session Errors Handling / UX improved
2021-01-23 10:29:11 +01:00
Luis Fernando Molina 70774efa55 Session Errors Handling / UX improved 2021-01-23 10:28:24 +01:00
Julian Molina 81558e8d74 Merge pull request #450 from julian-molina/develop
Contribution: Crypto Ecosystem
2021-01-22 21:13:59 +01:00
Julian Molina 5d2909e087 Crypto Ecosystem 2021-01-22 21:13:33 +01:00
Julian Molina 9000dfb7c2 Merge pull request #449 from julian-molina/develop
Contribution: Trading Farms
2021-01-22 20:44:25 +01:00
Julian Molina 653b320256 Trading Farms 2021-01-22 20:43:33 +01:00
Julian Molina c2b956eaee Merge pull request #448 from julian-molina/develop
Contribution: Trading Engine Topic Done
2021-01-22 19:07:42 +01:00
Julian Molina 51ae97b46e Trading Engine Topic Done 2021-01-22 19:05:57 +01:00
Julian Molina 35c5e67c2f Trading Engine Topic WIP 2021-01-22 18:23:37 +01:00
Luis Fernando Molina 1fa826329a Merge pull request #447 from Luis-Fernando-Molina/develop
Contribution: Trading Session Errors Topic
2021-01-22 18:19:45 +01:00
Luis Fernando Molina ba453abc6e More Session Errors Pages Implemented 2021-01-22 18:16:22 +01:00
Julian Molina bee243d909 Trading Engine Topic WIP 2021-01-22 17:31:11 +01:00
Luis Fernando Molina 9ca921e8c3 Trading Session Errors Topic 2021-01-22 15:04:36 +01:00
Luis Fernando Molina 0ece30c358 Merge pull request #446 from Superalgos/develop
Bug Fixes that impact MAC users doing the Tutorial
2021-01-22 12:52:21 +01:00
Luis Fernando Molina 9d947f0ca1 Merge pull request #445 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed, Workspace tab not showing anything
2021-01-22 12:29:38 +01:00
Luis Fernando Molina d4a811a449 Bug Fixed, Workspace tab not showing anything 2021-01-22 12:28:47 +01:00
Julian Molina 3b736015cf Merge pull request #444 from julian-molina/develop
Welcome tutorial browser zoom on Mac step fix
2021-01-22 12:22:53 +01:00
Julian Molina d11f08ea33 This is my contribution to Superalgos 2021-01-22 12:21:02 +01:00
Luis Fernando Molina 6646632fe6 Merge pull request #443 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed on repositioning at chart in charting space while zoomed if
2021-01-22 11:54:23 +01:00
Luis Fernando Molina 31bb098ff6 Bug Fixed on repositioning at chart in charting space while zoomed if 2021-01-22 11:53:57 +01:00
Luis Fernando Molina 85d9285eba Merge pull request #442 from Luis-Fernando-Molina/develop
Contribution: Process Error Handling Improved / UX Improved
2021-01-22 10:51:00 +01:00
Luis Fernando Molina 9f42d6bc11 Function not used 2021-01-22 10:50:10 +01:00
Luis Fernando Molina e63771b9ee Process Error Handling Improved / UX Improved 2021-01-22 10:46:47 +01:00
Luis Fernando Molina 97e2246601 Merge pull request #441 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed on MAC OS not repositionig charts correctly during tutorial.
2021-01-22 09:42:43 +01:00
Luis Fernando Molina 4433ade3df Bug Fixed on MAC OS not repositionig charts correctly during tutorial. 2021-01-22 09:41:54 +01:00
Luis Fernando Molina ff54bfa142 Merge pull request #439 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed, context menu not dissapearing when docs were closed
2021-01-22 07:37:37 +01:00
Luis Fernando Molina e72669ce61 Bug Fixed, context menu not dissapearing when docs were closed 2021-01-22 07:36:38 +01:00
Julian Molina ccc2c10606 Merge pull request #436 from julian-molina/develop
Contribution: Trading Engine Topic WIP
2021-01-21 21:30:49 +01:00
Julian Molina 8f3b6aa7e9 Trading Engine Topic WIP 2021-01-21 21:30:08 +01:00
Luis Fernando Molina 9e30cb8fcc Merge pull request #438 from Luis-Fernando-Molina/develop
Contribution: Improvements in Error Handlng / Error UX
2021-01-21 20:58:37 +01:00
Luis Fernando Molina 56e961ad01 Improvements in Error Handlng / Error UX 2021-01-21 20:57:45 +01:00
Julian Molina ae70226347 Trading Engine Topic WIP 2021-01-21 20:54:55 +01:00
Luis Fernando Molina 3a11c1e2b3 Improvemnts in error handling 2021-01-21 20:50:43 +01:00
Julian Molina 04d39bb111 Trading Engine Topic WIP 2021-01-21 20:17:43 +01:00
Luis Fernando Molina 6bb37ab10d Merge pull request #437 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed Issue #318. Using # in the name of the trading system didn't show backtest results.
2021-01-21 20:15:47 +01:00
Luis Fernando Molina 3ea470bf60 Bug Fixed Issue #318. Using # in the name of the trading system didn't show backtest results. 2021-01-21 20:14:57 +01:00
Julian Molina 6d78112bc2 Trading Engine Topic WIP 2021-01-21 19:35:12 +01:00
Julian Molina 2508438889 Merge pull request #435 from julian-molina/develop
Contribution: User Manual Book
2021-01-21 18:20:46 +01:00
Julian Molina 22c91844da Merge branch 'develop' of https://github.com/julian-molina/Superalgos into develop 2021-01-21 14:59:44 +01:00
Julian Molina e0186e2ef7 User Manual Book WIP 2021-01-21 14:58:29 +01:00
Julian Molina 3536d2659a User Manual Book wip 2021-01-21 14:38:09 +01:00
Luis Fernando Molina e91610dc34 Merge pull request #433 from Superalgos/develop
Hot Fix to fix bug with Exchange Raw data during Live Trading
2021-01-21 14:15:13 +01:00
Luis Fernando Molina e80592530f Merge pull request #432 from Luis-Fernando-Molina/develop
Contribution: This is my contribution to Superalgos
2021-01-21 13:53:36 +01:00
Luis Fernando Molina 29614b9646 Bug Fixed with # in commit message 2021-01-21 13:52:44 +01:00
Luis Fernando Molina f8c6b40c7c Bug Fix 2021-01-21 13:38:27 +01:00
Luis Fernando Molina 1e1fa783ca Bug Fix 2021-01-21 13:33:07 +01:00
Julian Molina 590e9c4564 Merge pull request #2 from Superalgos/develop
Develop
2021-01-21 13:22:28 +01:00
Julian Molina 8de041b0ae Merge pull request #1 from Superalgos/master
Merge pull request #424 from julian-molina/master
2021-01-21 13:21:02 +01:00
Luis Fernando Molina e19ba0793c Merge pull request #429 from Luis-Fernando-Molina/develop
Contribution: Update Message updated
2021-01-20 17:40:46 +01:00
Luis Fernando Molina 9522b7b848 Update Message updated 2021-01-20 17:40:00 +01:00
Luis Fernando Molina 3904290bec Merge pull request #428 from Luis-Fernando-Molina/develop
Contribution: Bug Fixed: removing Github user requirement for app.update command.
2021-01-20 17:19:27 +01:00
Luis Fernando Molina 27734e85f4 Bug Fixed: removing Github user requirement for app.update command. 2021-01-20 17:18:38 +01:00
Luis Fernando Molina 2e3c667459 Merge pull request #427 from Luis-Fernando-Molina/develop
Contribution: Swithching Branches Error Handling Improved, with Docs and Placeholders
2021-01-20 16:38:58 +01:00
Luis Fernando Molina 5ae4d0aa5b Swithching Branches Error Handling Improved, with Docs and Placeholders 2021-01-20 16:38:06 +01:00
Luis Fernando Molina 24e140badb Merge pull request #426 from Luis-Fernando-Molina/develop
Contribution: Contribute Command Error Handling Improved with Docs and Placeholders
2021-01-20 16:10:25 +01:00
Luis Fernando Molina b6056f0d2e This is my contribution to Superalgos 2021-01-20 16:08:24 +01:00
Luis Fernando Molina ab595e6e31 This is my contribution to Superalgos 2021-01-20 16:05:29 +01:00
Luis Fernando Molina d910a83a30 This is my contribution to Superalgos 2021-01-20 16:03:10 +01:00
Luis Fernando Molina d9ab664a57 This is my contribution to Superalgos 2021-01-20 16:01:36 +01:00
Luis Fernando Molina 5d932ec16d This is my contribution to Superalgos 2021-01-20 15:53:17 +01:00
Luis Fernando Molina 3ca384e94f This is my contribution to Superalgos 2021-01-20 15:52:10 +01:00
Luis Fernando Molina aed93f3d21 This is my contribution to Superalgos 2021-01-20 15:51:26 +01:00
Luis Fernando Molina f013baaaec This is my contribution to Superalgos 2021-01-20 15:48:59 +01:00
Luis Fernando Molina 086db81331 This is my contribution to Superalgos 2021-01-20 15:47:36 +01:00
Luis Fernando Molina 7b1d627270 This is my contribution to Superalgos 2021-01-20 15:44:13 +01:00
Luis Fernando Molina 3a3bc2ae1b This is my contribution to Superalgos 2021-01-20 15:42:11 +01:00
Luis Fernando Molina eb1ad95d66 This is my contribution to Superalgos 2021-01-20 15:37:30 +01:00
Luis Fernando Molina 5a511d4d5d Merge pull request #425 from Luis-Fernando-Molina/develop
Contribution: Error Handling Improved for command app.update
2021-01-20 15:19:48 +01:00
Luis Fernando Molina ac891d603d Error Handling Improved for command app.update 2021-01-20 15:17:42 +01:00
Luis Fernando Molina c61db756d6 test update conflict 2021-01-20 15:09:52 +01:00
Luis Fernando Molina 22b5f95b6b test 2021-01-20 15:08:14 +01:00
Luis Fernando Molina eecb143ca9 Merge pull request #420 from 9808us/develop
Initial Italian Translation
2021-01-20 13:05:31 +01:00
Luis Fernando Molina 9c5f17ac51 Merge pull request #424 from julian-molina/master
Contribution: Getting started workspace fix
2021-01-20 12:54:26 +01:00
Julian Molina 709ac5ff24 Getting started workspace fix 2021-01-20 12:04:07 +01:00
9808us f6269c2ecd Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop 2021-01-16 15:16:16 +01:00
9808us b3563d24fe This is my contribution to Superalgos 2021-01-16 15:12:43 +01:00
7689 changed files with 149237 additions and 1513492 deletions

No files matched your search

+15
View File
@@ -0,0 +1,15 @@
Data-Storage
Log-Files
My-Workspaces
debug.log
*.db
.git*
.vscode
README.md
LICENSE
CONTRIBUITING.md
CODE_OF_CONDUCT.md
./**/.vscode
Dockerfile
+41
View File
@@ -0,0 +1,41 @@
name: Publish Docker image
on:
push:
branches: [master, develop]
jobs:
publish:
name: Publish Image
runs-on: ubuntu-latest
steps:
- id: repository
uses: ASzc/change-string-case-action@v1
with:
string: "${{ github.repository }}"
- uses: actions/checkout@v2
- name: Preparation
id: prep
run: |
REGISTRY="ghcr.io"
IMAGE="${REGISTRY}/${{ steps.repository.outputs.lowercase }}"
TAGS="${IMAGE}:${{ github.sha }}"
if [[ $GITHUB_REF == refs/heads/master ]]; then
TAGS="${TAGS},${IMAGE}:latest"
fi
if [[ $GITHUB_REF == refs/heads/develop ]]; then
TAGS="${TAGS},${IMAGE}:develop"
fi
echo ::set-output name=tags::${TAGS}
- name: Login in to registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Push to registry
uses: docker/build-push-action@v2
with:
push: true
file: ./Docker/Dockerfile
tags: ${{ steps.prep.outputs.tags }}
+8 -1
View File
@@ -2,5 +2,12 @@ Data-Storage
Log-Files
My-Workspaces
debug.log
.DS_Store
*.db
Projects/Superalgos/Icons/Thumbs.db
*.bat
!launch-windows.bat
!create-shortcut-windows.bat
!uninstall-shortcut-windows.bat
*.exe
node_modules
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

+1 -1
View File
@@ -1,7 +1,7 @@
.credits {
width: 100%;
margin: auto;
margin-bottom: 50;
margin-bottom: 25;
text-align: center;
position:absolute;
bottom:0;
+57 -10
View File
@@ -19,6 +19,7 @@ color: #324d50;
line-height: 150%;
margin: 20 30px;
margin: 20 25 20 30px;
caret-color: transparent;
}
.docs-node-html-footer-container {
@@ -29,6 +30,7 @@ line-height: 160%;
border-top: 5px solid #0295aa;
margin: 80px 0 0 0;
padding: 30 0 20 0px;
caret-color: transparent;
}
/* DELETE candidate (delete class assignment on DocsSapace.js too)
@@ -62,11 +64,6 @@ margin-bottom: 0px;
margin-top: 0px;
border: 0px solid #cdcdcd;
padding: 5px;
/* DELETE candidate
margin: auto;
margin-right: 20px;
*/
}
.docs-table-cell{
@@ -126,7 +123,7 @@ cursor: pointer;
.docs-tooltip {
position: relative;
display: inline-block;
border-bottom: 1px dashed #0295aa;
border-bottom: 1px dashed #999;
cursor: pointer;
line-height: inherit;
}
@@ -241,6 +238,7 @@ z-index:100;
padding: 0px 10px;
font-size: 95%;
line-height: 140%;
caret-color: #111;
}
/* Alerts */
@@ -523,6 +521,22 @@ text-decoration: none;
color: #ffd1a9;
}
.docs-footer-language {
width: 30px;
margin-top: 7px;
padding: 7 7px;
}
.docs-footer-language-selected {
width: 30px;
margin-top: 7px;
padding: 7 7px;
background-color: rgba(230, 234, 234, 0.2);
/* border: 1px solid rgba(205, 212, 213, 0.5); DELETE Candidate*/
border: 1px solid rgba(200, 200, 200, .5);
border-radius: 3px;
}
/* DELETE candidate
.docs-footer-body {
@@ -569,9 +583,9 @@ margin: 0 0 0 15px;
code.docs-code {
color: #d9534f;
background-color: rgba(230, 234, 234, 1);
background-color: rgba(230, 234, 234, .5);
/* border: 1px solid rgba(205, 212, 213, 0.5); DELETE Candidate*/
border: 1px solid rgba(54, 85, 88, .3);
border: 1px solid rgba(54, 85, 88, .1);
border-radius: 3px;
padding: 0 5;
}
@@ -799,6 +813,7 @@ display: table;
vertical-align: middle;
display: table-cell;
padding-right: 25px;
caret-color: transparent;
}
.docs-search-results-box {
@@ -815,9 +830,9 @@ width: 100%;
display: table;
padding-left: 180px;
margin-top: 20px;
caret-color: transparent;
}
.docs-search-results-header-tabs-container > input {
display: none;
}
@@ -846,6 +861,7 @@ border-bottom: 3px solid #0295aa;
.docs-search-result-content {
border-top: 1px solid #0295aa;
margin-left: -180px;
caret-color: transparent;
}
.docs-search-result-content > div {
@@ -858,7 +874,8 @@ display: none;
#tab4:checked ~ .docs-search-result-content #content4,
#tab5:checked ~ .docs-search-result-content #content5,
#tab6:checked ~ .docs-search-result-content #content6,
#tab7:checked ~ .docs-search-result-content #content7 {
#tab7:checked ~ .docs-search-result-content #content7,
#tab8:checked ~ .docs-search-result-content #content8 {
display: block;
}
@@ -887,6 +904,36 @@ text-decoration: underline;
cursor: pointer;
}
.docs-search-result-content-record-topic {
font-size: 90%;
color: #31708f;
}
.docs-search-result-content-record-tutorial {
font-size: 90%;
color: #31708f;
}
.docs-search-result-content-record-review {
font-size: 90%;
color: #31708f;
}
.docs-search-result-content-record-topic {
font-size: 90%;
color: #31708f;
}
.docs-search-result-content-record-tutorial {
font-size: 90%;
color: #31708f;
}
.docs-search-result-content-record-review {
font-size: 90%;
color: #31708f;
}
.docs-search-result-content-record-title {
font-size: 120%;
font-weight: 500;
+6
View File
@@ -6,6 +6,9 @@ border: 2px solid;
border-color: #1b998b;
border-radius: 8px;
background-color: #fdfdfd;
-webkit-transition-duration: 1s;
transition-duration: 1s;
caret-color: transparent;
}
.tutorial-summary {
@@ -220,6 +223,9 @@ margin-left: auto;
margin-right: auto;
margin-bottom: 20px;
width: 100%;
-webkit-transition-duration: 1s;
transition-duration: 1s;
caret-color: transparent;
}
.tutorial-buttonsTable {
+5 -12
View File
@@ -55,17 +55,10 @@
style="overflow:hidden; background: url(Images/superalgos-platform.jpg); background-size: cover;"
onresize="onResize()">
<div id="contributors" class="credits">
<p style="font-size: 120%;">Superalgos is <span class="credits-red">open source</span>, <span class="credits-red">forever free</span> for <span class="credits-red">everyone</span>, and is <span class="credits-red">constantly improving</span> thanks to the involvement of contributors:</p>
<p style="font-size: 100%;">Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Ira Miller, matbenitez, bearcanrun, nikolabjelo, 9808us, pmmax, suttridge, Basalt09, Mhnramin, 0xperez, infin1t3, benitezme, whtv, cozed-gh, Eduardo678-dotcom, Smidy13, teehanming, 64bittuning, joenij, apronotti, Noeljarillo, ssplatt, rico4dev, DougJCook, mane, Cordo-van-Saviour, CarnivalBen, Sil3ntLight, pisukesoramame, Edodi, harrellbm, CaptainJeff, Jeff Braun, Francisco J. Santillán, Norman, 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., Mateo H., Lan T., Leon A., Uroš R., Filip M., Vladimir J. and Pavle B.</p>
<p style="font-size: 120%;">Please, <span class="credits-red">give a star to the Superalgos repo at GitHub.com...</span> It helps other devs find the project!</p>
<p id="credits-page-status-paragraph" class="credits-yellow">The UI is loading...</p>
<p>Superalgos is <span class="credits-red">free</span> and <span class="credits-red">open-source</span>, and is
<span class="credits-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, Norman,
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="credits-red">With Superalgos Beta 8, contributing is easier than ever! Become a contributor!</span></p>
</div>
<div id="masterApp"></div>
<div id="canvasApp"></div>
@@ -155,7 +148,7 @@
</div>
<div class="menu-row">
<div class="menu-item" onClick="window.contextMenu.toPlaceholder()">
<img src="Icons/Superalgos/bitcoin.png" class="menu-img" title="Placeholder">
<img src="Icons/Superalgos/docs-placeholder-style.png" class="menu-img" title="Placeholder">
</div>
<div class="menu-item" onClick="window.contextMenu.toSummary()">
<img src="Icons/Superalgos/docs-summary-style.png" class="menu-img" title="Summary">
@@ -203,4 +196,4 @@
</body>
</html>
</html>
+21 -16
View File
@@ -70,47 +70,47 @@ try {
WEB_SERVER = WEB_SERVER.newWebServer()
WEB_SERVER.initialize()
WEB_SERVER.run()
console.log('Web Server ......................... Started')
console.log('Web Server .................................................. Started')
UI_FILE_SERVER = UI_FILE_SERVER.newUIFileServer()
UI_FILE_SERVER.initialize()
UI_FILE_SERVER.run()
console.log('UI File Server ..................... Started')
console.log('UI File Server .............................................. Started')
PROJECT_FILE_SERVER = PROJECT_FILE_SERVER.newProjectFileServer()
PROJECT_FILE_SERVER.initialize()
PROJECT_FILE_SERVER.run()
console.log('Project File Server ................ Started')
console.log('Project File Server ......................................... Started')
PLUGIN_SERVER = PLUGIN_SERVER.newPluginServer()
PLUGIN_SERVER.initialize()
PLUGIN_SERVER.run()
console.log('Plugin Server ...................... Started')
console.log('Plugin Server ............................................... Started')
DATA_FILE_SERVER = DATA_FILE_SERVER.newDataFileServer()
DATA_FILE_SERVER.initialize()
DATA_FILE_SERVER.run()
console.log('Data File Server ................... Started')
console.log('Data File Server ............................................ Started')
EVENT_SERVER = EVENT_SERVER.newEventServer()
EVENT_SERVER.initialize()
EVENT_SERVER.run()
console.log('Events Server ...................... Started')
console.log('Events Server ............................................... Started')
TASK_MANAGER_SERVER = TASK_MANAGER_SERVER.newTaskManagerServer(WEB_SOCKETS_INTERFACE, EVENT_SERVER)
TASK_MANAGER_SERVER.initialize()
TASK_MANAGER_SERVER.run()
console.log('Task Manager Server ................ Started')
console.log('Task Manager Server ......................................... Started')
CCXT_SERVER = CCXT_SERVER.newCCXTServer()
CCXT_SERVER.initialize()
CCXT_SERVER.run()
console.log('CCXT Server ........................ Started')
console.log('CCXT Server ................................................. Started')
WEB3_SERVER = WEB3_SERVER.newWeb3Server()
WEB3_SERVER.initialize()
WEB3_SERVER.run()
console.log('WEB3 Server ........................ Started')
console.log('WEB3 Server ................................................. Started')
console.log('')
console.log('CLIENT INTERFACES:')
@@ -119,25 +119,30 @@ try {
WEB_SOCKETS_INTERFACE = WEB_SOCKETS_INTERFACE.newWebSocketsInterface(EVENT_SERVER)
WEB_SOCKETS_INTERFACE.initialize()
WEB_SOCKETS_INTERFACE.run()
console.log('Web Sockets Interface .............. Listening at port ' + global.env.WEB_SOCKETS_INTERFACE_PORT)
console.log('Web Sockets Interface ....................................... Listening at port ' + global.env.WEB_SOCKETS_INTERFACE_PORT)
HTTP_INTERFACE = HTTP_INTERFACE.newHttpInterface(WEB_SERVER, DATA_FILE_SERVER, PROJECT_FILE_SERVER, UI_FILE_SERVER, PLUGIN_SERVER, CCXT_SERVER, WEB3_SERVER)
HTTP_INTERFACE.initialize()
HTTP_INTERFACE.run()
console.log('Http Interface ..................... Listening at port ' + global.env.HTTP_INTERFACE_PORT)
console.log('Http Interface .............................................. Listening at port ' + global.env.HTTP_INTERFACE_PORT)
console.log('')
console.log("You are running Superalgos Beta 8")
console.log("You are running Superalgos Beta 10")
console.log('')
console.log("What's new? The following was implemented here:")
console.log('')
console.log('Task Server Upgraded ............... This allow us to integrate crypto projects into the Task Server, opening the door to new types of bots defined at other projects.')
console.log('In-App Documentation Improved ...... This allow users to improve the docs / tutorials, correcting, expanding and translating pages.')
console.log('Market Data Structure ....................................... This allows any strategy to use data from markets different from the one it is running at.')
console.log('Exchange Data Structure ..................................... This allows any strategy to use data from exchanges and markets different from the one it is running at.')
console.log('Tensor Flow Integration ..................................... This allows the creation and training of ML models that later can be used for predictions.')
console.log('SA Token .................................................... This allows the project to compensate contributors that add value to it.')
console.log('')
console.log("What's next? At the development pipeline we have:")
console.log('')
console.log('Ethereum Integration ............... This will allow mining data from an Ethereum network node, create indicators with it, an use it on strategies.')
console.log('Machine Learning Infrastructure .... This will enable a new kind of Bot that can learn from data mined. Later that knowledge can be used at trading strategies.')
console.log('Contribution Management ..................................... This will allow us to manage contributions at scale, and distribute the SA token more efficiently at each release.')
console.log('Infraestructure to sensor any API .......................... This will allow us to fetch data from any API, turn it into indicators and plot it.')
console.log('Usage of ML Predictions at Trading Systems .................. This will enable a new kind of Bot that can learn from data mined. Later that knowledge can be used at trading strategies.')
console.log('Ethereum Integration ........................................ This will allow mining data from an Ethereum network node, create indicators with it, an use it on strategies.')
console.log('')
} catch (err) {
+162 -67
View File
@@ -1,5 +1,12 @@
exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVER, PROJECT_FILE_SERVER, UI_FILE_SERVER, PLUGIN_SERVER, CCXT_SERVER, WEB3_SERVER) {
/*
IMPORTANT: If you are reviewing the code of the project please note
that this file is the single file in the whole system that accumulated
more technical debt by far. I did not have the time yet to pay the
technical debt, and therefore there is a lot to reorganize in here.
I will remove this note once this job is done.
*/
let thisObject = {
initialize: initialize,
finalize: finalize,
@@ -250,6 +257,9 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
webhookMessages = []
}
console.log('[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = ' + exchange + '-' + market)
console.log('[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
respondWithContent(JSON.stringify(webhookMessages), httpResponse)
webhookMessages = []
@@ -292,6 +302,9 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
webhookMessages.push([timestamp, source, messageReceived])
webhook.set(key, webhookMessages)
console.log('[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = ' + exchange + '-' + market)
console.log('[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = ' + messageReceived)
console.log('[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse)
}
break
@@ -563,7 +576,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
}
function cleanFileName(fileName) {
for (let i = 0; i < 10; i++) {
for (let i = 0; i < 100; i++) {
fileName = fileName
.replace(' ', '-')
.replace('--', '-')
@@ -590,21 +603,50 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
switch (requestParameters[2]) { // switch by command
case 'Contribute': {
try {
const commitMessage = unescape(requestParameters[3])
let commitMessage = unescape(requestParameters[3])
const username = unescape(requestParameters[4])
const token = unescape(requestParameters[5])
const currentBranch = unescape(requestParameters[6])
const contributionsBranch = unescape(requestParameters[7])
let error
/* Unsavping # */
for (let i = 0; i < 10; i++) {
commitMessage = commitMessage.replace('_SLASH_', '/')
commitMessage = commitMessage.replace('_HASHTAG_', '#')
}
contribute()
async function contribute() {
if (await doGit() === false) {
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), httpResponse)
await doGit()
if (error !== undefined) {
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'App Error - Contribution Not Sent',
anchor: undefined,
placeholder: {}
}
respondWithDocsObject(docs, error)
return
}
if (await doGithub() === false) {
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), httpResponse)
await doGithub()
if (error !== undefined) {
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'App Error - Contribution Not Sent',
anchor: undefined,
placeholder: {}
}
console.log('respond with docs ')
respondWithDocsObject(docs, error)
return
}
respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse)
@@ -623,14 +665,13 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
await git.add('./*')
await git.commit(commitMessage)
await git.push('origin', currentBranch)
return true
} catch (err) {
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> Method call produced an error.')
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> err.stack = ' + err.stack)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> commitMessage = ' + commitMessage)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> currentBranch = ' + currentBranch)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> contributionsBranch = ' + contributionsBranch)
return false
error = err
}
}
@@ -640,7 +681,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
const octokit = new Octokit({
auth: token,
userAgent: 'Superalgos Beta 8'
userAgent: 'Superalgos Beta 10'
})
const repo = 'Superalgos'
@@ -657,20 +698,19 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
head,
base,
});
return true
} catch (err) {
if (err.stack.indexOf('A pull request already exists') >= 0) {
return true
return
} else {
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> Method call produced an error.')
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> err.stack = ' + err.stack)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> commitMessage = ' + commitMessage)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> username = ' + username)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> token starts with = ' + token.substring(0, 10) + '...')
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> token starts with = ' + token.substring(0, 10) + '...')
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> token ends with = ' + '...' + token.substring(token.length - 10))
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> currentBranch = ' + currentBranch)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGithub -> contributionsBranch = ' + contributionsBranch)
return false
error = err
}
}
}
@@ -693,22 +733,33 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
}
break
}
case 'Update': {
try {
const currentBranch = unescape(requestParameters[3])
update()
async function update() {
let message = await doGit()
let result = await doGit()
if (message !== undefined) {
if (result.error === undefined) {
let customResponse = {
result: global.CUSTOM_OK_RESPONSE.result,
message: message
message: result.message
}
respondWithContent(JSON.stringify(customResponse), httpResponse)
} else {
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), httpResponse)
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'App Error - Update Failed',
anchor: undefined,
placeholder: {}
}
respondWithDocsObject(docs, result.error)
}
}
@@ -724,10 +775,11 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
let message
try {
message = await git.pull('https://github.com/Superalgos/Superalgos', currentBranch)
return message
return { message: message }
} catch (err) {
console.log('[ERROR] Error updating ' + currentBranch)
console.log(err.stack)
return { error: err }
}
}
@@ -751,15 +803,25 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
case 'Checkout': {
try {
const currentBranch = unescape(requestParameters[3])
let error
checkout()
async function checkout() {
let result = await doGit()
await doGit()
if (result === true) {
if (error === undefined) {
respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse)
} else {
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), httpResponse)
let docs = {
project: 'Superalgos',
category: 'Topic',
type: 'Switching Branches - Current Branch Not Changed',
anchor: undefined,
placeholder: {}
}
respondWithDocsObject(docs, error)
}
}
@@ -776,9 +838,8 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
} catch (err) {
console.log('[ERROR] Error changing current branch to ' + currentBranch)
console.log(err.stack)
return false
error = err
}
return true
}
} catch (err) {
@@ -798,6 +859,41 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
break
}
}
function respondWithDocsObject(docs, error) {
if (error.message !== undefined) {
docs.placeholder.errorMessage = {
style: 'Error',
text: error.message
}
}
if (error.stack !== undefined) {
docs.placeholder.errorStack = {
style: 'Javascript',
text: error.stack
}
}
if (error.code !== undefined) {
docs.placeholder.errorCode = {
style: 'Json',
text: error.code
}
}
docs.placeholder.errorDetails = {
style: 'Json',
text: JSON.stringify(error, undefined, 4)
}
let customResponse = {
result: global.CUSTOM_FAIL_RESPONSE.result,
docs: docs
}
respondWithContent(JSON.stringify(customResponse), httpResponse)
}
}
break
@@ -1016,7 +1112,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
let fs = require('fs')
try {
let filePath = global.env.PATH_TO_DEFAULT_WORKSPACE + '/Getting-Started.json'
let filePath = global.env.PATH_TO_DEFAULT_WORKSPACE + '/Getting-Started-Tutorials.json'
fs.readFile(filePath, onFileRead)
} catch (e) {
console.log('[ERROR] Error reading the Workspace.', e)
@@ -1049,22 +1145,24 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
fs.readdir(dirPath, onDirRead)
function onDirRead(err, fileList) {
let updatedFileList = []
if (err) {
console.log('[WARN] Error reading a directory content. filePath = ' + dirPath)
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), httpResponse)
return
/*
If we have a problem reading this folder we will assume that it is
because this project does not need this folder and that's it.
*/
//console.log('[WARN] Error reading a directory content. filePath = ' + dirPath)
} else {
let updatedFileList = []
for (let i = 0; i < fileList.length; i++) {
let name = 'Plugin \u2192 ' + fileList[i]
updatedFileList.push([project, name])
}
allWorkspaces = allWorkspaces.concat(updatedFileList)
projectsCount++
if (projectsCount === projects.length) {
readMyWorkspaces()
}
return
}
allWorkspaces = allWorkspaces.concat(updatedFileList)
projectsCount++
if (projectsCount === projects.length) {
readMyWorkspaces()
}
}
} catch (err) {
@@ -1267,7 +1365,12 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
case 'Storage':
{
respondWithFile(global.env.PATH_TO_DATA_STORAGE + '/' + httpRequest.url.substring(9), httpResponse)
let pathToFile = httpRequest.url.substring(9)
/* Unsavping # */
for (let i = 0; i < 10; i++) {
pathToFile = pathToFile.replace('_HASHTAG_', '#')
}
respondWithFile(global.env.PATH_TO_DATA_STORAGE + '/' + pathToFile, httpResponse)
}
break
@@ -1346,21 +1449,23 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
fs.readdir(dirPath, onDirRead)
function onDirRead(err, fileList) {
let updatedFileList = []
if (err) {
console.log('[WARN] Error reading a directory content. filePath = ' + dirPath)
return
/*
If we have a problem reading this folder we will assume that it is
because this project does not need this folder and that's it.
*/
// console.log('[WARN] Error reading a directory content. filePath = ' + dirPath)
} else {
let updatedFileList = []
for (let i = 0; i < fileList.length; i++) {
let name = fileList[i]
updatedFileList.push([project, name])
}
allLibraries = allLibraries.concat(updatedFileList)
projectsCount++
if (projectsCount === projects.length) {
respondWithContent(JSON.stringify(allLibraries), httpResponse)
}
return
}
allLibraries = allLibraries.concat(updatedFileList)
projectsCount++
if (projectsCount === projects.length) {
respondWithContent(JSON.stringify(allLibraries), httpResponse)
}
}
} catch (err) {
@@ -1391,27 +1496,13 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
function sendSchema(filePath, schemaType) {
let fs = require('fs')
if (schemaType === 'AppSchema') {
let fileName = 'AppSchema.json'
try {
filePath = filePath + fileName
fs.readFile(filePath, onFileRead)
} catch (e) {
console.log('[ERROR] Error reading the ' + fileName, e)
}
function onFileRead(err, schema) {
if (err) {
respondWithContent(undefined, httpResponse)
} else {
respondWithContent(schema, httpResponse)
}
}
} else {
try {
let folder = ''
switch (schemaType) {
case 'AppSchema': {
folder = 'App-Schema'
break
}
case 'DocsNodeSchema': {
folder = 'Docs-Nodes'
break
@@ -1455,7 +1546,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
}
respondWithContent("[]", httpResponse)
}
}
}
function sendStyleSheet(fileName) {
@@ -1627,9 +1718,13 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
}
function getDirectories(path) {
const fs = require('fs')
return fs.readdirSync(path).filter(function (file) {
return fs.statSync(path + '/' + file).isDirectory();
});
try {
const fs = require('fs')
return fs.readdirSync(path).filter(function (file) {
return fs.statSync(path + '/' + file).isDirectory();
});
} catch (err) {
return []
}
}
}
-1
View File
@@ -1 +0,0 @@
export const version = "abi/5.0.0-beta.153";
-91
View File
@@ -1,91 +0,0 @@
"use strict";
// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI
import { arrayify } from "@ethersproject/bytes";
import { defineReadOnly } from "@ethersproject/properties";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
import { Reader, Writer } from "./coders/abstract-coder";
import { AddressCoder } from "./coders/address";
import { ArrayCoder } from "./coders/array";
import { BooleanCoder } from "./coders/boolean";
import { BytesCoder } from "./coders/bytes";
import { FixedBytesCoder } from "./coders/fixed-bytes";
import { NullCoder } from "./coders/null";
import { NumberCoder } from "./coders/number";
import { StringCoder } from "./coders/string";
import { TupleCoder } from "./coders/tuple";
import { ParamType } from "./fragments";
const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);
const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);
export class AbiCoder {
constructor(coerceFunc) {
logger.checkNew(new.target, AbiCoder);
defineReadOnly(this, "coerceFunc", coerceFunc || null);
}
_getCoder(param) {
switch (param.baseType) {
case "address":
return new AddressCoder(param.name);
case "bool":
return new BooleanCoder(param.name);
case "string":
return new StringCoder(param.name);
case "bytes":
return new BytesCoder(param.name);
case "array":
return new ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);
case "tuple":
return new TupleCoder((param.components || []).map((component) => {
return this._getCoder(component);
}), param.name);
case "":
return new NullCoder(param.name);
}
// u?int[0-9]*
let match = param.type.match(paramTypeNumber);
if (match) {
let size = parseInt(match[2] || "256");
if (size === 0 || size > 256 || (size % 8) !== 0) {
logger.throwArgumentError("invalid " + match[1] + " bit length", "param", param);
}
return new NumberCoder(size / 8, (match[1] === "int"), param.name);
}
// bytes[0-9]+
match = param.type.match(paramTypeBytes);
if (match) {
let size = parseInt(match[1]);
if (size === 0 || size > 32) {
logger.throwArgumentError("invalid bytes length", "param", param);
}
return new FixedBytesCoder(size, param.name);
}
return logger.throwArgumentError("invalid type", "type", param.type);
}
_getWordSize() { return 32; }
_getReader(data) {
return new Reader(data, this._getWordSize(), this.coerceFunc);
}
_getWriter() {
return new Writer(this._getWordSize());
}
encode(types, values) {
if (types.length !== values.length) {
logger.throwError("types/values length mismatch", Logger.errors.INVALID_ARGUMENT, {
count: { types: types.length, values: values.length },
value: { types: types, values: values }
});
}
const coders = types.map((type) => this._getCoder(ParamType.from(type)));
const coder = (new TupleCoder(coders, "_"));
const writer = this._getWriter();
coder.encode(writer, values);
return writer.data;
}
decode(types, data) {
const coders = types.map((type) => this._getCoder(ParamType.from(type)));
const coder = new TupleCoder(coders, "_");
return coder.decode(this._getReader(arrayify(data)));
}
}
export const defaultAbiCoder = new AbiCoder();
-131
View File
@@ -1,131 +0,0 @@
"use strict";
import { arrayify, concat, hexlify } from "@ethersproject/bytes";
import { BigNumber } from "@ethersproject/bignumber";
import { defineReadOnly } from "@ethersproject/properties";
import { Logger } from "@ethersproject/logger";
import { version } from "../_version";
const logger = new Logger(version);
export function checkResultErrors(result) {
// Find the first error (if any)
const errors = [];
const checkErrors = function (path, object) {
if (!Array.isArray(object)) {
return;
}
for (let key in object) {
const childPath = path.slice();
childPath.push(key);
try {
checkErrors(childPath, object[key]);
}
catch (error) {
errors.push({ path: childPath, error: error });
}
}
};
checkErrors([], result);
return errors;
}
export class Coder {
constructor(name, type, localName, dynamic) {
// @TODO: defineReadOnly these
this.name = name;
this.type = type;
this.localName = localName;
this.dynamic = dynamic;
}
_throwError(message, value) {
logger.throwArgumentError(message, this.localName, value);
}
}
export class Writer {
constructor(wordSize) {
defineReadOnly(this, "wordSize", wordSize || 32);
this._data = arrayify([]);
this._padding = new Uint8Array(wordSize);
}
get data() { return hexlify(this._data); }
get length() { return this._data.length; }
_writeData(data) {
this._data = concat([this._data, data]);
return data.length;
}
// Arrayish items; padded on the right to wordSize
writeBytes(value) {
let bytes = arrayify(value);
if (bytes.length % this.wordSize) {
bytes = concat([bytes, this._padding.slice(bytes.length % this.wordSize)]);
}
return this._writeData(bytes);
}
_getValue(value) {
let bytes = arrayify(BigNumber.from(value));
if (bytes.length > this.wordSize) {
logger.throwError("value out-of-bounds", Logger.errors.BUFFER_OVERRUN, {
length: this.wordSize,
offset: bytes.length
});
}
if (bytes.length % this.wordSize) {
bytes = concat([this._padding.slice(bytes.length % this.wordSize), bytes]);
}
return bytes;
}
// BigNumberish items; padded on the left to wordSize
writeValue(value) {
return this._writeData(this._getValue(value));
}
writeUpdatableValue() {
let offset = this.length;
this.writeValue(0);
return (value) => {
this._data.set(this._getValue(value), offset);
};
}
}
export class Reader {
constructor(data, wordSize, coerceFunc) {
defineReadOnly(this, "_data", arrayify(data));
defineReadOnly(this, "wordSize", wordSize || 32);
defineReadOnly(this, "_coerceFunc", coerceFunc);
this._offset = 0;
}
get data() { return hexlify(this._data); }
get consumed() { return this._offset; }
// The default Coerce function
static coerce(name, value) {
let match = name.match("^u?int([0-9]+)$");
if (match && parseInt(match[1]) <= 48) {
value = value.toNumber();
}
return value;
}
coerce(name, value) {
if (this._coerceFunc) {
return this._coerceFunc(name, value);
}
return Reader.coerce(name, value);
}
_peekBytes(offset, length) {
let alignedLength = Math.ceil(length / this.wordSize) * this.wordSize;
if (this._offset + alignedLength > this._data.length) {
logger.throwError("data out-of-bounds", Logger.errors.BUFFER_OVERRUN, {
length: this._data.length,
offset: this._offset + alignedLength
});
}
return this._data.slice(this._offset, this._offset + alignedLength);
}
subReader(offset) {
return new Reader(this._data.slice(this._offset + offset), this.wordSize, this._coerceFunc);
}
readBytes(length) {
let bytes = this._peekBytes(0, length);
this._offset += bytes.length;
// @TODO: Make sure the length..end bytes are all 0?
return bytes.slice(0, length);
}
readValue() {
return BigNumber.from(this.readBytes(this.wordSize));
}
}
-21
View File
@@ -1,21 +0,0 @@
"use strict";
import { getAddress } from "@ethersproject/address";
import { hexZeroPad } from "@ethersproject/bytes";
import { Coder } from "./abstract-coder";
export class AddressCoder extends Coder {
constructor(localName) {
super("address", "address", localName, false);
}
encode(writer, value) {
try {
getAddress(value);
}
catch (error) {
this._throwError(error.message, value);
}
return writer.writeValue(value);
}
decode(reader) {
return getAddress(hexZeroPad(reader.readValue().toHexString(), 20));
}
}
-15
View File
@@ -1,15 +0,0 @@
"use strict";
import { Coder } from "./abstract-coder";
// Clones the functionality of an existing Coder, but without a localName
export class AnonymousCoder extends Coder {
constructor(coder) {
super(coder.name, coder.type, undefined, coder.dynamic);
this.coder = coder;
}
encode(writer, value) {
return this.coder.encode(writer, value);
}
decode(reader) {
return this.coder.decode(reader);
}
}
-165
View File
@@ -1,165 +0,0 @@
"use strict";
import { Logger } from "@ethersproject/logger";
import { version } from "../_version";
const logger = new Logger(version);
import { Coder, Writer } from "./abstract-coder";
import { AnonymousCoder } from "./anonymous";
export function pack(writer, coders, values) {
if (Array.isArray(values)) {
// do nothing
}
else if (values && typeof (values) === "object") {
let arrayValues = [];
coders.forEach(function (coder) {
arrayValues.push(values[coder.localName]);
});
values = arrayValues;
}
else {
logger.throwArgumentError("invalid tuple value", "tuple", values);
}
if (coders.length !== values.length) {
logger.throwArgumentError("types/value length mismatch", "tuple", values);
}
let staticWriter = new Writer(writer.wordSize);
let dynamicWriter = new Writer(writer.wordSize);
let updateFuncs = [];
coders.forEach((coder, index) => {
let value = values[index];
if (coder.dynamic) {
// Get current dynamic offset (for the future pointer)
let dynamicOffset = dynamicWriter.length;
// Encode the dynamic value into the dynamicWriter
coder.encode(dynamicWriter, value);
// Prepare to populate the correct offset once we are done
let updateFunc = staticWriter.writeUpdatableValue();
updateFuncs.push((baseOffset) => {
updateFunc(baseOffset + dynamicOffset);
});
}
else {
coder.encode(staticWriter, value);
}
});
// Backfill all the dynamic offsets, now that we know the static length
updateFuncs.forEach((func) => { func(staticWriter.length); });
let length = writer.writeBytes(staticWriter.data);
length += writer.writeBytes(dynamicWriter.data);
return length;
}
export function unpack(reader, coders) {
let values = [];
// A reader anchored to this base
let baseReader = reader.subReader(0);
// The amount of dynamic data read; to consume later to synchronize
let dynamicLength = 0;
coders.forEach((coder) => {
let value = null;
if (coder.dynamic) {
let offset = reader.readValue();
let offsetReader = baseReader.subReader(offset.toNumber());
try {
value = coder.decode(offsetReader);
}
catch (error) {
// Cannot recover from this
if (error.code === Logger.errors.BUFFER_OVERRUN) {
throw error;
}
value = error;
value.baseType = coder.name;
value.name = coder.localName;
value.type = coder.type;
}
dynamicLength += offsetReader.consumed;
}
else {
try {
value = coder.decode(reader);
}
catch (error) {
// Cannot recover from this
if (error.code === Logger.errors.BUFFER_OVERRUN) {
throw error;
}
value = error;
value.baseType = coder.name;
value.name = coder.localName;
value.type = coder.type;
}
}
if (value != undefined) {
values.push(value);
}
});
// @TODO: get rid of this an see if it still works?
// Consume the dynamic components in the main reader
reader.readBytes(dynamicLength);
// Add any named parameters (i.e. tuples)
coders.forEach((coder, index) => {
let name = coder.localName;
if (!name) {
return;
}
if (name === "length") {
name = "_length";
}
if (values[name] != null) {
return;
}
const value = values[index];
if (value instanceof Error) {
Object.defineProperty(values, name, {
get: () => { throw value; }
});
}
else {
values[name] = value;
}
});
for (let i = 0; i < values.length; i++) {
const value = values[i];
if (value instanceof Error) {
Object.defineProperty(values, i, {
get: () => { throw value; }
});
}
}
return Object.freeze(values);
}
export class ArrayCoder extends Coder {
constructor(coder, length, localName) {
const type = (coder.type + "[" + (length >= 0 ? length : "") + "]");
const dynamic = (length === -1 || coder.dynamic);
super("array", type, localName, dynamic);
this.coder = coder;
this.length = length;
}
encode(writer, value) {
if (!Array.isArray(value)) {
this._throwError("expected array value", value);
}
let count = this.length;
if (count === -1) {
count = value.length;
writer.writeValue(value.length);
}
logger.checkArgumentCount(count, value.length, "coder array" + (this.localName ? (" " + this.localName) : ""));
let coders = [];
for (let i = 0; i < value.length; i++) {
coders.push(this.coder);
}
return pack(writer, coders, value);
}
decode(reader) {
let count = this.length;
if (count === -1) {
count = reader.readValue().toNumber();
}
let coders = [];
for (let i = 0; i < count; i++) {
coders.push(new AnonymousCoder(this.coder));
}
return reader.coerce(this.name, unpack(reader, coders));
}
}
-13
View File
@@ -1,13 +0,0 @@
"use strict";
import { Coder } from "./abstract-coder";
export class BooleanCoder extends Coder {
constructor(localName) {
super("bool", "bool", localName, false);
}
encode(writer, value) {
return writer.writeValue(value ? 1 : 0);
}
decode(reader) {
return reader.coerce(this.type, !reader.readValue().isZero());
}
}
-25
View File
@@ -1,25 +0,0 @@
"use strict";
import { arrayify, hexlify } from "@ethersproject/bytes";
import { Coder } from "./abstract-coder";
export class DynamicBytesCoder extends Coder {
constructor(type, localName) {
super(type, type, localName, true);
}
encode(writer, value) {
value = arrayify(value);
let length = writer.writeValue(value.length);
length += writer.writeBytes(value);
return length;
}
decode(reader) {
return reader.readBytes(reader.readValue().toNumber());
}
}
export class BytesCoder extends DynamicBytesCoder {
constructor(localName) {
super("bytes", localName);
}
decode(reader) {
return reader.coerce(this.name, hexlify(super.decode(reader)));
}
}
-21
View File
@@ -1,21 +0,0 @@
"use strict";
import { arrayify, hexlify } from "@ethersproject/bytes";
import { Coder } from "./abstract-coder";
// @TODO: Merge this with bytes
export class FixedBytesCoder extends Coder {
constructor(size, localName) {
let name = "bytes" + String(size);
super(name, name, localName, false);
this.size = size;
}
encode(writer, value) {
let data = arrayify(value);
if (data.length !== this.size) {
this._throwError("incorrect data length", value);
}
return writer.writeBytes(data);
}
decode(reader) {
return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));
}
}
-17
View File
@@ -1,17 +0,0 @@
"use strict";
import { Coder } from "./abstract-coder";
export class NullCoder extends Coder {
constructor(localName) {
super("null", "", localName, false);
}
encode(writer, value) {
if (value != null) {
this._throwError("not null", value);
}
return writer.writeBytes([]);
}
decode(reader) {
reader.readBytes(0);
return reader.coerce(this.name, null);
}
}
-38
View File
@@ -1,38 +0,0 @@
"use strict";
import { BigNumber } from "@ethersproject/bignumber";
import { MaxUint256, NegativeOne, One, Zero } from "@ethersproject/constants";
import { Coder } from "./abstract-coder";
export class NumberCoder extends Coder {
constructor(size, signed, localName) {
const name = ((signed ? "int" : "uint") + (size * 8));
super(name, name, localName, false);
this.size = size;
this.signed = signed;
}
encode(writer, value) {
let v = BigNumber.from(value);
// Check bounds are safe for encoding
let maxUintValue = MaxUint256.mask(writer.wordSize * 8);
if (this.signed) {
let bounds = maxUintValue.mask(this.size * 8 - 1);
if (v.gt(bounds) || v.lt(bounds.add(One).mul(NegativeOne))) {
this._throwError("value out-of-bounds", value);
}
}
else if (v.lt(Zero) || v.gt(maxUintValue.mask(this.size * 8))) {
this._throwError("value out-of-bounds", value);
}
v = v.toTwos(this.size * 8).mask(this.size * 8);
if (this.signed) {
v = v.fromTwos(this.size * 8).toTwos(8 * writer.wordSize);
}
return writer.writeValue(v);
}
decode(reader) {
let value = reader.readValue().mask(this.size * 8);
if (this.signed) {
value = value.fromTwos(this.size * 8);
}
return reader.coerce(this.name, value);
}
}
-14
View File
@@ -1,14 +0,0 @@
"use strict";
import { toUtf8Bytes, toUtf8String } from "@ethersproject/strings";
import { DynamicBytesCoder } from "./bytes";
export class StringCoder extends DynamicBytesCoder {
constructor(localName) {
super("string", localName);
}
encode(writer, value) {
return super.encode(writer, toUtf8Bytes(value));
}
decode(reader) {
return toUtf8String(super.decode(reader));
}
}
-24
View File
@@ -1,24 +0,0 @@
"use strict";
import { Coder } from "./abstract-coder";
import { pack, unpack } from "./array";
export class TupleCoder extends Coder {
constructor(coders, localName) {
let dynamic = false;
const types = [];
coders.forEach((coder) => {
if (coder.dynamic) {
dynamic = true;
}
types.push(coder.type);
});
const type = ("tuple(" + types.join(",") + ")");
super("tuple", type, localName, dynamic);
this.coders = coders;
}
encode(writer, value) {
return pack(writer, this.coders, value);
}
decode(reader) {
return reader.coerce(this.name, unpack(reader, this.coders));
}
}
-780
View File
@@ -1,780 +0,0 @@
"use strict";
import { BigNumber } from "@ethersproject/bignumber";
import { defineReadOnly } from "@ethersproject/properties";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
;
const _constructorGuard = {};
let ModifiersBytes = { calldata: true, memory: true, storage: true };
let ModifiersNest = { calldata: true, memory: true };
function checkModifier(type, name) {
if (type === "bytes" || type === "string") {
if (ModifiersBytes[name]) {
return true;
}
}
else if (type === "address") {
if (name === "payable") {
return true;
}
}
else if (type.indexOf("[") >= 0 || type === "tuple") {
if (ModifiersNest[name]) {
return true;
}
}
if (ModifiersBytes[name] || name === "payable") {
logger.throwArgumentError("invalid modifier", "name", name);
}
return false;
}
// @TODO: Make sure that children of an indexed tuple are marked with a null indexed
function parseParamType(param, allowIndexed) {
let originalParam = param;
function throwError(i) {
logger.throwArgumentError(`unexpected character at position ${i}`, "param", param);
}
param = param.replace(/\s/g, " ");
function newNode(parent) {
let node = { type: "", name: "", parent: parent, state: { allowType: true } };
if (allowIndexed) {
node.indexed = false;
}
return node;
}
let parent = { type: "", name: "", state: { allowType: true } };
let node = parent;
for (let i = 0; i < param.length; i++) {
let c = param[i];
switch (c) {
case "(":
if (node.state.allowType && node.type === "") {
node.type = "tuple";
}
else if (!node.state.allowParams) {
throwError(i);
}
node.state.allowType = false;
node.type = verifyType(node.type);
node.components = [newNode(node)];
node = node.components[0];
break;
case ")":
delete node.state;
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(i);
}
node.indexed = true;
node.name = "";
}
if (checkModifier(node.type, node.name)) {
node.name = "";
}
node.type = verifyType(node.type);
let child = node;
node = node.parent;
if (!node) {
throwError(i);
}
delete child.parent;
node.state.allowParams = false;
node.state.allowName = true;
node.state.allowArray = true;
break;
case ",":
delete node.state;
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(i);
}
node.indexed = true;
node.name = "";
}
if (checkModifier(node.type, node.name)) {
node.name = "";
}
node.type = verifyType(node.type);
let sibling = newNode(node.parent);
//{ type: "", name: "", parent: node.parent, state: { allowType: true } };
node.parent.components.push(sibling);
delete node.parent;
node = sibling;
break;
// Hit a space...
case " ":
// If reading type, the type is done and may read a param or name
if (node.state.allowType) {
if (node.type !== "") {
node.type = verifyType(node.type);
delete node.state.allowType;
node.state.allowName = true;
node.state.allowParams = true;
}
}
// If reading name, the name is done
if (node.state.allowName) {
if (node.name !== "") {
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(i);
}
if (node.indexed) {
throwError(i);
}
node.indexed = true;
node.name = "";
}
else if (checkModifier(node.type, node.name)) {
node.name = "";
}
else {
node.state.allowName = false;
}
}
}
break;
case "[":
if (!node.state.allowArray) {
throwError(i);
}
node.type += c;
node.state.allowArray = false;
node.state.allowName = false;
node.state.readArray = true;
break;
case "]":
if (!node.state.readArray) {
throwError(i);
}
node.type += c;
node.state.readArray = false;
node.state.allowArray = true;
node.state.allowName = true;
break;
default:
if (node.state.allowType) {
node.type += c;
node.state.allowParams = true;
node.state.allowArray = true;
}
else if (node.state.allowName) {
node.name += c;
delete node.state.allowArray;
}
else if (node.state.readArray) {
node.type += c;
}
else {
throwError(i);
}
}
}
if (node.parent) {
logger.throwArgumentError("unexpected eof", "param", param);
}
delete parent.state;
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(originalParam.length - 7);
}
if (node.indexed) {
throwError(originalParam.length - 7);
}
node.indexed = true;
node.name = "";
}
else if (checkModifier(node.type, node.name)) {
node.name = "";
}
parent.type = verifyType(parent.type);
return parent;
}
function populate(object, params) {
for (let key in params) {
defineReadOnly(object, key, params[key]);
}
}
export const FormatTypes = Object.freeze({
// Bare formatting, as is needed for computing a sighash of an event or function
sighash: "sighash",
// Human-Readable with Minimal spacing and without names (compact human-readable)
minimal: "minimal",
// Human-Readble with nice spacing, including all names
full: "full",
// JSON-format a la Solidity
json: "json"
});
const paramTypeArray = new RegExp(/^(.*)\[([0-9]*)\]$/);
export class ParamType {
constructor(constructorGuard, params) {
if (constructorGuard !== _constructorGuard) {
logger.throwError("use fromString", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new ParamType()"
});
}
populate(this, params);
let match = this.type.match(paramTypeArray);
if (match) {
populate(this, {
arrayLength: parseInt(match[2] || "-1"),
arrayChildren: ParamType.fromObject({
type: match[1],
components: this.components
}),
baseType: "array"
});
}
else {
populate(this, {
arrayLength: null,
arrayChildren: null,
baseType: ((this.components != null) ? "tuple" : this.type)
});
}
this._isParamType = true;
Object.freeze(this);
}
// Format the parameter fragment
// - sighash: "(uint256,address)"
// - minimal: "tuple(uint256,address) indexed"
// - full: "tuple(uint256 foo, addres bar) indexed baz"
format(format) {
if (!format) {
format = FormatTypes.sighash;
}
if (!FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === FormatTypes.json) {
let result = {
type: ((this.baseType === "tuple") ? "tuple" : this.type),
name: (this.name || undefined)
};
if (typeof (this.indexed) === "boolean") {
result.indexed = this.indexed;
}
if (this.components) {
result.components = this.components.map((comp) => JSON.parse(comp.format(format)));
}
return JSON.stringify(result);
}
let result = "";
// Array
if (this.baseType === "array") {
result += this.arrayChildren.format(format);
result += "[" + (this.arrayLength < 0 ? "" : String(this.arrayLength)) + "]";
}
else {
if (this.baseType === "tuple") {
if (format !== FormatTypes.sighash) {
result += this.type;
}
result += "(" + this.components.map((comp) => comp.format(format)).join((format === FormatTypes.full) ? ", " : ",") + ")";
}
else {
result += this.type;
}
}
if (format !== FormatTypes.sighash) {
if (this.indexed === true) {
result += " indexed";
}
if (format === FormatTypes.full && this.name) {
result += " " + this.name;
}
}
return result;
}
static from(value, allowIndexed) {
if (typeof (value) === "string") {
return ParamType.fromString(value, allowIndexed);
}
return ParamType.fromObject(value);
}
static fromObject(value) {
if (ParamType.isParamType(value)) {
return value;
}
return new ParamType(_constructorGuard, {
name: (value.name || null),
type: verifyType(value.type),
indexed: ((value.indexed == null) ? null : !!value.indexed),
components: (value.components ? value.components.map(ParamType.fromObject) : null)
});
}
static fromString(value, allowIndexed) {
function ParamTypify(node) {
return ParamType.fromObject({
name: node.name,
type: node.type,
indexed: node.indexed,
components: node.components
});
}
return ParamTypify(parseParamType(value, !!allowIndexed));
}
static isParamType(value) {
return !!(value != null && value._isParamType);
}
}
;
function parseParams(value, allowIndex) {
return splitNesting(value).map((param) => ParamType.fromString(param, allowIndex));
}
export class Fragment {
constructor(constructorGuard, params) {
if (constructorGuard !== _constructorGuard) {
logger.throwError("use a static from method", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new Fragment()"
});
}
populate(this, params);
this._isFragment = true;
Object.freeze(this);
}
static from(value) {
if (Fragment.isFragment(value)) {
return value;
}
if (typeof (value) === "string") {
return Fragment.fromString(value);
}
return Fragment.fromObject(value);
}
static fromObject(value) {
if (Fragment.isFragment(value)) {
return value;
}
switch (value.type) {
case "function":
return FunctionFragment.fromObject(value);
case "event":
return EventFragment.fromObject(value);
case "constructor":
return ConstructorFragment.fromObject(value);
case "fallback":
case "receive":
// @TODO: Something? Maybe return a FunctionFragment? A custom DefaultFunctionFragment?
return null;
}
return logger.throwArgumentError("invalid fragment object", "value", value);
}
static fromString(value) {
// Make sure the "returns" is surrounded by a space and all whitespace is exactly one space
value = value.replace(/\s/g, " ");
value = value.replace(/\(/g, " (").replace(/\)/g, ") ").replace(/\s+/g, " ");
value = value.trim();
if (value.split(" ")[0] === "event") {
return EventFragment.fromString(value.substring(5).trim());
}
else if (value.split(" ")[0] === "function") {
return FunctionFragment.fromString(value.substring(8).trim());
}
else if (value.split("(")[0].trim() === "constructor") {
return ConstructorFragment.fromString(value.trim());
}
return logger.throwArgumentError("unsupported fragment", "value", value);
}
static isFragment(value) {
return !!(value && value._isFragment);
}
}
export class EventFragment extends Fragment {
format(format) {
if (!format) {
format = FormatTypes.sighash;
}
if (!FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === FormatTypes.json) {
return JSON.stringify({
type: "event",
anonymous: this.anonymous,
name: this.name,
inputs: this.inputs.map((input) => JSON.parse(input.format(format)))
});
}
let result = "";
if (format !== FormatTypes.sighash) {
result += "event ";
}
result += this.name + "(" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? ", " : ",") + ") ";
if (format !== FormatTypes.sighash) {
if (this.anonymous) {
result += "anonymous ";
}
}
return result.trim();
}
static from(value) {
if (typeof (value) === "string") {
return EventFragment.fromString(value);
}
return EventFragment.fromObject(value);
}
static fromObject(value) {
if (EventFragment.isEventFragment(value)) {
return value;
}
if (value.type !== "event") {
logger.throwArgumentError("invalid event object", "value", value);
}
const params = {
name: verifyIdentifier(value.name),
anonymous: value.anonymous,
inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),
type: "event"
};
return new EventFragment(_constructorGuard, params);
}
static fromString(value) {
let match = value.match(regexParen);
if (!match) {
logger.throwArgumentError("invalid event string", "value", value);
}
let anonymous = false;
match[3].split(" ").forEach((modifier) => {
switch (modifier.trim()) {
case "anonymous":
anonymous = true;
break;
case "":
break;
default:
logger.warn("unknown modifier: " + modifier);
}
});
return EventFragment.fromObject({
name: match[1].trim(),
anonymous: anonymous,
inputs: parseParams(match[2], true),
type: "event"
});
}
static isEventFragment(value) {
return (value && value._isFragment && value.type === "event");
}
}
function parseGas(value, params) {
params.gas = null;
let comps = value.split("@");
if (comps.length !== 1) {
if (comps.length > 2) {
logger.throwArgumentError("invalid human-readable ABI signature", "value", value);
}
if (!comps[1].match(/^[0-9]+$/)) {
logger.throwArgumentError("invalid human-readable ABI signature gas", "value", value);
}
params.gas = BigNumber.from(comps[1]);
return comps[0];
}
return value;
}
function parseModifiers(value, params) {
params.constant = false;
params.payable = false;
params.stateMutability = "nonpayable";
value.split(" ").forEach((modifier) => {
switch (modifier.trim()) {
case "constant":
params.constant = true;
break;
case "payable":
params.payable = true;
params.stateMutability = "payable";
break;
case "pure":
params.constant = true;
params.stateMutability = "pure";
break;
case "view":
params.constant = true;
params.stateMutability = "view";
break;
case "external":
case "public":
case "":
break;
default:
console.log("unknown modifier: " + modifier);
}
});
}
function verifyState(value) {
let result = {
constant: false,
payable: true,
stateMutability: "payable"
};
if (value.stateMutability != null) {
result.stateMutability = value.stateMutability;
// Set (and check things are consistent) the constant property
result.constant = (result.stateMutability === "view" || result.stateMutability === "pure");
if (value.constant != null) {
if ((!!value.constant) !== result.constant) {
logger.throwArgumentError("cannot have constant function with mutability " + result.stateMutability, "value", value);
}
}
// Set (and check things are consistent) the payable property
result.payable = (result.stateMutability === "payable");
if (value.payable != null) {
if ((!!value.payable) !== result.payable) {
logger.throwArgumentError("cannot have payable function with mutability " + result.stateMutability, "value", value);
}
}
}
else if (value.payable != null) {
result.payable = !!value.payable;
// If payable we can assume non-constant; otherwise we can't assume
if (value.constant == null && !result.payable && value.type !== "constructor") {
logger.throwArgumentError("unable to determine stateMutability", "value", value);
}
result.constant = !!value.constant;
if (result.constant) {
result.stateMutability = "view";
}
else {
result.stateMutability = (result.payable ? "payable" : "nonpayable");
}
if (result.payable && result.constant) {
logger.throwArgumentError("cannot have constant payable function", "value", value);
}
}
else if (value.constant != null) {
result.constant = !!value.constant;
result.payable = !result.constant;
result.stateMutability = (result.constant ? "view" : "payable");
}
else if (value.type !== "constructor") {
logger.throwArgumentError("unable to determine stateMutability", "value", value);
}
return result;
}
export class ConstructorFragment extends Fragment {
format(format) {
if (!format) {
format = FormatTypes.sighash;
}
if (!FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === FormatTypes.json) {
return JSON.stringify({
type: "constructor",
stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined),
payble: this.payable,
gas: (this.gas ? this.gas.toNumber() : undefined),
inputs: this.inputs.map((input) => JSON.parse(input.format(format)))
});
}
if (format === FormatTypes.sighash) {
logger.throwError("cannot format a constructor for sighash", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "format(sighash)"
});
}
let result = "constructor(" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? ", " : ",") + ") ";
if (this.stateMutability && this.stateMutability !== "nonpayable") {
result += this.stateMutability + " ";
}
return result.trim();
}
static from(value) {
if (typeof (value) === "string") {
return ConstructorFragment.fromString(value);
}
return ConstructorFragment.fromObject(value);
}
static fromObject(value) {
if (ConstructorFragment.isConstructorFragment(value)) {
return value;
}
if (value.type !== "constructor") {
logger.throwArgumentError("invalid constructor object", "value", value);
}
let state = verifyState(value);
if (state.constant) {
logger.throwArgumentError("constructor cannot be constant", "value", value);
}
const params = {
name: null,
type: value.type,
inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),
payable: state.payable,
stateMutability: state.stateMutability,
gas: (value.gas ? BigNumber.from(value.gas) : null)
};
return new ConstructorFragment(_constructorGuard, params);
}
static fromString(value) {
let params = { type: "constructor" };
value = parseGas(value, params);
let parens = value.match(regexParen);
if (!parens || parens[1].trim() !== "constructor") {
logger.throwArgumentError("invalid constructor string", "value", value);
}
params.inputs = parseParams(parens[2].trim(), false);
parseModifiers(parens[3].trim(), params);
return ConstructorFragment.fromObject(params);
}
static isConstructorFragment(value) {
return (value && value._isFragment && value.type === "constructor");
}
}
export class FunctionFragment extends ConstructorFragment {
format(format) {
if (!format) {
format = FormatTypes.sighash;
}
if (!FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === FormatTypes.json) {
return JSON.stringify({
type: "function",
name: this.name,
constant: this.constant,
stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined),
payble: this.payable,
gas: (this.gas ? this.gas.toNumber() : undefined),
inputs: this.inputs.map((input) => JSON.parse(input.format(format))),
ouputs: this.outputs.map((output) => JSON.parse(output.format(format))),
});
}
let result = "";
if (format !== FormatTypes.sighash) {
result += "function ";
}
result += this.name + "(" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? ", " : ",") + ") ";
if (format !== FormatTypes.sighash) {
if (this.stateMutability) {
if (this.stateMutability !== "nonpayable") {
result += (this.stateMutability + " ");
}
}
else if (this.constant) {
result += "view ";
}
if (this.outputs && this.outputs.length) {
result += "returns (" + this.outputs.map((output) => output.format(format)).join(", ") + ") ";
}
if (this.gas != null) {
result += "@" + this.gas.toString() + " ";
}
}
return result.trim();
}
static from(value) {
if (typeof (value) === "string") {
return FunctionFragment.fromString(value);
}
return FunctionFragment.fromObject(value);
}
static fromObject(value) {
if (FunctionFragment.isFunctionFragment(value)) {
return value;
}
if (value.type !== "function") {
logger.throwArgumentError("invalid function object", "value", value);
}
let state = verifyState(value);
const params = {
type: value.type,
name: verifyIdentifier(value.name),
constant: state.constant,
inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),
outputs: (value.outputs ? value.outputs.map(ParamType.fromObject) : []),
payable: state.payable,
stateMutability: state.stateMutability,
gas: (value.gas ? BigNumber.from(value.gas) : null)
};
return new FunctionFragment(_constructorGuard, params);
}
static fromString(value) {
let params = { type: "function" };
value = parseGas(value, params);
let comps = value.split(" returns ");
if (comps.length > 2) {
logger.throwArgumentError("invalid function string", "value", value);
}
let parens = comps[0].match(regexParen);
if (!parens) {
logger.throwArgumentError("invalid function signature", "value", value);
}
params.name = parens[1].trim();
if (params.name) {
verifyIdentifier(params.name);
}
params.inputs = parseParams(parens[2], false);
parseModifiers(parens[3].trim(), params);
// We have outputs
if (comps.length > 1) {
let returns = comps[1].match(regexParen);
if (returns[1].trim() != "" || returns[3].trim() != "") {
logger.throwArgumentError("unexpected tokens", "value", value);
}
params.outputs = parseParams(returns[2], false);
}
else {
params.outputs = [];
}
return FunctionFragment.fromObject(params);
}
static isFunctionFragment(value) {
return (value && value._isFragment && value.type === "function");
}
}
//export class ErrorFragment extends Fragment {
//}
//export class StructFragment extends Fragment {
//}
function verifyType(type) {
// These need to be transformed to their full description
if (type.match(/^uint($|[^1-9])/)) {
type = "uint256" + type.substring(4);
}
else if (type.match(/^int($|[^1-9])/)) {
type = "int256" + type.substring(3);
}
// @TODO: more verification
return type;
}
const regexIdentifier = new RegExp("^[A-Za-z_][A-Za-z0-9_]*$");
function verifyIdentifier(value) {
if (!value || !value.match(regexIdentifier)) {
logger.throwArgumentError(`invalid identifier "${value}"`, "value", value);
}
return value;
}
const regexParen = new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$");
function splitNesting(value) {
value = value.trim();
let result = [];
let accum = "";
let depth = 0;
for (let offset = 0; offset < value.length; offset++) {
let c = value[offset];
if (c === "," && depth === 0) {
result.push(accum);
accum = "";
}
else {
accum += c;
if (c === "(") {
depth++;
}
else if (c === ")") {
depth--;
if (depth === -1) {
logger.throwArgumentError("unbalanced parenthesis", "value", value);
}
}
}
}
if (accum) {
result.push(accum);
}
return result;
}
-5
View File
@@ -1,5 +0,0 @@
"use strict";
import { ConstructorFragment, EventFragment, FormatTypes, Fragment, FunctionFragment, ParamType } from "./fragments";
import { AbiCoder, defaultAbiCoder } from "./abi-coder";
import { checkResultErrors, Indexed, Interface, LogDescription, TransactionDescription } from "./interface";
export { ConstructorFragment, EventFragment, Fragment, FunctionFragment, ParamType, FormatTypes, AbiCoder, defaultAbiCoder, Interface, Indexed, checkResultErrors, LogDescription, TransactionDescription };
-492
View File
@@ -1,492 +0,0 @@
"use strict";
import { getAddress } from "@ethersproject/address";
import { BigNumber } from "@ethersproject/bignumber";
import { arrayify, concat, hexDataSlice, hexlify, hexZeroPad, isHexString } from "@ethersproject/bytes";
import { id } from "@ethersproject/hash";
import { keccak256 } from "@ethersproject/keccak256";
import { defineReadOnly, Description, getStatic } from "@ethersproject/properties";
import { defaultAbiCoder } from "./abi-coder";
import { checkResultErrors } from "./coders/abstract-coder";
import { ConstructorFragment, EventFragment, FormatTypes, Fragment, FunctionFragment, ParamType } from "./fragments";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
export { checkResultErrors };
export class LogDescription extends Description {
}
export class TransactionDescription extends Description {
}
export class Indexed extends Description {
static isIndexed(value) {
return !!(value && value._isIndexed);
}
}
function wrapAccessError(property, error) {
const wrap = new Error(`deferred error during ABI decoding triggered accessing ${property}`);
wrap.error = error;
return wrap;
}
function checkNames(fragment, type, params) {
params.reduce((accum, param) => {
if (param.name) {
if (accum[param.name]) {
logger.throwArgumentError(`duplicate ${type} parameter ${JSON.stringify(param.name)} in ${fragment.format("full")}`, "fragment", fragment);
}
accum[param.name] = true;
}
return accum;
}, {});
}
export class Interface {
constructor(fragments) {
logger.checkNew(new.target, Interface);
let abi = [];
if (typeof (fragments) === "string") {
abi = JSON.parse(fragments);
}
else {
abi = fragments;
}
defineReadOnly(this, "fragments", abi.map((fragment) => {
return Fragment.from(fragment);
}).filter((fragment) => (fragment != null)));
defineReadOnly(this, "_abiCoder", getStatic((new.target), "getAbiCoder")());
defineReadOnly(this, "functions", {});
defineReadOnly(this, "errors", {});
defineReadOnly(this, "events", {});
defineReadOnly(this, "structs", {});
// Add all fragments by their signature
this.fragments.forEach((fragment) => {
let bucket = null;
switch (fragment.type) {
case "constructor":
if (this.deploy) {
logger.warn("duplicate definition - constructor");
return;
}
checkNames(fragment, "input", fragment.inputs);
defineReadOnly(this, "deploy", fragment);
return;
case "function":
checkNames(fragment, "input", fragment.inputs);
checkNames(fragment, "output", fragment.outputs);
bucket = this.functions;
break;
case "event":
checkNames(fragment, "input", fragment.inputs);
bucket = this.events;
break;
default:
return;
}
let signature = fragment.format();
if (bucket[signature]) {
logger.warn("duplicate definition - " + signature);
return;
}
bucket[signature] = fragment;
});
// If we do not have a constructor add a default
if (!this.deploy) {
defineReadOnly(this, "deploy", ConstructorFragment.from({
payable: false,
type: "constructor"
}));
}
defineReadOnly(this, "_isInterface", true);
}
format(format) {
if (!format) {
format = FormatTypes.full;
}
if (format === FormatTypes.sighash) {
logger.throwArgumentError("interface does not support formatting sighash", "format", format);
}
const abi = this.fragments.map((fragment) => fragment.format(format));
// We need to re-bundle the JSON fragments a bit
if (format === FormatTypes.json) {
return JSON.stringify(abi.map((j) => JSON.parse(j)));
}
return abi;
}
// Sub-classes can override these to handle other blockchains
static getAbiCoder() {
return defaultAbiCoder;
}
static getAddress(address) {
return getAddress(address);
}
static getSighash(functionFragment) {
return hexDataSlice(id(functionFragment.format()), 0, 4);
}
static getEventTopic(eventFragment) {
return id(eventFragment.format());
}
// Find a function definition by any means necessary (unless it is ambiguous)
getFunction(nameOrSignatureOrSighash) {
if (isHexString(nameOrSignatureOrSighash)) {
for (const name in this.functions) {
if (nameOrSignatureOrSighash === this.getSighash(name)) {
return this.functions[name];
}
}
logger.throwArgumentError("no matching function", "sighash", nameOrSignatureOrSighash);
}
// It is a bare name, look up the function (will return null if ambiguous)
if (nameOrSignatureOrSighash.indexOf("(") === -1) {
const name = nameOrSignatureOrSighash.trim();
const matching = Object.keys(this.functions).filter((f) => (f.split("(" /* fix:) */)[0] === name));
if (matching.length === 0) {
logger.throwArgumentError("no matching function", "name", name);
}
else if (matching.length > 1) {
logger.throwArgumentError("multiple matching functions", "name", name);
}
return this.functions[matching[0]];
}
// Normlize the signature and lookup the function
const result = this.functions[FunctionFragment.fromString(nameOrSignatureOrSighash).format()];
if (!result) {
logger.throwArgumentError("no matching function", "signature", nameOrSignatureOrSighash);
}
return result;
}
// Find an event definition by any means necessary (unless it is ambiguous)
getEvent(nameOrSignatureOrTopic) {
if (isHexString(nameOrSignatureOrTopic)) {
const topichash = nameOrSignatureOrTopic.toLowerCase();
for (const name in this.events) {
if (topichash === this.getEventTopic(name)) {
return this.events[name];
}
}
logger.throwArgumentError("no matching event", "topichash", topichash);
}
// It is a bare name, look up the function (will return null if ambiguous)
if (nameOrSignatureOrTopic.indexOf("(") === -1) {
const name = nameOrSignatureOrTopic.trim();
const matching = Object.keys(this.events).filter((f) => (f.split("(" /* fix:) */)[0] === name));
if (matching.length === 0) {
logger.throwArgumentError("no matching event", "name", name);
}
else if (matching.length > 1) {
logger.throwArgumentError("multiple matching events", "name", name);
}
return this.events[matching[0]];
}
// Normlize the signature and lookup the function
const result = this.events[EventFragment.fromString(nameOrSignatureOrTopic).format()];
if (!result) {
logger.throwArgumentError("no matching event", "signature", nameOrSignatureOrTopic);
}
return result;
}
// Get the sighash (the bytes4 selector) used by Solidity to identify a function
getSighash(functionFragment) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
return getStatic(this.constructor, "getSighash")(functionFragment);
}
// Get the topic (the bytes32 hash) used by Solidity to identify an event
getEventTopic(eventFragment) {
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
return getStatic(this.constructor, "getEventTopic")(eventFragment);
}
_decodeParams(params, data) {
return this._abiCoder.decode(params, data);
}
_encodeParams(params, values) {
return this._abiCoder.encode(params, values);
}
encodeDeploy(values) {
return this._encodeParams(this.deploy.inputs, values || []);
}
// Decode the data for a function call (e.g. tx.data)
decodeFunctionData(functionFragment, data) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
const bytes = arrayify(data);
if (hexlify(bytes.slice(0, 4)) !== this.getSighash(functionFragment)) {
logger.throwArgumentError(`data signature does not match function ${functionFragment.name}.`, "data", hexlify(bytes));
}
return this._decodeParams(functionFragment.inputs, bytes.slice(4));
}
// Encode the data for a function call (e.g. tx.data)
encodeFunctionData(functionFragment, values) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
return hexlify(concat([
this.getSighash(functionFragment),
this._encodeParams(functionFragment.inputs, values || [])
]));
}
// Decode the result from a function call (e.g. from eth_call)
decodeFunctionResult(functionFragment, data) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
let bytes = arrayify(data);
let reason = null;
let errorSignature = null;
switch (bytes.length % this._abiCoder._getWordSize()) {
case 0:
try {
return this._abiCoder.decode(functionFragment.outputs, bytes);
}
catch (error) { }
break;
case 4:
if (hexlify(bytes.slice(0, 4)) === "0x08c379a0") {
errorSignature = "Error(string)";
reason = this._abiCoder.decode(["string"], bytes.slice(4))[0];
}
break;
}
return logger.throwError("call revert exception", Logger.errors.CALL_EXCEPTION, {
method: functionFragment.format(),
errorSignature: errorSignature,
errorArgs: [reason],
reason: reason
});
}
// Encode the result for a function call (e.g. for eth_call)
encodeFunctionResult(functionFragment, values) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
return hexlify(this._abiCoder.encode(functionFragment.outputs, values || []));
}
// Create the filter for the event with search criteria (e.g. for eth_filterLog)
encodeFilterTopics(eventFragment, values) {
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
if (values.length > eventFragment.inputs.length) {
logger.throwError("too many arguments for " + eventFragment.format(), Logger.errors.UNEXPECTED_ARGUMENT, {
argument: "values",
value: values
});
}
let topics = [];
if (!eventFragment.anonymous) {
topics.push(this.getEventTopic(eventFragment));
}
const encodeTopic = (param, value) => {
if (param.type === "string") {
return id(value);
}
else if (param.type === "bytes") {
return keccak256(hexlify(value));
}
// Check addresses are valid
if (param.type === "address") {
this._abiCoder.encode(["address"], [value]);
}
return hexZeroPad(hexlify(value), 32);
};
values.forEach((value, index) => {
let param = eventFragment.inputs[index];
if (!param.indexed) {
if (value != null) {
logger.throwArgumentError("cannot filter non-indexed parameters; must be null", ("contract." + param.name), value);
}
return;
}
if (value == null) {
topics.push(null);
}
else if (param.baseType === "array" || param.baseType === "tuple") {
logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value);
}
else if (Array.isArray(value)) {
topics.push(value.map((value) => encodeTopic(param, value)));
}
else {
topics.push(encodeTopic(param, value));
}
});
// Trim off trailing nulls
while (topics.length && topics[topics.length - 1] === null) {
topics.pop();
}
return topics;
}
encodeEventLog(eventFragment, values) {
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
const topics = [];
const dataTypes = [];
const dataValues = [];
if (!eventFragment.anonymous) {
topics.push(this.getEventTopic(eventFragment));
}
if (values.length !== eventFragment.inputs.length) {
logger.throwArgumentError("event arguments/values mismatch", "values", values);
}
eventFragment.inputs.forEach((param, index) => {
const value = values[index];
if (param.indexed) {
if (param.type === "string") {
topics.push(id(value));
}
else if (param.type === "bytes") {
topics.push(keccak256(value));
}
else if (param.baseType === "tuple" || param.baseType === "array") {
// @TOOD
throw new Error("not implemented");
}
else {
topics.push(this._abiCoder.encode([param.type], [value]));
}
}
else {
dataTypes.push(param);
dataValues.push(value);
}
});
return {
data: this._abiCoder.encode(dataTypes, dataValues),
topics: topics
};
}
// Decode a filter for the event and the search criteria
decodeEventLog(eventFragment, data, topics) {
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
if (topics != null && !eventFragment.anonymous) {
let topicHash = this.getEventTopic(eventFragment);
if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== topicHash) {
logger.throwError("fragment/topic mismatch", Logger.errors.INVALID_ARGUMENT, { argument: "topics[0]", expected: topicHash, value: topics[0] });
}
topics = topics.slice(1);
}
let indexed = [];
let nonIndexed = [];
let dynamic = [];
eventFragment.inputs.forEach((param, index) => {
if (param.indexed) {
if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") {
indexed.push(ParamType.fromObject({ type: "bytes32", name: param.name }));
dynamic.push(true);
}
else {
indexed.push(param);
dynamic.push(false);
}
}
else {
nonIndexed.push(param);
dynamic.push(false);
}
});
let resultIndexed = (topics != null) ? this._abiCoder.decode(indexed, concat(topics)) : null;
let resultNonIndexed = this._abiCoder.decode(nonIndexed, data);
let result = [];
let nonIndexedIndex = 0, indexedIndex = 0;
eventFragment.inputs.forEach((param, index) => {
if (param.indexed) {
if (resultIndexed == null) {
result[index] = new Indexed({ _isIndexed: true, hash: null });
}
else if (dynamic[index]) {
result[index] = new Indexed({ _isIndexed: true, hash: resultIndexed[indexedIndex++] });
}
else {
try {
result[index] = resultIndexed[indexedIndex++];
}
catch (error) {
result[index] = error;
}
}
}
else {
try {
result[index] = resultNonIndexed[nonIndexedIndex++];
}
catch (error) {
result[index] = error;
}
}
// Add the keyword argument if named and safe
if (param.name && result[param.name] == null) {
const value = result[index];
// Make error named values throw on access
if (value instanceof Error) {
Object.defineProperty(result, param.name, {
get: () => { throw wrapAccessError(`property ${JSON.stringify(param.name)}`, value); }
});
}
else {
result[param.name] = value;
}
}
});
// Make all error indexed values throw on access
for (let i = 0; i < result.length; i++) {
const value = result[i];
if (value instanceof Error) {
Object.defineProperty(result, i, {
get: () => { throw wrapAccessError(`index ${i}`, value); }
});
}
}
return Object.freeze(result);
}
// Given a transaction, find the matching function fragment (if any) and
// determine all its properties and call parameters
parseTransaction(tx) {
let fragment = this.getFunction(tx.data.substring(0, 10).toLowerCase());
if (!fragment) {
return null;
}
return new TransactionDescription({
args: this._abiCoder.decode(fragment.inputs, "0x" + tx.data.substring(10)),
functionFragment: fragment,
name: fragment.name,
signature: fragment.format(),
sighash: this.getSighash(fragment),
value: BigNumber.from(tx.value || "0"),
});
}
// Given an event log, find the matching event fragment (if any) and
// determine all its properties and values
parseLog(log) {
let fragment = this.getEvent(log.topics[0]);
if (!fragment || fragment.anonymous) {
return null;
}
// @TODO: If anonymous, and the only method, and the input count matches, should we parse?
// Probably not, because just because it is the only event in the ABI does
// not mean we have the full ABI; maybe jsut a fragment?
return new LogDescription({
eventFragment: fragment,
name: fragment.name,
signature: fragment.format(),
topic: this.getEventTopic(fragment),
args: this.decodeEventLog(fragment, log.data, log.topics)
});
}
/*
static from(value: Array<Fragment | string | JsonAbi> | string | Interface) {
if (Interface.isInterface(value)) {
return value;
}
if (typeof(value) === "string") {
return new Interface(JSON.parse(value));
}
return new Interface(value);
}
*/
static isInterface(value) {
return !!(value && value._isInterface);
}
}
-3
View File
@@ -1,3 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "abi/5.0.0-beta.153";
-98
View File
@@ -1,98 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI
var bytes_1 = require("@ethersproject/bytes");
var properties_1 = require("@ethersproject/properties");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
var abstract_coder_1 = require("./coders/abstract-coder");
var address_1 = require("./coders/address");
var array_1 = require("./coders/array");
var boolean_1 = require("./coders/boolean");
var bytes_2 = require("./coders/bytes");
var fixed_bytes_1 = require("./coders/fixed-bytes");
var null_1 = require("./coders/null");
var number_1 = require("./coders/number");
var string_1 = require("./coders/string");
var tuple_1 = require("./coders/tuple");
var fragments_1 = require("./fragments");
var paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);
var paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);
var AbiCoder = /** @class */ (function () {
function AbiCoder(coerceFunc) {
var _newTarget = this.constructor;
logger.checkNew(_newTarget, AbiCoder);
properties_1.defineReadOnly(this, "coerceFunc", coerceFunc || null);
}
AbiCoder.prototype._getCoder = function (param) {
var _this = this;
switch (param.baseType) {
case "address":
return new address_1.AddressCoder(param.name);
case "bool":
return new boolean_1.BooleanCoder(param.name);
case "string":
return new string_1.StringCoder(param.name);
case "bytes":
return new bytes_2.BytesCoder(param.name);
case "array":
return new array_1.ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);
case "tuple":
return new tuple_1.TupleCoder((param.components || []).map(function (component) {
return _this._getCoder(component);
}), param.name);
case "":
return new null_1.NullCoder(param.name);
}
// u?int[0-9]*
var match = param.type.match(paramTypeNumber);
if (match) {
var size = parseInt(match[2] || "256");
if (size === 0 || size > 256 || (size % 8) !== 0) {
logger.throwArgumentError("invalid " + match[1] + " bit length", "param", param);
}
return new number_1.NumberCoder(size / 8, (match[1] === "int"), param.name);
}
// bytes[0-9]+
match = param.type.match(paramTypeBytes);
if (match) {
var size = parseInt(match[1]);
if (size === 0 || size > 32) {
logger.throwArgumentError("invalid bytes length", "param", param);
}
return new fixed_bytes_1.FixedBytesCoder(size, param.name);
}
return logger.throwArgumentError("invalid type", "type", param.type);
};
AbiCoder.prototype._getWordSize = function () { return 32; };
AbiCoder.prototype._getReader = function (data) {
return new abstract_coder_1.Reader(data, this._getWordSize(), this.coerceFunc);
};
AbiCoder.prototype._getWriter = function () {
return new abstract_coder_1.Writer(this._getWordSize());
};
AbiCoder.prototype.encode = function (types, values) {
var _this = this;
if (types.length !== values.length) {
logger.throwError("types/values length mismatch", logger_1.Logger.errors.INVALID_ARGUMENT, {
count: { types: types.length, values: values.length },
value: { types: types, values: values }
});
}
var coders = types.map(function (type) { return _this._getCoder(fragments_1.ParamType.from(type)); });
var coder = (new tuple_1.TupleCoder(coders, "_"));
var writer = this._getWriter();
coder.encode(writer, values);
return writer.data;
};
AbiCoder.prototype.decode = function (types, data) {
var _this = this;
var coders = types.map(function (type) { return _this._getCoder(fragments_1.ParamType.from(type)); });
var coder = new tuple_1.TupleCoder(coders, "_");
return coder.decode(this._getReader(bytes_1.arrayify(data)));
};
return AbiCoder;
}());
exports.AbiCoder = AbiCoder;
exports.defaultAbiCoder = new AbiCoder();
-156
View File
@@ -1,156 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var bytes_1 = require("@ethersproject/bytes");
var bignumber_1 = require("@ethersproject/bignumber");
var properties_1 = require("@ethersproject/properties");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("../_version");
var logger = new logger_1.Logger(_version_1.version);
function checkResultErrors(result) {
// Find the first error (if any)
var errors = [];
var checkErrors = function (path, object) {
if (!Array.isArray(object)) {
return;
}
for (var key in object) {
var childPath = path.slice();
childPath.push(key);
try {
checkErrors(childPath, object[key]);
}
catch (error) {
errors.push({ path: childPath, error: error });
}
}
};
checkErrors([], result);
return errors;
}
exports.checkResultErrors = checkResultErrors;
var Coder = /** @class */ (function () {
function Coder(name, type, localName, dynamic) {
// @TODO: defineReadOnly these
this.name = name;
this.type = type;
this.localName = localName;
this.dynamic = dynamic;
}
Coder.prototype._throwError = function (message, value) {
logger.throwArgumentError(message, this.localName, value);
};
return Coder;
}());
exports.Coder = Coder;
var Writer = /** @class */ (function () {
function Writer(wordSize) {
properties_1.defineReadOnly(this, "wordSize", wordSize || 32);
this._data = bytes_1.arrayify([]);
this._padding = new Uint8Array(wordSize);
}
Object.defineProperty(Writer.prototype, "data", {
get: function () { return bytes_1.hexlify(this._data); },
enumerable: true,
configurable: true
});
Object.defineProperty(Writer.prototype, "length", {
get: function () { return this._data.length; },
enumerable: true,
configurable: true
});
Writer.prototype._writeData = function (data) {
this._data = bytes_1.concat([this._data, data]);
return data.length;
};
// Arrayish items; padded on the right to wordSize
Writer.prototype.writeBytes = function (value) {
var bytes = bytes_1.arrayify(value);
if (bytes.length % this.wordSize) {
bytes = bytes_1.concat([bytes, this._padding.slice(bytes.length % this.wordSize)]);
}
return this._writeData(bytes);
};
Writer.prototype._getValue = function (value) {
var bytes = bytes_1.arrayify(bignumber_1.BigNumber.from(value));
if (bytes.length > this.wordSize) {
logger.throwError("value out-of-bounds", logger_1.Logger.errors.BUFFER_OVERRUN, {
length: this.wordSize,
offset: bytes.length
});
}
if (bytes.length % this.wordSize) {
bytes = bytes_1.concat([this._padding.slice(bytes.length % this.wordSize), bytes]);
}
return bytes;
};
// BigNumberish items; padded on the left to wordSize
Writer.prototype.writeValue = function (value) {
return this._writeData(this._getValue(value));
};
Writer.prototype.writeUpdatableValue = function () {
var _this = this;
var offset = this.length;
this.writeValue(0);
return function (value) {
_this._data.set(_this._getValue(value), offset);
};
};
return Writer;
}());
exports.Writer = Writer;
var Reader = /** @class */ (function () {
function Reader(data, wordSize, coerceFunc) {
properties_1.defineReadOnly(this, "_data", bytes_1.arrayify(data));
properties_1.defineReadOnly(this, "wordSize", wordSize || 32);
properties_1.defineReadOnly(this, "_coerceFunc", coerceFunc);
this._offset = 0;
}
Object.defineProperty(Reader.prototype, "data", {
get: function () { return bytes_1.hexlify(this._data); },
enumerable: true,
configurable: true
});
Object.defineProperty(Reader.prototype, "consumed", {
get: function () { return this._offset; },
enumerable: true,
configurable: true
});
// The default Coerce function
Reader.coerce = function (name, value) {
var match = name.match("^u?int([0-9]+)$");
if (match && parseInt(match[1]) <= 48) {
value = value.toNumber();
}
return value;
};
Reader.prototype.coerce = function (name, value) {
if (this._coerceFunc) {
return this._coerceFunc(name, value);
}
return Reader.coerce(name, value);
};
Reader.prototype._peekBytes = function (offset, length) {
var alignedLength = Math.ceil(length / this.wordSize) * this.wordSize;
if (this._offset + alignedLength > this._data.length) {
logger.throwError("data out-of-bounds", logger_1.Logger.errors.BUFFER_OVERRUN, {
length: this._data.length,
offset: this._offset + alignedLength
});
}
return this._data.slice(this._offset, this._offset + alignedLength);
};
Reader.prototype.subReader = function (offset) {
return new Reader(this._data.slice(this._offset + offset), this.wordSize, this._coerceFunc);
};
Reader.prototype.readBytes = function (length) {
var bytes = this._peekBytes(0, length);
this._offset += bytes.length;
// @TODO: Make sure the length..end bytes are all 0?
return bytes.slice(0, length);
};
Reader.prototype.readValue = function () {
return bignumber_1.BigNumber.from(this.readBytes(this.wordSize));
};
return Reader;
}());
exports.Reader = Reader;
-38
View File
@@ -1,38 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var address_1 = require("@ethersproject/address");
var bytes_1 = require("@ethersproject/bytes");
var abstract_coder_1 = require("./abstract-coder");
var AddressCoder = /** @class */ (function (_super) {
__extends(AddressCoder, _super);
function AddressCoder(localName) {
return _super.call(this, "address", "address", localName, false) || this;
}
AddressCoder.prototype.encode = function (writer, value) {
try {
address_1.getAddress(value);
}
catch (error) {
this._throwError(error.message, value);
}
return writer.writeValue(value);
};
AddressCoder.prototype.decode = function (reader) {
return address_1.getAddress(bytes_1.hexZeroPad(reader.readValue().toHexString(), 20));
};
return AddressCoder;
}(abstract_coder_1.Coder));
exports.AddressCoder = AddressCoder;
-33
View File
@@ -1,33 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var abstract_coder_1 = require("./abstract-coder");
// Clones the functionality of an existing Coder, but without a localName
var AnonymousCoder = /** @class */ (function (_super) {
__extends(AnonymousCoder, _super);
function AnonymousCoder(coder) {
var _this = _super.call(this, coder.name, coder.type, undefined, coder.dynamic) || this;
_this.coder = coder;
return _this;
}
AnonymousCoder.prototype.encode = function (writer, value) {
return this.coder.encode(writer, value);
};
AnonymousCoder.prototype.decode = function (reader) {
return this.coder.decode(reader);
};
return AnonymousCoder;
}(abstract_coder_1.Coder));
exports.AnonymousCoder = AnonymousCoder;
-189
View File
@@ -1,189 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("../_version");
var logger = new logger_1.Logger(_version_1.version);
var abstract_coder_1 = require("./abstract-coder");
var anonymous_1 = require("./anonymous");
function pack(writer, coders, values) {
if (Array.isArray(values)) {
// do nothing
}
else if (values && typeof (values) === "object") {
var arrayValues_1 = [];
coders.forEach(function (coder) {
arrayValues_1.push(values[coder.localName]);
});
values = arrayValues_1;
}
else {
logger.throwArgumentError("invalid tuple value", "tuple", values);
}
if (coders.length !== values.length) {
logger.throwArgumentError("types/value length mismatch", "tuple", values);
}
var staticWriter = new abstract_coder_1.Writer(writer.wordSize);
var dynamicWriter = new abstract_coder_1.Writer(writer.wordSize);
var updateFuncs = [];
coders.forEach(function (coder, index) {
var value = values[index];
if (coder.dynamic) {
// Get current dynamic offset (for the future pointer)
var dynamicOffset_1 = dynamicWriter.length;
// Encode the dynamic value into the dynamicWriter
coder.encode(dynamicWriter, value);
// Prepare to populate the correct offset once we are done
var updateFunc_1 = staticWriter.writeUpdatableValue();
updateFuncs.push(function (baseOffset) {
updateFunc_1(baseOffset + dynamicOffset_1);
});
}
else {
coder.encode(staticWriter, value);
}
});
// Backfill all the dynamic offsets, now that we know the static length
updateFuncs.forEach(function (func) { func(staticWriter.length); });
var length = writer.writeBytes(staticWriter.data);
length += writer.writeBytes(dynamicWriter.data);
return length;
}
exports.pack = pack;
function unpack(reader, coders) {
var values = [];
// A reader anchored to this base
var baseReader = reader.subReader(0);
// The amount of dynamic data read; to consume later to synchronize
var dynamicLength = 0;
coders.forEach(function (coder) {
var value = null;
if (coder.dynamic) {
var offset = reader.readValue();
var offsetReader = baseReader.subReader(offset.toNumber());
try {
value = coder.decode(offsetReader);
}
catch (error) {
// Cannot recover from this
if (error.code === logger_1.Logger.errors.BUFFER_OVERRUN) {
throw error;
}
value = error;
value.baseType = coder.name;
value.name = coder.localName;
value.type = coder.type;
}
dynamicLength += offsetReader.consumed;
}
else {
try {
value = coder.decode(reader);
}
catch (error) {
// Cannot recover from this
if (error.code === logger_1.Logger.errors.BUFFER_OVERRUN) {
throw error;
}
value = error;
value.baseType = coder.name;
value.name = coder.localName;
value.type = coder.type;
}
}
if (value != undefined) {
values.push(value);
}
});
// @TODO: get rid of this an see if it still works?
// Consume the dynamic components in the main reader
reader.readBytes(dynamicLength);
// Add any named parameters (i.e. tuples)
coders.forEach(function (coder, index) {
var name = coder.localName;
if (!name) {
return;
}
if (name === "length") {
name = "_length";
}
if (values[name] != null) {
return;
}
var value = values[index];
if (value instanceof Error) {
Object.defineProperty(values, name, {
get: function () { throw value; }
});
}
else {
values[name] = value;
}
});
var _loop_1 = function (i) {
var value = values[i];
if (value instanceof Error) {
Object.defineProperty(values, i, {
get: function () { throw value; }
});
}
};
for (var i = 0; i < values.length; i++) {
_loop_1(i);
}
return Object.freeze(values);
}
exports.unpack = unpack;
var ArrayCoder = /** @class */ (function (_super) {
__extends(ArrayCoder, _super);
function ArrayCoder(coder, length, localName) {
var _this = this;
var type = (coder.type + "[" + (length >= 0 ? length : "") + "]");
var dynamic = (length === -1 || coder.dynamic);
_this = _super.call(this, "array", type, localName, dynamic) || this;
_this.coder = coder;
_this.length = length;
return _this;
}
ArrayCoder.prototype.encode = function (writer, value) {
if (!Array.isArray(value)) {
this._throwError("expected array value", value);
}
var count = this.length;
if (count === -1) {
count = value.length;
writer.writeValue(value.length);
}
logger.checkArgumentCount(count, value.length, "coder array" + (this.localName ? (" " + this.localName) : ""));
var coders = [];
for (var i = 0; i < value.length; i++) {
coders.push(this.coder);
}
return pack(writer, coders, value);
};
ArrayCoder.prototype.decode = function (reader) {
var count = this.length;
if (count === -1) {
count = reader.readValue().toNumber();
}
var coders = [];
for (var i = 0; i < count; i++) {
coders.push(new anonymous_1.AnonymousCoder(this.coder));
}
return reader.coerce(this.name, unpack(reader, coders));
};
return ArrayCoder;
}(abstract_coder_1.Coder));
exports.ArrayCoder = ArrayCoder;
-30
View File
@@ -1,30 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var abstract_coder_1 = require("./abstract-coder");
var BooleanCoder = /** @class */ (function (_super) {
__extends(BooleanCoder, _super);
function BooleanCoder(localName) {
return _super.call(this, "bool", "bool", localName, false) || this;
}
BooleanCoder.prototype.encode = function (writer, value) {
return writer.writeValue(value ? 1 : 0);
};
BooleanCoder.prototype.decode = function (reader) {
return reader.coerce(this.type, !reader.readValue().isZero());
};
return BooleanCoder;
}(abstract_coder_1.Coder));
exports.BooleanCoder = BooleanCoder;
-45
View File
@@ -1,45 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var bytes_1 = require("@ethersproject/bytes");
var abstract_coder_1 = require("./abstract-coder");
var DynamicBytesCoder = /** @class */ (function (_super) {
__extends(DynamicBytesCoder, _super);
function DynamicBytesCoder(type, localName) {
return _super.call(this, type, type, localName, true) || this;
}
DynamicBytesCoder.prototype.encode = function (writer, value) {
value = bytes_1.arrayify(value);
var length = writer.writeValue(value.length);
length += writer.writeBytes(value);
return length;
};
DynamicBytesCoder.prototype.decode = function (reader) {
return reader.readBytes(reader.readValue().toNumber());
};
return DynamicBytesCoder;
}(abstract_coder_1.Coder));
exports.DynamicBytesCoder = DynamicBytesCoder;
var BytesCoder = /** @class */ (function (_super) {
__extends(BytesCoder, _super);
function BytesCoder(localName) {
return _super.call(this, "bytes", localName) || this;
}
BytesCoder.prototype.decode = function (reader) {
return reader.coerce(this.name, bytes_1.hexlify(_super.prototype.decode.call(this, reader)));
};
return BytesCoder;
}(DynamicBytesCoder));
exports.BytesCoder = BytesCoder;
-40
View File
@@ -1,40 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var bytes_1 = require("@ethersproject/bytes");
var abstract_coder_1 = require("./abstract-coder");
// @TODO: Merge this with bytes
var FixedBytesCoder = /** @class */ (function (_super) {
__extends(FixedBytesCoder, _super);
function FixedBytesCoder(size, localName) {
var _this = this;
var name = "bytes" + String(size);
_this = _super.call(this, name, name, localName, false) || this;
_this.size = size;
return _this;
}
FixedBytesCoder.prototype.encode = function (writer, value) {
var data = bytes_1.arrayify(value);
if (data.length !== this.size) {
this._throwError("incorrect data length", value);
}
return writer.writeBytes(data);
};
FixedBytesCoder.prototype.decode = function (reader) {
return reader.coerce(this.name, bytes_1.hexlify(reader.readBytes(this.size)));
};
return FixedBytesCoder;
}(abstract_coder_1.Coder));
exports.FixedBytesCoder = FixedBytesCoder;
-34
View File
@@ -1,34 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var abstract_coder_1 = require("./abstract-coder");
var NullCoder = /** @class */ (function (_super) {
__extends(NullCoder, _super);
function NullCoder(localName) {
return _super.call(this, "null", "", localName, false) || this;
}
NullCoder.prototype.encode = function (writer, value) {
if (value != null) {
this._throwError("not null", value);
}
return writer.writeBytes([]);
};
NullCoder.prototype.decode = function (reader) {
reader.readBytes(0);
return reader.coerce(this.name, null);
};
return NullCoder;
}(abstract_coder_1.Coder));
exports.NullCoder = NullCoder;
-57
View File
@@ -1,57 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var bignumber_1 = require("@ethersproject/bignumber");
var constants_1 = require("@ethersproject/constants");
var abstract_coder_1 = require("./abstract-coder");
var NumberCoder = /** @class */ (function (_super) {
__extends(NumberCoder, _super);
function NumberCoder(size, signed, localName) {
var _this = this;
var name = ((signed ? "int" : "uint") + (size * 8));
_this = _super.call(this, name, name, localName, false) || this;
_this.size = size;
_this.signed = signed;
return _this;
}
NumberCoder.prototype.encode = function (writer, value) {
var v = bignumber_1.BigNumber.from(value);
// Check bounds are safe for encoding
var maxUintValue = constants_1.MaxUint256.mask(writer.wordSize * 8);
if (this.signed) {
var bounds = maxUintValue.mask(this.size * 8 - 1);
if (v.gt(bounds) || v.lt(bounds.add(constants_1.One).mul(constants_1.NegativeOne))) {
this._throwError("value out-of-bounds", value);
}
}
else if (v.lt(constants_1.Zero) || v.gt(maxUintValue.mask(this.size * 8))) {
this._throwError("value out-of-bounds", value);
}
v = v.toTwos(this.size * 8).mask(this.size * 8);
if (this.signed) {
v = v.fromTwos(this.size * 8).toTwos(8 * writer.wordSize);
}
return writer.writeValue(v);
};
NumberCoder.prototype.decode = function (reader) {
var value = reader.readValue().mask(this.size * 8);
if (this.signed) {
value = value.fromTwos(this.size * 8);
}
return reader.coerce(this.name, value);
};
return NumberCoder;
}(abstract_coder_1.Coder));
exports.NumberCoder = NumberCoder;
-31
View File
@@ -1,31 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var strings_1 = require("@ethersproject/strings");
var bytes_1 = require("./bytes");
var StringCoder = /** @class */ (function (_super) {
__extends(StringCoder, _super);
function StringCoder(localName) {
return _super.call(this, "string", localName) || this;
}
StringCoder.prototype.encode = function (writer, value) {
return _super.prototype.encode.call(this, writer, strings_1.toUtf8Bytes(value));
};
StringCoder.prototype.decode = function (reader) {
return strings_1.toUtf8String(_super.prototype.decode.call(this, reader));
};
return StringCoder;
}(bytes_1.DynamicBytesCoder));
exports.StringCoder = StringCoder;
-43
View File
@@ -1,43 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var abstract_coder_1 = require("./abstract-coder");
var array_1 = require("./array");
var TupleCoder = /** @class */ (function (_super) {
__extends(TupleCoder, _super);
function TupleCoder(coders, localName) {
var _this = this;
var dynamic = false;
var types = [];
coders.forEach(function (coder) {
if (coder.dynamic) {
dynamic = true;
}
types.push(coder.type);
});
var type = ("tuple(" + types.join(",") + ")");
_this = _super.call(this, "tuple", type, localName, dynamic) || this;
_this.coders = coders;
return _this;
}
TupleCoder.prototype.encode = function (writer, value) {
return array_1.pack(writer, this.coders, value);
};
TupleCoder.prototype.decode = function (reader) {
return reader.coerce(this.name, array_1.unpack(reader, this.coders));
};
return TupleCoder;
}(abstract_coder_1.Coder));
exports.TupleCoder = TupleCoder;
-816
View File
@@ -1,816 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var bignumber_1 = require("@ethersproject/bignumber");
var properties_1 = require("@ethersproject/properties");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
;
var _constructorGuard = {};
var ModifiersBytes = { calldata: true, memory: true, storage: true };
var ModifiersNest = { calldata: true, memory: true };
function checkModifier(type, name) {
if (type === "bytes" || type === "string") {
if (ModifiersBytes[name]) {
return true;
}
}
else if (type === "address") {
if (name === "payable") {
return true;
}
}
else if (type.indexOf("[") >= 0 || type === "tuple") {
if (ModifiersNest[name]) {
return true;
}
}
if (ModifiersBytes[name] || name === "payable") {
logger.throwArgumentError("invalid modifier", "name", name);
}
return false;
}
// @TODO: Make sure that children of an indexed tuple are marked with a null indexed
function parseParamType(param, allowIndexed) {
var originalParam = param;
function throwError(i) {
logger.throwArgumentError("unexpected character at position " + i, "param", param);
}
param = param.replace(/\s/g, " ");
function newNode(parent) {
var node = { type: "", name: "", parent: parent, state: { allowType: true } };
if (allowIndexed) {
node.indexed = false;
}
return node;
}
var parent = { type: "", name: "", state: { allowType: true } };
var node = parent;
for (var i = 0; i < param.length; i++) {
var c = param[i];
switch (c) {
case "(":
if (node.state.allowType && node.type === "") {
node.type = "tuple";
}
else if (!node.state.allowParams) {
throwError(i);
}
node.state.allowType = false;
node.type = verifyType(node.type);
node.components = [newNode(node)];
node = node.components[0];
break;
case ")":
delete node.state;
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(i);
}
node.indexed = true;
node.name = "";
}
if (checkModifier(node.type, node.name)) {
node.name = "";
}
node.type = verifyType(node.type);
var child = node;
node = node.parent;
if (!node) {
throwError(i);
}
delete child.parent;
node.state.allowParams = false;
node.state.allowName = true;
node.state.allowArray = true;
break;
case ",":
delete node.state;
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(i);
}
node.indexed = true;
node.name = "";
}
if (checkModifier(node.type, node.name)) {
node.name = "";
}
node.type = verifyType(node.type);
var sibling = newNode(node.parent);
//{ type: "", name: "", parent: node.parent, state: { allowType: true } };
node.parent.components.push(sibling);
delete node.parent;
node = sibling;
break;
// Hit a space...
case " ":
// If reading type, the type is done and may read a param or name
if (node.state.allowType) {
if (node.type !== "") {
node.type = verifyType(node.type);
delete node.state.allowType;
node.state.allowName = true;
node.state.allowParams = true;
}
}
// If reading name, the name is done
if (node.state.allowName) {
if (node.name !== "") {
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(i);
}
if (node.indexed) {
throwError(i);
}
node.indexed = true;
node.name = "";
}
else if (checkModifier(node.type, node.name)) {
node.name = "";
}
else {
node.state.allowName = false;
}
}
}
break;
case "[":
if (!node.state.allowArray) {
throwError(i);
}
node.type += c;
node.state.allowArray = false;
node.state.allowName = false;
node.state.readArray = true;
break;
case "]":
if (!node.state.readArray) {
throwError(i);
}
node.type += c;
node.state.readArray = false;
node.state.allowArray = true;
node.state.allowName = true;
break;
default:
if (node.state.allowType) {
node.type += c;
node.state.allowParams = true;
node.state.allowArray = true;
}
else if (node.state.allowName) {
node.name += c;
delete node.state.allowArray;
}
else if (node.state.readArray) {
node.type += c;
}
else {
throwError(i);
}
}
}
if (node.parent) {
logger.throwArgumentError("unexpected eof", "param", param);
}
delete parent.state;
if (node.name === "indexed") {
if (!allowIndexed) {
throwError(originalParam.length - 7);
}
if (node.indexed) {
throwError(originalParam.length - 7);
}
node.indexed = true;
node.name = "";
}
else if (checkModifier(node.type, node.name)) {
node.name = "";
}
parent.type = verifyType(parent.type);
return parent;
}
function populate(object, params) {
for (var key in params) {
properties_1.defineReadOnly(object, key, params[key]);
}
}
exports.FormatTypes = Object.freeze({
// Bare formatting, as is needed for computing a sighash of an event or function
sighash: "sighash",
// Human-Readable with Minimal spacing and without names (compact human-readable)
minimal: "minimal",
// Human-Readble with nice spacing, including all names
full: "full",
// JSON-format a la Solidity
json: "json"
});
var paramTypeArray = new RegExp(/^(.*)\[([0-9]*)\]$/);
var ParamType = /** @class */ (function () {
function ParamType(constructorGuard, params) {
if (constructorGuard !== _constructorGuard) {
logger.throwError("use fromString", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new ParamType()"
});
}
populate(this, params);
var match = this.type.match(paramTypeArray);
if (match) {
populate(this, {
arrayLength: parseInt(match[2] || "-1"),
arrayChildren: ParamType.fromObject({
type: match[1],
components: this.components
}),
baseType: "array"
});
}
else {
populate(this, {
arrayLength: null,
arrayChildren: null,
baseType: ((this.components != null) ? "tuple" : this.type)
});
}
this._isParamType = true;
Object.freeze(this);
}
// Format the parameter fragment
// - sighash: "(uint256,address)"
// - minimal: "tuple(uint256,address) indexed"
// - full: "tuple(uint256 foo, addres bar) indexed baz"
ParamType.prototype.format = function (format) {
if (!format) {
format = exports.FormatTypes.sighash;
}
if (!exports.FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === exports.FormatTypes.json) {
var result_1 = {
type: ((this.baseType === "tuple") ? "tuple" : this.type),
name: (this.name || undefined)
};
if (typeof (this.indexed) === "boolean") {
result_1.indexed = this.indexed;
}
if (this.components) {
result_1.components = this.components.map(function (comp) { return JSON.parse(comp.format(format)); });
}
return JSON.stringify(result_1);
}
var result = "";
// Array
if (this.baseType === "array") {
result += this.arrayChildren.format(format);
result += "[" + (this.arrayLength < 0 ? "" : String(this.arrayLength)) + "]";
}
else {
if (this.baseType === "tuple") {
if (format !== exports.FormatTypes.sighash) {
result += this.type;
}
result += "(" + this.components.map(function (comp) { return comp.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ")";
}
else {
result += this.type;
}
}
if (format !== exports.FormatTypes.sighash) {
if (this.indexed === true) {
result += " indexed";
}
if (format === exports.FormatTypes.full && this.name) {
result += " " + this.name;
}
}
return result;
};
ParamType.from = function (value, allowIndexed) {
if (typeof (value) === "string") {
return ParamType.fromString(value, allowIndexed);
}
return ParamType.fromObject(value);
};
ParamType.fromObject = function (value) {
if (ParamType.isParamType(value)) {
return value;
}
return new ParamType(_constructorGuard, {
name: (value.name || null),
type: verifyType(value.type),
indexed: ((value.indexed == null) ? null : !!value.indexed),
components: (value.components ? value.components.map(ParamType.fromObject) : null)
});
};
ParamType.fromString = function (value, allowIndexed) {
function ParamTypify(node) {
return ParamType.fromObject({
name: node.name,
type: node.type,
indexed: node.indexed,
components: node.components
});
}
return ParamTypify(parseParamType(value, !!allowIndexed));
};
ParamType.isParamType = function (value) {
return !!(value != null && value._isParamType);
};
return ParamType;
}());
exports.ParamType = ParamType;
;
function parseParams(value, allowIndex) {
return splitNesting(value).map(function (param) { return ParamType.fromString(param, allowIndex); });
}
var Fragment = /** @class */ (function () {
function Fragment(constructorGuard, params) {
if (constructorGuard !== _constructorGuard) {
logger.throwError("use a static from method", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new Fragment()"
});
}
populate(this, params);
this._isFragment = true;
Object.freeze(this);
}
Fragment.from = function (value) {
if (Fragment.isFragment(value)) {
return value;
}
if (typeof (value) === "string") {
return Fragment.fromString(value);
}
return Fragment.fromObject(value);
};
Fragment.fromObject = function (value) {
if (Fragment.isFragment(value)) {
return value;
}
switch (value.type) {
case "function":
return FunctionFragment.fromObject(value);
case "event":
return EventFragment.fromObject(value);
case "constructor":
return ConstructorFragment.fromObject(value);
case "fallback":
case "receive":
// @TODO: Something? Maybe return a FunctionFragment? A custom DefaultFunctionFragment?
return null;
}
return logger.throwArgumentError("invalid fragment object", "value", value);
};
Fragment.fromString = function (value) {
// Make sure the "returns" is surrounded by a space and all whitespace is exactly one space
value = value.replace(/\s/g, " ");
value = value.replace(/\(/g, " (").replace(/\)/g, ") ").replace(/\s+/g, " ");
value = value.trim();
if (value.split(" ")[0] === "event") {
return EventFragment.fromString(value.substring(5).trim());
}
else if (value.split(" ")[0] === "function") {
return FunctionFragment.fromString(value.substring(8).trim());
}
else if (value.split("(")[0].trim() === "constructor") {
return ConstructorFragment.fromString(value.trim());
}
return logger.throwArgumentError("unsupported fragment", "value", value);
};
Fragment.isFragment = function (value) {
return !!(value && value._isFragment);
};
return Fragment;
}());
exports.Fragment = Fragment;
var EventFragment = /** @class */ (function (_super) {
__extends(EventFragment, _super);
function EventFragment() {
return _super !== null && _super.apply(this, arguments) || this;
}
EventFragment.prototype.format = function (format) {
if (!format) {
format = exports.FormatTypes.sighash;
}
if (!exports.FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === exports.FormatTypes.json) {
return JSON.stringify({
type: "event",
anonymous: this.anonymous,
name: this.name,
inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); })
});
}
var result = "";
if (format !== exports.FormatTypes.sighash) {
result += "event ";
}
result += this.name + "(" + this.inputs.map(function (input) { return input.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ") ";
if (format !== exports.FormatTypes.sighash) {
if (this.anonymous) {
result += "anonymous ";
}
}
return result.trim();
};
EventFragment.from = function (value) {
if (typeof (value) === "string") {
return EventFragment.fromString(value);
}
return EventFragment.fromObject(value);
};
EventFragment.fromObject = function (value) {
if (EventFragment.isEventFragment(value)) {
return value;
}
if (value.type !== "event") {
logger.throwArgumentError("invalid event object", "value", value);
}
var params = {
name: verifyIdentifier(value.name),
anonymous: value.anonymous,
inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),
type: "event"
};
return new EventFragment(_constructorGuard, params);
};
EventFragment.fromString = function (value) {
var match = value.match(regexParen);
if (!match) {
logger.throwArgumentError("invalid event string", "value", value);
}
var anonymous = false;
match[3].split(" ").forEach(function (modifier) {
switch (modifier.trim()) {
case "anonymous":
anonymous = true;
break;
case "":
break;
default:
logger.warn("unknown modifier: " + modifier);
}
});
return EventFragment.fromObject({
name: match[1].trim(),
anonymous: anonymous,
inputs: parseParams(match[2], true),
type: "event"
});
};
EventFragment.isEventFragment = function (value) {
return (value && value._isFragment && value.type === "event");
};
return EventFragment;
}(Fragment));
exports.EventFragment = EventFragment;
function parseGas(value, params) {
params.gas = null;
var comps = value.split("@");
if (comps.length !== 1) {
if (comps.length > 2) {
logger.throwArgumentError("invalid human-readable ABI signature", "value", value);
}
if (!comps[1].match(/^[0-9]+$/)) {
logger.throwArgumentError("invalid human-readable ABI signature gas", "value", value);
}
params.gas = bignumber_1.BigNumber.from(comps[1]);
return comps[0];
}
return value;
}
function parseModifiers(value, params) {
params.constant = false;
params.payable = false;
params.stateMutability = "nonpayable";
value.split(" ").forEach(function (modifier) {
switch (modifier.trim()) {
case "constant":
params.constant = true;
break;
case "payable":
params.payable = true;
params.stateMutability = "payable";
break;
case "pure":
params.constant = true;
params.stateMutability = "pure";
break;
case "view":
params.constant = true;
params.stateMutability = "view";
break;
case "external":
case "public":
case "":
break;
default:
console.log("unknown modifier: " + modifier);
}
});
}
function verifyState(value) {
var result = {
constant: false,
payable: true,
stateMutability: "payable"
};
if (value.stateMutability != null) {
result.stateMutability = value.stateMutability;
// Set (and check things are consistent) the constant property
result.constant = (result.stateMutability === "view" || result.stateMutability === "pure");
if (value.constant != null) {
if ((!!value.constant) !== result.constant) {
logger.throwArgumentError("cannot have constant function with mutability " + result.stateMutability, "value", value);
}
}
// Set (and check things are consistent) the payable property
result.payable = (result.stateMutability === "payable");
if (value.payable != null) {
if ((!!value.payable) !== result.payable) {
logger.throwArgumentError("cannot have payable function with mutability " + result.stateMutability, "value", value);
}
}
}
else if (value.payable != null) {
result.payable = !!value.payable;
// If payable we can assume non-constant; otherwise we can't assume
if (value.constant == null && !result.payable && value.type !== "constructor") {
logger.throwArgumentError("unable to determine stateMutability", "value", value);
}
result.constant = !!value.constant;
if (result.constant) {
result.stateMutability = "view";
}
else {
result.stateMutability = (result.payable ? "payable" : "nonpayable");
}
if (result.payable && result.constant) {
logger.throwArgumentError("cannot have constant payable function", "value", value);
}
}
else if (value.constant != null) {
result.constant = !!value.constant;
result.payable = !result.constant;
result.stateMutability = (result.constant ? "view" : "payable");
}
else if (value.type !== "constructor") {
logger.throwArgumentError("unable to determine stateMutability", "value", value);
}
return result;
}
var ConstructorFragment = /** @class */ (function (_super) {
__extends(ConstructorFragment, _super);
function ConstructorFragment() {
return _super !== null && _super.apply(this, arguments) || this;
}
ConstructorFragment.prototype.format = function (format) {
if (!format) {
format = exports.FormatTypes.sighash;
}
if (!exports.FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === exports.FormatTypes.json) {
return JSON.stringify({
type: "constructor",
stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined),
payble: this.payable,
gas: (this.gas ? this.gas.toNumber() : undefined),
inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); })
});
}
if (format === exports.FormatTypes.sighash) {
logger.throwError("cannot format a constructor for sighash", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "format(sighash)"
});
}
var result = "constructor(" + this.inputs.map(function (input) { return input.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ") ";
if (this.stateMutability && this.stateMutability !== "nonpayable") {
result += this.stateMutability + " ";
}
return result.trim();
};
ConstructorFragment.from = function (value) {
if (typeof (value) === "string") {
return ConstructorFragment.fromString(value);
}
return ConstructorFragment.fromObject(value);
};
ConstructorFragment.fromObject = function (value) {
if (ConstructorFragment.isConstructorFragment(value)) {
return value;
}
if (value.type !== "constructor") {
logger.throwArgumentError("invalid constructor object", "value", value);
}
var state = verifyState(value);
if (state.constant) {
logger.throwArgumentError("constructor cannot be constant", "value", value);
}
var params = {
name: null,
type: value.type,
inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),
payable: state.payable,
stateMutability: state.stateMutability,
gas: (value.gas ? bignumber_1.BigNumber.from(value.gas) : null)
};
return new ConstructorFragment(_constructorGuard, params);
};
ConstructorFragment.fromString = function (value) {
var params = { type: "constructor" };
value = parseGas(value, params);
var parens = value.match(regexParen);
if (!parens || parens[1].trim() !== "constructor") {
logger.throwArgumentError("invalid constructor string", "value", value);
}
params.inputs = parseParams(parens[2].trim(), false);
parseModifiers(parens[3].trim(), params);
return ConstructorFragment.fromObject(params);
};
ConstructorFragment.isConstructorFragment = function (value) {
return (value && value._isFragment && value.type === "constructor");
};
return ConstructorFragment;
}(Fragment));
exports.ConstructorFragment = ConstructorFragment;
var FunctionFragment = /** @class */ (function (_super) {
__extends(FunctionFragment, _super);
function FunctionFragment() {
return _super !== null && _super.apply(this, arguments) || this;
}
FunctionFragment.prototype.format = function (format) {
if (!format) {
format = exports.FormatTypes.sighash;
}
if (!exports.FormatTypes[format]) {
logger.throwArgumentError("invalid format type", "format", format);
}
if (format === exports.FormatTypes.json) {
return JSON.stringify({
type: "function",
name: this.name,
constant: this.constant,
stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined),
payble: this.payable,
gas: (this.gas ? this.gas.toNumber() : undefined),
inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); }),
ouputs: this.outputs.map(function (output) { return JSON.parse(output.format(format)); }),
});
}
var result = "";
if (format !== exports.FormatTypes.sighash) {
result += "function ";
}
result += this.name + "(" + this.inputs.map(function (input) { return input.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ") ";
if (format !== exports.FormatTypes.sighash) {
if (this.stateMutability) {
if (this.stateMutability !== "nonpayable") {
result += (this.stateMutability + " ");
}
}
else if (this.constant) {
result += "view ";
}
if (this.outputs && this.outputs.length) {
result += "returns (" + this.outputs.map(function (output) { return output.format(format); }).join(", ") + ") ";
}
if (this.gas != null) {
result += "@" + this.gas.toString() + " ";
}
}
return result.trim();
};
FunctionFragment.from = function (value) {
if (typeof (value) === "string") {
return FunctionFragment.fromString(value);
}
return FunctionFragment.fromObject(value);
};
FunctionFragment.fromObject = function (value) {
if (FunctionFragment.isFunctionFragment(value)) {
return value;
}
if (value.type !== "function") {
logger.throwArgumentError("invalid function object", "value", value);
}
var state = verifyState(value);
var params = {
type: value.type,
name: verifyIdentifier(value.name),
constant: state.constant,
inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),
outputs: (value.outputs ? value.outputs.map(ParamType.fromObject) : []),
payable: state.payable,
stateMutability: state.stateMutability,
gas: (value.gas ? bignumber_1.BigNumber.from(value.gas) : null)
};
return new FunctionFragment(_constructorGuard, params);
};
FunctionFragment.fromString = function (value) {
var params = { type: "function" };
value = parseGas(value, params);
var comps = value.split(" returns ");
if (comps.length > 2) {
logger.throwArgumentError("invalid function string", "value", value);
}
var parens = comps[0].match(regexParen);
if (!parens) {
logger.throwArgumentError("invalid function signature", "value", value);
}
params.name = parens[1].trim();
if (params.name) {
verifyIdentifier(params.name);
}
params.inputs = parseParams(parens[2], false);
parseModifiers(parens[3].trim(), params);
// We have outputs
if (comps.length > 1) {
var returns = comps[1].match(regexParen);
if (returns[1].trim() != "" || returns[3].trim() != "") {
logger.throwArgumentError("unexpected tokens", "value", value);
}
params.outputs = parseParams(returns[2], false);
}
else {
params.outputs = [];
}
return FunctionFragment.fromObject(params);
};
FunctionFragment.isFunctionFragment = function (value) {
return (value && value._isFragment && value.type === "function");
};
return FunctionFragment;
}(ConstructorFragment));
exports.FunctionFragment = FunctionFragment;
//export class ErrorFragment extends Fragment {
//}
//export class StructFragment extends Fragment {
//}
function verifyType(type) {
// These need to be transformed to their full description
if (type.match(/^uint($|[^1-9])/)) {
type = "uint256" + type.substring(4);
}
else if (type.match(/^int($|[^1-9])/)) {
type = "int256" + type.substring(3);
}
// @TODO: more verification
return type;
}
var regexIdentifier = new RegExp("^[A-Za-z_][A-Za-z0-9_]*$");
function verifyIdentifier(value) {
if (!value || !value.match(regexIdentifier)) {
logger.throwArgumentError("invalid identifier \"" + value + "\"", "value", value);
}
return value;
}
var regexParen = new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$");
function splitNesting(value) {
value = value.trim();
var result = [];
var accum = "";
var depth = 0;
for (var offset = 0; offset < value.length; offset++) {
var c = value[offset];
if (c === "," && depth === 0) {
result.push(accum);
accum = "";
}
else {
accum += c;
if (c === "(") {
depth++;
}
else if (c === ")") {
depth--;
if (depth === -1) {
logger.throwArgumentError("unbalanced parenthesis", "value", value);
}
}
}
}
if (accum) {
result.push(accum);
}
return result;
}
-18
View File
@@ -1,18 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var fragments_1 = require("./fragments");
exports.ConstructorFragment = fragments_1.ConstructorFragment;
exports.EventFragment = fragments_1.EventFragment;
exports.FormatTypes = fragments_1.FormatTypes;
exports.Fragment = fragments_1.Fragment;
exports.FunctionFragment = fragments_1.FunctionFragment;
exports.ParamType = fragments_1.ParamType;
var abi_coder_1 = require("./abi-coder");
exports.AbiCoder = abi_coder_1.AbiCoder;
exports.defaultAbiCoder = abi_coder_1.defaultAbiCoder;
var interface_1 = require("./interface");
exports.checkResultErrors = interface_1.checkResultErrors;
exports.Indexed = interface_1.Indexed;
exports.Interface = interface_1.Interface;
exports.LogDescription = interface_1.LogDescription;
exports.TransactionDescription = interface_1.TransactionDescription;
-533
View File
@@ -1,533 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var address_1 = require("@ethersproject/address");
var bignumber_1 = require("@ethersproject/bignumber");
var bytes_1 = require("@ethersproject/bytes");
var hash_1 = require("@ethersproject/hash");
var keccak256_1 = require("@ethersproject/keccak256");
var properties_1 = require("@ethersproject/properties");
var abi_coder_1 = require("./abi-coder");
var abstract_coder_1 = require("./coders/abstract-coder");
exports.checkResultErrors = abstract_coder_1.checkResultErrors;
var fragments_1 = require("./fragments");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
var LogDescription = /** @class */ (function (_super) {
__extends(LogDescription, _super);
function LogDescription() {
return _super !== null && _super.apply(this, arguments) || this;
}
return LogDescription;
}(properties_1.Description));
exports.LogDescription = LogDescription;
var TransactionDescription = /** @class */ (function (_super) {
__extends(TransactionDescription, _super);
function TransactionDescription() {
return _super !== null && _super.apply(this, arguments) || this;
}
return TransactionDescription;
}(properties_1.Description));
exports.TransactionDescription = TransactionDescription;
var Indexed = /** @class */ (function (_super) {
__extends(Indexed, _super);
function Indexed() {
return _super !== null && _super.apply(this, arguments) || this;
}
Indexed.isIndexed = function (value) {
return !!(value && value._isIndexed);
};
return Indexed;
}(properties_1.Description));
exports.Indexed = Indexed;
function wrapAccessError(property, error) {
var wrap = new Error("deferred error during ABI decoding triggered accessing " + property);
wrap.error = error;
return wrap;
}
function checkNames(fragment, type, params) {
params.reduce(function (accum, param) {
if (param.name) {
if (accum[param.name]) {
logger.throwArgumentError("duplicate " + type + " parameter " + JSON.stringify(param.name) + " in " + fragment.format("full"), "fragment", fragment);
}
accum[param.name] = true;
}
return accum;
}, {});
}
var Interface = /** @class */ (function () {
function Interface(fragments) {
var _newTarget = this.constructor;
var _this = this;
logger.checkNew(_newTarget, Interface);
var abi = [];
if (typeof (fragments) === "string") {
abi = JSON.parse(fragments);
}
else {
abi = fragments;
}
properties_1.defineReadOnly(this, "fragments", abi.map(function (fragment) {
return fragments_1.Fragment.from(fragment);
}).filter(function (fragment) { return (fragment != null); }));
properties_1.defineReadOnly(this, "_abiCoder", properties_1.getStatic((_newTarget), "getAbiCoder")());
properties_1.defineReadOnly(this, "functions", {});
properties_1.defineReadOnly(this, "errors", {});
properties_1.defineReadOnly(this, "events", {});
properties_1.defineReadOnly(this, "structs", {});
// Add all fragments by their signature
this.fragments.forEach(function (fragment) {
var bucket = null;
switch (fragment.type) {
case "constructor":
if (_this.deploy) {
logger.warn("duplicate definition - constructor");
return;
}
checkNames(fragment, "input", fragment.inputs);
properties_1.defineReadOnly(_this, "deploy", fragment);
return;
case "function":
checkNames(fragment, "input", fragment.inputs);
checkNames(fragment, "output", fragment.outputs);
bucket = _this.functions;
break;
case "event":
checkNames(fragment, "input", fragment.inputs);
bucket = _this.events;
break;
default:
return;
}
var signature = fragment.format();
if (bucket[signature]) {
logger.warn("duplicate definition - " + signature);
return;
}
bucket[signature] = fragment;
});
// If we do not have a constructor add a default
if (!this.deploy) {
properties_1.defineReadOnly(this, "deploy", fragments_1.ConstructorFragment.from({
payable: false,
type: "constructor"
}));
}
properties_1.defineReadOnly(this, "_isInterface", true);
}
Interface.prototype.format = function (format) {
if (!format) {
format = fragments_1.FormatTypes.full;
}
if (format === fragments_1.FormatTypes.sighash) {
logger.throwArgumentError("interface does not support formatting sighash", "format", format);
}
var abi = this.fragments.map(function (fragment) { return fragment.format(format); });
// We need to re-bundle the JSON fragments a bit
if (format === fragments_1.FormatTypes.json) {
return JSON.stringify(abi.map(function (j) { return JSON.parse(j); }));
}
return abi;
};
// Sub-classes can override these to handle other blockchains
Interface.getAbiCoder = function () {
return abi_coder_1.defaultAbiCoder;
};
Interface.getAddress = function (address) {
return address_1.getAddress(address);
};
Interface.getSighash = function (functionFragment) {
return bytes_1.hexDataSlice(hash_1.id(functionFragment.format()), 0, 4);
};
Interface.getEventTopic = function (eventFragment) {
return hash_1.id(eventFragment.format());
};
// Find a function definition by any means necessary (unless it is ambiguous)
Interface.prototype.getFunction = function (nameOrSignatureOrSighash) {
if (bytes_1.isHexString(nameOrSignatureOrSighash)) {
for (var name_1 in this.functions) {
if (nameOrSignatureOrSighash === this.getSighash(name_1)) {
return this.functions[name_1];
}
}
logger.throwArgumentError("no matching function", "sighash", nameOrSignatureOrSighash);
}
// It is a bare name, look up the function (will return null if ambiguous)
if (nameOrSignatureOrSighash.indexOf("(") === -1) {
var name_2 = nameOrSignatureOrSighash.trim();
var matching = Object.keys(this.functions).filter(function (f) { return (f.split("(" /* fix:) */)[0] === name_2); });
if (matching.length === 0) {
logger.throwArgumentError("no matching function", "name", name_2);
}
else if (matching.length > 1) {
logger.throwArgumentError("multiple matching functions", "name", name_2);
}
return this.functions[matching[0]];
}
// Normlize the signature and lookup the function
var result = this.functions[fragments_1.FunctionFragment.fromString(nameOrSignatureOrSighash).format()];
if (!result) {
logger.throwArgumentError("no matching function", "signature", nameOrSignatureOrSighash);
}
return result;
};
// Find an event definition by any means necessary (unless it is ambiguous)
Interface.prototype.getEvent = function (nameOrSignatureOrTopic) {
if (bytes_1.isHexString(nameOrSignatureOrTopic)) {
var topichash = nameOrSignatureOrTopic.toLowerCase();
for (var name_3 in this.events) {
if (topichash === this.getEventTopic(name_3)) {
return this.events[name_3];
}
}
logger.throwArgumentError("no matching event", "topichash", topichash);
}
// It is a bare name, look up the function (will return null if ambiguous)
if (nameOrSignatureOrTopic.indexOf("(") === -1) {
var name_4 = nameOrSignatureOrTopic.trim();
var matching = Object.keys(this.events).filter(function (f) { return (f.split("(" /* fix:) */)[0] === name_4); });
if (matching.length === 0) {
logger.throwArgumentError("no matching event", "name", name_4);
}
else if (matching.length > 1) {
logger.throwArgumentError("multiple matching events", "name", name_4);
}
return this.events[matching[0]];
}
// Normlize the signature and lookup the function
var result = this.events[fragments_1.EventFragment.fromString(nameOrSignatureOrTopic).format()];
if (!result) {
logger.throwArgumentError("no matching event", "signature", nameOrSignatureOrTopic);
}
return result;
};
// Get the sighash (the bytes4 selector) used by Solidity to identify a function
Interface.prototype.getSighash = function (functionFragment) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
return properties_1.getStatic(this.constructor, "getSighash")(functionFragment);
};
// Get the topic (the bytes32 hash) used by Solidity to identify an event
Interface.prototype.getEventTopic = function (eventFragment) {
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
return properties_1.getStatic(this.constructor, "getEventTopic")(eventFragment);
};
Interface.prototype._decodeParams = function (params, data) {
return this._abiCoder.decode(params, data);
};
Interface.prototype._encodeParams = function (params, values) {
return this._abiCoder.encode(params, values);
};
Interface.prototype.encodeDeploy = function (values) {
return this._encodeParams(this.deploy.inputs, values || []);
};
// Decode the data for a function call (e.g. tx.data)
Interface.prototype.decodeFunctionData = function (functionFragment, data) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
var bytes = bytes_1.arrayify(data);
if (bytes_1.hexlify(bytes.slice(0, 4)) !== this.getSighash(functionFragment)) {
logger.throwArgumentError("data signature does not match function " + functionFragment.name + ".", "data", bytes_1.hexlify(bytes));
}
return this._decodeParams(functionFragment.inputs, bytes.slice(4));
};
// Encode the data for a function call (e.g. tx.data)
Interface.prototype.encodeFunctionData = function (functionFragment, values) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
return bytes_1.hexlify(bytes_1.concat([
this.getSighash(functionFragment),
this._encodeParams(functionFragment.inputs, values || [])
]));
};
// Decode the result from a function call (e.g. from eth_call)
Interface.prototype.decodeFunctionResult = function (functionFragment, data) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
var bytes = bytes_1.arrayify(data);
var reason = null;
var errorSignature = null;
switch (bytes.length % this._abiCoder._getWordSize()) {
case 0:
try {
return this._abiCoder.decode(functionFragment.outputs, bytes);
}
catch (error) { }
break;
case 4:
if (bytes_1.hexlify(bytes.slice(0, 4)) === "0x08c379a0") {
errorSignature = "Error(string)";
reason = this._abiCoder.decode(["string"], bytes.slice(4))[0];
}
break;
}
return logger.throwError("call revert exception", logger_1.Logger.errors.CALL_EXCEPTION, {
method: functionFragment.format(),
errorSignature: errorSignature,
errorArgs: [reason],
reason: reason
});
};
// Encode the result for a function call (e.g. for eth_call)
Interface.prototype.encodeFunctionResult = function (functionFragment, values) {
if (typeof (functionFragment) === "string") {
functionFragment = this.getFunction(functionFragment);
}
return bytes_1.hexlify(this._abiCoder.encode(functionFragment.outputs, values || []));
};
// Create the filter for the event with search criteria (e.g. for eth_filterLog)
Interface.prototype.encodeFilterTopics = function (eventFragment, values) {
var _this = this;
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
if (values.length > eventFragment.inputs.length) {
logger.throwError("too many arguments for " + eventFragment.format(), logger_1.Logger.errors.UNEXPECTED_ARGUMENT, {
argument: "values",
value: values
});
}
var topics = [];
if (!eventFragment.anonymous) {
topics.push(this.getEventTopic(eventFragment));
}
var encodeTopic = function (param, value) {
if (param.type === "string") {
return hash_1.id(value);
}
else if (param.type === "bytes") {
return keccak256_1.keccak256(bytes_1.hexlify(value));
}
// Check addresses are valid
if (param.type === "address") {
_this._abiCoder.encode(["address"], [value]);
}
return bytes_1.hexZeroPad(bytes_1.hexlify(value), 32);
};
values.forEach(function (value, index) {
var param = eventFragment.inputs[index];
if (!param.indexed) {
if (value != null) {
logger.throwArgumentError("cannot filter non-indexed parameters; must be null", ("contract." + param.name), value);
}
return;
}
if (value == null) {
topics.push(null);
}
else if (param.baseType === "array" || param.baseType === "tuple") {
logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value);
}
else if (Array.isArray(value)) {
topics.push(value.map(function (value) { return encodeTopic(param, value); }));
}
else {
topics.push(encodeTopic(param, value));
}
});
// Trim off trailing nulls
while (topics.length && topics[topics.length - 1] === null) {
topics.pop();
}
return topics;
};
Interface.prototype.encodeEventLog = function (eventFragment, values) {
var _this = this;
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
var topics = [];
var dataTypes = [];
var dataValues = [];
if (!eventFragment.anonymous) {
topics.push(this.getEventTopic(eventFragment));
}
if (values.length !== eventFragment.inputs.length) {
logger.throwArgumentError("event arguments/values mismatch", "values", values);
}
eventFragment.inputs.forEach(function (param, index) {
var value = values[index];
if (param.indexed) {
if (param.type === "string") {
topics.push(hash_1.id(value));
}
else if (param.type === "bytes") {
topics.push(keccak256_1.keccak256(value));
}
else if (param.baseType === "tuple" || param.baseType === "array") {
// @TOOD
throw new Error("not implemented");
}
else {
topics.push(_this._abiCoder.encode([param.type], [value]));
}
}
else {
dataTypes.push(param);
dataValues.push(value);
}
});
return {
data: this._abiCoder.encode(dataTypes, dataValues),
topics: topics
};
};
// Decode a filter for the event and the search criteria
Interface.prototype.decodeEventLog = function (eventFragment, data, topics) {
if (typeof (eventFragment) === "string") {
eventFragment = this.getEvent(eventFragment);
}
if (topics != null && !eventFragment.anonymous) {
var topicHash = this.getEventTopic(eventFragment);
if (!bytes_1.isHexString(topics[0], 32) || topics[0].toLowerCase() !== topicHash) {
logger.throwError("fragment/topic mismatch", logger_1.Logger.errors.INVALID_ARGUMENT, { argument: "topics[0]", expected: topicHash, value: topics[0] });
}
topics = topics.slice(1);
}
var indexed = [];
var nonIndexed = [];
var dynamic = [];
eventFragment.inputs.forEach(function (param, index) {
if (param.indexed) {
if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") {
indexed.push(fragments_1.ParamType.fromObject({ type: "bytes32", name: param.name }));
dynamic.push(true);
}
else {
indexed.push(param);
dynamic.push(false);
}
}
else {
nonIndexed.push(param);
dynamic.push(false);
}
});
var resultIndexed = (topics != null) ? this._abiCoder.decode(indexed, bytes_1.concat(topics)) : null;
var resultNonIndexed = this._abiCoder.decode(nonIndexed, data);
var result = [];
var nonIndexedIndex = 0, indexedIndex = 0;
eventFragment.inputs.forEach(function (param, index) {
if (param.indexed) {
if (resultIndexed == null) {
result[index] = new Indexed({ _isIndexed: true, hash: null });
}
else if (dynamic[index]) {
result[index] = new Indexed({ _isIndexed: true, hash: resultIndexed[indexedIndex++] });
}
else {
try {
result[index] = resultIndexed[indexedIndex++];
}
catch (error) {
result[index] = error;
}
}
}
else {
try {
result[index] = resultNonIndexed[nonIndexedIndex++];
}
catch (error) {
result[index] = error;
}
}
// Add the keyword argument if named and safe
if (param.name && result[param.name] == null) {
var value_1 = result[index];
// Make error named values throw on access
if (value_1 instanceof Error) {
Object.defineProperty(result, param.name, {
get: function () { throw wrapAccessError("property " + JSON.stringify(param.name), value_1); }
});
}
else {
result[param.name] = value_1;
}
}
});
var _loop_1 = function (i) {
var value = result[i];
if (value instanceof Error) {
Object.defineProperty(result, i, {
get: function () { throw wrapAccessError("index " + i, value); }
});
}
};
// Make all error indexed values throw on access
for (var i = 0; i < result.length; i++) {
_loop_1(i);
}
return Object.freeze(result);
};
// Given a transaction, find the matching function fragment (if any) and
// determine all its properties and call parameters
Interface.prototype.parseTransaction = function (tx) {
var fragment = this.getFunction(tx.data.substring(0, 10).toLowerCase());
if (!fragment) {
return null;
}
return new TransactionDescription({
args: this._abiCoder.decode(fragment.inputs, "0x" + tx.data.substring(10)),
functionFragment: fragment,
name: fragment.name,
signature: fragment.format(),
sighash: this.getSighash(fragment),
value: bignumber_1.BigNumber.from(tx.value || "0"),
});
};
// Given an event log, find the matching event fragment (if any) and
// determine all its properties and values
Interface.prototype.parseLog = function (log) {
var fragment = this.getEvent(log.topics[0]);
if (!fragment || fragment.anonymous) {
return null;
}
// @TODO: If anonymous, and the only method, and the input count matches, should we parse?
// Probably not, because just because it is the only event in the ABI does
// not mean we have the full ABI; maybe jsut a fragment?
return new LogDescription({
eventFragment: fragment,
name: fragment.name,
signature: fragment.format(),
topic: this.getEventTopic(fragment),
args: this.decodeEventLog(fragment, log.data, log.topics)
});
};
/*
static from(value: Array<Fragment | string | JsonAbi> | string | Interface) {
if (Interface.isInterface(value)) {
return value;
}
if (typeof(value) === "string") {
return new Interface(JSON.parse(value));
}
return new Interface(value);
}
*/
Interface.isInterface = function (value) {
return !!(value && value._isInterface);
};
return Interface;
}());
exports.Interface = Interface;
-41
View File
@@ -1,41 +0,0 @@
{
"author": "Richard Moore <me@ricmoo.com>",
"dependencies": {
"@ethersproject/address": ">=5.0.0-beta.128",
"@ethersproject/bignumber": ">=5.0.0-beta.130",
"@ethersproject/bytes": ">=5.0.0-beta.129",
"@ethersproject/constants": ">=5.0.0-beta.128",
"@ethersproject/hash": ">=5.0.0-beta.128",
"@ethersproject/keccak256": ">=5.0.0-beta.127",
"@ethersproject/logger": ">=5.0.0-beta.129",
"@ethersproject/properties": ">=5.0.0-beta.131",
"@ethersproject/strings": ">=5.0.0-beta.130"
},
"description": "Utilities and Classes for parsing, formatting and managing Ethereum ABIs.",
"ethereum": "donations.ethers.eth",
"keywords": [
"Ethereum",
"ethers"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/abi",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0x7f866470aabd8bbe47af1ff527fedbd86445cbfcd3bbf340d34c96b38b8e8606",
"types": "./lib/index.d.ts",
"version": "5.0.0-beta.153"
,"_resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz"
,"_integrity": "sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg=="
,"_from": "@ethersproject/abi@5.0.0-beta.153"
}
@@ -1,2 +0,0 @@
export const version = "abstract-provider/5.0.5";
//# sourceMappingURL=_version.js.map
-79
View File
@@ -1,79 +0,0 @@
"use strict";
import { isHexString } from "@ethersproject/bytes";
import { Description, defineReadOnly } from "@ethersproject/properties";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
;
;
//export type CallTransactionable = {
// call(transaction: TransactionRequest): Promise<TransactionResponse>;
//};
export class ForkEvent extends Description {
static isForkEvent(value) {
return !!(value && value._isForkEvent);
}
}
export class BlockForkEvent extends ForkEvent {
constructor(blockHash, expiry) {
if (!isHexString(blockHash, 32)) {
logger.throwArgumentError("invalid blockHash", "blockHash", blockHash);
}
super({
_isForkEvent: true,
_isBlockForkEvent: true,
expiry: (expiry || 0),
blockHash: blockHash
});
}
}
export class TransactionForkEvent extends ForkEvent {
constructor(hash, expiry) {
if (!isHexString(hash, 32)) {
logger.throwArgumentError("invalid transaction hash", "hash", hash);
}
super({
_isForkEvent: true,
_isTransactionForkEvent: true,
expiry: (expiry || 0),
hash: hash
});
}
}
export class TransactionOrderForkEvent extends ForkEvent {
constructor(beforeHash, afterHash, expiry) {
if (!isHexString(beforeHash, 32)) {
logger.throwArgumentError("invalid transaction hash", "beforeHash", beforeHash);
}
if (!isHexString(afterHash, 32)) {
logger.throwArgumentError("invalid transaction hash", "afterHash", afterHash);
}
super({
_isForkEvent: true,
_isTransactionOrderForkEvent: true,
expiry: (expiry || 0),
beforeHash: beforeHash,
afterHash: afterHash
});
}
}
///////////////////////////////
// Exported Abstracts
export class Provider {
constructor() {
logger.checkAbstract(new.target, Provider);
defineReadOnly(this, "_isProvider", true);
}
// Alias for "on"
addListener(eventName, listener) {
return this.on(eventName, listener);
}
// Alias for "off"
removeListener(eventName, listener) {
return this.off(eventName, listener);
}
static isProvider(value) {
return !!(value && value._isProvider);
}
}
//# sourceMappingURL=index.js.map
-4
View File
@@ -1,4 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "abstract-provider/5.0.5";
//# sourceMappingURL=_version.js.map
-117
View File
@@ -1,117 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var bytes_1 = require("@ethersproject/bytes");
var properties_1 = require("@ethersproject/properties");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
;
;
//export type CallTransactionable = {
// call(transaction: TransactionRequest): Promise<TransactionResponse>;
//};
var ForkEvent = /** @class */ (function (_super) {
__extends(ForkEvent, _super);
function ForkEvent() {
return _super !== null && _super.apply(this, arguments) || this;
}
ForkEvent.isForkEvent = function (value) {
return !!(value && value._isForkEvent);
};
return ForkEvent;
}(properties_1.Description));
exports.ForkEvent = ForkEvent;
var BlockForkEvent = /** @class */ (function (_super) {
__extends(BlockForkEvent, _super);
function BlockForkEvent(blockHash, expiry) {
var _this = this;
if (!bytes_1.isHexString(blockHash, 32)) {
logger.throwArgumentError("invalid blockHash", "blockHash", blockHash);
}
_this = _super.call(this, {
_isForkEvent: true,
_isBlockForkEvent: true,
expiry: (expiry || 0),
blockHash: blockHash
}) || this;
return _this;
}
return BlockForkEvent;
}(ForkEvent));
exports.BlockForkEvent = BlockForkEvent;
var TransactionForkEvent = /** @class */ (function (_super) {
__extends(TransactionForkEvent, _super);
function TransactionForkEvent(hash, expiry) {
var _this = this;
if (!bytes_1.isHexString(hash, 32)) {
logger.throwArgumentError("invalid transaction hash", "hash", hash);
}
_this = _super.call(this, {
_isForkEvent: true,
_isTransactionForkEvent: true,
expiry: (expiry || 0),
hash: hash
}) || this;
return _this;
}
return TransactionForkEvent;
}(ForkEvent));
exports.TransactionForkEvent = TransactionForkEvent;
var TransactionOrderForkEvent = /** @class */ (function (_super) {
__extends(TransactionOrderForkEvent, _super);
function TransactionOrderForkEvent(beforeHash, afterHash, expiry) {
var _this = this;
if (!bytes_1.isHexString(beforeHash, 32)) {
logger.throwArgumentError("invalid transaction hash", "beforeHash", beforeHash);
}
if (!bytes_1.isHexString(afterHash, 32)) {
logger.throwArgumentError("invalid transaction hash", "afterHash", afterHash);
}
_this = _super.call(this, {
_isForkEvent: true,
_isTransactionOrderForkEvent: true,
expiry: (expiry || 0),
beforeHash: beforeHash,
afterHash: afterHash
}) || this;
return _this;
}
return TransactionOrderForkEvent;
}(ForkEvent));
exports.TransactionOrderForkEvent = TransactionOrderForkEvent;
///////////////////////////////
// Exported Abstracts
var Provider = /** @class */ (function () {
function Provider() {
var _newTarget = this.constructor;
logger.checkAbstract(_newTarget, Provider);
properties_1.defineReadOnly(this, "_isProvider", true);
}
// Alias for "on"
Provider.prototype.addListener = function (eventName, listener) {
return this.on(eventName, listener);
};
// Alias for "off"
Provider.prototype.removeListener = function (eventName, listener) {
return this.off(eventName, listener);
};
Provider.isProvider = function (value) {
return !!(value && value._isProvider);
};
return Provider;
}());
exports.Provider = Provider;
//# sourceMappingURL=index.js.map
-40
View File
@@ -1,40 +0,0 @@
{
"author": "Richard Moore <me@ricmoo.com>",
"dependencies": {
"@ethersproject/bignumber": "^5.0.7",
"@ethersproject/bytes": "^5.0.4",
"@ethersproject/logger": "^5.0.5",
"@ethersproject/networks": "^5.0.3",
"@ethersproject/properties": "^5.0.3",
"@ethersproject/transactions": "^5.0.5",
"@ethersproject/web": "^5.0.6"
},
"description": "An Abstract Class for describing an Ethereum Provider for ethers.",
"ethereum": "donations.ethers.eth",
"gitHead": "ffa4a2d0549fe2c606bda3130f4a3f3d788f8dcf",
"keywords": [
"Ethereum",
"ethers"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/abstract-provider",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0x87fdc7d7ee69d8c228c0e6946be702acd027a832b5a3deaa5b60e3c9f7110e58",
"types": "./lib/index.d.ts",
"version": "5.0.5"
,"_resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz"
,"_integrity": "sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ=="
,"_from": "@ethersproject/abstract-provider@^5.0.4"
}
@@ -1,2 +0,0 @@
export const version = "abstract-signer/5.0.7";
//# sourceMappingURL=_version.js.map
-208
View File
@@ -1,208 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { defineReadOnly, resolveProperties, shallowCopy } from "@ethersproject/properties";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
const allowedTransactionKeys = [
"chainId", "data", "from", "gasLimit", "gasPrice", "nonce", "to", "value"
];
const forwardErrors = [
Logger.errors.INSUFFICIENT_FUNDS,
Logger.errors.NONCE_EXPIRED,
Logger.errors.REPLACEMENT_UNDERPRICED,
];
;
;
export class Signer {
///////////////////
// Sub-classes MUST call super
constructor() {
logger.checkAbstract(new.target, Signer);
defineReadOnly(this, "_isSigner", true);
}
///////////////////
// Sub-classes MAY override these
getBalance(blockTag) {
return __awaiter(this, void 0, void 0, function* () {
this._checkProvider("getBalance");
return yield this.provider.getBalance(this.getAddress(), blockTag);
});
}
getTransactionCount(blockTag) {
return __awaiter(this, void 0, void 0, function* () {
this._checkProvider("getTransactionCount");
return yield this.provider.getTransactionCount(this.getAddress(), blockTag);
});
}
// Populates "from" if unspecified, and estimates the gas for the transation
estimateGas(transaction) {
return __awaiter(this, void 0, void 0, function* () {
this._checkProvider("estimateGas");
const tx = yield resolveProperties(this.checkTransaction(transaction));
return yield this.provider.estimateGas(tx);
});
}
// Populates "from" if unspecified, and calls with the transation
call(transaction, blockTag) {
return __awaiter(this, void 0, void 0, function* () {
this._checkProvider("call");
const tx = yield resolveProperties(this.checkTransaction(transaction));
return yield this.provider.call(tx, blockTag);
});
}
// Populates all fields in a transaction, signs it and sends it to the network
sendTransaction(transaction) {
this._checkProvider("sendTransaction");
return this.populateTransaction(transaction).then((tx) => {
return this.signTransaction(tx).then((signedTx) => {
return this.provider.sendTransaction(signedTx);
});
});
}
getChainId() {
return __awaiter(this, void 0, void 0, function* () {
this._checkProvider("getChainId");
const network = yield this.provider.getNetwork();
return network.chainId;
});
}
getGasPrice() {
return __awaiter(this, void 0, void 0, function* () {
this._checkProvider("getGasPrice");
return yield this.provider.getGasPrice();
});
}
resolveName(name) {
return __awaiter(this, void 0, void 0, function* () {
this._checkProvider("resolveName");
return yield this.provider.resolveName(name);
});
}
// Checks a transaction does not contain invalid keys and if
// no "from" is provided, populates it.
// - does NOT require a provider
// - adds "from" is not present
// - returns a COPY (safe to mutate the result)
// By default called from: (overriding these prevents it)
// - call
// - estimateGas
// - populateTransaction (and therefor sendTransaction)
checkTransaction(transaction) {
for (const key in transaction) {
if (allowedTransactionKeys.indexOf(key) === -1) {
logger.throwArgumentError("invalid transaction key: " + key, "transaction", transaction);
}
}
const tx = shallowCopy(transaction);
if (tx.from == null) {
tx.from = this.getAddress();
}
else {
// Make sure any provided address matches this signer
tx.from = Promise.all([
Promise.resolve(tx.from),
this.getAddress()
]).then((result) => {
if (result[0] !== result[1]) {
logger.throwArgumentError("from address mismatch", "transaction", transaction);
}
return result[0];
});
}
return tx;
}
// Populates ALL keys for a transaction and checks that "from" matches
// this Signer. Should be used by sendTransaction but NOT by signTransaction.
// By default called from: (overriding these prevents it)
// - sendTransaction
populateTransaction(transaction) {
return __awaiter(this, void 0, void 0, function* () {
const tx = yield resolveProperties(this.checkTransaction(transaction));
if (tx.to != null) {
tx.to = Promise.resolve(tx.to).then((to) => this.resolveName(to));
}
if (tx.gasPrice == null) {
tx.gasPrice = this.getGasPrice();
}
if (tx.nonce == null) {
tx.nonce = this.getTransactionCount("pending");
}
if (tx.gasLimit == null) {
tx.gasLimit = this.estimateGas(tx).catch((error) => {
if (forwardErrors.indexOf(error.code) >= 0) {
throw error;
}
return logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {
error: error,
tx: tx
});
});
}
if (tx.chainId == null) {
tx.chainId = this.getChainId();
}
else {
tx.chainId = Promise.all([
Promise.resolve(tx.chainId),
this.getChainId()
]).then((results) => {
if (results[1] !== 0 && results[0] !== results[1]) {
logger.throwArgumentError("chainId address mismatch", "transaction", transaction);
}
return results[0];
});
}
return yield resolveProperties(tx);
});
}
///////////////////
// Sub-classes SHOULD leave these alone
_checkProvider(operation) {
if (!this.provider) {
logger.throwError("missing provider", Logger.errors.UNSUPPORTED_OPERATION, {
operation: (operation || "_checkProvider")
});
}
}
static isSigner(value) {
return !!(value && value._isSigner);
}
}
export class VoidSigner extends Signer {
constructor(address, provider) {
logger.checkNew(new.target, VoidSigner);
super();
defineReadOnly(this, "address", address);
defineReadOnly(this, "provider", provider || null);
}
getAddress() {
return Promise.resolve(this.address);
}
_fail(message, operation) {
return Promise.resolve().then(() => {
logger.throwError(message, Logger.errors.UNSUPPORTED_OPERATION, { operation: operation });
});
}
signMessage(message) {
return this._fail("VoidSigner cannot sign messages", "signMessage");
}
signTransaction(transaction) {
return this._fail("VoidSigner cannot sign transactions", "signTransaction");
}
_signTypedData(domain, types, value) {
return this._fail("VoidSigner cannot sign typed data", "signTypedData");
}
connect(provider) {
return new VoidSigner(this.address, provider);
}
}
//# sourceMappingURL=index.js.map
-4
View File
@@ -1,4 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "abstract-signer/5.0.7";
//# sourceMappingURL=_version.js.map
-318
View File
@@ -1,318 +0,0 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var properties_1 = require("@ethersproject/properties");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
var allowedTransactionKeys = [
"chainId", "data", "from", "gasLimit", "gasPrice", "nonce", "to", "value"
];
var forwardErrors = [
logger_1.Logger.errors.INSUFFICIENT_FUNDS,
logger_1.Logger.errors.NONCE_EXPIRED,
logger_1.Logger.errors.REPLACEMENT_UNDERPRICED,
];
;
;
var Signer = /** @class */ (function () {
///////////////////
// Sub-classes MUST call super
function Signer() {
var _newTarget = this.constructor;
logger.checkAbstract(_newTarget, Signer);
properties_1.defineReadOnly(this, "_isSigner", true);
}
///////////////////
// Sub-classes MAY override these
Signer.prototype.getBalance = function (blockTag) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this._checkProvider("getBalance");
return [4 /*yield*/, this.provider.getBalance(this.getAddress(), blockTag)];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
Signer.prototype.getTransactionCount = function (blockTag) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this._checkProvider("getTransactionCount");
return [4 /*yield*/, this.provider.getTransactionCount(this.getAddress(), blockTag)];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
// Populates "from" if unspecified, and estimates the gas for the transation
Signer.prototype.estimateGas = function (transaction) {
return __awaiter(this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this._checkProvider("estimateGas");
return [4 /*yield*/, properties_1.resolveProperties(this.checkTransaction(transaction))];
case 1:
tx = _a.sent();
return [4 /*yield*/, this.provider.estimateGas(tx)];
case 2: return [2 /*return*/, _a.sent()];
}
});
});
};
// Populates "from" if unspecified, and calls with the transation
Signer.prototype.call = function (transaction, blockTag) {
return __awaiter(this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this._checkProvider("call");
return [4 /*yield*/, properties_1.resolveProperties(this.checkTransaction(transaction))];
case 1:
tx = _a.sent();
return [4 /*yield*/, this.provider.call(tx, blockTag)];
case 2: return [2 /*return*/, _a.sent()];
}
});
});
};
// Populates all fields in a transaction, signs it and sends it to the network
Signer.prototype.sendTransaction = function (transaction) {
var _this = this;
this._checkProvider("sendTransaction");
return this.populateTransaction(transaction).then(function (tx) {
return _this.signTransaction(tx).then(function (signedTx) {
return _this.provider.sendTransaction(signedTx);
});
});
};
Signer.prototype.getChainId = function () {
return __awaiter(this, void 0, void 0, function () {
var network;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this._checkProvider("getChainId");
return [4 /*yield*/, this.provider.getNetwork()];
case 1:
network = _a.sent();
return [2 /*return*/, network.chainId];
}
});
});
};
Signer.prototype.getGasPrice = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this._checkProvider("getGasPrice");
return [4 /*yield*/, this.provider.getGasPrice()];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
Signer.prototype.resolveName = function (name) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this._checkProvider("resolveName");
return [4 /*yield*/, this.provider.resolveName(name)];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
// Checks a transaction does not contain invalid keys and if
// no "from" is provided, populates it.
// - does NOT require a provider
// - adds "from" is not present
// - returns a COPY (safe to mutate the result)
// By default called from: (overriding these prevents it)
// - call
// - estimateGas
// - populateTransaction (and therefor sendTransaction)
Signer.prototype.checkTransaction = function (transaction) {
for (var key in transaction) {
if (allowedTransactionKeys.indexOf(key) === -1) {
logger.throwArgumentError("invalid transaction key: " + key, "transaction", transaction);
}
}
var tx = properties_1.shallowCopy(transaction);
if (tx.from == null) {
tx.from = this.getAddress();
}
else {
// Make sure any provided address matches this signer
tx.from = Promise.all([
Promise.resolve(tx.from),
this.getAddress()
]).then(function (result) {
if (result[0] !== result[1]) {
logger.throwArgumentError("from address mismatch", "transaction", transaction);
}
return result[0];
});
}
return tx;
};
// Populates ALL keys for a transaction and checks that "from" matches
// this Signer. Should be used by sendTransaction but NOT by signTransaction.
// By default called from: (overriding these prevents it)
// - sendTransaction
Signer.prototype.populateTransaction = function (transaction) {
return __awaiter(this, void 0, void 0, function () {
var tx;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, properties_1.resolveProperties(this.checkTransaction(transaction))];
case 1:
tx = _a.sent();
if (tx.to != null) {
tx.to = Promise.resolve(tx.to).then(function (to) { return _this.resolveName(to); });
}
if (tx.gasPrice == null) {
tx.gasPrice = this.getGasPrice();
}
if (tx.nonce == null) {
tx.nonce = this.getTransactionCount("pending");
}
if (tx.gasLimit == null) {
tx.gasLimit = this.estimateGas(tx).catch(function (error) {
if (forwardErrors.indexOf(error.code) >= 0) {
throw error;
}
return logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", logger_1.Logger.errors.UNPREDICTABLE_GAS_LIMIT, {
error: error,
tx: tx
});
});
}
if (tx.chainId == null) {
tx.chainId = this.getChainId();
}
else {
tx.chainId = Promise.all([
Promise.resolve(tx.chainId),
this.getChainId()
]).then(function (results) {
if (results[1] !== 0 && results[0] !== results[1]) {
logger.throwArgumentError("chainId address mismatch", "transaction", transaction);
}
return results[0];
});
}
return [4 /*yield*/, properties_1.resolveProperties(tx)];
case 2: return [2 /*return*/, _a.sent()];
}
});
});
};
///////////////////
// Sub-classes SHOULD leave these alone
Signer.prototype._checkProvider = function (operation) {
if (!this.provider) {
logger.throwError("missing provider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: (operation || "_checkProvider")
});
}
};
Signer.isSigner = function (value) {
return !!(value && value._isSigner);
};
return Signer;
}());
exports.Signer = Signer;
var VoidSigner = /** @class */ (function (_super) {
__extends(VoidSigner, _super);
function VoidSigner(address, provider) {
var _newTarget = this.constructor;
var _this = this;
logger.checkNew(_newTarget, VoidSigner);
_this = _super.call(this) || this;
properties_1.defineReadOnly(_this, "address", address);
properties_1.defineReadOnly(_this, "provider", provider || null);
return _this;
}
VoidSigner.prototype.getAddress = function () {
return Promise.resolve(this.address);
};
VoidSigner.prototype._fail = function (message, operation) {
return Promise.resolve().then(function () {
logger.throwError(message, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: operation });
});
};
VoidSigner.prototype.signMessage = function (message) {
return this._fail("VoidSigner cannot sign messages", "signMessage");
};
VoidSigner.prototype.signTransaction = function (transaction) {
return this._fail("VoidSigner cannot sign transactions", "signTransaction");
};
VoidSigner.prototype._signTypedData = function (domain, types, value) {
return this._fail("VoidSigner cannot sign typed data", "signTypedData");
};
VoidSigner.prototype.connect = function (provider) {
return new VoidSigner(this.address, provider);
};
return VoidSigner;
}(Signer));
exports.VoidSigner = VoidSigner;
//# sourceMappingURL=index.js.map
-38
View File
@@ -1,38 +0,0 @@
{
"author": "Richard Moore <me@ricmoo.com>",
"dependencies": {
"@ethersproject/abstract-provider": "^5.0.4",
"@ethersproject/bignumber": "^5.0.7",
"@ethersproject/bytes": "^5.0.4",
"@ethersproject/logger": "^5.0.5",
"@ethersproject/properties": "^5.0.3"
},
"description": "An Abstract Class for desribing an Ethereum Signer for ethers.",
"ethereum": "donations.ethers.eth",
"gitHead": "86146650d83865d83b10867e9592923eada5d7cc",
"keywords": [
"Ethereum",
"ethers"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/abstract-signer",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0x722fb4b5e18bb70cda3c2fbd250d96bacdbe7d358c4c426a73d262fc1f751845",
"types": "./lib/index.d.ts",
"version": "5.0.7"
,"_resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz"
,"_integrity": "sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ=="
,"_from": "@ethersproject/abstract-signer@^5.0.6"
}
-2
View File
@@ -1,2 +0,0 @@
export const version = "address/5.0.5";
//# sourceMappingURL=_version.js.map
-136
View File
@@ -1,136 +0,0 @@
"use strict";
// We use this for base 36 maths
import { BN } from "bn.js";
import { arrayify, concat, hexDataLength, hexDataSlice, isHexString, stripZeros } from "@ethersproject/bytes";
import { BigNumber } from "@ethersproject/bignumber";
import { keccak256 } from "@ethersproject/keccak256";
import { encode } from "@ethersproject/rlp";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
function getChecksumAddress(address) {
if (!isHexString(address, 20)) {
logger.throwArgumentError("invalid address", "address", address);
}
address = address.toLowerCase();
const chars = address.substring(2).split("");
const expanded = new Uint8Array(40);
for (let i = 0; i < 40; i++) {
expanded[i] = chars[i].charCodeAt(0);
}
const hashed = arrayify(keccak256(expanded));
for (let i = 0; i < 40; i += 2) {
if ((hashed[i >> 1] >> 4) >= 8) {
chars[i] = chars[i].toUpperCase();
}
if ((hashed[i >> 1] & 0x0f) >= 8) {
chars[i + 1] = chars[i + 1].toUpperCase();
}
}
return "0x" + chars.join("");
}
// Shims for environments that are missing some required constants and functions
const MAX_SAFE_INTEGER = 0x1fffffffffffff;
function log10(x) {
if (Math.log10) {
return Math.log10(x);
}
return Math.log(x) / Math.LN10;
}
// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number
// Create lookup table
const ibanLookup = {};
for (let i = 0; i < 10; i++) {
ibanLookup[String(i)] = String(i);
}
for (let i = 0; i < 26; i++) {
ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);
}
// How many decimal digits can we process? (for 64-bit float, this is 15)
const safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));
function ibanChecksum(address) {
address = address.toUpperCase();
address = address.substring(4) + address.substring(0, 2) + "00";
let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join("");
// Javascript can handle integers safely up to 15 (decimal) digits
while (expanded.length >= safeDigits) {
let block = expanded.substring(0, safeDigits);
expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);
}
let checksum = String(98 - (parseInt(expanded, 10) % 97));
while (checksum.length < 2) {
checksum = "0" + checksum;
}
return checksum;
}
;
export function getAddress(address) {
let result = null;
if (typeof (address) !== "string") {
logger.throwArgumentError("invalid address", "address", address);
}
if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {
// Missing the 0x prefix
if (address.substring(0, 2) !== "0x") {
address = "0x" + address;
}
result = getChecksumAddress(address);
// It is a checksummed address with a bad checksum
if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {
logger.throwArgumentError("bad address checksum", "address", address);
}
// Maybe ICAP? (we only support direct mode)
}
else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {
// It is an ICAP address with a bad checksum
if (address.substring(2, 4) !== ibanChecksum(address)) {
logger.throwArgumentError("bad icap checksum", "address", address);
}
result = (new BN(address.substring(4), 36)).toString(16);
while (result.length < 40) {
result = "0" + result;
}
result = getChecksumAddress("0x" + result);
}
else {
logger.throwArgumentError("invalid address", "address", address);
}
return result;
}
export function isAddress(address) {
try {
getAddress(address);
return true;
}
catch (error) { }
return false;
}
export function getIcapAddress(address) {
let base36 = (new BN(getAddress(address).substring(2), 16)).toString(36).toUpperCase();
while (base36.length < 30) {
base36 = "0" + base36;
}
return "XE" + ibanChecksum("XE00" + base36) + base36;
}
// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed
export function getContractAddress(transaction) {
let from = null;
try {
from = getAddress(transaction.from);
}
catch (error) {
logger.throwArgumentError("missing from address", "transaction", transaction);
}
const nonce = stripZeros(arrayify(BigNumber.from(transaction.nonce).toHexString()));
return getAddress(hexDataSlice(keccak256(encode([from, nonce])), 12));
}
export function getCreate2Address(from, salt, initCodeHash) {
if (hexDataLength(salt) !== 32) {
logger.throwArgumentError("salt must be 32 bytes", "salt", salt);
}
if (hexDataLength(initCodeHash) !== 32) {
logger.throwArgumentError("initCodeHash must be 32 bytes", "initCodeHash", initCodeHash);
}
return getAddress(hexDataSlice(keccak256(concat(["0xff", getAddress(from), salt, initCodeHash])), 12));
}
//# sourceMappingURL=index.js.map
-4
View File
@@ -1,4 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "address/5.0.5";
//# sourceMappingURL=_version.js.map
-142
View File
@@ -1,142 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// We use this for base 36 maths
var bn_js_1 = require("bn.js");
var bytes_1 = require("@ethersproject/bytes");
var bignumber_1 = require("@ethersproject/bignumber");
var keccak256_1 = require("@ethersproject/keccak256");
var rlp_1 = require("@ethersproject/rlp");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
function getChecksumAddress(address) {
if (!bytes_1.isHexString(address, 20)) {
logger.throwArgumentError("invalid address", "address", address);
}
address = address.toLowerCase();
var chars = address.substring(2).split("");
var expanded = new Uint8Array(40);
for (var i = 0; i < 40; i++) {
expanded[i] = chars[i].charCodeAt(0);
}
var hashed = bytes_1.arrayify(keccak256_1.keccak256(expanded));
for (var i = 0; i < 40; i += 2) {
if ((hashed[i >> 1] >> 4) >= 8) {
chars[i] = chars[i].toUpperCase();
}
if ((hashed[i >> 1] & 0x0f) >= 8) {
chars[i + 1] = chars[i + 1].toUpperCase();
}
}
return "0x" + chars.join("");
}
// Shims for environments that are missing some required constants and functions
var MAX_SAFE_INTEGER = 0x1fffffffffffff;
function log10(x) {
if (Math.log10) {
return Math.log10(x);
}
return Math.log(x) / Math.LN10;
}
// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number
// Create lookup table
var ibanLookup = {};
for (var i = 0; i < 10; i++) {
ibanLookup[String(i)] = String(i);
}
for (var i = 0; i < 26; i++) {
ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);
}
// How many decimal digits can we process? (for 64-bit float, this is 15)
var safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));
function ibanChecksum(address) {
address = address.toUpperCase();
address = address.substring(4) + address.substring(0, 2) + "00";
var expanded = address.split("").map(function (c) { return ibanLookup[c]; }).join("");
// Javascript can handle integers safely up to 15 (decimal) digits
while (expanded.length >= safeDigits) {
var block = expanded.substring(0, safeDigits);
expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);
}
var checksum = String(98 - (parseInt(expanded, 10) % 97));
while (checksum.length < 2) {
checksum = "0" + checksum;
}
return checksum;
}
;
function getAddress(address) {
var result = null;
if (typeof (address) !== "string") {
logger.throwArgumentError("invalid address", "address", address);
}
if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {
// Missing the 0x prefix
if (address.substring(0, 2) !== "0x") {
address = "0x" + address;
}
result = getChecksumAddress(address);
// It is a checksummed address with a bad checksum
if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {
logger.throwArgumentError("bad address checksum", "address", address);
}
// Maybe ICAP? (we only support direct mode)
}
else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {
// It is an ICAP address with a bad checksum
if (address.substring(2, 4) !== ibanChecksum(address)) {
logger.throwArgumentError("bad icap checksum", "address", address);
}
result = (new bn_js_1.BN(address.substring(4), 36)).toString(16);
while (result.length < 40) {
result = "0" + result;
}
result = getChecksumAddress("0x" + result);
}
else {
logger.throwArgumentError("invalid address", "address", address);
}
return result;
}
exports.getAddress = getAddress;
function isAddress(address) {
try {
getAddress(address);
return true;
}
catch (error) { }
return false;
}
exports.isAddress = isAddress;
function getIcapAddress(address) {
var base36 = (new bn_js_1.BN(getAddress(address).substring(2), 16)).toString(36).toUpperCase();
while (base36.length < 30) {
base36 = "0" + base36;
}
return "XE" + ibanChecksum("XE00" + base36) + base36;
}
exports.getIcapAddress = getIcapAddress;
// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed
function getContractAddress(transaction) {
var from = null;
try {
from = getAddress(transaction.from);
}
catch (error) {
logger.throwArgumentError("missing from address", "transaction", transaction);
}
var nonce = bytes_1.stripZeros(bytes_1.arrayify(bignumber_1.BigNumber.from(transaction.nonce).toHexString()));
return getAddress(bytes_1.hexDataSlice(keccak256_1.keccak256(rlp_1.encode([from, nonce])), 12));
}
exports.getContractAddress = getContractAddress;
function getCreate2Address(from, salt, initCodeHash) {
if (bytes_1.hexDataLength(salt) !== 32) {
logger.throwArgumentError("salt must be 32 bytes", "salt", salt);
}
if (bytes_1.hexDataLength(initCodeHash) !== 32) {
logger.throwArgumentError("initCodeHash must be 32 bytes", "initCodeHash", initCodeHash);
}
return getAddress(bytes_1.hexDataSlice(keccak256_1.keccak256(bytes_1.concat(["0xff", getAddress(from), salt, initCodeHash])), 12));
}
exports.getCreate2Address = getCreate2Address;
//# sourceMappingURL=index.js.map
-70
View File
@@ -1,70 +0,0 @@
{
"_from": "@ethersproject/address@^5.0.4",
"_id": "@ethersproject/address@5.0.5",
"_inBundle": false,
"_integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==",
"_location": "/@ethersproject/address",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "@ethersproject/address@^5.0.4",
"name": "@ethersproject/address",
"escapedName": "@ethersproject%2faddress",
"scope": "@ethersproject",
"rawSpec": "^5.0.4",
"saveSpec": null,
"fetchSpec": "^5.0.4"
},
"_requiredBy": [
"/@ethersproject/abi",
"/@ethersproject/hash",
"/@ethersproject/transactions"
],
"_resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz",
"_shasum": "2caa65f6b7125015395b1b54c985ee0b27059cc7",
"_spec": "@ethersproject/address@^5.0.4",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\BackendServers\\node_modules\\@ethersproject\\transactions",
"author": {
"name": "Richard Moore",
"email": "me@ricmoo.com"
},
"bugs": {
"url": "https://github.com/ethers-io/ethers.js/issues"
},
"bundleDependencies": false,
"dependencies": {
"@ethersproject/bignumber": "^5.0.7",
"@ethersproject/bytes": "^5.0.4",
"@ethersproject/keccak256": "^5.0.3",
"@ethersproject/logger": "^5.0.5",
"@ethersproject/rlp": "^5.0.3",
"bn.js": "^4.4.0"
},
"deprecated": false,
"description": "Utilities for handling Ethereum Addresses for ethers.",
"ethereum": "donations.ethers.eth",
"gitHead": "ffa4a2d0549fe2c606bda3130f4a3f3d788f8dcf",
"homepage": "https://github.com/ethers-io/ethers.js#readme",
"keywords": [
"Ethereum",
"ethers"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/address",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0xd6263c8653bc6784fed703b8a30075630c544e3861f43ed5b49ab56ffb5d4808",
"types": "./lib/index.d.ts",
"version": "5.0.5"
}
-2
View File
@@ -1,2 +0,0 @@
export const version = "base64/5.0.4";
//# sourceMappingURL=_version.js.map
-19
View File
@@ -1,19 +0,0 @@
"use strict";
import { arrayify } from "@ethersproject/bytes";
export function decode(textData) {
textData = atob(textData);
const data = [];
for (let i = 0; i < textData.length; i++) {
data.push(textData.charCodeAt(i));
}
return arrayify(data);
}
export function encode(data) {
data = arrayify(data);
let textData = "";
for (let i = 0; i < data.length; i++) {
textData += String.fromCharCode(data[i]);
}
return btoa(textData);
}
//# sourceMappingURL=browser.js.map
-10
View File
@@ -1,10 +0,0 @@
"use strict";
import { arrayify } from "@ethersproject/bytes";
export function decode(textData) {
return arrayify(new Uint8Array(Buffer.from(textData, "base64")));
}
;
export function encode(data) {
return Buffer.from(arrayify(data)).toString("base64");
}
//# sourceMappingURL=index.js.map
-4
View File
@@ -1,4 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "base64/5.0.4";
//# sourceMappingURL=_version.js.map
-22
View File
@@ -1,22 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var bytes_1 = require("@ethersproject/bytes");
function decode(textData) {
textData = atob(textData);
var data = [];
for (var i = 0; i < textData.length; i++) {
data.push(textData.charCodeAt(i));
}
return bytes_1.arrayify(data);
}
exports.decode = decode;
function encode(data) {
data = bytes_1.arrayify(data);
var textData = "";
for (var i = 0; i < data.length; i++) {
textData += String.fromCharCode(data[i]);
}
return btoa(textData);
}
exports.encode = encode;
//# sourceMappingURL=browser.js.map
-13
View File
@@ -1,13 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var bytes_1 = require("@ethersproject/bytes");
function decode(textData) {
return bytes_1.arrayify(new Uint8Array(Buffer.from(textData, "base64")));
}
exports.decode = decode;
;
function encode(data) {
return Buffer.from(bytes_1.arrayify(data)).toString("base64");
}
exports.encode = encode;
//# sourceMappingURL=index.js.map
-66
View File
@@ -1,66 +0,0 @@
{
"_from": "@ethersproject/base64@^5.0.3",
"_id": "@ethersproject/base64@5.0.4",
"_inBundle": false,
"_integrity": "sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA==",
"_location": "/@ethersproject/base64",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "@ethersproject/base64@^5.0.3",
"name": "@ethersproject/base64",
"escapedName": "@ethersproject%2fbase64",
"scope": "@ethersproject",
"rawSpec": "^5.0.3",
"saveSpec": null,
"fetchSpec": "^5.0.3"
},
"_requiredBy": [
"/@ethersproject/web"
],
"_resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.4.tgz",
"_shasum": "b0d8fdbf3dda977cf546dcd35725a7b1d5256caa",
"_spec": "@ethersproject/base64@^5.0.3",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\BackendServers\\node_modules\\@ethersproject\\web",
"author": {
"name": "Richard Moore",
"email": "me@ricmoo.com"
},
"browser": "./lib/browser.js",
"browser.esm": "./lib.esm/browser.js",
"browser.umd": "./lib/browser.js",
"bugs": {
"url": "https://github.com/ethers-io/ethers.js/issues"
},
"bundleDependencies": false,
"dependencies": {
"@ethersproject/bytes": "^5.0.4"
},
"deprecated": false,
"description": "Base64 coder.",
"ethereum": "donations.ethers.eth",
"gitHead": "ffa4a2d0549fe2c606bda3130f4a3f3d788f8dcf",
"homepage": "https://github.com/ethers-io/ethers.js#readme",
"keywords": [
"Ethereum",
"ethers"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/base64",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0xf9edd66aa5131bf0bca2ea188265e0e333d781e4b0ef5e92090a7cef8556cb30",
"types": "./lib/index.d.ts",
"version": "5.0.4"
}
-2
View File
@@ -1,2 +0,0 @@
export const version = "bignumber/5.0.8";
//# sourceMappingURL=_version.js.map
-275
View File
@@ -1,275 +0,0 @@
"use strict";
/**
* BigNumber
*
* A wrapper around the BN.js object. We use the BN.js library
* because it is used by elliptic, so it is required regardles.
*
*/
import { BN } from "bn.js";
import { hexlify, isBytes, isHexString } from "@ethersproject/bytes";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
const _constructorGuard = {};
const MAX_SAFE = 0x1fffffffffffff;
export function isBigNumberish(value) {
return (value != null) && (BigNumber.isBigNumber(value) ||
(typeof (value) === "number" && (value % 1) === 0) ||
(typeof (value) === "string" && !!value.match(/^-?[0-9]+$/)) ||
isHexString(value) ||
(typeof (value) === "bigint") ||
isBytes(value));
}
export class BigNumber {
constructor(constructorGuard, hex) {
logger.checkNew(new.target, BigNumber);
if (constructorGuard !== _constructorGuard) {
logger.throwError("cannot call constructor directly; use BigNumber.from", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new (BigNumber)"
});
}
this._hex = hex;
this._isBigNumber = true;
Object.freeze(this);
}
fromTwos(value) {
return toBigNumber(toBN(this).fromTwos(value));
}
toTwos(value) {
return toBigNumber(toBN(this).toTwos(value));
}
abs() {
if (this._hex[0] === "-") {
return BigNumber.from(this._hex.substring(1));
}
return this;
}
add(other) {
return toBigNumber(toBN(this).add(toBN(other)));
}
sub(other) {
return toBigNumber(toBN(this).sub(toBN(other)));
}
div(other) {
const o = BigNumber.from(other);
if (o.isZero()) {
throwFault("division by zero", "div");
}
return toBigNumber(toBN(this).div(toBN(other)));
}
mul(other) {
return toBigNumber(toBN(this).mul(toBN(other)));
}
mod(other) {
const value = toBN(other);
if (value.isNeg()) {
throwFault("cannot modulo negative values", "mod");
}
return toBigNumber(toBN(this).umod(value));
}
pow(other) {
const value = toBN(other);
if (value.isNeg()) {
throwFault("cannot raise to negative values", "pow");
}
return toBigNumber(toBN(this).pow(value));
}
and(other) {
const value = toBN(other);
if (this.isNegative() || value.isNeg()) {
throwFault("cannot 'and' negative values", "and");
}
return toBigNumber(toBN(this).and(value));
}
or(other) {
const value = toBN(other);
if (this.isNegative() || value.isNeg()) {
throwFault("cannot 'or' negative values", "or");
}
return toBigNumber(toBN(this).or(value));
}
xor(other) {
const value = toBN(other);
if (this.isNegative() || value.isNeg()) {
throwFault("cannot 'xor' negative values", "xor");
}
return toBigNumber(toBN(this).xor(value));
}
mask(value) {
if (this.isNegative() || value < 0) {
throwFault("cannot mask negative values", "mask");
}
return toBigNumber(toBN(this).maskn(value));
}
shl(value) {
if (this.isNegative() || value < 0) {
throwFault("cannot shift negative values", "shl");
}
return toBigNumber(toBN(this).shln(value));
}
shr(value) {
if (this.isNegative() || value < 0) {
throwFault("cannot shift negative values", "shr");
}
return toBigNumber(toBN(this).shrn(value));
}
eq(other) {
return toBN(this).eq(toBN(other));
}
lt(other) {
return toBN(this).lt(toBN(other));
}
lte(other) {
return toBN(this).lte(toBN(other));
}
gt(other) {
return toBN(this).gt(toBN(other));
}
gte(other) {
return toBN(this).gte(toBN(other));
}
isNegative() {
return (this._hex[0] === "-");
}
isZero() {
return toBN(this).isZero();
}
toNumber() {
try {
return toBN(this).toNumber();
}
catch (error) {
throwFault("overflow", "toNumber", this.toString());
}
return null;
}
toString() {
// Lots of people expect this, which we do not support, so check
if (arguments.length !== 0) {
logger.throwError("bigNumber.toString does not accept parameters", Logger.errors.UNEXPECTED_ARGUMENT, {});
}
return toBN(this).toString(10);
}
toHexString() {
return this._hex;
}
toJSON(key) {
return { type: "BigNumber", hex: this.toHexString() };
}
static from(value) {
if (value instanceof BigNumber) {
return value;
}
if (typeof (value) === "string") {
if (value.match(/^-?0x[0-9a-f]+$/i)) {
return new BigNumber(_constructorGuard, toHex(value));
}
if (value.match(/^-?[0-9]+$/)) {
return new BigNumber(_constructorGuard, toHex(new BN(value)));
}
return logger.throwArgumentError("invalid BigNumber string", "value", value);
}
if (typeof (value) === "number") {
if (value % 1) {
throwFault("underflow", "BigNumber.from", value);
}
if (value >= MAX_SAFE || value <= -MAX_SAFE) {
throwFault("overflow", "BigNumber.from", value);
}
return BigNumber.from(String(value));
}
const anyValue = value;
if (typeof (anyValue) === "bigint") {
return BigNumber.from(anyValue.toString());
}
if (isBytes(anyValue)) {
return BigNumber.from(hexlify(anyValue));
}
if (anyValue) {
// Hexable interface (takes piority)
if (anyValue.toHexString) {
const hex = anyValue.toHexString();
if (typeof (hex) === "string") {
return BigNumber.from(hex);
}
}
else {
// For now, handle legacy JSON-ified values (goes away in v6)
let hex = anyValue._hex;
// New-form JSON
if (hex == null && anyValue.type === "BigNumber") {
hex = anyValue.hex;
}
if (typeof (hex) === "string") {
if (isHexString(hex) || (hex[0] === "-" && isHexString(hex.substring(1)))) {
return BigNumber.from(hex);
}
}
}
}
return logger.throwArgumentError("invalid BigNumber value", "value", value);
}
static isBigNumber(value) {
return !!(value && value._isBigNumber);
}
}
// Normalize the hex string
function toHex(value) {
// For BN, call on the hex string
if (typeof (value) !== "string") {
return toHex(value.toString(16));
}
// If negative, prepend the negative sign to the normalized positive value
if (value[0] === "-") {
// Strip off the negative sign
value = value.substring(1);
// Cannot have mulitple negative signs (e.g. "--0x04")
if (value[0] === "-") {
logger.throwArgumentError("invalid hex", "value", value);
}
// Call toHex on the positive component
value = toHex(value);
// Do not allow "-0x00"
if (value === "0x00") {
return value;
}
// Negate the value
return "-" + value;
}
// Add a "0x" prefix if missing
if (value.substring(0, 2) !== "0x") {
value = "0x" + value;
}
// Normalize zero
if (value === "0x") {
return "0x00";
}
// Make the string even length
if (value.length % 2) {
value = "0x0" + value.substring(2);
}
// Trim to smallest even-length string
while (value.length > 4 && value.substring(0, 4) === "0x00") {
value = "0x" + value.substring(4);
}
return value;
}
function toBigNumber(value) {
return BigNumber.from(toHex(value));
}
function toBN(value) {
const hex = BigNumber.from(value).toHexString();
if (hex[0] === "-") {
return (new BN("-" + hex.substring(3), 16));
}
return new BN(hex.substring(2), 16);
}
function throwFault(fault, operation, value) {
const params = { fault: fault, operation: operation };
if (value != null) {
params.value = value;
}
return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);
}
//# sourceMappingURL=bignumber.js.map
-339
View File
@@ -1,339 +0,0 @@
"use strict";
import { arrayify, hexZeroPad, isBytes } from "@ethersproject/bytes";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
import { BigNumber, isBigNumberish } from "./bignumber";
const _constructorGuard = {};
const Zero = BigNumber.from(0);
const NegativeOne = BigNumber.from(-1);
function throwFault(message, fault, operation, value) {
const params = { fault: fault, operation: operation };
if (value !== undefined) {
params.value = value;
}
return logger.throwError(message, Logger.errors.NUMERIC_FAULT, params);
}
// Constant to pull zeros from for multipliers
let zeros = "0";
while (zeros.length < 256) {
zeros += zeros;
}
// Returns a string "1" followed by decimal "0"s
function getMultiplier(decimals) {
if (typeof (decimals) !== "number") {
try {
decimals = BigNumber.from(decimals).toNumber();
}
catch (e) { }
}
if (typeof (decimals) === "number" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) {
return ("1" + zeros.substring(0, decimals));
}
return logger.throwArgumentError("invalid decimal size", "decimals", decimals);
}
export function formatFixed(value, decimals) {
if (decimals == null) {
decimals = 0;
}
const multiplier = getMultiplier(decimals);
// Make sure wei is a big number (convert as necessary)
value = BigNumber.from(value);
const negative = value.lt(Zero);
if (negative) {
value = value.mul(NegativeOne);
}
let fraction = value.mod(multiplier).toString();
while (fraction.length < multiplier.length - 1) {
fraction = "0" + fraction;
}
// Strip training 0
fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];
const whole = value.div(multiplier).toString();
value = whole + "." + fraction;
if (negative) {
value = "-" + value;
}
return value;
}
export function parseFixed(value, decimals) {
if (decimals == null) {
decimals = 0;
}
const multiplier = getMultiplier(decimals);
if (typeof (value) !== "string" || !value.match(/^-?[0-9.,]+$/)) {
logger.throwArgumentError("invalid decimal value", "value", value);
}
if (multiplier.length - 1 === 0) {
return BigNumber.from(value);
}
// Is it negative?
const negative = (value.substring(0, 1) === "-");
if (negative) {
value = value.substring(1);
}
if (value === ".") {
logger.throwArgumentError("missing value", "value", value);
}
// Split it into a whole and fractional part
const comps = value.split(".");
if (comps.length > 2) {
logger.throwArgumentError("too many decimal points", "value", value);
}
let whole = comps[0], fraction = comps[1];
if (!whole) {
whole = "0";
}
if (!fraction) {
fraction = "0";
}
// Prevent underflow
if (fraction.length > multiplier.length - 1) {
throwFault("fractional component exceeds decimals", "underflow", "parseFixed");
}
// Fully pad the string with zeros to get to wei
while (fraction.length < multiplier.length - 1) {
fraction += "0";
}
const wholeValue = BigNumber.from(whole);
const fractionValue = BigNumber.from(fraction);
let wei = (wholeValue.mul(multiplier)).add(fractionValue);
if (negative) {
wei = wei.mul(NegativeOne);
}
return wei;
}
export class FixedFormat {
constructor(constructorGuard, signed, width, decimals) {
if (constructorGuard !== _constructorGuard) {
logger.throwError("cannot use FixedFormat constructor; use FixedFormat.from", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new FixedFormat"
});
}
this.signed = signed;
this.width = width;
this.decimals = decimals;
this.name = (signed ? "" : "u") + "fixed" + String(width) + "x" + String(decimals);
this._multiplier = getMultiplier(decimals);
Object.freeze(this);
}
static from(value) {
if (value instanceof FixedFormat) {
return value;
}
let signed = true;
let width = 128;
let decimals = 18;
if (typeof (value) === "string") {
if (value === "fixed") {
// defaults...
}
else if (value === "ufixed") {
signed = false;
}
else if (value != null) {
const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);
if (!match) {
logger.throwArgumentError("invalid fixed format", "format", value);
}
signed = (match[1] !== "u");
width = parseInt(match[2]);
decimals = parseInt(match[3]);
}
}
else if (value) {
const check = (key, type, defaultValue) => {
if (value[key] == null) {
return defaultValue;
}
if (typeof (value[key]) !== type) {
logger.throwArgumentError("invalid fixed format (" + key + " not " + type + ")", "format." + key, value[key]);
}
return value[key];
};
signed = check("signed", "boolean", signed);
width = check("width", "number", width);
decimals = check("decimals", "number", decimals);
}
if (width % 8) {
logger.throwArgumentError("invalid fixed format width (not byte aligned)", "format.width", width);
}
if (decimals > 80) {
logger.throwArgumentError("invalid fixed format (decimals too large)", "format.decimals", decimals);
}
return new FixedFormat(_constructorGuard, signed, width, decimals);
}
}
export class FixedNumber {
constructor(constructorGuard, hex, value, format) {
logger.checkNew(new.target, FixedNumber);
if (constructorGuard !== _constructorGuard) {
logger.throwError("cannot use FixedNumber constructor; use FixedNumber.from", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new FixedFormat"
});
}
this.format = format;
this._hex = hex;
this._value = value;
this._isFixedNumber = true;
Object.freeze(this);
}
_checkFormat(other) {
if (this.format.name !== other.format.name) {
logger.throwArgumentError("incompatible format; use fixedNumber.toFormat", "other", other);
}
}
addUnsafe(other) {
this._checkFormat(other);
const a = parseFixed(this._value, this.format.decimals);
const b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format);
}
subUnsafe(other) {
this._checkFormat(other);
const a = parseFixed(this._value, this.format.decimals);
const b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format);
}
mulUnsafe(other) {
this._checkFormat(other);
const a = parseFixed(this._value, this.format.decimals);
const b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format);
}
divUnsafe(other) {
this._checkFormat(other);
const a = parseFixed(this._value, this.format.decimals);
const b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format);
}
floor() {
let comps = this.toString().split(".");
let result = FixedNumber.from(comps[0], this.format);
const hasFraction = !comps[1].match(/^(0*)$/);
if (this.isNegative() && hasFraction) {
result = result.subUnsafe(ONE);
}
return result;
}
ceiling() {
let comps = this.toString().split(".");
let result = FixedNumber.from(comps[0], this.format);
const hasFraction = !comps[1].match(/^(0*)$/);
if (!this.isNegative() && hasFraction) {
result = result.addUnsafe(ONE);
}
return result;
}
// @TODO: Support other rounding algorithms
round(decimals) {
if (decimals == null) {
decimals = 0;
}
// If we are already in range, we're done
let comps = this.toString().split(".");
if (decimals < 0 || decimals > 80 || (decimals % 1)) {
logger.throwArgumentError("invalid decimal count", "decimals", decimals);
}
if (comps[1].length <= decimals) {
return this;
}
const factor = FixedNumber.from("1" + zeros.substring(0, decimals));
return this.mulUnsafe(factor).addUnsafe(BUMP).floor().divUnsafe(factor);
}
isZero() {
return (this._value === "0.0");
}
isNegative() {
return (this._value[0] === "-");
}
toString() { return this._value; }
toHexString(width) {
if (width == null) {
return this._hex;
}
if (width % 8) {
logger.throwArgumentError("invalid byte width", "width", width);
}
const hex = BigNumber.from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString();
return hexZeroPad(hex, width / 8);
}
toUnsafeFloat() { return parseFloat(this.toString()); }
toFormat(format) {
return FixedNumber.fromString(this._value, format);
}
static fromValue(value, decimals, format) {
// If decimals looks more like a format, and there is no format, shift the parameters
if (format == null && decimals != null && !isBigNumberish(decimals)) {
format = decimals;
decimals = null;
}
if (decimals == null) {
decimals = 0;
}
if (format == null) {
format = "fixed";
}
return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));
}
static fromString(value, format) {
if (format == null) {
format = "fixed";
}
const fixedFormat = FixedFormat.from(format);
const numeric = parseFixed(value, fixedFormat.decimals);
if (!fixedFormat.signed && numeric.lt(Zero)) {
throwFault("unsigned value cannot be negative", "overflow", "value", value);
}
let hex = null;
if (fixedFormat.signed) {
hex = numeric.toTwos(fixedFormat.width).toHexString();
}
else {
hex = numeric.toHexString();
hex = hexZeroPad(hex, fixedFormat.width / 8);
}
const decimal = formatFixed(numeric, fixedFormat.decimals);
return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);
}
static fromBytes(value, format) {
if (format == null) {
format = "fixed";
}
const fixedFormat = FixedFormat.from(format);
if (arrayify(value).length > fixedFormat.width / 8) {
throw new Error("overflow");
}
let numeric = BigNumber.from(value);
if (fixedFormat.signed) {
numeric = numeric.fromTwos(fixedFormat.width);
}
const hex = numeric.toTwos((fixedFormat.signed ? 0 : 1) + fixedFormat.width).toHexString();
const decimal = formatFixed(numeric, fixedFormat.decimals);
return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);
}
static from(value, format) {
if (typeof (value) === "string") {
return FixedNumber.fromString(value, format);
}
if (isBytes(value)) {
return FixedNumber.fromBytes(value, format);
}
try {
return FixedNumber.fromValue(value, 0, format);
}
catch (error) {
// Allow NUMERIC_FAULT to bubble up
if (error.code !== Logger.errors.INVALID_ARGUMENT) {
throw error;
}
}
return logger.throwArgumentError("invalid FixedNumber value", "value", value);
}
static isFixedNumber(value) {
return !!(value && value._isFixedNumber);
}
}
const ONE = FixedNumber.from(1);
const BUMP = FixedNumber.from("0.5");
//# sourceMappingURL=fixednumber.js.map
-3
View File
@@ -1,3 +0,0 @@
export { BigNumber } from "./bignumber";
export { formatFixed, FixedFormat, FixedNumber, parseFixed } from "./fixednumber";
//# sourceMappingURL=index.js.map
-4
View File
@@ -1,4 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "bignumber/5.0.8";
//# sourceMappingURL=_version.js.map
-280
View File
@@ -1,280 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* BigNumber
*
* A wrapper around the BN.js object. We use the BN.js library
* because it is used by elliptic, so it is required regardles.
*
*/
var bn_js_1 = require("bn.js");
var bytes_1 = require("@ethersproject/bytes");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
var _constructorGuard = {};
var MAX_SAFE = 0x1fffffffffffff;
function isBigNumberish(value) {
return (value != null) && (BigNumber.isBigNumber(value) ||
(typeof (value) === "number" && (value % 1) === 0) ||
(typeof (value) === "string" && !!value.match(/^-?[0-9]+$/)) ||
bytes_1.isHexString(value) ||
(typeof (value) === "bigint") ||
bytes_1.isBytes(value));
}
exports.isBigNumberish = isBigNumberish;
var BigNumber = /** @class */ (function () {
function BigNumber(constructorGuard, hex) {
var _newTarget = this.constructor;
logger.checkNew(_newTarget, BigNumber);
if (constructorGuard !== _constructorGuard) {
logger.throwError("cannot call constructor directly; use BigNumber.from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new (BigNumber)"
});
}
this._hex = hex;
this._isBigNumber = true;
Object.freeze(this);
}
BigNumber.prototype.fromTwos = function (value) {
return toBigNumber(toBN(this).fromTwos(value));
};
BigNumber.prototype.toTwos = function (value) {
return toBigNumber(toBN(this).toTwos(value));
};
BigNumber.prototype.abs = function () {
if (this._hex[0] === "-") {
return BigNumber.from(this._hex.substring(1));
}
return this;
};
BigNumber.prototype.add = function (other) {
return toBigNumber(toBN(this).add(toBN(other)));
};
BigNumber.prototype.sub = function (other) {
return toBigNumber(toBN(this).sub(toBN(other)));
};
BigNumber.prototype.div = function (other) {
var o = BigNumber.from(other);
if (o.isZero()) {
throwFault("division by zero", "div");
}
return toBigNumber(toBN(this).div(toBN(other)));
};
BigNumber.prototype.mul = function (other) {
return toBigNumber(toBN(this).mul(toBN(other)));
};
BigNumber.prototype.mod = function (other) {
var value = toBN(other);
if (value.isNeg()) {
throwFault("cannot modulo negative values", "mod");
}
return toBigNumber(toBN(this).umod(value));
};
BigNumber.prototype.pow = function (other) {
var value = toBN(other);
if (value.isNeg()) {
throwFault("cannot raise to negative values", "pow");
}
return toBigNumber(toBN(this).pow(value));
};
BigNumber.prototype.and = function (other) {
var value = toBN(other);
if (this.isNegative() || value.isNeg()) {
throwFault("cannot 'and' negative values", "and");
}
return toBigNumber(toBN(this).and(value));
};
BigNumber.prototype.or = function (other) {
var value = toBN(other);
if (this.isNegative() || value.isNeg()) {
throwFault("cannot 'or' negative values", "or");
}
return toBigNumber(toBN(this).or(value));
};
BigNumber.prototype.xor = function (other) {
var value = toBN(other);
if (this.isNegative() || value.isNeg()) {
throwFault("cannot 'xor' negative values", "xor");
}
return toBigNumber(toBN(this).xor(value));
};
BigNumber.prototype.mask = function (value) {
if (this.isNegative() || value < 0) {
throwFault("cannot mask negative values", "mask");
}
return toBigNumber(toBN(this).maskn(value));
};
BigNumber.prototype.shl = function (value) {
if (this.isNegative() || value < 0) {
throwFault("cannot shift negative values", "shl");
}
return toBigNumber(toBN(this).shln(value));
};
BigNumber.prototype.shr = function (value) {
if (this.isNegative() || value < 0) {
throwFault("cannot shift negative values", "shr");
}
return toBigNumber(toBN(this).shrn(value));
};
BigNumber.prototype.eq = function (other) {
return toBN(this).eq(toBN(other));
};
BigNumber.prototype.lt = function (other) {
return toBN(this).lt(toBN(other));
};
BigNumber.prototype.lte = function (other) {
return toBN(this).lte(toBN(other));
};
BigNumber.prototype.gt = function (other) {
return toBN(this).gt(toBN(other));
};
BigNumber.prototype.gte = function (other) {
return toBN(this).gte(toBN(other));
};
BigNumber.prototype.isNegative = function () {
return (this._hex[0] === "-");
};
BigNumber.prototype.isZero = function () {
return toBN(this).isZero();
};
BigNumber.prototype.toNumber = function () {
try {
return toBN(this).toNumber();
}
catch (error) {
throwFault("overflow", "toNumber", this.toString());
}
return null;
};
BigNumber.prototype.toString = function () {
// Lots of people expect this, which we do not support, so check
if (arguments.length !== 0) {
logger.throwError("bigNumber.toString does not accept parameters", logger_1.Logger.errors.UNEXPECTED_ARGUMENT, {});
}
return toBN(this).toString(10);
};
BigNumber.prototype.toHexString = function () {
return this._hex;
};
BigNumber.prototype.toJSON = function (key) {
return { type: "BigNumber", hex: this.toHexString() };
};
BigNumber.from = function (value) {
if (value instanceof BigNumber) {
return value;
}
if (typeof (value) === "string") {
if (value.match(/^-?0x[0-9a-f]+$/i)) {
return new BigNumber(_constructorGuard, toHex(value));
}
if (value.match(/^-?[0-9]+$/)) {
return new BigNumber(_constructorGuard, toHex(new bn_js_1.BN(value)));
}
return logger.throwArgumentError("invalid BigNumber string", "value", value);
}
if (typeof (value) === "number") {
if (value % 1) {
throwFault("underflow", "BigNumber.from", value);
}
if (value >= MAX_SAFE || value <= -MAX_SAFE) {
throwFault("overflow", "BigNumber.from", value);
}
return BigNumber.from(String(value));
}
var anyValue = value;
if (typeof (anyValue) === "bigint") {
return BigNumber.from(anyValue.toString());
}
if (bytes_1.isBytes(anyValue)) {
return BigNumber.from(bytes_1.hexlify(anyValue));
}
if (anyValue) {
// Hexable interface (takes piority)
if (anyValue.toHexString) {
var hex = anyValue.toHexString();
if (typeof (hex) === "string") {
return BigNumber.from(hex);
}
}
else {
// For now, handle legacy JSON-ified values (goes away in v6)
var hex = anyValue._hex;
// New-form JSON
if (hex == null && anyValue.type === "BigNumber") {
hex = anyValue.hex;
}
if (typeof (hex) === "string") {
if (bytes_1.isHexString(hex) || (hex[0] === "-" && bytes_1.isHexString(hex.substring(1)))) {
return BigNumber.from(hex);
}
}
}
}
return logger.throwArgumentError("invalid BigNumber value", "value", value);
};
BigNumber.isBigNumber = function (value) {
return !!(value && value._isBigNumber);
};
return BigNumber;
}());
exports.BigNumber = BigNumber;
// Normalize the hex string
function toHex(value) {
// For BN, call on the hex string
if (typeof (value) !== "string") {
return toHex(value.toString(16));
}
// If negative, prepend the negative sign to the normalized positive value
if (value[0] === "-") {
// Strip off the negative sign
value = value.substring(1);
// Cannot have mulitple negative signs (e.g. "--0x04")
if (value[0] === "-") {
logger.throwArgumentError("invalid hex", "value", value);
}
// Call toHex on the positive component
value = toHex(value);
// Do not allow "-0x00"
if (value === "0x00") {
return value;
}
// Negate the value
return "-" + value;
}
// Add a "0x" prefix if missing
if (value.substring(0, 2) !== "0x") {
value = "0x" + value;
}
// Normalize zero
if (value === "0x") {
return "0x00";
}
// Make the string even length
if (value.length % 2) {
value = "0x0" + value.substring(2);
}
// Trim to smallest even-length string
while (value.length > 4 && value.substring(0, 4) === "0x00") {
value = "0x" + value.substring(4);
}
return value;
}
function toBigNumber(value) {
return BigNumber.from(toHex(value));
}
function toBN(value) {
var hex = BigNumber.from(value).toHexString();
if (hex[0] === "-") {
return (new bn_js_1.BN("-" + hex.substring(3), 16));
}
return new bn_js_1.BN(hex.substring(2), 16);
}
function throwFault(fault, operation, value) {
var params = { fault: fault, operation: operation };
if (value != null) {
params.value = value;
}
return logger.throwError(fault, logger_1.Logger.errors.NUMERIC_FAULT, params);
}
//# sourceMappingURL=bignumber.js.map
-347
View File
@@ -1,347 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var bytes_1 = require("@ethersproject/bytes");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
var bignumber_1 = require("./bignumber");
var _constructorGuard = {};
var Zero = bignumber_1.BigNumber.from(0);
var NegativeOne = bignumber_1.BigNumber.from(-1);
function throwFault(message, fault, operation, value) {
var params = { fault: fault, operation: operation };
if (value !== undefined) {
params.value = value;
}
return logger.throwError(message, logger_1.Logger.errors.NUMERIC_FAULT, params);
}
// Constant to pull zeros from for multipliers
var zeros = "0";
while (zeros.length < 256) {
zeros += zeros;
}
// Returns a string "1" followed by decimal "0"s
function getMultiplier(decimals) {
if (typeof (decimals) !== "number") {
try {
decimals = bignumber_1.BigNumber.from(decimals).toNumber();
}
catch (e) { }
}
if (typeof (decimals) === "number" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) {
return ("1" + zeros.substring(0, decimals));
}
return logger.throwArgumentError("invalid decimal size", "decimals", decimals);
}
function formatFixed(value, decimals) {
if (decimals == null) {
decimals = 0;
}
var multiplier = getMultiplier(decimals);
// Make sure wei is a big number (convert as necessary)
value = bignumber_1.BigNumber.from(value);
var negative = value.lt(Zero);
if (negative) {
value = value.mul(NegativeOne);
}
var fraction = value.mod(multiplier).toString();
while (fraction.length < multiplier.length - 1) {
fraction = "0" + fraction;
}
// Strip training 0
fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];
var whole = value.div(multiplier).toString();
value = whole + "." + fraction;
if (negative) {
value = "-" + value;
}
return value;
}
exports.formatFixed = formatFixed;
function parseFixed(value, decimals) {
if (decimals == null) {
decimals = 0;
}
var multiplier = getMultiplier(decimals);
if (typeof (value) !== "string" || !value.match(/^-?[0-9.,]+$/)) {
logger.throwArgumentError("invalid decimal value", "value", value);
}
if (multiplier.length - 1 === 0) {
return bignumber_1.BigNumber.from(value);
}
// Is it negative?
var negative = (value.substring(0, 1) === "-");
if (negative) {
value = value.substring(1);
}
if (value === ".") {
logger.throwArgumentError("missing value", "value", value);
}
// Split it into a whole and fractional part
var comps = value.split(".");
if (comps.length > 2) {
logger.throwArgumentError("too many decimal points", "value", value);
}
var whole = comps[0], fraction = comps[1];
if (!whole) {
whole = "0";
}
if (!fraction) {
fraction = "0";
}
// Prevent underflow
if (fraction.length > multiplier.length - 1) {
throwFault("fractional component exceeds decimals", "underflow", "parseFixed");
}
// Fully pad the string with zeros to get to wei
while (fraction.length < multiplier.length - 1) {
fraction += "0";
}
var wholeValue = bignumber_1.BigNumber.from(whole);
var fractionValue = bignumber_1.BigNumber.from(fraction);
var wei = (wholeValue.mul(multiplier)).add(fractionValue);
if (negative) {
wei = wei.mul(NegativeOne);
}
return wei;
}
exports.parseFixed = parseFixed;
var FixedFormat = /** @class */ (function () {
function FixedFormat(constructorGuard, signed, width, decimals) {
if (constructorGuard !== _constructorGuard) {
logger.throwError("cannot use FixedFormat constructor; use FixedFormat.from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new FixedFormat"
});
}
this.signed = signed;
this.width = width;
this.decimals = decimals;
this.name = (signed ? "" : "u") + "fixed" + String(width) + "x" + String(decimals);
this._multiplier = getMultiplier(decimals);
Object.freeze(this);
}
FixedFormat.from = function (value) {
if (value instanceof FixedFormat) {
return value;
}
var signed = true;
var width = 128;
var decimals = 18;
if (typeof (value) === "string") {
if (value === "fixed") {
// defaults...
}
else if (value === "ufixed") {
signed = false;
}
else if (value != null) {
var match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);
if (!match) {
logger.throwArgumentError("invalid fixed format", "format", value);
}
signed = (match[1] !== "u");
width = parseInt(match[2]);
decimals = parseInt(match[3]);
}
}
else if (value) {
var check = function (key, type, defaultValue) {
if (value[key] == null) {
return defaultValue;
}
if (typeof (value[key]) !== type) {
logger.throwArgumentError("invalid fixed format (" + key + " not " + type + ")", "format." + key, value[key]);
}
return value[key];
};
signed = check("signed", "boolean", signed);
width = check("width", "number", width);
decimals = check("decimals", "number", decimals);
}
if (width % 8) {
logger.throwArgumentError("invalid fixed format width (not byte aligned)", "format.width", width);
}
if (decimals > 80) {
logger.throwArgumentError("invalid fixed format (decimals too large)", "format.decimals", decimals);
}
return new FixedFormat(_constructorGuard, signed, width, decimals);
};
return FixedFormat;
}());
exports.FixedFormat = FixedFormat;
var FixedNumber = /** @class */ (function () {
function FixedNumber(constructorGuard, hex, value, format) {
var _newTarget = this.constructor;
logger.checkNew(_newTarget, FixedNumber);
if (constructorGuard !== _constructorGuard) {
logger.throwError("cannot use FixedNumber constructor; use FixedNumber.from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new FixedFormat"
});
}
this.format = format;
this._hex = hex;
this._value = value;
this._isFixedNumber = true;
Object.freeze(this);
}
FixedNumber.prototype._checkFormat = function (other) {
if (this.format.name !== other.format.name) {
logger.throwArgumentError("incompatible format; use fixedNumber.toFormat", "other", other);
}
};
FixedNumber.prototype.addUnsafe = function (other) {
this._checkFormat(other);
var a = parseFixed(this._value, this.format.decimals);
var b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format);
};
FixedNumber.prototype.subUnsafe = function (other) {
this._checkFormat(other);
var a = parseFixed(this._value, this.format.decimals);
var b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format);
};
FixedNumber.prototype.mulUnsafe = function (other) {
this._checkFormat(other);
var a = parseFixed(this._value, this.format.decimals);
var b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format);
};
FixedNumber.prototype.divUnsafe = function (other) {
this._checkFormat(other);
var a = parseFixed(this._value, this.format.decimals);
var b = parseFixed(other._value, other.format.decimals);
return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format);
};
FixedNumber.prototype.floor = function () {
var comps = this.toString().split(".");
var result = FixedNumber.from(comps[0], this.format);
var hasFraction = !comps[1].match(/^(0*)$/);
if (this.isNegative() && hasFraction) {
result = result.subUnsafe(ONE);
}
return result;
};
FixedNumber.prototype.ceiling = function () {
var comps = this.toString().split(".");
var result = FixedNumber.from(comps[0], this.format);
var hasFraction = !comps[1].match(/^(0*)$/);
if (!this.isNegative() && hasFraction) {
result = result.addUnsafe(ONE);
}
return result;
};
// @TODO: Support other rounding algorithms
FixedNumber.prototype.round = function (decimals) {
if (decimals == null) {
decimals = 0;
}
// If we are already in range, we're done
var comps = this.toString().split(".");
if (decimals < 0 || decimals > 80 || (decimals % 1)) {
logger.throwArgumentError("invalid decimal count", "decimals", decimals);
}
if (comps[1].length <= decimals) {
return this;
}
var factor = FixedNumber.from("1" + zeros.substring(0, decimals));
return this.mulUnsafe(factor).addUnsafe(BUMP).floor().divUnsafe(factor);
};
FixedNumber.prototype.isZero = function () {
return (this._value === "0.0");
};
FixedNumber.prototype.isNegative = function () {
return (this._value[0] === "-");
};
FixedNumber.prototype.toString = function () { return this._value; };
FixedNumber.prototype.toHexString = function (width) {
if (width == null) {
return this._hex;
}
if (width % 8) {
logger.throwArgumentError("invalid byte width", "width", width);
}
var hex = bignumber_1.BigNumber.from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString();
return bytes_1.hexZeroPad(hex, width / 8);
};
FixedNumber.prototype.toUnsafeFloat = function () { return parseFloat(this.toString()); };
FixedNumber.prototype.toFormat = function (format) {
return FixedNumber.fromString(this._value, format);
};
FixedNumber.fromValue = function (value, decimals, format) {
// If decimals looks more like a format, and there is no format, shift the parameters
if (format == null && decimals != null && !bignumber_1.isBigNumberish(decimals)) {
format = decimals;
decimals = null;
}
if (decimals == null) {
decimals = 0;
}
if (format == null) {
format = "fixed";
}
return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));
};
FixedNumber.fromString = function (value, format) {
if (format == null) {
format = "fixed";
}
var fixedFormat = FixedFormat.from(format);
var numeric = parseFixed(value, fixedFormat.decimals);
if (!fixedFormat.signed && numeric.lt(Zero)) {
throwFault("unsigned value cannot be negative", "overflow", "value", value);
}
var hex = null;
if (fixedFormat.signed) {
hex = numeric.toTwos(fixedFormat.width).toHexString();
}
else {
hex = numeric.toHexString();
hex = bytes_1.hexZeroPad(hex, fixedFormat.width / 8);
}
var decimal = formatFixed(numeric, fixedFormat.decimals);
return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);
};
FixedNumber.fromBytes = function (value, format) {
if (format == null) {
format = "fixed";
}
var fixedFormat = FixedFormat.from(format);
if (bytes_1.arrayify(value).length > fixedFormat.width / 8) {
throw new Error("overflow");
}
var numeric = bignumber_1.BigNumber.from(value);
if (fixedFormat.signed) {
numeric = numeric.fromTwos(fixedFormat.width);
}
var hex = numeric.toTwos((fixedFormat.signed ? 0 : 1) + fixedFormat.width).toHexString();
var decimal = formatFixed(numeric, fixedFormat.decimals);
return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);
};
FixedNumber.from = function (value, format) {
if (typeof (value) === "string") {
return FixedNumber.fromString(value, format);
}
if (bytes_1.isBytes(value)) {
return FixedNumber.fromBytes(value, format);
}
try {
return FixedNumber.fromValue(value, 0, format);
}
catch (error) {
// Allow NUMERIC_FAULT to bubble up
if (error.code !== logger_1.Logger.errors.INVALID_ARGUMENT) {
throw error;
}
}
return logger.throwArgumentError("invalid FixedNumber value", "value", value);
};
FixedNumber.isFixedNumber = function (value) {
return !!(value && value._isFixedNumber);
};
return FixedNumber;
}());
exports.FixedNumber = FixedNumber;
var ONE = FixedNumber.from(1);
var BUMP = FixedNumber.from("0.5");
//# sourceMappingURL=fixednumber.js.map
-10
View File
@@ -1,10 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var bignumber_1 = require("./bignumber");
exports.BigNumber = bignumber_1.BigNumber;
var fixednumber_1 = require("./fixednumber");
exports.formatFixed = fixednumber_1.formatFixed;
exports.FixedFormat = fixednumber_1.FixedFormat;
exports.FixedNumber = fixednumber_1.FixedNumber;
exports.parseFixed = fixednumber_1.parseFixed;
//# sourceMappingURL=index.js.map
-72
View File
@@ -1,72 +0,0 @@
{
"_from": "@ethersproject/bignumber@^5.0.7",
"_id": "@ethersproject/bignumber@5.0.8",
"_inBundle": false,
"_integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==",
"_location": "/@ethersproject/bignumber",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "@ethersproject/bignumber@^5.0.7",
"name": "@ethersproject/bignumber",
"escapedName": "@ethersproject%2fbignumber",
"scope": "@ethersproject",
"rawSpec": "^5.0.7",
"saveSpec": null,
"fetchSpec": "^5.0.7"
},
"_requiredBy": [
"/@ethersproject/abi",
"/@ethersproject/abstract-provider",
"/@ethersproject/abstract-signer",
"/@ethersproject/address",
"/@ethersproject/constants",
"/@ethersproject/hash",
"/@ethersproject/transactions"
],
"_resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz",
"_shasum": "cee33bd8eb0266176def0d371b45274b1d2c4ec0",
"_spec": "@ethersproject/bignumber@^5.0.7",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\BackendServers\\node_modules\\@ethersproject\\transactions",
"author": {
"name": "Richard Moore",
"email": "me@ricmoo.com"
},
"bugs": {
"url": "https://github.com/ethers-io/ethers.js/issues"
},
"bundleDependencies": false,
"dependencies": {
"@ethersproject/bytes": "^5.0.4",
"@ethersproject/logger": "^5.0.5",
"bn.js": "^4.4.0"
},
"deprecated": false,
"description": "BigNumber library used in ethers.js.",
"ethereum": "donations.ethers.eth",
"gitHead": "ffa4a2d0549fe2c606bda3130f4a3f3d788f8dcf",
"homepage": "https://github.com/ethers-io/ethers.js#readme",
"keywords": [
"Ethereum",
"bignumber",
"bn"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/bignumber",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0x13de0d9c0138d0d056ed658b8f8744fab45fcdf4b52dcd9456bfd7285a4288ce",
"types": "./lib/index.d.ts",
"version": "5.0.8"
}
-2
View File
@@ -1,2 +0,0 @@
export const version = "bytes/5.0.5";
//# sourceMappingURL=_version.js.map
-380
View File
@@ -1,380 +0,0 @@
"use strict";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
///////////////////////////////
function isHexable(value) {
return !!(value.toHexString);
}
function addSlice(array) {
if (array.slice) {
return array;
}
array.slice = function () {
const args = Array.prototype.slice.call(arguments);
return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));
};
return array;
}
export function isBytesLike(value) {
return ((isHexString(value) && !(value.length % 2)) || isBytes(value));
}
export function isBytes(value) {
if (value == null) {
return false;
}
if (value.constructor === Uint8Array) {
return true;
}
if (typeof (value) === "string") {
return false;
}
if (value.length == null) {
return false;
}
for (let i = 0; i < value.length; i++) {
const v = value[i];
if (v < 0 || v >= 256 || (v % 1)) {
return false;
}
}
return true;
}
export function arrayify(value, options) {
if (!options) {
options = {};
}
if (typeof (value) === "number") {
logger.checkSafeUint53(value, "invalid arrayify value");
const result = [];
while (value) {
result.unshift(value & 0xff);
value = parseInt(String(value / 256));
}
if (result.length === 0) {
result.push(0);
}
return addSlice(new Uint8Array(result));
}
if (options.allowMissingPrefix && typeof (value) === "string" && value.substring(0, 2) !== "0x") {
value = "0x" + value;
}
if (isHexable(value)) {
value = value.toHexString();
}
if (isHexString(value)) {
let hex = value.substring(2);
if (hex.length % 2) {
if (options.hexPad === "left") {
hex = "0x0" + hex.substring(2);
}
else if (options.hexPad === "right") {
hex += "0";
}
else {
logger.throwArgumentError("hex data is odd-length", "value", value);
}
}
const result = [];
for (let i = 0; i < hex.length; i += 2) {
result.push(parseInt(hex.substring(i, i + 2), 16));
}
return addSlice(new Uint8Array(result));
}
if (isBytes(value)) {
return addSlice(new Uint8Array(value));
}
return logger.throwArgumentError("invalid arrayify value", "value", value);
}
export function concat(items) {
const objects = items.map(item => arrayify(item));
const length = objects.reduce((accum, item) => (accum + item.length), 0);
const result = new Uint8Array(length);
objects.reduce((offset, object) => {
result.set(object, offset);
return offset + object.length;
}, 0);
return addSlice(result);
}
export function stripZeros(value) {
let result = arrayify(value);
if (result.length === 0) {
return result;
}
// Find the first non-zero entry
let start = 0;
while (start < result.length && result[start] === 0) {
start++;
}
// If we started with zeros, strip them
if (start) {
result = result.slice(start);
}
return result;
}
export function zeroPad(value, length) {
value = arrayify(value);
if (value.length > length) {
logger.throwArgumentError("value out of range", "value", arguments[0]);
}
const result = new Uint8Array(length);
result.set(value, length - value.length);
return addSlice(result);
}
export function isHexString(value, length) {
if (typeof (value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) {
return false;
}
if (length && value.length !== 2 + 2 * length) {
return false;
}
return true;
}
const HexCharacters = "0123456789abcdef";
export function hexlify(value, options) {
if (!options) {
options = {};
}
if (typeof (value) === "number") {
logger.checkSafeUint53(value, "invalid hexlify value");
let hex = "";
while (value) {
hex = HexCharacters[value & 0x0f] + hex;
value = Math.floor(value / 16);
}
if (hex.length) {
if (hex.length % 2) {
hex = "0" + hex;
}
return "0x" + hex;
}
return "0x00";
}
if (options.allowMissingPrefix && typeof (value) === "string" && value.substring(0, 2) !== "0x") {
value = "0x" + value;
}
if (isHexable(value)) {
return value.toHexString();
}
if (isHexString(value)) {
if (value.length % 2) {
if (options.hexPad === "left") {
value = "0x0" + value.substring(2);
}
else if (options.hexPad === "right") {
value += "0";
}
else {
logger.throwArgumentError("hex data is odd-length", "value", value);
}
}
return value.toLowerCase();
}
if (isBytes(value)) {
let result = "0x";
for (let i = 0; i < value.length; i++) {
let v = value[i];
result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];
}
return result;
}
return logger.throwArgumentError("invalid hexlify value", "value", value);
}
/*
function unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {
if (typeof(value) === "string" && value.length % 2 && value.substring(0, 2) === "0x") {
return "0x0" + value.substring(2);
}
return value;
}
*/
export function hexDataLength(data) {
if (typeof (data) !== "string") {
data = hexlify(data);
}
else if (!isHexString(data) || (data.length % 2)) {
return null;
}
return (data.length - 2) / 2;
}
export function hexDataSlice(data, offset, endOffset) {
if (typeof (data) !== "string") {
data = hexlify(data);
}
else if (!isHexString(data) || (data.length % 2)) {
logger.throwArgumentError("invalid hexData", "value", data);
}
offset = 2 + 2 * offset;
if (endOffset != null) {
return "0x" + data.substring(offset, 2 + 2 * endOffset);
}
return "0x" + data.substring(offset);
}
export function hexConcat(items) {
let result = "0x";
items.forEach((item) => {
result += hexlify(item).substring(2);
});
return result;
}
export function hexValue(value) {
const trimmed = hexStripZeros(hexlify(value, { hexPad: "left" }));
if (trimmed === "0x") {
return "0x0";
}
return trimmed;
}
export function hexStripZeros(value) {
if (typeof (value) !== "string") {
value = hexlify(value);
}
if (!isHexString(value)) {
logger.throwArgumentError("invalid hex string", "value", value);
}
value = value.substring(2);
let offset = 0;
while (offset < value.length && value[offset] === "0") {
offset++;
}
return "0x" + value.substring(offset);
}
export function hexZeroPad(value, length) {
if (typeof (value) !== "string") {
value = hexlify(value);
}
else if (!isHexString(value)) {
logger.throwArgumentError("invalid hex string", "value", value);
}
if (value.length > 2 * length + 2) {
logger.throwArgumentError("value out of range", "value", arguments[1]);
}
while (value.length < 2 * length + 2) {
value = "0x0" + value.substring(2);
}
return value;
}
export function splitSignature(signature) {
const result = {
r: "0x",
s: "0x",
_vs: "0x",
recoveryParam: 0,
v: 0
};
if (isBytesLike(signature)) {
const bytes = arrayify(signature);
if (bytes.length !== 65) {
logger.throwArgumentError("invalid signature string; must be 65 bytes", "signature", signature);
}
// Get the r, s and v
result.r = hexlify(bytes.slice(0, 32));
result.s = hexlify(bytes.slice(32, 64));
result.v = bytes[64];
// Allow a recid to be used as the v
if (result.v < 27) {
if (result.v === 0 || result.v === 1) {
result.v += 27;
}
else {
logger.throwArgumentError("signature invalid v byte", "signature", signature);
}
}
// Compute recoveryParam from v
result.recoveryParam = 1 - (result.v % 2);
// Compute _vs from recoveryParam and s
if (result.recoveryParam) {
bytes[32] |= 0x80;
}
result._vs = hexlify(bytes.slice(32, 64));
}
else {
result.r = signature.r;
result.s = signature.s;
result.v = signature.v;
result.recoveryParam = signature.recoveryParam;
result._vs = signature._vs;
// If the _vs is available, use it to populate missing s, v and recoveryParam
// and verify non-missing s, v and recoveryParam
if (result._vs != null) {
const vs = zeroPad(arrayify(result._vs), 32);
result._vs = hexlify(vs);
// Set or check the recid
const recoveryParam = ((vs[0] >= 128) ? 1 : 0);
if (result.recoveryParam == null) {
result.recoveryParam = recoveryParam;
}
else if (result.recoveryParam !== recoveryParam) {
logger.throwArgumentError("signature recoveryParam mismatch _vs", "signature", signature);
}
// Set or check the s
vs[0] &= 0x7f;
const s = hexlify(vs);
if (result.s == null) {
result.s = s;
}
else if (result.s !== s) {
logger.throwArgumentError("signature v mismatch _vs", "signature", signature);
}
}
// Use recid and v to populate each other
if (result.recoveryParam == null) {
if (result.v == null) {
logger.throwArgumentError("signature missing v and recoveryParam", "signature", signature);
}
else {
result.recoveryParam = 1 - (result.v % 2);
}
}
else {
if (result.v == null) {
result.v = 27 + result.recoveryParam;
}
else if (result.recoveryParam !== (1 - (result.v % 2))) {
logger.throwArgumentError("signature recoveryParam mismatch v", "signature", signature);
}
}
if (result.r == null || !isHexString(result.r)) {
logger.throwArgumentError("signature missing or invalid r", "signature", signature);
}
else {
result.r = hexZeroPad(result.r, 32);
}
if (result.s == null || !isHexString(result.s)) {
logger.throwArgumentError("signature missing or invalid s", "signature", signature);
}
else {
result.s = hexZeroPad(result.s, 32);
}
const vs = arrayify(result.s);
if (vs[0] >= 128) {
logger.throwArgumentError("signature s out of range", "signature", signature);
}
if (result.recoveryParam) {
vs[0] |= 0x80;
}
const _vs = hexlify(vs);
if (result._vs) {
if (!isHexString(result._vs)) {
logger.throwArgumentError("signature invalid _vs", "signature", signature);
}
result._vs = hexZeroPad(result._vs, 32);
}
// Set or check the _vs
if (result._vs == null) {
result._vs = _vs;
}
else if (result._vs !== _vs) {
logger.throwArgumentError("signature _vs mismatch v and s", "signature", signature);
}
}
return result;
}
export function joinSignature(signature) {
signature = splitSignature(signature);
return hexlify(concat([
signature.r,
signature.s,
(signature.recoveryParam ? "0x1c" : "0x1b")
]));
}
//# sourceMappingURL=index.js.map
-4
View File
@@ -1,4 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "bytes/5.0.5";
//# sourceMappingURL=_version.js.map
-397
View File
@@ -1,397 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
///////////////////////////////
function isHexable(value) {
return !!(value.toHexString);
}
function addSlice(array) {
if (array.slice) {
return array;
}
array.slice = function () {
var args = Array.prototype.slice.call(arguments);
return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));
};
return array;
}
function isBytesLike(value) {
return ((isHexString(value) && !(value.length % 2)) || isBytes(value));
}
exports.isBytesLike = isBytesLike;
function isBytes(value) {
if (value == null) {
return false;
}
if (value.constructor === Uint8Array) {
return true;
}
if (typeof (value) === "string") {
return false;
}
if (value.length == null) {
return false;
}
for (var i = 0; i < value.length; i++) {
var v = value[i];
if (v < 0 || v >= 256 || (v % 1)) {
return false;
}
}
return true;
}
exports.isBytes = isBytes;
function arrayify(value, options) {
if (!options) {
options = {};
}
if (typeof (value) === "number") {
logger.checkSafeUint53(value, "invalid arrayify value");
var result = [];
while (value) {
result.unshift(value & 0xff);
value = parseInt(String(value / 256));
}
if (result.length === 0) {
result.push(0);
}
return addSlice(new Uint8Array(result));
}
if (options.allowMissingPrefix && typeof (value) === "string" && value.substring(0, 2) !== "0x") {
value = "0x" + value;
}
if (isHexable(value)) {
value = value.toHexString();
}
if (isHexString(value)) {
var hex = value.substring(2);
if (hex.length % 2) {
if (options.hexPad === "left") {
hex = "0x0" + hex.substring(2);
}
else if (options.hexPad === "right") {
hex += "0";
}
else {
logger.throwArgumentError("hex data is odd-length", "value", value);
}
}
var result = [];
for (var i = 0; i < hex.length; i += 2) {
result.push(parseInt(hex.substring(i, i + 2), 16));
}
return addSlice(new Uint8Array(result));
}
if (isBytes(value)) {
return addSlice(new Uint8Array(value));
}
return logger.throwArgumentError("invalid arrayify value", "value", value);
}
exports.arrayify = arrayify;
function concat(items) {
var objects = items.map(function (item) { return arrayify(item); });
var length = objects.reduce(function (accum, item) { return (accum + item.length); }, 0);
var result = new Uint8Array(length);
objects.reduce(function (offset, object) {
result.set(object, offset);
return offset + object.length;
}, 0);
return addSlice(result);
}
exports.concat = concat;
function stripZeros(value) {
var result = arrayify(value);
if (result.length === 0) {
return result;
}
// Find the first non-zero entry
var start = 0;
while (start < result.length && result[start] === 0) {
start++;
}
// If we started with zeros, strip them
if (start) {
result = result.slice(start);
}
return result;
}
exports.stripZeros = stripZeros;
function zeroPad(value, length) {
value = arrayify(value);
if (value.length > length) {
logger.throwArgumentError("value out of range", "value", arguments[0]);
}
var result = new Uint8Array(length);
result.set(value, length - value.length);
return addSlice(result);
}
exports.zeroPad = zeroPad;
function isHexString(value, length) {
if (typeof (value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) {
return false;
}
if (length && value.length !== 2 + 2 * length) {
return false;
}
return true;
}
exports.isHexString = isHexString;
var HexCharacters = "0123456789abcdef";
function hexlify(value, options) {
if (!options) {
options = {};
}
if (typeof (value) === "number") {
logger.checkSafeUint53(value, "invalid hexlify value");
var hex = "";
while (value) {
hex = HexCharacters[value & 0x0f] + hex;
value = Math.floor(value / 16);
}
if (hex.length) {
if (hex.length % 2) {
hex = "0" + hex;
}
return "0x" + hex;
}
return "0x00";
}
if (options.allowMissingPrefix && typeof (value) === "string" && value.substring(0, 2) !== "0x") {
value = "0x" + value;
}
if (isHexable(value)) {
return value.toHexString();
}
if (isHexString(value)) {
if (value.length % 2) {
if (options.hexPad === "left") {
value = "0x0" + value.substring(2);
}
else if (options.hexPad === "right") {
value += "0";
}
else {
logger.throwArgumentError("hex data is odd-length", "value", value);
}
}
return value.toLowerCase();
}
if (isBytes(value)) {
var result = "0x";
for (var i = 0; i < value.length; i++) {
var v = value[i];
result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];
}
return result;
}
return logger.throwArgumentError("invalid hexlify value", "value", value);
}
exports.hexlify = hexlify;
/*
function unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {
if (typeof(value) === "string" && value.length % 2 && value.substring(0, 2) === "0x") {
return "0x0" + value.substring(2);
}
return value;
}
*/
function hexDataLength(data) {
if (typeof (data) !== "string") {
data = hexlify(data);
}
else if (!isHexString(data) || (data.length % 2)) {
return null;
}
return (data.length - 2) / 2;
}
exports.hexDataLength = hexDataLength;
function hexDataSlice(data, offset, endOffset) {
if (typeof (data) !== "string") {
data = hexlify(data);
}
else if (!isHexString(data) || (data.length % 2)) {
logger.throwArgumentError("invalid hexData", "value", data);
}
offset = 2 + 2 * offset;
if (endOffset != null) {
return "0x" + data.substring(offset, 2 + 2 * endOffset);
}
return "0x" + data.substring(offset);
}
exports.hexDataSlice = hexDataSlice;
function hexConcat(items) {
var result = "0x";
items.forEach(function (item) {
result += hexlify(item).substring(2);
});
return result;
}
exports.hexConcat = hexConcat;
function hexValue(value) {
var trimmed = hexStripZeros(hexlify(value, { hexPad: "left" }));
if (trimmed === "0x") {
return "0x0";
}
return trimmed;
}
exports.hexValue = hexValue;
function hexStripZeros(value) {
if (typeof (value) !== "string") {
value = hexlify(value);
}
if (!isHexString(value)) {
logger.throwArgumentError("invalid hex string", "value", value);
}
value = value.substring(2);
var offset = 0;
while (offset < value.length && value[offset] === "0") {
offset++;
}
return "0x" + value.substring(offset);
}
exports.hexStripZeros = hexStripZeros;
function hexZeroPad(value, length) {
if (typeof (value) !== "string") {
value = hexlify(value);
}
else if (!isHexString(value)) {
logger.throwArgumentError("invalid hex string", "value", value);
}
if (value.length > 2 * length + 2) {
logger.throwArgumentError("value out of range", "value", arguments[1]);
}
while (value.length < 2 * length + 2) {
value = "0x0" + value.substring(2);
}
return value;
}
exports.hexZeroPad = hexZeroPad;
function splitSignature(signature) {
var result = {
r: "0x",
s: "0x",
_vs: "0x",
recoveryParam: 0,
v: 0
};
if (isBytesLike(signature)) {
var bytes = arrayify(signature);
if (bytes.length !== 65) {
logger.throwArgumentError("invalid signature string; must be 65 bytes", "signature", signature);
}
// Get the r, s and v
result.r = hexlify(bytes.slice(0, 32));
result.s = hexlify(bytes.slice(32, 64));
result.v = bytes[64];
// Allow a recid to be used as the v
if (result.v < 27) {
if (result.v === 0 || result.v === 1) {
result.v += 27;
}
else {
logger.throwArgumentError("signature invalid v byte", "signature", signature);
}
}
// Compute recoveryParam from v
result.recoveryParam = 1 - (result.v % 2);
// Compute _vs from recoveryParam and s
if (result.recoveryParam) {
bytes[32] |= 0x80;
}
result._vs = hexlify(bytes.slice(32, 64));
}
else {
result.r = signature.r;
result.s = signature.s;
result.v = signature.v;
result.recoveryParam = signature.recoveryParam;
result._vs = signature._vs;
// If the _vs is available, use it to populate missing s, v and recoveryParam
// and verify non-missing s, v and recoveryParam
if (result._vs != null) {
var vs_1 = zeroPad(arrayify(result._vs), 32);
result._vs = hexlify(vs_1);
// Set or check the recid
var recoveryParam = ((vs_1[0] >= 128) ? 1 : 0);
if (result.recoveryParam == null) {
result.recoveryParam = recoveryParam;
}
else if (result.recoveryParam !== recoveryParam) {
logger.throwArgumentError("signature recoveryParam mismatch _vs", "signature", signature);
}
// Set or check the s
vs_1[0] &= 0x7f;
var s = hexlify(vs_1);
if (result.s == null) {
result.s = s;
}
else if (result.s !== s) {
logger.throwArgumentError("signature v mismatch _vs", "signature", signature);
}
}
// Use recid and v to populate each other
if (result.recoveryParam == null) {
if (result.v == null) {
logger.throwArgumentError("signature missing v and recoveryParam", "signature", signature);
}
else {
result.recoveryParam = 1 - (result.v % 2);
}
}
else {
if (result.v == null) {
result.v = 27 + result.recoveryParam;
}
else if (result.recoveryParam !== (1 - (result.v % 2))) {
logger.throwArgumentError("signature recoveryParam mismatch v", "signature", signature);
}
}
if (result.r == null || !isHexString(result.r)) {
logger.throwArgumentError("signature missing or invalid r", "signature", signature);
}
else {
result.r = hexZeroPad(result.r, 32);
}
if (result.s == null || !isHexString(result.s)) {
logger.throwArgumentError("signature missing or invalid s", "signature", signature);
}
else {
result.s = hexZeroPad(result.s, 32);
}
var vs = arrayify(result.s);
if (vs[0] >= 128) {
logger.throwArgumentError("signature s out of range", "signature", signature);
}
if (result.recoveryParam) {
vs[0] |= 0x80;
}
var _vs = hexlify(vs);
if (result._vs) {
if (!isHexString(result._vs)) {
logger.throwArgumentError("signature invalid _vs", "signature", signature);
}
result._vs = hexZeroPad(result._vs, 32);
}
// Set or check the _vs
if (result._vs == null) {
result._vs = _vs;
}
else if (result._vs !== _vs) {
logger.throwArgumentError("signature _vs mismatch v and s", "signature", signature);
}
}
return result;
}
exports.splitSignature = splitSignature;
function joinSignature(signature) {
signature = splitSignature(signature);
return hexlify(concat([
signature.r,
signature.s,
(signature.recoveryParam ? "0x1c" : "0x1b")
]));
}
exports.joinSignature = joinSignature;
//# sourceMappingURL=index.js.map
-77
View File
@@ -1,77 +0,0 @@
{
"_from": "@ethersproject/bytes@^5.0.4",
"_id": "@ethersproject/bytes@5.0.5",
"_inBundle": false,
"_integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==",
"_location": "/@ethersproject/bytes",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "@ethersproject/bytes@^5.0.4",
"name": "@ethersproject/bytes",
"escapedName": "@ethersproject%2fbytes",
"scope": "@ethersproject",
"rawSpec": "^5.0.4",
"saveSpec": null,
"fetchSpec": "^5.0.4"
},
"_requiredBy": [
"/@ethersproject/abi",
"/@ethersproject/abstract-provider",
"/@ethersproject/abstract-signer",
"/@ethersproject/address",
"/@ethersproject/base64",
"/@ethersproject/bignumber",
"/@ethersproject/hash",
"/@ethersproject/keccak256",
"/@ethersproject/rlp",
"/@ethersproject/signing-key",
"/@ethersproject/strings",
"/@ethersproject/transactions",
"/@ethersproject/web"
],
"_resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz",
"_shasum": "688b70000e550de0c97a151a21f15b87d7f97d7c",
"_spec": "@ethersproject/bytes@^5.0.4",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\BackendServers\\node_modules\\@ethersproject\\transactions",
"author": {
"name": "Richard Moore",
"email": "me@ricmoo.com"
},
"bugs": {
"url": "https://github.com/ethers-io/ethers.js/issues"
},
"bundleDependencies": false,
"dependencies": {
"@ethersproject/logger": "^5.0.5"
},
"deprecated": false,
"description": "Bytes utility functions for ethers.",
"ethereum": "donations.ethers.eth",
"gitHead": "ffa4a2d0549fe2c606bda3130f4a3f3d788f8dcf",
"homepage": "https://github.com/ethers-io/ethers.js#readme",
"keywords": [
"Ethereum",
"ethers"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/bytes",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"auto-build": "npm run build -- -w",
"build": "tsc -p ./tsconfig.json",
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0x132538d3d8927299393c28ac01243ebc0e7ea34f5af1feadf23b364745f7c130",
"types": "./lib/index.d.ts",
"version": "5.0.5"
}
-2
View File
@@ -1,2 +0,0 @@
export const version = "constants/5.0.5";
//# sourceMappingURL=_version.js.map
-14
View File
@@ -1,14 +0,0 @@
"use strict";
import { BigNumber } from "@ethersproject/bignumber";
const AddressZero = "0x0000000000000000000000000000000000000000";
const HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000";
// NFKC (composed) // (decomposed)
const EtherSymbol = "\u039e"; // "\uD835\uDF63";
const NegativeOne = BigNumber.from(-1);
const Zero = BigNumber.from(0);
const One = BigNumber.from(1);
const Two = BigNumber.from(2);
const WeiPerEther = BigNumber.from("1000000000000000000");
const MaxUint256 = BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
export { AddressZero, HashZero, EtherSymbol, NegativeOne, Zero, One, Two, WeiPerEther, MaxUint256 };
//# sourceMappingURL=index.js.map
-4
View File
@@ -1,4 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "constants/5.0.5";
//# sourceMappingURL=_version.js.map
-23
View File
@@ -1,23 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var bignumber_1 = require("@ethersproject/bignumber");
var AddressZero = "0x0000000000000000000000000000000000000000";
exports.AddressZero = AddressZero;
var HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000";
exports.HashZero = HashZero;
// NFKC (composed) // (decomposed)
var EtherSymbol = "\u039e"; // "\uD835\uDF63";
exports.EtherSymbol = EtherSymbol;
var NegativeOne = bignumber_1.BigNumber.from(-1);
exports.NegativeOne = NegativeOne;
var Zero = bignumber_1.BigNumber.from(0);
exports.Zero = Zero;
var One = bignumber_1.BigNumber.from(1);
exports.One = One;
var Two = bignumber_1.BigNumber.from(2);
exports.Two = Two;
var WeiPerEther = bignumber_1.BigNumber.from("1000000000000000000");
exports.WeiPerEther = WeiPerEther;
var MaxUint256 = bignumber_1.BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
exports.MaxUint256 = MaxUint256;
//# sourceMappingURL=index.js.map
-65
View File
@@ -1,65 +0,0 @@
{
"_from": "@ethersproject/constants@^5.0.4",
"_id": "@ethersproject/constants@5.0.5",
"_inBundle": false,
"_integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==",
"_location": "/@ethersproject/constants",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "@ethersproject/constants@^5.0.4",
"name": "@ethersproject/constants",
"escapedName": "@ethersproject%2fconstants",
"scope": "@ethersproject",
"rawSpec": "^5.0.4",
"saveSpec": null,
"fetchSpec": "^5.0.4"
},
"_requiredBy": [
"/@ethersproject/abi",
"/@ethersproject/strings",
"/@ethersproject/transactions"
],
"_resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz",
"_shasum": "0ed19b002e8404bdf6d135234dc86a7d9bcf9b71",
"_spec": "@ethersproject/constants@^5.0.4",
"_where": "C:\\Users\\Luis\\source\\repos\\AAMasters\\BackendServers\\node_modules\\@ethersproject\\transactions",
"author": {
"name": "Richard Moore",
"email": "me@ricmoo.com"
},
"bugs": {
"url": "https://github.com/ethers-io/ethers.js/issues"
},
"bundleDependencies": false,
"dependencies": {
"@ethersproject/bignumber": "^5.0.7"
},
"deprecated": false,
"description": "Common Ethereum constants used for ethers.",
"ethereum": "donations.ethers.eth",
"gitHead": "ffa4a2d0549fe2c606bda3130f4a3f3d788f8dcf",
"homepage": "https://github.com/ethers-io/ethers.js#readme",
"keywords": [
"Ethereum",
"ethers"
],
"license": "MIT",
"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/constants",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "git://github.com/ethers-io/ethers.js.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"tarballHash": "0x638edaa4b45c46158073ede9fda2c54d6c60a2f11485e693021c484076970130",
"types": "./lib/index.d.ts",
"version": "5.0.5"
}
-2
View File
@@ -1,2 +0,0 @@
export const version = "hash/5.0.6";
//# sourceMappingURL=_version.js.map
-6
View File
@@ -1,6 +0,0 @@
import { keccak256 } from "@ethersproject/keccak256";
import { toUtf8Bytes } from "@ethersproject/strings";
export function id(text) {
return keccak256(toUtf8Bytes(text));
}
//# sourceMappingURL=id.js.map
-7
View File
@@ -1,7 +0,0 @@
"use strict";
import { id } from "./id";
import { isValidName, namehash } from "./namehash";
import { hashMessage, messagePrefix } from "./message";
import { TypedDataEncoder as _TypedDataEncoder } from "./typed-data";
export { id, namehash, isValidName, messagePrefix, hashMessage, _TypedDataEncoder, };
//# sourceMappingURL=index.js.map
-15
View File
@@ -1,15 +0,0 @@
import { concat } from "@ethersproject/bytes";
import { keccak256 } from "@ethersproject/keccak256";
import { toUtf8Bytes } from "@ethersproject/strings";
export const messagePrefix = "\x19Ethereum Signed Message:\n";
export function hashMessage(message) {
if (typeof (message) === "string") {
message = toUtf8Bytes(message);
}
return keccak256(concat([
toUtf8Bytes(messagePrefix),
toUtf8Bytes(String(message.length)),
message
]));
}
//# sourceMappingURL=message.js.map
-37
View File
@@ -1,37 +0,0 @@
import { concat, hexlify } from "@ethersproject/bytes";
import { nameprep, toUtf8Bytes } from "@ethersproject/strings";
import { keccak256 } from "@ethersproject/keccak256";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
const Zeros = new Uint8Array(32);
Zeros.fill(0);
const Partition = new RegExp("^((.*)\\.)?([^.]+)$");
export function isValidName(name) {
try {
const comps = name.split(".");
for (let i = 0; i < comps.length; i++) {
if (nameprep(comps[i]).length === 0) {
throw new Error("empty");
}
}
return true;
}
catch (error) { }
return false;
}
export function namehash(name) {
/* istanbul ignore if */
if (typeof (name) !== "string") {
logger.throwArgumentError("invalid address - " + String(name), "name", name);
}
let result = Zeros;
while (name.length) {
const partition = name.match(Partition);
const label = toUtf8Bytes(nameprep(partition[3]));
result = keccak256(concat([result, keccak256(label)]));
name = partition[2] || "";
}
return hexlify(result);
}
//# sourceMappingURL=namehash.js.map
-444
View File
@@ -1,444 +0,0 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { getAddress } from "@ethersproject/address";
import { BigNumber } from "@ethersproject/bignumber";
import { arrayify, hexConcat, hexlify, hexValue, hexZeroPad, isHexString } from "@ethersproject/bytes";
import { keccak256 } from "@ethersproject/keccak256";
import { deepCopy, defineReadOnly, shallowCopy } from "@ethersproject/properties";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
import { id } from "./id";
const padding = new Uint8Array(32);
padding.fill(0);
const NegativeOne = BigNumber.from(-1);
const Zero = BigNumber.from(0);
const One = BigNumber.from(1);
const MaxUint256 = BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
function hexPadRight(value) {
const bytes = arrayify(value);
const padOffset = bytes.length % 32;
if (padOffset) {
return hexConcat([bytes, padding.slice(padOffset)]);
}
return hexlify(bytes);
}
const hexTrue = hexZeroPad(One.toHexString(), 32);
const hexFalse = hexZeroPad(Zero.toHexString(), 32);
const domainFieldTypes = {
name: "string",
version: "string",
chainId: "uint256",
verifyingContract: "address",
salt: "bytes32"
};
const domainFieldNames = [
"name", "version", "chainId", "verifyingContract", "salt"
];
function checkString(key) {
return function (value) {
if (typeof (value) !== "string") {
logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);
}
return value;
};
}
const domainChecks = {
name: checkString("name"),
version: checkString("version"),
chainId: function (value) {
try {
return BigNumber.from(value).toString();
}
catch (error) { }
return logger.throwArgumentError(`invalid domain value for "chainId"`, "domain.chainId", value);
},
verifyingContract: function (value) {
try {
return getAddress(value).toLowerCase();
}
catch (error) { }
return logger.throwArgumentError(`invalid domain value "verifyingContract"`, "domain.verifyingContract", value);
},
salt: function (value) {
try {
const bytes = arrayify(value);
if (bytes.length !== 32) {
throw new Error("bad length");
}
return hexlify(bytes);
}
catch (error) { }
return logger.throwArgumentError(`invalid domain value "salt"`, "domain.salt", value);
}
};
function getBaseEncoder(type) {
// intXX and uintXX
{
const match = type.match(/^(u?)int(\d*)$/);
if (match) {
const signed = (match[1] === "");
const width = parseInt(match[2] || "256");
if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {
logger.throwArgumentError("invalid numeric width", "type", type);
}
const boundsUpper = MaxUint256.mask(signed ? (width - 1) : width);
const boundsLower = signed ? boundsUpper.add(One).mul(NegativeOne) : Zero;
return function (value) {
const v = BigNumber.from(value);
if (v.lt(boundsLower) || v.gt(boundsUpper)) {
logger.throwArgumentError(`value out-of-bounds for ${type}`, "value", value);
}
return hexZeroPad(v.toTwos(256).toHexString(), 32);
};
}
}
// bytesXX
{
const match = type.match(/^bytes(\d+)$/);
if (match) {
const width = parseInt(match[1]);
if (width === 0 || width > 32 || match[1] !== String(width)) {
logger.throwArgumentError("invalid bytes width", "type", type);
}
return function (value) {
const bytes = arrayify(value);
if (bytes.length !== width) {
logger.throwArgumentError(`invalid length for ${type}`, "value", value);
}
return hexPadRight(value);
};
}
}
switch (type) {
case "address": return function (value) {
return hexZeroPad(getAddress(value), 32);
};
case "bool": return function (value) {
return ((!value) ? hexFalse : hexTrue);
};
case "bytes": return function (value) {
return keccak256(value);
};
case "string": return function (value) {
return id(value);
};
}
return null;
}
function encodeType(name, fields) {
return `${name}(${fields.map(({ name, type }) => (type + " " + name)).join(",")})`;
}
export class TypedDataEncoder {
constructor(types) {
defineReadOnly(this, "types", Object.freeze(deepCopy(types)));
defineReadOnly(this, "_encoderCache", {});
defineReadOnly(this, "_types", {});
// Link struct types to their direct child structs
const links = {};
// Link structs to structs which contain them as a child
const parents = {};
// Link all subtypes within a given struct
const subtypes = {};
Object.keys(types).forEach((type) => {
links[type] = {};
parents[type] = [];
subtypes[type] = {};
});
for (const name in types) {
const uniqueNames = {};
types[name].forEach((field) => {
// Check each field has a unique name
if (uniqueNames[field.name]) {
logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, "types", types);
}
uniqueNames[field.name] = true;
// Get the base type (drop any array specifiers)
const baseType = field.type.match(/^([^\x5b]*)(\x5b|$)/)[1];
if (baseType === name) {
logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, "types", types);
}
// Is this a base encoding type?
const encoder = getBaseEncoder(baseType);
if (encoder) {
return;
}
if (!parents[baseType]) {
logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, "types", types);
}
// Add linkage
parents[baseType].push(name);
links[name][baseType] = true;
});
}
// Deduce the primary type
const primaryTypes = Object.keys(parents).filter((n) => (parents[n].length === 0));
if (primaryTypes.length === 0) {
logger.throwArgumentError("missing primary type", "types", types);
}
else if (primaryTypes.length > 1) {
logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(", ")}`, "types", types);
}
defineReadOnly(this, "primaryType", primaryTypes[0]);
// Check for circular type references
function checkCircular(type, found) {
if (found[type]) {
logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, "types", types);
}
found[type] = true;
Object.keys(links[type]).forEach((child) => {
if (!parents[child]) {
return;
}
// Recursively check children
checkCircular(child, found);
// Mark all ancestors as having this decendant
Object.keys(found).forEach((subtype) => {
subtypes[subtype][child] = true;
});
});
delete found[type];
}
checkCircular(this.primaryType, {});
// Compute each fully describe type
for (const name in subtypes) {
const st = Object.keys(subtypes[name]);
st.sort();
this._types[name] = encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join("");
}
}
getEncoder(type) {
let encoder = this._encoderCache[type];
if (!encoder) {
encoder = this._encoderCache[type] = this._getEncoder(type);
}
return encoder;
}
_getEncoder(type) {
// Basic encoder type (address, bool, uint256, etc)
{
const encoder = getBaseEncoder(type);
if (encoder) {
return encoder;
}
}
// Array
const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/);
if (match) {
const subtype = match[1];
const subEncoder = this.getEncoder(subtype);
const length = parseInt(match[3]);
return (value) => {
if (length >= 0 && value.length !== length) {
logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value);
}
let result = value.map(subEncoder);
if (this._types[subtype]) {
result = result.map(keccak256);
}
return keccak256(hexConcat(result));
};
}
// Struct
const fields = this.types[type];
if (fields) {
const encodedType = id(this._types[type]);
return (value) => {
const values = fields.map(({ name, type }) => {
const result = this.getEncoder(type)(value[name]);
if (this._types[type]) {
return keccak256(result);
}
return result;
});
values.unshift(encodedType);
return hexConcat(values);
};
}
return logger.throwArgumentError(`unknown type: ${type}`, "type", type);
}
encodeType(name) {
const result = this._types[name];
if (!result) {
logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, "name", name);
}
return result;
}
encodeData(type, value) {
return this.getEncoder(type)(value);
}
hashStruct(name, value) {
return keccak256(this.encodeData(name, value));
}
encode(value) {
return this.encodeData(this.primaryType, value);
}
hash(value) {
return this.hashStruct(this.primaryType, value);
}
_visit(type, value, callback) {
// Basic encoder type (address, bool, uint256, etc)
{
const encoder = getBaseEncoder(type);
if (encoder) {
return callback(type, value);
}
}
// Array
const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/);
if (match) {
const subtype = match[1];
const length = parseInt(match[3]);
if (length >= 0 && value.length !== length) {
logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value);
}
return value.map((v) => this._visit(subtype, v, callback));
}
// Struct
const fields = this.types[type];
if (fields) {
return fields.reduce((accum, { name, type }) => {
accum[name] = this._visit(type, value[name], callback);
return accum;
}, {});
}
return logger.throwArgumentError(`unknown type: ${type}`, "type", type);
}
visit(value, callback) {
return this._visit(this.primaryType, value, callback);
}
static from(types) {
return new TypedDataEncoder(types);
}
static getPrimaryType(types) {
return TypedDataEncoder.from(types).primaryType;
}
static hashStruct(name, types, value) {
return TypedDataEncoder.from(types).hashStruct(name, value);
}
static hashDomain(domain) {
const domainFields = [];
for (const name in domain) {
const type = domainFieldTypes[name];
if (!type) {
logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, "domain", domain);
}
domainFields.push({ name, type });
}
domainFields.sort((a, b) => {
return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);
});
return TypedDataEncoder.hashStruct("EIP712Domain", { EIP712Domain: domainFields }, domain);
}
static encode(domain, types, value) {
return hexConcat([
"0x1901",
TypedDataEncoder.hashDomain(domain),
TypedDataEncoder.from(types).hash(value)
]);
}
static hash(domain, types, value) {
return keccak256(TypedDataEncoder.encode(domain, types, value));
}
// Replaces all address types with ENS names with their looked up address
static resolveNames(domain, types, value, resolveName) {
return __awaiter(this, void 0, void 0, function* () {
// Make a copy to isolate it from the object passed in
domain = shallowCopy(domain);
// Look up all ENS names
const ensCache = {};
// Do we need to look up the domain's verifyingContract?
if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {
ensCache[domain.verifyingContract] = "0x";
}
// We are going to use the encoder to visit all the base values
const encoder = TypedDataEncoder.from(types);
// Get a list of all the addresses
encoder.visit(value, (type, value) => {
if (type === "address" && !isHexString(value, 20)) {
ensCache[value] = "0x";
}
return value;
});
// Lookup each name
for (const name in ensCache) {
ensCache[name] = yield resolveName(name);
}
// Replace the domain verifyingContract if needed
if (domain.verifyingContract && ensCache[domain.verifyingContract]) {
domain.verifyingContract = ensCache[domain.verifyingContract];
}
// Replace all ENS names with their address
value = encoder.visit(value, (type, value) => {
if (type === "address" && ensCache[value]) {
return ensCache[value];
}
return value;
});
return { domain, value };
});
}
static getPayload(domain, types, value) {
// Validate the domain fields
TypedDataEncoder.hashDomain(domain);
// Derive the EIP712Domain Struct reference type
const domainValues = {};
const domainTypes = [];
domainFieldNames.forEach((name) => {
const value = domain[name];
if (value == null) {
return;
}
domainValues[name] = domainChecks[name](value);
domainTypes.push({ name, type: domainFieldTypes[name] });
});
const encoder = TypedDataEncoder.from(types);
const typesWithDomain = shallowCopy(types);
if (typesWithDomain.EIP712Domain) {
typesWithDomain.EIP712Domain = domainTypes;
}
// Validate the data structures and types
encoder.encode(value);
return {
types: typesWithDomain,
domain: domainValues,
primaryType: encoder.primaryType,
message: encoder.visit(value, (type, value) => {
// bytes
if (type.match(/^bytes(\d*)/)) {
return hexlify(arrayify(value));
}
// uint or int
if (type.match(/^u?int/)) {
let prefix = "";
let v = BigNumber.from(value);
if (v.isNegative()) {
prefix = "-";
v = v.mul(-1);
}
return prefix + hexValue(v.toHexString());
}
switch (type) {
case "address":
return value.toLowerCase();
case "bool":
return !!value;
case "string":
if (typeof (value) !== "string") {
logger.throwArgumentError(`invalid string`, "value", value);
}
return value;
}
return logger.throwArgumentError("unsupported type", "type", type);
})
};
}
}
//# sourceMappingURL=typed-data.js.map
Loaded 100 of 7689 files, more files were not shown because too many files have changed in this diff. Show more