From 0813719693bf38198aa4f7976d373f44b721cb1a Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 4 Mar 2021 16:15:44 +0000 Subject: [PATCH 001/139] nogeo --- .github/workflows/atomicdex-desktop-ci.yml | 6 +----- cmake/project.metadata.cmake | 4 ++-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 1846fdc6c1..6da844ddef 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -1,13 +1,9 @@ name: AtomicDex-Desktop CI on: - pull_request: - types: [ opened, synchronize, reopened ] push: branches: - - master - schedule: - - cron: '0 0 * * 1' + - nogeo env: DEX_PROJECT_NAME: "atomicdex-desktop" diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index ed436ade4b..f0387d301d 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -6,7 +6,7 @@ set(DEX_WEBSITE "https://atomicdex.io/") set(DEX_SUPPORT_PAGE "https://support.komodoplatform.com/support/home") set(DEX_DISCORD "https://komodoplatform.com/discord") set(DEX_TWITTER "https://twitter.com/AtomicDEX") -option(DISABLE_GEOBLOCKING "Enable to disable geoblocking (for dev purpose)" OFF) +option(DISABLE_GEOBLOCKING "Enable to disable geoblocking (for dev purpose)" ON) if (UNIX AND NOT APPLE) set(DEX_LINUX_APP_ID "dex.desktop") @@ -61,4 +61,4 @@ macro(generate_dex_project_metafiles) configure_file(${CMAKE_CURRENT_LIST_DIR}/assets/logo/dex-logo.ico ${CMAKE_SOURCE_DIR}/ci_tools_atomic_dex/installer/windows/config/install_icon.ico COPYONLY) # Configures Windows logo for the installer configure_file(${CMAKE_CURRENT_LIST_DIR}/assets/logo/dex-logo.png ${CMAKE_SOURCE_DIR}/ci_tools_atomic_dex/installer/windows/config/install_icon.png COPYONLY) # Configures Windows logo for the installer endif() -endmacro() \ No newline at end of file +endmacro() From 67f14c2ee869f4c764036b83a0fe600e9cf571db Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 10 Mar 2021 12:24:34 +0000 Subject: [PATCH 002/139] update mm2 to 2.1.3162 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ee1e7b92ec..407d35eaff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,13 +43,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3110/mm2-bf975cafe-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3162/mm2-54eb039bf-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3110/mm2-bf975cafe-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3162/mm2-54eb039bf-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3110/mm2-bf975cafe-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3162/mm2-54eb039bf-Windows_NT-Release.zip) endif () FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/master.zip) From fafbeab4cbce7ce5f309da2681e72e6ff86b76e6 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 13 Apr 2021 16:15:50 +0000 Subject: [PATCH 003/139] disable OSX --- .github/workflows/atomicdex-desktop-ci.yml | 112 --------------------- 1 file changed, 112 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index ee21863c7b..7991374d0e 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -32,21 +32,11 @@ jobs: qt: '5.15.2' type: 'release' - - name: osx-qt-5-15-2 - os: macos-latest - qt: '5.15.2' - type: 'release' - - name: windows-10-qt-5-15-2 os: windows-latest qt: '5.15.2' type: 'release' - #- name: osx-qt-5-15-2-dbg - # os: macos-latest - # qt: '5.15.2' - # type: 'debug' - steps: - uses: actions/checkout@v2 with: @@ -74,26 +64,6 @@ jobs: aqtversion: '==0.8' py7zrversion: '==0.6' - - name: Install QT (MacOS) - if: runner.os == 'macOS' - uses: KomodoPlatform/install-qt-action@v2.9.0 - with: - version: ${{ matrix.qt }} - host: 'mac' - target: 'desktop' - #mirror: 'http://mirrors.ocf.berkeley.edu/qt/' - mirror: https://qt-mirror.dannhauer.de/ - #mirror: https://www.funet.fi/pub/mirrors/download.qt-project.org/ - #mirror: https://ftp.fau.de/qtproject/ - dir: '${{ github.workspace }}' - modules: 'qtcharts qtwidgets debug_info qtwebview qtwebengine' - - - name: Install QT IFW (MacOS) - if: runner.os == 'macOS' - run: | - python3 -m aqt tool mac tools_ifw 4.0.1-202012091045 qt.tools.ifw.40 -b https://qt-mirror.dannhauer.de/ --outputdir ${{ github.workspace }}/Qt - echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.0/bin" >> $GITHUB_PATH - - name: Install QT (Windows) if: runner.os == 'Windows' uses: KomodoPlatform/install-qt-action@v2.9.0 @@ -149,17 +119,6 @@ jobs: setupOnly: true appendedCacheKey: ${{ hashFiles('vcpkg.json') }} - - name: Install deps (MacOS) - if: runner.os == 'macOS' - run: | - ./ci_tools_atomic_dex/ci_scripts/osx_script.sh - - - name: Upload env variable for vpkg (MacOS) - if: runner.os == 'macOS' - run: | - echo "CXX=/usr/local/opt/llvm/bin/clang++" >> $GITHUB_ENV - echo "CC=/usr/local/opt/llvm/bin/clang" >> $GITHUB_ENV - - name: Build AtomicDEX (Linux) if: runner.os == 'Linux' run: | @@ -177,38 +136,6 @@ jobs: ./ci_tools_atomic_dex build release ./ci_tools_atomic_dex bundle release - - name: import code signing certificates (macos) - if: runner.os == 'macOS' - uses: Apple-Actions/import-codesign-certs@v1 - with: - keychain: ${{ github.run_id }} - keychain-password: ${{ github.run_id }} - p12-file-base64: ${{ secrets.CERTIFICATES_P12 }} - p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} - - - name: import installer code signing certificates (macos) - if: runner.os == 'macOS' - uses: apple-actions/import-codesign-certs@v1 - with: - keychain: ${{ github.run_id }} - keychain-password: ${{ github.run_id }} - create-keychain: false - p12-file-base64: ${{ secrets.CERTIFICATES_INSTALLER_P12 }} - p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} - - - name: Build AtomicDEX (MacOS) - if: runner.os == 'macOS' - run: | - export MAC_SIGN_IDENTITY="${{ secrets.MAC_SIGN_IDENTITY }}" - export INSTALLER_MAC_SIGN_IDENTITY="${{ secrets.INSTALLER_MAC_SIGN_IDENTITY }}" - export APPLE_ATOMICDEX_PASSWORD="${{ secrets.APPLE_ATOMICDEX_PASSWORD }}" - export APPLE_ID="${{ secrets.APPLE_ID }}" - export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/clang_64/lib/cmake - export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} - cd ci_tools_atomic_dex - nimble build -y - ./ci_tools_atomic_dex bundle ${{ matrix.type }} --osx_sdk=$HOME/sdk/MacOSX10.14.sdk --compiler=clang++ - - name: Build AtomicDEX (Windows) if: runner.os == 'Windows' shell: powershell @@ -240,24 +167,6 @@ jobs: #python upload.py --sha `git rev-parse HEAD` -n "[Doctest Linux]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" #echo "Uploading tests on Linux finished" - - name: Running Tests (MacOS) - working-directory: ci_tools_atomic_dex - if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository - run: | - export REPORT_CI_TOKEN=${{ secrets.REPORT_CI_TOKEN_SECRET }} - export ATOMICDEX_TEST_SEED=${{ secrets.ATOMICDEX_TEST_SEED }} - export ATOMICDEX_PASSWORD=${{ secrets.ATOMICDEX_PASSWORD }} - export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/clang_64/lib/cmake - export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} - echo "Running tests" - ./ci_tools_atomic_dex tests ${{ matrix.type }} - cd build-${{ matrix.type }}/bin/${{ env.DEX_PROJECT_NAME }}_tests.app/Contents/MacOS - cat ${{ env.DEX_PROJECT_NAME }}-tests-result.xml - #curl https://report.ci/upload.py --output upload.py - ls - #python upload.py --sha `git rev-parse HEAD` -n "[Doctest MacOS ${{ matrix.type }}]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" - #echo "Uploading tests on OSX finished" - - name: Running Tests (Windows) shell: powershell working-directory: ci_tools_atomic_dex @@ -305,27 +214,6 @@ jobs: name: ${{ env.artifact_name_appimage }} path: ./bundled/linux/${{ env.target_name_appimage }} - - name: Upload env variable for artifacts (macOS) - if: runner.os == 'macOS' - run: | - ls ./bundled/osx/ - echo "artifact_name_dmg=${{ env.DEX_PROJECT_NAME }}-${{ matrix.name }}-$(git rev-parse --short HEAD).dmg" >> $GITHUB_ENV - echo "artifact_name_installer=${{ env.DEX_PROJECT_NAME }}-installer-${{ matrix.name }}-$(git rev-parse --short HEAD).7z" >> $GITHUB_ENV - - - name: Upload artifacts (MacOS dmg) - if: runner.os == 'macOS' - uses: actions/upload-artifact@v2 - with: - name: ${{ env.artifact_name_dmg }} - path: ./bundled/osx/${{ env.DEX_PROJECT_NAME }}.dmg - - - name: Upload artifacts (MacOS installer) - if: runner.os == 'macOS' - uses: actions/upload-artifact@v2 - with: - name: ${{ env.artifact_name_installer }} - path: ./bundled/osx/${{ env.DEX_PROJECT_NAME }}_installer.7z - - name: Upload env variable for artifacts (Windows) if: runner.os == 'Windows' run: | From 4d940a5be14d95466233f2c69d80c72cd73ad5c4 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 14 Apr 2021 09:15:44 +0000 Subject: [PATCH 004/139] merge --- .github/workflows/atomicdex-desktop-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index d3ba09c91f..4269c888f9 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -22,7 +22,6 @@ jobs: matrix: name: [ ubuntu-qt-5-15-2, - osx-qt-5-15-2, windows-10-qt-5-15-2 ] From 9bd5ddf13375d8f2c9aa77412a9edfe519ed7822 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 15 Apr 2021 19:11:23 +0000 Subject: [PATCH 005/139] enable SUPERNET assets --- assets/config/0.4.1-coins.json | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/assets/config/0.4.1-coins.json b/assets/config/0.4.1-coins.json index e9a06a240c..b22e8f95c5 100644 --- a/assets/config/0.4.1-coins.json +++ b/assets/config/0.4.1-coins.json @@ -512,8 +512,7 @@ "https://bet.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "BOTS": { "coin": "BOTS", @@ -536,8 +535,7 @@ "https://bots.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "BUSD-ERC20": { "coin": "BUSD-ERC20", @@ -759,8 +757,7 @@ "https://crypto.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "DAI-BEP20": { "coin": "DAI-BEP20", @@ -1256,8 +1253,7 @@ ], "type": "Smart Chain", "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "IOTA-BEP20": { "coin": "IOTA-BEP20", @@ -1314,8 +1310,7 @@ "https://jumblr.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "KOIN": { "coin": "KOIN", @@ -1441,8 +1436,7 @@ ], "type": "Smart Chain", "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "NEAR-BEP20": { "coin": "NEAR-BEP20", @@ -1859,8 +1853,7 @@ "https://mgw.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "DEX": { "coin": "DEX", @@ -1883,8 +1876,7 @@ "https://dex.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "RICK": { "coin": "RICK", @@ -1955,8 +1947,7 @@ "https://pangea.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "QIAIR": { "coin": "QIAIR", @@ -2003,8 +1994,7 @@ "https://revs.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "SOULJA": { "coin": "SOULJA", @@ -2178,8 +2168,7 @@ "https://supernet.explorer.dexstats.info/" ], "active": false, - "currently_enabled": false, - "wallet_only": true + "currently_enabled": false }, "SUSHI-BEP20": { "coin": "SUSHI-BEP20", From 6ace19721d8807499c747fcd38fbea3651098c73 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 18 Apr 2021 21:30:09 +0000 Subject: [PATCH 006/139] OSX --- .github/workflows/atomicdex-desktop-ci.yml | 194 +++++++++++++++++---- cmake/install/macos/osx_post_install.cmake | 18 +- 2 files changed, 165 insertions(+), 47 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 4269c888f9..479212aef3 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -22,6 +22,7 @@ jobs: matrix: name: [ ubuntu-qt-5-15-2, + osx-qt-5-15-2, windows-10-qt-5-15-2 ] @@ -31,11 +32,21 @@ jobs: qt: '5.15.2' type: 'release' + - name: osx-qt-5-15-2 + os: macos-latest + qt: '5.15.2' + type: 'release' + - name: windows-10-qt-5-15-2 os: windows-latest qt: '5.15.2' type: 'release' + #- name: osx-qt-5-15-2-dbg + # os: macos-latest + # qt: '5.15.2' + # type: 'debug' + steps: - uses: actions/checkout@v2 with: @@ -63,6 +74,26 @@ jobs: aqtversion: '==0.8' py7zrversion: '==0.6' + - name: Install QT (MacOS) + if: runner.os == 'macOS' + uses: KomodoPlatform/install-qt-action@v2.9.0 + with: + version: ${{ matrix.qt }} + host: 'mac' + target: 'desktop' + #mirror: 'http://mirrors.ocf.berkeley.edu/qt/' + mirror: https://qt-mirror.dannhauer.de/ + #mirror: https://www.funet.fi/pub/mirrors/download.qt-project.org/ + #mirror: https://ftp.fau.de/qtproject/ + dir: '${{ github.workspace }}' + modules: 'qtcharts qtwidgets debug_info qtwebview qtwebengine' + + - name: Install QT IFW (MacOS) + if: runner.os == 'macOS' + run: | + python3 -m aqt tool mac tools_ifw 4.1.0-202104091030 qt.tools.ifw.41 -b https://qt-mirror.dannhauer.de/ --outputdir ${{ github.workspace }}/Qt + echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.0/bin" >> $GITHUB_PATH + - name: Install QT (Windows) if: runner.os == 'Windows' uses: KomodoPlatform/install-qt-action@v2.9.0 @@ -118,6 +149,17 @@ jobs: setupOnly: true appendedCacheKey: ${{ hashFiles('vcpkg.json') }} + - name: Install deps (MacOS) + if: runner.os == 'macOS' + run: | + ./ci_tools_atomic_dex/ci_scripts/osx_script.sh + + - name: Upload env variable for vpkg (MacOS) + if: runner.os == 'macOS' + run: | + echo "CXX=/usr/local/opt/llvm/bin/clang++" >> $GITHUB_ENV + echo "CC=/usr/local/opt/llvm/bin/clang" >> $GITHUB_ENV + - name: Build AtomicDEX (Linux) if: runner.os == 'Linux' run: | @@ -135,6 +177,41 @@ jobs: ./ci_tools_atomic_dex build release ./ci_tools_atomic_dex bundle release +# - name: import code signing certificates (macos) +# if: runner.os == 'macOS' +# uses: Apple-Actions/import-codesign-certs@v1 +# with: +# keychain: ${{ github.run_id }} +# keychain-password: ${{ github.run_id }} +# p12-file-base64: ${{ secrets.CERTIFICATES_P12 }} +# p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} + +# - name: import installer code signing certificates (macos) +# if: runner.os == 'macOS' +# uses: apple-actions/import-codesign-certs@v1 +# with: +# keychain: ${{ github.run_id }} +# keychain-password: ${{ github.run_id }} +# create-keychain: false +# p12-file-base64: ${{ secrets.CERTIFICATES_INSTALLER_P12 }} +# p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} + + - name: Build AtomicDEX (MacOS) + if: runner.os == 'macOS' + run: | + export MAC_SIGN_IDENTITY="${{ secrets.MAC_SIGN_IDENTITY }}" + export INSTALLER_MAC_SIGN_IDENTITY="${{ secrets.INSTALLER_MAC_SIGN_IDENTITY }}" + export APPLE_ATOMICDEX_PASSWORD="${{ secrets.APPLE_ATOMICDEX_PASSWORD }}" + export APPLE_ID="${{ secrets.APPLE_ID }}" + export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/clang_64/lib/cmake + export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} + export MACOSX_DEPLOYMENT_TARGET=10.13 + export CC=clang + export CXX=clang++ + cd ci_tools_atomic_dex + nimble build -y + ./ci_tools_atomic_dex bundle ${{ matrix.type }} --osx_sdk=$HOME/sdk/MacOSX10.14.sdk --compiler=clang++ + - name: Build AtomicDEX (Windows) if: runner.os == 'Windows' shell: powershell @@ -142,44 +219,64 @@ jobs: $Env:QT_VERSION = "${{ matrix.qt }}" .\ci_tools_atomic_dex\ci_scripts\windows_script.ps1 - - name: Running Tests (Linux) - working-directory: ci_tools_atomic_dex - if: runner.os == 'Linux' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository - run: | - export REPORT_CI_TOKEN=${{ secrets.REPORT_CI_TOKEN_SECRET }} - export ATOMICDEX_TEST_SEED=${{ secrets.ATOMICDEX_TEST_SEED }} - export ATOMICDEX_PASSWORD=${{ secrets.ATOMICDEX_PASSWORD }} - export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/gcc_64/lib/cmake - export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} - export PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/gcc_64/bin:$PATH - export PATH=$HOME/.nimble/bin:$PATH - export CXXFLAGS=-stdlib=libc++ - export LDFLAGS=-stdlib=libc++ - export CXX=clang++-11 - export CC=clang-11 - echo "Running tests" - ./ci_tools_atomic_dex tests release - cd build-Release/bin/AntaraAtomicDexTestsAppDir/usr/bin - cat ${{ env.DEX_PROJECT_NAME }}-tests-result.xml - #curl https://report.ci/upload.py --output upload.py - ls - #python upload.py --sha `git rev-parse HEAD` -n "[Doctest Linux]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" - #echo "Uploading tests on Linux finished" - - - name: Running Tests (Windows) - shell: powershell - working-directory: ci_tools_atomic_dex - if: runner.os == 'Windows' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository - run: | - echo "Running tests" - $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" - $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\${{ matrix.qt }}\msvc2019_64" - cmd /c '.\ci_tools_atomic_dex.exe tests release 2>&1' - cd build-Release - cd bin - ls - #Invoke-WebRequest -Uri https://report.ci/upload.py -OutFile upload.py - #python upload.py --sha $(git rev-parse HEAD) -n "[Doctest Windows]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" +# - name: Running Tests (Linux) +# working-directory: ci_tools_atomic_dex +# if: runner.os == 'Linux' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository +# run: | +# export REPORT_CI_TOKEN=${{ secrets.REPORT_CI_TOKEN_SECRET }} +# export ATOMICDEX_TEST_SEED=${{ secrets.ATOMICDEX_TEST_SEED }} +# export ATOMICDEX_PASSWORD=${{ secrets.ATOMICDEX_PASSWORD }} +# export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/gcc_64/lib/cmake +# export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} +# export PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/gcc_64/bin:$PATH +# export PATH=$HOME/.nimble/bin:$PATH +# export CXXFLAGS=-stdlib=libc++ +# export LDFLAGS=-stdlib=libc++ +# export CXX=clang++-11 +# export CC=clang-11 +# echo "Running tests" +# ./ci_tools_atomic_dex tests release +# cd build-Release/bin/AntaraAtomicDexTestsAppDir/usr/bin +# cat ${{ env.DEX_PROJECT_NAME }}-tests-result.xml +# #curl https://report.ci/upload.py --output upload.py +# ls +# #python upload.py --sha `git rev-parse HEAD` -n "[Doctest Linux]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" +# #echo "Uploading tests on Linux finished" + +# - name: Running Tests (MacOS) +# working-directory: ci_tools_atomic_dex +# if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository +# run: | +# export REPORT_CI_TOKEN=${{ secrets.REPORT_CI_TOKEN_SECRET }} +# export ATOMICDEX_TEST_SEED=${{ secrets.ATOMICDEX_TEST_SEED }} +# export ATOMICDEX_PASSWORD=${{ secrets.ATOMICDEX_PASSWORD }} +# export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/clang_64/lib/cmake +# export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} +# export CC=clang +# export CXX=clang++ +# echo "Running tests" +# ./ci_tools_atomic_dex tests ${{ matrix.type }} +# cd build-${{ matrix.type }}/bin/${{ env.DEX_PROJECT_NAME }}_tests.app/Contents/MacOS +# cat ${{ env.DEX_PROJECT_NAME }}-tests-result.xml +# #curl https://report.ci/upload.py --output upload.py +# ls +# #python upload.py --sha `git rev-parse HEAD` -n "[Doctest MacOS ${{ matrix.type }}]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" +# #echo "Uploading tests on OSX finished" + +# - name: Running Tests (Windows) +# shell: powershell +# working-directory: ci_tools_atomic_dex +# if: runner.os == 'Windows' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository +# run: | +# echo "Running tests" +# $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" +# $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\${{ matrix.qt }}\msvc2019_64" +# cmd /c '.\ci_tools_atomic_dex.exe tests release 2>&1' +# cd build-Release +# cd bin +# ls +# #Invoke-WebRequest -Uri https://report.ci/upload.py -OutFile upload.py +# #python upload.py --sha $(git rev-parse HEAD) -n "[Doctest Windows]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" - name: Upload env variable for artifacts (Linux) if: runner.os == 'Linux' @@ -213,6 +310,27 @@ jobs: name: ${{ env.artifact_name_appimage }} path: ./bundled/linux/${{ env.target_name_appimage }} + - name: Upload env variable for artifacts (macOS) + if: runner.os == 'macOS' + run: | + ls ./bundled/osx/ + echo "artifact_name_dmg=${{ env.DEX_PROJECT_NAME }}-${{ matrix.name }}-$(git rev-parse --short HEAD).dmg" >> $GITHUB_ENV + echo "artifact_name_installer=${{ env.DEX_PROJECT_NAME }}-installer-${{ matrix.name }}-$(git rev-parse --short HEAD).7z" >> $GITHUB_ENV + + - name: Upload artifacts (MacOS dmg) + if: runner.os == 'macOS' + uses: actions/upload-artifact@v2 + with: + name: ${{ env.artifact_name_dmg }} + path: ./bundled/osx/${{ env.DEX_PROJECT_NAME }}.dmg + + - name: Upload artifacts (MacOS installer) + if: runner.os == 'macOS' + uses: actions/upload-artifact@v2 + with: + name: ${{ env.artifact_name_installer }} + path: ./bundled/osx/${{ env.DEX_PROJECT_NAME }}_installer.7z + - name: Upload env variable for artifacts (Windows) if: runner.os == 'Windows' run: | diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index 125008bb06..9463fd1492 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -87,10 +87,10 @@ if (NOT EXISTS ${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg) ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE) - execute_process(COMMAND ${PROJECT_ROOT_DIR}/cmake/install/macos/macos_notarize.sh --app-specific-password=$ENV{APPLE_ATOMICDEX_PASSWORD} --apple-id=$ENV{APPLE_ID} --primary-bundle-id=com.komodoplatform.atomicdex --target-binary=${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ECHO_OUTPUT_VARIABLE - ECHO_ERROR_VARIABLE) +# execute_process(COMMAND ${PROJECT_ROOT_DIR}/cmake/install/macos/macos_notarize.sh --app-specific-password=$ENV{APPLE_ATOMICDEX_PASSWORD} --apple-id=$ENV{APPLE_ID} --primary-bundle-id=com.komodoplatform.atomicdex --target-binary=${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg +# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# ECHO_OUTPUT_VARIABLE +# ECHO_ERROR_VARIABLE) else() message(STATUS "dmg already generated - skipping") endif () @@ -123,14 +123,14 @@ execute_process(COMMAND codesign --deep --force -v -s "$ENV{MAC_SIGN_IDENTITY}" ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE) -execute_process(COMMAND ${PROJECT_ROOT_DIR}/cmake/install/macos/macos_notarize.sh --app-specific-password=$ENV{APPLE_ATOMICDEX_PASSWORD} --apple-id=$ENV{APPLE_ID} --primary-bundle-id=com.komodoplatform.atomicdex --target-binary=${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/osx/${DEX_PROJECT_NAME}_installer.app - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ECHO_OUTPUT_VARIABLE - ECHO_ERROR_VARIABLE) +#execute_process(COMMAND ${PROJECT_ROOT_DIR}/cmake/install/macos/macos_notarize.sh --app-specific-password=$ENV{APPLE_ATOMICDEX_PASSWORD} --apple-id=$ENV{APPLE_ID} --primary-bundle-id=com.komodoplatform.atomicdex --target-binary=${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/osx/${DEX_PROJECT_NAME}_installer.app +# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# ECHO_OUTPUT_VARIABLE +# ECHO_ERROR_VARIABLE) file(COPY ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/osx/${DEX_PROJECT_NAME}_installer.app DESTINATION ${TARGET_APP_PATH}) execute_process(COMMAND ${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}_installer.7z ${DEX_PROJECT_NAME}_installer.app WORKING_DIRECTORY ${TARGET_APP_PATH} ECHO_OUTPUT_VARIABLE - ECHO_ERROR_VARIABLE) \ No newline at end of file + ECHO_ERROR_VARIABLE) From cea14270ce63793368804de570573b732ac1697a Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 21 May 2021 12:22:22 +0000 Subject: [PATCH 007/139] ubuntu latest --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index c8b6a53a8b..02efa89540 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -28,7 +28,7 @@ jobs: include: - name: ubuntu-qt-5-15-2 - os: ubuntu-18.04 + os: ubuntu-latest qt: '5.15.2' type: 'release' From 14bf620d37d78881d02adadc2f89b9469b9a3d16 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 21 May 2021 13:43:51 +0000 Subject: [PATCH 008/139] ubuntu 16 --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 02efa89540..4ef9c970c2 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -28,7 +28,7 @@ jobs: include: - name: ubuntu-qt-5-15-2 - os: ubuntu-latest + os: ubuntu-16.04 qt: '5.15.2' type: 'release' From 7324c9100f7f34850a7d332a50a03a1836a81541 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 9 Jun 2021 15:05:36 +0000 Subject: [PATCH 009/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 144b2be0a1..96b48acb55 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3666/mm2-572f7a1b5-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3690/mm2-1512af867-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3666/mm2-572f7a1b5-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3690/mm2-1512af867-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3666/mm2-572f7a1b5-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3690/mm2-1512af867-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 8e6e1d95e98000827a60896fea9ebbd733072222 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 18 Jun 2021 23:53:38 +0000 Subject: [PATCH 010/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96b48acb55..0467aab537 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3690/mm2-1512af867-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3731/mm2-e98c61217-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3690/mm2-1512af867-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3731/mm2-e98c61217-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3690/mm2-1512af867-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3731/mm2-e98c61217-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From ca2621d0c2aabc2fdc400d6d71e702307b3bad68 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 21 Jun 2021 18:08:09 +0000 Subject: [PATCH 011/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0467aab537..08fcf2fc35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3731/mm2-e98c61217-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-7b6e773a0-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3731/mm2-e98c61217-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-7b6e773a0-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.3731/mm2-e98c61217-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-7b6e773a0-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From cc97573e015c43d47bff5700d1ae3fe6c239e365 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 23 Jun 2021 13:57:14 +0000 Subject: [PATCH 012/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88ef9515a6..17716e2218 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-7b6e773a0-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-3eb3d72fc-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-7b6e773a0-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-3eb3d72fc-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-7b6e773a0-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-3eb3d72fc-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 669608c2a89e9b29d3a064620130105eebbcef87 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 29 Jun 2021 15:24:04 +0000 Subject: [PATCH 013/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 17716e2218..71012497ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-3eb3d72fc-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-728fe3d5e-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-3eb3d72fc-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-728fe3d5e-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-3eb3d72fc-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-728fe3d5e-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 9e56de24fecd2be79e135682ace15e5bed81f418 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 30 Jun 2021 22:42:35 +0000 Subject: [PATCH 014/139] remove sync_mirror --- .github/workflows/sync_mirror.yml | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 .github/workflows/sync_mirror.yml diff --git a/.github/workflows/sync_mirror.yml b/.github/workflows/sync_mirror.yml deleted file mode 100644 index 3f1f013146..0000000000 --- a/.github/workflows/sync_mirror.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: GitlabSync - -on: - - push - - delete - -jobs: - sync: - runs-on: ubuntu-latest - name: Git Repo Sync - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - uses: wangchucheng/git-repo-sync@v0.1.0 - with: - target-url: ${{ secrets.GITLAB_URL }} - target-username: ${{ secrets.GITLAB_USERNAME }} - target-token: ${{ secrets.GITLAB_TOKEN }} From ed2bb54904473f132b21a1ed5fd3f1c77ab2e6da Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 30 Jun 2021 23:32:58 +0000 Subject: [PATCH 015/139] segwit mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71012497ad..e806e84697 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-728fe3d5e-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-186111667-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-728fe3d5e-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-186111667-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-728fe3d5e-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-186111667-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 27b923c6e8fa73ebc494830f8444ef73931aa7bc Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 6 Jul 2021 20:17:15 +0000 Subject: [PATCH 016/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e806e84697..ed5800e5c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-186111667-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-9dbfa21bc-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-186111667-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-9dbfa21bc-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-186111667-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-9dbfa21bc-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From f2838a655ee23a7228772cfe4542cddb887ffdcb Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 7 Jul 2021 14:48:49 +0000 Subject: [PATCH 017/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed5800e5c7..1cb1cc99b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-9dbfa21bc-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-41c6ce130-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-9dbfa21bc-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-41c6ce130-Windows_NT-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-9dbfa21bc-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-41c6ce130-Linux-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 252cfd841c702bccc5c5015719472fc7919247ff Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 7 Jul 2021 16:10:23 +0000 Subject: [PATCH 018/139] update mm2 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1cb1cc99b9..9f384dc089 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,10 +64,10 @@ if (APPLE) URL http://195.201.0.6/dev/mm2-41c6ce130-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-41c6ce130-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-41c6ce130-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-41c6ce130-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-41c6ce130-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 3f2a736028b621d30f29990be46b8dd256d09048 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 9 Aug 2021 16:02:43 +0000 Subject: [PATCH 019/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b04a110ae4..8132234ac7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-41c6ce130-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-535afd872-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-41c6ce130-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-535afd872-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-41c6ce130-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-535afd872-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 9b3abcce0eae821666d34aa3812d0569ea146b70 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 11 Aug 2021 13:06:38 +0000 Subject: [PATCH 020/139] use my seednodes --- src/core/atomicdex/config/mm2.cfg.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index 0213830ba8..de5bc3cb62 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,9 +32,9 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - std::vector seednodes{}; + //std::vector seednodes{}; //std::vector seednodes{"195.201.91.96", "195.201.91.53", "168.119.174.126", "46.4.78.11", "46.4.87.18"}; - //std::vector seednodes{"46.4.78.11", "46.4.87.18"}; + std::vector seednodes{"46.4.78.11", "46.4.87.18"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 23a2facfc7e1e7f9c6a14bee51db3a2dec6deac4 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 11 Aug 2021 16:30:05 +0000 Subject: [PATCH 021/139] Revert "use my seednodes" This reverts commit 9b3abcce0eae821666d34aa3812d0569ea146b70. --- src/core/atomicdex/config/mm2.cfg.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index de5bc3cb62..0213830ba8 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,9 +32,9 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - //std::vector seednodes{}; + std::vector seednodes{}; //std::vector seednodes{"195.201.91.96", "195.201.91.53", "168.119.174.126", "46.4.78.11", "46.4.87.18"}; - std::vector seednodes{"46.4.78.11", "46.4.87.18"}; + //std::vector seednodes{"46.4.78.11", "46.4.87.18"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 22ce7c3d52e11d65a0ff6f45c84fe15a2d3ff1e0 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 17 Aug 2021 13:07:09 +0000 Subject: [PATCH 022/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8aef77cbb5..c1f68d8d75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-7489372e9-Darwin-Release.zip) + URL http://195.201.0.6/disappearing-orders-fix/mm2-4ed62d15f-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-7489372e9-Linux-Release.zip) + URL http://195.201.0.6/disappearing-orders-fix/mm2-4ed62d15f-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-7489372e9-Windows_NT-Release.zip) + URL http://195.201.0.6/disappearing-orders-fix/mm2-4ed62d15f-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 739ffce3420ddec87f4d87a97293df47bd5ab76c Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 20 Aug 2021 16:18:05 +0000 Subject: [PATCH 023/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c1f68d8d75..83033c08e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/disappearing-orders-fix/mm2-4ed62d15f-Darwin-Release.zip) + URL http://195.201.0.6/sig-version-config/mm2-114d0a973-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/disappearing-orders-fix/mm2-4ed62d15f-Linux-Release.zip) + URL http://195.201.0.6/sig-version-config/mm2-114d0a973-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/disappearing-orders-fix/mm2-4ed62d15f-Windows_NT-Release.zip) + URL http://195.201.0.6/sig-version-config/mm2-114d0a973-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From fb362ad883d7bddb5820c75bf03df128fec0d268 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 22 Aug 2021 13:26:45 +0000 Subject: [PATCH 024/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83033c08e9..26db69ade5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/sig-version-config/mm2-114d0a973-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-a1cb0a4c5-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/sig-version-config/mm2-114d0a973-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-a1cb0a4c5-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/sig-version-config/mm2-114d0a973-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-a1cb0a4c5-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From d62bff6e98e1860aaa5ed30e778c517495aaeb46 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 30 Aug 2021 21:52:28 +0000 Subject: [PATCH 025/139] try 18.04 --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 6dd3a094de..c74784d88b 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -28,7 +28,7 @@ jobs: include: - name: ubuntu-qt-5-15-2 - os: ubuntu-16.04 + os: ubuntu-18.04 qt: '5.15.2' type: 'release' From 1d6ae4af1a7dc4bc75b7af95c432af86b85da56c Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 30 Aug 2021 22:36:57 +0000 Subject: [PATCH 026/139] try latest, remove Windblows and OSX --- .github/workflows/atomicdex-desktop-ci.yml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index c74784d88b..cca75c366a 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -21,26 +21,24 @@ jobs: fail-fast: false matrix: name: [ - ubuntu-qt-5-15-2, - osx-qt-5-15-2, - windows-10-qt-5-15-2 + ubuntu-qt-5-15-2 ] include: - name: ubuntu-qt-5-15-2 - os: ubuntu-18.04 + os: ubuntu-latest qt: '5.15.2' type: 'release' - - name: osx-qt-5-15-2 - os: macos-latest - qt: '5.15.2' - type: 'release' + #- name: osx-qt-5-15-2 + # os: macos-latest + # qt: '5.15.2' + # type: 'release' - - name: windows-10-qt-5-15-2 - os: windows-latest - qt: '5.15.2' - type: 'release' + #- name: windows-10-qt-5-15-2 + # os: windows-latest + # qt: '5.15.2' + # type: 'release' #- name: osx-qt-5-15-2-dbg # os: macos-latest From d2325cc4cdd35e6227ceff5dd648d60d159189c2 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 30 Aug 2021 23:24:56 +0000 Subject: [PATCH 027/139] back to 18.04 --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index cca75c366a..d4066a76bf 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -26,7 +26,7 @@ jobs: include: - name: ubuntu-qt-5-15-2 - os: ubuntu-latest + os: ubuntu-18.04 qt: '5.15.2' type: 'release' From a5d23b1cf2dc791450fbc83d57d988acad006369 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 2 Sep 2021 03:10:08 +0000 Subject: [PATCH 028/139] use my seeds --- src/core/atomicdex/config/mm2.cfg.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index 0213830ba8..de5bc3cb62 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,9 +32,9 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - std::vector seednodes{}; + //std::vector seednodes{}; //std::vector seednodes{"195.201.91.96", "195.201.91.53", "168.119.174.126", "46.4.78.11", "46.4.87.18"}; - //std::vector seednodes{"46.4.78.11", "46.4.87.18"}; + std::vector seednodes{"46.4.78.11", "46.4.87.18"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 58a4002d0f528893d3746fd01161edc73e3fdf37 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 2 Sep 2021 17:25:38 +0000 Subject: [PATCH 029/139] Revert "use my seeds" This reverts commit a5d23b1cf2dc791450fbc83d57d988acad006369. --- src/core/atomicdex/config/mm2.cfg.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index de5bc3cb62..0213830ba8 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,9 +32,9 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - //std::vector seednodes{}; + std::vector seednodes{}; //std::vector seednodes{"195.201.91.96", "195.201.91.53", "168.119.174.126", "46.4.78.11", "46.4.87.18"}; - std::vector seednodes{"46.4.78.11", "46.4.87.18"}; + //std::vector seednodes{"46.4.78.11", "46.4.87.18"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 406e50e14b819e6b6074801834361bc834110aa2 Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 4 Sep 2021 02:48:25 +0000 Subject: [PATCH 030/139] use good seeds --- src/core/atomicdex/config/mm2.cfg.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index 0213830ba8..a23d0d4d7d 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,9 +32,8 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - std::vector seednodes{}; - //std::vector seednodes{"195.201.91.96", "195.201.91.53", "168.119.174.126", "46.4.78.11", "46.4.87.18"}; - //std::vector seednodes{"46.4.78.11", "46.4.87.18"}; + //std::vector seednodes{}; + std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 7fd5c61cdd8958385e7f8ee5aac4a99b5744d8bc Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 4 Sep 2021 15:14:33 +0000 Subject: [PATCH 031/139] remove one seed --- src/core/atomicdex/config/mm2.cfg.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index a23d0d4d7d..271f5d68d0 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -33,7 +33,7 @@ namespace atomic_dex std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; //std::vector seednodes{}; - std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; + std::vector seednodes{"46.4.78.11", "46.4.87.18", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 20e02474e7caf774a3aa8ea8ae01bea899150569 Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 4 Sep 2021 16:15:16 +0000 Subject: [PATCH 032/139] Revert "remove one seed" This reverts commit 7fd5c61cdd8958385e7f8ee5aac4a99b5744d8bc. --- src/core/atomicdex/config/mm2.cfg.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index 271f5d68d0..a23d0d4d7d 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -33,7 +33,7 @@ namespace atomic_dex std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; //std::vector seednodes{}; - std::vector seednodes{"46.4.78.11", "46.4.87.18", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; + std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From d2640e7fba558f0c09241234d9a20d81d1c5c341 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 8 Sep 2021 01:33:02 +0000 Subject: [PATCH 033/139] update mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b07a770e82..efcf9c5049 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.1.0/mm2-41170748d-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-9016ce482-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.1.0/mm2-41170748d-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-9016ce482-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.1.0/mm2-41170748d-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-9016ce482-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From eaac2cdb1e883a248cd0b3d8457ee0112c65feea Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 9 Sep 2021 20:27:08 +0000 Subject: [PATCH 034/139] default seeds --- src/core/atomicdex/config/mm2.cfg.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index a23d0d4d7d..99ae9766bc 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,8 +32,8 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - //std::vector seednodes{}; - std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; + std::vector seednodes{}; + //std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 496a74a34eaeb1dd86b4c11d35bd89b29c51f1f0 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 10 Sep 2021 20:18:27 +0000 Subject: [PATCH 035/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index efcf9c5049..7da8ccac1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-9016ce482-Darwin-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-fa01207ab-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-9016ce482-Linux-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-fa01207ab-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-9016ce482-Windows_NT-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-fa01207ab-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 205346395bf58a8bcb3e275eb6774cf7637772ab Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 11 Sep 2021 17:21:19 +0000 Subject: [PATCH 036/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7da8ccac1b..41951fdd99 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-fa01207ab-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4178/mm2-fa01207ab-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-fa01207ab-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4178/mm2-fa01207ab-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-fa01207ab-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4178/mm2-fa01207ab-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 4b00f908bb9ba0ef5b0542710089d791b5c95e66 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 15 Sep 2021 10:19:49 +0000 Subject: [PATCH 037/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41951fdd99..a12c28bdba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4178/mm2-fa01207ab-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-3402e6def-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4178/mm2-fa01207ab-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-3402e6def-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4178/mm2-fa01207ab-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-3402e6def-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From d36554c4b6d5ef8784d821f73d7cd11aeec33e36 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 20 Sep 2021 03:20:59 +0000 Subject: [PATCH 038/139] expire_at=72000 --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index ddb8afeb46..5ca303511f 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=600"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=600")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=72000"); + req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=72000")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From bddf0496083b631ac1260ca21d232f053dda1633 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 20 Sep 2021 03:24:17 +0000 Subject: [PATCH 039/139] expire_at=172800 --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 5ca303511f..7e5849ad5e 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=72000"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=72000")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=172800"); + req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=172800")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From c74ae669dfb413c7a80da99cca1669a0c156914a Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 20 Sep 2021 17:24:31 +0000 Subject: [PATCH 040/139] mm2 --- CMakeLists.txt | 6 +++--- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b54ea1446..ca2e567944 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4270/mm2-3a3f159bf-Darwin-Release.zip) + URL http://195.201.0.6/cross-protocol-ordermatch-hotfix/mm2-33bd186a6-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4270/mm2-3a3f159bf-Linux-Release.zip) + URL http://195.201.0.6/cross-protocol-ordermatch-hotfix/mm2-33bd186a6-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4270/mm2-3a3f159bf-Windows_NT-Release.zip) + URL http://195.201.0.6/cross-protocol-ordermatch-hotfix/mm2-33bd186a6-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 7e5849ad5e..ddb8afeb46 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=172800"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=172800")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=600"); + req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=600")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From 6a21c38f3a2a016798d19d45e33520dfcda7d2fa Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 21 Sep 2021 15:00:39 +0000 Subject: [PATCH 041/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca2e567944..7a634a0ee9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/cross-protocol-ordermatch-hotfix/mm2-33bd186a6-Darwin-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-5d7a5b9e3-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/cross-protocol-ordermatch-hotfix/mm2-33bd186a6-Linux-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-5d7a5b9e3-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/cross-protocol-ordermatch-hotfix/mm2-33bd186a6-Windows_NT-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-5d7a5b9e3-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 4860b622e456cbaf3f15c82a8caff3e7a8757e34 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 22 Sep 2021 12:55:03 +0000 Subject: [PATCH 042/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a634a0ee9..961725d175 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-5d7a5b9e3-Darwin-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-9fe6e9402-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-5d7a5b9e3-Linux-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-9fe6e9402-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-5d7a5b9e3-Windows_NT-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-9fe6e9402-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 0f890a96adb0938e4f7de16a26a4f75939d9dd0c Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 22 Sep 2021 15:26:43 +0000 Subject: [PATCH 043/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 961725d175..3581c807df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-9fe6e9402-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4315/mm2-9fe6e9402-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-9fe6e9402-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4315/mm2-9fe6e9402-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-9fe6e9402-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4315/mm2-9fe6e9402-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 8dfbfd9b9138193aa0919d02b4c36ac4bd2c3115 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 23 Sep 2021 04:38:40 +0000 Subject: [PATCH 044/139] good seeds --- src/core/atomicdex/config/mm2.cfg.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index 99ae9766bc..a23d0d4d7d 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,8 +32,8 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - std::vector seednodes{}; - //std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; + //std::vector seednodes{}; + std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From bcf7b83213e2c42f32854e7dc0ea5142fdee2861 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 23 Sep 2021 14:05:59 +0000 Subject: [PATCH 045/139] default seeds --- src/core/atomicdex/config/mm2.cfg.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/config/mm2.cfg.hpp b/src/core/atomicdex/config/mm2.cfg.hpp index a23d0d4d7d..99ae9766bc 100644 --- a/src/core/atomicdex/config/mm2.cfg.hpp +++ b/src/core/atomicdex/config/mm2.cfg.hpp @@ -32,8 +32,8 @@ namespace atomic_dex { std::string gui{std::string(DEX_NAME) + " "s + atomic_dex::get_version()}; int64_t netid{7777}; - //std::vector seednodes{}; - std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; + std::vector seednodes{}; + //std::vector seednodes{"46.4.78.11", "46.4.87.18", "168.119.236.246", "89.248.168.39", "89.248.173.231", "80.82.76.214"}; #ifdef _WIN32 std::string userhome{utils::u8string(fs::path(_wgetenv(L"HOMEPATH")))}; #else From 4b34773fc1c9927db1dacc4993f2ccea4186546a Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 25 Sep 2021 12:49:50 +0000 Subject: [PATCH 046/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3eaa142182..b1709712af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4315/mm2-9fe6e9402-Darwin-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-76dbd66f4-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4315/mm2-9fe6e9402-Linux-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-76dbd66f4-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4315/mm2-9fe6e9402-Windows_NT-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-76dbd66f4-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 83441457730476e4213771caebecf384c6aae95a Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 3 Oct 2021 22:49:53 +0000 Subject: [PATCH 047/139] disable volume limit in simple trading --- .github/workflows/atomicdex-desktop-ci.yml | 16 ++++++++-------- .../models/qt.orderbook.proxy.model.cpp | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index e3cdd271b4..1cb2b50615 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -30,15 +30,15 @@ jobs: qt: '5.15.2' type: 'release' - #- name: osx-qt-5-15-2 - # os: macos-latest - # qt: '5.15.2' - # type: 'release' + - name: osx-qt-5-15-2 + os: macos-latest + qt: '5.15.2' + type: 'release' - #- name: windows-10-qt-5-15-2 - # os: windows-latest - # qt: '5.15.2' - # type: 'release' + - name: windows-10-qt-5-15-2 + os: windows-latest + qt: '5.15.2' + type: 'release' #- name: osx-qt-5-15-2-dbg # os: macos-latest diff --git a/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp b/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp index aae397e27d..db253ed09e 100644 --- a/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp @@ -166,7 +166,7 @@ namespace atomic_dex std::string ticker = this->sourceModel()->data(idx, orderbook_model::CoinRole).toString().toStdString(); const auto& provider = this->m_system_mgr.get_system(); const auto coin_info = this->m_system_mgr.get_system().get_global_cfg()->get_coin_info(ticker); - t_float_50 limit("10000"); + t_float_50 limit("0"); bool is_cex_id_available = this->sourceModel()->data(idx, orderbook_model::HaveCEXIDRole).toBool(); if (coin_info.ticker.empty() || coin_info.wallet_only) //< this means it's not present in our cfg - skipping From 4fdb12d099b4b0dffa94c114fb6f12e1635580ed Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 3 Oct 2021 22:53:41 +0000 Subject: [PATCH 048/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b1709712af..ae04a1da5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-76dbd66f4-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4401/mm2-87837cb54-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-76dbd66f4-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4401/mm2-87837cb54-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-76dbd66f4-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4401/mm2-87837cb54-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From a80b1d0e099a525c47bf0b7173aebeedd2142cb0 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 6 Oct 2021 05:00:11 +0000 Subject: [PATCH 049/139] own price service --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index ddb8afeb46..d87f28812d 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -10,7 +10,7 @@ namespace { - constexpr const char* g_komodo_prices_endpoint = "https://prices.komodo.live:1313"; + constexpr const char* g_komodo_prices_endpoint = "http://46.4.78.11:1313"; web::http::client::http_client_config g_komodo_prices_cfg{[]() { web::http::client::http_client_config cfg; From 033563fc1e18b20facfdbf6959bdf3a613fa71a0 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 6 Oct 2021 05:15:12 +0000 Subject: [PATCH 050/139] own price service --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index d87f28812d..25cd9a6c71 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -10,7 +10,7 @@ namespace { - constexpr const char* g_komodo_prices_endpoint = "http://46.4.78.11:1313"; + constexpr const char* g_komodo_prices_endpoint = "http://prices.cipig.net:1313"; web::http::client::http_client_config g_komodo_prices_cfg{[]() { web::http::client::http_client_config cfg; From d85d50935f261738b707792a730151159c947d13 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 8 Oct 2021 01:50:53 +0000 Subject: [PATCH 051/139] price expire 24h --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 25cd9a6c71..f7af5f0f80 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=600"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=600")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=86400"); + req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=86400")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From 1ceb9fe2c28c46b27de6cca39f80f7b75382cfd8 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 8 Oct 2021 01:52:04 +0000 Subject: [PATCH 052/139] try macos 11 --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 1cb2b50615..ac21403d5d 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -31,7 +31,7 @@ jobs: type: 'release' - name: osx-qt-5-15-2 - os: macos-latest + os: macos-11 qt: '5.15.2' type: 'release' From c524f598d2af566081d848aff54172775679cdac Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 8 Oct 2021 01:53:54 +0000 Subject: [PATCH 053/139] revert to macos latest --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index ac21403d5d..1cb2b50615 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -31,7 +31,7 @@ jobs: type: 'release' - name: osx-qt-5-15-2 - os: macos-11 + os: macos-latest qt: '5.15.2' type: 'release' From c212f4254894c8149c6515b6635fa9e7665ae1da Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 8 Oct 2021 13:39:48 +0000 Subject: [PATCH 054/139] price expire 7d --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index f7af5f0f80..edf3f86c06 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=86400"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=86400")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=604800"); + req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=604800")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From a2692671b857380f4863ea0e83ba3fccc4fe0f94 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 8 Oct 2021 14:18:33 +0000 Subject: [PATCH 055/139] disable Windblows and OSX builds --- .github/workflows/atomicdex-desktop-ci.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 1cb2b50615..4c9cca4147 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -30,15 +30,15 @@ jobs: qt: '5.15.2' type: 'release' - - name: osx-qt-5-15-2 - os: macos-latest - qt: '5.15.2' - type: 'release' - - - name: windows-10-qt-5-15-2 - os: windows-latest - qt: '5.15.2' - type: 'release' +# - name: osx-qt-5-15-2 +# os: macos-latest +# qt: '5.15.2' +# type: 'release' + +# - name: windows-10-qt-5-15-2 +# os: windows-latest +# qt: '5.15.2' +# type: 'release' #- name: osx-qt-5-15-2-dbg # os: macos-latest From 8c20212208a903ad6f9b8149cfe69808019b108c Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 9 Oct 2021 00:24:07 +0000 Subject: [PATCH 056/139] remove some coingecko ids --- assets/config/0.5.2-coins.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 0f68088552..be9d8b7daa 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -52,7 +52,7 @@ "coin": "ABY", "name": "ArtByte", "coinpaprika_id": "aby-artbyte", - "coingecko_id": "artbyte", + "coingecko_id": "test-coin", "electrum": [ { "url": "electrumx.aby.ewmcx.biz:50002", @@ -331,7 +331,7 @@ "coin": "AUR", "name": "Auroracoin", "coinpaprika_id": "aur-auroracoin", - "coingecko_id": "auroracoin", + "coingecko_id": "test-coin", "electrum": [ { "url": "electrumx.aur.ewmcx.info:50002", @@ -1290,7 +1290,7 @@ "coin": "DIMI", "name": "Diminutive Coin", "coinpaprika_id": "dimi-diminutive-coin", - "coingecko_id": "diminutive-coin", + "coingecko_id": "test-coin", "electrum": [ { "url": "electrumx1.diminutivecoin.com:50012", @@ -1451,7 +1451,7 @@ "coin": "EFL", "name": "e-Gulden", "coinpaprika_id": "efl-e-gulden", - "coingecko_id": "electronicgulden", + "coingecko_id": "test-coin", "electrum": [ { "url": "holland.ecoincore.com:11017", @@ -2219,7 +2219,7 @@ "coin": "LYNX", "name": "Lynx", "coinpaprika_id": "lynx-lynx", - "coingecko_id": "lynx", + "coingecko_id": "test-coin", "electrum": [ { "url": "electrum1.logware.net:50002", @@ -5006,8 +5006,8 @@ "SFUSD": { "coin": "SFUSD", "name": "SmartUSD", - "coinpaprika_id": "test-coin", - "coingecko_id": "test-coin", + "coinpaprika_id": "usdt-tether", + "coingecko_id": "tether", "electrum": [ { "url": "electrum1.cipig.net:10070", From 1df53c585391284b3169bfff666db76b49fd8d1d Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 13 Oct 2021 12:18:00 +0000 Subject: [PATCH 057/139] fix --- CMakeLists.txt | 6 +++--- assets/config/0.5.2-coins.json | 2 +- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 2 +- src/core/atomicdex/api/mm2/rpc.enable.hpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae04a1da5b..f17b7e640a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4401/mm2-87837cb54-Darwin-Release.zip) + URL http://195.201.0.6/eth-gas-price-hotfix/mm2-4700d19a4-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4401/mm2-87837cb54-Linux-Release.zip) + URL http://195.201.0.6/eth-gas-price-hotfix/mm2-4700d19a4-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4401/mm2-87837cb54-Windows_NT-Release.zip) + URL http://195.201.0.6/eth-gas-price-hotfix/mm2-4700d19a4-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index dd8662e569..cc552bcf39 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -4733,7 +4733,7 @@ "coin": "XMY", "name": "Myriad", "coinpaprika_id": "xmy-myriad", - "coingecko_id": "myriadcoin", + "coingecko_id": "test-coin", "electrum": [ { "url": "lenoir.ecoincore.com:10892", diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index edf3f86c06..a314def3bf 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -10,7 +10,7 @@ namespace { - constexpr const char* g_komodo_prices_endpoint = "http://prices.cipig.net:1313"; + constexpr const char* g_komodo_prices_endpoint = "http://price.cipig.net:1313"; web::http::client::http_client_config g_komodo_prices_cfg{[]() { web::http::client::http_client_config cfg; diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index b3f1b9a500..e9d8f34e31 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -80,7 +80,7 @@ namespace mm2::api const std::string bnb_fallback_swap_contract_address{bnb_swap_contract_address}; const std::string bnb_testnet_fallback_swap_contract_address{bnb_testnet_swap_contract_address}; std::string gas_station_url{"https://ethgasstation.info/json/ethgasAPI.json"}; - std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; + //std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; std::string testnet_matic_gas_station_url{"https://gasstation-mumbai.matic.today/"}; std::string type; ///< QRC-20 ? bool with_tx_history{true}; From 105ce90f7368db708303f8db40f8e00fa4f14f64 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 13 Oct 2021 14:00:23 +0000 Subject: [PATCH 058/139] fix the fix --- src/core/atomicdex/api/mm2/rpc.enable.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/api/mm2/rpc.enable.cpp b/src/core/atomicdex/api/mm2/rpc.enable.cpp index 36d7fad765..16c36e862c 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.cpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.cpp @@ -41,7 +41,7 @@ namespace mm2::api } case CoinType::Matic: { - j["gas_station_url"] = cfg.is_testnet ? cfg.testnet_matic_gas_station_url : cfg.matic_gas_station_url; + //j["gas_station_url"] = cfg.is_testnet ? cfg.testnet_matic_gas_station_url : cfg.matic_gas_station_url; j["urls"] = cfg.urls; j["swap_contract_address"] = cfg.is_testnet ? cfg.matic_erc_testnet_swap_contract_address : cfg.matic_erc_swap_contract_address; j["fallback_swap_contract"] = cfg.is_testnet ? cfg.matic_erc_testnet_fallback_swap_contract_address : cfg.matic_erc_fallback_swap_contract_address; From fe9457d60c03c1a4bfd2500f45a8353a909d50ef Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 15 Oct 2021 18:47:20 +0000 Subject: [PATCH 059/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f17b7e640a..2920cb6495 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/eth-gas-price-hotfix/mm2-4700d19a4-Darwin-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-001f324e5-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/eth-gas-price-hotfix/mm2-4700d19a4-Linux-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-001f324e5-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/eth-gas-price-hotfix/mm2-4700d19a4-Windows_NT-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-001f324e5-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From d3808be91d49c8db97f8ab91bec076210cadec83 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 19 Oct 2021 18:06:45 +0000 Subject: [PATCH 060/139] fix --- assets/config/0.5.2-coins.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index b55561b33d..1703eaf6f0 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -1108,7 +1108,7 @@ "coin": "BTE", "name": "Bitweb", "type": "UTXO", - "coingecko_id": "bitweb", + "coingecko_id": "test-coin", "coinpaprika_id": "bte-bitweb", "electrum": [ { From c3f5a1dd71e10aeb737f49d2bed3f35ed2c3583a Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 19 Oct 2021 21:20:18 +0000 Subject: [PATCH 061/139] expire 24h --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index a314def3bf..9965122fe6 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=604800"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=604800")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=86400"); + req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=86400")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From c1505670239a9784dbae34656b798d3f151a77c9 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 20 Oct 2021 09:17:19 +0000 Subject: [PATCH 062/139] expire default 10m --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 9965122fe6..12d4ae8b49 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=86400"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=86400")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=600"); + req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=600")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From 952da28f91eb9bc2b1df9c723f1f5dacb5506c91 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 27 Oct 2021 16:36:30 +0000 Subject: [PATCH 063/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2920cb6495..d7c1bd7ca2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-001f324e5-Darwin-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-b6f76eb66-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-001f324e5-Linux-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-b6f76eb66-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/mm2.1/mm2-001f324e5-Windows_NT-Release.zip) + URL http://195.201.0.6/mm2.1/mm2-b6f76eb66-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From bb9b0e4c4f1531113ba47a33d50e7c9d2a01dcba Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 31 Oct 2021 07:07:11 +0000 Subject: [PATCH 064/139] fix --- src/core/atomicdex/api/mm2/rpc.enable.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index 6343187d74..aa181e62af 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -81,7 +81,7 @@ namespace mm2::api const std::string bnb_testnet_fallback_swap_contract_address{bnb_testnet_swap_contract_address}; const std::size_t matic_gas_station_decimals{9}; std::string gas_station_url{"https://ethgasstation.info/json/ethgasAPI.json"}; - //std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; + std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; std::string testnet_matic_gas_station_url{"https://gasstation-mumbai.matic.today/"}; std::string type; ///< QRC-20 ? bool with_tx_history{true}; From c17122ba6ffc5cc12801922fbdc585db0c614bd8 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 2 Nov 2021 20:28:00 +0000 Subject: [PATCH 065/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6034242111..fcbe78717e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4829/mm2-762f40258-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-72ff70357-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4829/mm2-762f40258-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-72ff70357-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.4829/mm2-762f40258-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-72ff70357-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 3328954735077634190dc4426b48e8996a7ac0fe Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 3 Nov 2021 11:29:16 +0000 Subject: [PATCH 066/139] coins --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fcbe78717e..0c34a4cbde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,7 +79,7 @@ FetchContent_Declare( ) FetchContent_Declare(jl777-coins - URL https://github.com/KomodoPlatform/coins/archive/master.zip) + URL https://github.com/cipig/coins/archive/nogeo.zip) #FetchContent_Declare(adex-generics-coins # URL https://github.com/KomodoPlatform/atomicdex-desktop-generics/archive/main.zip) From b743ea2dbfef8c54c41def950afef0cbd75fcafe Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 3 Nov 2021 12:02:56 +0000 Subject: [PATCH 067/139] SMTF --- assets/config/0.5.2-coins.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 1207b6d9b2..0c2dba3889 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -4501,8 +4501,8 @@ "active": false, "currently_enabled": false }, - "SMTF-OLD": { - "coin": "SMTF-OLD", + "SMTF": { + "coin": "SMTF", "name": "SmartFi", "coinpaprika_id": "test-coin", "coingecko_id": "test-coin", From e4c3654da7d468ee887fe95611fdb6374add3bba Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 3 Nov 2021 20:58:38 +0000 Subject: [PATCH 068/139] my --- assets/config/0.5.2-coins.json | 34 ++++++++++++++++++ atomic_defi_design/Dex/Constants/General.qml | 9 +++++ atomic_defi_design/Dex/Constants/Style.qml | 1 + .../assets/images/coins/mtsla.png | Bin 0 -> 3863 bytes atomic_defi_design/qml.qrc | 1 + 5 files changed, 45 insertions(+) create mode 100644 atomic_defi_design/assets/images/coins/mtsla.png diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 71cfdaa340..161f01881d 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -4984,6 +4984,40 @@ "active": false, "currently_enabled": false }, + "MTSLA-ERC20": { + "coin": "MTSLA-ERC20", + "name": "Mirrored Tesla", + "coinpaprika_id": "test-coin", + "coingecko_id": "mirrored-tesla", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "MTSLA-BEP20": { + "coin": "MTSLA-BEP20", + "name": "Mirrored Tesla", + "coinpaprika_id": "test-coin", + "coingecko_id": "mirrored-tesla", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "NAV": { "coin": "NAV", "name": "NavCoin", diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 9366cdc37d..17c734d943 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -1564,6 +1564,15 @@ QtObject { "MONA/DAI": "BITTREX:MONAUSD", "MONA/PAX": "BITTREX:MONAUSD", "MONA/JPYC": "BITFLYER:MONAJPY", + "MTSLA/BTC": "FTX:TSLABTC", + "MTSLA/USDT": "NASDAQ:TSLA", + "MTSLA/BUSD": "NASDAQ:TSLA", + "MTSLA/USDC": "NASDAQ:TSLA", + "MTSLA/TUSD": "NASDAQ:TSLA", + "MTSLA/HUSD": "NASDAQ:TSLA", + "MTSLA/UST": "NASDAQ:TSLA", + "MTSLA/DAI": "NASDAQ:TSLA", + "MTSLA/PAX": "NASDAQ:TSLA", "NAV/BTC": "BINANCE:NAVBTC", "NAV/USDT": "BINANCE:NAVUSD", "NAV/BUSD": "BINANCE:NAVUSD", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 8a618353fb..8c4f3d38a1 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -430,6 +430,7 @@ QtObject { "MANA": "#FF3C6C", "MATIC": "#804EE1", "MKR": "#1BAF9F", + "MTSLA": "#CC0000", "NEAR": "#595959", "NEXO": "#A3B3D6", "NVC": "#FCF96D", diff --git a/atomic_defi_design/assets/images/coins/mtsla.png b/atomic_defi_design/assets/images/coins/mtsla.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca819a90ef3300187fc7285c606a48ad7730a03 GIT binary patch literal 3863 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 Z{2v=M)D4T4gJS>y002ovPDHLkV1g$(O)~%h literal 0 HcmV?d00001 diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index e827df9a89..4d90a1b0d3 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -161,6 +161,7 @@ assets/images/coins/morty.png assets/images/coins/movr.png assets/images/coins/mshark.png + assets/images/coins/mtsla.png assets/images/coins/nav.png assets/images/coins/near.png assets/images/coins/nexo.png From 7041bdede2baac7c5b5fe21f3af0d3d51f42f383 Mon Sep 17 00:00:00 2001 From: syl Date: Thu, 4 Nov 2021 18:28:52 +0100 Subject: [PATCH 069/139] Change startup screen style --- atomic_defi_design/Dex/App.qml | 451 +++++++----------- .../Dex/Components/SetupPage.qml | 34 +- .../ImportWallet.qml} | 286 ++++++----- .../Logging.qml} | 33 +- .../Dex/Screens/{ => Startup}/Login.qml | 144 +++--- .../Dex/Screens/Startup/Main.qml | 91 ++++ .../{NewUser.qml => Startup/NewWallet.qml} | 425 ++++++++++------- .../WalletsView.qml} | 401 +++++++++------- atomic_defi_design/Dex/Screens/qmldir | 3 + atomic_defi_design/Dex/main.qml | 393 ++++++++------- atomic_defi_design/qml.qrc | 11 +- 11 files changed, 1224 insertions(+), 1048 deletions(-) rename atomic_defi_design/Dex/Screens/{RecoverSeed.qml => Startup/ImportWallet.qml} (64%) rename atomic_defi_design/Dex/Screens/{InitialLoading.qml => Startup/Logging.qml} (66%) rename atomic_defi_design/Dex/Screens/{ => Startup}/Login.qml (67%) create mode 100644 atomic_defi_design/Dex/Screens/Startup/Main.qml rename atomic_defi_design/Dex/Screens/{NewUser.qml => Startup/NewWallet.qml} (71%) rename atomic_defi_design/Dex/Screens/{FirstLaunch.qml => Startup/WalletsView.qml} (69%) create mode 100644 atomic_defi_design/Dex/Screens/qmldir diff --git a/atomic_defi_design/Dex/App.qml b/atomic_defi_design/Dex/App.qml index 33ab3ad59d..5849cc1217 100644 --- a/atomic_defi_design/Dex/App.qml +++ b/atomic_defi_design/Dex/App.qml @@ -11,219 +11,108 @@ import "Screens" import "Constants" import "Components" import "Dashboard" - -import App 1.0 as App - +import App 1.0 import Dex.Themes 1.0 as Dex +import "Screens/Startup" as Startup DexRectangle { id: app - property string currentWalletName: "" - property int page: current_page === 5 ? deepPage : current_page - property int deepPage: 0 - property string selected_wallet_name: "" - property bool debug: debug_bar - property bool debug_log: false - property alias globalGradient: globalGradient - property var notification_modal: notifications_modal - property var notifications_list: current_page == idx_dashboard ? loader.item.notifications_list : [] - - // Preload Chart - signal pairChanged(string base, string rel) - property var chart_component - property var chart_object - - readonly property int idx_first_launch: 0 - readonly property int idx_recover_seed: 1 - readonly property int idx_new_user: 2 - readonly property int idx_login: 3 - readonly property int idx_initial_loading: 4 - readonly property int idx_dashboard: 5 - property int current_page - property bool can_open_login: false - property bool disconnected: false - - property bool segwit_on: false - - onCurrent_pageChanged: { - if (window.logged !== undefined) { - if (current_page === idx_dashboard) { - window.logged = true - } else { - window.logged = false - } - } + // This enumeration represents every possible visual state (commonly named "screen") of the application + enum ScreenType + { + Startup, // Wallets selection, login, create wallet, import wallet, etc. + Dashboard // After logged to a wallet. } - function appendLog(text) { - log_area.append(text) - } + property string currentWalletName: API.app.wallet_mgr.wallet_default_name + property bool debug: debug_bar + property var notification_modal: notifications_modal + property var notifications_list: _currentPage === App.ScreenType.Dashboard ? loader.item.notifications_list : [] + property bool segwit_on: false - function firstPage() { - if (!API.app.first_run() && selected_wallet_name !== "") { - if(app.disconnected) { - app.disconnected = false - can_open_login = false - } else { - can_open_login = true - } - - } else { - can_open_login = false - } + property var _currentPage: App.ScreenType.Startup + property var _availablePages: [ _startup, dashboard ] - return idx_first_launch - } + property alias globalGradient: globalGradient - function onDisconnect() { - app.notifications_list = [] - API.app.wallet_mgr.set_log_status(false); - app.disconnected = true - openFirstLaunch() - } + // Preload Chart + signal pairChanged(string base, string rel) - function openFirstLaunch(force = false, set_wallet_name = true) { - if (set_wallet_name) selected_wallet_name = API.app.wallet_mgr.wallet_default_name - General.initialized_orderbook_pair = false - if (API.app.wallet_mgr.log_status()) { - current_page = idx_dashboard - } else { - current_page = force ? idx_first_launch : firstPage() - } + function onDisconnect() + { + app.notifications_list = []; + API.app.wallet_mgr.set_log_status(false); + _currentPage = App.ScreenType.Startup; } - Shortcut { + Shortcut + { sequence: "F11" onActivated: window.showNormal() } - Component { + + Component + { id: no_connection NoConnection {} } - NotificationsModal { - id: notifications_modal - } - Component { - id: first_launch - - FirstLaunch { - onClickedNewUser: () => { - current_page = idx_new_user - } - onClickedRecoverSeed: () => { - current_page = idx_recover_seed - } - onClickedWallet: () => { - current_page = idx_login - } - } - } + NotificationsModal { id: notifications_modal } - Component { - id: recover_seed - - RecoverSeed { - onClickedBack: () => { - can_open_login = false - openFirstLaunch(true) - } - onPostConfirmSuccess: () => { - openFirstLaunch(false, false) - } - } - } - - Component { - id: new_user - - NewUser { - onClickedBack: () => { - can_open_login = false - openFirstLaunch(true) - } - onPostCreateSuccess: () => { - openFirstLaunch(false, false) - } - } - } - - Component { - id: login - - Login { - onClickedBack: () => { - can_open_login = false - openFirstLaunch(true) - } - onPostLoginSuccess: () => { - current_page = idx_initial_loading - } - } - } - - Component { - id: initial_loading - - InitialLoading { - onLoaded: () => { - current_page = idx_dashboard + Component + { + id: _startup + Startup.Main + { + _selectedWalletName: currentWalletName + onLogged: + { + currentWalletName = walletName; + _currentPage = App.ScreenType.Dashboard; + window.logged = true } } } - - Component { + Component + { id: dashboard Dashboard {} } - Component { - id: dialogManager - DexDialogManager { - } + Component + { + id: dialogManager + DexDialogManager { } } - - - Loader { + Loader + { id: loader anchors.fill: parent - sourceComponent: { + sourceComponent: + { if (!API.app.internet_checker.internet_reacheable) return no_connection - switch (current_page) { - case idx_dashboard: - return dashboard - case idx_first_launch: - return first_launch - case idx_initial_loading: - return initial_loading - case idx_login: - return login - case idx_new_user: - return new_user - case idx_recover_seed: - return recover_seed - default: - return undefined - } + return _availablePages[_currentPage] } } // Error Modal - ModalLoader { + ModalLoader + { id: error_log_modal sourceComponent: LogModal {} } - function showError(title, content) { + function showError(title, content) + { if (content === undefined || content === null) return error_log_modal.open() error_log_modal.item.header = title @@ -231,23 +120,24 @@ DexRectangle } // Toast - ToastManager { - id: toast - } + ToastManager { id: toast } // Update Modal - NewUpdateModal { + NewUpdateModal + { id: new_update_modal visible: false } - UpdateInvalidChecksum { + UpdateInvalidChecksum + { id: update_invalid_checksum visible: false } // Fatal Error Modal - FatalErrorModal { + FatalErrorModal + { id: fatal_error_modal visible: false } @@ -278,19 +168,26 @@ DexRectangle } } - Item { + Item + { id: debug_control + property var splitViewState + anchors.bottom: parent.bottom anchors.right: parent.right width: 110 height: 20 visible: app.debug - Menu { + + Menu + { id: contextMenu - Action { + Action + { text: "Display Normal" - onTriggered: { + onTriggered: + { treeView.parent.visible = true _statusView.visible = true flow.parent.parent.visible = true @@ -299,79 +196,80 @@ DexRectangle app.parent.parent.update() } } - Action { + Action + { text: "Show Full" - onTriggered: { + onTriggered: + { app.parent.width = app.parent.parent.width - treeView.width app.parent.height = app.parent.parent.height treeView.parent.visible = false _statusView.visible = false flow.parent.parent.visible = false - } } - Action { + Action + { text: "Show Minimum" - onTriggered: { + onTriggered: + { app.parent.width = General.minimumWidth app.parent.height = General.minimumHeight } } - Action { + Action + { text: "Show FullScreen" - onTriggered: { - window.showFullScreen() - - } - + onTriggered: { window.showFullScreen(); } } - Action { + Action + { text: "Clean Cache" - onTriggered: { - _statusView.children[0].contentItem.children[0].clear() - } + onTriggered: _statusView.children[0].contentItem.children[0].clear() } } - Rectangle { + Rectangle + { width: parent.width radius: 1 height: 20 color: Qaterial.Colors.blueGray600 } - Row { + Row + { anchors.centerIn: parent spacing: 10 anchors.bottomMargin: 5 - DefaultText { + DefaultText + { text: "%1x%2".arg(app.width).arg(app.height) color: 'white' font.pixelSize: 13 layer.enabled: true - DropShadow { - color: 'black' - } + DropShadow { color: 'black' } } - Qaterial.ColorIcon { + Qaterial.ColorIcon + { source: Qaterial.Icons.tools iconSize: 12 anchors.verticalCenter: parent.verticalCenter } - } - DefaultMouseArea { + DefaultMouseArea + { anchors.fill: parent - onClicked: { - contextMenu.open() - } + onClicked: contextMenu.open() } } - Component { + Component + { id: alertComponent - Popup { + Popup + { id: alertPopup property color backgroundColor: Qaterial.Colors.orange200 property color foregroundColor: Qaterial.Colors.gray900 @@ -385,27 +283,27 @@ DexRectangle width: 300 height: col.height + 25 function show(data) { - if("backgroundColor" in data) { + if ("backgroundColor" in data) { alertPopup.backgroundColor = data.backgroundColor } - if("foregroundColor" in data) { + if ("foregroundColor" in data) { alertPopup.foregroundColor = data.foregroundColor } - if("title" in data) { + if ("title" in data) { alertPopup.title = data.title } - if("subTitle" in data) { + if ("subTitle" in data) { alertPopup.subTitle = data.subTitle } - if("icon" in data) { + if ("icon" in data) { alertPopup.icon = data.icon } - if("timeout" in data) { + if ("timeout" in data) { alertPopup.timeout = data.timeout } alertPopup.open() @@ -413,12 +311,15 @@ DexRectangle alertTimer.restart() } - background: Qaterial.ClipRRect { - radius:4 - DexRectangle { + background: Qaterial.ClipRRect + { + radius: 4 + DefaultRectangle + { anchors.fill: parent color: alertPopup.backgroundColor - DexRectangle { + DefaultRectangle + { id: insideRect width: parent.width height: 8 @@ -426,53 +327,61 @@ DexRectangle opacity: .5 color: Qt.lighter(alertPopup.backgroundColor) border.width: 0 - Behavior on width { - NumberAnimation { + Behavior on width + { + NumberAnimation + { duration: alertPopup.timeout } } } } } - Timer { + Timer + { id: alertTimer interval: alertPopup.timeout running: areaAlert.containsMouse ? false : true - onTriggered: { - alertPopup.close() - } + onTriggered: alertPopup.close() } - RowLayout { + RowLayout + { anchors.fill: parent - Item { + Item + { Layout.fillHeight: true width: 60 - Qaterial.Icon { + Qaterial.Icon + { icon: alertPopup.icon size: alertPopup.iconSize anchors.centerIn: parent color: alertPopup.foregroundColor } } - Item { + Item + { Layout.fillWidth: true Layout.fillHeight: true - Column { + Column + { id: col width: parent.width anchors.verticalCenter: parent.verticalCenter spacing: 6 - DexLabel { + DexLabel + { text: alertPopup.title color: alertPopup.foregroundColor - font: App.DexTypo.head6 + font: DexTypo.head6 } - DexLabel { + DexLabel + { text: alertPopup.subTitle color: alertPopup.foregroundColor - font: App.DexTypo.subtitle1 + font: DexTypo.subtitle1 wrapMode: DexLabel.Wrap width: parent.width - 10 opacity: .6 @@ -480,7 +389,8 @@ DexRectangle } } } - DexMouseArea { + DexMouseArea + { id: areaAlert hoverEnabled: true anchors.fill: parent @@ -489,7 +399,8 @@ DexRectangle } } - function notifyCopy(title, subTitle) { + function notifyCopy(title, subTitle) + { app.notify({ title: title, subTitle: subTitle, @@ -497,26 +408,30 @@ DexRectangle foregroundColor: Qaterial.Colors.gray900, icon: Qaterial.Icons.contentCopy, iconSize: 35 - }) + }); } - function notify(data) { - let c = alertComponent.createObject(window) - c.show(data) + function notify(data) + { + let c = alertComponent.createObject(window); + c.show(data); } - Settings { + Settings + { id: atomic_settings2 fileName: atomic_cfg_file } - QtObject { + QtObject + { id: _font - property real fontDensity: App.DexTypo.fontDensity - property string fontFamily: App.DexTypo.fontFamily + property real fontDensity: DexTypo.fontDensity + property string fontFamily: DexTypo.fontFamily } - Settings { + Settings + { id: ui_font_settings property alias fontDensity: _font.fontDensity property alias fontFamily: _font.fontFamily @@ -524,61 +439,63 @@ DexRectangle function loadTheme() { - atomic_settings2.sync() - let current = atomic_settings2.value("CurrentTheme") - Dex.CurrentTheme.loadFromFilesystem(current) + atomic_settings2.sync(); + let current = atomic_settings2.value("CurrentTheme"); + Dex.CurrentTheme.loadFromFilesystem(current); } - function showDialog(data) { + function showDialog(data) + { let dialog = dialogManager.createObject(window, data) - for(var i in data) { - if(i.startsWith('on')) { - eval('dialog.%1.connect(data[i])'.arg(i)) - } + for (var i in data) + { + if(i.startsWith('on')) eval('dialog.%1.connect(data[i])'.arg(i)); } dialog.open() return dialog } - function showText(data) { - return showDialog(data) - } - function getText(data) { - data['getText'] = true - return showText(data) - } + function showText(data) { return showDialog(data); } - Component.onCompleted: { - selected_wallet_name !== "" - openFirstLaunch() - loadTheme() + function getText(data) + { + data['getText'] = true; + return showText(data); } - Timer { + + Component.onCompleted: loadTheme() + + Timer + { interval: 5000 repeat: true running: false onTriggered: loadTheme() } - Gradient { + + Gradient + { id: globalGradient - GradientStop { + GradientStop + { position: .80 - color: App.DexTheme.contentColorTop + color: DexTheme.contentColorTop } - GradientStop { + GradientStop + { position: 1 color: 'transparent' } } - Shortcut { + Shortcut + { sequence: "Ctrl+R" onActivated: loadTheme() } - color: App.DexTheme.surfaceColor + color: DexTheme.surfaceColor radius: 0 border.width: 0 border.color: 'transparent' - } diff --git a/atomic_defi_design/Dex/Components/SetupPage.qml b/atomic_defi_design/Dex/Components/SetupPage.qml index c4e5cfd632..d96058cb4d 100644 --- a/atomic_defi_design/Dex/Components/SetupPage.qml +++ b/atomic_defi_design/Dex/Components/SetupPage.qml @@ -1,20 +1,24 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 + import "../Constants" import App 1.0 +import Dex.Themes 1.0 as Dex -Item { +Item +{ id: _control + property alias image: image property alias image_path: image.source property alias image_scale: image.scale property alias content: inner_space.sourceComponent property alias bottom_content: bottom_content.sourceComponent property double image_margin: 5 - property string backgroundColor: DexTheme.dexBoxBackgroundColor - property string borderColor: DexTheme.rectangleBorderColor - ColumnLayout { + + ColumnLayout + { id: window_layout anchors.horizontalCenter: parent.horizontalCenter @@ -22,7 +26,8 @@ Item { transformOrigin: Item.Center spacing: image_margin - DefaultImage { + DefaultImage + { id: image Layout.maximumWidth: 300 Layout.maximumHeight: Layout.maximumWidth * paintedHeight/paintedWidth @@ -31,7 +36,8 @@ Item { antialiasing: true } - Pane { + Pane + { id: pane leftPadding: 30 @@ -40,20 +46,20 @@ Item { bottomPadding: topPadding Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - background: DexRectangle { - color: _control.backgroundColor - border { - color: DexTheme.portfolioPieGradient ? 'transparent' : _control.borderColor - } - gradient: DexTheme.portfolioPieGradient ? app.globalGradient : undefined + background: DefaultRectangle + { + radius: 20 + color: Dex.CurrentTheme.floatingBackgroundColor } - contentChildren: Loader { + contentChildren: Loader + { id: inner_space } } - Loader { + Loader + { id: bottom_content Layout.alignment: Qt.AlignHCenter } diff --git a/atomic_defi_design/Dex/Screens/RecoverSeed.qml b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml similarity index 64% rename from atomic_defi_design/Dex/Screens/RecoverSeed.qml rename to atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml index 6c178353af..28817400ec 100644 --- a/atomic_defi_design/Dex/Screens/RecoverSeed.qml +++ b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml @@ -4,131 +4,140 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial -import "../Components" -import "../Constants" +import "../../Components" +import "../../Constants" import App 1.0 +import Dex.Themes 1.0 as Dex -SetupPage { +SetupPage +{ id: recover_seed - // Override - signal clickedBack() - signal postConfirmSuccess() - property int currentStep: 0 - - // Local - function reset() { - text_error = "" - } - function onClickedConfirm(password, seed, wallet_name) { - if (API.app.wallet_mgr.create(password, seed, wallet_name)) { - selected_wallet_name = wallet_name - postConfirmSuccess() - return true - } else { - text_error = qsTr("Failed to Import the wallet") - return false + property int currentStep: 0 + property string text_error + + signal backClicked() + signal postConfirmSuccess(string walletName) + + function reset() { text_error = ""; } + + function onClickedConfirm(password, seed, wallet_name) + { + if (API.app.wallet_mgr.create(password, seed, wallet_name)) + { + postConfirmSuccess(wallet_name); + return true; + } + else + { + text_error = qsTr("Failed to Import the wallet"); + return false; } } - property string text_error - image_scale: 0.7 - // Removed the image for now, no space - // image_path: General.image_path + "setup-wallet-restore-2.svg" - - content: ColumnLayout { + content: ColumnLayout + { spacing: Style.rowSpacing - RowLayout { + RowLayout + { Layout.fillWidth: true spacing: 10 - Qaterial.AppBarButton { + Qaterial.AppBarButton + { icon.source: Qaterial.Icons.arrowLeft - foregroundColor: DexTheme.foregroundColor + foregroundColor: Dex.CurrentTheme.foregroundColor Layout.alignment: Qt.AlignVCenter - onClicked: { - if (currentStep === 0) { - reset() - clickedBack() - } else { - if (text_error !== "") { - text_error = "" - } - currentStep-- + onClicked: + { + if (currentStep === 0) + { + reset(); + backClicked(); + } + else + { + if (text_error !== "") text_error = ""; + currentStep--; } } } - DexLabel { + DefaultText + { font: DexTypo.head6 Layout.fillWidth: true rightPadding: 20 wrapMode: Label.Wrap - text_value: if (currentStep === 0) { - qsTr("Import wallet - Setup") - } else if (currentStep === 1) { - qsTr("Import wallet - Choose password") - } + text_value: if (currentStep === 0) qsTr("Import wallet - Setup") + else if (currentStep === 1) qsTr("Import wallet - Choose password") Layout.alignment: Qt.AlignVCenter } } - function reset() { - recover_seed.reset() - input_wallet_name.reset() - _seedField.field.text = "" - _inputPassword.field.text = "" + function reset() + { + recover_seed.reset(); + input_wallet_name.reset(); + _seedField.field.text = ""; + _inputPassword.field.text = ""; } - function trySubmit() { - if (!submit_button.enabled) return + function trySubmit() + { + if (!submit_button.enabled) return; - text_error = General.checkIfWalletExists(input_wallet_name.field.text) - if (text_error !== "") return + text_error = General.checkIfWalletExists(input_wallet_name.field.text); + if (text_error !== "") return; - eula_modal.open() + eula_modal.open(); } - function tryPassLevel1() { - if (input_wallet_name.field.text == "") { - input_wallet_name.error = true - } + function tryPassLevel1() + { + if (input_wallet_name.field.text == "") input_wallet_name.error = true; - if (_seedField.isValid() && input_wallet_name.field.text !== "") { + if (_seedField.isValid() && input_wallet_name.field.text !== "") + { let checkWalletName = General.checkIfWalletExists(input_wallet_name.field.text) - if( checkWalletName === "" ) { - _seedField.error = false - _inputPassword.field.text = "" - _inputPasswordConfirm.field.text = "" - currentStep++ + if (checkWalletName === "" ) + { + _seedField.error = false; + _inputPassword.field.text = ""; + _inputPasswordConfirm.field.text = ""; + currentStep++; } - else { - input_wallet_name.error = true - text_error = checkWalletName + else + { + input_wallet_name.error = true; + text_error = checkWalletName; } - } else { - _seedField.error = true } + else _seedField.error = true; } - ModalLoader { + ModalLoader + { id: eula_modal - sourceComponent: EulaModal { + sourceComponent: EulaModal + { onConfirm: () => { if (onClickedConfirm(_inputPassword.field.text, _seedField.field.text, input_wallet_name.field.text)) - reset() + reset(); } } } - ColumnLayout { + ColumnLayout + { visible: currentStep === 0 Layout.preferredWidth: 450 spacing: Style.rowSpacing - DexAppTextField { + DexAppTextField + { id: input_wallet_name Layout.fillWidth: true Layout.preferredHeight: 50 @@ -141,64 +150,70 @@ SetupPage { field.placeholderText: qsTr("Wallet Name") field.onAccepted: tryPassLevel1() field.onTextChanged: text_error = "" - DexRectangle { + DefaultRectangle + { x: 5 height: 40 width: 60 radius: 20 - color: DexTheme.accentColor + color: Dex.CurrentTheme.accentColor anchors.verticalCenter: parent.verticalCenter - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.wallet - color: DexTheme.surfaceColor + color: Dex.CurrentTheme.foregroundColor } - } } - DexLabel { + DexLabel + { text: qsTr("Enter seed") font: DexTypo.body1 } - DexAppPasswordField { + DexAppPasswordField + { id: _seedField Layout.fillWidth: true Layout.preferredHeight: 50 leftIcon: Qaterial.Icons.fileKey field.placeholderText: qsTr('Enter seed') field.onAccepted: tryPassLevel1() - field.onTextChanged: { + field.onTextChanged: + { field.text = field.text.replace("\n", "") field.cursorPosition = field.length } - function isValid() { - if (!allow_custom_seed.checked) { - _seedField.field.text = _seedField.field.text.trim().toLowerCase() - } - _seedField.field.text = _seedField.field.text.replace(/[^\w\s]/gi, '') - return allow_custom_seed.checked || API.app.wallet_mgr.mnemonic_validate(_seedField.field.text) + function isValid() + { + if (!allow_custom_seed.checked) _seedField.field.text = _seedField.field.text.trim().toLowerCase(); + _seedField.field.text = _seedField.field.text.replace(/[^\w\s]/gi, ''); + return allow_custom_seed.checked || API.app.wallet_mgr.mnemonic_validate(_seedField.field.text); } } - DexLabel { + DefaultText { id: _seedError visible: _seedField.error text: qsTr("BIP39 seed validation failed, try again or select 'Allow custom seed'") - color: DexTheme.redColor + color: Dex.CurrentTheme.noColor Layout.preferredWidth: parent.width - 40 wrapMode: DexLabel.Wrap font: DexTypo.body2 } - DexCheckBox { + DefaultCheckBox + { id: allow_custom_seed text: qsTr("Allow custom seed") - onToggled: { - if (allow_custom_seed.checked) { + onToggled: + { + if (allow_custom_seed.checked) + { let dialog = app.getText({ title: qsTr("Allow custom seed"), text: qsTr("Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).

To confirm you understand the risk and know what you are doing, type 'I understand' in the box below."), @@ -209,33 +224,37 @@ SetupPage { }, yesButtonText: qsTr("Enable"), onAccepted: function() { - allow_custom_seed.checked = true + allow_custom_seed.checked = true; dialog.close() }, onRejected: function() { - allow_custom_seed.checked = false + allow_custom_seed.checked = false; } }) - } else { - allow_custom_seed.checked = false } + else allow_custom_seed.checked = false; } } - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - RowLayout { + RowLayout + { Layout.preferredWidth: 400 spacing: Style.buttonSpacing - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - DexAppButton { + + DexAppButton + { id: nextButton enabled: input_wallet_name.field.text !== "" && _seedField.field.text !== "" onClicked: tryPassLevel1() @@ -244,19 +263,21 @@ SetupPage { Layout.preferredWidth: _nextRow.implicitWidth + 40 Layout.preferredHeight: 45 label.color: 'transparent' - Row { + Row + { id: _nextRow anchors.centerIn: parent spacing: 10 - DexLabel { + DexLabel + { text: qsTr("Next") font: DexTypo.button - color: nextButton.foregroundColor anchors.verticalCenter: parent.verticalCenter } - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.verticalCenter: parent.verticalCenter - color: nextButton.foregroundColor + color: Dex.CurrentTheme.foregroundColor source: Qaterial.Icons.arrowRight iconSize: 14 } @@ -264,27 +285,31 @@ SetupPage { } } - DefaultText { + DefaultText + { text_value: text_error - color: Style.colorRed + color: Dex.CurrentTheme.noColor visible: text !== '' } } - ColumnLayout { + ColumnLayout + { visible: currentStep === 1 Layout.preferredWidth: 460 Layout.rightMargin: 5 spacing: Style.rowSpacing - DexAppPasswordField { + DexAppPasswordField + { id: _inputPassword Layout.fillWidth: true Layout.preferredHeight: 50 field.onAccepted: trySubmit() } - DexKeyChecker { + DexKeyChecker + { id: _keyChecker double_validation: true field: _inputPassword.field @@ -292,60 +317,63 @@ SetupPage { Layout.leftMargin: 20 } - DexAppPasswordField { + DexAppPasswordField + { id: _inputPasswordConfirm Layout.fillWidth: true Layout.preferredHeight: 50 field.onAccepted: trySubmit() } - Item { - Layout.fillWidth: true - } + Item { Layout.fillWidth: true } - RowLayout { + RowLayout + { Layout.preferredWidth: 400 - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - DexAppButton { + DexAppButton + { id: submit_button enabled: _keyChecker.isValid() opacity: enabled ? 1 : .4 - onClicked: { - trySubmit() - } + onClicked: trySubmit() radius: 20 Layout.preferredWidth: _nextRow2.implicitWidth + 40 Layout.preferredHeight: 45 label.color: 'transparent' - Row { + Row + { id: _nextRow2 anchors.centerIn: parent spacing: 10 - DexLabel { + DefaultText + { text: qsTr("Continue") font: DexTypo.button - color: submit_button.foregroundColor anchors.verticalCenter: parent.verticalCenter } - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.verticalCenter: parent.verticalCenter source: Qaterial.Icons.arrowRight - color: submit_button.foregroundColor + color: Dex.CurrentTheme.foregroundColor iconSize: 14 } } } } - DefaultText { + DefaultText + { text_value: text_error - color: Style.colorRed + color: Dex.CurrentTheme.noColor visible: text !== '' } } } -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Screens/InitialLoading.qml b/atomic_defi_design/Dex/Screens/Startup/Logging.qml similarity index 66% rename from atomic_defi_design/Dex/Screens/InitialLoading.qml rename to atomic_defi_design/Dex/Screens/Startup/Logging.qml index 0fc6c4106c..bfa5a29894 100644 --- a/atomic_defi_design/Dex/Screens/InitialLoading.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Logging.qml @@ -2,33 +2,24 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 -import "../Components" -import "../Constants" +import "../../Components" import App 1.0 -import "../Wallet" -import "../Exchange" -import "../Sidebar" import Dex.Themes 1.0 as Dex -SetupPage { - // Override - property - var onLoaded: () => {} +SetupPage +{ + signal logged() readonly property string current_status: API.app.wallet_mgr.initial_loading_status - onCurrent_statusChanged: { - if (current_status === "enabling_coins") - onLoaded() - } + onCurrent_statusChanged: if (current_status === "enabling_coins") logged() image_path: Dex.CurrentTheme.bigLogoPath image_margin: 30 - backgroundColor: 'transparent' - borderColor: 'transparent' - content: ColumnLayout { - - DefaultBusyIndicator { + content: ColumnLayout + { + DefaultBusyIndicator + { Layout.preferredHeight: 100 Layout.preferredWidth: 100 Layout.alignment: Qt.AlignHCenter @@ -37,12 +28,14 @@ SetupPage { scale: 0.8 } - DefaultText { + DefaultText + { text_value: qsTr("Loading, please wait") Layout.bottomMargin: 10 } - DefaultText { + DefaultText + { Layout.alignment: Qt.AlignHCenter text_value: (current_status === "initializing_mm2" ? qsTr("Initializing MM2") : current_status === "enabling_coins" ? qsTr("Enabling assets") : qsTr("Getting ready")) + "..." diff --git a/atomic_defi_design/Dex/Screens/Login.qml b/atomic_defi_design/Dex/Screens/Startup/Login.qml similarity index 67% rename from atomic_defi_design/Dex/Screens/Login.qml rename to atomic_defi_design/Dex/Screens/Startup/Login.qml index 820997597e..8b5efb553e 100644 --- a/atomic_defi_design/Dex/Screens/Login.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Login.qml @@ -4,70 +4,80 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial -import "../Components" -import "../Constants" +import "../../Components" +import "../../Constants" import App 1.0 +import Dex.Themes 1.0 as Dex -SetupPage { +SetupPage +{ id: login - // Override - signal clickedBack() - signal postLoginSuccess() + property string text_error + property string walletName - // Local - function reset() { - text_error = "" - } + signal backClicked() + signal loginSucceeded() + + function reset() { text_error = "" } - function onClickedLogin(password) { - if (API.app.wallet_mgr.login(password, selected_wallet_name)) { - console.log("Success: Login") - app.currentWalletName = selected_wallet_name - postLoginSuccess() - return true - } else { - console.log("Failed: Login") - text_error = qsTr("Incorrect Password") - return false + function onClickedLogin(password) + { + if (API.app.wallet_mgr.login(password, walletName)) + { + console.info("Success: Login"); + app.currentWalletName = walletName; + loginSucceeded(); + return true; + } + else + { + console.info("Failed: Login"); + text_error = qsTr("Incorrect Password"); + return false; } } - property string text_error image_scale: 0.7 image_path: General.image_path + "setup-logs.svg" - content: ColumnLayout { + content: ColumnLayout + { spacing: Style.rowSpacing - function reset() { + function reset() + { login.reset() input_password.reset() } - function trySubmit() { + function trySubmit() + { if (!submit_button.enabled) return - if (onClickedLogin(input_password.field.text)) - reset() + if (onClickedLogin(input_password.field.text)) reset() } width: 400 - RowLayout { + RowLayout + { Layout.fillWidth: true spacing: 10 - Qaterial.AppBarButton { + Qaterial.AppBarButton + { icon.source: Qaterial.Icons.arrowLeft Layout.alignment: Qt.AlignVCenter - onClicked: { + onClicked: + { reset() - onClickedBack() + backClicked() } } - DexLabel { + DefaultText + { font: DexTypo.head6 text_value: qsTr("Login") Layout.alignment: Qt.AlignVCenter @@ -75,46 +85,50 @@ SetupPage { } - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 5 } - DexAppTextField { + DexAppTextField + { Layout.fillWidth: true Layout.preferredHeight: 50 background.border.width: 1 background.radius: 25 enabled: false opacity: enabled ? 1 : .5 - background.border.color: field.focus ? DexTheme.accentColor : Style.colorBorder + background.border.color: Dex.CurrentTheme.accentColor field.font: DexTypo.head6 field.horizontalAlignment: Qt.AlignLeft field.leftPadding: 75 - field.text: selected_wallet_name + field.text: walletName - DexRectangle { + DefaultRectangle + { x: 5 height: 40 width: 60 radius: 20 - color: DexTheme.accentColor + color: Dex.CurrentTheme.accentColor anchors.verticalCenter: parent.verticalCenter - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.account - color: DexTheme.surfaceColor + color: Dex.CurrentTheme.foregroundColor } } } - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 5 opacity: .8 - } DexAppTextField { @@ -130,38 +144,40 @@ SetupPage { field.leftPadding: 75 field.placeholderText: qsTr("Type password") field.onAccepted: trySubmit() - DexRectangle { + DexRectangle + { x: 5 height: 40 width: 60 radius: 20 color: DexTheme.accentColor anchors.verticalCenter: parent.verticalCenter - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.keyVariant color: DexTheme.surfaceColor } - } - Qaterial.AppBarButton { + Qaterial.AppBarButton + { opacity: .8 - icon { + icon + { source: _inputPassword.field.echoMode === TextField.Password ? Qaterial.Icons.eyeOutline : Qaterial.Icons.eyeOffOutline color: DexTheme.accentColor } - anchors { + anchors + { verticalCenter: parent.verticalCenter right: parent.right rightMargin: 10 } - onClicked: { - if (_inputPassword.field.echoMode === TextField.Password) { - _inputPassword.field.echoMode = TextField.Normal - } else { - _inputPassword.field.echoMode = TextField.Password - } + onClicked: + { + if (_inputPassword.field.echoMode === TextField.Password) _inputPassword.field.echoMode = TextField.Normal + else _inputPassword.field.echoMode = TextField.Password } } } @@ -186,14 +202,15 @@ SetupPage { Layout.preferredHeight: 10 } - DexButton { + DefaultButton { id: _back text: qsTr("Back") visible: false } - DexAppButton { + DexAppButton + { id: submit_button text: qsTr("Login") enabled: input_password.isValid() @@ -202,17 +219,23 @@ SetupPage { Layout.preferredWidth: _nextRow.implicitWidth + 40 Layout.preferredHeight: 45 label.color: 'transparent' - Row { + + Row + { id: _nextRow + anchors.centerIn: parent spacing: 10 opacity: submit_button.enabled ? 1 : .6 - DexLabel { + + DexLabel + { text: qsTr("Connect") font: DexTypo.button anchors.verticalCenter: parent.verticalCenter } - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.verticalCenter: parent.verticalCenter source: Qaterial.Icons.arrowRight iconSize: 14 @@ -221,9 +244,10 @@ SetupPage { } } - DefaultText { + DefaultText + { text_value: text_error - color: Style.colorRed + color: Dex.CurrentTheme.noColor visible: text !== '' } } diff --git a/atomic_defi_design/Dex/Screens/Startup/Main.qml b/atomic_defi_design/Dex/Screens/Startup/Main.qml new file mode 100644 index 0000000000..590310389b --- /dev/null +++ b/atomic_defi_design/Dex/Screens/Startup/Main.qml @@ -0,0 +1,91 @@ +import QtQuick 2.15 + +Item +{ + id: root + + enum StartupPage + { + WalletsView, + NewWallet, + ImportWallet, + Login, + Logging + } + + property var currentPage + + property var _availablePages: [ _walletsView, _newWallet, _importWallet, _login, _logging ] + property string _selectedWalletName + + signal logged(string walletName) + + Component.onCompleted: _selectedWalletName.length > 0 ? currentPage = Main.StartupPage.Login : currentPage = Main.StartupPage.WalletsView + + Loader + { + id: _pageLoader + anchors.fill: parent + sourceComponent: _availablePages[currentPage] + } + + Component + { + id: _walletsView + WalletsView + { + onNewWalletClicked: currentPage = Main.StartupPage.NewWallet + onImportWalletClicked: currentPage = Main.StartupPage.ImportWallet + onLogging: currentPage = Main.StartupPage.Logging + onSelectedWalletChanged: _selectedWalletName = selectedWallet + } + } + + Component + { + id: _newWallet + NewWallet + { + onWalletCreated: + { + _selectedWalletName = walletName; + currentPage = Main.StartupPage.Login; + } + onBackClicked: currentPage = Main.StartupPage.WalletsView + } + } + + Component + { + id: _importWallet + ImportWallet + { + onBackClicked: currentPage = Main.StartupPage.WalletsView + onPostConfirmSuccess: + { + _selectedWalletName = walletName; + currentPage = Main.StartupPage.Logging; + } + } + } + + Component + { + id: _login + Login + { + onBackClicked: currentPage = Main.StartupPage.WalletsView + onLoginSucceeded: currentPage = Main.StartupPage.Logging + walletName: _selectedWalletName + } + } + + Component + { + id: _logging + Logging + { + onLogged: root.logged(_selectedWalletName) + } + } +} diff --git a/atomic_defi_design/Dex/Screens/NewUser.qml b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml similarity index 71% rename from atomic_defi_design/Dex/Screens/NewUser.qml rename to atomic_defi_design/Dex/Screens/Startup/NewWallet.qml index d993c89ddf..59cb2fce15 100644 --- a/atomic_defi_design/Dex/Screens/NewUser.qml +++ b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml @@ -4,16 +4,18 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial -import "../Components" -import "../Constants" +import "../../Components" +import "../../Constants" import App 1.0 +import Dex.Themes 1.0 as Dex -SetupPage { +SetupPage +{ id: new_user // Override - signal clickedBack() - signal postCreateSuccess() + signal backClicked() + signal walletCreated(string walletName) property string current_mnemonic property string text_error @@ -24,53 +26,51 @@ SetupPage { property int current_word_idx: 0 property int guess_count: 1 - Component.onCompleted: onOpened() - - function onOpened() { - current_mnemonic = API.app.get_mnemonic() - } + function onOpened() { current_mnemonic = API.app.get_mnemonic() } - function getWords() { - return current_mnemonic.split(" ") - } + function getWords() { return current_mnemonic.split(" ") } - function setRandomGuessWord() { + function setRandomGuessWord() + { const prev_idx = current_word_idx while (current_word_idx === prev_idx) current_word_idx = General.getRandomInt(0, getWords().length - 1) } - function validGuessField(field) { + function validGuessField(field) + { return field.acceptableInput } - function submitGuess(field) { - if (validGuessField(field)) { + function submitGuess(field) + { + if (validGuessField(field)) + { // Check if it's correct - if (field.text === getWords()[current_word_idx]) { - if (isFinalGuess()) { - return [true, true] - } else { - ++guess_count - setRandomGuessWord() + if (field.text === getWords()[current_word_idx]) + { + if (isFinalGuess()) + { + return [true, true]; } - field.text = "" - guess_text_error = "" - return [true, false] - } else { - guess_text_error = qsTr("Wrong word, please check again") + else + { + ++guess_count; + setRandomGuessWord(); + } + field.text = ""; + guess_text_error = ""; + return [true, false]; } + else guess_text_error = qsTr("Wrong word, please check again"); } - - return [false, false] + return [false, false]; } - function isFinalGuess() { - return guess_count === 3 - } + function isFinalGuess() { return guess_count === 3 } - // Local - function reset() { + function reset() + { current_mnemonic = "" text_error = "" @@ -79,33 +79,31 @@ SetupPage { guess_count = 1 } - function shuffle(array) { + function shuffle(array) + { var currentIndex = array.length, randomIndex; // While there remain elements to shuffle... - while (0 !== currentIndex) { + while (0 !== currentIndex) + { // Pick a remaining element... randomIndex = Math.floor(Math.random() * currentIndex); currentIndex--; // And swap it with the current element. - [array[currentIndex], array[randomIndex]] = [ - array[randomIndex], array[currentIndex] - ]; + [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]]; } return array; } - function getRandom4x(list, keep) { - + function getRandom4x(list, keep) + { // remove keep const index = list.indexOf(keep); - if (index > -1) { - list.splice(index, 1); - } + if (index > -1) list.splice(index, 1); // randomlise let randomList = shuffle(list) @@ -120,45 +118,54 @@ SetupPage { return finalList } - function onClickedCreate(password, generated_seed, wallet_name) { - if (API.app.wallet_mgr.create(password, generated_seed, wallet_name)) { - selected_wallet_name = wallet_name - postCreateSuccess() + function onClickedCreate(password, generated_seed, wallet_name) + { + if (API.app.wallet_mgr.create(password, generated_seed, wallet_name)) + { + walletCreated(wallet_name); return true - } else { + } + else + { text_error = qsTr("Failed to create a wallet") return false } } image_scale: 0.7 - // Removed the image for now, no space - //image_path: General.image_path + (form_is_filled ? "settings-seed.svg" : "setup-welcome-wallet.svg") - content: ColumnLayout { + content: ColumnLayout + { spacing: Style.rowSpacing - RowLayout { + RowLayout + { Layout.fillWidth: true spacing: 10 - Qaterial.AppBarButton { + Qaterial.AppBarButton + { icon.source: Qaterial.Icons.arrowLeft - foregroundColor: DexTheme.foregroundColor + foregroundColor: Dex.CurrentTheme.foregroundColor Layout.alignment: Qt.AlignVCenter - onClicked: { - if (currentStep === 0) { + onClicked: + { + if (currentStep === 0) + { reset() - clickedBack() - } else { - if (currentStep == 2) { + backClicked(); + } + else + { + if (currentStep == 2) + { currentStep = 0 _inputPassword.field.text = "" _inputPasswordConfirm.field.text = "" - } else { + } + else + { input_seed_word.field.text = "" currentStep-- } - - } } } @@ -177,11 +184,10 @@ SetupPage { } - Item { - Layout.fillWidth: true - } + Item { Layout.fillWidth: true } - function reset() { + function reset() + { new_user.reset() input_wallet_name.reset() _inputPassword.field.text = "" @@ -189,7 +195,8 @@ SetupPage { input_generated_seed.text = "" } - function completeForm() { + function completeForm() + { if (!continue_button.enabled) return text_error = General.checkIfWalletExists(input_wallet_name.field.text) @@ -203,14 +210,20 @@ SetupPage { form_is_filled = true } - function tryGuess() { + function tryGuess() + { // Open EULA if it's the final one let sub = submitGuess(input_seed_word.field) - if (sub[0] == true && sub[1] == true) { + if (sub[0] == true && sub[1] == true) + { currentStep++ - } else if (sub[0] == true && sub[1] == false) { + } + else if (sub[0] == true && sub[1] == false) + { input_seed_word.field.text = "" - } else { + } + else + { input_seed_word.field.text = "" input_seed_word.error = true setRandomGuessWord() @@ -218,9 +231,11 @@ SetupPage { } } - ModalLoader { + ModalLoader + { id: eula_modal - sourceComponent: EulaModal { + sourceComponent: EulaModal + { onConfirm: () => { if (onClickedCreate(_inputPassword.field.text, input_generated_seed.text, @@ -229,12 +244,14 @@ SetupPage { } } - ColumnLayout { + ColumnLayout + { visible: currentStep === 0 Layout.preferredWidth: 450 spacing: Style.rowSpacing - DexAppTextField { + DexAppTextField + { id: input_wallet_name Layout.fillWidth: true Layout.preferredHeight: 50 @@ -248,30 +265,34 @@ SetupPage { field.placeholderText: "Wallet Name" field.onTextChanged: text_error = "" - DexRectangle { + DexRectangle + { x: 5 height: 40 width: 60 radius: 20 - color: DexTheme.accentColor + color: Dex.CurrentTheme.accentColor anchors.verticalCenter: parent.verticalCenter - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.wallet - color: DexTheme.surfaceColor + color: Dex.CurrentTheme.foregroundColor } - } } - DexRectangle { + + DefaultRectangle + { Layout.topMargin: 10 Layout.bottomMargin: Layout.topMargin Layout.fillWidth: true - color: DexTheme.redColor + color: Dex.CurrentTheme.noColor height: warning_texts.height + 20 - Column { + Column + { id: warning_texts anchors.centerIn: parent @@ -279,41 +300,47 @@ SetupPage { spacing: 10 - DexLabel { + DefaultText + { width: parent.width - 40 horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter text_value: qsTr("Important: Back up your seed phrase before proceeding!") - color: Style.colorWhite4 } - DexLabel { + DefaultText { width: parent.width - 40 horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter text_value: qsTr("We recommend storing it offline.") font.pixelSize: Style.textSizeSmall4 - color: Style.colorWhite4 } } } - TextField { + TextField + { id: input_generated_seed visible: false text: current_mnemonic } - Column { + + Column + { Layout.fillWidth: true spacing: 5 - RowLayout { + RowLayout + { width: parent.width - DexLabel { + DefaultText + { text: qsTr("Generated Seed") font: DexTypo.body1 Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter } - Qaterial.AppBarButton { + + Qaterial.AppBarButton + { icon.source: Qaterial.Icons.contentCopy Layout.alignment: Qt.AlignVCenter onClicked: { @@ -323,25 +350,29 @@ SetupPage { } } } - Item { + Item + { width: parent.width height: _insideFlow.height - Grid { + Grid + { id: _insideFlow width: parent.width spacing: 10 - Repeater { + Repeater + { model: current_mnemonic.split(" ") - delegate: DexRectangle { + delegate: DefaultRectangle + { width: (_insideFlow.width - 30) / 4 height: _insideLabel.implicitHeight + 15 - color: DexTheme.accentColor + color: Dex.CurrentTheme.innerBackgroundColor opacity: .8 - DexLabel { + DefaultText + { id: _insideLabel text: (index + 1) + ". " + modelData font: DexTypo.body2 - color: DexTheme.backgroundColor anchors.centerIn: parent } } @@ -350,25 +381,39 @@ SetupPage { } } - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - RowLayout { + RowLayout + { Layout.preferredWidth: 400 spacing: Style.buttonSpacing - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - DexAppButton { + + DexAppButton + { id: nextButton + enabled: input_wallet_name.field.text !== "" - onClicked: { + radius: 20 + opacity: enabled ? 1 : .4 + Layout.preferredWidth: _nextRow.implicitWidth + 40 + Layout.preferredHeight: 45 + label.color: 'transparent' + + onClicked: + { text_error = General.checkIfWalletExists(input_wallet_name.field.text) - if (text_error !== "") { + if (text_error !== "") + { input_wallet_name.error = true return } @@ -378,24 +423,23 @@ SetupPage { guess_count = 1 setRandomGuessWord() } - radius: 20 - opacity: enabled ? 1 : .4 - Layout.preferredWidth: _nextRow.implicitWidth + 40 - Layout.preferredHeight: 45 - label.color: 'transparent' - Row { + + Row + { id: _nextRow anchors.centerIn: parent spacing: 10 - DexLabel { + DefaultText + { text: qsTr("Next") font: DexTypo.button - color: nextButton.foregroundColor + color: Dex.CurrentTheme.foregroundColor anchors.verticalCenter: parent.verticalCenter } - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.verticalCenter: parent.verticalCenter - color: nextButton.foregroundColor + color: Dex.CurrentTheme.foregroundColor source: Qaterial.Icons.arrowRight iconSize: 14 } @@ -403,25 +447,29 @@ SetupPage { } } - DefaultText { + DefaultText + { text_value: text_error - color: DexTheme.redColor + color: Dex.CurrentTheme.noColor visible: text !== '' } } // Second page, write the seed word - ColumnLayout { + ColumnLayout + { visible: currentStep === 1 - FloatingBackground { + FloatingBackground + { Layout.topMargin: 10 Layout.bottomMargin: Layout.topMargin Layout.fillWidth: true height: 140 - Column { + Column + { id: warning_texts_2 anchors.centerIn: parent @@ -429,42 +477,49 @@ SetupPage { spacing: 5 - DexLabel { + DefaultText + { width: parent.width - 40 anchors.horizontalCenter: parent.horizontalCenter - font { - bold: true - } + font { bold: true } text_value: qsTr("Let's double check your seed phrase") } - DexLabel { + + DefaultText + { width: parent.width - 40 anchors.horizontalCenter: parent.horizontalCenter text_value: qsTr("Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want.") font.pixelSize: Style.textSizeSmall4 - color: DexTheme.foregroundColorLightColor2 + color: Dex.CurrentTheme.foregroundColor } } } - Column { + Column + { Layout.fillWidth: true spacing: 5 - Item { + Item + { width: parent.width - 10 height: _insideFlow2.height - Grid { + Grid + { id: _insideFlow2 width: parent.width spacing: 10 horizontalItemAlignment: Grid.AlignHCenter - Repeater { + Repeater + { id: mmo model: getRandom4x(current_mnemonic.split(" "), getWords()[current_word_idx]) - delegate: DexAppButton { + delegate: DexAppButton + { width: (_insideFlow2.width - 30) / 4 text: modelData ?? "" - onClicked: { + onClicked: + { input_seed_word.field.text = modelData tryGuess() } @@ -474,12 +529,14 @@ SetupPage { } } - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 5 } - DexAppTextField { + DexAppTextField + { id: input_seed_word Layout.fillWidth: true Layout.preferredHeight: 50 @@ -490,42 +547,48 @@ SetupPage { field.horizontalAlignment: Qt.AlignLeft field.leftPadding: 75 field.placeholderText: qsTr("Enter the %n. word", "", current_word_idx + 1) - field.validator: RegExpValidator { - regExp: /[a-z]+/ - } + field.validator: RegExpValidator { regExp: /[a-z]+/ } field.onAccepted: tryGuess() - DexRectangle { + DefaultRectangle + { x: 5 height: 40 width: 60 radius: 20 - color: DexTheme.accentColor + color: Dex.CurrentTheme.accentColor anchors.verticalCenter: parent.verticalCenter - DexLabel { + + DefaultText + { anchors.centerIn: parent font: DexTypo.head6 - color: DexTheme.backgroundColor + color: Dex.CurrentTheme.backgroundColor text: current_word_idx + 1 } } } - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - RowLayout { + RowLayout + { Layout.preferredWidth: 400 spacing: Style.buttonSpacing - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - DexAppButton { + + DexAppButton + { id: checkForNext enabled: validGuessField(input_seed_word.field) opacity: enabled ? 1 : .4 @@ -534,19 +597,23 @@ SetupPage { Layout.preferredWidth: _nextRow3.implicitWidth + 40 Layout.preferredHeight: 45 label.color: 'transparent' - Row { + Row + { id: _nextRow3 anchors.centerIn: parent spacing: 10 - DexLabel { + DefaultText + { text: qsTr("Check") font: DexTypo.button - color: checkForNext.foregroundColor + color: Dex.CurrentTheme.foregroundColor anchors.verticalCenter: parent.verticalCenter } - Qaterial.ColorIcon { + + Qaterial.ColorIcon + { anchors.verticalCenter: parent.verticalCenter - color: checkForNext.foregroundColor + color: Dex.CurrentTheme.foregroundColor source: Qaterial.Icons.check iconSize: 14 } @@ -554,27 +621,31 @@ SetupPage { } } - DefaultText { + DefaultText + { text_value: guess_text_error - color: DexTheme.redColor + color: Dex.CurrentTheme.noColor visible: input_seed_word.error DexVisibleBehavior on visible {} } } - ColumnLayout { + ColumnLayout + { visible: currentStep === 2 Layout.preferredWidth: 450 spacing: Style.rowSpacing - DexAppPasswordField { + DexAppPasswordField + { id: _inputPassword Layout.fillWidth: true Layout.preferredHeight: 50 field.onAccepted: _keyChecker.isValid() ? eula_modal.open() : undefined } - DexKeyChecker { + DexKeyChecker + { id: _keyChecker field: _inputPassword.field double_validation: true @@ -582,59 +653,67 @@ SetupPage { match_password: _inputPasswordConfirm.field.text } - DexAppPasswordField { + DexAppPasswordField + { id: _inputPasswordConfirm Layout.fillWidth: true Layout.preferredHeight: 50 field.onAccepted: _keyChecker.isValid() ? eula_modal.open() : undefined } - Item { - Layout.fillWidth: true - } + Item { Layout.fillWidth: true } - RowLayout { + RowLayout + { Layout.preferredWidth: 400 - Item { + Item + { Layout.fillWidth: true Layout.preferredHeight: 10 } - DexAppButton { + DexAppButton + { id: finalRegisterButton enabled: _keyChecker.isValid() opacity: enabled ? 1 : .4 - onClicked: eula_modal.open() radius: 20 Layout.preferredWidth: _nextRow2.implicitWidth + 40 Layout.preferredHeight: 45 label.color: 'transparent' - Row { + onClicked: eula_modal.open() + + Row + { id: _nextRow2 anchors.centerIn: parent spacing: 10 - DexLabel { + DefaultText + { text: qsTr("Continue") font: DexTypo.button - color: finalRegisterButton.foregroundColor anchors.verticalCenter: parent.verticalCenter } - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.verticalCenter: parent.verticalCenter source: Qaterial.Icons.arrowRight - color: finalRegisterButton.foregroundColor + color: Dex.CurrentTheme.foregroundColor iconSize: 14 } } } } - DefaultText { + DefaultText + { text_value: text_error - color: DexTheme.redColor + color: Dex.CurrentTheme.noColor visible: text !== '' } } } -} \ No newline at end of file + + Component.onCompleted: onOpened() +} diff --git a/atomic_defi_design/Dex/Screens/FirstLaunch.qml b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml similarity index 69% rename from atomic_defi_design/Dex/Screens/FirstLaunch.qml rename to atomic_defi_design/Dex/Screens/Startup/WalletsView.qml index 538f70ae41..148b0b50a2 100644 --- a/atomic_defi_design/Dex/Screens/FirstLaunch.qml +++ b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml @@ -7,164 +7,73 @@ import QtQuick.Window 2.15 import Qaterial 1.0 as Qaterial -import "../Components" -import "../Constants" +import "../../Components" +import "../../Constants" +import "../../Settings" import App 1.0 -import "../Settings" import Dex.Themes 1.0 as Dex -SetupPage { +SetupPage +{ // Override id: _setup - property - var onClickedNewUser: () => {} - property - var onClickedRecoverSeed: () => {} - property - var onClickedWallet: () => {} + + property var wallets: API.app.wallet_mgr.get_wallets() + property string selectedWallet + + signal newWalletClicked() + signal importWalletClicked(); + signal logging(); // Local - function updateWallets() { - wallets = API.app.wallet_mgr.get_wallets() - } + function updateWallets() { wallets = API.app.wallet_mgr.get_wallets() } - function onClickedLogin(password) { - if (API.app.wallet_mgr.login(password, selected_wallet_name)) { + function onClickedLogin(password) + { + if (API.app.wallet_mgr.login(password, selectedWallet)) + { console.log("Success: Login") - app.currentWalletName = selected_wallet_name + app.currentWalletName = selectedWallet return true - } else { + } + else + { console.log("Failed: Login") return false } } - property - var wallets: ([]) image_path: (bottomDrawer.y === 0 && bottomDrawer.visible) ? "" : Dex.CurrentTheme.bigLogoPath image_margin: 30 - Drawer { - id: bottomDrawer - width: parent.width - height: parent.height - edge: Qt.BottomEdge - dim: false // - modal: false - background: Item { - DexRectangle { - id: _drawerBG - anchors.fill: parent - radius: 0 - border.width: 0 - color: 'black' - opacity: .8 - } - Column { - anchors.bottom: parent.bottom - anchors.bottomMargin: 250 - anchors.horizontalCenter: parent.horizontalCenter - spacing: 20 - Image { - /*width: 200 - height: 130*/ - source: Dex.CurrentTheme.bigLogoPath - anchors.horizontalCenter: parent.horizontalCenter - } - DexLabel { - anchors.horizontalCenter: parent.horizontalCenter - text: "%1 wallet".arg(selected_wallet_name) - color: DexTheme.foregroundColorLightColor4 - font: DexTypo.body1 - topPadding: 10 - } - Connections { - target: bottomDrawer - function onVisibleChanged() { - _inputPassword.field.text = "" - } - } - - DexAppPasswordField { - id: _inputPassword - height: 50 - width: 300 - anchors.horizontalCenter: parent.horizontalCenter - field.onAccepted: { - if (_keyChecker.isValid()) { - if (onClickedLogin(field.text)) { - bottomDrawer.close() - app.current_page = idx_initial_loading - } else { - error = true - } - } else { - error = true - } - } - } - - DexKeyChecker { - id: _passwordChecker - visible: false - field: _inputPassword.field - } - DexButton { - radius: width - width: 150 - text: qsTr("connect") - opacity: enabled ? 1 : 0.6 - enabled: _passwordChecker.isValid() - anchors.horizontalCenter: parent.horizontalCenter - onClicked: { - _inputPassword.field.accepted() - } - } - - DexKeyChecker { - id: _keyChecker - field: _inputPassword.field - visible: false - } - } - Qaterial.AppBarButton { - anchors.bottom: parent.bottom - anchors.bottomMargin: 60 - anchors.horizontalCenter: parent.horizontalCenter - width: 80 - icon.width: 40 - icon.height: 40 - icon.source: Qaterial.Icons.close - onClicked: bottomDrawer.close() - } - } - - } - content: ColumnLayout { + content: ColumnLayout + { id: content_column width: 400 spacing: Style.rowSpacing opacity: (bottomDrawer.y === 0 && bottomDrawer.visible) ? .3 : 1 - RowLayout { + RowLayout + { Layout.fillWidth: true - DexLabel { + DexLabel + { font: DexTypo.head6 text_value: qsTr("Welcome") Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter } - DexLanguage { + DexLanguage + { Layout.preferredWidth: 55 Layout.alignment: Qt.AlignVCenter } } - Item { - Layout.fillWidth: true - } + Item { Layout.fillWidth: true } - DexAppButton { + DefaultButton + { Layout.fillWidth: true horizontalAlignment: Qt.AlignLeft Layout.minimumWidth: 350 @@ -172,103 +81,125 @@ SetupPage { text: qsTr("New Wallet") Layout.preferredHeight: 50 radius: 8 - //backgroundColor: DexTheme.accentColor - onClicked: onClickedNewUser() + onClicked: newWalletClicked() } - DexAppButton { + DefaultButton + { text: qsTr("Import wallet") horizontalAlignment: Qt.AlignLeft - //backgroundColor: DexTheme.accentColor leftPadding: 20 radius: 8 Layout.fillWidth: true Layout.preferredHeight: 50 - onClicked: onClickedRecoverSeed() + onClicked: importWalletClicked() } // Wallets - ColumnLayout { + ColumnLayout + { spacing: Style.rowSpacing visible: wallets.length > 0 - DexLabel { + DexLabel + { text_value: qsTr("My Wallets") font.pixelSize: Style.textSizeSmall2 Layout.alignment: Qt.AlignHCenter } - Item { + + Item + { height: 15 Layout.fillWidth: true - Rectangle { + Rectangle + { height: 2 width: parent.width - color: DexTheme.accentColor - Rectangle { + color: Dex.CurrentTheme.accentColor + Rectangle + { anchors.centerIn: parent width: 9 height: 9 radius: 6 - color: DexTheme.accentColor + color: Dex.CurrentTheme.accentColor } } } - DexRectangle { + DexRectangle + { id: bg - width: content_column.width + readonly property int row_height: 40 + + width: content_column.width Layout.minimumHeight: row_height Layout.preferredHeight: row_height * Math.min(wallets.length, 3) color: "transparent" - DefaultListView { + + + DefaultListView + { id: list implicitHeight: bg.Layout.preferredHeight model: wallets - delegate: ClipRRect { + delegate: ClipRRect + { radius: 5 width: bg.width height: bg.row_height - DexRectangle { + DefaultRectangle + { color: "transparent" border.width: 0 - anchors.fill: parent - Rectangle { + Rectangle + { height: parent.height width: mouse_area.containsMouse ? parent.width : 0 opacity: .4 - Behavior on width { - NumberAnimation { + color: Dex.CurrentTheme.buttonColorHovered + visible: mouse_area.containsMouse + + Behavior on width + { + NumberAnimation + { duration: 250 } } - color: DexTheme.buttonColorHovered - visible: mouse_area.containsMouse } - DefaultMouseArea { + + DefaultMouseArea + { id: mouse_area anchors.fill: parent hoverEnabled: true - onClicked: { - selected_wallet_name = model.modelData + onClicked: + { + selectedWallet = model.modelData bottomDrawer.open() } } - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.verticalCenter: parent.verticalCenter - color: DexTheme.foregroundColor + color: Dex.CurrentTheme.foregroundColor source: Qaterial.Icons.account iconSize: 16 x: 20 } - DefaultText { + + DefaultText + { anchors.left: parent.left anchors.leftMargin: 45 @@ -277,23 +208,29 @@ SetupPage { font.pixelSize: Style.textSizeSmall2 } } - Item { + + Item + { anchors.right: parent.right anchors.margins: 10 height: parent.height width: 30 - Qaterial.ColorIcon { + Qaterial.ColorIcon + { source: Qaterial.Icons.delete_ iconSize: 18 anchors.centerIn: parent opacity: .8 - color: _deleteArea.containsMouse ? DexTheme.redColor : DexTheme.foregroundColor + color: _deleteArea.containsMouse ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.foregroundColor } - DexMouseArea { + + DexMouseArea + { id: _deleteArea hoverEnabled: true anchors.fill: parent - onClicked: { + onClicked: + { let wallet_name = model.modelData let dialog = app.getText({ "title": qsTr("Delete") + " %1 ".arg(wallet_name) + ("wallet?"), @@ -301,13 +238,15 @@ SetupPage { standardButtons: Dialog.Yes | Dialog.Cancel, warning: true, width: 300, - iconColor: DexTheme.redColor, + iconColor: Dex.CurrentTheme.noColor, isPassword: true, placeholderText: qsTr("Type password"), yesButtonText: qsTr("Delete"), cancelButtonText: qsTr("Cancel"), - onAccepted: function(text) { - if (API.app.wallet_mgr.confirm_password(wallet_name, text)) { + onAccepted: function(text) + { + if (API.app.wallet_mgr.confirm_password(wallet_name, text)) + { API.app.wallet_mgr.delete_wallet(wallet_name); app.showText({ title: qsTr("Wallet status"), @@ -315,12 +254,13 @@ SetupPage { standardButtons: Dialog.Ok }) _setup.wallets = API.app.wallet_mgr.get_wallets() - } else { + } else + { app.showText({ title: qsTr("Wallet status"), text: "%1 ".arg(wallet_name) + qsTr("wallet password entered is incorrect"), iconSource: Qaterial.Icons.alert, - iconColor: DexTheme.redColor, + iconColor: Dex.CurrentTheme.noColor, warning: true, standardButtons: Dialog.Ok }) @@ -337,44 +277,139 @@ SetupPage { } } } + HorizontalLine { } + } + bottom_content: LinksRow { visible: !(bottomDrawer.y === 0 && bottomDrawer.visible) } + Drawer + { + id: bottomDrawer + width: parent.width + height: parent.height + edge: Qt.BottomEdge + dim: false // + modal: false + background: Item + { + DexRectangle + { + id: _drawerBG + anchors.fill: parent + radius: 0 + border.width: 0 + color: 'black' + opacity: .8 + } + Column + { + anchors.bottom: parent.bottom + anchors.bottomMargin: 250 + anchors.horizontalCenter: parent.horizontalCenter + spacing: 20 + Image + { + source: Dex.CurrentTheme.bigLogoPath + anchors.horizontalCenter: parent.horizontalCenter + } - HorizontalLine { - } + DexLabel + { + anchors.horizontalCenter: parent.horizontalCenter + text: "%1 wallet".arg(selectedWallet) + color: Dex.CurrentTheme.foregroundColor + font: DexTypo.body1 + topPadding: 10 + } + Connections + { + target: bottomDrawer + function onVisibleChanged() { _inputPassword.field.text = "" } + } - } - Component.onCompleted: { - updateWallets() - } - Connections { - target: app - function onCan_open_loginChanged() { - console.log("LOGIN STATE changed") - if (app.can_open_login) { - bottomDrawer.open() - app.can_open_login = false + DexAppPasswordField + { + id: _inputPassword + height: 50 + width: 300 + anchors.horizontalCenter: parent.horizontalCenter + field.onAccepted: + { + if (_keyChecker.isValid()) + { + if (onClickedLogin(field.text)) + { + bottomDrawer.close(); + logging(); + } + else + { + error = true; + } + } + else + { + error = true; + } + } + } + + DexKeyChecker + { + id: _passwordChecker + visible: false + field: _inputPassword.field + } + + DefaultButton + { + radius: width + width: 150 + text: qsTr("connect") + opacity: enabled ? 1 : 0.6 + enabled: _passwordChecker.isValid() + anchors.horizontalCenter: parent.horizontalCenter + onClicked: _inputPassword.field.accepted() + } + + DexKeyChecker + { + id: _keyChecker + field: _inputPassword.field + visible: false + } + } + + Qaterial.AppBarButton + { + anchors.bottom: parent.bottom + anchors.bottomMargin: 60 + anchors.horizontalCenter: parent.horizontalCenter + width: 80 + icon.width: 40 + icon.height: 40 + icon.source: Qaterial.Icons.close + onClicked: bottomDrawer.close() } } + } - GaussianBlur { + + GaussianBlur + { anchors.fill: _setup visible: false source: _setup radius: 21 deviation: 2 } - RecursiveBlur { + + RecursiveBlur + { visible: bottomDrawer.y === 0 && bottomDrawer.visible anchors.fill: _setup source: _setup radius: 2 loops: 120 } - - - - bottom_content: LinksRow { - visible: !(bottomDrawer.y === 0 && bottomDrawer.visible) - } } diff --git a/atomic_defi_design/Dex/Screens/qmldir b/atomic_defi_design/Dex/Screens/qmldir new file mode 100644 index 0000000000..84a27bbee5 --- /dev/null +++ b/atomic_defi_design/Dex/Screens/qmldir @@ -0,0 +1,3 @@ +module Dex.Screens + +Startup 1.0 Startup/Main.qml diff --git a/atomic_defi_design/Dex/main.qml b/atomic_defi_design/Dex/main.qml index 089e9863f0..87c6dfb8d1 100644 --- a/atomic_defi_design/Dex/main.qml +++ b/atomic_defi_design/Dex/main.qml @@ -10,7 +10,6 @@ import Qaterial 1.0 as Qaterial //! Project Imports import App 1.0 -import "Screens" import "Components" import Dex.Themes 1.0 as Dex @@ -18,7 +17,6 @@ DexWindow { id: window - property alias application: app property int previousX: 0 property int previousY: 0 property int real_visibility @@ -61,60 +59,54 @@ DexWindow visible: isOsx } - App + + DexPopup { - id: app - anchors.fill: parent - anchors.topMargin: 30 - } - - DexPopup - { - id: userMenu + id: userMenu - spacing: 8 - padding: 2 + spacing: 8 + padding: 2 backgroundColor: DexTheme.dexBoxBackgroundColor - contentItem: Item - { - implicitWidth: 130 - implicitHeight: 30 + contentItem: Item + { + implicitWidth: 130 + implicitHeight: 30 Rectangle { width: parent.width - 10 height: parent.height - 5 - anchors.centerIn: parent - color: logout_area.containsMouse? DexTheme.contentColorTopBold : DexTheme.buttonColorHovered + anchors.centerIn: parent + color: logout_area.containsMouse? DexTheme.contentColorTopBold : DexTheme.buttonColorHovered Row { - anchors.centerIn: parent + anchors.centerIn: parent spacing: 5 Qaterial.Icon { - anchors.verticalCenter: parent.verticalCenter - icon: Qaterial.Icons.logout - color: DexTheme.foregroundColor - size: 11 + anchors.verticalCenter: parent.verticalCenter + icon: Qaterial.Icons.logout + color: DexTheme.foregroundColor + size: 11 } DexLabel { - anchors.verticalCenter: parent.verticalCenter - color: DexTheme.foregroundColor - text: qsTr('Logout') - } - } + anchors.verticalCenter: parent.verticalCenter + color: DexTheme.foregroundColor + text: qsTr('Logout') + } + } DexMouseArea { - id: logout_area - hoverEnabled: true - anchors.fill: parent + id: logout_area + hoverEnabled: true + anchors.fill: parent onClicked: { - let dialog = app.showText({ + let dialog = app.showText({ "title": qsTr("Confirm Logout"), text: qsTr("Are you sure you want to log out?") , standardButtons: Dialog.Yes | Dialog.Cancel, @@ -125,204 +117,204 @@ DexWindow yesButtonText: qsTr("Yes"), cancelButtonText: qsTr("Cancel"), onAccepted: function(text) { - app.notifications_list = [] + app.notifications_list = [] userMenu.close() - app.currentWalletName = "" - API.app.disconnect() - app.onDisconnect() + app.currentWalletName = "" + API.app.disconnect() + app.onDisconnect() dialog.close() dialog.destroy() }, onRejected: function() { - userMenu.close() + userMenu.close() } }) - } - } - } - } - } + } + } + } + } + } DexMacControl { visible: isOsx } Row { - height: 30 - leftPadding: 8 - anchors.right: isOsx? parent.right : undefined - anchors.rightMargin: isOsx? 8 : 0 - layoutDirection: isOsx? Qt.RightToLeft : Qt.LeftToRight - spacing: 5 + height: 30 + leftPadding: 8 + anchors.right: isOsx? parent.right : undefined + anchors.rightMargin: isOsx? 8 : 0 + layoutDirection: isOsx? Qt.RightToLeft : Qt.LeftToRight + spacing: 5 Image { source: "qrc:/assets/images/dex-tray-icon.png" - width: 15 - height: 15 - smooth: true - antialiasing: true + width: 15 + height: 15 + smooth: true + antialiasing: true visible: !_label.visible - anchors.verticalCenter: parent.verticalCenter - } + anchors.verticalCenter: parent.verticalCenter + } DexLabel { - text: atomic_app_name - font.family: 'Montserrat' - font.weight: Font.Medium - opacity: .5 - leftPadding: 5 - color: DexTheme.foregroundColor - visible: !_label.visible - anchors.verticalCenter: parent.verticalCenter - } + text: atomic_app_name + font.family: 'Montserrat' + font.weight: Font.Medium + opacity: .5 + leftPadding: 5 + color: DexTheme.foregroundColor + visible: !_label.visible + anchors.verticalCenter: parent.verticalCenter + } - } + } Item { - width: _row.width - height: 30 + width: _row.width + height: 30 Behavior on x { NumberAnimation { - duration: 200 - } - } - anchors.right: parent.right - anchors.rightMargin: isOsx? 10 : 120 + duration: 200 + } + } + anchors.right: parent.right + anchors.rightMargin: isOsx? 10 : 120 Row { - id: _row - anchors.verticalCenter: parent.verticalCenter - layoutDirection: Qt.RightToLeft - spacing: 6 + id: _row + anchors.verticalCenter: parent.verticalCenter + layoutDirection: Qt.RightToLeft + spacing: 6 DexLabel { - text: " | " - opacity: .1 - font.family: 'Montserrat' - font.weight: Font.Medium - visible: _label.visible & !isOsx - color: DexTheme.foregroundColor - anchors.verticalCenter: parent.verticalCenter - leftPadding: 2 - } + text: " | " + opacity: .1 + font.family: 'Montserrat' + font.weight: Font.Medium + visible: _label.visible & !isOsx + color: DexTheme.foregroundColor + anchors.verticalCenter: parent.verticalCenter + leftPadding: 2 + } Rectangle { - width: __row.width + 10 - height: __row.height + 5 + width: __row.width + 10 + height: __row.height + 5 anchors.verticalCenter: parent.verticalCenter - radius: 3 - color: _area.containsMouse? DexTheme.dexBoxBackgroundColor : "transparent" + radius: 3 + color: _area.containsMouse? DexTheme.dexBoxBackgroundColor : "transparent" Row { - id: __row - anchors.centerIn: parent - layoutDirection: isOsx? Qt.RightToLeft : Qt.LeftToRight - spacing: 6 + id: __row + anchors.centerIn: parent + layoutDirection: isOsx? Qt.RightToLeft : Qt.LeftToRight + spacing: 6 Qaterial.ColorIcon { - source: Qaterial.Icons.accountCircle - iconSize: 18 - visible: _label.visible - color: DexTheme.foregroundColor - anchors.verticalCenter: parent.verticalCenter - } + source: Qaterial.Icons.accountCircle + iconSize: 18 + visible: _label.visible + color: DexTheme.foregroundColor + anchors.verticalCenter: parent.verticalCenter + } DexLabel { - id: _label - text: API.app.wallet_mgr.wallet_default_name?? "" - font.family: 'Montserrat' - font.weight: Font.Medium - opacity: .7 - visible: window.logged - color: DexTheme.foregroundColor - anchors.verticalCenter: parent.verticalCenter - } + id: _label + text: API.app.wallet_mgr.wallet_default_name?? "" + font.family: 'Montserrat' + font.weight: Font.Medium + opacity: .7 + visible: window.logged + color: Dex.CurrentTheme.foregroundColor + anchors.verticalCenter: parent.verticalCenter + } Qaterial.ColorIcon { - source: Qaterial.Icons.menuDown - iconSize: 14 - visible: _label.visible - color: DexTheme.foregroundColor - anchors.verticalCenter: parent.verticalCenter - } - } + source: Qaterial.Icons.menuDown + iconSize: 14 + visible: _label.visible + color: Dex.CurrentTheme.foregroundColor + anchors.verticalCenter: parent.verticalCenter + } + } DexMouseArea { - id: _area - anchors.fill: parent - onClicked: { - if(userMenu.visible){ - userMenu.close() - }else { - userMenu.openAt(mapToItem(Overlay.overlay, width / 2, height), Item.Top) - } - } - } - } + id: _area + anchors.fill: parent + onClicked: { + if(userMenu.visible){ + userMenu.close() + }else { + userMenu.openAt(mapToItem(Overlay.overlay, width / 2, height), Item.Top) + } + } + } + } DexLabel { - text: " | " - opacity: .1 - font.family: 'Montserrat' - font.weight: Font.Medium - visible: _label.visible - color: DexTheme.foregroundColor - anchors.verticalCenter: parent.verticalCenter - leftPadding: 2 - } + text: " | " + opacity: .1 + font.family: 'Montserrat' + font.weight: Font.Medium + visible: _label.visible + color: DexTheme.foregroundColor + anchors.verticalCenter: parent.verticalCenter + leftPadding: 2 + } Row { - anchors.verticalCenter: parent.verticalCenter - spacing: 6 - + anchors.verticalCenter: parent.verticalCenter + spacing: 6 + DexLabel { - leftPadding: 2 - text: qsTr("Balance") - font.family: 'Montserrat' - font.weight: Font.Medium - opacity: .7 + leftPadding: 2 + text: qsTr("Balance") + font.family: 'Montserrat' + font.weight: Font.Medium + opacity: .7 visible: _label.visible - anchors.verticalCenter: parent.verticalCenter - } - DexLabel { - text: ":" - opacity: .7 - font.family: 'Montserrat' - font.weight: Font.Medium + anchors.verticalCenter: parent.verticalCenter + } + DexLabel { + text: ":" + opacity: .7 + font.family: 'Montserrat' + font.weight: Font.Medium visible: _label.visible - anchors.verticalCenter: parent.verticalCenter - } + anchors.verticalCenter: parent.verticalCenter + } DexLabel { - text_value: General.formatFiat("", API.app.portfolio_pg.balance_fiat_all,API.app.settings_pg.current_currency) - font.family: 'lato' - font.weight: Font.Medium + text_value: General.formatFiat("", API.app.portfolio_pg.balance_fiat_all,API.app.settings_pg.current_currency) + font.family: 'lato' + font.weight: Font.Medium visible: _label.visible - privacy: true - anchors.verticalCenter: parent.verticalCenter + privacy: true + anchors.verticalCenter: parent.verticalCenter DexMouseArea { - anchors.fill: parent + anchors.fill: parent onClicked: { - const current_fiat = API.app.settings_pg.current_currency - const available_fiats = API.app.settings_pg.get_available_currencies() - const current_index = available_fiats.indexOf( - current_fiat) - const next_index = (current_index + 1) - % available_fiats.length - const next_fiat = available_fiats[next_index] - API.app.settings_pg.current_currency = next_fiat - } - } - } - } + const current_fiat = API.app.settings_pg.current_currency + const available_fiats = API.app.settings_pg.get_available_currencies() + const current_index = available_fiats.indexOf( + current_fiat) + const next_index = (current_index + 1) + % available_fiats.length + const next_fiat = available_fiats[next_index] + API.app.settings_pg.current_currency = next_fiat + } + } + } + } DefaultText { @@ -336,47 +328,54 @@ DexWindow } DexIconButton { - opacity: containsMouse? 1 : .8 - anchors.verticalCenter: parent.verticalCenter + opacity: containsMouse? 1 : .8 + anchors.verticalCenter: parent.verticalCenter iconSize: 22 - icon: Qaterial.Icons.bellOutline - visible: _label.visible - active: app.notification_modal.opened + icon: Qaterial.Icons.bellOutline + visible: _label.visible + active: app.notification_modal.opened AnimatedRectangle { - z: 1 - anchors.right: parent.right - anchors.rightMargin: -3 - y: -3 - radius: width/2 - width: count_text.height * 1.4 - height: width - visible: app.notifications_list !== undefined? app.notifications_list.length > 0 : false - color: DexTheme.redColor + z: 1 + anchors.right: parent.right + anchors.rightMargin: -3 + y: -3 + radius: width/2 + width: count_text.height * 1.4 + height: width + visible: app.notifications_list !== undefined? app.notifications_list.length > 0 : false + color: DexTheme.redColor DefaultText { - id: count_text - anchors.centerIn: parent - text_value: _label.visible ? app.notifications_list.length ?? 0 : 0 - font.pixelSize: 8 + id: count_text + anchors.centerIn: parent + text_value: _label.visible ? app.notifications_list.length ?? 0 : 0 + font.pixelSize: 8 font.family: 'Lato' - } - } + } + } onClicked: { if (app.notification_modal.visible) app.notification_modal.close() else app.notification_modal.openAt(mapToItem(Overlay.overlay, -165, 18), Item.Top) - } - } + } + } Settings { - id: atomic_settings0 - fileName: atomic_cfg_file - } - } - } + id: atomic_settings0 + fileName: atomic_cfg_file + } + } + } + + App + { + id: app + anchors.fill: parent + anchors.topMargin: 30 + } } diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index 3563583538..e3a26ba5c8 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -521,11 +521,12 @@ Dex/NoConnection.qml Dex/Portfolio/Portfolio.qml Dex/Screens/Dashboard.qml - Dex/Screens/FirstLaunch.qml - Dex/Screens/InitialLoading.qml - Dex/Screens/Login.qml - Dex/Screens/NewUser.qml - Dex/Screens/RecoverSeed.qml + Dex/Screens/qmldir + Dex/Screens/Startup/ImportWallet.qml + Dex/Screens/Startup/Logging.qml + Dex/Screens/Startup/Login.qml + Dex/Screens/Startup/NewWallet.qml + Dex/Screens/Startup/WalletsView.qml Dex/Settings/AddCustomCoinModal.qml Dex/Settings/CamouflagePasswordModal.qml Dex/Settings/Combo_fiat.qml From 1df91391e4d93af8d759f2688e841fa3206aff47 Mon Sep 17 00:00:00 2001 From: syl Date: Fri, 5 Nov 2021 09:51:56 +0100 Subject: [PATCH 070/139] A qml file was missing in the qrc --- atomic_defi_design/qml.qrc | 1 + 1 file changed, 1 insertion(+) diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index e3a26ba5c8..12604cdac2 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -525,6 +525,7 @@ Dex/Screens/Startup/ImportWallet.qml Dex/Screens/Startup/Logging.qml Dex/Screens/Startup/Login.qml + Dex/Screens/Startup/Main.qml Dex/Screens/Startup/NewWallet.qml Dex/Screens/Startup/WalletsView.qml Dex/Settings/AddCustomCoinModal.qml From 3df2e6d3066c6886f7c7b41531290feb6a4755c6 Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sat, 6 Nov 2021 07:37:21 +0800 Subject: [PATCH 071/139] remove nim --- .../ci_scripts/windows_script.ps1 | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index 075c4d16fc..a01cbcc1ea 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -1,11 +1,11 @@ Set-ExecutionPolicy RemoteSigned -scope CurrentUser -$DWFILE = ($PWD | select -exp Path) + '\nim-1.2.6.zip' -(New-Object System.Net.WebClient).DownloadFile('https://github.com/KomodoPlatform/nim_kmd_package_list/raw/master/nim-1.2.6_x64.zip', $DWFILE) -$DWFOLDER = ($PWD | select -exp Path) -Expand-Archive -LiteralPath $DWFILE -DestinationPath $DWFOLDER -$ENV:PATH=$ENV:PATH+';'+($PWD | select -exp Path)+'\nim-1.2.6\bin;'+$ENV:UserProfile+'.nimble\bin' -& $DWFOLDER\nim-1.2.6\finish.exe -y +#$DWFILE = ($PWD | select -exp Path) + '\nim-1.2.6.zip' +#(New-Object System.Net.WebClient).DownloadFile('https://github.com/KomodoPlatform/nim_kmd_package_list/raw/master/nim-1.2.6_x64.zip', $DWFILE) +#$DWFOLDER = ($PWD | select -exp Path) +#Expand-Archive -LiteralPath $DWFILE -DestinationPath $DWFOLDER +#$ENV:PATH=$ENV:PATH+';'+($PWD | select -exp Path)+'\nim-1.2.6\bin;'+$ENV:UserProfile+'.nimble\bin' +#& $DWFOLDER\nim-1.2.6\finish.exe -y Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') scoop install llvm --global @@ -18,14 +18,19 @@ scoop cache rm git scoop cache rm cmake scoop cache rm ninja scoop cache rm llvm -scoop cache rm nim +#scoop cache rm nim $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\$Env:QT_VERSION\msvc2019_64" $Env:QT_ROOT = "C:\Qt" -cd ci_tools_atomic_dex +#cd ci_tools_atomic_dex #$file = 'src\generate.nim' #$regex = '(?<=g_vcpkg_cmake_script_path & ")[^"]*' #(Get-Content $file) -replace $regex, ' -DVCPKG_TARGET_TRIPLET=x64-windows ' | Set-Content $file -nimble build -y +#nimble build -y #cmd /c '.\ci_tools_atomic_dex.exe build release 2>&1' -cmd /c '.\ci_tools_atomic_dex.exe bundle release 2>&1' +#cmd /c '.\ci_tools_atomic_dex.exe bundle release 2>&1' #ls bundle-Release/bundle.zip +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ +cmake --build . --config Release --target atomicdex-desktop +ninja install From 6c248d7b29d9efeca75bc3e7916c4e3b7f48c7be Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sat, 6 Nov 2021 12:21:12 +0800 Subject: [PATCH 072/139] use ninja --- ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index a01cbcc1ea..703ccb540e 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -32,5 +32,4 @@ $Env:QT_ROOT = "C:\Qt" mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ -cmake --build . --config Release --target atomicdex-desktop -ninja install +ninja From dba8ba0a56394a982026f098342f0201306c059b Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sat, 6 Nov 2021 12:25:01 +0800 Subject: [PATCH 073/139] ninja bundling --- ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index 703ccb540e..eaa72417f3 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -33,3 +33,4 @@ mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ ninja +ninja install From 9f81422106f4a87238c9ba6213ab308a90c5bd03 Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sat, 6 Nov 2021 12:27:17 +0800 Subject: [PATCH 074/139] dont use nim for windows tests. --- .github/workflows/atomicdex-desktop-ci.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 58a2c18ddd..b10e2c1b43 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -274,16 +274,15 @@ jobs: - name: Running Tests (Windows) shell: powershell - working-directory: ci_tools_atomic_dex if: runner.os == 'Windows' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository run: | echo "Running tests" $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\${{ matrix.qt }}\msvc2019_64" - cmd /c '.\ci_tools_atomic_dex.exe tests release 2>&1' - cd build-Release - cd bin ls + cd build\bin + ls + ./atomicdex-desktop_tests.exe #Invoke-WebRequest -Uri https://report.ci/upload.py -OutFile upload.py #python upload.py --sha $(git rev-parse HEAD) -n "[Doctest Windows]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" From 7a8ca5b0f9d08ba8c6708ca12754298173a5ca84 Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sat, 6 Nov 2021 13:10:57 +0800 Subject: [PATCH 075/139] cleanup, add results xml flags --- .github/workflows/atomicdex-desktop-ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index b10e2c1b43..3e8173bfba 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -279,10 +279,8 @@ jobs: echo "Running tests" $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\${{ matrix.qt }}\msvc2019_64" - ls cd build\bin - ls - ./atomicdex-desktop_tests.exe + ./atomicdex-desktop_tests.exe --reporters=xml --out=" & os.getEnv("DEX_PROJECT_NAME") & "-tests-result.xml -s #Invoke-WebRequest -Uri https://report.ci/upload.py -OutFile upload.py #python upload.py --sha $(git rev-parse HEAD) -n "[Doctest Windows]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" From fba69e86df8a9f716fd5445f2803b18f709221cb Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sat, 6 Nov 2021 14:49:41 +0800 Subject: [PATCH 076/139] clean up --- .../ci_scripts/windows_script.ps1 | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index eaa72417f3..b082b6cc83 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -1,11 +1,6 @@ Set-ExecutionPolicy RemoteSigned -scope CurrentUser -#$DWFILE = ($PWD | select -exp Path) + '\nim-1.2.6.zip' -#(New-Object System.Net.WebClient).DownloadFile('https://github.com/KomodoPlatform/nim_kmd_package_list/raw/master/nim-1.2.6_x64.zip', $DWFILE) -#$DWFOLDER = ($PWD | select -exp Path) -#Expand-Archive -LiteralPath $DWFILE -DestinationPath $DWFOLDER -#$ENV:PATH=$ENV:PATH+';'+($PWD | select -exp Path)+'\nim-1.2.6\bin;'+$ENV:UserProfile+'.nimble\bin' -#& $DWFOLDER\nim-1.2.6\finish.exe -y + Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') scoop install llvm --global @@ -18,17 +13,8 @@ scoop cache rm git scoop cache rm cmake scoop cache rm ninja scoop cache rm llvm -#scoop cache rm nim $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\$Env:QT_VERSION\msvc2019_64" $Env:QT_ROOT = "C:\Qt" -#cd ci_tools_atomic_dex -#$file = 'src\generate.nim' -#$regex = '(?<=g_vcpkg_cmake_script_path & ")[^"]*' -#(Get-Content $file) -replace $regex, ' -DVCPKG_TARGET_TRIPLET=x64-windows ' | Set-Content $file -#nimble build -y -#cmd /c '.\ci_tools_atomic_dex.exe build release 2>&1' -#cmd /c '.\ci_tools_atomic_dex.exe bundle release 2>&1' -#ls bundle-Release/bundle.zip mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ From d161748eff8da453f0c6194807fa05120ca51082 Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 6 Nov 2021 12:58:28 +0000 Subject: [PATCH 077/139] fix --- assets/config/0.5.2-coins.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 7733fffaeb..3b2d19b327 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -6451,7 +6451,7 @@ "explorer_url": [ "https://explorer.zcha.in/" ], - "type": "UTXO" + "type": "UTXO", "active": false, "currently_enabled": false }, From e0e95a626715f7c34b1e337651ca2ff01607c45f Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 6 Nov 2021 15:40:45 +0000 Subject: [PATCH 078/139] more nomics_ids --- assets/config/0.5.2-coins.json | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 3b2d19b327..91ec5e0b2c 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -1814,6 +1814,7 @@ "name": "Diminutive Coin", "coinpaprika_id": "dimi-diminutive-coin", "coingecko_id": "diminutive-coin", + "nomics_id": "DIMI", "electrum": [ { "url": "electrumx1.diminutivecoin.com:50012", @@ -1947,6 +1948,7 @@ "name": "DigitalPrice", "coinpaprika_id": "dp-digitalprice", "coingecko_id": "digitalprice", + "nomics_id": "DP", "electrum": [ { "url": "1.eu.dp.electrum.dexstats.info:10021" @@ -1964,6 +1966,7 @@ "name": "Electra", "coinpaprika_id": "eca-electra", "coingecko_id": "electra", + "nomics_id": "ECA", "electrum": [ { "url": "electrum1.cipig.net:10052", @@ -1990,6 +1993,7 @@ "name": "e-Gulden", "coinpaprika_id": "efl-e-gulden", "coingecko_id": "electronicgulden", + "nomics_id": "EFL", "electrum": [ { "url": "holland.ecoincore.com:11017", @@ -2240,6 +2244,7 @@ "name": "Firo", "coinpaprika_id": "firo-firo", "coingecko_id": "zcoin", + "nomics_id": "FIRO", "electrum": [ { "url": "electrumx01.firo.org:50001" @@ -2263,6 +2268,7 @@ "name": "Firo", "coinpaprika_id": "firo-firo", "coingecko_id": "zcoin", + "nomics_id": "FIRO", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2945,6 +2951,7 @@ "name": "Koinon", "coinpaprika_id": "koin-koinon", "coingecko_id": "koinon", + "nomics_id": "KOIN", "electrum": [ { "url": "electrum1.cipig.net:10024", @@ -3000,6 +3007,7 @@ "name": "Litecoin Cash", "coinpaprika_id": "lcc-litecoin-cash", "coingecko_id": "litecoin-cash", + "nomics_id": "LCC", "electrum": [ { "url": "188.166.117.139:50001" @@ -3873,6 +3881,7 @@ "name": "Unitus", "coinpaprika_id": "uis-unitus", "coingecko_id": "unitus", + "nomics_id": "UIS", "electrum": [ { "url": "failover.trc-uis.ewmcx.biz:50002", @@ -3895,6 +3904,7 @@ "name": "Unobtanium", "coinpaprika_id": "uno-unobtanium", "coingecko_id": "unobtanium", + "nomics_id": "UNO", "electrum": [ { "url": "uno-main.coinmunity.gold:50002", @@ -4718,6 +4728,7 @@ "name": "SmartBCH", "coinpaprika_id": "bch-bitcoin-cash", "coingecko_id": "bitcoin-cash", + "nomics_id": "BCH", "nodes": [ "https://smartbch.fountainhead.cash/mainnet" ], @@ -5212,6 +5223,7 @@ "name": "MonaCoin", "coinpaprika_id": "mona-monacoin", "coingecko_id": "monacoin", + "nomics_id": "MONA", "electrum": [ { "url": "electrumx3.monacoin.nl:50001" @@ -5307,6 +5319,7 @@ "name": "Namecoin", "coinpaprika_id": "nmc-namecoin", "coingecko_id": "namecoin", + "nomics_id": "NMC", "electrum": [ { "url": "82.119.233.36:50001" @@ -5339,6 +5352,7 @@ "name": "Novacoin", "coinpaprika_id": "nvc-novacoin", "coingecko_id": "novacoin", + "nomics_id": "NVC", "electrum": [ { "url": "electrumx.nvc.ewmcx.org:50002", @@ -5364,6 +5378,7 @@ "name": "Novacoin", "coinpaprika_id": "nvc-novacoin", "coingecko_id": "novacoin", + "nomics_id": "NVC", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -5381,6 +5396,7 @@ "name": "Novacoin", "coinpaprika_id": "nvc-novacoin", "coingecko_id": "novacoin", + "nomics_id": "NVC", "explorer_url": [ "https://explorer.qtum.org/" ], @@ -5551,6 +5567,7 @@ "name": "Raptoreum", "coinpaprika_id": "rtm-raptoreum", "coingecko_id": "raptoreum", + "nomics_id": "RTM", "electrum": [ { "url": "209.151.151.21:50001", @@ -5963,6 +5980,7 @@ "name": "Validity", "coinpaprika_id": "val-validity", "coingecko_id": "radium", + "nomics_id": "RADS", "electrum": [ { "url": "e1.validitytech.com:11002", @@ -6032,6 +6050,7 @@ "name": "Widecoin", "coinpaprika_id": "wcn-widecoin", "coingecko_id": "widecoin", + "nomics_id": "WCN2", "electrum": [ { "url": "electrumx.widecoin.org:50001" @@ -6052,6 +6071,7 @@ "name": "Wrapped Widecoin", "coinpaprika_id": "wwcn-wrapped-widecoin", "coingecko_id": "wrapped-widecoin", + "nomics_id": "WWCN", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -6094,6 +6114,7 @@ "name": "Electra Protocol", "coinpaprika_id": "xep-electra-protocol", "coingecko_id": "electra-protocol", + "nomics_id": "XEP", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -6149,6 +6170,7 @@ "name": "Primecoin", "coinpaprika_id": "xpm-primecoin", "coingecko_id": "primecoin", + "nomics_id": "XPM", "electrum": [ { "url": "electrumx.primecoin.org:50001", @@ -6265,6 +6287,7 @@ "name": "Vanillacash", "coinpaprika_id": "xvc-vcash", "coingecko_id": "vcash", + "nomics_id": "XVC", "electrum": [ { "url": "electrumx.xvc.ewmcx.org:50001", @@ -6288,6 +6311,7 @@ "name": "Vanillacash", "coinpaprika_id": "xvc-vcash", "coingecko_id": "vcash", + "nomics_id": "XVC", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -6305,6 +6329,7 @@ "name": "Vanillacash", "coinpaprika_id": "xvc-vcash", "coingecko_id": "vcash", + "nomics_id": "XVC", "explorer_url": [ "https://explorer.qtum.org/" ], From 6d118d28495e25df48e54fff9298099a0c9972c0 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sat, 6 Nov 2021 16:50:34 +0100 Subject: [PATCH 079/139] feat(sbch): add alias sbch to bch --- assets/config/0.5.2-coins.json | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 3b2d19b327..f8ec3992cd 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -4716,6 +4716,7 @@ "SBCH": { "coin": "SBCH", "name": "SmartBCH", + "alias_ticker": "BCH", "coinpaprika_id": "bch-bitcoin-cash", "coingecko_id": "bitcoin-cash", "nodes": [ From c29c5e057452ebac7ff683795b0134aa6e856113 Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 6 Nov 2021 17:18:27 +0000 Subject: [PATCH 080/139] more nomics_ids --- assets/config/0.5.2-coins.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 6b2dc5d9e5..5c5525881e 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -798,6 +798,7 @@ "name": "BlackCoin", "coinpaprika_id": "blk-blackcoin", "coingecko_id": "blackcoin", + "nomics_id": "BLK", "electrum": [ { "url": "electrum1.blackcoin.nl:10002", @@ -977,6 +978,7 @@ "name": "GlobalBoost-Y", "coinpaprika_id": "bsty-globalboost-y", "coingecko_id": "globalboost", + "nomics_id": "BSTY", "electrum": [ { "url": "66.172.33.175:50001", @@ -1032,6 +1034,7 @@ "name": "Bitcoin", "coinpaprika_id": "btc-bitcoin", "coingecko_id": "bitcoin", + "nomics_id": "BTC", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1049,6 +1052,7 @@ "name": "BitcoinZ", "coinpaprika_id": "btcz-bitcoinz", "coingecko_id": "bitcoinz", + "nomics_id": "BTCZ", "electrum": [ { "url": "electrum1.btcz.rocks:50001" @@ -1069,6 +1073,7 @@ "name": "BitCore", "coinpaprika_id": "btx-bitcore", "coingecko_id": "bitcore", + "nomics_id": "BTX", "electrum": [ { "url": "btx-electrumx.coinsmunity.com:50002", @@ -1090,6 +1095,7 @@ "name": "BitCore", "coinpaprika_id": "btx-bitcore", "coingecko_id": "bitcore", + "nomics_id": "BTX", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1789,6 +1795,7 @@ "name": "Digitalcoin", "coinpaprika_id": "dgc-digitalcoin", "coingecko_id": "digitalcoin", + "nomics_id": "DGC", "electrum": [ { "url": "electrumx.dgc.ewmcx.org:50001", @@ -2086,6 +2093,7 @@ "name": "Einsteinium", "coinpaprika_id": "emc2-einsteinium", "coingecko_id": "einsteinium", + "nomics_id": "EMC2", "electrum": [ { "url": "electrum1.cipig.net:10062", @@ -2529,6 +2537,7 @@ "name": "Groestlcoin", "coinpaprika_id": "grs-groestlcoin", "coingecko_id": "groestlcoin", + "nomics_id": "GRS", "electrum": [ { "url": "electrum10.groestlcoin.org:50001" @@ -2842,6 +2851,7 @@ "name": "Jarvis Reward Token", "coinpaprika_id": "jrt-jarvis-reward-token", "coingecko_id": "jarvis-reward-token", + "nomics_id": "JRT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -2859,6 +2869,7 @@ "name": "Jarvis Reward Token", "coinpaprika_id": "jrt-jarvis-reward-token", "coingecko_id": "jarvis-reward-token", + "nomics_id": "JRT", "nodes": [ "https://polygon-rpc.com" ], @@ -2978,6 +2989,7 @@ "name": "LBRY Credits", "coinpaprika_id": "lbc-lbry-credits", "coingecko_id": "lbry-credits", + "nomics_id": "LBC", "electrum": [ { "url": "spv1.lbry.com:50001" @@ -5248,6 +5260,7 @@ "name": "NavCoin", "coinpaprika_id": "nav-navcoin", "coingecko_id": "nav-coin", + "nomics_id": "NAV", "electrum": [ { "url": "electrum1.cipig.net:10056" @@ -5271,6 +5284,7 @@ "name": "Navcoin", "coinpaprika_id": "nav-navcoin", "coingecko_id": "nav-coin", + "nomics_id": "NAV", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -6802,6 +6816,7 @@ "name": "Qcash", "coingecko_id": "qcash", "coinpaprika_id": "qc-qcash", + "nomics_id": "QC", "active": false, "currently_enabled": false, "explorer_url": [ From e7286a494fd5dbd3288af3f10d322ae3801cb308 Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 6 Nov 2021 21:28:39 +0000 Subject: [PATCH 081/139] more nomics_ids --- assets/config/0.5.2-coins.json | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 5c5525881e..05c41ad440 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -350,6 +350,7 @@ "name": "Pirate", "coinpaprika_id": "arrr-pirate", "coingecko_id": "pirate-chain", + "nomics_id": "ARRR", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1184,6 +1185,7 @@ "name": "BTU Protocol", "coinpaprika_id": "btu-btu-protocol", "coingecko_id": "btu-protocol", + "nomics_id": "BTU", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1201,6 +1203,7 @@ "name": "BTU Protocol", "coinpaprika_id": "btu-btu-protocol", "coingecko_id": "btu-protocol", + "nomics_id": "BTU", "nodes": [ "https://polygon-rpc.com" ], @@ -3359,6 +3362,7 @@ "name": "Million", "coinpaprika_id": "mm-million", "coingecko_id": "million", + "nomics_id": "MM4", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -3376,6 +3380,7 @@ "name": "Million", "coinpaprika_id": "mm-million", "coingecko_id": "million", + "nomics_id": "MM4", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -3391,6 +3396,7 @@ "name": "Million", "coinpaprika_id": "mm-million", "coingecko_id": "million", + "nomics_id": "MM4", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -3408,6 +3414,7 @@ "name": "Million", "coinpaprika_id": "mm-million", "coingecko_id": "million", + "nomics_id": "MM4", "nodes": [ "https://rpc.moonriver.moonbeam.network" ], @@ -3423,6 +3430,7 @@ "name": "Million", "coinpaprika_id": "mm-million", "coingecko_id": "million", + "nomics_id": "MM4", "nodes": [ "https://polygon-rpc.com" ], @@ -3663,6 +3671,7 @@ "coin": "KCS", "coingecko_id": "kucoin-shares", "coinpaprika_id": "kcs-kucoin-token", + "nomics_id": "KCS", "currently_enabled": false, "nodes": [ "https://rpc-mainnet.kcc.network" @@ -3677,7 +3686,8 @@ "active": false, "coin": "MOVR", "coingecko_id": "moonriver", - "coinpaprika_id": "test-coin", + "coinpaprika_id": "movr-moonriver", + "nomics_id": "MOVR", "currently_enabled": false, "nodes": [ "https://rpc.moonriver.moonbeam.network" @@ -5302,6 +5312,7 @@ "name": "Nexo", "coinpaprika_id": "nexo-nexo", "coingecko_id": "nexo", + "nomics_id": "NEXO", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -5319,6 +5330,7 @@ "name": "Nexo", "coinpaprika_id": "nexo-nexo", "coingecko_id": "nexo", + "nomics_id": "NEXO", "nodes": [ "https://polygon-rpc.com" ], @@ -6889,6 +6901,7 @@ "name": "Celsius", "coinpaprika_id": "cel-celsius", "coingecko_id": "celsius-degree-token", + "nomics_id": "CEL", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -6906,6 +6919,7 @@ "name": "Celsius", "coinpaprika_id": "cel-celsius", "coingecko_id": "celsius-degree-token", + "nomics_id": "CEL", "nodes": [ "https://polygon-rpc.com" ], @@ -7002,6 +7016,7 @@ "name": "Crypto.com", "coinpaprika_id": "cro-cryptocom-chain", "coingecko_id": "crypto-com-chain", + "nomics_id": "CRO", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7019,6 +7034,7 @@ "name": "Crypto.com", "coinpaprika_id": "cro-cryptocom-chain", "coingecko_id": "crypto-com-chain", + "nomics_id": "CRO", "nodes": [ "https://polygon-rpc.com" ], @@ -7260,6 +7276,7 @@ "name": "HEX", "coinpaprika_id": "hex-hex", "coingecko_id": "hex", + "nomics_id": "HEX", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7277,6 +7294,7 @@ "name": "HEX", "coinpaprika_id": "hex-hex", "coingecko_id": "hex", + "nomics_id": "HEX", "nodes": [ "https://polygon-rpc.com" ], @@ -7324,6 +7342,7 @@ "coin": "HT", "coingecko_id": "huobi-token", "coinpaprika_id": "ht-huobi-token", + "nomics_id": "HT", "currently_enabled": false, "nodes": [ "https://http-mainnet.hecochain.com" @@ -7336,9 +7355,10 @@ }, "HT-ERC20": { "coin": "HT-ERC20", - "name": "HuobiToken Ethereum", + "name": "Huobi Token", "coinpaprika_id": "ht-huobi-token", "coingecko_id": "huobi-token", + "nomics_id": "HT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7550,6 +7570,7 @@ "name": "Power Ledger", "coinpaprika_id": "powr-power-ledger", "coingecko_id": "power-ledger", + "nomics_id": "POWR", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7567,6 +7588,7 @@ "name": "Power Ledger", "coinpaprika_id": "powr-power-ledger", "coingecko_id": "power-ledger", + "nomics_id": "POWR", "nodes": [ "https://polygon-rpc.com" ], From 7c3063961ba47dc4a2da33b5e9d5f7894d153625 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 7 Nov 2021 05:59:31 +0100 Subject: [PATCH 082/139] feat(nomics): add nomics png --- .../assets/images/providers/nomics.png | Bin 0 -> 11402 bytes atomic_defi_design/qml.qrc | 1 + 2 files changed, 1 insertion(+) create mode 100644 atomic_defi_design/assets/images/providers/nomics.png diff --git a/atomic_defi_design/assets/images/providers/nomics.png b/atomic_defi_design/assets/images/providers/nomics.png new file mode 100644 index 0000000000000000000000000000000000000000..72bf9a5c2c5492593fba8e0016cc7ae35177ca22 GIT binary patch literal 11402 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 literal 0 HcmV?d00001 diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index d118431f00..0b360b3d13 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -281,6 +281,7 @@ assets/images/providers/binance.png assets/images/providers/coingecko.png assets/images/providers/coinpaprika.png + assets/images/providers/nomics.png assets/images/dashboard-copy.svg assets/images/dashboard-eye-hide.svg assets/images/dashboard-eye.svg From 445ce6f38b2b5129364f989552b82ece56852dde Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sun, 7 Nov 2021 14:42:02 +0800 Subject: [PATCH 083/139] update env var --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 3e8173bfba..4612ea1081 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -280,7 +280,7 @@ jobs: $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\${{ matrix.qt }}\msvc2019_64" cd build\bin - ./atomicdex-desktop_tests.exe --reporters=xml --out=" & os.getEnv("DEX_PROJECT_NAME") & "-tests-result.xml -s + ./atomicdex-desktop_tests.exe --reporters=xml --out=${{ env.DEX_PROJECT_NAME }}-tests-result.xml -s #Invoke-WebRequest -Uri https://report.ci/upload.py -OutFile upload.py #python upload.py --sha $(git rev-parse HEAD) -n "[Doctest Windows]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" From d075c79f0cca0bf757ab88e712eeed70fda3813d Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 7 Nov 2021 12:19:41 +0100 Subject: [PATCH 084/139] feat(history): add avax and etc history --- src/core/atomicdex/services/mm2/mm2.service.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 1a44a0125e..1cca75cc68 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1248,6 +1248,12 @@ namespace atomic_dex case CoinTypeGadget::Optimism: out = construct_url_functor("ETH-OPT20", "ETHK-OPT20", "optimism_tx_history", "optimism_tx_history", ticker, address); break; + case CoinTypeGadget::EthereumClassic: + out = construct_url_functor("ETC", "ETCT", "etc_tx_history", "etc_tx_history", ticker, address); + break; + case CoinTypeGadget::AVX20: + out = construct_url_functor("AVAX", "AVAXT", "avx_tx_history", "avx_tx_history", ticker, address); + break; default: break; } From 609330a00cc93e118a3f84e14a407176d2ccbb4b Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 7 Nov 2021 12:24:37 +0100 Subject: [PATCH 085/139] feat(price): use v2 price for better scalability in atomicdex --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- src/core/atomicdex/services/price/global.provider.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index ddb8afeb46..791535d13d 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -68,8 +68,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v1/tickers?expire_at=600"); - req.set_request_uri(FROM_STD_STR("/api/v1/tickers?expire_at=600")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v2/tickers?expire_at=600"); + req.set_request_uri(FROM_STD_STR("/api/v2/tickers?expire_at=600")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api diff --git a/src/core/atomicdex/services/price/global.provider.cpp b/src/core/atomicdex/services/price/global.provider.cpp index b31752ab09..4f3d8110db 100644 --- a/src/core/atomicdex/services/price/global.provider.cpp +++ b/src/core/atomicdex/services/price/global.provider.cpp @@ -192,7 +192,7 @@ namespace atomic_dex { return "1"; } - std::string ticker = ticker_in; + std::string ticker = utils::retrieve_main_ticker(ticker_in); try { //! FIXME: fix zatJum crash report, frontend QML try to retrieve price before program is even launched From 749b558b7365405fdd42860a475b96f4e2899f61 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 7 Nov 2021 12:44:40 +0100 Subject: [PATCH 086/139] feat(provider): finalize nomics addition --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++++ src/core/atomicdex/api/komodo_prices/komodo.prices.hpp | 1 + .../services/price/komodo_prices/komodo.prices.provider.cpp | 2 ++ 3 files changed, 7 insertions(+) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 791535d13d..e232319ffd 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -54,6 +54,10 @@ namespace atomic_dex::komodo_prices::api { x = provider::coinpaprika; } + else if (j == "nomics") + { + x = provider::nomics; + } else { x = provider::unknown; diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp index 96458d45ae..87ad7a9c2a 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp @@ -12,6 +12,7 @@ namespace atomic_dex::komodo_prices::api binance, coingecko, coinpaprika, + nomics, unknown }; diff --git a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp index 3393ebff01..d201e6e7d6 100644 --- a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp +++ b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp @@ -130,6 +130,8 @@ namespace atomic_dex return "coingecko"; case komodo_prices::api::provider::coinpaprika: return "coinpaprika"; + case komodo_prices::api::provider::nomics: + return "nomics"; default: return "unknown"; } From 727e31129a8d80a3b20e26057bcfa18454605ec0 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 7 Nov 2021 15:39:06 +0000 Subject: [PATCH 087/139] expire_at 1d --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index db622f47ef..d4a8fea0a0 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -72,8 +72,8 @@ namespace atomic_dex::komodo_prices::api { web::http::http_request req; req.set_method(web::http::methods::GET); - SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v2/tickers?expire_at=600"); - req.set_request_uri(FROM_STD_STR("/api/v2/tickers?expire_at=600")); + SPDLOG_INFO("url: {}", TO_STD_STR(g_komodo_prices_client->base_uri().to_string()) + "api/v2/tickers?expire_at=86400"); + req.set_request_uri(FROM_STD_STR("/api/v2/tickers?expire_at=86400")); return g_komodo_prices_client->request(req); } } // namespace atomic_dex::komodo_prices::api From 29af7f29a7b1d22ef7a9a5b986b0d1abea9c76fd Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 7 Nov 2021 18:21:53 +0100 Subject: [PATCH 088/139] feat(provider): use utils main retrieve ticker everywhere --- .../services/price/komodo_prices/komodo.prices.provider.cpp | 3 ++- src/core/atomicdex/utilities/qt.utilities.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp index d201e6e7d6..cea775c176 100644 --- a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp +++ b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp @@ -4,6 +4,7 @@ //! Project Headers #include "atomicdex/events/events.hpp" #include "atomicdex/services/price/komodo_prices/komodo.prices.provider.hpp" +#include "atomicdex/utilities/global.utilities.hpp" //! Constructor namespace atomic_dex @@ -121,7 +122,7 @@ namespace atomic_dex std::string komodo_prices_provider::get_price_provider(const std::string& ticker) const { - auto provider = get_info_answer(ticker).price_provider; + auto provider = get_info_answer(utils::retrieve_main_ticker(ticker)).price_provider; switch (provider) { case komodo_prices::api::provider::binance: diff --git a/src/core/atomicdex/utilities/qt.utilities.cpp b/src/core/atomicdex/utilities/qt.utilities.cpp index df98ce9c6a..9d091bb971 100644 --- a/src/core/atomicdex/utilities/qt.utilities.cpp +++ b/src/core/atomicdex/utilities/qt.utilities.cpp @@ -56,7 +56,7 @@ namespace atomic_dex QString change_24h = "0"; if (is_this_currency_a_fiat(config, config.current_currency)) { - change_24h = QString::fromStdString(provider.get_change_24h(coin.ticker)); + change_24h = QString::fromStdString(provider.get_change_24h(utils::retrieve_main_ticker(coin.ticker))); } return change_24h; } From f8d7e50d4e7e780cc7fc3686ae89992ea5b63a35 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 7 Nov 2021 20:39:49 +0000 Subject: [PATCH 089/139] add lots of KRC20 tokens + Telcoin (TEL) --- assets/config/0.5.2-coins.json | 533 ++++++++++++++++++- atomic_defi_design/Dex/Constants/General.qml | 10 + atomic_defi_design/Dex/Constants/Style.qml | 1 + atomic_defi_design/qml.qrc | 1 + 4 files changed, 516 insertions(+), 29 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 05c41ad440..4d373d9970 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -68,6 +68,22 @@ "active": false, "currently_enabled": false }, + "1INCH-KRC20": { + "coin": "1INCH-KRC20", + "name": "1inch", + "coinpaprika_id": "1inch-1inch", + "coingecko_id": "1inch", + "nomics_id": "1INCH", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "1INCH-PLG20": { "coin": "1INCH-PLG20", "name": "1inch", @@ -185,6 +201,22 @@ "active": false, "currently_enabled": false }, + "AAVE-KRC20": { + "coin": "AAVE-KRC20", + "name": "Aave", + "coinpaprika_id": "aave-new", + "coingecko_id": "aave", + "nomics_id": "AAVE", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "AAVE-PLG20": { "coin": "AAVE-PLG20", "name": "Aave", @@ -590,6 +622,7 @@ "name": "Balancer", "coinpaprika_id": "bal-balancer", "coingecko_id": "balancer", + "nomics_id": "BAL", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -607,6 +640,7 @@ "name": "Balancer", "coinpaprika_id": "bal-balancer", "coingecko_id": "balancer", + "nomics_id": "BAL", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -619,11 +653,28 @@ "active": false, "currently_enabled": false }, + "BAL-KRC20": { + "coin": "BAL-KRC20", + "name": "Balancer", + "coinpaprika_id": "bal-balancer", + "coingecko_id": "balancer", + "nomics_id": "BAL", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "BAL-PLG20": { - "coin": "BAL-PLG20", - "name": "Balancer", - "coinpaprika_id": "bal-balancer", - "coingecko_id": "balancer", + "coin": "BAL-PLG20", + "name": "Balancer", + "coinpaprika_id": "bal-balancer", + "coingecko_id": "balancer", + "nomics_id": "BAL", "nodes": [ "https://polygon-rpc.com" ], @@ -1527,6 +1578,7 @@ "name": "Compound", "coinpaprika_id": "comp-compoundd", "coingecko_id": "compound-governance-token", + "nomics_id": "COMP", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -1542,6 +1594,7 @@ "name": "Compound", "coinpaprika_id": "comp-compoundd", "coingecko_id": "compound-governance-token", + "nomics_id": "COMP", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1559,6 +1612,7 @@ "name": "Compound", "coinpaprika_id": "comp-compoundd", "coingecko_id": "compound-governance-token", + "nomics_id": "COMP", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1571,11 +1625,28 @@ "active": false, "currently_enabled": false }, + "COMP-KRC20": { + "coin": "COMP-KRC20", + "name": "Compound", + "coinpaprika_id": "comp-compoundd", + "coingecko_id": "compound-governance-token", + "nomics_id": "COMP", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "COMP-PLG20": { "coin": "COMP-PLG20", "name": "Compound", "coinpaprika_id": "comp-compoundd", "coingecko_id": "compound-governance-token", + "nomics_id": "COMP", "nodes": [ "https://polygon-rpc.com" ], @@ -1849,6 +1920,7 @@ "name": "DODO", "coinpaprika_id": "dodo-dodo", "coingecko_id": "dodo", + "nomics_id": "DODO", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1866,6 +1938,7 @@ "name": "DODO", "coinpaprika_id": "dodo-dodo", "coingecko_id": "dodo", + "nomics_id": "DODO", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1878,6 +1951,22 @@ "active": false, "currently_enabled": false }, + "DODO-KRC20": { + "coin": "DODO-KRC20", + "name": "DODO", + "coinpaprika_id": "dodo-dodo", + "coingecko_id": "dodo", + "nomics_id": "DODO", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "DOGE": { "coin": "DOGE", "name": "Dogecoin", @@ -2569,6 +2658,7 @@ "name": "The Graph", "coinpaprika_id": "grt-the-graph", "coingecko_id": "the-graph", + "nomics_id": "GRT", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -2584,6 +2674,7 @@ "name": "The Graph", "coinpaprika_id": "grt-the-graph", "coingecko_id": "the-graph", + "nomics_id": "GRT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -2596,11 +2687,28 @@ "active": false, "currently_enabled": false }, + "GRT-KRC20": { + "coin": "GRT-KRC20", + "name": "The Graph", + "coinpaprika_id": "grt-the-graph", + "coingecko_id": "the-graph", + "nomics_id": "GRT", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "GRT-PLG20": { "coin": "GRT-PLG20", "name": "The Graph", "coinpaprika_id": "grt-the-graph", "coingecko_id": "the-graph", + "nomics_id": "GRT", "nodes": [ "https://polygon-rpc.com" ], @@ -3294,6 +3402,22 @@ "active": false, "currently_enabled": false }, + "MATIC-KRC20": { + "coin": "MATIC-KRC20", + "name": "Polygon", + "coinpaprika_id": "matic-matic-network", + "coingecko_id": "matic-network", + "nomics_id": "MATIC", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "MCL": { "coin": "MCL", "name": "Marmara Credit Loops", @@ -3601,6 +3725,21 @@ "active": false, "currently_enabled": false }, + "PAX-KRC20": { + "coin": "PAX-KRC20", + "name": "Paxos Standard", + "coinpaprika_id": "pax-paxos-standard-token", + "coingecko_id": "paxos-standard", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "PAX-PLG20": { "coin": "PAX-PLG20", "name": "Paxos Standard", @@ -4263,10 +4402,11 @@ "name": "Atomic Wallet Coin" }, "BAT-AVX20": { - "coin": "BAT-AVX20", - "name": "Basic Attention Token", - "coinpaprika_id": "bat-basic-attention-token", - "coingecko_id": "basic-attention-token", + "coin": "BAT-AVX20", + "name": "Basic Attention Token", + "coinpaprika_id": "bat-basic-attention-token", + "coingecko_id": "basic-attention-token", + "nomics_id": "BAT", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -4282,6 +4422,7 @@ "name": "Basic Attention Token", "coinpaprika_id": "bat-basic-attention-token", "coingecko_id": "basic-attention-token", + "nomics_id": "BAT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -4299,6 +4440,7 @@ "name": "Basic Attention Token", "coinpaprika_id": "bat-basic-attention-token", "coingecko_id": "basic-attention-token", + "nomics_id": "BAT", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4311,11 +4453,28 @@ "active": false, "currently_enabled": false }, + "BAT-KRC20": { + "coin": "BAT-KRC20", + "name": "Basic Attention Token", + "coinpaprika_id": "bat-basic-attention-token", + "coingecko_id": "basic-attention-token", + "nomics_id": "BAT", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "BAT-PLG20": { "coin": "BAT-PLG20", "name": "Basic Attention Token", "coinpaprika_id": "bat-basic-attention-token", "coingecko_id": "basic-attention-token", + "nomics_id": "BAT", "nodes": [ "https://polygon-rpc.com" ], @@ -4500,6 +4659,22 @@ "active": false, "currently_enabled": false }, + "LINK-KRC20": { + "coin": "LINK-KRC20", + "name": "Chainlink", + "coinpaprika_id": "link-chainlink", + "coingecko_id": "chainlink", + "nomics_id": "LINK", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "LINK-PLG20": { "coin": "LINK-PLG20", "name": "Chainlink", @@ -4718,6 +4893,40 @@ ], "type": "QRC-20" }, + "QNT-ERC20": { + "coin": "QNT-ERC20", + "name": "Quant", + "coinpaprika_id": "qnt-quant", + "coingecko_id": "quant-network", + "nomics_id": "QNT", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "QNT-KRC20": { + "coin": "QNT-KRC20", + "name": "Quant", + "coinpaprika_id": "qnt-quant", + "coingecko_id": "quant-network", + "nomics_id": "QNT", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "REVS": { "coin": "REVS", "name": "REVS", @@ -5009,6 +5218,7 @@ "name": "Sushi", "coinpaprika_id": "sushi-sushi", "coingecko_id": "sushi", + "nomics_id": "SUSHI", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -5024,6 +5234,7 @@ "name": "Sushi", "coinpaprika_id": "sushi-sushi", "coingecko_id": "sushi", + "nomics_id": "SUSHI", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -5041,6 +5252,7 @@ "name": "Sushi", "coinpaprika_id": "sushi-sushi", "coingecko_id": "sushi", + "nomics_id": "SUSHI", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -5058,6 +5270,7 @@ "name": "Sushi", "coinpaprika_id": "sushi-sushi", "coingecko_id": "sushi", + "nomics_id": "SUSHI", "nodes": [ "https://rpc.ftm.tools/" ], @@ -5073,6 +5286,7 @@ "name": "Sushi", "coinpaprika_id": "sushi-sushi", "coingecko_id": "sushi", + "nomics_id": "SUSHI", "nodes": [ "https://api.harmony.one", "https://api.s0.t.hmny.io" @@ -5084,11 +5298,28 @@ "active": false, "currently_enabled": false }, + "SUSHI-KRC20": { + "coin": "SUSHI-KRC20", + "name": "Sushi", + "coinpaprika_id": "sushi-sushi", + "coingecko_id": "sushi", + "nomics_id": "SUSHI", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "SUSHI-PLG20": { "coin": "SUSHI-PLG20", "name": "Sushi", "coinpaprika_id": "sushi-sushi", "coingecko_id": "sushi", + "nomics_id": "SUSHI", "nodes": [ "https://polygon-rpc.com" ], @@ -5197,6 +5428,7 @@ "name": "Maker", "coinpaprika_id": "mkr-maker", "coingecko_id": "maker", + "nomics_id": "MKR", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -5212,6 +5444,7 @@ "name": "Maker", "coinpaprika_id": "mkr-maker", "coingecko_id": "maker", + "nomics_id": "MKR", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -5229,6 +5462,7 @@ "name": "Maker", "coinpaprika_id": "mkr-maker", "coingecko_id": "maker", + "nomics_id": "MKR", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -5241,6 +5475,22 @@ "active": false, "currently_enabled": false }, + "MKR-KRC20": { + "coin": "MKR-KRC20", + "name": "Maker", + "coinpaprika_id": "mkr-maker", + "coingecko_id": "maker", + "nomics_id": "MKR", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "MONA": { "coin": "MONA", "name": "MonaCoin", @@ -5325,6 +5575,22 @@ "active": false, "currently_enabled": false }, + "NEXO-KRC20": { + "coin": "NEXO-KRC20", + "name": "Nexo", + "coinpaprika_id": "nexo-nexo", + "coingecko_id": "nexo", + "nomics_id": "NEXO", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "NEXO-PLG20": { "coin": "NEXO-PLG20", "name": "Nexo", @@ -5643,6 +5909,7 @@ "name": "Synthetix", "coinpaprika_id": "snx-synthetix-network-token", "coingecko_id": "havven", + "nomics_id": "SNX", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -5658,6 +5925,7 @@ "name": "Synthetix", "coinpaprika_id": "snx-synthetix-network-token", "coingecko_id": "havven", + "nomics_id": "SNX", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -5675,6 +5943,7 @@ "name": "Synthetix", "coinpaprika_id": "snx-synthetix-network-token", "coingecko_id": "havven", + "nomics_id": "SNX", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -5692,6 +5961,7 @@ "name": "Synthetix", "coinpaprika_id": "snx-synthetix-network-token", "coingecko_id": "havven", + "nomics_id": "SNX", "nodes": [ "https://rpc.ftm.tools/" ], @@ -5702,11 +5972,28 @@ "active": false, "currently_enabled": false }, + "SNX-KRC20": { + "coin": "SNX-KRC20", + "name": "Synthetix", + "coinpaprika_id": "snx-synthetix-network-token", + "coingecko_id": "havven", + "nomics_id": "SNX", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "SNX-PLG20": { "coin": "SNX-PLG20", "name": "Synthetix", "coinpaprika_id": "snx-synthetix-network-token", "coingecko_id": "havven", + "nomics_id": "SNX", "nodes": [ "https://polygon-rpc.com" ], @@ -5737,6 +6024,56 @@ "active": false, "currently_enabled": false }, + "TEL-ERC20": { + "coin": "TEL-ERC20", + "name": "Telcoin", + "coinpaprika_id": "tel-telcoin", + "coingecko_id": "telcoin", + "nomics_id": "TEL", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "TEL-PLG20": { + "coin": "TEL-PLG20", + "name": "Telcoin", + "coinpaprika_id": "tel-telcoin", + "coingecko_id": "telcoin", + "nomics_id": "TEL", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false + }, + "TEL-KRC20": { + "coin": "TEL-KRC20", + "name": "Telcoin", + "coinpaprika_id": "tel-telcoin", + "coingecko_id": "telcoin", + "nomics_id": "TEL", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "THC": { "coin": "THC", "name": "HempCoin", @@ -5922,6 +6259,21 @@ "active": false, "currently_enabled": false }, + "TUSD-KRC20": { + "coin": "TUSD-KRC20", + "name": "TrueUSD", + "coinpaprika_id": "tusd-trueusd", + "coingecko_id": "true-usd", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "TUSD-PLG20": { "coin": "TUSD-PLG20", "name": "TrueUSD", @@ -6382,10 +6734,11 @@ "currently_enabled": false }, "YFI-AVX20": { - "coin": "YFI-AVX20", - "name": "yearn.finance", - "coinpaprika_id": "yfi-yearnfinance", - "coingecko_id": "yearn-finance", + "coin": "YFI-AVX20", + "name": "yearn.finance", + "coinpaprika_id": "yfi-yearnfinance", + "coingecko_id": "yearn-finance", + "nomics_id": "YFI", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -6401,6 +6754,7 @@ "name": "yearn.finance", "coinpaprika_id": "yfi-yearnfinance", "coingecko_id": "yearn-finance", + "nomics_id": "YFI", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -6418,6 +6772,7 @@ "name": "yearn.finance", "coinpaprika_id": "yfi-yearnfinance", "coingecko_id": "yearn-finance", + "nomics_id": "YFI", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -6435,6 +6790,7 @@ "name": "yearn.finance", "coinpaprika_id": "yfi-yearnfinance", "coingecko_id": "yearn-finance", + "nomics_id": "YFI", "nodes": [ "https://rpc.ftm.tools/" ], @@ -6445,6 +6801,22 @@ "active": false, "currently_enabled": false }, + "YFI-KRC20": { + "coin": "YFI-KRC20", + "name": "yearn.finance", + "coinpaprika_id": "yfi-yearnfinance", + "coingecko_id": "yearn-finance", + "nomics_id": "YFI", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "YFII-BEP20": { "coin": "YFII-BEP20", "name": "DFI.Money", @@ -6984,6 +7356,7 @@ "name": "chiliZ", "coinpaprika_id": "chz-chiliz", "coingecko_id": "chiliz", + "nomics_id": "CHZ", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -6996,11 +7369,28 @@ "active": false, "currently_enabled": false }, + "CHZ-KRC20": { + "coin": "CHZ-KRC20", + "name": "chiliZ", + "coinpaprika_id": "chz-chiliz", + "coingecko_id": "chiliz", + "nomics_id": "CHZ", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "CHZ-PLG20": { "coin": "CHZ-PLG20", "name": "chiliZ", "coinpaprika_id": "chz-chiliz", "coingecko_id": "chiliz", + "nomics_id": "CHZ", "nodes": [ "https://polygon-rpc.com" ], @@ -7029,6 +7419,22 @@ "active": false, "currently_enabled": false }, + "CRO-KRC20": { + "coin": "CRO-KRC20", + "name": "Crypto.com", + "coinpaprika_id": "cro-cryptocom-chain", + "coingecko_id": "crypto-com-chain", + "nomics_id": "CRO", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "CRO-PLG20": { "coin": "CRO-PLG20", "name": "Crypto.com", @@ -7050,6 +7456,7 @@ "name": "Curve DAO Token", "coinpaprika_id": "crv-curve-dao-token", "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7067,6 +7474,7 @@ "name": "Curve DAO Token", "coinpaprika_id": "crv-curve-dao-token", "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -7082,6 +7490,7 @@ "name": "Curve DAO Token", "coinpaprika_id": "crv-curve-dao-token", "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", "nodes": [ "https://rpc.ftm.tools/" ], @@ -7092,11 +7501,28 @@ "active": false, "currently_enabled": false }, + "CRV-KRC20": { + "coin": "CRV-KRC20", + "name": "Curve DAO Token", + "coinpaprika_id": "crv-curve-dao-token", + "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "CRV-PLG20": { "coin": "CRV-PLG20", "name": "Curve DAO Token", "coinpaprika_id": "crv-curve-dao-token", "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", "nodes": [ "https://polygon-rpc.com" ], @@ -7180,6 +7606,7 @@ "name": "Enjin Coin", "coinpaprika_id": "enj-enjin-coin", "coingecko_id": "enjincoin", + "nomics_id": "ENJ", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7192,11 +7619,28 @@ "active": false, "currently_enabled": false }, + "ENJ-KRC20": { + "coin": "ENJ-KRC20", + "name": "Enjin Coin", + "coinpaprika_id": "enj-enjin-coin", + "coingecko_id": "enjincoin", + "nomics_id": "ENJ", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "ENJ-PLG20": { "coin": "ENJ-PLG20", "name": "Enjin Coin", "coinpaprika_id": "enj-enjin-coin", "coingecko_id": "enjincoin", + "nomics_id": "ENJ", "nodes": [ "https://polygon-rpc.com" ], @@ -7403,6 +7847,21 @@ "active": false, "currently_enabled": false }, + "HUSD-KRC20": { + "coin": "HUSD-KRC20", + "name": "HUSD", + "coinpaprika_id": "husd-husd", + "coingecko_id": "husd", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "HUSD-PLG20": { "coin": "HUSD-PLG20", "name": "HUSD", @@ -7487,6 +7946,7 @@ "name": "Decentraland", "coinpaprika_id": "mana-decentraland", "coingecko_id": "decentraland", + "nomics_id": "MANA", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7499,11 +7959,28 @@ "active": false, "currently_enabled": false }, + "MANA-KRC20": { + "coin": "MANA-KRC20", + "name": "Decentraland", + "coinpaprika_id": "mana-decentraland", + "coingecko_id": "decentraland", + "nomics_id": "MANA", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "MANA-PLG20": { "coin": "MANA-PLG20", "name": "Decentraland", "coinpaprika_id": "mana-decentraland", "coingecko_id": "decentraland", + "nomics_id": "MANA", "nodes": [ "https://polygon-rpc.com" ], @@ -7599,23 +8076,6 @@ "active": false, "currently_enabled": false }, - "QNT": { - "coin": "QNT", - "name": "Quant", - "coinpaprika_id": "qnt-quant", - "coingecko_id": "quant-network", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false - }, "REP": { "coin": "REP", "name": "Reputation", @@ -8025,6 +8485,21 @@ "active": false, "currently_enabled": false }, + "UNI-KRC20": { + "coin": "UNI-KRC20", + "name": "Uniswap", + "coinpaprika_id": "uni-uniswap", + "coingecko_id": "uniswap", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false + }, "UNI-PLG20": { "coin": "UNI-PLG20", "name": "Uniswap", diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 8c3b405754..dbba558192 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -1923,6 +1923,16 @@ QtObject { "SYS/UST": "BINANCE:SYSUSD", "SYS/DAI": "BINANCE:SYSUSD", "SYS/PAX": "BINANCE:SYSUSD", + "TEL/BTC": "KUCOIN:TELBTC", + "TEL/ETH": "KUCOIN:TELETH", + "TEL/USDT": "KUCOIN:TELUSDT", + "TEL/BUSD": "KUCOIN:TELUSDT", + "TEL/USDC": "KUCOIN:TELUSDT", + "TEL/TUSD": "KUCOIN:TELUSDT", + "TEL/HUSD": "KUCOIN:TELUSDT", + "TEL/UST": "KUCOIN:TELUSDT", + "TEL/DAI": "KUCOIN:TELUSDT", + "TEL/PAX": "KUCOIN:TELUSDT", "TMTG/BTC": "OKEX:TMTGBTC", "TMTG/USDT": "OKEX:TMTGUSDT", "TRAC/BTC": "KUCOIN:TRACBTC", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 3b03379a2c..ce1b9fef48 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -459,6 +459,7 @@ QtObject { "STORJ": "#2683FF", "SXP": "#FD5F3B", "SYS": "#0084C7", + "TEL": "#1BD8FF", "TKL": "#1E2835", "TRC": "#096432", "TRX": "#F30031", diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index 0b360b3d13..50bff586e7 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -223,6 +223,7 @@ assets/images/coins/sys.png assets/images/coins/tblk.png assets/images/coins/tbtc.png + assets/images/coins/tel.png assets/images/coins/thc.png assets/images/coins/thx.png assets/images/coins/tkl.png From d17df585049291178ca73e9362c84114663f4ef2 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 8 Nov 2021 00:29:08 +0000 Subject: [PATCH 090/139] more nomics_ids --- assets/config/0.5.2-coins.json | 14 +++++++++++++- atomic_defi_design/Dex/Constants/Style.qml | 1 + .../assets/images/coins/lstr.png | Bin 3986 -> 12116 bytes 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 4d373d9970..bddb34fd38 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -4886,6 +4886,7 @@ "name": "QiSwap", "coingecko_id": "qiswap", "coinpaprika_id": "qi-qiswap", + "nomics_id": "QI", "active": false, "currently_enabled": false, "explorer_url": [ @@ -5769,6 +5770,7 @@ "name": "Qtum", "coinpaprika_id": "qtum-qtum", "coingecko_id": "qtum", + "nomics_id": "QTUM", "electrum": [ { "url": "electrum1.cipig.net:10050", @@ -5795,6 +5797,7 @@ "name": "Qtum", "coinpaprika_id": "qtum-qtum", "coingecko_id": "qtum", + "nomics_id": "QTUM", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7092,6 +7095,7 @@ "name": "Ink", "coingecko_id": "ink", "coinpaprika_id": "ink-ink", + "nomics_id": "INK", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7102,8 +7106,9 @@ "SPC": { "coin": "SPC", "name": "SpaceChain", - "coingecko_id": "spacechain", + "coingecko_id": "spacechain-erc-20", "coinpaprika_id": "spc-spacechain", + "nomics_id": "SPC", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7116,6 +7121,7 @@ "name": "Hyper Pay", "coingecko_id": "hyper-pay", "coinpaprika_id": "hpy-hyper-pay", + "nomics_id": "HPY", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7128,6 +7134,7 @@ "name": "HalalChain", "coingecko_id": "halalchain", "coinpaprika_id": "hlc-halalchain", + "nomics_id": "HLC", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7140,6 +7147,7 @@ "name": "Luna Stars", "coingecko_id": "meetluna", "coinpaprika_id": "lstr-luna-stars", + "nomics_id": "LSTR", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7152,6 +7160,7 @@ "name": "Qbao", "coingecko_id": "qbao", "coinpaprika_id": "qbt-qbao", + "nomics_id": "QBT", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7164,6 +7173,7 @@ "name": "OceanChain", "coingecko_id": "oceanchain", "coinpaprika_id": "oc-oceanchain", + "nomics_id": "OC", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7176,6 +7186,7 @@ "name": "Profile Utility Token", "coingecko_id": "profile-utility-token", "coinpaprika_id": "put-profile-utility-token", + "nomics_id": "PUT", "active": false, "currently_enabled": false, "explorer_url": [ @@ -7188,6 +7199,7 @@ "name": "Energo", "coingecko_id": "energo", "coinpaprika_id": "tsl-energo", + "nomics_id": "TSL", "active": false, "currently_enabled": false, "explorer_url": [ diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index ce1b9fef48..c3d04dd001 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -430,6 +430,7 @@ QtObject { "LEO": "#F79B2C", "LINK": "#356CE4", "LRC": "#32C2F8", + "LSTR": "#7E3193", "MANA": "#FF3C6C", "MATIC": "#804EE1", "MKR": "#1BAF9F", diff --git a/atomic_defi_design/assets/images/coins/lstr.png b/atomic_defi_design/assets/images/coins/lstr.png index 7fbd6768233a8355bfdd968777ed42648ea7f0f8..7c50bb68dea9dfb101f7306787cf37549c752d96 100644 GIT binary patch literal 12116 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 From 1c6d0b3aa04b1b364deb9fb8c582751c82622e70 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 8 Nov 2021 02:43:39 +0000 Subject: [PATCH 091/139] update icon --- atomic_defi_design/Dex/Constants/General.qml | 2 ++ atomic_defi_design/Dex/Constants/Style.qml | 2 +- .../assets/images/coins/qnt.png | Bin 2108 -> 7464 bytes 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index dbba558192..95f92d0340 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -1724,6 +1724,7 @@ QtObject { "QKC/DAI": "BINANCE:QKCUSD", "QKC/PAX": "BINANCE:QKCUSD", "QNT/BTC": "BITTREX:QNTBTC", + "QNT/ETH": "BITTREX:QNTETH", "QNT/USDT": "BITTREX:QNTUSD", "QNT/BUSD": "BITTREX:QNTUSD", "QNT/USDC": "BITTREX:QNTUSD", @@ -1732,6 +1733,7 @@ QtObject { "QNT/UST": "BITTREX:QNTUSD", "QNT/DAI": "BITTREX:QNTUSD", "QNT/PAX": "BITTREX:QNTUSD", + "QNT/BNB": "BINANCE:QNTBNB", "QTUM/BTC": "BINANCE:QTUMBTC", "QTUM/ETH": "BINANCE:QTUMETH", "QTUM/USDT": "BINANCE:QTUMUSD", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index c3d04dd001..c93259c085 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -445,7 +445,7 @@ QtObject { "QI": "#FFFFFF", "QIAIR": "#FEFEFE", "QKC": "#2175B4", - "QNT": "#46DDC8", + "QNT": "#000000", "REP": "#0E0E21", "REV": "#78034D", "RLC": "#FFE100", diff --git a/atomic_defi_design/assets/images/coins/qnt.png b/atomic_defi_design/assets/images/coins/qnt.png index cb9543f99b7e8f9b389a627ecb5fd1f848727d1c..1496985feeacfbf1d1118f3e086baa6f7747bfbe 100644 GIT binary patch literal 7464 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 Date: Mon, 8 Nov 2021 10:30:19 +0100 Subject: [PATCH 092/139] Adjust startup screen style --- .../Dex/Components/DexAppPasswordField.qml | 46 ++-- .../Dex/Components/DexAppTextField.qml | 4 +- .../Dex/Components/DexKeyChecker.qml | 6 +- .../Dex/Components/SetupPage.qml | 3 +- .../Dex/Screens/Startup/Logging.qml | 2 + .../Dex/Screens/Startup/Login.qml | 231 ++++-------------- .../Dex/Screens/Startup/Main.qml | 7 +- .../Dex/Screens/Startup/NewWallet.qml | 1 - .../Dex/Screens/Startup/WalletsView.qml | 157 +----------- atomic_defi_design/Dex/main.qml | 5 +- 10 files changed, 98 insertions(+), 364 deletions(-) diff --git a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml index ad465431a2..aac6faa126 100644 --- a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml +++ b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml @@ -1,15 +1,19 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Window 2.15 -import Qaterial 1.0 as Qaterial -import App 1.0 +import Qaterial 1.0 as Qaterial -DexAppTextField { +import App 1.0 +import Dex.Themes 1.0 as Dex +DexAppTextField +{ id: _inputPassword property string leftIcon: Qaterial.Icons.keyVariant + property color leftIconColor: Dex.CurrentTheme.foregroundColor + property alias hideFieldButton: _hideFieldButton height: 50 width: 300 @@ -27,38 +31,44 @@ DexAppTextField { field.leftPadding: 75 field.rightPadding: 60 field.placeholderText: qsTr("Type password") - DexRectangle { + + DefaultRectangle + { x: 5 height: 40 width: 60 radius: 20 color: _inputPassword.field.focus ? _inputPassword.background.border.color : DexTheme.accentColor anchors.verticalCenter: parent.verticalCenter - Qaterial.ColorIcon { + Qaterial.ColorIcon + { anchors.centerIn: parent iconSize: 19 - color: DexTheme.backgroundColor + color: leftIconColor source: _inputPassword.leftIcon } - } - Qaterial.AppBarButton { + + Qaterial.AppBarButton + { + id: _hideFieldButton + opacity: .8 - icon { + icon + { source: _inputPassword.field.echoMode === TextField.Password ? Qaterial.Icons.eyeOffOutline : Qaterial.Icons.eyeOutline - color: _inputPassword.field.focus ? _inputPassword.background.border.color : DexTheme.accentColor + color: Dex.CurrentTheme.foregroundColor } - anchors { + anchors + { verticalCenter: parent.verticalCenter right: parent.right rightMargin: 10 } - onClicked: { - if (_inputPassword.field.echoMode === TextField.Password) { - _inputPassword.field.echoMode = TextField.Normal - } else { - _inputPassword.field.echoMode = TextField.Password - } + onClicked: + { + if (_inputPassword.field.echoMode === TextField.Password) _inputPassword.field.echoMode = TextField.Normal; + else _inputPassword.field.echoMode = TextField.Password; } } -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Components/DexAppTextField.qml b/atomic_defi_design/Dex/Components/DexAppTextField.qml index 7d522d98d4..6284129b01 100644 --- a/atomic_defi_design/Dex/Components/DexAppTextField.qml +++ b/atomic_defi_design/Dex/Components/DexAppTextField.qml @@ -97,7 +97,7 @@ Item { anchors.topMargin: 1 anchors.bottomMargin: 1 radius: _background.radius - color: DexTheme.surfaceColor + color: background.color DexTextField { id: input_field onTextChanged: { @@ -144,4 +144,4 @@ Item { } } } -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Components/DexKeyChecker.qml b/atomic_defi_design/Dex/Components/DexKeyChecker.qml index ad4d706cd2..437caadbc9 100644 --- a/atomic_defi_design/Dex/Components/DexKeyChecker.qml +++ b/atomic_defi_design/Dex/Components/DexKeyChecker.qml @@ -7,8 +7,8 @@ import App 1.0 ColumnLayout { id: control - property - var field + + property var field property bool hide_hint: false property bool new_password: true property bool double_validation: false @@ -107,4 +107,4 @@ ColumnLayout { color: hintColor(passwordsDoMatch()) } } -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Components/SetupPage.qml b/atomic_defi_design/Dex/Components/SetupPage.qml index d96058cb4d..b97a0a03ff 100644 --- a/atomic_defi_design/Dex/Components/SetupPage.qml +++ b/atomic_defi_design/Dex/Components/SetupPage.qml @@ -16,6 +16,7 @@ Item property alias content: inner_space.sourceComponent property alias bottom_content: bottom_content.sourceComponent property double image_margin: 5 + property color backgroundColor: Dex.CurrentTheme.floatingBackgroundColor ColumnLayout { @@ -49,7 +50,7 @@ Item background: DefaultRectangle { radius: 20 - color: Dex.CurrentTheme.floatingBackgroundColor + color: _control.backgroundColor } contentChildren: Loader diff --git a/atomic_defi_design/Dex/Screens/Startup/Logging.qml b/atomic_defi_design/Dex/Screens/Startup/Logging.qml index bfa5a29894..81c63ff6d0 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Logging.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Logging.qml @@ -16,6 +16,8 @@ SetupPage image_path: Dex.CurrentTheme.bigLogoPath image_margin: 30 + backgroundColor: 'transparent' + content: ColumnLayout { DefaultBusyIndicator diff --git a/atomic_defi_design/Dex/Screens/Startup/Login.qml b/atomic_defi_design/Dex/Screens/Startup/Login.qml index 8b5efb553e..0e4a6c7846 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Login.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Login.qml @@ -40,215 +40,82 @@ SetupPage image_scale: 0.7 - image_path: General.image_path + "setup-logs.svg" + backgroundColor: 'transparent' + image_path: Dex.CurrentTheme.bigLogoPath content: ColumnLayout { - spacing: Style.rowSpacing + id: content - function reset() - { - login.reset() - input_password.reset() - } + spacing: 20 - function trySubmit() + DexLabel { - if (!submit_button.enabled) return - - if (onClickedLogin(input_password.field.text)) reset() + Layout.alignment: Qt.AlignHCenter + text: "%1 wallet".arg(walletName) + color: Dex.CurrentTheme.foregroundColor + font: DexTypo.body1 + topPadding: 10 } - width: 400 - - RowLayout + DexAppPasswordField { - Layout.fillWidth: true - spacing: 10 - Qaterial.AppBarButton + id: _inputPassword + Layout.alignment: Qt.AlignHCenter + height: 50 + width: 300 + background.color: Dex.CurrentTheme.floatingBackgroundColor + field.onAccepted: { - icon.source: Qaterial.Icons.arrowLeft - Layout.alignment: Qt.AlignVCenter - onClicked: + if (_keyChecker.isValid()) { - reset() - backClicked() + onClickedLogin(field.text) + } + else + { + _keyChecker.visible = true } } - DefaultText - { - font: DexTypo.head6 - text_value: qsTr("Login") - Layout.alignment: Qt.AlignVCenter - } - + leftIconColor: Dex.CurrentTheme.foregroundColor + hideFieldButton.icon.color: Dex.CurrentTheme.foregroundColor } - Item + DexKeyChecker { - Layout.fillWidth: true - Layout.preferredHeight: 5 + id: _passwordChecker + visible: false + field: _inputPassword.field } - DexAppTextField + DefaultButton { - Layout.fillWidth: true - Layout.preferredHeight: 50 - background.border.width: 1 - background.radius: 25 - enabled: false - opacity: enabled ? 1 : .5 - background.border.color: Dex.CurrentTheme.accentColor - field.font: DexTypo.head6 - field.horizontalAlignment: Qt.AlignLeft - field.leftPadding: 75 - field.text: walletName - - DefaultRectangle - { - x: 5 - height: 40 - width: 60 - radius: 20 - color: Dex.CurrentTheme.accentColor - anchors.verticalCenter: parent.verticalCenter - Qaterial.ColorIcon - { - anchors.centerIn: parent - iconSize: 19 - source: Qaterial.Icons.account - color: Dex.CurrentTheme.foregroundColor - } - - } + Layout.alignment: Qt.AlignHCenter + radius: width + width: 150 + text: qsTr("connect") + enabled: _passwordChecker.isValid() + onClicked: _inputPassword.field.accepted() } - Item + DexKeyChecker { - Layout.fillWidth: true - Layout.preferredHeight: 5 - opacity: .8 - } - - DexAppTextField { - id: _inputPassword - Layout.fillWidth: true - Layout.preferredHeight: 50 - background.border.width: 1 - background.radius: 25 - background.border.color: field.focus ? DexTheme.accentColor : Style.colorBorder - field.echoMode: TextField.Password - field.font: field.echoMode === TextField.Password ? field.text === "" ? DexTypo.body1 : DexTypo.head5 : DexTypo.head6 - field.horizontalAlignment: Qt.AlignLeft - field.leftPadding: 75 - field.placeholderText: qsTr("Type password") - field.onAccepted: trySubmit() - DexRectangle - { - x: 5 - height: 40 - width: 60 - radius: 20 - color: DexTheme.accentColor - anchors.verticalCenter: parent.verticalCenter - Qaterial.ColorIcon - { - anchors.centerIn: parent - iconSize: 19 - source: Qaterial.Icons.keyVariant - color: DexTheme.surfaceColor - } - } - Qaterial.AppBarButton - { - opacity: .8 - icon - { - source: _inputPassword.field.echoMode === TextField.Password ? Qaterial.Icons.eyeOutline : Qaterial.Icons.eyeOffOutline - color: DexTheme.accentColor - } - anchors - { - verticalCenter: parent.verticalCenter - right: parent.right - rightMargin: 10 - } - onClicked: - { - if (_inputPassword.field.echoMode === TextField.Password) _inputPassword.field.echoMode = TextField.Normal - else _inputPassword.field.echoMode = TextField.Password - } - } - } - PasswordForm { - id: input_password - confirm: false + Layout.alignment: Qt.AlignHCenter + id: _keyChecker + field: _inputPassword.field visible: false - field.text: _inputPassword.field.text - field.onAccepted: trySubmit() - } - Item { - Layout.fillWidth: true - Layout.preferredHeight: 10 - } - - RowLayout { - Layout.preferredWidth: 400 - spacing: Style.buttonSpacing - - Item { - Layout.fillWidth: true - Layout.preferredHeight: 10 - } - - DefaultButton { - id: _back - text: qsTr("Back") - visible: false - - } - - DexAppButton - { - id: submit_button - text: qsTr("Login") - enabled: input_password.isValid() - onClicked: trySubmit() - radius: 20 - Layout.preferredWidth: _nextRow.implicitWidth + 40 - Layout.preferredHeight: 45 - label.color: 'transparent' - - Row - { - id: _nextRow - - anchors.centerIn: parent - spacing: 10 - opacity: submit_button.enabled ? 1 : .6 - - DexLabel - { - text: qsTr("Connect") - font: DexTypo.button - anchors.verticalCenter: parent.verticalCenter - } - Qaterial.ColorIcon - { - anchors.verticalCenter: parent.verticalCenter - source: Qaterial.Icons.arrowRight - iconSize: 14 - } - } - } } - DefaultText + Qaterial.AppBarButton { - text_value: text_error - color: Dex.CurrentTheme.noColor - visible: text !== '' + Layout.alignment: Qt.AlignHCenter + width: 80 + icon.width: 40 + icon.height: 40 + icon.source: Qaterial.Icons.close + icon.color: Dex.CurrentTheme.foregroundColor + backgroundColor: 'transparent' + onClicked: backClicked() } } } diff --git a/atomic_defi_design/Dex/Screens/Startup/Main.qml b/atomic_defi_design/Dex/Screens/Startup/Main.qml index 590310389b..32562622a0 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Main.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Main.qml @@ -36,8 +36,11 @@ Item { onNewWalletClicked: currentPage = Main.StartupPage.NewWallet onImportWalletClicked: currentPage = Main.StartupPage.ImportWallet - onLogging: currentPage = Main.StartupPage.Logging - onSelectedWalletChanged: _selectedWalletName = selectedWallet + onWalletSelected: + { + _selectedWalletName = walletName; + currentPage = Main.StartupPage.Login; + } } } diff --git a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml index 59cb2fce15..0924cc84b8 100644 --- a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml @@ -563,7 +563,6 @@ SetupPage { anchors.centerIn: parent font: DexTypo.head6 - color: Dex.CurrentTheme.backgroundColor text: current_word_idx + 1 } diff --git a/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml index 148b0b50a2..1c0e89d8ad 100644 --- a/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml +++ b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml @@ -19,32 +19,12 @@ SetupPage id: _setup property var wallets: API.app.wallet_mgr.get_wallets() - property string selectedWallet signal newWalletClicked() signal importWalletClicked(); - signal logging(); + signal walletSelected(string walletName); - - // Local - function updateWallets() { wallets = API.app.wallet_mgr.get_wallets() } - - function onClickedLogin(password) - { - if (API.app.wallet_mgr.login(password, selectedWallet)) - { - console.log("Success: Login") - app.currentWalletName = selectedWallet - return true - } - else - { - console.log("Failed: Login") - return false - } - } - - image_path: (bottomDrawer.y === 0 && bottomDrawer.visible) ? "" : Dex.CurrentTheme.bigLogoPath + image_path: Dex.CurrentTheme.bigLogoPath image_margin: 30 content: ColumnLayout @@ -52,7 +32,6 @@ SetupPage id: content_column width: 400 spacing: Style.rowSpacing - opacity: (bottomDrawer.y === 0 && bottomDrawer.visible) ? .3 : 1 RowLayout { Layout.fillWidth: true @@ -184,8 +163,7 @@ SetupPage hoverEnabled: true onClicked: { - selectedWallet = model.modelData - bottomDrawer.open() + walletSelected(model.modelData) } } @@ -231,7 +209,7 @@ SetupPage anchors.fill: parent onClicked: { - let wallet_name = model.modelData + let wallet_name = model.modelData; let dialog = app.getText({ "title": qsTr("Delete") + " %1 ".arg(wallet_name) + ("wallet?"), text: qsTr("Enter password to confirm deletion of") + " %1 ".arg(wallet_name) + qsTr("wallet"), @@ -268,8 +246,7 @@ SetupPage dialog.close() dialog.destroy() } - - }) + }); } } } @@ -280,121 +257,6 @@ SetupPage HorizontalLine { } } - bottom_content: LinksRow { visible: !(bottomDrawer.y === 0 && bottomDrawer.visible) } - - Drawer - { - id: bottomDrawer - width: parent.width - height: parent.height - edge: Qt.BottomEdge - dim: false // - modal: false - background: Item - { - DexRectangle - { - id: _drawerBG - anchors.fill: parent - radius: 0 - border.width: 0 - color: 'black' - opacity: .8 - } - Column - { - anchors.bottom: parent.bottom - anchors.bottomMargin: 250 - anchors.horizontalCenter: parent.horizontalCenter - spacing: 20 - Image - { - source: Dex.CurrentTheme.bigLogoPath - anchors.horizontalCenter: parent.horizontalCenter - } - - DexLabel - { - anchors.horizontalCenter: parent.horizontalCenter - text: "%1 wallet".arg(selectedWallet) - color: Dex.CurrentTheme.foregroundColor - font: DexTypo.body1 - topPadding: 10 - } - Connections - { - target: bottomDrawer - function onVisibleChanged() { _inputPassword.field.text = "" } - } - - DexAppPasswordField - { - id: _inputPassword - height: 50 - width: 300 - anchors.horizontalCenter: parent.horizontalCenter - field.onAccepted: - { - if (_keyChecker.isValid()) - { - if (onClickedLogin(field.text)) - { - bottomDrawer.close(); - logging(); - } - else - { - error = true; - } - } - else - { - error = true; - } - } - } - - DexKeyChecker - { - id: _passwordChecker - visible: false - field: _inputPassword.field - } - - DefaultButton - { - radius: width - width: 150 - text: qsTr("connect") - opacity: enabled ? 1 : 0.6 - enabled: _passwordChecker.isValid() - anchors.horizontalCenter: parent.horizontalCenter - onClicked: _inputPassword.field.accepted() - } - - DexKeyChecker - { - id: _keyChecker - field: _inputPassword.field - visible: false - } - } - - Qaterial.AppBarButton - { - anchors.bottom: parent.bottom - anchors.bottomMargin: 60 - anchors.horizontalCenter: parent.horizontalCenter - width: 80 - icon.width: 40 - icon.height: 40 - icon.source: Qaterial.Icons.close - onClicked: bottomDrawer.close() - } - } - - } - GaussianBlur { anchors.fill: _setup @@ -403,13 +265,4 @@ SetupPage radius: 21 deviation: 2 } - - RecursiveBlur - { - visible: bottomDrawer.y === 0 && bottomDrawer.visible - anchors.fill: _setup - source: _setup - radius: 2 - loops: 120 - } } diff --git a/atomic_defi_design/Dex/main.qml b/atomic_defi_design/Dex/main.qml index 87c6dfb8d1..98681ec71d 100644 --- a/atomic_defi_design/Dex/main.qml +++ b/atomic_defi_design/Dex/main.qml @@ -29,10 +29,9 @@ DexWindow minimumWidth: General.minimumWidth minimumHeight: General.minimumHeight - background: DexRectangle + background: DefaultRectangle { - anchors.fill: parent - color: "transparent" + anchors.fill: parent } Universal.background: Dex.CurrentTheme.backgroundColor From 6c3e92646608d5c73adbefa4de0ecd05faa1ecd5 Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 8 Nov 2021 11:48:52 +0100 Subject: [PATCH 093/139] Show dashboard page at init if already logged on This feature is used for QaterialHotReload. When reloading the frontend after already logged in we want to go to the dashboard directly. --- atomic_defi_design/Dex/App.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/App.qml b/atomic_defi_design/Dex/App.qml index 5849cc1217..897a1a3ca6 100644 --- a/atomic_defi_design/Dex/App.qml +++ b/atomic_defi_design/Dex/App.qml @@ -32,7 +32,7 @@ DexRectangle property var notifications_list: _currentPage === App.ScreenType.Dashboard ? loader.item.notifications_list : [] property bool segwit_on: false - property var _currentPage: App.ScreenType.Startup + property var _currentPage: API.app.wallet_mgr.log_status() ? App.ScreenType.Dashboard : App.ScreenType.Startup property var _availablePages: [ _startup, dashboard ] property alias globalGradient: globalGradient From 2c06c7a0d0f2e80daf2a8c37847fcdb5342db095 Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 8 Nov 2021 11:58:22 +0100 Subject: [PATCH 094/139] Sidebar cursor not refreshing when switching page outside of the sidebar --- .../Dex/Dashboard/NotificationsModal.qml | 7 +- .../Dex/Portfolio/AssetsList.qml | 3 +- atomic_defi_design/Dex/Screens/Dashboard.qml | 237 +++++++----------- atomic_defi_design/Dex/Sidebar/Bottom.qml | 4 +- atomic_defi_design/Dex/Sidebar/Center.qml | 13 +- atomic_defi_design/Dex/Sidebar/Line.qml | 2 +- atomic_defi_design/Dex/Sidebar/Main.qml | 28 ++- atomic_defi_design/Dex/Wallet/Wallet.qml | 3 +- 8 files changed, 119 insertions(+), 178 deletions(-) diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index f501aea027..94a95e5b6a 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -7,6 +7,7 @@ import Qaterial 1.0 as Qaterial import "../Constants" import App 1.0 import "../Components" +import "../Screens" DexPopup { id: root @@ -62,10 +63,10 @@ DexPopup { break case "open_wallet_page": api_wallet_page.ticker = notification.params.ticker - dashboard.switchPage(idx_dashboard_wallet) + dashboard.switchPage(Dashboard.PageType.Wallet) break case "open_swaps_page": - dashboard.switchPage(idx_dashboard_exchange) + dashboard.switchPage(Dashboard.PageType.DEX) dashboard.loader.onLoadComplete = () => { dashboard.current_component.current_page = dashboard.isSwapDone(notification.params.new_swap_status) ? idx_exchange_history : idx_exchange_orders @@ -196,7 +197,7 @@ DexPopup { qsTr("Your wallet balance changed"), human_date, "open_wallet_page") - } else { app.segwit_on = false } + } else { app.segwit_on = false } } readonly property string check_internet_connection_text: qsTr("Please check your internet connection (e.g. VPN service or firewall might block it).") diff --git a/atomic_defi_design/Dex/Portfolio/AssetsList.qml b/atomic_defi_design/Dex/Portfolio/AssetsList.qml index 7cf4e3ff15..8270441d03 100644 --- a/atomic_defi_design/Dex/Portfolio/AssetsList.qml +++ b/atomic_defi_design/Dex/Portfolio/AssetsList.qml @@ -4,6 +4,7 @@ import QtQuick.Layouts 1.12 import "../Constants" as Dex import "../Components" as Dex import "../String.js" as DexString +import "../Screens" import App 1.0 as Dex import Dex.Themes 1.0 as Dex @@ -94,7 +95,7 @@ Dex.DefaultListView else { api_wallet_page.ticker = ticker - dashboard.switchPage(idx_dashboard_wallet) + dashboard.switchPage(Dashboard.PageType.Wallet) } } onPressAndHold: diff --git a/atomic_defi_design/Dex/Screens/Dashboard.qml b/atomic_defi_design/Dex/Screens/Dashboard.qml index 8525b55fb9..6aba5a45c6 100644 --- a/atomic_defi_design/Dex/Screens/Dashboard.qml +++ b/atomic_defi_design/Dex/Screens/Dashboard.qml @@ -16,90 +16,77 @@ import "../Support" import "../Sidebar" as Sidebar import "../Fiat" import "../Settings" as SettingsPage +import "../Screens" //import Dex.Sidebar 1.0 as Dex Item { id: dashboard + enum PageType + { + Portfolio, + Wallet, + DEX, // DEX == Trading page + Addressbook, + Support + } + + property var currentPage: Dashboard.PageType.Portfolio + property var availablePages: [portfolio, wallet, exchange, addressbook, support] + property alias webEngineView: webEngineView - readonly property int idx_dashboard_portfolio: 0 - readonly property int idx_dashboard_wallet: 1 - readonly property int idx_dashboard_exchange: 2 - readonly property int idx_dashboard_addressbook: 3 - readonly property int idx_dashboard_news: 4 - readonly property int idx_dashboard_dapps: 5 - readonly property int idx_dashboard_settings: 6 - readonly property int idx_dashboard_support: 7 - readonly property int idx_dashboard_light_ui: 8 - readonly property int idx_dashboard_privacy_mode: 9 - readonly property int idx_dashboard_fiat_ramp: 10 - - //readonly property int idx_exchange_trade: 3 readonly property int idx_exchange_trade: 0 readonly property int idx_exchange_orders: 1 readonly property int idx_exchange_history: 2 property var current_ticker - Layout.fillWidth: true + property var notifications_list: ([]) - function openLogsFolder() { - Qt.openUrlExternally(General.os_file_prefix + API.app.settings_pg.get_log_folder()) - } + readonly property var portfolio_mdl: API.app.portfolio_pg.portfolio_mdl + property var portfolio_coins: portfolio_mdl.portfolio_proxy_mdl - readonly property - var api_wallet_page: API.app.wallet_pg - readonly property - var current_ticker_infos: api_wallet_page.ticker_infos - readonly property bool can_change_ticker: !api_wallet_page.tx_fetching_busy + readonly property var api_wallet_page: API.app.wallet_pg + readonly property var current_ticker_infos: api_wallet_page.ticker_infos + readonly property bool can_change_ticker: !api_wallet_page.tx_fetching_busy + readonly property bool is_dex_banned: !API.app.ip_checker.ip_authorized readonly property alias loader: loader readonly property alias current_component: loader.item - property int current_page: idx_dashboard_portfolio - - onCurrent_pageChanged: { - app.deepPage = current_page * 10 - } - readonly property bool is_dex_banned: !API.app.ip_checker.ip_authorized - - function inCurrentPage() { - return app.current_page === idx_dashboard + function openLogsFolder() + { + Qt.openUrlExternally(General.os_file_prefix + API.app.settings_pg.get_log_folder()) } + function inCurrentPage() { return app.current_page === idx_dashboard } + function switchPage(page) { if (loader.status === Loader.Ready) - current_page = page + currentPage = page else console.warn("Tried to switch to page %1 when loader is not ready yet.".arg(page)) } - property - var notifications_list: ([]) - - readonly property - var portfolio_mdl: API.app.portfolio_pg.portfolio_mdl - property - var portfolio_coins: portfolio_mdl.portfolio_proxy_mdl - - function resetCoinFilter() { - portfolio_coins.setFilterFixedString("") - } - + function resetCoinFilter() { portfolio_coins.setFilterFixedString("") } - function openTradeViewWithTicker() { + function openTradeViewWithTicker() + { dashboard.loader.onLoadComplete = () => { dashboard.current_component.openTradeView(api_wallet_page.ticker) } } + + Layout.fillWidth: true + + onCurrentPageChanged: sidebar.currentLineType = currentPage + // Al settings depends this modal - SettingsPage.SettingModal { - id: setting_modal - } + SettingsPage.SettingModal { id: setting_modal } // Force restart modal: opened when the user has more coins enabled than specified in its configuration ForceRestartModal { @@ -123,132 +110,88 @@ Item { border.color: 'transparent' // Modals - ModalLoader { + ModalLoader + { id: enable_coin_modal - sourceComponent: EnableCoinModal { + sourceComponent: EnableCoinModal + { anchors.centerIn: Overlay.overlay } } - Component { + Component + { id: portfolio Portfolio {} } - Component { + Component + { id: wallet Wallet {} } - Component { + Component + { id: exchange Exchange {} } - Component { + Component + { id: addressbook AddressBook {} } - Component { - id: news - - Item { - Layout.fillWidth: true - Layout.fillHeight: true - DefaultText { - anchors.centerIn: parent - text_value: qsTr("Content for this section will be added later. Stay tuned!") - } - } - } - - Component { - id: dapps - - Item { - Layout.fillWidth: true - Layout.fillHeight: true - DefaultText { - anchors.centerIn: parent - text_value: qsTr("Content for this section will be added later. Stay tuned!") - } - } - } - - Component { + Component + { id: settings - Settings { + Settings + { Layout.alignment: Qt.AlignCenter } } - Component { + Component + { id: support - Support { + Support + { Layout.alignment: Qt.AlignCenter } } - Component { - id: fiat_ramp - - FiatRamp { - - } - } - WebEngineView { id: webEngineView backgroundColor: "transparent" } - DefaultLoader { + DefaultLoader + { id: loader anchors.fill: parent transformOrigin: Item.Center asynchronous: true - sourceComponent: { - switch (current_page) { - case idx_dashboard_portfolio: - return portfolio - case idx_dashboard_wallet: - return wallet - case idx_dashboard_exchange: - return exchange - case idx_dashboard_addressbook: - return addressbook - case idx_dashboard_news: - return news - case idx_dashboard_dapps: - return dapps - case idx_dashboard_settings: - return settings - case idx_dashboard_support: - return support - case idx_dashboard_fiat_ramp: - return fiat_ramp - default: - return undefined - } - } + sourceComponent: availablePages[currentPage] } - Item { + Item + { visible: !loader.visible anchors.fill: parent - DexBusyIndicator { + DexBusyIndicator + { anchors.centerIn: parent running: !loader.visible } @@ -265,53 +208,37 @@ Item { onLineSelected: { isExpanded = true; - switch (lineType) - { - case Sidebar.Main.LineType.Portfolio: - switchPage(idx_dashboard_portfolio); - break; - case Sidebar.Main.LineType.Wallet: - switchPage(idx_dashboard_wallet); - break; - case Sidebar.Main.LineType.DEX: - isExpanded = false; - switchPage(idx_dashboard_exchange); - break; - case Sidebar.Main.LineType.Addressbook: - switchPage(idx_dashboard_addressbook); - break; - case Sidebar.Main.LineType.Portfolio: - switchPage(idx_dashboard_portfolio); - break; - case Sidebar.Main.LineType.Support: - switchPage(idx_dashboard_support); - break; - } + currentPage = lineType; } onSettingsClicked: setting_modal.open() } - ModalLoader { + ModalLoader + { id: add_custom_coin_modal sourceComponent: AddCustomCoinModal {} } // CEX Rates info - ModalLoader { + ModalLoader + { id: cex_rates_modal sourceComponent: CexInfoModal {} } - ModalLoader { + ModalLoader + { id: min_trade_modal sourceComponent: MinTradeModal {} } - ModalLoader { + ModalLoader + { id: restart_modal sourceComponent: RestartModal {} } - function getStatusColor(status) { + function getStatusColor(status) + { switch (status) { case "matching": return Style.colorYellow @@ -327,7 +254,8 @@ Item { } } - function isSwapDone(status) { + function isSwapDone(status) + { switch (status) { case "matching": case "matched": @@ -341,7 +269,8 @@ Item { } } - function getStatusStep(status) { + function getStatusStep(status) + { switch (status) { case "matching": return "0/3" @@ -360,7 +289,8 @@ Item { } } - function getStatusText(status, short_text=false) { + function getStatusText(status, short_text=false) + { switch(status) { case "matching": return short_text ? qsTr("Matching") : qsTr("Order Matching") @@ -379,12 +309,15 @@ Item { } } - function getStatusTextWithPrefix(status, short_text = false) { + function getStatusTextWithPrefix(status, short_text = false) + { return getStatusStep(status) + " " + getStatusText(status, short_text) } - function getEventText(event_name) { - switch (event_name) { + function getEventText(event_name) + { + switch (event_name) + { case "Started": return qsTr("Started") case "Negotiated": diff --git a/atomic_defi_design/Dex/Sidebar/Bottom.qml b/atomic_defi_design/Dex/Sidebar/Bottom.qml index 1e98b02a98..29c8addd86 100644 --- a/atomic_defi_design/Dex/Sidebar/Bottom.qml +++ b/atomic_defi_design/Dex/Sidebar/Bottom.qml @@ -10,7 +10,7 @@ ColumnLayout height: lineHeight * 3 - signal supportLineSelected(var lineObj) + signal supportLineSelected(var lineType) signal settingsClicked() FigurativeLine @@ -33,7 +33,7 @@ ColumnLayout label.text: isExpanded ? qsTr("Support") : "" icon.source: General.image_path + "menu-support-white.png" type: Main.LineType.Support - onClicked: supportLineSelected(this) + onClicked: supportLineSelected(type) DexTooltip { diff --git a/atomic_defi_design/Dex/Sidebar/Center.qml b/atomic_defi_design/Dex/Sidebar/Center.qml index 8008941886..430bcecd1f 100644 --- a/atomic_defi_design/Dex/Sidebar/Center.qml +++ b/atomic_defi_design/Dex/Sidebar/Center.qml @@ -8,13 +8,16 @@ import Dex.Themes 1.0 as Dex Item { - signal lineSelected(Line lineObj) + property alias spacing: _columnLayout.spacing + + signal lineSelected(var lineType) height: lineHeight * 5 // Selection List ColumnLayout { + id: _columnLayout anchors.fill: parent FigurativeLine { @@ -24,7 +27,7 @@ Item type: Main.LineType.Portfolio label.text: isExpanded ? qsTr("Portfolio") : "" icon.source: General.image_path + "menu-assets-portfolio.svg" - onClicked: lineSelected(this) + onClicked: lineSelected(type) DexTooltip { @@ -41,7 +44,7 @@ Item type: Main.LineType.Wallet label.text: isExpanded ? qsTr("Wallet") : "" icon.source: General.image_path + "menu-assets-white.svg" - onClicked: lineSelected(this) + onClicked: lineSelected(type) DexTooltip { @@ -58,7 +61,7 @@ Item type: Main.LineType.DEX label.text: isExpanded ? qsTr("DEX") : "" icon.source: General.image_path + "menu-exchange-white.svg" - onClicked: lineSelected(this) + onClicked: lineSelected(type) DexTooltip { @@ -75,7 +78,7 @@ Item type: Main.LineType.Addressbook label.text: isExpanded ? qsTr("Address Book") : "" icon.source: General.image_path + "menu-news-white.svg" - onClicked: lineSelected(this) + onClicked: lineSelected(type) DefaultTooltip { diff --git a/atomic_defi_design/Dex/Sidebar/Line.qml b/atomic_defi_design/Dex/Sidebar/Line.qml index 06946a30cd..2b3e2740f0 100644 --- a/atomic_defi_design/Dex/Sidebar/Line.qml +++ b/atomic_defi_design/Dex/Sidebar/Line.qml @@ -36,7 +36,7 @@ Item }) style: Text.Normal color: !enabled ? Dex.CurrentTheme.textDisabledColor : - _mouseArea.containsMouse && _currentLineType !== type ? Dex.CurrentTheme.sidebarLineTextHovered : + _mouseArea.containsMouse && currentLineType !== type ? Dex.CurrentTheme.sidebarLineTextHovered : Dex.CurrentTheme.foregroundColor } diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 08e596b96c..936f488a9f 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -10,7 +10,6 @@ Item enum LineType { - None, Portfolio, Wallet, DEX, // DEX == Trading page @@ -20,8 +19,7 @@ Item property bool isExpanded: true property real lineHeight: 44 - - property var _currentLineType: Main.LineType.Portfolio + property var currentLineType: Main.LineType.Portfolio property alias _selectionCursor: _selectionCursor signal lineSelected(var lineType) @@ -49,7 +47,12 @@ Item { id: _selectionCursor - y: center.y + y: + { + if (currentLineType === Main.LineType.Support) return bottom.y + lineHeight + bottom.spacing; + else return center.y + currentLineType * (lineHeight + center.spacing); + } + anchors.right: parent.right radius: 18 width: isExpanded ? 185 : 80 @@ -87,28 +90,27 @@ Item anchors.topMargin: 69.5 onLineSelected: { - if (_currentLineType === lineObj.type) + console.info(lineType) + if (currentLineType === lineType) return; - _currentLineType = lineObj.type; - root.lineSelected(lineObj.type); - _selectionCursor.y = y + lineObj.y; + currentLineType = lineType; + root.lineSelected(lineType); } } Bottom { - id: botton + id: bottom width: parent.width anchors.bottom: parent.bottom anchors.bottomMargin: 62 onSupportLineSelected: { - if (_currentLineType === lineObj.type) + if (currentLineType === lineType) return; - _currentLineType = lineObj.type; - root.lineSelected(lineObj.type); - _selectionCursor.y = y + lineObj.y; + currentLineType = lineType; + root.lineSelected(lineType); } onSettingsClicked: root.settingsClicked() } diff --git a/atomic_defi_design/Dex/Wallet/Wallet.qml b/atomic_defi_design/Dex/Wallet/Wallet.qml index 96141edbb8..7ca50fcc2d 100644 --- a/atomic_defi_design/Dex/Wallet/Wallet.qml +++ b/atomic_defi_design/Dex/Wallet/Wallet.qml @@ -5,6 +5,7 @@ import QtGraphicalEffects 1.0 import "../Components" import "../Constants" +import "../Screens" import App 1.0 RowLayout @@ -22,7 +23,7 @@ RowLayout // Local function onClickedSwap() { - dashboard.switchPage(idx_dashboard_exchange) + dashboard.switchPage(Dashboard.PageType.DEX) dashboard.current_ticker = api_wallet_page.ticker API.app.trading_pg.set_pair(true, api_wallet_page.ticker) } From 48aa583025e750057be186bbb7f74352ff5c3b8e Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 8 Nov 2021 12:03:22 +0100 Subject: [PATCH 095/139] Remove log used for debugging --- atomic_defi_design/Dex/Sidebar/Main.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 936f488a9f..3af0e5b937 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -90,7 +90,6 @@ Item anchors.topMargin: 69.5 onLineSelected: { - console.info(lineType) if (currentLineType === lineType) return; currentLineType = lineType; From 0998e7e30fa83544ca793f11bd065f2570e9db59 Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 8 Nov 2021 12:13:30 +0100 Subject: [PATCH 096/139] Sidebar was not shrunk anymore in DEX mode --- atomic_defi_design/Dex/Sidebar/Main.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 3af0e5b937..fdd1411e24 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -94,6 +94,9 @@ Item return; currentLineType = lineType; root.lineSelected(lineType); + + if (lineType === Main.LineType.DEX) isExpanded = false; + else isExpanded = true; } } From 4aadded206bd2e22976462aa303169a0e0ef0a5d Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 8 Nov 2021 12:13:41 +0100 Subject: [PATCH 097/139] Change sidebar's cursor style --- atomic_defi_design/Dex/Sidebar/Main.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index fdd1411e24..8a86f5568c 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -55,7 +55,7 @@ Item anchors.right: parent.right radius: 18 - width: isExpanded ? 185 : 80 + width: isExpanded ? 185 : 76 height: lineHeight opacity: .7 @@ -64,7 +64,7 @@ Item { orientation: Gradient.Horizontal GradientStop { position: 0.125; color: Dex.CurrentTheme.sidebarCursorStartColor } - GradientStop { position: 0.900; color: Dex.CurrentTheme.sidebarCursorEndColor } + GradientStop { position: 0.933; color: Dex.CurrentTheme.sidebarCursorEndColor } } Behavior on y From 27f3232094b57712762111907891f480732a6b5b Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 8 Nov 2021 12:23:37 +0100 Subject: [PATCH 098/139] Hide sidebar version label when it's shrunk --- atomic_defi_design/Dex/Sidebar/Top.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/atomic_defi_design/Dex/Sidebar/Top.qml b/atomic_defi_design/Dex/Sidebar/Top.qml index 6ed263fe31..dd985c23f1 100644 --- a/atomic_defi_design/Dex/Sidebar/Top.qml +++ b/atomic_defi_design/Dex/Sidebar/Top.qml @@ -13,6 +13,7 @@ DefaultImage DefaultText { + visible: isExpanded anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.bottom anchors.topMargin: 35 From d18efc2fae5732c921ab7a09876a065e3b2193f2 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Tue, 9 Nov 2021 04:49:31 +0100 Subject: [PATCH 099/139] feat(lang): update lang --- .../assets/languages/atomic_defi_en.ts | 617 ++++++++-------- .../assets/languages/atomic_defi_fr.ts | 665 +++++++++--------- .../assets/languages/atomic_defi_ru.ts | 661 +++++++++-------- .../assets/languages/atomic_defi_tr.ts | 659 +++++++++-------- 4 files changed, 1259 insertions(+), 1343 deletions(-) diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index c3da43ce14..1ab3d4698b 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -487,7 +487,7 @@ App - + Recover Funds Result @@ -1228,7 +1228,7 @@ DexAppPasswordField - + Type password @@ -1272,7 +1272,7 @@ DexPaginator - + items per page @@ -1298,7 +1298,7 @@ DexSweetComboBox - + Search @@ -1415,80 +1415,10 @@ - - FirstLaunch - - - Type password - - - - - connect - - - - - Welcome - - - - - New Wallet - - - - - Import wallet - - - - - My Wallets - - - - - - Delete - - - - - Enter password to confirm deletion of - - - - - wallet - - - - - Cancel - Cancel - - - - - Wallet status - - - - - wallet deleted successfully - - - - - wallet password entered is incorrect - - - General - + %n day(s) @@ -1496,7 +1426,7 @@ - + %nd day @@ -1505,7 +1435,7 @@ - + %nh hours @@ -1514,7 +1444,7 @@ - + %nm minutes @@ -1523,7 +1453,7 @@ - + %ns seconds @@ -1532,7 +1462,7 @@ - + %nms milliseconds @@ -1541,66 +1471,66 @@ - + - - + Trading Fee - + Minimum Trading Amount - + Wallet %1 already exists WALLETNAME - + %1 balance is lower than the fees amount: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount - + Please fill the price field - + Please fill the volume field - - + + %1 volume is lower than minimum trade amount - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error @@ -1608,27 +1538,27 @@ Header - + You get - + You send - + Fiat Price - + CEX rate - + Price @@ -1638,7 +1568,7 @@ - + Total @@ -1652,25 +1582,72 @@ - InitialLoading + ImportWallet - - Loading, please wait + + Failed to Import the wallet - - Initializing MM2 + + Import wallet - Setup - - Enabling assets + + Import wallet - Choose password - - Getting ready + + Wallet Name + + + + + + Enter seed + + + + + BIP39 seed validation failed, try again or select 'Allow custom seed' + + + + + Allow custom seed + + + + + <strong>Allow custom seed</strong> + + + + + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. + + + + + + I understand + + + + + Enable + + + + + Next + + + + + Continue @@ -1730,31 +1707,38 @@ - Login + Logging - - Incorrect Password + + Loading, please wait - - Type password + + Initializing MM2 - - Connect + + Enabling assets - - Back + + Getting ready + + + Login - - - Login + + Incorrect Password + + + + + connect @@ -2014,85 +1998,85 @@ - NewUser + NewWallet - + Wrong word, please check again - + Failed to create a wallet - + New Wallet - - Choose Password - - - - - Generated Seed + + Confirm Seed - - Check + + Choose Password - + Important: Back up your seed phrase before proceeding! - + We recommend storing it offline. - - Confirm Seed - - - - - Continue + + Generated Seed - - Let's double check your seed phrase + + Copied to Clipboard - - Copied to Clipboard + + Next - - Next + + Let's double check your seed phrase - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. - + Enter the %n. word + + + Check + + + + + Continue + + NoConnection @@ -2334,7 +2318,7 @@ Right slider: Sets the volume you want to trade. OrderList - + No results found @@ -2466,38 +2450,38 @@ Right slider: Sets the volume you want to trade. OrdersPage - - + + Filter - + Date - + Export CSV - + Apply Filter - + From - + To - + Please choose the CSV export name and location @@ -2577,22 +2561,22 @@ Right slider: Sets the volume you want to trade. - + Show only coins with balance - + (%1/%2) - + Portfolio - + Add asset @@ -2600,38 +2584,38 @@ Right slider: Sets the volume you want to trade. PriceLine - + Set swap price for evaluation - + Exchange rate - + Selected - + Expensive - + Expedient - + %1 compared to CEX PRICE_DIFF% - + CEXchange rate @@ -2678,17 +2662,17 @@ Right slider: Sets the volume you want to trade. ProView - + Failed to place the order - + Placed the order - + Chart @@ -2698,52 +2682,52 @@ Right slider: Sets the volume you want to trade. - + Exchange Rates - + Orders - + History - + Order Book - + Best Orders - + Place Order - + Buy - + Sell - + Order Selected - + Start Swap @@ -2777,131 +2761,61 @@ Right slider: Sets the volume you want to trade. - - RecoverSeed - - - Failed to Import the wallet - - - - - Import wallet - Setup - - - - - Import wallet - Choose password - - - - - Wallet Name - - - - - - Enter seed - - - - - BIP39 seed validation failed, try again or select 'Allow custom seed' - - - - - <strong>Allow custom seed</strong> - - - - - Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. - - - - - - I understand - - - - - Enable - - - - - Next - - - - - Continue - - - - - Allow custom seed - - - RecoverSeedModal - - + + View seed and private keys - + Please enter your password to view the seed. - + Wrong Password - + Cancel Cancel - + View - + Backup seed - + RPC Password - + Search a coin. - + Public Address - + Private Key - + Close @@ -3265,7 +3179,7 @@ Right slider: Sets the volume you want to trade. - + Changing theme to %1 @@ -3296,88 +3210,88 @@ Right slider: Sets the volume you want to trade. - + Ask system's password before sending coins ? (2FA) - + View seed and private keys - - + + Show - + Setup Camouflage Password - + Open - + Disclaimer and ToS - + Application version - + DEX Version - + DEX Version copied to clipboard. - + MM2 version - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version - + Qt Version - + Qt Version copied to clipboard. - + Search Update - + Logout @@ -3474,32 +3388,32 @@ Right slider: Sets the volume you want to trade. SubBestOrder - + Token - + Available Quantity - + Available Quantity (in %1) - + Fiat Volume - + CEX Rate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> @@ -3816,7 +3730,7 @@ Network fees can vary greatly depending on your selected trading pair. SweetDexComboBox - + Search @@ -3886,22 +3800,22 @@ Network fees can vary greatly depending on your selected trading pair. - + MAX - + To - + Pick an order - + Price @@ -3941,70 +3855,70 @@ Network fees can vary greatly depending on your selected trading pair. - + Swap Now - + Failed to place the order - + Placed the order - + Entered amount must be superior than 0. - + You must select an order. - + Entered amount is below the minimum required by this order: %1 - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - - + + Search - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Total %1 fees: - + %2 (%3) @@ -4129,6 +4043,71 @@ Network fees can vary greatly depending on your selected trading pair. + + WalletsView + + + Welcome + + + + + New Wallet + + + + + Import wallet + + + + + My Wallets + + + + + + Delete + + + + + Enter password to confirm deletion of + + + + + wallet + + + + + Type password + + + + + Cancel + Cancel + + + + + Wallet status + + + + + wallet deleted successfully + + + + + wallet password entered is incorrect + + + atomic_dex::wallet_page @@ -4195,32 +4174,32 @@ Network fees can vary greatly depending on your selected trading pair. main - + Logout - + Confirm Logout - + Are you sure you want to log out? - + Yes Yes - + Cancel Cancel - + Balance diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index 6f3d141ecd..51e19feeb5 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -489,7 +489,7 @@ App - + Recover Funds Result Le résultat de la récupération des fonds @@ -1230,7 +1230,7 @@ DexAppPasswordField - + Type password Tapez votre mot de passe @@ -1274,7 +1274,7 @@ DexPaginator - + items per page Nombres d'éléments par page @@ -1300,7 +1300,7 @@ DexSweetComboBox - + Search Rechercher @@ -1417,80 +1417,10 @@ Les frais seront calculés - - FirstLaunch - - - Type password - Tapez votre mot de passe - - - - connect - Connection - - - - Welcome - Bienvenue - - - - New Wallet - Nouveau portefeuille - - - - Import wallet - - - - - My Wallets - Mes portefeuilles - - - - - Delete - Supprimez - - - - Enter password to confirm deletion of - Entrez le mot de passe pour confirmer la suppression de - - - - wallet - portefeuille - - - - Cancel - Annuler - - - - - Wallet status - État du portefeuille - - - - wallet deleted successfully - portefeuille supprimé avec succès - - - - wallet password entered is incorrect - Le mot de passe du portefeuille est incorrect - - General - + %n day(s) %n jour(s) @@ -1498,7 +1428,7 @@ - + %nd day @@ -1507,7 +1437,7 @@ - + %nh hours @@ -1516,7 +1446,7 @@ - + %nm minutes @@ -1525,7 +1455,7 @@ - + %ns seconds @@ -1534,7 +1464,7 @@ - + %nms milliseconds @@ -1543,66 +1473,66 @@ - + - - - + Trading Fee Frais d'échanges - + Minimum Trading Amount Frais d'échange minimum - + Wallet %1 already exists WALLETNAME Le portefeuille %1 existe déjà - + %1 balance is lower than the fees amount: %2 %3 La %1 balance est inférieur aux frais: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Le solde négociable (après frais) %1 est inférieur au montant minimum de la transaction - + Please fill the price field Veuillez remplir le champ de prix - + Please fill the volume field Veuillez remplir le champ de volume - - + + %1 volume is lower than minimum trade amount Le volume de %1 est inférieur au montant minimum de la transaction - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - + Unknown Error Erreur inconnue @@ -1610,27 +1540,27 @@ Header - + You get Vous recevez - + You send Vous envoyez - + Fiat Price Prix fiduciaire - + CEX rate Taux CEX - + Price Prix @@ -1640,7 +1570,7 @@ Quantité - + Total Total @@ -1654,26 +1584,73 @@ - InitialLoading + ImportWallet - - Loading, please wait - Chargement en cours, veuillez patienter + + Failed to Import the wallet + - - Initializing MM2 - Initialisation de MM2 + + Import wallet - Setup + - - Enabling assets - Activer les actifs + + Import wallet - Choose password + - - Getting ready - Chargement + + Wallet Name + Nom du portefeuille + + + + + Enter seed + Entrez la phrase de récupération + + + + BIP39 seed validation failed, try again or select 'Allow custom seed' + Échec de la validation de la phrase de récupération BIP39, réessayez ou sélectionnez ' Autoriser les phrases de récupérations personnalisées' + + + + Allow custom seed + Autoriser les phrases de récupération personnalisées + + + + <strong>Allow custom seed</strong> + + + + + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. + + + + + + I understand + + + + + Enable + Activer + + + + Next + Suivant + + + + Continue + Continuer @@ -1732,32 +1709,39 @@ - Login + Logging - - Incorrect Password - Mot de passe incorrect + + Loading, please wait + Chargement en cours, veuillez patienter - - - Login - Connection + + Initializing MM2 + Initialisation de MM2 - - Type password - Tapez votre mot de passe + + Enabling assets + Activer les actifs - - Back - Retour + + Getting ready + Chargement + + + + Login + + + Incorrect Password + Mot de passe incorrect - - Connect - Connexion + + connect + Connection @@ -2016,85 +2000,85 @@ - NewUser + NewWallet - + Wrong word, please check again - Mauvais mot, veuillez vérifier à nouveau + Mauvais mot, veuillez vérifier à nouveau - + Failed to create a wallet - Impossible de créer un portefeuille + Impossible de créer un portefeuille - - Choose Password - Choisissez un mot de passe + + New Wallet + Nouveau portefeuille - - Important: Back up your seed phrase before proceeding! - Important: sauvegardez votre phrase de recupération avant de continuer ! + + Confirm Seed + Confirmer la phrase de récupération - - We recommend storing it offline. - Nous vous recommandons de le stocker hors ligne. + + Choose Password + Choisissez un mot de passe - - Generated Seed - Générer un Seed + + Important: Back up your seed phrase before proceeding! + Important: sauvegardez votre phrase de recupération avant de continuer ! - - Check - Vérifier + + We recommend storing it offline. + Nous vous recommandons de le stocker hors ligne. - - New Wallet - Nouveau portefeuille + + Generated Seed + Générer un Seed - - Confirm Seed - Confirmer la phrase de récupération + + Copied to Clipboard + Copier dans le presse-papier - - Continue - Continuer + + Next + Suivant - + Let's double check your seed phrase - Vérifions à nouveau votre phrase de récupération - - - - Copied to Clipboard - Copier dans le presse-papier - - - - Next - Suivant + Vérifions à nouveau votre phrase de récupération - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. - Votre phrase de récupération est importante - c'est pourquoi nous aimons nous assurer qu'elle est correcte. Nous vous poserons trois questions différentes au sujet de votre phrase source pour vous assurer que vous pourrez facilement restaurer votre portefeuille à tout moment. + Votre phrase de récupération est importante - c'est pourquoi nous aimons nous assurer qu'elle est correcte. Nous vous poserons trois questions différentes au sujet de votre phrase source pour vous assurer que vous pourrez facilement restaurer votre portefeuille à tout moment. - + Enter the %n. word - + Entrez le mot numéro %n Entrez le mot numéro %n + + + Check + Vérifier + + + + Continue + Continuer + NoConnection @@ -2338,7 +2322,7 @@ Curseur droit : définit le volume que vous souhaitez trader. OrderList - + No results found @@ -2470,38 +2454,38 @@ Curseur droit : définit le volume que vous souhaitez trader. OrdersPage - + From De - + To Vers - + Apply Filter Appliquer les changements - - + + Filter Filtrer - + Date Date - + Export CSV Exporter CSV - + Please choose the CSV export name and location Veuillez choisir le nom et l'emplacement de l'exportation CSV @@ -2581,22 +2565,22 @@ Curseur droit : définit le volume que vous souhaitez trader. - + Show only coins with balance Afficher uniquement les assets avec solde - + (%1/%2) - + Portfolio - + Add asset Ajouter un actif @@ -2604,38 +2588,38 @@ Curseur droit : définit le volume que vous souhaitez trader. PriceLine - + Set swap price for evaluation Définir le prix d'échange pour l'évaluation - + Exchange rate Taux de l'échange - + Selected Choisi - + Expensive Coûteuse - + Expedient Abordable - + %1 compared to CEX PRICE_DIFF% %1 par rapport aux CEX - + CEXchange rate Taux du CEX @@ -2682,17 +2666,17 @@ Curseur droit : définit le volume que vous souhaitez trader. ProView - + Failed to place the order Échec lors du placement de l'ordre - + Placed the order L'ordre a été placé avec succès - + Chart Chart @@ -2702,52 +2686,52 @@ Curseur droit : définit le volume que vous souhaitez trader. Informations de Trading - + Exchange Rates Taux d'échanges - + Orders Ordres - + History Historique - + Order Book Carnet d'ordres - + Best Orders Meilleurs offres - + Place Order Placer l'ordre - + Buy Acheter - + Sell Vendre - + Order Selected Ordre séléctionné - + Start Swap Commencez le swap @@ -2781,131 +2765,61 @@ Curseur droit : définit le volume que vous souhaitez trader. Fermer - - RecoverSeed - - - Failed to Import the wallet - - - - - Import wallet - Setup - - - - - Import wallet - Choose password - - - - - Wallet Name - Nom du portefeuille - - - - - Enter seed - Entrez la phrase de récupération - - - - BIP39 seed validation failed, try again or select 'Allow custom seed' - Échec de la validation de la phrase de récupération BIP39, réessayez ou sélectionnez ' Autoriser les phrases de récupérations personnalisées' - - - - <strong>Allow custom seed</strong> - - - - - Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. - - - - - - I understand - - - - - Enable - Activer - - - - Next - Suivant - - - - Continue - Continuer - - - - Allow custom seed - Autoriser les phrases de récupération personnalisées - - RecoverSeedModal - - + + View seed and private keys Afficher le seed et les clefs privées - + Please enter your password to view the seed. Veuillez entrer votre mot de passe pour voir la phrase de récupération. - + Wrong Password Mauvais mot de passe - + Cancel Annuler - + Backup seed Seed de récuperation - + RPC Password Mot de passe RPC - + Search a coin. Rechercher une asset. - + Public Address Adresse publique - + Private Key Clé privée - + Close Fermer - + View Voir @@ -3270,7 +3184,7 @@ Curseur droit : définit le volume que vous souhaitez trader. Confirmer - + Changing theme to %1 @@ -3295,62 +3209,62 @@ Curseur droit : définit le volume que vous souhaitez trader. Thème - + Ask system's password before sending coins ? (2FA) Demander le mot de passe du système avant d'envoyer des actifs ? (2FA) - + Application version Version de l'application - + DEX Version - + DEX Version copied to clipboard. - + MM2 version Version de MM2 - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version Version de Qt - + Qt Version - + Qt Version copied to clipboard. - + Search Update Rechercher une mise à jour - + Logout Se déconnecter @@ -3360,28 +3274,28 @@ Curseur droit : définit le volume que vous souhaitez trader. - + View seed and private keys Afficher la phrase de récupération et les clefs privées - - + + Show Montrer - + Setup Camouflage Password Configurer le mot de passe de camouflage - + Open Ouvrir - + Disclaimer and ToS Clause de non-responsabilité et conditions d'utilisation @@ -3478,32 +3392,32 @@ Curseur droit : définit le volume que vous souhaitez trader. SubBestOrder - + Token Asset - + Available Quantity Quantité disponible - + Available Quantity (in %1) Quantité disponible (en %1) - + Fiat Volume Montant Fiduciaire - + CEX Rate Taux CEX - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 n'est pas activé - Souhaitez vous l'activer pour pouvoir selectionnez les meilleurs offres %2 ?<br><a href='#'>Oui</a> - <a href='#no'>Non</a> @@ -3826,7 +3740,7 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire SweetDexComboBox - + Search Rechercher @@ -3896,22 +3810,22 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire Entrez un montant - + MAX MAX - + To Vers - + Pick an order Choisir une commande - + Price Prix @@ -3951,70 +3865,70 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire - + Swap Now Échanger maintenant - + Failed to place the order Échec lors du placement de l'ordre - + Placed the order L'ordre a été placé - + Entered amount must be superior than 0. Le montant saisi doit être supérieur à 0. - + You must select an order. Vous devez sélectionner une commande. - + Entered amount is below the minimum required by this order: %1 Le montant saisi est inférieur au minimum requis par cette commande : %1 - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - - + + Search Rechercher - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Total %1 fees: Frais totaux %1 : - + %2 (%3) @@ -4139,6 +4053,71 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire Entrez le nom du portefeuille ici + + WalletsView + + + Welcome + Bienvenue + + + + New Wallet + Nouveau portefeuille + + + + Import wallet + + + + + My Wallets + Mes portefeuilles + + + + + Delete + Supprimez + + + + Enter password to confirm deletion of + Entrez le mot de passe pour confirmer la suppression de + + + + wallet + portefeuille + + + + Type password + Tapez votre mot de passe + + + + Cancel + Annuler + + + + + Wallet status + État du portefeuille + + + + wallet deleted successfully + portefeuille supprimé avec succès + + + + wallet password entered is incorrect + Le mot de passe du portefeuille est incorrect + + atomic_dex::wallet_page @@ -4205,32 +4184,32 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire main - + Logout Se déconnecter - + Confirm Logout Confirmer la déconnexion - + Are you sure you want to log out? Êtes-vous sûr de vouloir vous déconnecter ? - + Yes Oui - + Cancel Annuler - + Balance Balance diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index eca53557b5..cbd3779a71 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -489,7 +489,7 @@ App - + Recover Funds Result Результат восстановления средств @@ -1230,7 +1230,7 @@ DexAppPasswordField - + Type password Введите пароль @@ -1275,7 +1275,7 @@ DexPaginator - + items per page элементов на странице @@ -1301,7 +1301,7 @@ DexSweetComboBox - + Search Поиск @@ -1418,80 +1418,10 @@ Комиссия будет рассчитана - - FirstLaunch - - - Type password - Введите пароль - - - - connect - подключиться - - - - Welcome - Добро пожаловать - - - - New Wallet - Новый кошелек - - - - Import wallet - Импортировать кошелек - - - - My Wallets - Мои кошельки - - - - - Delete - Удалить - - - - Enter password to confirm deletion of - Введите пароль чтобы подтвердить удаление - - - - wallet - кошелек - - - - Cancel - Отмена - - - - - Wallet status - Статус кошелька - - - - wallet deleted successfully - кошелек успешно удален - - - - wallet password entered is incorrect - введен неверный пароль к кошельку - - General - + %n day(s) %n день @@ -1500,7 +1430,7 @@ - + %nd day @@ -1510,7 +1440,7 @@ - + %nh hours @@ -1520,7 +1450,7 @@ - + %nm minutes @@ -1530,7 +1460,7 @@ - + %ns seconds @@ -1540,7 +1470,7 @@ - + %nms milliseconds @@ -1550,66 +1480,66 @@ - + - - - + Trading Fee Торговая комиссия - + Minimum Trading Amount Минимальный объем сделки - + Wallet %1 already exists WALLETNAME Кошелек %1 уже существует - + %1 balance is lower than the fees amount: %2 %3 %1 баланс менее чем размер комиссий: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Торгуемый (после комиссий) баланс %1 - меньше минимальной суммы сделки - + Please fill the price field Пожалуйста, укажите цену - + Please fill the volume field Пожалуйста, укажите сумму - - + + %1 volume is lower than minimum trade amount Сумма %1 меньше минимальной суммы сделки - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - + Unknown Error Неизвестная ошибка @@ -1617,27 +1547,27 @@ Header - + You get Вы получите - + You send Вы отправите - + Fiat Price фиатная цена - + CEX rate Цена на CEX - + Price Цена @@ -1647,7 +1577,7 @@ Количество - + Total Всего @@ -1661,26 +1591,73 @@ - InitialLoading + ImportWallet - - Loading, please wait - Загрузка. Пожалуйста, подождите + + Failed to Import the wallet + Не удалось импортировать кошелек - - Initializing MM2 - Инициализация MM2 + + Import wallet - Setup + Импорт кошелька - Введите данные - - Enabling assets - Добавление ассетов + + Import wallet - Choose password + Импорт кошелька - Задайте пароль - - Getting ready - Подготовка + + Wallet Name + Название кошелька + + + + + Enter seed + Введите сид-фразу + + + + BIP39 seed validation failed, try again or select 'Allow custom seed' + BIP39 валидация сид-фразы неуспешна, пожалуйста попробуйте снова или выберите 'Разрешить пользовательский формат сид-фразы' + + + + Allow custom seed + Разрешить пользовательский формат сид-фразы + + + + <strong>Allow custom seed</strong> + + + + + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. + + + + + + I understand + + + + + Enable + Добавить + + + + Next + Далее + + + + Continue + Продолжить @@ -1739,32 +1716,39 @@ - Login + Logging - - Incorrect Password - Неправильный пароль + + Loading, please wait + Загрузка. Пожалуйста, подождите - - - Login - Вход + + Initializing MM2 + Инициализация MM2 - - Type password - Введите пароль + + Enabling assets + Добавление ассетов - - Back - Назад + + Getting ready + Подготовка + + + Login - - Connect - Подключиться + + Incorrect Password + Неправильный пароль + + + + connect + подключиться @@ -2023,86 +2007,86 @@ - NewUser + NewWallet - + Wrong word, please check again - Неверное слово. Пожалуйста, попробуйте еще раз + Неверное слово. Пожалуйста, попробуйте еще раз - + Failed to create a wallet - Ошибка при создании кошелька + Ошибка при создании кошелька - + New Wallet - Новый кошелек - - - - Choose Password - Задайте пароль + Новый кошелек - - Generated Seed - Сгенерированный seed ключ + + Confirm Seed + Подтвердить seed ключ - - Check - Проверить + + Choose Password + Задайте пароль - + Important: Back up your seed phrase before proceeding! - Важно: убедитесь, что вы сохранили ваш seed ключ, прежде чем продолжить! + Важно: убедитесь, что вы сохранили ваш seed ключ, прежде чем продолжить! - + We recommend storing it offline. - Мы рекумендуем хранить его офлайн. - - - - Confirm Seed - Подтвердить seed ключ - - - - Continue - Продолжить + Мы рекумендуем хранить его офлайн. - - Let's double check your seed phrase - Давайте перепроверим ваш seed ключ + + Generated Seed + Сгенерированный seed ключ - + Copied to Clipboard - Скопировано в буфер обмена + Скопировано в буфер обмена - + Next - Далее + Далее + + + + Let's double check your seed phrase + Давайте перепроверим ваш seed ключ - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. - Ваш seed ключ важен, и поэтому мы хотим убедиться, что вы его сохранили. Мы зададим вам три разных вопроса о вашем seed ключе, чтобы убедиться, что вы сможете легко восстановить свой кошелек, когда захотите. + Ваш seed ключ важен, и поэтому мы хотим убедиться, что вы его сохранили. Мы зададим вам три разных вопроса о вашем seed ключе, чтобы убедиться, что вы сможете легко восстановить свой кошелек, когда захотите. - + Enter the %n. word - + Введите %nе слово Введите %nе слово Введите %nе слово + + + Check + Проверить + + + + Continue + Продолжить + NoConnection @@ -2346,7 +2330,7 @@ Right slider: Sets the volume you want to trade. OrderList - + No results found @@ -2478,38 +2462,38 @@ Right slider: Sets the volume you want to trade. OrdersPage - + From От - + To Кому - + Export CSV Скачать CSV - - + + Filter Фильтр - + Date Дата - + Apply Filter Применить фильтр - + Please choose the CSV export name and location Выберите название и расположение загружаемого файла @@ -2590,22 +2574,22 @@ Right slider: Sets the volume you want to trade. - + Show only coins with balance Показывать только монеты с балансом - + (%1/%2) - + Portfolio - + Add asset Добавить крипто актив @@ -2613,38 +2597,38 @@ Right slider: Sets the volume you want to trade. PriceLine - + Set swap price for evaluation Установите цену для оценки - + Exchange rate Обменный курс - + Selected Выбрано - + Expensive Невыгодный курс - + Expedient Выгодный курс - + %1 compared to CEX PRICE_DIFF% %1 по сравнению с CEX - + CEXchange rate CEXchange Цена @@ -2691,17 +2675,17 @@ Right slider: Sets the volume you want to trade. ProView - + Failed to place the order Не удалось разместить ордер - + Placed the order Ордер размещен - + Chart График @@ -2711,52 +2695,52 @@ Right slider: Sets the volume you want to trade. Торговая информация - + Exchange Rates Курс обмена - + Orders Ордеры - + History История - + Order Book Ордербук - + Best Orders Лучшие ордеры - + Place Order Разместить ордер - + Buy Купить - + Sell Продать - + Order Selected Ордер выбран - + Start Swap Начать Своп @@ -2790,131 +2774,61 @@ Right slider: Sets the volume you want to trade. Закрыть - - RecoverSeed - - - Failed to Import the wallet - Не удалось импортировать кошелек - - - - Import wallet - Setup - Импорт кошелька - Введите данные - - - - Import wallet - Choose password - Импорт кошелька - Задайте пароль - - - - Wallet Name - Название кошелька - - - - - Enter seed - Введите сид-фразу - - - - BIP39 seed validation failed, try again or select 'Allow custom seed' - BIP39 валидация сид-фразы неуспешна, пожалуйста попробуйте снова или выберите 'Разрешить пользовательский формат сид-фразы' - - - - <strong>Allow custom seed</strong> - - - - - Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. - - - - - - I understand - - - - - Enable - Добавить - - - - Next - Далее - - - - Continue - Продолжить - - - - Allow custom seed - Разрешить пользовательский формат сид-фразы - - RecoverSeedModal - - + + View seed and private keys Показать seed-фразу и приватные ключи - + Please enter your password to view the seed. Введите пароль для отображения seed ключа. - + Wrong Password Неправильный пароль - + Cancel Отменить - + Backup seed Сделать бекап seed-фразы - + RPC Password RPC Пароль - + Search a coin. Поиск актива. - + Public Address Публичный адрес - + Private Key Приватный ключ - + Close Закрыть - + View Показать @@ -3279,7 +3193,7 @@ Right slider: Sets the volume you want to trade. - + Changing theme to %1 @@ -3304,62 +3218,62 @@ Right slider: Sets the volume you want to trade. Тема - + Ask system's password before sending coins ? (2FA) Спрашивать системный пароль перед отправкой монет? (2FA) - + Application version Версия приложения - + DEX Version - + DEX Version copied to clipboard. - + MM2 version Версия MM2 - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version Версия Qt - + Qt Version - + Qt Version copied to clipboard. - + Search Update Проверить на обновления - + Logout Выход @@ -3369,28 +3283,28 @@ Right slider: Sets the volume you want to trade. - + View seed and private keys Показать seed-фразу и приватные ключи - - + + Show Показать - + Setup Camouflage Password Установить камуфляжный пароль - + Open Установить - + Disclaimer and ToS Дисклеймер и Условия Использования @@ -3487,32 +3401,32 @@ Right slider: Sets the volume you want to trade. SubBestOrder - + Token Токен - + Available Quantity Доступное количество - + Available Quantity (in %1) Доступное количество (в %1) - + Fiat Volume Фиатный объем - + CEX Rate CEX цена - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 не активирован -Вы хотите активировать этот %2 актив чтобы видеть лучшие ордеры для него ?<br><a href='#'>Да</a> - <a href='#no'>Нет</a> @@ -3840,7 +3754,7 @@ Network fees can vary greatly depending on your selected trading pair. SweetDexComboBox - + Search Поиск @@ -3910,22 +3824,22 @@ Network fees can vary greatly depending on your selected trading pair. Введите количество - + MAX МАКС - + To Получатель - + Pick an order Выберите ордер - + Price Цена @@ -3965,70 +3879,70 @@ Network fees can vary greatly depending on your selected trading pair. - + Swap Now Начать обмен - + Failed to place the order Не удалось разместить ордер - + Placed the order Ордер размещен - + Entered amount must be superior than 0. Введенная сумма должна быть больше 0. - + You must select an order. Вы должны выбрать ордер. - + Entered amount is below the minimum required by this order: %1 Введнная сумма меньше минимальной для этого ордера: %1 - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - - + + Search Поиск - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Total %1 fees: Всего %1 комиссий: - + %2 (%3) @@ -4154,6 +4068,71 @@ Network fees can vary greatly depending on your selected trading pair. Название кошелька + + WalletsView + + + Welcome + Добро пожаловать + + + + New Wallet + Новый кошелек + + + + Import wallet + Импортировать кошелек + + + + My Wallets + Мои кошельки + + + + + Delete + Удалить + + + + Enter password to confirm deletion of + Введите пароль чтобы подтвердить удаление + + + + wallet + кошелек + + + + Type password + Введите пароль + + + + Cancel + + + + + + Wallet status + Статус кошелька + + + + wallet deleted successfully + кошелек успешно удален + + + + wallet password entered is incorrect + введен неверный пароль к кошельку + + atomic_dex::wallet_page @@ -4220,32 +4199,32 @@ Network fees can vary greatly depending on your selected trading pair. main - + Logout Выход - + Confirm Logout Подтверждение выхода - + Are you sure you want to log out? Вы действительно хотите выйти? - + Yes Да - + Cancel Отменить - + Balance Баланс diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index 4f42bd93c5..8b33599244 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -487,7 +487,7 @@ App - + Recover Funds Result Fon Kurtarma Sonucu @@ -1228,7 +1228,7 @@ DexAppPasswordField - + Type password @@ -1271,7 +1271,7 @@ DexPaginator - + items per page sayfa başına öğe @@ -1297,7 +1297,7 @@ DexSweetComboBox - + Search Ara @@ -1414,87 +1414,17 @@ Ücretler hesaplanacak - - FirstLaunch - - - Type password - - - - - connect - - - - - Welcome - Hoşgeldiniz - - - - New Wallet - Yeni Cüzdan - - - - Import wallet - - - - - My Wallets - Cüzdanlarım - - - - - Delete - Sil - - - - Enter password to confirm deletion of - - - - - wallet - - - - - Cancel - İptal - - - - - Wallet status - - - - - wallet deleted successfully - - - - - wallet password entered is incorrect - - - General - + %n day(s) %n gün - + %nd day @@ -1502,7 +1432,7 @@ - + %nh hours @@ -1510,7 +1440,7 @@ - + %nm minutes @@ -1518,7 +1448,7 @@ - + %ns seconds @@ -1526,7 +1456,7 @@ - + %nms milliseconds @@ -1534,66 +1464,66 @@ - + - - - + Trading Fee Takas Ücreti - + Minimum Trading Amount Minimum Takas Hacmi - + Wallet %1 already exists WALLETNAME %1 cüzdanı zaten mevcut - + %1 balance is lower than the fees amount: %2 %3 %1 bakiye ücret tutarının altında: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Takas edilebilir (ücretlerden sonra)%1 bakiyesi minimum işlem ücretinden düşük - + Please fill the price field Lütfen fiyat alanını doldurun - + Please fill the volume field Lütfen hacim alanını doldurunuz - - + + %1 volume is lower than minimum trade amount %1 hacmi, minimum işlem ücretinden düşük - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error Bilinmeyen Hata @@ -1601,27 +1531,27 @@ Header - + You get Alacağınız - + You send Göndereceğiniz - + Fiat Price Döviz Fiyatı - + CEX rate CEX oranı - + Price Fiyat @@ -1631,7 +1561,7 @@ Miktar - + Total Toplam @@ -1645,26 +1575,73 @@ - InitialLoading + ImportWallet - - Loading, please wait - Yükleniyor, lütfen bekleyiniz + + Failed to Import the wallet + - - Initializing MM2 - MM2 başlatılıyor + + Import wallet - Setup + - - Enabling assets - Varlıklar etkinleştiriliyor + + Import wallet - Choose password + - - Getting ready - Hazırlanıyor + + Wallet Name + Cüzdan Adı + + + + + Enter seed + + + + + BIP39 seed validation failed, try again or select 'Allow custom seed' + + + + + Allow custom seed + Özel Seed'e izin ver + + + + <strong>Allow custom seed</strong> + + + + + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. + + + + + + I understand + + + + + Enable + Etkinleştir + + + + Next + İleri + + + + Continue + Devam @@ -1723,31 +1700,38 @@ - Login + Logging - - Incorrect Password - Yanlış Parola + + Loading, please wait + Yükleniyor, lütfen bekleyiniz - - - Login - Giriş + + Initializing MM2 + MM2 başlatılıyor - - Type password - + + Enabling assets + Varlıklar etkinleştiriliyor - - Back - Geri + + Getting ready + Hazırlanıyor + + + + Login + + + Incorrect Password + Yanlış Parola - - Connect + + connect @@ -2007,84 +1991,84 @@ - NewUser + NewWallet - + Wrong word, please check again - Hatalı kelime, lütfen kontrol ediniz + Hatalı kelime, lütfen kontrol ediniz - + Failed to create a wallet - Cüzdan oluşturulamadı - - - - Choose Password - - - - - Important: Back up your seed phrase before proceeding! - Önemli: Devam etmeden önce seed kelimelerinizi yedekleyin! + Cüzdan oluşturulamadı - - We recommend storing it offline. - Çevrimdışı saklamanızı öneririz. + + New Wallet + Yeni Cüzdan - - Generated Seed - Seed Oluştur + + Confirm Seed + Seed'i Onayla - - Check + + Choose Password - - New Wallet - Yeni Cüzdan - - - - Confirm Seed - Seed'i Onayla + + Important: Back up your seed phrase before proceeding! + Önemli: Devam etmeden önce seed kelimelerinizi yedekleyin! - - Continue - Devam + + We recommend storing it offline. + Çevrimdışı saklamanızı öneririz. - - Let's double check your seed phrase - Seed kelimelerinizi tekrar kontrol edelim + + Generated Seed + Seed Oluştur - + Copied to Clipboard Panoya Kopyalandı - + Next İleri - + + Let's double check your seed phrase + Seed kelimelerinizi tekrar kontrol edelim + + + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. - Seed kelimeleriniz önemlidir - bu yüzden doğru olduğundan emin olmak istiyoruz. Cüzdanınızı istediğiniz zaman kolayca kurtarabileceğinizden emin olmak için seed kelimeleriniz hakkında üç farklı soru soracağız. + Seed kelimeleriniz önemlidir - bu yüzden doğru olduğundan emin olmak istiyoruz. Cüzdanınızı istediğiniz zaman kolayca kurtarabileceğinizden emin olmak için seed kelimeleriniz hakkında üç farklı soru soracağız. - + Enter the %n. word - + %n. kelimeyi giriniz + + + Check + + + + + Continue + Devam + NoConnection @@ -2326,7 +2310,7 @@ Right slider: Sets the volume you want to trade. OrderList - + No results found @@ -2458,38 +2442,38 @@ Right slider: Sets the volume you want to trade. OrdersPage - + From Gönderen - + To Alan - + Apply Filter Filtreyi Uygula - - + + Filter - + Date Tarih - + Export CSV CSV'yi dışa aktar - + Please choose the CSV export name and location Lütfen CSV dışa aktarma adını ve konumunu seçin @@ -2568,22 +2552,22 @@ Right slider: Sets the volume you want to trade. - + Show only coins with balance Sadece bakiyesi olan koinleri göster - + (%1/%2) - + Portfolio - + Add asset Varlık ekle @@ -2591,38 +2575,38 @@ Right slider: Sets the volume you want to trade. PriceLine - + Set swap price for evaluation Değerlendirme için takas fiyatı belirleyin - + Exchange rate Döviz kuru - + Selected Seçili - + Expensive Pahalı - + Expedient Uygun - + %1 compared to CEX PRICE_DIFF% CEX ile karşılaştırıldığında %1 - + CEXchange rate CEXchange kuru @@ -2669,17 +2653,17 @@ Right slider: Sets the volume you want to trade. ProView - + Failed to place the order Emir başarısız oldu - + Placed the order Emir başarılı - + Chart Grafik @@ -2689,52 +2673,52 @@ Right slider: Sets the volume you want to trade. Al Sat Bilgisi - + Exchange Rates Döviz kurları - + Orders Emirler - + History Tarihçe - + Order Book Emir Defteri - + Best Orders En İyi Emirler - + Place Order Emir Ver - + Buy Al - + Sell Sat - + Order Selected Emir Seçildi - + Start Swap Takas Başlat @@ -2768,131 +2752,61 @@ Right slider: Sets the volume you want to trade. Kapat - - RecoverSeed - - - Failed to Import the wallet - - - - - Import wallet - Setup - - - - - Import wallet - Choose password - - - - - Wallet Name - Cüzdan Adı - - - - - Enter seed - - - - - BIP39 seed validation failed, try again or select 'Allow custom seed' - - - - - <strong>Allow custom seed</strong> - - - - - Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. - - - - - - I understand - - - - - Enable - Etkinleştir - - - - Next - İleri - - - - Continue - Devam - - - - Allow custom seed - Özel Seed'e izin ver - - RecoverSeedModal - - + + View seed and private keys Seed ve özel anahtarları görüntüle - + Please enter your password to view the seed. Seed'i görmek için lütfen parolanızı giriniz. - + Wrong Password Yanlış Parola - + Cancel İptal - + Backup seed Seed'i yedekle - + RPC Password RPC Parolası - + Search a coin. Koin ara. - + Public Address Public Adres - + Private Key Private Key - + Close Kapat - + View Görüntüle @@ -3257,7 +3171,7 @@ Right slider: Sets the volume you want to trade. Onayla - + Changing theme to %1 @@ -3282,62 +3196,62 @@ Right slider: Sets the volume you want to trade. Tema - + Ask system's password before sending coins ? (2FA) Para göndermeden önce sistem parolası sorulsun mu ? (2FA) - + Application version Uygulama sürümü - + DEX Version - + DEX Version copied to clipboard. - + MM2 version MM2 sürümü - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version Qt sürümü - + Qt Version - + Qt Version copied to clipboard. - + Search Update Güncelleme Ara - + Logout Çıkış @@ -3347,28 +3261,28 @@ Right slider: Sets the volume you want to trade. - + View seed and private keys Seed ve özel anahtarları görüntüle - - + + Show Göster - + Setup Camouflage Password Kamuflaj Parolasını Ayarla - + Open - + Disclaimer and ToS Sorumluluk Reddi ve K.Ş. @@ -3465,32 +3379,32 @@ Right slider: Sets the volume you want to trade. SubBestOrder - + Token Token - + Available Quantity Mevcut Miktar - + Available Quantity (in %1) Mevcut Miktar (%1 olarak) - + Fiat Volume Fiat Hacmi - + CEX Rate CEX Oranı - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 etkin değil - En iyi %2 siparişini seçebilmesi için etkinleştirmek istiyor musunuz ? <br><a href='#'>Evet</a> - <a href='#no'>Hayır</a> @@ -3818,7 +3732,7 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de SweetDexComboBox - + Search Ara @@ -3888,22 +3802,22 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de Bir miktar gir - + MAX MAKS - + To Alan - + Pick an order Emri seç - + Price Fiyat @@ -3943,70 +3857,70 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de - + Swap Now Şimdi Takasla - + Failed to place the order Emir başarısız oldu - + Placed the order Emir başarılı - + Entered amount must be superior than 0. Girilen tutar 0'dan büyük olmalıdır. - + You must select an order. Bir emir seçmelisiniz. - + Entered amount is below the minimum required by this order: %1 Girilen miktar, bu emrin gerektirdiği minimum %1 tutarının altında - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - - + + Search Ara - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Total %1 fees: Toplam %1 işlem giderleri: - + %2 (%3) %2 (%3) @@ -4131,6 +4045,71 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de Cüzdanınızın adını giriniz + + WalletsView + + + Welcome + Hoşgeldiniz + + + + New Wallet + Yeni Cüzdan + + + + Import wallet + + + + + My Wallets + Cüzdanlarım + + + + + Delete + Sil + + + + Enter password to confirm deletion of + + + + + wallet + + + + + Type password + + + + + Cancel + + + + + + Wallet status + + + + + wallet deleted successfully + + + + + wallet password entered is incorrect + + + atomic_dex::wallet_page @@ -4197,32 +4176,32 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de main - + Logout Çıkış - + Confirm Logout - + Are you sure you want to log out? - + Yes Evet - + Cancel İptal - + Balance Bakiye From 2aefaec99342ab28243e6a013c8c34f08280de18 Mon Sep 17 00:00:00 2001 From: syl Date: Tue, 9 Nov 2021 11:05:20 +0100 Subject: [PATCH 100/139] Fix sidebar's shrink when going to dex page from wallet page --- atomic_defi_design/Dex/Sidebar/Main.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 8a86f5568c..c64eee556a 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -29,6 +29,9 @@ Item width: isExpanded ? 200 : 80 height: parent.height + onCurrentLineTypeChanged: if (currentLineType === Main.LineType.DEX) isExpanded = false + else isExpanded = true + // Background Rectangle Rectangle { @@ -94,9 +97,6 @@ Item return; currentLineType = lineType; root.lineSelected(lineType); - - if (lineType === Main.LineType.DEX) isExpanded = false; - else isExpanded = true; } } From 7a397af308bfe0564b24e67d52fb2fe9bdcb715a Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 9 Nov 2021 12:13:27 +0000 Subject: [PATCH 101/139] add WBTC-HRC20 --- assets/config/0.5.2-coins.json | 52 +++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index bddb34fd38..27f513310b 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -6427,6 +6427,41 @@ "active": false, "currently_enabled": false }, + "WBTC-ERC20": { + "coin": "WBTC-ERC20", + "name": "Wrapped Bitcoin", + "coinpaprika_id": "wbtc-wrapped-bitcoin", + "coingecko_id": "wrapped-bitcoin", + "nomics_id": "WBTC", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "WBTC-HRC20": { + "coin": "WBTC-HRC20", + "name": "Wrapped Bitcoin", + "coinpaprika_id": "wbtc-wrapped-bitcoin", + "coingecko_id": "wrapped-bitcoin", + "nomics_id": "WBTC", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false + }, "WCN": { "coin": "WCN", "name": "Widecoin", @@ -8634,23 +8669,6 @@ "active": false, "currently_enabled": false }, - "WBTC": { - "coin": "WBTC", - "name": "Wrapped BTC", - "coinpaprika_id": "wbtc-wrapped-bitcoin", - "coingecko_id": "wrapped-bitcoin", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false - }, "XOR": { "coin": "XOR", "name": "Sora Token", From 381f024fd433b20e9420202113adbb299279d45c Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 9 Nov 2021 15:34:09 +0000 Subject: [PATCH 102/139] add SUSHI-MVR20 --- assets/config/0.5.2-coins.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 27f513310b..2876f3c6d2 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -5315,6 +5315,22 @@ "active": false, "currently_enabled": false }, + "SUSHI-MVR20": { + "coin": "SUSHI-MVR20", + "name": "Sushi", + "coinpaprika_id": "sushi-sushi", + "coingecko_id": "sushi", + "nomics_id": "SUSHI", + "nodes": [ + "https://rpc.moonriver.moonbeam.network" + ], + "explorer_url": [ + "https://blockscout.moonriver.moonbeam.network/" + ], + "type": "Moonriver", + "active": false, + "currently_enabled": false + }, "SUSHI-PLG20": { "coin": "SUSHI-PLG20", "name": "Sushi", From c13ee8c61657cd8b81cd9e20c9347655f91a2df3 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Tue, 9 Nov 2021 20:37:53 +0100 Subject: [PATCH 103/139] feat(smtf): add smtf v2 --- assets/config/0.5.2-coins.json | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index 5384658267..ab6ececef1 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -2948,8 +2948,25 @@ "currently_enabled": false, "wallet_only": true }, - "SMTF": { - "coin": "SMTF", + "SMTF-OLD": { + "coin": "SMTF-OLD", + "name": "SmartFi", + "coinpaprika_id": "test-coin", + "coingecko_id": "test-coin", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, + "SMTF-v2": { + "coin": "SMTF-v2", "name": "SmartFi", "coinpaprika_id": "test-coin", "coingecko_id": "test-coin", From fb98c77ee55f311ea20f3676d310bdfbd39145d6 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Tue, 9 Nov 2021 21:16:53 +0100 Subject: [PATCH 104/139] feat(smtf): remove SMTF-OLD --- assets/config/0.5.2-coins.json | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index ab6ececef1..e721d880b2 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -2948,23 +2948,6 @@ "currently_enabled": false, "wallet_only": true }, - "SMTF-OLD": { - "coin": "SMTF-OLD", - "name": "SmartFi", - "coinpaprika_id": "test-coin", - "coingecko_id": "test-coin", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false - }, "SMTF-v2": { "coin": "SMTF-v2", "name": "SmartFi", From 7a0568500ea3e1ff9abc0d33914e28f61029fb5f Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 10 Nov 2021 14:09:23 +0800 Subject: [PATCH 105/139] rm nim, be ninja --- .github/workflows/atomicdex-desktop-ci.yml | 8 +++----- ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 13 +++++-------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 94cb439359..18de3c5de4 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -270,19 +270,17 @@ jobs: - name: Running Tests (Windows) shell: powershell - working-directory: ci_tools_atomic_dex if: runner.os == 'Windows' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository run: | echo "Running tests" $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\${{ matrix.qt }}\msvc2019_64" - cmd /c '.\ci_tools_atomic_dex.exe tests release 2>&1' - cd build-Release - cd bin - ls + cd build\bin + ./smartdex-desktop_tests.exe --reporters=xml --out=${{ env.DEX_PROJECT_NAME }}-tests-result.xml -s #Invoke-WebRequest -Uri https://report.ci/upload.py -OutFile upload.py #python upload.py --sha $(git rev-parse HEAD) -n "[Doctest Windows]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" + - name: Upload env variable for artifacts (Linux) if: runner.os == 'Linux' run: | diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index 075c4d16fc..f71f424681 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -21,11 +21,8 @@ scoop cache rm llvm scoop cache rm nim $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\$Env:QT_VERSION\msvc2019_64" $Env:QT_ROOT = "C:\Qt" -cd ci_tools_atomic_dex -#$file = 'src\generate.nim' -#$regex = '(?<=g_vcpkg_cmake_script_path & ")[^"]*' -#(Get-Content $file) -replace $regex, ' -DVCPKG_TARGET_TRIPLET=x64-windows ' | Set-Content $file -nimble build -y -#cmd /c '.\ci_tools_atomic_dex.exe build release 2>&1' -cmd /c '.\ci_tools_atomic_dex.exe bundle release 2>&1' -#ls bundle-Release/bundle.zip +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ +ninja +ninja install \ No newline at end of file From 6bbcb5578284e686018069e98c554dfbdc1ac041 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 10 Nov 2021 14:39:58 +0800 Subject: [PATCH 106/139] update mac nim ver --- .github/workflows/atomicdex-desktop-ci.yml | 5 ++++- ci_tools_atomic_dex/ci_scripts/osx_script.sh | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 18de3c5de4..4b5919cd9c 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -126,11 +126,14 @@ jobs: if: runner.os == 'Linux' run: | export DEBIAN_FRONTEND=noninteractive - echo "CHOOSENIM_CHOOSE_VERSION=1.4.0" >> $GITHUB_ENV + echo "CHOOSENIM_CHOOSE_VERSION=1.4.8" >> $GITHUB_ENV + export CHOOSENIM_CHOOSE_VERSION=1.4.8 curl https://nim-lang.org/choosenim/init.sh > choosenim.sh chmod +x choosenim.sh ./choosenim.sh -y export PATH=/home/runner/.nimble/bin:$PATH + ls /home/runner/.choosenim/toolchains + chmod +x /home/runner/.choosenim/toolchains/nim-1.4.8/bin/* - name: Install deps (Linux) if: runner.os == 'Linux' diff --git a/ci_tools_atomic_dex/ci_scripts/osx_script.sh b/ci_tools_atomic_dex/ci_scripts/osx_script.sh index d8a242472f..c2978089e6 100755 --- a/ci_tools_atomic_dex/ci_scripts/osx_script.sh +++ b/ci_tools_atomic_dex/ci_scripts/osx_script.sh @@ -1,12 +1,14 @@ #!/bin/bash brew update +brew tap-new $USER/local-nim +brew extract --version=1.4.8 nim $USER/local-nim brew install autoconf \ automake \ libtool \ pkgconfig \ wget \ - nim \ + nim@1.4.8 \ ninja \ gnu-sed \ coreutils \ From 92b9ffdbbd323573fe6fce276a0d394d8036bf56 Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Wed, 10 Nov 2021 15:43:53 +0800 Subject: [PATCH 107/139] Update atomicdex-desktop-ci.yml --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 4b5919cd9c..8b3d2dbaac 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -279,7 +279,7 @@ jobs: $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\${{ matrix.qt }}\msvc2019_64" cd build\bin - ./smartdex-desktop_tests.exe --reporters=xml --out=${{ env.DEX_PROJECT_NAME }}-tests-result.xml -s + ./atomicdex-desktop_tests.exe --reporters=xml --out=${{ env.DEX_PROJECT_NAME }}-tests-result.xml -s #Invoke-WebRequest -Uri https://report.ci/upload.py -OutFile upload.py #python upload.py --sha $(git rev-parse HEAD) -n "[Doctest Windows]" --include='${{ env.DEX_PROJECT_NAME }}-tests-result.xml' --framework=doctest --merge ".*" From 79b5912e28959c20e593205fbf1f2f2d727a4163 Mon Sep 17 00:00:00 2001 From: milerius Date: Wed, 10 Nov 2021 13:00:24 +0100 Subject: [PATCH 108/139] feat(version): bump to 0.5.3 --- CMakeLists.txt | 2 +- assets/config/{0.5.2-coins.json => 0.5.3-coins.json} | 0 ci_tools_atomic_dex/installer/osx/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- .../installer/windows/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- cmake/install/macos/dex_install.cmake | 4 ++-- src/core/atomicdex/version/version.hpp | 8 ++++---- vcpkg.json | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) rename assets/config/{0.5.2-coins.json => 0.5.3-coins.json} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3eaa142182..c589746078 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.2) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.3) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.3-coins.json similarity index 100% rename from assets/config/0.5.2-coins.json rename to assets/config/0.5.3-coins.json diff --git a/ci_tools_atomic_dex/installer/osx/config/config.xml.in b/ci_tools_atomic_dex/installer/osx/config/config.xml.in index e627fbdcce..c57c7c8b86 100644 --- a/ci_tools_atomic_dex/installer/osx/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/osx/config/config.xml.in @@ -1,7 +1,7 @@ ${DEX_DISPLAY_NAME} - 0.5.2 + 0.5.3 ${DEX_DISPLAY_NAME} Installer ${DEX_WEBSITE} ${DEX_COMPANY} diff --git a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in index b13a298e5e..8430b67c98 100644 --- a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.2 - 2021-09-23 + 0.5.3 + 2021-11-10 diff --git a/ci_tools_atomic_dex/installer/windows/config/config.xml.in b/ci_tools_atomic_dex/installer/windows/config/config.xml.in index 7172d1cb0a..3d3d782642 100644 --- a/ci_tools_atomic_dex/installer/windows/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/windows/config/config.xml.in @@ -1,7 +1,7 @@ @DEX_DISPLAY_NAME@ - 0.5.2 + 0.5.3 @DEX_DISPLAY_NAME@ Installer @DEX_WEBSITE@ @DEX_COMPANY@ diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in index b13a298e5e..8430b67c98 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.2 - 2021-09-23 + 0.5.3 + 2021-11-10 diff --git a/cmake/install/macos/dex_install.cmake b/cmake/install/macos/dex_install.cmake index 59dd822705..a785fb56ea 100644 --- a/cmake/install/macos/dex_install.cmake +++ b/cmake/install/macos/dex_install.cmake @@ -4,8 +4,8 @@ if (APPLE) MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}" RESOURCE ${ICON} MACOSX_BUNDLE_ICON_FILE dex-logo - MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.2 - MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.2 + MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.3 + MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.3 MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index ff53dfcedc..233120e465 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -21,24 +21,24 @@ namespace atomic_dex constexpr const char* get_version() { - return "0.5.2-beta"; + return "0.5.3-beta"; } constexpr int get_num_version() noexcept { - return 52; + return 53; } constexpr const char* get_raw_version() { - return "0.5.2"; + return "0.5.3"; } constexpr const char* get_precedent_raw_version() { - return "0.5.1"; + return "0.5.2"; } } // namespace atomic_dex diff --git a/vcpkg.json b/vcpkg.json index 07d3fb221a..d027873163 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "atomicdex-desktop", - "version-string": "0.5.2", + "version-string": "0.5.3", "dependencies": [ "entt", "boost-multiprecision", From e7e3b778c34739211e8ca40b398669f7c1f9c19b Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 11 Nov 2021 19:03:29 +0800 Subject: [PATCH 109/139] fix suffix password form text --- atomic_defi_design/Dex/Components/PasswordField.qml | 2 +- atomic_defi_design/Dex/Components/PasswordForm.qml | 3 +++ .../Dex/Settings/CamouflagePasswordModal.qml | 13 ++++++++----- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/atomic_defi_design/Dex/Components/PasswordField.qml b/atomic_defi_design/Dex/Components/PasswordField.qml index 929972978b..d58cf44003 100644 --- a/atomic_defi_design/Dex/Components/PasswordField.qml +++ b/atomic_defi_design/Dex/Components/PasswordField.qml @@ -97,7 +97,7 @@ ColumnLayout { } DefaultText { font.pixelSize: Style.textSizeSmall3 - text_value: hintPrefix(passwordsDoMatch()) + qsTr("Password and Confirm Password have to be same") + text_value: hintPrefix(passwordsDoMatch()) + qsTr(high_security ? "Password and Confirm Password have to be same" : "Suffix and confirm suffix have to be the same") color: hintColor(passwordsDoMatch()) } } diff --git a/atomic_defi_design/Dex/Components/PasswordForm.qml b/atomic_defi_design/Dex/Components/PasswordForm.qml index 5230f3c6a6..18b2d3c41f 100644 --- a/atomic_defi_design/Dex/Components/PasswordForm.qml +++ b/atomic_defi_design/Dex/Components/PasswordForm.qml @@ -9,6 +9,8 @@ ColumnLayout { property alias field: input_password.field property alias confirm_field: input_confirm_password.field + property alias field_title: input_password.title + property alias confirm_field_title: input_confirm_password.title property bool confirm: true property bool new_password: true property bool high_security: true @@ -32,6 +34,7 @@ ColumnLayout { id: input_password new_password: form.new_password hide_hint: !confirm + title: qsTr("Password") match_password: input_confirm_password.field.text high_security: form.high_security } diff --git a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml index e998ee8d9e..8abadc62a5 100644 --- a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml +++ b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml @@ -12,7 +12,7 @@ BasicModal { width: 800 onClosed: { - input_password.reset() + input_password_suffix.reset() } ModalContent { @@ -60,9 +60,12 @@ BasicModal { } PasswordForm { - id: input_password + id: input_password_suffix Layout.fillWidth: true - field.placeholderText: qsTr("Enter a suffix") + field_title: qsTr("Password suffix") + confirm_field_title: qsTr("Confirm pasword suffix") + field.placeholderText: qsTr("Enter a password suffix") + confirm_field.placeholderText: qsTr("Enter the same password suffix to confirm") high_security: false } @@ -83,9 +86,9 @@ BasicModal { leftPadding: 40 rightPadding: 40 radius: 20 - enabled: input_password.isValid() + enabled: input_password_suffix.isValid() onClicked: { - API.app.wallet_mgr.set_emergency_password(input_password.field.text) + API.app.wallet_mgr.set_emergency_password(input_password_suffix.field.text) root.close() } } From d9dc22a46375ca3b7865765cf0d1b376b9a5de6a Mon Sep 17 00:00:00 2001 From: milerius Date: Fri, 12 Nov 2021 09:46:40 +0100 Subject: [PATCH 110/139] feat(ci): more message ci logs --- cmake/install/windows/windows_post_install.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index bf547ddee4..d16359fd0f 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -40,6 +40,7 @@ message(STATUS "Creating Installer") set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.1/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) + message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z .]") execute_process(COMMAND ${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z . WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin ECHO_OUTPUT_VARIABLE @@ -47,6 +48,7 @@ if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) RESULT_VARIABLE ARCHIVE_RESULT OUTPUT_VARIABLE ARCHIVE_OUTPUT ERROR_VARIABLE ARCHIVE_ERROR) + message(STATUS "archivegen output: ${ARCHIVE_OUTPUT} ${ARCHIVE_ERROR}") else() message(STATUS "${DEX_PROJECT_NAME}.7z already exists skipping") endif() From cf7f780ae93b09f4bbe0610f7210c2e2805552ed Mon Sep 17 00:00:00 2001 From: milerius Date: Fri, 12 Nov 2021 09:54:30 +0100 Subject: [PATCH 111/139] feat(ci): more message ci logs --- .github/workflows/atomicdex-desktop-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 4612ea1081..9cb7b269a2 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -117,8 +117,10 @@ jobs: if: runner.os == 'Windows' run: | python -m pip install --upgrade pip - python -m aqt tool windows tools_ifw 4.1.1-202105261131 qt.tools.ifw.41 --outputdir C:/Qt + python -m aqt tool windows tools_ifw 4.2.0-0-202111080926 qt.tools.ifw.42 --outputdir C:/Qt echo "C:/Qt/Tools/QtInstallerFramework/4.0/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "C:/Qt/Tools/QtInstallerFramework/4.1/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "C:/Qt/Tools/QtInstallerFramework/4.2/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo $env:GITHUB_PATH echo $env:PATH From 663cf4445ce2c007b466788fa2dd00d88ed7db0f Mon Sep 17 00:00:00 2001 From: milerius Date: Fri, 12 Nov 2021 09:55:49 +0100 Subject: [PATCH 112/139] feat(ci): more message ci logs --- .github/workflows/atomicdex-desktop-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 9cb7b269a2..d046bb8d5b 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -95,8 +95,10 @@ jobs: - name: Install QT IFW (MacOS) if: runner.os == 'macOS' run: | - python3 -m aqt tool mac tools_ifw 4.1.1-202105261132 qt.tools.ifw.41 --outputdir ${{ github.workspace }}/Qt + python3 -m aqt tool mac tools_ifw 4.2.0-0-202111080927 qt.tools.ifw.42 --outputdir ${{ github.workspace }}/Qt echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.0/bin" >> $GITHUB_PATH + echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.1/bin" >> $GITHUB_PATH + echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.2/bin" >> $GITHUB_PATH - name: Install QT (Windows) if: runner.os == 'Windows' From 0ea627e107539176a069afcb084bfe3ac40f57c3 Mon Sep 17 00:00:00 2001 From: milerius Date: Fri, 12 Nov 2021 10:35:46 +0100 Subject: [PATCH 113/139] feat(ci): update to 4.2 --- cmake/install/macos/osx_post_install.cmake | 2 +- cmake/install/windows/windows_post_install.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index 565be0c2dd..d812368a37 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -98,7 +98,7 @@ endif () file(COPY ${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg DESTINATION ${TARGET_APP_PATH}) get_filename_component(QT_ROOT_DIR $ENV{QT_ROOT} DIRECTORY) -set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.1/bin) +set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.2/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) message(STATUS "Generating ${DEX_PROJECT_NAME}.7z with [${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${DEX_PROJECT_NAME}.app] from directory: ${CMAKE_CURRENT_SOURCE_DIR}/bin") diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index d16359fd0f..0615fed9d2 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -37,7 +37,7 @@ else() endif() message(STATUS "Creating Installer") -set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.1/bin) +set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.2/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z .]") From 9fc21f5c8f647e4bcb4b5747d7b5eead34e8e175 Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Fri, 12 Nov 2021 19:50:58 +0800 Subject: [PATCH 114/139] tweak wording --- atomic_defi_design/Dex/Components/PasswordField.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Components/PasswordField.qml b/atomic_defi_design/Dex/Components/PasswordField.qml index d58cf44003..a1cc503c18 100644 --- a/atomic_defi_design/Dex/Components/PasswordField.qml +++ b/atomic_defi_design/Dex/Components/PasswordField.qml @@ -97,7 +97,7 @@ ColumnLayout { } DefaultText { font.pixelSize: Style.textSizeSmall3 - text_value: hintPrefix(passwordsDoMatch()) + qsTr(high_security ? "Password and Confirm Password have to be same" : "Suffix and confirm suffix have to be the same") + text_value: hintPrefix(passwordsDoMatch()) + qsTr(high_security ? "Password and Confirm Password have to be same" : "Password suffix and confirm password suffix must be the same") color: hintColor(passwordsDoMatch()) } } From d4e21d167b5fb164b8773d8745667f4537cef21f Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Fri, 12 Nov 2021 14:13:39 +0100 Subject: [PATCH 115/139] feat(mm2_cfg): network is now optional --- src/core/atomicdex/config/raw.mm2.coins.cfg.hpp | 17 +++++++++++------ src/core/atomicdex/services/mm2/mm2.service.cpp | 6 ++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/core/atomicdex/config/raw.mm2.coins.cfg.hpp b/src/core/atomicdex/config/raw.mm2.coins.cfg.hpp index 78a65a8383..0d787c4a70 100644 --- a/src/core/atomicdex/config/raw.mm2.coins.cfg.hpp +++ b/src/core/atomicdex/config/raw.mm2.coins.cfg.hpp @@ -79,8 +79,8 @@ namespace atomic_dex struct address_format { - std::string format; - std::string network; + std::string format; + std::optional network{std::nullopt}; }; struct coin_element @@ -139,7 +139,7 @@ namespace atomic_dex from_json(const json& j, atomic_dex::address_format& x) { x.format = j.at("format").get(); - x.network = j.at("network").get(); + x.network = atomic_dex::get_optional(j, "network"); } inline void @@ -147,7 +147,10 @@ namespace atomic_dex { j = json::object(); j["format"] = x.format; - j["network"] = x.network; + if (x.network.has_value()) + { + j["network"] = x.network.value(); + } } inline void @@ -190,7 +193,8 @@ namespace atomic_dex to_json(json& j, const atomic_dex::coin_element& x) { j = json::object(); - auto to_json_functor = [&j](const std::string field_name, const auto& field) { + auto to_json_functor = [&j](const std::string field_name, const auto& field) + { if (field.has_value()) { j[field_name] = field.value(); @@ -255,7 +259,7 @@ namespace atomic_dex try { nlohmann::json j = nlohmann::json::parse(val.toStdString()); - //ifs >> j; + // ifs >> j; t_mm2_raw_coins coins = j; out.reserve(coins.size()); for (auto&& coin: coins) { out[coin.coin] = coin; } @@ -264,6 +268,7 @@ namespace atomic_dex } catch (const std::exception& error) { + SPDLOG_ERROR("parse error: {}", error.what()); LOG_PATH("cannot parse mm2 raw cfg file: {}", file_path); } return out; diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 1cca75cc68..f8b525f325 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -514,11 +514,13 @@ namespace atomic_dex catch (const std::exception& error) { SPDLOG_ERROR("exception in batch_balance_and_tx: {}", error.what()); - // this->dispatcher_.trigger(true); + this->dispatcher_.trigger(true); } }) .then([this, batch = batch_array](pplx::task previous_task) - { this->handle_exception_pplx_task(previous_task, "batch_balance_and_tx", batch); }); + { + this->handle_exception_pplx_task(previous_task, "batch_balance_and_tx", batch); + }); } std::tuple, std::vector> From dbf9df3e96888595ce27a9a793cc080faa020453 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sat, 13 Nov 2021 13:28:43 +0100 Subject: [PATCH 116/139] feat(coins): add flux --- assets/config/0.5.2-coins.json | 25 ++++++++++++++++++ atomic_defi_design/Dex/Constants/Style.qml | 1 + .../assets/images/coins/flux.png | Bin 0 -> 88838 bytes atomic_defi_design/qml.qrc | 1 + 4 files changed, 27 insertions(+) create mode 100644 atomic_defi_design/assets/images/coins/flux.png diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index bddb34fd38..d8aebfea97 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -2339,6 +2339,31 @@ "active": false, "currently_enabled": false }, + "FLUX": { + "coin": "FLUX", + "name": "Flux", + "coinpaprika_id": "zel-zelcash", + "coingecko_id": "flux-zelcash", + "nomics_id": "FLUX", + "electrum": [ + { + "url": "electrumx.runonflux.io:50001", + "protocol": "SSL", + "disable_cert_verification": true + }, + { + "url": "electrumx2.runonflux.io:50002", + "protocol": "SSL", + "disable_cert_verification": true + } + ], + "explorer_url": [ + "https://explorer.runonflux.io/" + ], + "type": "UTXO", + "active": false, + "currently_enabled": false + }, "FIRO": { "coin": "FIRO", "name": "Firo", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index c93259c085..a9a77ce548 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -327,6 +327,7 @@ QtObject { "CADC": "#FF6666", "DGB": "#006AD2", "DOT": "#E80082", + "FLUX": "#2B61D1", "FIRO": "#BB2100", "LBC": "#00775C", "LTC": "#BFBBBB", diff --git a/atomic_defi_design/assets/images/coins/flux.png b/atomic_defi_design/assets/images/coins/flux.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c098b74e42783ed24857df376026eda16a716b GIT binary patch literal 88838 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%0D$u};NOVC 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%0D+@?tN$Iwy#jd;;%|znii% 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 Lk-=RE?4$nxXHt!2 literal 0 HcmV?d00001 diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index a81ae932d1..1be2edf86b 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -101,6 +101,7 @@ assets/images/coins/ethr.png assets/images/coins/eurs.png assets/images/coins/fet.png + assets/images/coins/flux.png assets/images/coins/fil.png assets/images/coins/firo.png assets/images/coins/fjc.png From 431d711fd4ba716b608ea6529d8b2166340fa968 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sat, 13 Nov 2021 16:59:03 +0100 Subject: [PATCH 117/139] feat(coins): add flux erc and bep --- assets/config/0.5.2-coins.json | 4535 ++++++++++++++++---------------- 1 file changed, 2286 insertions(+), 2249 deletions(-) diff --git a/assets/config/0.5.2-coins.json b/assets/config/0.5.2-coins.json index d8aebfea97..f646d94809 100644 --- a/assets/config/0.5.2-coins.json +++ b/assets/config/0.5.2-coins.json @@ -1,120 +1,120 @@ { "1INCH-AVX20": { - "coin": "1INCH-AVX20", - "name": "1inch", - "coinpaprika_id": "1inch-1inch", - "coingecko_id": "1inch", - "nomics_id": "1INCH", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "1INCH-AVX20", + "name": "1inch", + "coinpaprika_id": "1inch-1inch", + "coingecko_id": "1inch", + "nomics_id": "1INCH", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "1INCH-BEP20": { - "coin": "1INCH-BEP20", - "name": "1inch", - "coinpaprika_id": "1inch-1inch", - "coingecko_id": "1inch", - "nomics_id": "1INCH", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "1INCH-BEP20", + "name": "1inch", + "coinpaprika_id": "1inch-1inch", + "coingecko_id": "1inch", + "nomics_id": "1INCH", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "1INCH-ERC20": { - "coin": "1INCH-ERC20", - "name": "1inch", - "coinpaprika_id": "1inch-1inch", - "coingecko_id": "1inch", - "nomics_id": "1INCH", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "1INCH-ERC20", + "name": "1inch", + "coinpaprika_id": "1inch-1inch", + "coingecko_id": "1inch", + "nomics_id": "1INCH", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "1INCH-HRC20": { - "coin": "1INCH-HRC20", - "name": "1inch", - "coinpaprika_id": "1inch-1inch", - "coingecko_id": "1inch", - "nomics_id": "1INCH", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "1INCH-HRC20", + "name": "1inch", + "coinpaprika_id": "1inch-1inch", + "coingecko_id": "1inch", + "nomics_id": "1INCH", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "1INCH-KRC20": { - "coin": "1INCH-KRC20", - "name": "1inch", - "coinpaprika_id": "1inch-1inch", - "coingecko_id": "1inch", - "nomics_id": "1INCH", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "1INCH-KRC20", + "name": "1inch", + "coinpaprika_id": "1inch-1inch", + "coingecko_id": "1inch", + "nomics_id": "1INCH", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "1INCH-PLG20": { - "coin": "1INCH-PLG20", - "name": "1inch", - "coinpaprika_id": "1inch-1inch", - "coingecko_id": "1inch", - "nomics_id": "1INCH", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "1INCH-PLG20", + "name": "1inch", + "coinpaprika_id": "1inch-1inch", + "coingecko_id": "1inch", + "nomics_id": "1INCH", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "AAVE-AVX20": { - "coin": "AAVE-AVX20", - "name": "Aave", - "coinpaprika_id": "aave-new", - "coingecko_id": "aave", - "nomics_id": "AAVE", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "AAVE-AVX20", + "name": "Aave", + "coinpaprika_id": "aave-new", + "coingecko_id": "aave", + "nomics_id": "AAVE", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "AAVE-BEP20": { "coin": "AAVE-BEP20", @@ -153,85 +153,85 @@ "currently_enabled": false }, "AAVE-FTM20": { - "coin": "AAVE-FTM20", - "name": "Aave", - "coinpaprika_id": "aave-new", - "coingecko_id": "aave", - "nomics_id": "AAVE", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "AAVE-FTM20", + "name": "Aave", + "coinpaprika_id": "aave-new", + "coingecko_id": "aave", + "nomics_id": "AAVE", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "AAVE-HCO20": { - "coin": "AAVE-HCO20", - "name": "Aave", - "coinpaprika_id": "aave-new", - "coingecko_id": "aave", - "nomics_id": "AAVE", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "AAVE-HCO20", + "name": "Aave", + "coinpaprika_id": "aave-new", + "coingecko_id": "aave", + "nomics_id": "AAVE", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "AAVE-HRC20": { - "coin": "AAVE-HRC20", - "name": "Aave", - "coinpaprika_id": "aave-new", - "coingecko_id": "aave", - "nomics_id": "AAVE", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "AAVE-HRC20", + "name": "Aave", + "coinpaprika_id": "aave-new", + "coingecko_id": "aave", + "nomics_id": "AAVE", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "AAVE-KRC20": { - "coin": "AAVE-KRC20", - "name": "Aave", - "coinpaprika_id": "aave-new", - "coingecko_id": "aave", - "nomics_id": "AAVE", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "AAVE-KRC20", + "name": "Aave", + "coinpaprika_id": "aave-new", + "coingecko_id": "aave", + "nomics_id": "AAVE", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "AAVE-PLG20": { - "coin": "AAVE-PLG20", - "name": "Aave", - "coinpaprika_id": "aave-new", - "coingecko_id": "aave", - "nomics_id": "AAVE", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "AAVE-PLG20", + "name": "Aave", + "coinpaprika_id": "aave-new", + "coingecko_id": "aave", + "nomics_id": "AAVE", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "ABY": { "coin": "ABY", @@ -312,36 +312,36 @@ "currently_enabled": false }, "AGIX-ERC20": { - "coin": "AGIX-ERC20", - "name": "SingularityNET", - "coinpaprika_id": "agix-singularitynet", - "coingecko_id": "singularitynet", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "AGIX-ERC20", + "name": "SingularityNET", + "coinpaprika_id": "agix-singularitynet", + "coingecko_id": "singularitynet", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "AGIX-PLG20": { - "coin": "AGIX-PLG20", - "name": "SingularityNET", - "coinpaprika_id": "agix-singularitynet", - "coingecko_id": "singularitynet", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "AGIX-PLG20", + "name": "SingularityNET", + "coinpaprika_id": "agix-singularitynet", + "coingecko_id": "singularitynet", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "ANKR-BEP20": { "coin": "ANKR-BEP20", @@ -378,57 +378,57 @@ "currently_enabled": false }, "ARRR-BEP20": { - "coin": "ARRR-BEP20", - "name": "Pirate", - "coinpaprika_id": "arrr-pirate", - "coingecko_id": "pirate-chain", - "nomics_id": "ARRR", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false, - "wallet_only": true + "coin": "ARRR-BEP20", + "name": "Pirate", + "coinpaprika_id": "arrr-pirate", + "coingecko_id": "pirate-chain", + "nomics_id": "ARRR", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false, + "wallet_only": true }, "ARPA-BEP20": { - "coin": "ARPA-BEP20", - "name": "ARPA Chain", - "coinpaprika_id": "arpa-arpa-chain", - "coingecko_id": "arpa-chain", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "ARPA-BEP20", + "name": "ARPA Chain", + "coinpaprika_id": "arpa-arpa-chain", + "coingecko_id": "arpa-chain", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "ARPA-ERC20": { - "coin": "ARPA-ERC20", - "name": "ARPA Chain", - "coinpaprika_id": "arpa-arpa-chain", - "coingecko_id": "arpa-chain", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "ARPA-ERC20", + "name": "ARPA Chain", + "coinpaprika_id": "arpa-arpa-chain", + "coingecko_id": "arpa-chain", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "ATOM-BEP20": { "coin": "ATOM-BEP20", @@ -567,38 +567,38 @@ "currently_enabled": false }, "AXS-BEP20": { - "coin": "AXS-BEP20", - "name": "Axie Infinity", - "coinpaprika_id": "axs-axie-infinity", - "coingecko_id": "axie-infinity", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "AXS-BEP20", + "name": "Axie Infinity", + "coinpaprika_id": "axs-axie-infinity", + "coingecko_id": "axie-infinity", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "AXS-ERC20": { - "coin": "AXS-ERC20", - "name": "Axie Infinity", - "coinpaprika_id": "axs-axie-infinity", - "coingecko_id": "axie-infinity", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "AXS-ERC20", + "name": "Axie Infinity", + "coinpaprika_id": "axs-axie-infinity", + "coingecko_id": "axie-infinity", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "BABYDOGE": { "coin": "BABYDOGE", @@ -654,36 +654,36 @@ "currently_enabled": false }, "BAL-KRC20": { - "coin": "BAL-KRC20", - "name": "Balancer", - "coinpaprika_id": "bal-balancer", - "coingecko_id": "balancer", - "nomics_id": "BAL", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "BAL-KRC20", + "name": "Balancer", + "coinpaprika_id": "bal-balancer", + "coingecko_id": "balancer", + "nomics_id": "BAL", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "BAL-PLG20": { - "coin": "BAL-PLG20", - "name": "Balancer", - "coinpaprika_id": "bal-balancer", - "coingecko_id": "balancer", - "nomics_id": "BAL", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "BAL-PLG20", + "name": "Balancer", + "coinpaprika_id": "bal-balancer", + "coingecko_id": "balancer", + "nomics_id": "BAL", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "BAND-BEP20": { "coin": "BAND-BEP20", @@ -720,19 +720,19 @@ "currently_enabled": false }, "BAND-FTM20": { - "coin": "BAND-FTM20", - "name": "Band Protocol", - "coinpaprika_id": "band-band-protocol", - "coingecko_id": "band-protocol", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "BAND-FTM20", + "name": "Band Protocol", + "coinpaprika_id": "band-band-protocol", + "coingecko_id": "band-protocol", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "BAND-PLG20": { "coin": "BAND-PLG20", @@ -777,51 +777,51 @@ "name": "Bitcoin Cash" }, "BCH-ERC20": { - "coin": "BCH-ERC20", - "name": "Bitcoin Cash", - "coinpaprika_id": "bch-bitcoin-cash", - "coingecko_id": "bitcoin-cash", - "nomics_id": "BCH", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false - }, - "BCH-BEP20": { - "coin": "BCH-BEP20", - "name": "Bitcoin Cash", - "coinpaprika_id": "bch-bitcoin-cash", - "coingecko_id": "bitcoin-cash", - "nomics_id": "BCH", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false - }, - "BCH-HCO20": { - "coin": "BCH-HCO20", + "coin": "BCH-ERC20", "name": "Bitcoin Cash", "coinpaprika_id": "bch-bitcoin-cash", "coingecko_id": "bitcoin-cash", "nomics_id": "BCH", "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "BCH-BEP20": { + "coin": "BCH-BEP20", + "name": "Bitcoin Cash", + "coinpaprika_id": "bch-bitcoin-cash", + "coingecko_id": "bitcoin-cash", + "nomics_id": "BCH", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, + "BCH-HCO20": { + "coin": "BCH-HCO20", + "name": "Bitcoin Cash", + "coinpaprika_id": "bch-bitcoin-cash", + "coingecko_id": "bitcoin-cash", + "nomics_id": "BCH", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ "https://hecoinfo.com/" ], "type": "HecoChain", @@ -992,38 +992,38 @@ "currently_enabled": false }, "BRZ-BEP20": { - "coin": "BRZ-BEP20", - "name": "Brazilian Digital Token", - "coinpaprika_id": "brz-brazilian-digital-token", - "coingecko_id": "brz", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "BRZ-BEP20", + "name": "Brazilian Digital Token", + "coinpaprika_id": "brz-brazilian-digital-token", + "coingecko_id": "brz", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "BRZ-ERC20": { - "coin": "BRZ-ERC20", - "name": "Brazilian Digital Token", - "coinpaprika_id": "brz-brazilian-digital-token", - "coingecko_id": "brz", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "BRZ-ERC20", + "name": "Brazilian Digital Token", + "coinpaprika_id": "brz-brazilian-digital-token", + "coingecko_id": "brz", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "BSTY": { "coin": "BSTY", @@ -1121,44 +1121,44 @@ "currently_enabled": false }, "BTX": { - "coin": "BTX", - "name": "BitCore", - "coinpaprika_id": "btx-bitcore", - "coingecko_id": "bitcore", - "nomics_id": "BTX", - "electrum": [ - { - "url": "btx-electrumx.coinsmunity.com:50002", - "protocol": "SSL", - "disable_cert_verification": true - } - ], - "explorer_url": [ - "https://chainz.cryptoid.info/btx/" - ], - "explorer_tx_url": "tx.dws?", - "explorer_address_url": "address.dws?", - "type": "UTXO", - "active": false, - "currently_enabled": false + "coin": "BTX", + "name": "BitCore", + "coinpaprika_id": "btx-bitcore", + "coingecko_id": "bitcore", + "nomics_id": "BTX", + "electrum": [ + { + "url": "btx-electrumx.coinsmunity.com:50002", + "protocol": "SSL", + "disable_cert_verification": true + } + ], + "explorer_url": [ + "https://chainz.cryptoid.info/btx/" + ], + "explorer_tx_url": "tx.dws?", + "explorer_address_url": "address.dws?", + "type": "UTXO", + "active": false, + "currently_enabled": false }, "BTX-BEP20": { - "coin": "BTX-BEP20", - "name": "BitCore", - "coinpaprika_id": "btx-bitcore", - "coingecko_id": "bitcore", - "nomics_id": "BTX", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "BTX-BEP20", + "name": "BitCore", + "coinpaprika_id": "btx-bitcore", + "coingecko_id": "bitcore", + "nomics_id": "BTX", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "BET": { "coin": "BET", @@ -1232,53 +1232,53 @@ "currently_enabled": false }, "BTU-ERC20": { - "coin": "BTU-ERC20", - "name": "BTU Protocol", - "coinpaprika_id": "btu-btu-protocol", - "coingecko_id": "btu-protocol", - "nomics_id": "BTU", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "BTU-ERC20", + "name": "BTU Protocol", + "coinpaprika_id": "btu-btu-protocol", + "coingecko_id": "btu-protocol", + "nomics_id": "BTU", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "BTU-PLG20": { - "coin": "BTU-PLG20", - "name": "BTU Protocol", - "coinpaprika_id": "btu-btu-protocol", - "coingecko_id": "btu-protocol", - "nomics_id": "BTU", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "BTU-PLG20", + "name": "BTU Protocol", + "coinpaprika_id": "btu-btu-protocol", + "coingecko_id": "btu-protocol", + "nomics_id": "BTU", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "BUSD-AVX20": { - "coin": "BUSD-AVX20", - "name": "Binance USD", - "coinpaprika_id": "busd-binance-usd", - "coingecko_id": "binance-usd", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "BUSD-AVX20", + "name": "Binance USD", + "coinpaprika_id": "busd-binance-usd", + "coingecko_id": "binance-usd", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "BUSD-MVR20": { "coin": "BUSD-MVR20", @@ -1330,20 +1330,20 @@ "currently_enabled": false }, "BUSD-HRC20": { - "coin": "BUSD-HRC20", - "name": "Binance USD", - "coinpaprika_id": "busd-binance-usd", - "coingecko_id": "binance-usd", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "BUSD-HRC20", + "name": "Binance USD", + "coinpaprika_id": "busd-binance-usd", + "coingecko_id": "binance-usd", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "BUSD-PLG20": { "coin": "BUSD-PLG20", @@ -1385,38 +1385,38 @@ "currently_enabled": false }, "CADC-ERC20": { - "coin": "CADC-ERC20", - "name": "CAD Coin", - "coinpaprika_id": "cadc-cad-coin", - "coingecko_id": "test-coin", - "nomics_id": "CADC", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "CADC-ERC20", + "name": "CAD Coin", + "coinpaprika_id": "cadc-cad-coin", + "coingecko_id": "test-coin", + "nomics_id": "CADC", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "CADC-PLG20": { - "coin": "CADC-PLG20", - "name": "CAD Coin", - "coinpaprika_id": "cadc-cad-coin", - "coingecko_id": "test-coin", - "nomics_id": "CADC", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "CADC-PLG20", + "name": "CAD Coin", + "coinpaprika_id": "cadc-cad-coin", + "coingecko_id": "test-coin", + "nomics_id": "CADC", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "CAKE": { "coin": "CAKE", @@ -1504,54 +1504,54 @@ "currently_enabled": false }, "CELR-ERC20": { - "coin": "CELR-ERC20", - "name": "Celer Network", - "coinpaprika_id": "celr-celer-network", - "coingecko_id": "celer-network", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "CELR-ERC20", + "name": "Celer Network", + "coinpaprika_id": "celr-celer-network", + "coingecko_id": "celer-network", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "CELR-BEP20": { - "coin": "CELR-BEP20", - "name": "Celer Network", - "coinpaprika_id": "celr-celer-network", - "coingecko_id": "celer-network", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "CELR-BEP20", + "name": "Celer Network", + "coinpaprika_id": "celr-celer-network", + "coingecko_id": "celer-network", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "CELR-ARB20": { - "coin": "CELR-ARB20", - "name": "Celer Network", - "coinpaprika_id": "celr-celer-network", - "coingecko_id": "celer-network", - "nodes": [ - "https://arb1.arbitrum.io/rpc" - ], - "explorer_url": [ - "https://arbiscan.io/" - ], - "type": "Arbitrum", - "active": false, - "currently_enabled": false, - "wallet_only": true + "coin": "CELR-ARB20", + "name": "Celer Network", + "coinpaprika_id": "celr-celer-network", + "coingecko_id": "celer-network", + "nodes": [ + "https://arb1.arbitrum.io/rpc" + ], + "explorer_url": [ + "https://arbiscan.io/" + ], + "type": "Arbitrum", + "active": false, + "currently_enabled": false, + "wallet_only": true }, "CLC": { "coin": "CLC", @@ -1574,20 +1574,20 @@ "currently_enabled": false }, "COMP-AVX20": { - "coin": "COMP-AVX20", - "name": "Compound", - "coinpaprika_id": "comp-compoundd", - "coingecko_id": "compound-governance-token", - "nomics_id": "COMP", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "COMP-AVX20", + "name": "Compound", + "coinpaprika_id": "comp-compoundd", + "coingecko_id": "compound-governance-token", + "nomics_id": "COMP", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "COMP-BEP20": { "coin": "COMP-BEP20", @@ -1626,20 +1626,20 @@ "currently_enabled": false }, "COMP-KRC20": { - "coin": "COMP-KRC20", - "name": "Compound", - "coinpaprika_id": "comp-compoundd", - "coingecko_id": "compound-governance-token", - "nomics_id": "COMP", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "COMP-KRC20", + "name": "Compound", + "coinpaprika_id": "comp-compoundd", + "coingecko_id": "compound-governance-token", + "nomics_id": "COMP", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "COMP-PLG20": { "coin": "COMP-PLG20", @@ -1685,65 +1685,65 @@ "wallet_only": true }, "DAI-AVX20": { - "coin": "DAI-AVX20", - "name": "Dai", - "coinpaprika_id": "dai-dai", - "coingecko_id": "dai", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "DAI-AVX20", + "name": "Dai", + "coinpaprika_id": "dai-dai", + "coingecko_id": "dai", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "DAI-FTM20": { - "coin": "DAI-FTM20", - "name": "Dai", - "coinpaprika_id": "dai-dai", - "coingecko_id": "dai", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "DAI-FTM20", + "name": "Dai", + "coinpaprika_id": "dai-dai", + "coingecko_id": "dai", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "DAI-HCO20": { - "coin": "DAI-HCO20", - "name": "Dai", - "coinpaprika_id": "dai-dai", - "coingecko_id": "dai", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "DAI-HCO20", + "name": "Dai", + "coinpaprika_id": "dai-dai", + "coingecko_id": "dai", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "DAI-HRC20": { - "coin": "DAI-HRC20", - "name": "Dai", - "coinpaprika_id": "dai-dai", - "coingecko_id": "dai", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "DAI-HRC20", + "name": "Dai", + "coinpaprika_id": "dai-dai", + "coingecko_id": "dai", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "DAI-BEP20": { "coin": "DAI-BEP20", @@ -1780,21 +1780,21 @@ "currently_enabled": false }, "DAI-MVR20": { - "coin": "DAI-MVR20", - "name": "Dai", - "coinpaprika_id": "dai-dai", - "coingecko_id": "dai", - "nodes": [ - "https://rpc.moonriver.moonbeam.network" - ], - "explorer_url": [ - "https://blockscout.moonriver.moonbeam.network/" - ], - "type": "Moonriver", - "active": false, - "currently_enabled": false - }, - "DAI-PLG20": { + "coin": "DAI-MVR20", + "name": "Dai", + "coinpaprika_id": "dai-dai", + "coingecko_id": "dai", + "nodes": [ + "https://rpc.moonriver.moonbeam.network" + ], + "explorer_url": [ + "https://blockscout.moonriver.moonbeam.network/" + ], + "type": "Moonriver", + "active": false, + "currently_enabled": false + }, + "DAI-PLG20": { "coin": "DAI-PLG20", "name": "Dai", "coinpaprika_id": "dai-dai", @@ -1952,20 +1952,20 @@ "currently_enabled": false }, "DODO-KRC20": { - "coin": "DODO-KRC20", - "name": "DODO", - "coinpaprika_id": "dodo-dodo", - "coingecko_id": "dodo", - "nomics_id": "DODO", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "DODO-KRC20", + "name": "DODO", + "coinpaprika_id": "dodo-dodo", + "coingecko_id": "dodo", + "nomics_id": "DODO", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "DOGE": { "coin": "DOGE", @@ -2028,19 +2028,19 @@ "currently_enabled": false }, "DOT-HCO20": { - "coin": "DOT-HCO20", - "name": "Polkadot", - "coinpaprika_id": "dot-polkadot", - "coingecko_id": "polkadot", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "DOT-HCO20", + "name": "Polkadot", + "coinpaprika_id": "dot-polkadot", + "coingecko_id": "polkadot", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "DP": { "coin": "DP", @@ -2259,53 +2259,53 @@ "currently_enabled": false }, "FET-ERC20": { - "coin": "FET-ERC20", - "name": "Fetch.ai", - "coinpaprika_id": "fetch-ai", - "coingecko_id": "fetch-ai", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "FET-ERC20", + "name": "Fetch.ai", + "coinpaprika_id": "fetch-ai", + "coingecko_id": "fetch-ai", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "FET-BEP20": { - "coin": "FET-BEP20", - "name": "Fetch.ai", - "coinpaprika_id": "fetch-ai", - "coingecko_id": "fetch-ai", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "FET-BEP20", + "name": "Fetch.ai", + "coinpaprika_id": "fetch-ai", + "coingecko_id": "fetch-ai", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "FET-PLG20": { - "coin": "FET-PLG20", - "name": "Fetch.ai", - "coinpaprika_id": "fetch-ai", - "coingecko_id": "fetch-ai", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "FET-PLG20", + "name": "Fetch.ai", + "coinpaprika_id": "fetch-ai", + "coingecko_id": "fetch-ai", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "FIL-BEP20": { "coin": "FIL-BEP20", @@ -2325,19 +2325,19 @@ "currently_enabled": false }, "FIL-HCO20": { - "coin": "FIL-HCO20", - "name": "Filecoin", - "coinpaprika_id": "fil-filecoin", - "coingecko_id": "filecoin", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "FIL-HCO20", + "name": "Filecoin", + "coinpaprika_id": "fil-filecoin", + "coingecko_id": "filecoin", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "FLUX": { "coin": "FLUX", @@ -2347,14 +2347,16 @@ "nomics_id": "FLUX", "electrum": [ { - "url": "electrumx.runonflux.io:50001", + "url": "electrumx.runonflux.io:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrumx.runonflux.io:50004" }, { "url": "electrumx2.runonflux.io:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrumx2.runonflux.io:50004" } ], "explorer_url": [ @@ -2364,6 +2366,42 @@ "active": false, "currently_enabled": false }, + "FLUX-ERC20": { + "coin": "FLUX-ERC20", + "name": "Flux", + "coinpaprika_id": "zel-zelcash", + "coingecko_id": "flux-zelcash", + "nomics_id": "FLUX", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "FLUX-BEP20": { + "coin": "FLUX-BEP20", + "name": "Flux", + "coinpaprika_id": "zel-zelcash", + "coingecko_id": "flux-zelcash", + "nomics_id": "FLUX", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "FIRO": { "coin": "FIRO", "name": "Firo", @@ -2679,70 +2717,70 @@ "currently_enabled": false }, "GRT-AVX20": { - "coin": "GRT-AVX20", - "name": "The Graph", - "coinpaprika_id": "grt-the-graph", - "coingecko_id": "the-graph", - "nomics_id": "GRT", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "GRT-AVX20", + "name": "The Graph", + "coinpaprika_id": "grt-the-graph", + "coingecko_id": "the-graph", + "nomics_id": "GRT", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "GRT-ERC20": { - "coin": "GRT-ERC20", - "name": "The Graph", - "coinpaprika_id": "grt-the-graph", - "coingecko_id": "the-graph", - "nomics_id": "GRT", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "GRT-ERC20", + "name": "The Graph", + "coinpaprika_id": "grt-the-graph", + "coingecko_id": "the-graph", + "nomics_id": "GRT", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "GRT-KRC20": { - "coin": "GRT-KRC20", - "name": "The Graph", - "coinpaprika_id": "grt-the-graph", - "coingecko_id": "the-graph", - "nomics_id": "GRT", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "GRT-KRC20", + "name": "The Graph", + "coinpaprika_id": "grt-the-graph", + "coingecko_id": "the-graph", + "nomics_id": "GRT", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "GRT-PLG20": { - "coin": "GRT-PLG20", - "name": "The Graph", - "coinpaprika_id": "grt-the-graph", - "coingecko_id": "the-graph", - "nomics_id": "GRT", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "GRT-PLG20", + "name": "The Graph", + "coinpaprika_id": "grt-the-graph", + "coingecko_id": "the-graph", + "nomics_id": "GRT", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "HODL": { "coin": "HODL", @@ -2855,166 +2893,166 @@ "currently_enabled": false }, "JCHF-ERC20": { - "coin": "JCHF-ERC20", - "name": "Jarvis Swiss Franc", - "coinpaprika_id": "test-coin", - "coingecko_id": "jarvis-synthetic-swiss-franc", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "JCHF-ERC20", + "name": "Jarvis Swiss Franc", + "coinpaprika_id": "test-coin", + "coingecko_id": "jarvis-synthetic-swiss-franc", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "JCHF-PLG20": { - "coin": "JCHF-PLG20", - "name": "Jarvis Swiss Franc", - "coinpaprika_id": "test-coin", - "coingecko_id": "jarvis-synthetic-swiss-franc", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "JCHF-PLG20", + "name": "Jarvis Swiss Franc", + "coinpaprika_id": "test-coin", + "coingecko_id": "jarvis-synthetic-swiss-franc", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "JEUR-ERC20": { - "coin": "JEUR-ERC20", - "name": "Jarvis Euro", - "coinpaprika_id": "test-coin", - "coingecko_id": "jarvis-synthetic-euro", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "JEUR-ERC20", + "name": "Jarvis Euro", + "coinpaprika_id": "test-coin", + "coingecko_id": "jarvis-synthetic-euro", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "JEUR-PLG20": { - "coin": "JEUR-PLG20", - "name": "Jarvis Euro", - "coinpaprika_id": "test-coin", - "coingecko_id": "jarvis-synthetic-euro", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "JEUR-PLG20", + "name": "Jarvis Euro", + "coinpaprika_id": "test-coin", + "coingecko_id": "jarvis-synthetic-euro", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "JGBP-ERC20": { - "coin": "JGBP-ERC20", - "name": "Jarvis British Pound", - "coinpaprika_id": "test-coin", - "coingecko_id": "jarvis-synthetic-british-pound", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "JGBP-ERC20", + "name": "Jarvis British Pound", + "coinpaprika_id": "test-coin", + "coingecko_id": "jarvis-synthetic-british-pound", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "JGBP-PLG20": { - "coin": "JGBP-PLG20", - "name": "Jarvis British Pound", - "coinpaprika_id": "test-coin", - "coingecko_id": "jarvis-synthetic-british-pound", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "JGBP-PLG20", + "name": "Jarvis British Pound", + "coinpaprika_id": "test-coin", + "coingecko_id": "jarvis-synthetic-british-pound", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "JPYC-ERC20": { - "coin": "JPYC-ERC20", - "name": "JPY Coin", - "coinpaprika_id": "test-coin", - "coingecko_id": "jpyc", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "JPYC-ERC20", + "name": "JPY Coin", + "coinpaprika_id": "test-coin", + "coingecko_id": "jpyc", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "JPYC-PLG20": { - "coin": "JPYC-PLG20", - "name": "JPY Coin", - "coinpaprika_id": "test-coin", - "coingecko_id": "jpyc", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "JPYC-PLG20", + "name": "JPY Coin", + "coinpaprika_id": "test-coin", + "coingecko_id": "jpyc", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "JRT-ERC20": { - "coin": "JRT-ERC20", - "name": "Jarvis Reward Token", - "coinpaprika_id": "jrt-jarvis-reward-token", - "coingecko_id": "jarvis-reward-token", - "nomics_id": "JRT", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "JRT-ERC20", + "name": "Jarvis Reward Token", + "coinpaprika_id": "jrt-jarvis-reward-token", + "coingecko_id": "jarvis-reward-token", + "nomics_id": "JRT", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "JRT-PLG20": { - "coin": "JRT-PLG20", - "name": "Jarvis Reward Token", - "coinpaprika_id": "jrt-jarvis-reward-token", - "coingecko_id": "jarvis-reward-token", - "nomics_id": "JRT", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "JRT-PLG20", + "name": "Jarvis Reward Token", + "coinpaprika_id": "jrt-jarvis-reward-token", + "coingecko_id": "jarvis-reward-token", + "nomics_id": "JRT", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "JSTR": { "coin": "JSTR", @@ -3060,38 +3098,38 @@ "wallet_only": true }, "KNC-BEP20": { - "coin": "KNC-BEP20", - "name": "Kyber Network", - "coinpaprika_id": "knc-kyber-network", - "coingecko_id": "kyber-network-crystal", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "KNC-BEP20", + "name": "Kyber Network", + "coinpaprika_id": "knc-kyber-network", + "coingecko_id": "kyber-network-crystal", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "KNC-ERC20": { - "coin": "KNC-ERC20", - "name": "Kyber Network", - "coinpaprika_id": "knc-kyber-network", - "coingecko_id": "kyber-network-crystal", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "KNC-ERC20", + "name": "Kyber Network", + "coinpaprika_id": "knc-kyber-network", + "coingecko_id": "kyber-network-crystal", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "KOIN": { "coin": "KOIN", @@ -3199,69 +3237,69 @@ "is_segwit_on": false }, "LUNA-ERC20": { - "coin": "LUNA-ERC20", - "name": "Terra", - "coinpaprika_id": "luna-terra", - "coingecko_id": "terra-luna", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "LUNA-ERC20", + "name": "Terra", + "coinpaprika_id": "luna-terra", + "coingecko_id": "terra-luna", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "LUNA-BEP20": { - "coin": "LUNA-BEP20", - "name": "Terra", - "coinpaprika_id": "luna-terra", - "coingecko_id": "terra-luna", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "LUNA-BEP20", + "name": "Terra", + "coinpaprika_id": "luna-terra", + "coingecko_id": "terra-luna", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "LUNA-HRC20": { - "coin": "LUNA-HRC20", - "name": "Terra", - "coinpaprika_id": "luna-terra", - "coingecko_id": "terra-luna", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "LUNA-HRC20", + "name": "Terra", + "coinpaprika_id": "luna-terra", + "coingecko_id": "terra-luna", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "LUNA-PLG20": { - "coin": "LUNA-PLG20", - "name": "Terra", - "coinpaprika_id": "luna-terra", - "coingecko_id": "terra-luna", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "LUNA-PLG20", + "name": "Terra", + "coinpaprika_id": "luna-terra", + "coingecko_id": "terra-luna", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "LYNX": { "coin": "LYNX", @@ -3365,84 +3403,84 @@ "coingecko_id": "matic-network", "nomics_id": "MATIC", "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, + "MATIC-ERC20": { + "coin": "MATIC-ERC20", + "name": "Polygon", + "coinpaprika_id": "matic-matic-network", + "coingecko_id": "matic-network", + "nomics_id": "MATIC", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "MATIC-HCO20": { + "coin": "MATIC-HCO20", + "name": "Polygon", + "coinpaprika_id": "matic-matic-network", + "coingecko_id": "matic-network", + "nomics_id": "MATIC", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false + }, + "MATIC-HRC20": { + "coin": "MATIC-HRC20", + "name": "Polygon", + "coinpaprika_id": "matic-matic-network", + "coingecko_id": "matic-network", + "nomics_id": "MATIC", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" ], "explorer_url": [ - "https://bscscan.com/" + "https://explorer.harmony.one/" ], - "type": "BEP-20", + "type": "HRC-20", "active": false, "currently_enabled": false }, - "MATIC-ERC20": { - "coin": "MATIC-ERC20", + "MATIC-KRC20": { + "coin": "MATIC-KRC20", "name": "Polygon", "coinpaprika_id": "matic-matic-network", "coingecko_id": "matic-network", "nomics_id": "MATIC", "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" + "https://rpc-mainnet.kcc.network" ], "explorer_url": [ - "https://etherscan.io/" + "https://explorer.kcc.io/en/" ], - "type": "ERC-20", + "type": "KRC-20", "active": false, "currently_enabled": false }, - "MATIC-HCO20": { - "coin": "MATIC-HCO20", - "name": "Polygon", - "coinpaprika_id": "matic-matic-network", - "coingecko_id": "matic-network", - "nomics_id": "MATIC", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false - }, - "MATIC-HRC20": { - "coin": "MATIC-HRC20", - "name": "Polygon", - "coinpaprika_id": "matic-matic-network", - "coingecko_id": "matic-network", - "nomics_id": "MATIC", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false - }, - "MATIC-KRC20": { - "coin": "MATIC-KRC20", - "name": "Polygon", - "coinpaprika_id": "matic-matic-network", - "coingecko_id": "matic-network", - "nomics_id": "MATIC", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false - }, "MCL": { "coin": "MCL", "name": "Marmara Credit Loops", @@ -3471,40 +3509,40 @@ "currently_enabled": false }, "MIR-ERC20": { - "coin": "MIR-ERC20", - "name": "Mirror Protocol", - "coinpaprika_id": "mir-mirror-protocol", - "coingecko_id": "mirror-protocol", - "nomics_id": "MIRROR", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "MIR-ERC20", + "name": "Mirror Protocol", + "coinpaprika_id": "mir-mirror-protocol", + "coingecko_id": "mirror-protocol", + "nomics_id": "MIRROR", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "MIR-BEP20": { - "coin": "MIR-BEP20", - "name": "Mirror Protocol", - "coinpaprika_id": "mir-mirror-protocol", - "coingecko_id": "mirror-protocol", - "nomics_id": "MIRROR", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "MIR-BEP20", + "name": "Mirror Protocol", + "coinpaprika_id": "mir-mirror-protocol", + "coingecko_id": "mirror-protocol", + "nomics_id": "MIRROR", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "MM-ERC20": { "coin": "MM-ERC20", @@ -3525,70 +3563,70 @@ "currently_enabled": false }, "MM-AVX20": { - "coin": "MM-AVX20", - "name": "Million", - "coinpaprika_id": "mm-million", - "coingecko_id": "million", - "nomics_id": "MM4", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "MM-AVX20", + "name": "Million", + "coinpaprika_id": "mm-million", + "coingecko_id": "million", + "nomics_id": "MM4", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "MM-BEP20": { - "coin": "MM-BEP20", - "name": "Million", - "coinpaprika_id": "mm-million", - "coingecko_id": "million", - "nomics_id": "MM4", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "MM-BEP20", + "name": "Million", + "coinpaprika_id": "mm-million", + "coingecko_id": "million", + "nomics_id": "MM4", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "MM-MVR20": { - "coin": "MM-MVR20", - "name": "Million", - "coinpaprika_id": "mm-million", - "coingecko_id": "million", - "nomics_id": "MM4", - "nodes": [ - "https://rpc.moonriver.moonbeam.network" - ], - "explorer_url": [ - "https://blockscout.moonriver.moonbeam.network/" - ], - "type": "Moonriver", - "active": false, - "currently_enabled": false + "coin": "MM-MVR20", + "name": "Million", + "coinpaprika_id": "mm-million", + "coingecko_id": "million", + "nomics_id": "MM4", + "nodes": [ + "https://rpc.moonriver.moonbeam.network" + ], + "explorer_url": [ + "https://blockscout.moonriver.moonbeam.network/" + ], + "type": "Moonriver", + "active": false, + "currently_enabled": false }, "MM-PLG20": { - "coin": "MM-PLG20", - "name": "Million", - "coinpaprika_id": "mm-million", - "coingecko_id": "million", - "nomics_id": "MM4", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "MM-PLG20", + "name": "Million", + "coinpaprika_id": "mm-million", + "coingecko_id": "million", + "nomics_id": "MM4", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "MSHARK": { "coin": "MSHARK", @@ -3669,19 +3707,19 @@ "currently_enabled": false }, "OCEAN-PLG20": { - "coin": "OCEAN-PLG20", - "name": "Ocean Protocol", - "coinpaprika_id": "ocean-ocean-protocol", - "coingecko_id": "ocean-protocol", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "OCEAN-PLG20", + "name": "Ocean Protocol", + "coinpaprika_id": "ocean-ocean-protocol", + "coingecko_id": "ocean-protocol", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "ONE": { "active": false, @@ -3690,8 +3728,8 @@ "coinpaprika_id": "one-harmony", "currently_enabled": false, "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" + "https://api.harmony.one", + "https://api.s0.t.hmny.io" ], "explorer_url": [ "https://explorer.harmony.one/" @@ -3751,19 +3789,19 @@ "currently_enabled": false }, "PAX-KRC20": { - "coin": "PAX-KRC20", - "name": "Paxos Standard", - "coinpaprika_id": "pax-paxos-standard-token", - "coingecko_id": "paxos-standard", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "PAX-KRC20", + "name": "Paxos Standard", + "coinpaprika_id": "pax-paxos-standard-token", + "coingecko_id": "paxos-standard", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "PAX-PLG20": { "coin": "PAX-PLG20", @@ -3915,69 +3953,69 @@ "currently_enabled": false }, "ETH-FTM20": { - "coin": "ETH-FTM20", - "name": "Ethereum", - "coinpaprika_id": "eth-ethereum", - "coingecko_id": "ethereum", - "nomics_id": "ETH", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "ETH-FTM20", + "name": "Ethereum", + "coinpaprika_id": "eth-ethereum", + "coingecko_id": "ethereum", + "nomics_id": "ETH", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "ETH-HCO20": { - "coin": "ETH-HCO20", - "name": "Ethereum", - "coinpaprika_id": "eth-ethereum", - "coingecko_id": "ethereum", - "nomics_id": "ETH", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "ETH-HCO20", + "name": "Ethereum", + "coinpaprika_id": "eth-ethereum", + "coingecko_id": "ethereum", + "nomics_id": "ETH", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "ETH-HRC20": { - "coin": "ETH-HRC20", - "name": "Ethereum", - "coinpaprika_id": "eth-ethereum", - "coingecko_id": "ethereum", - "nomics_id": "ETH", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "ETH-HRC20", + "name": "Ethereum", + "coinpaprika_id": "eth-ethereum", + "coingecko_id": "ethereum", + "nomics_id": "ETH", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "ETH-KRC20": { - "coin": "ETH-KRC20", - "name": "Ethereum", - "coinpaprika_id": "eth-ethereum", - "coingecko_id": "ethereum", - "nomics_id": "ETH", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "ETH-KRC20", + "name": "Ethereum", + "coinpaprika_id": "eth-ethereum", + "coingecko_id": "ethereum", + "nomics_id": "ETH", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "ETH-PLG20": { "coin": "ETH-PLG20", @@ -4113,19 +4151,19 @@ "currently_enabled": false }, "USDC-AVX20": { - "coin": "USDC-AVX20", - "name": "USD Coin", - "coinpaprika_id": "usdc-usd-coin", - "coingecko_id": "usd-coin", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "USDC-AVX20", + "name": "USD Coin", + "coinpaprika_id": "usdc-usd-coin", + "coingecko_id": "usd-coin", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "USDC-MVR20": { "coin": "USDC-MVR20", @@ -4222,20 +4260,20 @@ "currently_enabled": false }, "USDC-HRC20": { - "coin": "USDC-HRC20", - "name": "USD Coin", - "coinpaprika_id": "usdc-usd-coin", - "coingecko_id": "usd-coin", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "USDC-HRC20", + "name": "USD Coin", + "coinpaprika_id": "usdc-usd-coin", + "coingecko_id": "usd-coin", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "USDC-PLG20": { "coin": "USDC-PLG20", @@ -4283,19 +4321,19 @@ "currently_enabled": false }, "USDT-FTM20": { - "coin": "USDT-FTM20", - "name": "Tether", - "coinpaprika_id": "usdt-tether", - "coingecko_id": "tether", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "USDT-FTM20", + "name": "Tether", + "coinpaprika_id": "usdt-tether", + "coingecko_id": "tether", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "USDT-KRC20": { "coin": "USDT-KRC20", @@ -4394,20 +4432,20 @@ "wallet_only": true }, "USDT-HRC20": { - "coin": "USDT-HRC20", - "name": "Tether", - "coinpaprika_id": "usdt-tether", - "coingecko_id": "tether", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "USDT-HRC20", + "name": "Tether", + "coinpaprika_id": "usdt-tether", + "coingecko_id": "tether", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "AWC": { "active": false, @@ -4427,20 +4465,20 @@ "name": "Atomic Wallet Coin" }, "BAT-AVX20": { - "coin": "BAT-AVX20", - "name": "Basic Attention Token", - "coinpaprika_id": "bat-basic-attention-token", - "coingecko_id": "basic-attention-token", - "nomics_id": "BAT", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "BAT-AVX20", + "name": "Basic Attention Token", + "coinpaprika_id": "bat-basic-attention-token", + "coingecko_id": "basic-attention-token", + "nomics_id": "BAT", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "BAT-ERC20": { "coin": "BAT-ERC20", @@ -4479,20 +4517,20 @@ "currently_enabled": false }, "BAT-KRC20": { - "coin": "BAT-KRC20", - "name": "Basic Attention Token", - "coinpaprika_id": "bat-basic-attention-token", - "coingecko_id": "basic-attention-token", - "nomics_id": "BAT", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "BAT-KRC20", + "name": "Basic Attention Token", + "coinpaprika_id": "bat-basic-attention-token", + "coingecko_id": "basic-attention-token", + "nomics_id": "BAT", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "BAT-PLG20": { "coin": "BAT-PLG20", @@ -4578,27 +4616,27 @@ } ], "explorer_url": [ - "https://labs.explorer.dexstats.info/" + "https://labs.explorer.dexstats.info/" + ], + "active": false, + "currently_enabled": false + }, + "LINK-AVX20": { + "coin": "LINK-AVX20", + "name": "Chainlink", + "coinpaprika_id": "link-chainlink", + "coingecko_id": "chainlink", + "nomics_id": "LINK", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" ], + "type": "AVX-20", "active": false, "currently_enabled": false }, - "LINK-AVX20": { - "coin": "LINK-AVX20", - "name": "Chainlink", - "coinpaprika_id": "link-chainlink", - "coingecko_id": "chainlink", - "nomics_id": "LINK", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false - }, "LINK-BEP20": { "coin": "LINK-BEP20", "name": "Chainlink", @@ -4636,69 +4674,69 @@ "currently_enabled": false }, "LINK-FTM20": { - "coin": "LINK-FTM20", - "name": "Chainlink", - "coinpaprika_id": "link-chainlink", - "coingecko_id": "chainlink", - "nomics_id": "LINK", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "LINK-FTM20", + "name": "Chainlink", + "coinpaprika_id": "link-chainlink", + "coingecko_id": "chainlink", + "nomics_id": "LINK", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "LINK-HCO20": { - "coin": "LINK-HCO20", - "name": "Chainlink", - "coinpaprika_id": "link-chainlink", - "coingecko_id": "chainlink", - "nomics_id": "LINK", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "LINK-HCO20", + "name": "Chainlink", + "coinpaprika_id": "link-chainlink", + "coingecko_id": "chainlink", + "nomics_id": "LINK", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "LINK-HRC20": { - "coin": "LINK-HRC20", - "name": "Chainlink", - "coinpaprika_id": "link-chainlink", - "coingecko_id": "chainlink", - "nomics_id": "LINK", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "LINK-HRC20", + "name": "Chainlink", + "coinpaprika_id": "link-chainlink", + "coingecko_id": "chainlink", + "nomics_id": "LINK", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "LINK-KRC20": { - "coin": "LINK-KRC20", - "name": "Chainlink", - "coinpaprika_id": "link-chainlink", - "coingecko_id": "chainlink", - "nomics_id": "LINK", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "LINK-KRC20", + "name": "Chainlink", + "coinpaprika_id": "link-chainlink", + "coingecko_id": "chainlink", + "nomics_id": "LINK", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "LINK-PLG20": { "coin": "LINK-PLG20", @@ -4920,38 +4958,38 @@ "type": "QRC-20" }, "QNT-ERC20": { - "coin": "QNT-ERC20", - "name": "Quant", - "coinpaprika_id": "qnt-quant", - "coingecko_id": "quant-network", - "nomics_id": "QNT", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "QNT-ERC20", + "name": "Quant", + "coinpaprika_id": "qnt-quant", + "coingecko_id": "quant-network", + "nomics_id": "QNT", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "QNT-KRC20": { - "coin": "QNT-KRC20", - "name": "Quant", - "coinpaprika_id": "qnt-quant", - "coingecko_id": "quant-network", - "nomics_id": "QNT", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "QNT-KRC20", + "name": "Quant", + "coinpaprika_id": "qnt-quant", + "coingecko_id": "quant-network", + "nomics_id": "QNT", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "REVS": { "coin": "REVS", @@ -4998,21 +5036,21 @@ "currently_enabled": false }, "SIBM-BEP20": { - "coin": "SIBM-BEP20", - "name": "SibMining", - "coinpaprika_id": "test-coin", - "coingecko_id": "test-coin", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "SIBM-BEP20", + "name": "SibMining", + "coinpaprika_id": "test-coin", + "coingecko_id": "test-coin", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "SMTF-OLD": { "coin": "SMTF-OLD", @@ -5047,7 +5085,7 @@ "type": "BEP-20", "active": false, "currently_enabled": false - }, + }, "SOULJA": { "coin": "SOULJA", "name": "SouljaCoin", @@ -5240,20 +5278,20 @@ "wallet_only": true }, "SUSHI-AVX20": { - "coin": "SUSHI-AVX20", - "name": "Sushi", - "coinpaprika_id": "sushi-sushi", - "coingecko_id": "sushi", - "nomics_id": "SUSHI", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "SUSHI-AVX20", + "name": "Sushi", + "coinpaprika_id": "sushi-sushi", + "coingecko_id": "sushi", + "nomics_id": "SUSHI", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "SUSHI-BEP20": { "coin": "SUSHI-BEP20", @@ -5292,53 +5330,53 @@ "currently_enabled": false }, "SUSHI-FTM20": { - "coin": "SUSHI-FTM20", - "name": "Sushi", - "coinpaprika_id": "sushi-sushi", - "coingecko_id": "sushi", - "nomics_id": "SUSHI", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "SUSHI-FTM20", + "name": "Sushi", + "coinpaprika_id": "sushi-sushi", + "coingecko_id": "sushi", + "nomics_id": "SUSHI", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "SUSHI-HRC20": { - "coin": "SUSHI-HRC20", - "name": "Sushi", - "coinpaprika_id": "sushi-sushi", - "coingecko_id": "sushi", - "nomics_id": "SUSHI", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "SUSHI-HRC20", + "name": "Sushi", + "coinpaprika_id": "sushi-sushi", + "coingecko_id": "sushi", + "nomics_id": "SUSHI", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "SUSHI-KRC20": { - "coin": "SUSHI-KRC20", - "name": "Sushi", - "coinpaprika_id": "sushi-sushi", - "coingecko_id": "sushi", - "nomics_id": "SUSHI", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "SUSHI-KRC20", + "name": "Sushi", + "coinpaprika_id": "sushi-sushi", + "coingecko_id": "sushi", + "nomics_id": "SUSHI", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "SUSHI-PLG20": { "coin": "SUSHI-PLG20", @@ -5450,20 +5488,20 @@ "currently_enabled": false }, "MKR-AVX20": { - "coin": "MKR-AVX20", - "name": "Maker", - "coinpaprika_id": "mkr-maker", - "coingecko_id": "maker", - "nomics_id": "MKR", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "MKR-AVX20", + "name": "Maker", + "coinpaprika_id": "mkr-maker", + "coingecko_id": "maker", + "nomics_id": "MKR", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "MKR-BEP20": { "coin": "MKR-BEP20", @@ -5502,20 +5540,20 @@ "currently_enabled": false }, "MKR-KRC20": { - "coin": "MKR-KRC20", - "name": "Maker", - "coinpaprika_id": "mkr-maker", - "coingecko_id": "maker", - "nomics_id": "MKR", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "MKR-KRC20", + "name": "Maker", + "coinpaprika_id": "mkr-maker", + "coingecko_id": "maker", + "nomics_id": "MKR", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "MONA": { "coin": "MONA", @@ -5566,72 +5604,72 @@ "currently_enabled": false }, "NAV-BEP20": { - "coin": "NAV-BEP20", - "name": "Navcoin", - "coinpaprika_id": "nav-navcoin", - "coingecko_id": "nav-coin", - "nomics_id": "NAV", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "NAV-BEP20", + "name": "Navcoin", + "coinpaprika_id": "nav-navcoin", + "coingecko_id": "nav-coin", + "nomics_id": "NAV", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "NEXO-ERC20": { - "coin": "NEXO-ERC20", - "name": "Nexo", - "coinpaprika_id": "nexo-nexo", - "coingecko_id": "nexo", - "nomics_id": "NEXO", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "NEXO-ERC20", + "name": "Nexo", + "coinpaprika_id": "nexo-nexo", + "coingecko_id": "nexo", + "nomics_id": "NEXO", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "NEXO-KRC20": { - "coin": "NEXO-KRC20", - "name": "Nexo", - "coinpaprika_id": "nexo-nexo", - "coingecko_id": "nexo", - "nomics_id": "NEXO", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "NEXO-KRC20", + "name": "Nexo", + "coinpaprika_id": "nexo-nexo", + "coingecko_id": "nexo", + "nomics_id": "NEXO", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "NEXO-PLG20": { - "coin": "NEXO-PLG20", - "name": "Nexo", - "coinpaprika_id": "nexo-nexo", - "coingecko_id": "nexo", - "nomics_id": "NEXO", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "NEXO-PLG20", + "name": "Nexo", + "coinpaprika_id": "nexo-nexo", + "coingecko_id": "nexo", + "nomics_id": "NEXO", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "NMC": { "coin": "NMC", @@ -5672,88 +5710,88 @@ "coinpaprika_id": "nvc-novacoin", "coingecko_id": "novacoin", "nomics_id": "NVC", - "electrum": [ - { - "url": "electrumx.nvc.ewmcx.org:50002", - "protocol": "SSL", - "disable_cert_verification": true - }, - { - "url": "failover.nvc.ewmcx.biz:50002", - "protocol": "SSL", - "disable_cert_verification": true - } - ], + "electrum": [ + { + "url": "electrumx.nvc.ewmcx.org:50002", + "protocol": "SSL", + "disable_cert_verification": true + }, + { + "url": "failover.nvc.ewmcx.biz:50002", + "protocol": "SSL", + "disable_cert_verification": true + } + ], + "explorer_url": [ + "https://explorer.novaco.in/" + ], + "type": "UTXO", + "active": false, + "currently_enabled": false, + "wallet_only": true + }, + "NVC-BEP20": { + "coin": "NVC-BEP20", + "name": "Novacoin", + "coinpaprika_id": "nvc-novacoin", + "coingecko_id": "novacoin", + "nomics_id": "NVC", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, + "NVC-QRC20": { + "coin": "NVC-QRC20", + "name": "Novacoin", + "coinpaprika_id": "nvc-novacoin", + "coingecko_id": "novacoin", + "nomics_id": "NVC", "explorer_url": [ - "https://explorer.novaco.in/" + "https://explorer.qtum.org/" ], - "type": "UTXO", + "type": "QRC-20", "active": false, - "currently_enabled": false, - "wallet_only": true - }, - "NVC-BEP20": { - "coin": "NVC-BEP20", - "name": "Novacoin", - "coinpaprika_id": "nvc-novacoin", - "coingecko_id": "novacoin", - "nomics_id": "NVC", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false - }, - "NVC-QRC20": { - "coin": "NVC-QRC20", - "name": "Novacoin", - "coinpaprika_id": "nvc-novacoin", - "coingecko_id": "novacoin", - "nomics_id": "NVC", - "explorer_url": [ - "https://explorer.qtum.org/" - ], - "type": "QRC-20", - "active": false, - "currently_enabled": false + "currently_enabled": false }, "OMG-ERC20": { - "coin": "OMG-ERC20", - "name": "OMG Network", - "coinpaprika_id": "omg-omg-network", - "coingecko_id": "omisego", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "OMG-ERC20", + "name": "OMG Network", + "coinpaprika_id": "omg-omg-network", + "coingecko_id": "omisego", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "OMG-PLG20": { - "coin": "OMG-PLG20", - "name": "OMG Network", - "coinpaprika_id": "omg-omg-network", - "coingecko_id": "omisego", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "OMG-PLG20", + "name": "OMG Network", + "coinpaprika_id": "omg-omg-network", + "coingecko_id": "omisego", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "QKC-BEP20": { "coin": "QKC-BEP20", @@ -5818,93 +5856,93 @@ "currently_enabled": false }, "QTUM-ERC20": { - "coin": "QTUM-ERC20", - "name": "Qtum", - "coinpaprika_id": "qtum-qtum", - "coingecko_id": "qtum", - "nomics_id": "QTUM", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "QTUM-ERC20", + "name": "Qtum", + "coinpaprika_id": "qtum-qtum", + "coingecko_id": "qtum", + "nomics_id": "QTUM", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "REN-ERC20": { - "coin": "REN-ERC20", - "name": "Ren", - "coinpaprika_id": "ren-republic-protocol", - "coingecko_id": "republic-protocol", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "REN-ERC20", + "name": "Ren", + "coinpaprika_id": "ren-republic-protocol", + "coingecko_id": "republic-protocol", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "REN-HRC20": { - "coin": "REN-HRC20", - "name": "Ren", - "coinpaprika_id": "ren-republic-protocol", - "coingecko_id": "republic-protocol", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "REN-HRC20", + "name": "Ren", + "coinpaprika_id": "ren-republic-protocol", + "coingecko_id": "republic-protocol", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "REN-HCO20": { - "coin": "REN-HCO20", - "name": "Ren", - "coinpaprika_id": "ren-republic-protocol", - "coingecko_id": "republic-protocol", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "REN-HCO20", + "name": "Ren", + "coinpaprika_id": "ren-republic-protocol", + "coingecko_id": "republic-protocol", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "RTM": { - "coin": "RTM", - "name": "Raptoreum", - "coinpaprika_id": "rtm-raptoreum", - "coingecko_id": "raptoreum", - "nomics_id": "RTM", - "electrum": [ - { - "url": "209.151.151.21:50001", - "protocol": "TCP" - }, - { - "url": "209.50.52.239:50001", - "protocol": "TCP" - } - ], - "explorer_url": [ - "https://explorer.raptoreum.com/" - ], - "type": "UTXO", - "active": false, - "currently_enabled": false + "coin": "RTM", + "name": "Raptoreum", + "coinpaprika_id": "rtm-raptoreum", + "coingecko_id": "raptoreum", + "nomics_id": "RTM", + "electrum": [ + { + "url": "209.151.151.21:50001", + "protocol": "TCP" + }, + { + "url": "209.50.52.239:50001", + "protocol": "TCP" + } + ], + "explorer_url": [ + "https://explorer.raptoreum.com/" + ], + "type": "UTXO", + "active": false, + "currently_enabled": false }, "RVN": { "coin": "RVN", @@ -5933,20 +5971,20 @@ "currently_enabled": false }, "SNX-AVX20": { - "coin": "SNX-AVX20", - "name": "Synthetix", - "coinpaprika_id": "snx-synthetix-network-token", - "coingecko_id": "havven", - "nomics_id": "SNX", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "SNX-AVX20", + "name": "Synthetix", + "coinpaprika_id": "snx-synthetix-network-token", + "coingecko_id": "havven", + "nomics_id": "SNX", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "SNX-BEP20": { "coin": "SNX-BEP20", @@ -5985,36 +6023,36 @@ "currently_enabled": false }, "SNX-FTM20": { - "coin": "SNX-FTM20", - "name": "Synthetix", - "coinpaprika_id": "snx-synthetix-network-token", - "coingecko_id": "havven", - "nomics_id": "SNX", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "SNX-FTM20", + "name": "Synthetix", + "coinpaprika_id": "snx-synthetix-network-token", + "coingecko_id": "havven", + "nomics_id": "SNX", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "SNX-KRC20": { - "coin": "SNX-KRC20", - "name": "Synthetix", - "coinpaprika_id": "snx-synthetix-network-token", - "coingecko_id": "havven", - "nomics_id": "SNX", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "SNX-KRC20", + "name": "Synthetix", + "coinpaprika_id": "snx-synthetix-network-token", + "coingecko_id": "havven", + "nomics_id": "SNX", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "SNX-PLG20": { "coin": "SNX-PLG20", @@ -6053,54 +6091,54 @@ "currently_enabled": false }, "TEL-ERC20": { - "coin": "TEL-ERC20", - "name": "Telcoin", - "coinpaprika_id": "tel-telcoin", - "coingecko_id": "telcoin", - "nomics_id": "TEL", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "TEL-ERC20", + "name": "Telcoin", + "coinpaprika_id": "tel-telcoin", + "coingecko_id": "telcoin", + "nomics_id": "TEL", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "TEL-PLG20": { - "coin": "TEL-PLG20", - "name": "Telcoin", - "coinpaprika_id": "tel-telcoin", - "coingecko_id": "telcoin", - "nomics_id": "TEL", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "TEL-PLG20", + "name": "Telcoin", + "coinpaprika_id": "tel-telcoin", + "coingecko_id": "telcoin", + "nomics_id": "TEL", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "TEL-KRC20": { - "coin": "TEL-KRC20", - "name": "Telcoin", - "coinpaprika_id": "tel-telcoin", - "coingecko_id": "telcoin", - "nomics_id": "TEL", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "TEL-KRC20", + "name": "Telcoin", + "coinpaprika_id": "tel-telcoin", + "coingecko_id": "telcoin", + "nomics_id": "TEL", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "THC": { "coin": "THC", @@ -6129,7 +6167,6 @@ "coinpaprika_id": "tkl-tokel", "coingecko_id": "test-coin", "electrum": [ - { "url": "1.eu.tokel.electrum.dexstats.info:10077" }, @@ -6143,7 +6180,7 @@ "type": "Smart Chain", "active": false, "currently_enabled": false - }, + }, "TRC": { "coin": "TRC", "name": "Terracoin", @@ -6190,19 +6227,19 @@ "currently_enabled": false }, "TRYB-AVX20": { - "coin": "TRYB-AVX20", - "name": "BiLira", - "coinpaprika_id": "tryb-bilira", - "coingecko_id": "bilira", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "TRYB-AVX20", + "name": "BiLira", + "coinpaprika_id": "tryb-bilira", + "coingecko_id": "bilira", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "TRYB-BEP20": { "coin": "TRYB-BEP20", @@ -6273,34 +6310,34 @@ "currently_enabled": false }, "TUSD-HCO20": { - "coin": "TUSD-HCO20", - "name": "TrueUSD", - "coinpaprika_id": "tusd-trueusd", - "coingecko_id": "true-usd", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "TUSD-HCO20", + "name": "TrueUSD", + "coinpaprika_id": "tusd-trueusd", + "coingecko_id": "true-usd", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "TUSD-KRC20": { - "coin": "TUSD-KRC20", - "name": "TrueUSD", - "coinpaprika_id": "tusd-trueusd", - "coingecko_id": "true-usd", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "TUSD-KRC20", + "name": "TrueUSD", + "coinpaprika_id": "tusd-trueusd", + "coingecko_id": "true-usd", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "TUSD-PLG20": { "coin": "TUSD-PLG20", @@ -6318,69 +6355,69 @@ "currently_enabled": false }, "UST-ERC20": { - "coin": "UST-ERC20", - "name": "TerraUSD", - "coinpaprika_id": "ust-terrausd", - "coingecko_id": "terrausd", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "UST-ERC20", + "name": "TerraUSD", + "coinpaprika_id": "ust-terrausd", + "coingecko_id": "terrausd", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "UST-BEP20": { - "coin": "UST-BEP20", - "name": "TerraUSD", - "coinpaprika_id": "ust-terrausd", - "coingecko_id": "terrausd", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "UST-BEP20", + "name": "TerraUSD", + "coinpaprika_id": "ust-terrausd", + "coingecko_id": "terrausd", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "UST-HRC20": { - "coin": "UST-HRC20", - "name": "TerraUSD", - "coinpaprika_id": "ust-terrausd", - "coingecko_id": "terrausd", - "nodes": [ - "https://api.harmony.one", - "https://api.s0.t.hmny.io" - ], - "explorer_url": [ - "https://explorer.harmony.one/" - ], - "type": "HRC-20", - "active": false, - "currently_enabled": false + "coin": "UST-HRC20", + "name": "TerraUSD", + "coinpaprika_id": "ust-terrausd", + "coingecko_id": "terrausd", + "nodes": [ + "https://api.harmony.one", + "https://api.s0.t.hmny.io" + ], + "explorer_url": [ + "https://explorer.harmony.one/" + ], + "type": "HRC-20", + "active": false, + "currently_enabled": false }, "UST-PLG20": { - "coin": "UST-PLG20", - "name": "TerraUSD", - "coinpaprika_id": "ust-terrausd", - "coingecko_id": "terrausd", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "UST-PLG20", + "name": "TerraUSD", + "coinpaprika_id": "ust-terrausd", + "coingecko_id": "terrausd", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "VAL": { "coin": "VAL", @@ -6473,24 +6510,24 @@ "active": false, "currently_enabled": false }, - "WWCN-ERC20": { - "coin": "WWCN-ERC20", - "name": "Wrapped Widecoin", - "coinpaprika_id": "wwcn-wrapped-widecoin", - "coingecko_id": "wrapped-widecoin", - "nomics_id": "WWCN", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false - }, + "WWCN-ERC20": { + "coin": "WWCN-ERC20", + "name": "Wrapped Widecoin", + "coinpaprika_id": "wwcn-wrapped-widecoin", + "coingecko_id": "wrapped-widecoin", + "nomics_id": "WWCN", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, "XEC": { "active": false, "coin": "XEC", @@ -6507,7 +6544,7 @@ "url": "fulcrum.pepipierre.fr:50002", "protocol": "SSL", "disable_cert_verification": true - } + } ], "explorer_url": [ "https://blockchair.com/ecash/" @@ -6517,22 +6554,22 @@ "name": "eCash" }, "XEP-BEP20": { - "coin": "XEP-BEP20", - "name": "Electra Protocol", - "coinpaprika_id": "xep-electra-protocol", - "coingecko_id": "electra-protocol", - "nomics_id": "XEP", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false + "coin": "XEP-BEP20", + "name": "Electra Protocol", + "coinpaprika_id": "xep-electra-protocol", + "coingecko_id": "electra-protocol", + "nomics_id": "XEP", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false }, "XLM-BEP20": { "coin": "XLM-BEP20", @@ -6641,36 +6678,36 @@ "name": "Ergon" }, "XSGD-ERC20": { - "coin": "XSGD-ERC20", - "name": "StraitsX SGD", - "coinpaprika_id": "xsgd-xsgd", - "coingecko_id": "xsgd", - "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" - ], - "explorer_url": [ - "https://etherscan.io/" - ], - "type": "ERC-20", - "active": false, - "currently_enabled": false + "coin": "XSGD-ERC20", + "name": "StraitsX SGD", + "coinpaprika_id": "xsgd-xsgd", + "coingecko_id": "xsgd", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false }, "XSGD-PLG20": { - "coin": "XSGD-PLG20", - "name": "StraitsX SGD", - "coinpaprika_id": "xsgd-xsgd", - "coingecko_id": "xsgd", - "nodes": [ - "https://polygon-rpc.com" - ], - "explorer_url": [ - "https://polygonscan.com/" - ], - "type": "Matic", - "active": false, - "currently_enabled": false + "coin": "XSGD-PLG20", + "name": "StraitsX SGD", + "coinpaprika_id": "xsgd-xsgd", + "coingecko_id": "xsgd", + "nodes": [ + "https://polygon-rpc.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false }, "XTZ-BEP20": { "coin": "XTZ-BEP20", @@ -6732,17 +6769,17 @@ "currently_enabled": false }, "XVC-QRC20": { - "coin": "XVC-QRC20", - "name": "Vanillacash", - "coinpaprika_id": "xvc-vcash", - "coingecko_id": "vcash", - "nomics_id": "XVC", - "explorer_url": [ - "https://explorer.qtum.org/" - ], - "type": "QRC-20", - "active": false, - "currently_enabled": false + "coin": "XVC-QRC20", + "name": "Vanillacash", + "coinpaprika_id": "xvc-vcash", + "coingecko_id": "vcash", + "nomics_id": "XVC", + "explorer_url": [ + "https://explorer.qtum.org/" + ], + "type": "QRC-20", + "active": false, + "currently_enabled": false }, "XVS": { "coin": "XVS", @@ -6762,20 +6799,20 @@ "currently_enabled": false }, "YFI-AVX20": { - "coin": "YFI-AVX20", - "name": "yearn.finance", - "coinpaprika_id": "yfi-yearnfinance", - "coingecko_id": "yearn-finance", - "nomics_id": "YFI", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "YFI-AVX20", + "name": "yearn.finance", + "coinpaprika_id": "yfi-yearnfinance", + "coingecko_id": "yearn-finance", + "nomics_id": "YFI", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "YFI-BEP20": { "coin": "YFI-BEP20", @@ -6814,36 +6851,36 @@ "currently_enabled": false }, "YFI-FTM20": { - "coin": "YFI-FTM20", - "name": "yearn.finance", - "coinpaprika_id": "yfi-yearnfinance", - "coingecko_id": "yearn-finance", - "nomics_id": "YFI", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "YFI-FTM20", + "name": "yearn.finance", + "coinpaprika_id": "yfi-yearnfinance", + "coingecko_id": "yearn-finance", + "nomics_id": "YFI", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "YFI-KRC20": { - "coin": "YFI-KRC20", - "name": "yearn.finance", - "coinpaprika_id": "yfi-yearnfinance", - "coingecko_id": "yearn-finance", - "nomics_id": "YFI", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "YFI-KRC20", + "name": "yearn.finance", + "coinpaprika_id": "yfi-yearnfinance", + "coingecko_id": "yearn-finance", + "nomics_id": "YFI", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "YFII-BEP20": { "coin": "YFII-BEP20", @@ -7003,19 +7040,19 @@ "currently_enabled": false }, "ZRX-AVX20": { - "coin": "ZRX-AVX20", - "name": "0x", - "coinpaprika_id": "zrx-0x", - "coingecko_id": "0x", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "ZRX-AVX20", + "name": "0x", + "coinpaprika_id": "zrx-0x", + "coingecko_id": "0x", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "ZRX-ERC20": { "coin": "ZRX-ERC20", @@ -7407,20 +7444,20 @@ "currently_enabled": false }, "CHZ-KRC20": { - "coin": "CHZ-KRC20", - "name": "chiliZ", - "coinpaprika_id": "chz-chiliz", - "coingecko_id": "chiliz", - "nomics_id": "CHZ", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "CHZ-KRC20", + "name": "chiliZ", + "coinpaprika_id": "chz-chiliz", + "coingecko_id": "chiliz", + "nomics_id": "CHZ", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "CHZ-PLG20": { "coin": "CHZ-PLG20", @@ -7457,20 +7494,20 @@ "currently_enabled": false }, "CRO-KRC20": { - "coin": "CRO-KRC20", - "name": "Crypto.com", - "coinpaprika_id": "cro-cryptocom-chain", - "coingecko_id": "crypto-com-chain", - "nomics_id": "CRO", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "CRO-KRC20", + "name": "Crypto.com", + "coinpaprika_id": "cro-cryptocom-chain", + "coingecko_id": "crypto-com-chain", + "nomics_id": "CRO", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "CRO-PLG20": { "coin": "CRO-PLG20", @@ -7507,52 +7544,52 @@ "currently_enabled": false }, "CRV-AVX20": { - "coin": "CRV-AVX20", - "name": "Curve DAO Token", - "coinpaprika_id": "crv-curve-dao-token", - "coingecko_id": "curve-dao-token", - "nomics_id": "CRV", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "CRV-AVX20", + "name": "Curve DAO Token", + "coinpaprika_id": "crv-curve-dao-token", + "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "CRV-FTM20": { - "coin": "CRV-FTM20", - "name": "Curve DAO Token", - "coinpaprika_id": "crv-curve-dao-token", - "coingecko_id": "curve-dao-token", - "nomics_id": "CRV", - "nodes": [ - "https://rpc.ftm.tools/" - ], - "explorer_url": [ - "https://ftmscan.com/" - ], - "type": "FTM-20", - "active": false, - "currently_enabled": false + "coin": "CRV-FTM20", + "name": "Curve DAO Token", + "coinpaprika_id": "crv-curve-dao-token", + "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", + "nodes": [ + "https://rpc.ftm.tools/" + ], + "explorer_url": [ + "https://ftmscan.com/" + ], + "type": "FTM-20", + "active": false, + "currently_enabled": false }, "CRV-KRC20": { - "coin": "CRV-KRC20", - "name": "Curve DAO Token", - "coinpaprika_id": "crv-curve-dao-token", - "coingecko_id": "curve-dao-token", - "nomics_id": "CRV", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "CRV-KRC20", + "name": "Curve DAO Token", + "coinpaprika_id": "crv-curve-dao-token", + "coingecko_id": "curve-dao-token", + "nomics_id": "CRV", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "CRV-PLG20": { "coin": "CRV-PLG20", @@ -7657,20 +7694,20 @@ "currently_enabled": false }, "ENJ-KRC20": { - "coin": "ENJ-KRC20", - "name": "Enjin Coin", - "coinpaprika_id": "enj-enjin-coin", - "coingecko_id": "enjincoin", - "nomics_id": "ENJ", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "ENJ-KRC20", + "name": "Enjin Coin", + "coinpaprika_id": "enj-enjin-coin", + "coingecko_id": "enjincoin", + "nomics_id": "ENJ", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "ENJ-PLG20": { "coin": "ENJ-PLG20", @@ -7870,34 +7907,34 @@ "currently_enabled": false }, "HUSD-HCO20": { - "coin": "HUSD-HCO20", - "name": "HUSD", - "coinpaprika_id": "husd-husd", - "coingecko_id": "husd", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "HUSD-HCO20", + "name": "HUSD", + "coinpaprika_id": "husd-husd", + "coingecko_id": "husd", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "HUSD-KRC20": { - "coin": "HUSD-KRC20", - "name": "HUSD", - "coinpaprika_id": "husd-husd", - "coingecko_id": "husd", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "HUSD-KRC20", + "name": "HUSD", + "coinpaprika_id": "husd-husd", + "coingecko_id": "husd", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "HUSD-PLG20": { "coin": "HUSD-PLG20", @@ -7997,20 +8034,20 @@ "currently_enabled": false }, "MANA-KRC20": { - "coin": "MANA-KRC20", - "name": "Decentraland", - "coinpaprika_id": "mana-decentraland", - "coingecko_id": "decentraland", - "nomics_id": "MANA", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "MANA-KRC20", + "name": "Decentraland", + "coinpaprika_id": "mana-decentraland", + "coingecko_id": "decentraland", + "nomics_id": "MANA", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "MANA-PLG20": { "coin": "MANA-PLG20", @@ -8370,7 +8407,7 @@ "coinpaprika_id": "ubq-ubiq", "coingecko_id": "ubiq", "nodes": [ - "https://rpc.octano.dev/" + "https://rpc.octano.dev/" ], "explorer_url": [ "https://ubiqscan.io/" @@ -8416,15 +8453,15 @@ "name": "UMA", "coinpaprika_id": "uma-uma", "coingecko_id": "uma", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "UMA-ERC20": { "coin": "UMA-ERC20", @@ -8459,19 +8496,19 @@ "currently_enabled": false }, "UNI-AVX20": { - "coin": "UNI-AVX20", - "name": "Uniswap", - "coinpaprika_id": "uni-uniswap", - "coingecko_id": "uniswap", - "nodes": [ - "https://api.avax.network/ext/bc/C/rpc" - ], - "explorer_url": [ - "https://snowtrace.io/" - ], - "type": "AVX-20", - "active": false, - "currently_enabled": false + "coin": "UNI-AVX20", + "name": "Uniswap", + "coinpaprika_id": "uni-uniswap", + "coingecko_id": "uniswap", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://snowtrace.io/" + ], + "type": "AVX-20", + "active": false, + "currently_enabled": false }, "UNI-BEP20": { "coin": "UNI-BEP20", @@ -8508,34 +8545,34 @@ "currently_enabled": false }, "UNI-HCO20": { - "coin": "UNI-HCO20", - "name": "Uniswap", - "coinpaprika_id": "uni-uniswap", - "coingecko_id": "uniswap", - "nodes": [ - "https://http-mainnet.hecochain.com" - ], - "explorer_url": [ - "https://hecoinfo.com/" - ], - "type": "HecoChain", - "active": false, - "currently_enabled": false + "coin": "UNI-HCO20", + "name": "Uniswap", + "coinpaprika_id": "uni-uniswap", + "coingecko_id": "uniswap", + "nodes": [ + "https://http-mainnet.hecochain.com" + ], + "explorer_url": [ + "https://hecoinfo.com/" + ], + "type": "HecoChain", + "active": false, + "currently_enabled": false }, "UNI-KRC20": { - "coin": "UNI-KRC20", - "name": "Uniswap", - "coinpaprika_id": "uni-uniswap", - "coingecko_id": "uniswap", - "nodes": [ - "https://rpc-mainnet.kcc.network" - ], - "explorer_url": [ - "https://explorer.kcc.io/en/" - ], - "type": "KRC-20", - "active": false, - "currently_enabled": false + "coin": "UNI-KRC20", + "name": "Uniswap", + "coinpaprika_id": "uni-uniswap", + "coingecko_id": "uniswap", + "nodes": [ + "https://rpc-mainnet.kcc.network" + ], + "explorer_url": [ + "https://explorer.kcc.io/en/" + ], + "type": "KRC-20", + "active": false, + "currently_enabled": false }, "UNI-PLG20": { "coin": "UNI-PLG20", From 92a63c8555a06b03ce2329896cb3c4782ecf5348 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 14 Nov 2021 08:36:31 +0100 Subject: [PATCH 118/139] feat(version): ZEL nomics id for flux --- assets/config/0.5.3-coins.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index f646d94809..d0343a29cb 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -2344,7 +2344,7 @@ "name": "Flux", "coinpaprika_id": "zel-zelcash", "coingecko_id": "flux-zelcash", - "nomics_id": "FLUX", + "nomics_id": "ZEL", "electrum": [ { "url": "electrumx.runonflux.io:50002", From fbbe5759453ffd42c069edcea502a238fac6e5f7 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 14 Nov 2021 08:37:55 +0100 Subject: [PATCH 119/139] feat(version): ZEL nomics id for flux --- assets/config/0.5.3-coins.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index d0343a29cb..5d6c83daf0 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -2371,7 +2371,7 @@ "name": "Flux", "coinpaprika_id": "zel-zelcash", "coingecko_id": "flux-zelcash", - "nomics_id": "FLUX", + "nomics_id": "ZEL", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -2389,7 +2389,7 @@ "name": "Flux", "coinpaprika_id": "zel-zelcash", "coingecko_id": "flux-zelcash", - "nomics_id": "FLUX", + "nomics_id": "ZEL", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", From 5f645b5c9047e731f4461309fd441b018388e297 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sun, 14 Nov 2021 09:27:24 +0100 Subject: [PATCH 120/139] feat(FLUX): use good coingecko ID --- assets/config/0.5.3-coins.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index 5d6c83daf0..bb15f1569e 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -2343,7 +2343,7 @@ "coin": "FLUX", "name": "Flux", "coinpaprika_id": "zel-zelcash", - "coingecko_id": "flux-zelcash", + "coingecko_id": "zelcash", "nomics_id": "ZEL", "electrum": [ { @@ -2370,7 +2370,7 @@ "coin": "FLUX-ERC20", "name": "Flux", "coinpaprika_id": "zel-zelcash", - "coingecko_id": "flux-zelcash", + "coingecko_id": "zelcash", "nomics_id": "ZEL", "nodes": [ "http://eth1.cipig.net:8555", @@ -2388,7 +2388,7 @@ "coin": "FLUX-BEP20", "name": "Flux", "coinpaprika_id": "zel-zelcash", - "coingecko_id": "flux-zelcash", + "coingecko_id": "zelcash", "nomics_id": "ZEL", "nodes": [ "http://bsc1.cipig.net:8655", From ce53ab119b95923cacde451e210418c46d2801ac Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 14 Nov 2021 12:50:04 +0000 Subject: [PATCH 121/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 95ed9af314..e7f4eb0441 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-72ff70357-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-93c77b7ae-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-72ff70357-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-93c77b7ae-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-72ff70357-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-93c77b7ae-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 61a8567ae35c22a8ceecb30856b5d5e55e9a0cc3 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 14 Nov 2021 19:45:26 +0000 Subject: [PATCH 122/139] fix FLUX electrum --- assets/config/0.5.3-coins.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index 65f0bce9f7..7c000b06f7 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -2354,8 +2354,7 @@ }, { "url": "electrumx2.runonflux.io:50002", - "protocol": "SSL", - "disable_cert_verification": true, + "protocol": "TCP", "ws_url": "electrumx2.runonflux.io:50004" } ], From e51fee8fa3fd2d8f381c8faaf5e7e1c01a385693 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 14 Nov 2021 19:47:48 +0000 Subject: [PATCH 123/139] fix FLUX electrum --- assets/config/0.5.3-coins.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index 7c000b06f7..5f7081a9a9 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -2353,7 +2353,7 @@ "ws_url": "electrumx.runonflux.io:50004" }, { - "url": "electrumx2.runonflux.io:50002", + "url": "electrumx2.runonflux.io:50001", "protocol": "TCP", "ws_url": "electrumx2.runonflux.io:50004" } From 84be1620726769b25143ad2fc480f5768e9af9f6 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 15 Nov 2021 20:39:45 +0000 Subject: [PATCH 124/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e7f4eb0441..2ac67cadf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-93c77b7ae-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-89c975f46-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-93c77b7ae-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-89c975f46-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-93c77b7ae-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-89c975f46-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 58502d4c67b13c3053a50fe53ae852e8b9568ca2 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 16 Nov 2021 10:02:53 +0000 Subject: [PATCH 125/139] FLUX icon, charts --- atomic_defi_design/Dex/Constants/General.qml | 9 +++++++++ .../assets/images/coins/flux.png | Bin 88838 -> 12035 bytes 2 files changed, 9 insertions(+) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 95f92d0340..152e492a15 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -1222,6 +1222,15 @@ QtObject { "FIRO/UST": "BITTREX:FIROUSD", "FIRO/DAI": "BITTREX:FIROUSD", "FIRO/PAX": "BITTREX:FIROUSD", + "FLUX/BTC": "KUCOIN:FLUXBTC", + "FLUX/USDT": "KUCOIN:FLUXUSDT", + "FLUX/BUSD": "KUCOIN:FLUXUSDT", + "FLUX/USDC": "KUCOIN:FLUXUSDT", + "FLUX/TUSD": "KUCOIN:FLUXUSDT", + "FLUX/HUSD": "KUCOIN:FLUXUSDT", + "FLUX/UST": "KUCOIN:FLUXUSDT", + "FLUX/DAI": "KUCOIN:FLUXUSDT", + "FLUX/PAX": "KUCOIN:FLUXUSDT", "FTC/BTC": "BITTREX:FTCBTC", "FTC/USDT": "BITTREX:FTCUSD", "FTC/BUSD": "BITTREX:FTCUSD", diff --git a/atomic_defi_design/assets/images/coins/flux.png b/atomic_defi_design/assets/images/coins/flux.png index c1c098b74e42783ed24857df376026eda16a716b..80a7711a4337aefb0f35628abfc2dbfa4c562c8e 100644 GIT binary patch literal 12035 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 z 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%0D$u};NOVC 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%0D+@?tN$Iwy#jd;;%|znii% z6)c?SUgcW_d^E5xLT4Wc1d2KJi0s7I&i)_1+JA*s>4U}SsS%sf5BXnuat@ekS9D~g zVBf;a;BhDWjYTN3;Iu>EF_@)}JOdS$w*#uQ(V~18yZ2CuH`hFnr)P4S7e9X7N;D_3 z;+!qlfZnt<*QsESE;WtpZaUkof=5(@bISEDL1n1SW<$kc3p(I% zsx(%hBfiNF39KwOi)$+4jaeh=H;y}Nskbv^q}%C&+h?zmO;7mt=9`SbM(((6zMd9g zz%+;>;4Y8JE&Tc$z{tv|syf zfj5h}GiAD)f`m#Wr}bys$HC;vbb+D7>Xm~19d_%#jfnNlFVNvzeFn5Wxu>& zugf`G4Q?zAs%fZcW#KzHMU4;_8j>!{a+PolysFDtL7dSI%gVh-@C3X6A8nW!stXSp zZM>+!_IJ|H=Zf9}FBGS{l)GK4S<7GT9&;$z_3-&rpaOL*+yPheYC~rlO%Z|*0hMy$ zyIWHn z1fdmX=T|Y3xxwCC2Hyhe1PJwswE|>yPl0oJZ7gl&nlSxzk#;}2;$OXO2}%J`yNu1lCinco~jlN~;6Iy-yQCyCa~iPkSURZ~H%`u`{ZO6o@IQ2s!OT z7k^NBAA3op)enSfQ6_sK>6W~f#7|Gc(o~`plAULN2#k^kd+rTw2bXbw(cSS5wG8e2 zR5p4F+8;X_Y}b@4>&^QFX}vM?g!?6eZx0kTo@c*l$6Mo-4BxzdF}pZYJKG=xI*FRE zuFbb@?GDH&0`q6fm+xg1wVbgDbA`_2frwDnYsu5NYp{aC4=c)&t&%rt!e^ynkxUP4S{sOn;%B4E;0qB{+TDd@uPjum4&kJqg-k zE)Eq~Y#BFLkoeZ)8(8M~Txli2Q3mNAnu2x)r;PmaVsRB0a1?P7rZd|8b;i$h&p3i982L_Yg|8}_$ZcJC}}KQV;0uT!Fc z7ARE@U-7peU-cq}9R-LJ7SW|Xy_YYxP8bhr4w53myZDWiIlQj0<`gU20x~Mwfp=WZ zYyq!D9g~pq0rv{tboX2Kn$-$G?|2nxF8It;Xr3_O+XoHnFMmbqB}yOq zq7BwPw^CrVh+ExU?K*xc{g5}1r&GN$lJ3PGlGqpf%efH;jm0jXZKe0m7sofq?h+RW zQfy+#fGMym&uLoiKFN^~;<-1kfV;c*a7Oy#gA1%u9uGHMKF-eik`-640t+I)d!T|| z_SI4uh>+*$`1V6^W2KU@cQ})S0q2v_jv-9XVy|?9z-hSG1VkvV+?m&_HPP;3)(Sm6<#ew!V4WGzs%5AMQ z1#97h0nnKYX5AQk!oJj=uO4<^%P2^o!nZ<3)+Nyq-{&xmKfa|oo;a_b)`TPp&YTj zP#e!=NYRO1RMQ9LSBu=-7z=lcH=t^D?y)-`1EDN)_ho1nskZhyG`+*=$NhxHdop@A z=W_+CHC0SC5Nx-nIkS#>Pw$h=b>qwf*2FUCutxu5Ti&&5gt)nLo7(%8__&liPG}}M zr;axykm=Lb=hS+Ml!D9};3o5Euoh~@W@7IJ11|6|bE~nipR>#zAC?f!MBuUTSO!3e z6#o??ynpY7qpebW#ITV&xZ8vYva?j>Viqy7{$V@c7}UDlDDH$MogkGzqnfP0zmCmY z?JcVm-F0r}LZz`4R!CYxcu9m>`;9g|wpp6*AQT)-wB>3c-dr0N<)|iNc=|lZp@H;9 z3DA7)awibM`B+_|h=F+#*CAMQ`Cd%dYx@eU4tMxB`n}Md+A6(7CiB+#BbQE}EEFms zGntd1KPUpCmEqpc6VozkDXdaR7nuBg>z|}j%J3iyUXn981@ZIJa4~?*xBB}D98JGt z(J<}~GzLZZnlt;0$Nf6n;73lW#;Pg7KA3Jb3FQHq=pwpxNF)^ZjeZ|gHbQO7=N7|f zyS6OxL~;GyCmh#-Y3J}?4*fwj+EvR;87UnUrT4mlr~hCAr$PYX!TYdUi8vB_^` zzLnd38@gaKH5T$0YR((?;zuAJ+`KKxne|nw}io ztom)@!N3e!--d1Evh+WJg}8+C8UAtiyt@!%=_x6WS_`3g;rwhKhefZObv96Ci%i;x zsl9t#a#>=Pk<;Sxq-%Oz%^qlQ=C8qDj>-d4bnpoc*O!{YbiNBZTDDROb4tCfG$wXt z?s@{y6RtT1quE>J6= zl5w1&l5j7#aZUz$E5MgAb-qdS4FTFHTO;`87d4t(frsPPd3?tUqdw=Wq$AA_5 zw7-{_0nEcg1-y~G%B-gaBG3go$l_6)^QEzt9~2D1Z>dG$-FRfkZHc+3k?Zdobas0~`r{*`LkT1Kf z=vsU^)_uC*o9Xk*{aW8NtYf%4ptAACC~NKRvg@nNr$I4~_Nk}Ld&yfT7jKiIwbE^g z!RBzw?qjt-HTB<^T!B8Q2lRFvyz*3V+`$S|u*h96?otL}!g2238V#>UV6Y&nag|wP z)aJ$<11Y-Acg1Zri4D)W7(Y}4dN}i1fS0HQy@$uX3AKu>NvK5uI@o@|E1m9GL?Q`l zv4Ko`mHB?1rpin9{- z)Y3Ia+m*#OpdJ_6dkVjB5e8XdcHW86AR{e?^X-gXMN;vvW4L%*T39ISGw)Ps+MPBL z1);z>f4&znp)-3=7x=c(6Ak?u{tlL0{F#7tchPkM9wc-qa&0emt_kyUKbpm1i!ItP-=0`kP#&jx;)qU1e7s*V`fu9YI zH<)W)iq7Wvab;S|jAWPiH>DrGtDGAh-Un7Q;$8zw4`&f2lR;n(2bI(AFqHbB66Ad% zwYb_l=#x<4r99M7*(m^`ipJpEZd>w>X=pA)Wa@Dj=bPMsUXBFJXLI67-6khAO@?a) z3YRs3Q#wKp^FXuvnb)V3fd-LPW=YhYT}AgYP35}ud=jpi3_2y#AA&wllw__e6sUJt zKRi*mj-Fr&=XYGi`@j9wf99AJ2iRTbfkmtTvuk>&CuD{ss6nXTbHT8`fIMo%89%WaI989Jhdv{_ycNU)@(F|ESTl}UD#(u*j`2+ z+f|hHv^R9ch+6$yc|$IBe&ms= zz7$R!mN>tJ-j?4w&J4Ytpz<~1zMQZ8J?KHmm!Fz%Pn$?XXDDe_6$&uK{G^KyZa*$+ zZu{5{X&FNn2FlyI3%bKW_@}QO0QS0&RI+ey{=To8#Mt>o=Io1zqJa6pUm!d2>y;>4 zBA3^USIu-A$=_gl;iEJJ(o15Z4?>a!2XF`-yw@hGXPAJ=b7hjzm?+zg9ymfs;vSCB z1kcYD8WmNq_Q)g7sPe=su4Wz;@)809<&oMYFv?sA-~s5uGaKR(26b=#Y=aRlL#VB z4g$mS*)NNhu9iUv!#1HJv!IyYz;aX+swV!behFJR1|JFH-IY3Oi;`au-`Z} zuWm;JDkUk7hul}J+>K^Br`vZ!zDALcG^dmlA4u5JW5?Ih(r66JYW71>*eKkbrdFlg z4FJJ}!59rvGGc-P-DI(vNU@s91cMHdQpVWt-&1h!G(sgH`Qvgy_3?XaugT#ff{sGc zb$`&AD9CFkaU#jX=!{IoKtEE*Qkt*JzwOl~g2}zO1VCyvsMk=GY^`h5vwU zu?r1aF>c+C+S9f`UBoXt46AXTZ10#ra7wYaZvsl+Qd%u{L!VhdrupiNhZzX)G)x{s zXSgj@uDFNsVORV)J5#5v@Kdt#AIWz%)3aIGwgZUDsWTeH zgyV}xQdh>lrUV5IlSj}QvFwEgEF)LlLW6q~a7N+$Lp{+BD-|T#X1^#e`7Dl)+b+4% ztG2`K&xPWIeD58dQ^Qm+XT1Zn`0ESEEw?vVI*=k?71$HP(B=J*3UY1NkNYbpot73$;!e672@8?HYzP>}!+0Ev@SEN|eJ)1$WShC6oGtZ;uTl|gpaS75O>ugRpc?$IfIIb)M@XqrS@RakW zb?dnZc`yGj#^fj}ioiT6jt&cY!y$Zc2{4uNk&oh*i9v3&GOH5*X_R?e_ICujjT#lp zdwF`=bBM;c93|N+pIt=H0r_Qjbp|Fd^)lzIH?o=gc*KKp)+KsVU?!!Up(}y*3DRKo z_nVkOeQ%V?d|_EFewWmLEC18{cQr5tDA@++xAyM@%;$3tNQdFoYpl1Ne)Fc#v?Jcf zs1?UK^HZ}A)inea1!ZG?tYTbBT-Q~cECDRl#RvCcs#{w*l9HZX{^E|p5d5+dA?(qJ z1H2vvx4v97P_9t9`#!HkmJ$knE$5VY7Q~;H3WfTpF^oK((~f|L%q%ztDsY`4>)!m# z8VddN0;!(O?k4G;MoCKsOx*6Qy~9p zVALTcEI&WZOiEu*M# z4$JRb?^=Y4;&QAEegpJ$?h6h1fCQ zT?uBYa4svo)OE>BumJf^+|9P`a?Xyqyr6@HsRiz!&+$*e)=1uuYY_N143xGo$K`e8e9~0Z zvlPs_aqBJUj8pyD0s7mb)Ag7WDGMOAeANMVw2mSD}Xlc+cu%sC0H_ zeS(iz#u>Qx>`XaTfVeF#>fJsTb$BKQU_EJA*s&c~J|xrg$dDr>_EczAWikA1-sFGy zbyVX-R0Pp)d;yiV5*R-a4U>m zy&#?`GLrRVH{s)a?_`f=lF@wp4DR0PzJxICAK3NMGe3`%Ejul|6p)>Wdkl9HfwM_r zY{?DC!ZA;{?#(O`xWk&ld_g#=i@O)!-A~}Hg`uyHqyf=?Q>U{H+DSC z1^FidOWZ3WkMwV1GL>1pZE6=F zDEu{Hbd|GKP_#9K5*AyI1Vwy48rPY4j;Wj4%Z4IIU3!m+;^%Yf)_M`?`yl@NA@HFD zud&$0V>KVs`i+|gE2fT7K)~<8?lZAQgnfzCaU-d~Y%rb?-;K`0f_EGWmjo|^%*f!Y zQCBz32$GEiiqU^?epS}@?ifqLOV)v7l%PHHpInaa(&@*j&Z!7nyH1MZ)=M7IxSSIP z18L_DKxTrbVXB$|YZ{869ehSYD7xH7h?5C|w%!heh&;zafFNml%hi77!@F5s=w81V^F9I37gLII)s8EJNzxl zMsDP%0wITyo~ah@HpR`e0IkQNJ}WCiDL72=kd7ndksh~^z1}iuhu$Fsgl_cd)Ld;J z`e6c|rz@MDZC`iDrh1J8hz+ju>&Mp%4N<8u0Cf-Na>ZyrWY!T~>f3u|-}^F$W61eq zQ3f;W`@vUgo??XWw7t6yhdy4XwiUk{vGqUcya^Kt+ zOf7Ej2QLRAxneuk+@r%Aj|-h^T}~QHRmv>|lIWo-A^fpdW#d+x+0}xTnQ^JnOta9t zQ=ZNbn|;!awR`)o!fWC5a`~AW?jQwpT<(?oZSkn4r%2^-E>A$tk(fUy$?1!Ge}T|_ z#Mv~ako+y5;^_ZPde;ddvEmXF1m2X&n> zBNl?h=duPe+;D0}rw<96*!>Z!Lh9K{WV&`!L!X`1*%tv`l*6`fQm=rT3a3KXLMvh} z-;o7AHYEkLUL3BKtT7H?TH+HVBmJGt4M?QpO^VJ5={_|Yk+ihX=9i-K+%crli#dCOC z2$d4in;|b!BVdj{MJuzm1=>juIv-mzK6V^}UWUqb6JZnXal|!4JyY;x=Y#(-_1*DU zzu*6NZiXLGBUHWOUhmLimZrilD(BARO&{AY|4o2O@n0bJtKSX?f#wXrT6Fe zeLZ^ghwF9ibDi@%&vWkUwI%YT=rC2=NdHfoQyFQ6w{r_XYj5X@Y{G}1xHuspMkL`w zlYqTy%CuG|wON|vejG05HxM1a(+$bJZG6t24d1N)^`U#`o5lou@U@7dzweC>Rh;6) zKzcL^?S9JIgq?My zRW&CtKs8bL144ZHJ;EWn{^Rv_-L1Pe zZgWV+IGxptH;?0(vSyIiADx)MW9)S$gTIf@56=I~QVy5Qt7e^j4-U;Uwq`GTO_uf! zI_+6N+NE^58zL~`Nl~|6BTX=a$DO;N$Xa_PzEbqC$h)GSgCua5#VA6%=2cftk8VUr z=PwRmex8f7=OpPbXCn9HC&tphG)_M09uKCgs*YL{_A*!E|4~*5+VYWv%hP1*0YtfJ zEWDo4ReHe%pLaV*A?A2a^HG5H!zVgZf99_UIT}3`+THHetv$F4A1}NssyLy8q;COO5ubG)g;d;$(A-0}_a5x5&ozY*%= zD-S%B9|T!N-jo;N0wZ1&{VUzh`&k+ZIKlM8wZq|@=%lm#hLgTe@ndg&sMGh+($1;A ze{eCZ@6;@um`}pjr|i2o*`&ZMJ!aQb3+uOl4^gZa9q)YPMDI?%0G3J9UcB!l1XL}_ z{MFoepF@nz3k3mATCE<#9W~zM_^|jrElm4%qr>6tNVeNxJbymc$s5g~vJ~UiKg8uj zGb!th!umn2bszWLbR9>;PNV6Q7JMuC<-|F*+<+&Wq_`Ia#wtGh65c7^ND2=N4Jzik zbs4n4T=GbY8M#K7v-J5xYCmQ$Q}O`m8esN)o5&RbtC*TAO6FMD{Q78j6boR*+7@Awg)bXVHdP=n;H1BXziEZb9Grx zr2pTC{hG4{`xpKfei2fSZ?9W<^5uT5Y`Y*%ehEX>9|A7`Kl<67P^|0Bb`R#UM2w1X zkeHVW=09;K5rE>(*2d{p=Ju;|Ni;WKYn;0iCp#&OlfM_i^FGjbm~F{nP>7NZ2VvFV z8Owt{G{p%=`=s|){rWG|LS_1&pIKZZdl4sI`Aga#@{CxRPvUozCVz_P&Hn?R8bz@_ zx3JlN3)kPZcIMsf9XHdw-vVh7>$$;&n@yCzE=*wFrgLuL^F1DlnSD1DSu#Ma>qV>3 z|3BE(@95EH5twnTBc%zuE3Q3E7H5zP2pzQtb1i!YZ4$EOnJ7VmigibaB z?K{(kGH#V^eRDyU>sH5c@{}Y?8f53P7 zQ#$Y}KPPzq_n6t-{78?xE*M1%CpkRo|1h+v{J5xamv1c!EJ1smfN1Cpb1M4|m!Jh| zjtfJ+OMJpBMIS7=wUgTA z>jhGr_<1%I0imJg@oIQx|H+!EC8eL5-Ed0Fh8j+fYk03BvaQ7e>$3hg(wX-EWD%l7@x->`|K11Me;VLV?(C38IfF?H14OYC**xQmq6pnB4Uh#E`J zUN`+;K%(i4`b_(=n(G`1e}vdrx(@x@;ILGvfm<0*^-=nuVF=^x;ryV@e)YY3aHssP zvWER=8=+OY8>ES%POp;f^6H=H2rt4}hR+SYZ|8qgIeW_bn~WRNUff*5pigJQ3&r<# z7G~Y*onBG>dIxY{nM+?8=Gp~0{ADA0SHH5N0Fs!Z%V?~>eq<-ov!XW1u`B=yz8`0N zq1Xwq%i$NQs=*w*ct8GbyO_X6&In{fwCy=(scI*J&hQw`uM_2h@4CRvgg8q-Id0(3 z5t&!!o7T+|i8Vr(`j%#pLm>Gt&V!#DV>wFuc~lI#|AtlCNCr;cWw-oQ+A4Cakw%?7 zLM@kNa7Pt~`#3<#=uMC<0^nz;uosv%t>PGF;jk%gks#Tu{B$9gm6GW;(t(pY>#BF8 zrp8{i)SU(dc!-KE%NlNuWENbZTFl*gk{BK5f+0UU-HwM=dvWJ3t;Pd{o%p6p`r%Hg z=17_P_e@K>cbuF_+z~aU)2?x*c~O(i5Jk+JsJrQY9OuFH>BXg497i}Pr9-YjC7XI8q7 zPwPfO{fAV(Zhj0n@pa6fv1_?#XBsT)Jo(4J*I-hAfa)*XI#kkk4z>-DF+r$0$Cc((K+#YIam>ZLy1gEC$^f?au8VQVkb#{4u%Mm4OTcMY7!JeR=52;mAF`KB;C*`o1Y2n^f#G2+C>F%&GqW7NegBTwp2_7`7Gl5tKT zTuRpwcjZC%Li{eL^BU-;Q=_@{blj%{Z4_0?0$M3$z;9jr&%}f^(W?|@@@uY&`z@26 zTFlH#zJxMnH=X` zoH_CN)>r)O{s8BPmVljVN;q(%Dz3y#l_y}=0RRTJo`)>;_pLe=E zA0l}I7sXQ=9;_U4v!2T$Q*=*S-d5Z5t?rThWt3OA6^6q}r_?M>l$9rV5Pr5SscqBA zKoD15dJoRG|77kfx2u*^_RMFnG^=e}%aDIc<^Nr^1ZVK~U?s78uYA)uM8Os9)#c%{ zi4|0LG14O;SaC08c|EI$xO$ddUDMDN2%V5eiK#u+u?g-3SxXNT>&)=G9UyrU7nRlb zsM`GBZqPh?m3+nj3*t3(e*_Zf_^PYaWkd9~zb0aJ)aG0i-sk=X4Fm5ZRE0-M{^>QT=Y%s_haEZq6GQLKz22qWI%Y z@z&aF%Tw1gtMv}!o#6 zXKM|p(}hv4J1j2$1A8fbXx4LWcC|2Pe(6jA#wN>c#BePeCpLh0!v;5PS&-QlEP$*Y$!IKYlthEg zL1#IQ(TTw5$hz86OsRwOSg`4A`Y+qY#fJIN-z3B=v^+1*L_o}zvo?SypJWNX5&cff zn+NLZu{pzOCe7#)F7H&B_7==3rw(}Q~%`~Hhq zz@mMXuj~Br-~T33985Uz1WTYR?uY#RonNV6h`{&9GqoV9>&wHB%fKWtU2Pup=_Z?^mrSb4PgL*R$722#zJnY5 z|C4oVLXbcKH{>#vdK2r0MG?!PG5!!YWOs@!Urk!t^f*4D%x%QZ?zTVDQ0eAqUzpZ7z6GJICk zJ;#Uy_lTSQo&elvGw{W=H~xCCkoI}|n(w5RiMiPO1FQ*;3BECj>E`YcT3H)xJ#ea0 z{+gO*qy~yf-fvN8u;(!wpwn=HWjPiDu25-=ZK>t9A0+aAOmea{HR@}(L>qy4gh9G2 zb+93yHNT!{mJ>G zBKhB*lHz*+ey{41wQorh;h zWO z=dqlqUL$N?%x_{efFffA(n8-Lp#pwH)Jh*D`S&1{6jQoGANLG|Peb1N zrL!|<`9NVd`~_NQZRZj&+Vc~hC7C5DS8Eys{;PieBVBWc-8gp1jAAtPslWOxV>KQL zhyzVwJql6q$S7X57~Xm24aO{B{BP!A=wEFHs>3%At(HR&WXCG;;0-!k)-`q!MEl+;c&LPa_T9fRRik>AhW`@Snl<_J>5_Sylo1Ih_O5a{&Aul)cbk)w4dP7+nns z)1b$GljOE&fO?H`p(%+nnWPJiz;oY7yS?KH*Bs-#9zzNWmN6+f2osPNMfm-s_N z@J-2(A*eR6XAj)b{WmR+=kJO_0^BRK4NT@APO4r!j|ffyL6HJqC>QH((-= zt0eJP$WhYW14?#nWmC`s9>;(JP%w~%I?Y&+A98^y4ub=$x0123HNcK0F#tcaK|epZ zq+Iq{2Ij!Rl0>Ngqn*LS5D>@DR4Cs!^#q31Qj=&*u935fH0vijL+qDMrm)c`ij~`! zs3(a5<016L>TrstV%8r}03jU11POZBPf-r_{*pR?c_R*YiqY2js$8}W_!dI{p+@X?B+0}gjo@(NYUa}Bh+D1S)yTcmlxRNe z=Iu=ibb?*^!t*WaFBf0KG3`qwA<>MtR@0+lMND?8SME5$oN#k#-jVe(x#s$vn_!{}E-# z)V&CA@i*&b$A8QX+Ppvki{V?29LiBHa46fgSZp9vi|vd-_G056;Ch{i@YPh|s5WHIEKAWH zlDoq;oSrTcFF)~=*J{td74MyA^$FttcplU}eDK-S`(aW0{U%y!88tPQ&c*eP+pX3c z-t?uL+is%k+ZGL11u9nV5Xe92Jv=(xzXGr`DxzrdyGnVkg>%_{rKBhOXZsW`Z#CVE zM2lyRcS|h}rkA;H9Z)hDX4I`2?Y&9?Iq3Pl8&uUtFd=lEkjt4!wUy?AnNCAN({{+SJVJN&R&Y|UYuL&ODy{rFLs(jAZ>CKW4R(C! zQ`xZ@SMBv{&XL|AWy@1beyUXc^|aaF0!^Yc?pm<*t#)?10@(T5vVNBu-v9oT-q|0$ z`YLLYAmo=#T|}pqWOp(4L3z_~m@j_>|5zr7BxC#YDC@baIT{3>);miAg9_~uQvrQDaqNd}7ZPz8Uh zoJ3t3U;sJtcWRmyI= z*IjzIRc4;lI{W&iYTkY3QxB)W!DO7u>fPv*44m8Jxnk{+tH_`wEDw*ovDCzSR;ISYTQXTi~e9633GG z_{>=c4S4&Tpx`@NO*ggvL0zbk=~L=rXti1JfiFZcsQZerD%#V*?9r4t)QPp!!msBr zle{*1cgOW7+n>BCak$!q<@r?z3=VFODP}tl{1%a{Z=JlfqrKq*O!5;g!z&DUTlrJ* zKG?exf&QPFQVZt4`B;9xon%2`Z_ZJ-Hh2cDEKdySkJKkr9k=m{AC%o5x%d7!jPrPC zw;`GAH*2T?Qo_Q|r+NZy%i6Tukqy}PC@cET+0L7IMG>|JA<{@CH;=T{qrm2O+G;&E zOtI{gz#|EXr-Od|$MVhvz_mTJ9-uOF&fS^ptPF4B&rS;02 z^>XR?F{|Vk&i1QlK3eY;1*rH*X*@K)aw66|nm$px)Q9$?&I%_9&Z8pSY3KetM}NQa zODB;6<>l0T^GNX$(w=p4V~9 z+Zm}nUb^@9BAivhESH;dR&PEB(DO>^65Psuz=?Njt~8`L5$rb9r`KJlKrL(RTVOlf zHn<&G+-nHva+$f3&wKvs9kVd{#KsaIT0`Q@HLxmjQ?-$r>X)@8z8(G!1E84#4hNVGYGkg8E~;0)|1TFHtAbIv%lqcd3P!ie->>La zBdp;pT@&qq6Z~wNK+o%NE!^#!1O*Nk(U&aBE$^~iu<57eyp>wGWYf!?m+jDRSOi%u z9?#QRUu=wmIalfS=QqsCdGxb;Rt8!zzPP62HtofQzWzI{Z|V<0FO$KQ zF;gzo40w~6u7V7zUf5_f zE4!hWr^}_g>G38R-(r-Z*y6sqfLsi)NxEiwtnRi zn0*p!y}P36W<3QD%0^Udd)JZ={)Depc3ETVn=m)f6E`c+eF5K;cH-tZFD(JWl>>c` z`h0zchsMCxCGXseuwa(m3{cr&hw)$jiR=&CTl#VSLv^QxlU(FeR=z+dmGjQ-Znx%} zTf5ElRjA0wr$we7WLZHJFKK8)!Ci5zD>nO-XE8#t^y7(eC=Es(j3ABcPpEs_gV|gCIo2&d zRe2lhdSlB~_(j!&afSW4@(2un6LA4r`p_b&Yd z-{-^e6fP--ox?YYj=DnBf;0O&h)3Sm%wV7QO2?GR?Lzm(h`|`vcA2gBi}ny(NT4(j zoA0y6H@Q)jtyc&GQn_!E9VzmE#GNshrts#a9kUNEIcN*T-{^;R7i0u??nn{HANfRR zO@0HBR+{}!+H*<-2X0pQ`iR{*ESlcb&j!b}MvbAa-*oaKUT~nR(Al4v?y{)}5MKA4 zZs?R`suf#&Wc#v`Y%{$w_>v=a-X2!OO>)D4nhxI-x4gF5kn8*vR(8oqCd0>G)v}A* z>|#psM4vZW8(f6cDMK-f*%^_t9Qf5oVi3i9c8Yu8muiFbOIjiMF7yWZmg`v|y45?{ z&j6c?+e(mO``}v9y&y$M7zrD*+OVh1frZ+ZEj6-D7w*;5Na=T|Ur!vR*bw>$l#?0H zi{@rCdwRT5+mzAR+`^OQ(P#klt&O&oAId|Wi|C3w3;$Dc{V;ZiL%M|JjwxuoD9ZYg z?D~LX*$=>HNke6+MM!?q;UvWJYe=k4v%tPsxPyWj7^m;F7Xm|QmV6N(8o}U1DE{bz zd*yflR(rW<=K-s)sYRFC%hyg~PO-TLpccmYXW0JgyZam|LeYh*jyYEeamH*fGfS6_ z?uYMgZ}y65X>Az|C}@oAH`BLCQ7dp!n*ZtVTz?f#XS~+67NUv9S$tDgE>c+w*Oo{q z9)P7G8`b7hPH}&f``Oylrh1@l&^2-%sl^VeAOVr?{kI6p*-wq;a-TAlwo3qjH2JZW zxiC0r%6~$`{$+=FyRm(5Ve;CT4p2O>&YLrlW)|p!#xa-1!>YZTzK~u4RQsCW{qb;_ zoV&A#)ArJ@oVPyiTMcdFNN~T@$6Pjrt^D40lc0RD|ArjLoCi#$YjHEOFm|l)LD;kn z8NV?1E+()YO`S6Y^S@Fb`&mJ>J_o9p-dQSLeS>NoXH>WPHf&EtO}pT>bk7u_yHT&? zt*iTR9^3rbVKS!2^R}LM zcEsnG^oi_;0;ZH`A>&Pc^Ikwo-dL4wxrD}Z^ZbwS!RC+KKIkZZrSIx25U|XJ??$(( zTqA6YQCPuLDAIO*Asr+#W#4-#`CBwid5mBC#v&vi2C!9L)HsD#?6tjJ!B&4@Xv&aw z1lkwtTOM!4Jd>48oYQ|0s-$7N@9;I` zY>$=pebwsrqj0Z8*8aZl^dZ6K_KqAW!WrZ0CP$DQGNaZ1T@C zBLn%b6Slv`&!~6}!y6a##Za*rwKD;?OEdH2TvX`_VL)%FxB?6%lrtv)HXKhf}CcRg%zh zVxQH{X$l~HjLy>R%D;vLTivYdFEs6_+jh??zb2b0(c@*5xvofO#FOvA;Ti;fQq@vv zy4k1yj^1z++xV;VAfq2AU7CKbYUe90H0;uUUCeOq)55j9@4CSEoVl~vNpk$~m{#Gf z$pw(C2(htJu;9w|ROa%~x`qa!mW}Q?1$-_GCqCp@y^r-0Wzz%OIkzRu^&@t6Z`%VH zohZ;nU~t-pJ~8od?33JJigI1}gb&V0+I`K7SJG~DB~&w8i%HClY&$mnf)j5njiXY=}yzIzGLrKE}9?04kE7}J<{KJdi+K<7#|8|y1;&G zh!K1ITuqfrV=uAozSvwKTx#&hbiSk>JA^GAx%FbY63|Bgk7Z-h=sSvpK~YqI&I;%ikCBG9_f#Tx z(>VAnKlH4|ie;F`A%QtgByJ-^#5+oQtzsZL=K_I#S~7^<-H>y>@3=RBGb740Vuvq6 zak51px5UrTo(@|hE*4ndUF$yyT2~>k*H*D-)usC=z=-H`c(Lhou=};6z3v4CYu9$h z+}P@aKWg~eYv)xFUxRdKF0cia8{a<+GupY_7(2z{4Q9$n7Sr|4_gA&q>e?+j)WcoJ zwRX^6cJUpvTZy#TJP)t4Hwf*gV59p~4VU8MqON}E2$CzRaG8Al_L63}e<{D~7O`&v z>2CQ=!j@(j1)f0u#nDeyg#Se|FWfGVYbc_0(KAT5Sx?Yg0xxa$wA+-(Xqrd`Cd2GE zI#u{+3G_0Gy6xh3);(N1&V$5+c7r$jP|s@TwH&tTE&fYFhn?QlW&qMM<_;cf{Mubj zI{n2H+!J_OUa5RG{8OJZ423N3#_(<9UtlTVvHcwl*7x=FbFkZLM?VG&g4TjZT&DZ< zPm;9UR(L;Yl9`-^uBiPgu(w#znPmF)_mpQ~L`u`W#kclaxrIrj@BX(%zi_kxc?BLs2hB8?C*oo?>-TOa!wNHTjhfU3d_KYMo&U( z-F+(}wHY&fBst&r{jldo;vDugZR&4YM?NmgfL!*8$xzoP%vQVZ0+f8{)0 z@fAN35A7)J%T`L17hCd7B^k+Nu6V=_sK{7%j~(Fys#1^Pop zlH&(+$ibuf&JWVZan=HB?SARhfuSeu-F#An7S5AbelQjPgop-uRw|_sUaUWdSM+QJ zEg=OInjK`(z~fP@H7XGVI|_XIaz z=kmgpIagS$?B4$P7yElHbN{g$+l%Ih;aVwG~mX-W5iv^>X(_@bqp?r(Mb+b z_gQqefeZt9qVO-DDQxW7+yfsIf0k{(N_*^Q=PPnxD&XPCOIHl8^`OT)RmqO$4WAy4 z{_RZ;bT}$X;;a-kxOfg!LlU_E51tCh(8ORRMgsVPGDdMwHcA-J=vnsW2N-yG$o|kh ztYLcC^$!ffl^v}TE#r)R)b23$Xd;Ywx!E00$m-8#uj}>{=pVd~iI{lr?Tp#FtCqF8 z2|IA%)z{!LyxVQZuN@1}+ z+~7y!>%ahR%R6?QvKrX!l>A7xtpNvLFWlv&r0O`Jrg_GCZnxyQNW(jQYnf%Zk0y}n zXJ-XX2{wgK3KXOYM3-h4Xw5u`^bLpLGfZIQH5S+q*j0i8WiJLNr^FwpunN3-w@kx{ zIpf73%ZlYSx5J4#-rQJ8l9^mbr+Yy@DltK-hlPTXIPnNmIO0Js14WJWIN-R&AabSZ zM!`_dZwj%8SMBvw#EO31I;*BIFko6&Sg-5K}no+(wRK$K>I~=?|(3)*4-l~7m zQ-IFq4R+M-XDAO&aUXYpi3WRVk#I0k@Fdef^bQ_@`wDigh&pJthtkqJOAZ4J!`~kM z`VB}G4i(9xWyIbop+e%FrE-!qCJO#Z8c5QHr{k_}p!NetxLfZ`64Fk?*9<*>0LFr6 zb3lh`>2jDs6)H@1^lLhP8EAKSI#}^5wO2nNUD@Av0sfGQi=EFZ@4PwZo`_2u!S zyB7hMv5H8R_+abSaN=DqTg_{plkloj=u`c2pW)xeu_W}UdGVoxu~VBRXxXwTU^m!? zuT6-0<57{vO#;VaEzBcsTPx<)dNFw*`YVp?TxE$P!sVRXaL-d${k>S12nIn^BJO&4 zXzC}@?g@QxB^aq1!ekU`)MvS|<(z0Dv#!&y4l&LJ-9kScHiqipmOmaFCH8>!e8G(U zogc6(&5cei@()+T6X+S7^*rNly;4L7P{emr$X&OkvxCCV}4gjLBq`wkBrR!rzcMx?---AYfF zsu|m1+$v^BkQeUT`FS#9HBK^&A3JUe>u~0ixvrhQqxdF=w=yd6Fy>dqH;Hj4!r+pk z5oK^-a7leex)#ia5vZvTv+!9*Kb_Cz6mC!EP0TX|NC; z4Wykz#bCm%#@7OM#^kXYk30xw)~6_n`dZXs#xucVomYqVShk!8$OG zjNatUcY*Ckj=!kw8n6aCE=gP)9XPA>5JtG4RVrgO(7X5pc@e6Hb2c#0xVxg)Yyf39 zwPGs9jfbNx3q3hd*;gf4&>D@biTs2rn82%&8?(|nO0+nB!M&Jl3cq#f48LOOnqZs( zcS2@fZX7DP?RZpk_8h=WIB=|~V(~-o3_~u!Jb2X?V|F@+b?3-Q^-!V5LE;xo!9Re0 z8QG@JI9vlx#hMe-P@(Fu7-5Y{XZ1}k!@>KrZ}bT5$+B_#vjil19*jJcjOzY)bWNUH zWB6j*SykE-rN6&mo$|bWs~CI`D~d&sf)u}!OJ0k56hGc^5*RJ%=dj*OCr)0ea8Ld9 z8-o}|_bEv68#fp4!$qFcD%S$FId^90NHP5y^{uD5>AhFNSD1cRE>I-f+KwSTsm)vdEB*dPU0n{&K6(-TUdreG9=Lu|JUU!BEpqKDIo zpPe$+bw$hX6N;fYG!XN0Jx5Hu%~88ib(+XcdBL0pGi1z00V@Qso=~I0PlxdZ`afUl zC5)#+X+j*>gNs$3qh#d$s8pPc`e4A)MaBZu>;j5%oGlwaN&b7ctc&*Nc%jT=SOA_^ zC$D%i5sQ8Zpb~ir+LW?R(^^X?Q4V@a?_VV`PD={DF^nZCW-2v@KFrjF6*elVjqt~k zmEx1XKpZ9jDhthDOb7NQWJ7mJK2JZnyE#e~S6qYC1F$6z`LmFoiig!vl;Pzc7fKaQ zSrPhzRcyXcxnqZpN8T8We&3q>jsK3R^3Bo7n$Ej;|P{m-CK^}IBZ0EC6*oKf~CGl43 zSWK|MJPO#=dWg>#9u+q3fj}Nu4zcmtOE#;b^;s&=?5p$}vj~mY+!Y$bM!R_deBI30 z=pQob&~S_VE8^kCg|C|u-fmc@952CZ&Od#{_kBV#R5$rG5}rHq1r+PZ9MEiFU%a$* z1KD{L&_Wznt~nC3^}S+eUt%>XgHu9lGF~Icdkd8+srW3sUf?YHv1?%*dVF(IrwkH4 zqE@T!1#AT_$ZvVTwfOMxA=B)gaUw{G zG9SOXtBs?4NuMNEH?#@}OgjGa&?Uj`^X@SzD2v}M``*SW+i%Vd%LF#(T41CKZNzGx zIBHb<$2|?8+Y_Rp!=}E=jZ~|p(ZV;x1}OKYo;+4F zRw~U1@uf>jP`Aq;1JM+1#2G!Ts;#-ei-p57!l))mO6-I2Z`TOyR+XrxM?qF%hJbT2 z{v(W)$Hz+{G|+omiycT<5L=FgZ;$4`vP$!#ip-xF>SWm|`X)7nQDM|ihED#`Tif;A zt%2yEe96c6Tj_>xcQ9b)*+dCc47EFNtZ@Qrm<#~`4vN9Mg&3d~m+92TFIGKZg%?=m)ewP=0{vv>TnJd0D9JYgWg-ji|~vRFnxvQ-CP#_=pZ} z{Dv|QW`ch1UCNJ79I;~3eF`f=!`IvbsxgHpoyu8f5l*)(R(%4lf5j(#WY~!L7W|HM zBeI|cYdJ2&p?@6#t>#-W;zaT=8ZsK%8{_?jJy`J`M;_^>)i8nEP?=2r&7a=k^X~qB z*eRUKYy}_Lk2w}b)grDEGbJ;uOBAKTP*{g4u@6xx<1whv<3k>ks{$x+yLoKHA9;>3 zs@EgvrzD9weG+Ef7y9F=K=F45%$12~kN{k67jOd=`W%Y2(RDoCF>@W;86ukuBKqIc zq7licy-5*BFFKK8#f28%W2y`3J83esFN~>0C(bHqlc!o=LuFC;Y4V||Ax1B#Mxad# zIeoKpeb_+P|L}1%PZ@nzWI0{rp|r`e1;TV^Zmbux%c3%#C&WXA`?c@0Fu`!f@uuK_ zQ3Exu6@?0oL0xXnHn$_GH|oCI;*9pQ5}`f zD2nh#zZfq2g-3Z38Wh-GK#r^QB=$lvazwt=w$j7+(PYsl_ngFV)Nkl?ndG?NQvscke~?c9dgAoKn5{*(40O*r#KCKh z#7=E3aA#I{Au;s8XO-~Qxp!~LpweCypUn3C3UcCU$Dzt_@eLvx@QZ}Q?Py_o%0#?W`HV{P|I;ky0z1T!0Ku-1pz z5QKr~V>M|P76W}gu`b1+B z$P)<)j^5Ndfcjp8A9n$gHFLrW#|4>ZoZTFm3%->DsfmjkC-cU)H6yBC=?WT|j3(C= zsfC#ZLRK&Q>H=P1{%qot8Bkk^rZqnQG%rn2``v~XBzOQ@B}H)k401TLutmafO{}qz)7AL&t=y z;9CEUNWezC>_Je9BYR+Y%3!oUM4^Uf8GX(IF*_sgrdSC8*_We`UgQHUB4f4q^L?0 zP$B5$Pv>Tm1F61##fD=4#Zi6~VT6Z+CT2T!^ z<_(|p_9?yVP?_Ab{4Z$e(qWvH?{dJ8=(a&enP8G~)v#})#wYSn*jgngl^UwgY~y|> zu(bZh?h8fdWaU^ntR}Ve(Y7RvXpCYg;sjPYfw0*FS|VS89~+c@{o^1YwP4YFk&X*U zXKMV7YsvxWRO6GHA*wF!nD6{`A42j29z6|By_?sYk=Wpq7Vp*nik$Ao+^fxt{R{f*Yd-y&Z{N1 z;2Q#elp*Dx(a+5BY*O^~&=|$%EXC!`t|#2Uy7s~BJIBl5O+MsGHr$w@b+7$U3FH)r z^1;KDfE$X0Q*EB0+GjdC)=Z~=mdf8hgZ1oGh4^yN2j3UC^Siyypw2n%pD7UkIS%X+ z?6_#_nc>gF@e8U{rcf5OXX+rqrV@Dp4=3OzK+wRYPQIQ`>1WwF-fL(YQRt_RQad__%`{m1ad#00TgY$Rhd{h!qPL1V^}$dTI%gi7#gqz~*iIIsS?m?~BE2R0umq-RyZZ7_%gqz=stk z@r)Mndhf$;bS^wCXl6j_>l4BD8lku%?k0Lc`FJ+tdUbX6gnI#ok(-V3ju{5m%Ba$r z3t|&X%7>(yULW`6>3E(%BRAoiPhf3o99r0_>18^%M}P zjgmy;YdMNBoJCV^y5q*0&QTZD0>dR8{y1l!NEARW@Y5kOmnDY&l$#*FsH2_pAA1^jJUh^QP zStgFkRq7K^ES^~vtO9_D*#~ReU@>;b5R%yz7n+34FncBQz%$YmQ%~b~lUEClZf$6} z&-Bf$iN!@)k9@A@A;X#-XJ&o)j%r-&a_@sEcmel{0oWN(wR$_}(V&||vBbI%eUaf| zr{F!ve6|!XyQLyK1xWQWaF)k!th=A$fdX-@F0LJlKXQl|O*o5QpqFX8AX4R)TV&I3 zJcnAh9eVDlKr~Y#Lv0fhqA=z>+&!Vl!}7{ADE9~r@&-8%0Ae4NM}^>H^=a$xx@Qq1|A~8;4p*I>W9dig@=>RZL)&TYcYSD>q?J zjr7;oEceN+!rw7Z_!fb@hZameAwY%M@mZlGXk+eIQH|#M6Fu#Y|9vA54ovwl!;a~& zfm;nmyfYF-MuC5~9R?O9^&v&NK-V(*IIYHS)W(qSIk z$HDjgtk7pthaG1{5}uvR$H?cNzhb=~$<>!!)xCgl84si3(evI%krr}-4gRR15ZN^- zAHbUvI1&9S+>qi zf*hpK9-|QbI~u^5^Rr=UDY4QNzmU7n>K%0m6gQZC7bs+wQVll}#6}4`!8R- zDNzz6f}vllkehU2w>TmTrOE+9`d;STe?$q&jf5vztj^SrF_Uxe!#cn_w?aZu9yqcG z2F=PI0dVvv2-XktWGbBte611jyA9Y~80Sjz7t<&Pa5tYLo6(Zk3jvvw<(FHX7VFr0 z7%Q4!<7_iT%(VE2Q#3@<--ueVSl%sPfcVm(p`{ZN8-xX!HyF!96)wqb;X;@zl@E37E#5fgalQ_K#`cRFFWJV_g) zl&d(75X>^85x{GHxE0(8W*#|j7Ngiu5)(p!hIi6?OFOD@d)RPzl~KSCcHL8e`pRBdya8sj zurrKbX$5qm($#GAWC zN(3UqmS{$EFsMQZEkJOf*X%yPoQA-D0b-SpUlUb64Q4dyw-v7uO1NHRQXhE(t)JoKNXq!Wca>1VZ(V(b2dy`V_e4oL}oQcVok!p-?xU@{@Xy5VHt z{(Qn@EONIU+m^BmBC@4N%Q_i7*^z9#?N{|#T&)B2x<#Dsb$+9xqWjfK%He?8+`a=$ z=N?L}*w3&Js0uNU2R42Be5PA=wEd7Y-)cCS*hl3X(;d>u*`_)_C#2&CmBVFehLU?t zy1DKdO0$Y`dahK=h}dg2-qcogiTY>we7(N&EJylhikHuYSLWAiTt;&bZk_yIJQ}fB zIO>3Yh=No5db4eG$TviXRxfNJmnJ`Q#f!*Gz_rnjXXO9BuXo z8I2#$#}`H5x5_x&Dctjo1|Ka;vMFQW9SV5Gb5LYmv-No%3OjgF)!mz90!#_iC$K_Sew#$cmpS< zU(V1@(=U6@E5!23d(@4w!n?<%#wpz&G-sHP!W$mNhk83>yAH-5U8Iu!g7)s--f6S0 zGknsKvpxujc(`8S%Do)usP&@NP&yBL!9(PzVjs6=Te2|Z!GcQff2RDISux@Wmzdr$ zSu|4N*_DxXgTX0nB6GwDyaBNy-&a>8BvblfvD)J>FVWGiWIgzLlC$AEezCe{jQk|6 z^}UlSRKm1)GP;KU{U_wy*u0>s+mw0GJM-tU90G*6vx3L1tDh?t^OY548wXbkp#hO5 zl6F5x@D*5Gq^&{kgxKFy)b8|IuR6Nu%7{71G*Km|6|)`nAGn2nL{<-4biMj5%wezzA6&P5yRp9 zZW_se8R&YtLMKkTshjObta4v9PV{Em<1-Sy36OJx^X55F)*EZ2N zB+W9{m~ML6e|ZVX(N{v_v@CmWaUnDimq6+lc*(pOAy3>Zd0DZ-J z_fi|N!D7^ipnw{hbNx8Zc9A)4sc4t|G+GJ-kev3E#PIs~jAGfm2zAEB0!MLyEv zr1@fN?{tNO3HE}gxt_)Q+$JN8BDItKTR?8Q!{+ z>y$%7<)2c2$?-O7$s>MdGuNTCVs8@kL+Q%g-}u_yThHwsDb~-xt$V$_Zqgr93MFg0 z&E~=K#!0qaoEFHXnSH&oaqG-BHZieuy&pAKBvN$fK+EVSqlO+e!)6I^$bK*i+~uG7 z`b*0h85=C~C1X6tiyjcA-qFiuKj5_;?xUS*T03hJMp?s>uzT z17f;K)W%vU;;iqw`u+~o%Ga0%I0baKm%H99ygRzs%lH&VwDh3Bc8;M&`7;**+ds-| zBu&q_)4DT5+#(O^ftc{RE)ywhN6Gn3us7a?TUU=?dKOr5y+$L9mfH#}cUIiS%D|l< z1MT)1HGLb5RQ*zslujMd!=6CJWqBC%Z!~)Cz@7EivuvUMXzll5lbFu?X=#@I>cQd?=x-~!Dp z>Q-#GrwnynR`8zYeM+Dv`%U!#v>5MvFz#cXoPnhbZ)C+5;aWyP;daQ%RL!^3p@q5o zc#YxXR5o*k@y8c~Boei;gMBIMMxLSe9dNw>(UP8Sa9%l+6IJ1Bd8?yGiEl3MTjMxW_p2V3=}aMpSBy}wzF z+?6hDr|w6lNGpAOo>9V6wh?)~#y-pg#Qt!s$*slpcQN6PGrraKXU&xX&VZn~@petp zomO0i``F#p%Y+~3X%pycV`+{0xhV{mlimj2J(G|1`$+yIwV^CIv;RqEx#uCX+*W|E z$shASSJUc+O+$vNZw!+r56AO1hW>}RbUI2t^trS#Ew=T zco+Un{G=5>vWA|6zIhdcCV^9HQMJ#dJFd69wPKzj(p@~8p$6Icgz1Qf(sOU$EU-TR zX{{TFtP7YIz6{aG7UoHd7p<-5+cGJS!CJS798;X}RyNOJgX~#&rpkZ)+d_3 zb6AN*G$c0d>#aMQ%o4bs7TN}O;L@pS?8UF58-45Jo{RDic3yiOz!OGX`E!J-vxI8G zdnd)pjj(y*$UQ9VA3GXKob1}SjGgAYmldT5JQS2Q-J6d$y>bN>Z7yOK6en=wd9{-Y z)8w7i%b)u7{)JRHk|GA@_ts3w$)S-PXFx$c)%MXvc0U>j z=UP+bt~RffboJ@{SepuX$%hT{{*!xFm9`ZW@lNJats|hu&ySF@J%=BMeCpLIEBY+u z7*p&Xq29M85R14}Sj;$tyvA6=B7)B*wh;_S=q&K{6RdXQLvozw+60sw)OUx~r| zO@a+)Jv&{GdzF(?p;}*0@M~N9-5nZv6=XcoBCBpM#HDjuv4pQ|3x53$5NNFK!ic#i zhk1}=ucOt(4SOwY2KTS2BTLo6>FV}knN_03ovz9yKoaDwua3=ffJ38OE=S!`(o*!Q2cV#XsYJU2bo~?4ma>HNtJu!hPnTIFB4+JH@ z5YsPkBd}NXL%RM59csni%=NMGgrrsYmt*I z2oAQQJIc*klu`7?*Or13D7@54OQc#YUz*j_KQhF$1FoZ9H6c++;(fbUM&Aj=zGHeK zriUHyg8#3DvvFqoj^lWGx7|9XsPkB@mF=n>_0*QN4cCM=7;{BiLlQA#qD?(T+eo6_ zQC%pGEAy0NN=b;P%Ce9!9b<{?Xi`IDS41xa^$V6rV&5eD{Q=+mect!^yx*_y=Xdw} z79Q}+5%!y<-Cq|H=(JM5Q`~r?mM~{mrQOzOJ6ifg9KJW$sej)}h?@nAatRoT<4ppW zcU9^#>-CZ`q#h+9B{f`R|$bY(dVGlN6eEz=PAunc&9F3rsaw_kQCv3XS)$8z3bkT8*c}SL zxFo*+^N_x$OJmYb`+CZQKuJK+gW8J41bZKTt6Iy26FOzzWkya9&JyABcmy+0qLM_( zjhI~`Y}_z2IumU8N}nOoEZa295nOBs>4(npdC!VGK1bhO2oK!{5WW^>4GmZ^7=Vft zfZXmO;ZA4k$b$^95;r{1TpEkIY}*c_BN)iQh`yvQao>{Iv500{kSGb3fkqG$JH>Xi-cgN z)`_SVr}=Izin3Z!PjfvFd-nu~{fDU`um@c1+gi7xv9_th?cdnocrPkDWcWbYw5sgn z4f^+i2Y))QPg9h@BKywm2&)n}nZC5@30tngQR42B$H` zYX5w2-lSqXNN59G^ z&s;;q4f(aCXQR}%4KbK$ZJ#+X8E+5}%SK!P@3>xRFz=pB`7-f+5Bv=W6lw-y%+O3g zV$p;ZG>&9;$RUX|6%qfJIC*2L^&n$zvHxYFl^2eZ4drd_eT4ZJrT#r>RHX*DjD+*V z(Mlct|KkPWO_xY9?y2;-JB9Foz9GRHLU0Vh#5m%1+D@*pZBup{<$HlKRq9INY7Vry z@LH=sE);=ZJA3_jB11!*DUFDZI9ODT$oY_rh@(VvQy!2S??G$T=X7BZDTtlUytqFY zkc;CYA05z4io=|~n6anI4Fg6zLa&wE-WFa3C z30dqyUn)@)x2gP1d7EUn!pC3PA1BKG5w+`%A_bTX%7#Cko~F+Tx-gsc>58Y4p3U8o zYV~vry*65kr|@1Bi)ls4I+`*QCZsa@rZ#ryy@s*bj|a3coWB<|A$;&zJ%li<)nK6^ Lk-=RE?4$nxXHt!2 From f7fadbad64246c1a84606012d60817aef5dce8ed Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 16 Nov 2021 19:09:15 +0000 Subject: [PATCH 126/139] add forex_id --- assets/config/0.5.3-coins.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index 5f7081a9a9..d628fe996b 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -831,6 +831,7 @@ "BIDR-BEP20": { "coin": "BIDR-BEP20", "name": "BIDR", + "forex_id": "IDR", "coinpaprika_id": "bidr-binanceidr", "coingecko_id": "binanceidr", "nodes": [ @@ -994,6 +995,7 @@ "BRZ-BEP20": { "coin": "BRZ-BEP20", "name": "Brazilian Digital Token", + "forex_id": "BRL", "coinpaprika_id": "brz-brazilian-digital-token", "coingecko_id": "brz", "nodes": [ @@ -1011,6 +1013,7 @@ "BRZ-ERC20": { "coin": "BRZ-ERC20", "name": "Brazilian Digital Token", + "forex_id": "BRL", "coinpaprika_id": "brz-brazilian-digital-token", "coingecko_id": "brz", "nodes": [ @@ -1387,6 +1390,7 @@ "CADC-ERC20": { "coin": "CADC-ERC20", "name": "CAD Coin", + "forex_id": "CAD", "coinpaprika_id": "cadc-cad-coin", "coingecko_id": "test-coin", "nomics_id": "CADC", @@ -1405,6 +1409,7 @@ "CADC-PLG20": { "coin": "CADC-PLG20", "name": "CAD Coin", + "forex_id": "CAD", "coinpaprika_id": "cadc-cad-coin", "coingecko_id": "test-coin", "nomics_id": "CADC", @@ -2894,6 +2899,7 @@ "JCHF-ERC20": { "coin": "JCHF-ERC20", "name": "Jarvis Swiss Franc", + "forex_id": "CHF", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-swiss-franc", "nodes": [ @@ -2911,6 +2917,7 @@ "JCHF-PLG20": { "coin": "JCHF-PLG20", "name": "Jarvis Swiss Franc", + "forex_id": "CHF", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-swiss-franc", "nodes": [ @@ -2926,6 +2933,7 @@ "JEUR-ERC20": { "coin": "JEUR-ERC20", "name": "Jarvis Euro", + "forex_id": "EUR", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-euro", "nodes": [ @@ -2943,6 +2951,7 @@ "JEUR-PLG20": { "coin": "JEUR-PLG20", "name": "Jarvis Euro", + "forex_id": "EUR", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-euro", "nodes": [ @@ -2958,6 +2967,7 @@ "JGBP-ERC20": { "coin": "JGBP-ERC20", "name": "Jarvis British Pound", + "forex_id": "GBP", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-british-pound", "nodes": [ @@ -2975,6 +2985,7 @@ "JGBP-PLG20": { "coin": "JGBP-PLG20", "name": "Jarvis British Pound", + "forex_id": "GBP", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-british-pound", "nodes": [ @@ -2990,6 +3001,7 @@ "JPYC-ERC20": { "coin": "JPYC-ERC20", "name": "JPY Coin", + "forex_id": "JPY", "coinpaprika_id": "test-coin", "coingecko_id": "jpyc", "nodes": [ @@ -3007,6 +3019,7 @@ "JPYC-PLG20": { "coin": "JPYC-PLG20", "name": "JPY Coin", + "forex_id": "JPY", "coinpaprika_id": "test-coin", "coingecko_id": "jpyc", "nodes": [ @@ -6244,6 +6257,7 @@ "TRYB-AVX20": { "coin": "TRYB-AVX20", "name": "BiLira", + "forex_id": "TRY", "coinpaprika_id": "tryb-bilira", "coingecko_id": "bilira", "nodes": [ @@ -6259,6 +6273,7 @@ "TRYB-BEP20": { "coin": "TRYB-BEP20", "name": "BiLira", + "forex_id": "TRY", "coinpaprika_id": "tryb-bilira", "coingecko_id": "bilira", "nodes": [ @@ -6276,6 +6291,7 @@ "TRYB-ERC20": { "coin": "TRYB-ERC20", "name": "BiLira", + "forex_id": "TRY", "coinpaprika_id": "tryb-bilira", "coingecko_id": "bilira", "nodes": [ @@ -6730,6 +6746,7 @@ "XSGD-ERC20": { "coin": "XSGD-ERC20", "name": "StraitsX SGD", + "forex_id": "SGD", "coinpaprika_id": "xsgd-xsgd", "coingecko_id": "xsgd", "nodes": [ @@ -6747,6 +6764,7 @@ "XSGD-PLG20": { "coin": "XSGD-PLG20", "name": "StraitsX SGD", + "forex_id": "SGD", "coinpaprika_id": "xsgd-xsgd", "coingecko_id": "xsgd", "nodes": [ @@ -7322,6 +7340,7 @@ "QC": { "coin": "QC", "name": "Qcash", + "forex_id": "CNY", "coingecko_id": "qcash", "coinpaprika_id": "qc-qcash", "nomics_id": "QC", @@ -7335,6 +7354,7 @@ "SFUSD": { "coin": "SFUSD", "name": "SmartUSD", + "forex_id": "USD", "coinpaprika_id": "test-coin", "coingecko_id": "test-coin", "electrum": [ @@ -7778,6 +7798,7 @@ "EURS-ERC20": { "coin": "EURS-ERC20", "name": "STASIS EURO", + "forex_id": "EUR", "coinpaprika_id": "eurs-stasis-eurs", "coingecko_id": "stasis-eurs", "nodes": [ @@ -7795,6 +7816,7 @@ "EURS-PLG20": { "coin": "EURS-PLG20", "name": "STASIS EURO", + "forex_id": "EUR", "coinpaprika_id": "eurs-stasis-eurs", "coingecko_id": "stasis-eurs", "nodes": [ From 3b96a9254fe5308f44800d698ad82b9b8dff30b8 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 16 Nov 2021 21:20:15 +0000 Subject: [PATCH 127/139] add Peercoin (PPC) --- assets/config/0.5.3-coins.json | 27 ++++++++++++++++++++ atomic_defi_design/Dex/Constants/General.qml | 11 ++++++++ atomic_defi_design/Dex/Constants/Style.qml | 1 + atomic_defi_design/qml.qrc | 1 + 4 files changed, 40 insertions(+) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index d628fe996b..2bba9e33b6 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -4944,6 +4944,33 @@ "active": false, "currently_enabled": false }, + "PPC": { + "coin": "PPC", + "name": "Peercoin", + "coinpaprika_id": "ppc-peercoin", + "coingecko_id": "peercoin", + "nomics_id": "PPC", + "electrum": [ + { + "url": "electrum.peercoinexplorer.net:50002", + "protocol": "SSL", + "disable_cert_verification": false + }, + { + "url": "allingas.peercoinexplorer.net:50002", + "protocol": "SSL", + "disable_cert_verification": false + } + ], + "explorer_url": [ + "https://chainz.cryptoid.info/ppc/" + ], + "explorer_tx_url": "tx.dws?", + "explorer_address_url": "address.dws?", + "type": "UTXO", + "active": false, + "currently_enabled": false + }, "QIAIR": { "coin": "QIAIR", "name": "Qi Airdrop Token", diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 152e492a15..01cbdcb687 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -1709,6 +1709,17 @@ QtObject { "POWR/UST": "BINANCE:POWRUSD", "POWR/DAI": "BINANCE:POWRUSD", "POWR/PAX": "BINANCE:POWRUSD", + "PPC/BTC": "BITTREX:PPCBTC", + "PPC/USDT": "BITTREX:PPCUSD", + "PPC/BUSD": "BITTREX:PPCUSD", + "PPC/USDC": "BITTREX:PPCUSD", + "PPC/TUSD": "BITTREX:PPCUSD", + "PPC/HUSD": "BITTREX:PPCUSD", + "PPC/UST": "BITTREX:PPCUSD", + "PPC/DAI": "BITTREX:PPCUSD", + "PPC/PAX": "BITTREX:PPCUSD", + "PPC/EURS": "THEROCKTRADING:PPCEUR", + "PPC/JEUR": "THEROCKTRADING:PPCEUR", "QC/USDT": "FX_IDC:CNYUSD", "QC/BUSD": "FX_IDC:CNYUSD", "QC/USDC": "FX_IDC:CNYUSD", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index a9a77ce548..c60c583686 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -443,6 +443,7 @@ QtObject { "ONE": "#00BEEE", "ONT": "#2692AF", "POWR": "#05BCAA", + "PPC": "#46BC60", "QI": "#FFFFFF", "QIAIR": "#FEFEFE", "QKC": "#2175B4", diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index 1be2edf86b..6cc8fbd0ad 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -180,6 +180,7 @@ assets/images/coins/pic.png assets/images/coins/pnk.png assets/images/coins/powr.png + assets/images/coins/ppc.png assets/images/coins/put.png assets/images/coins/qbt.png assets/images/coins/qc.png From c7d3260b2ebab1e819f63c37d909abbc9b313fd9 Mon Sep 17 00:00:00 2001 From: cipig Date: Tue, 16 Nov 2021 23:11:36 +0000 Subject: [PATCH 128/139] more nomics ids --- assets/config/0.5.3-coins.json | 41 +++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index 2bba9e33b6..6c6f4ff40e 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -316,6 +316,7 @@ "name": "SingularityNET", "coinpaprika_id": "agix-singularitynet", "coingecko_id": "singularitynet", + "nomics_id": "AGIX", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -333,6 +334,7 @@ "name": "SingularityNET", "coinpaprika_id": "agix-singularitynet", "coingecko_id": "singularitynet", + "nomics_id": "AGIX", "nodes": [ "https://polygon-rpc.com" ], @@ -401,6 +403,7 @@ "name": "ARPA Chain", "coinpaprika_id": "arpa-arpa-chain", "coingecko_id": "arpa-chain", + "nomics_id": "ARPA", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -418,6 +421,7 @@ "name": "ARPA Chain", "coinpaprika_id": "arpa-arpa-chain", "coingecko_id": "arpa-chain", + "nomics_id": "ARPA", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -479,6 +483,7 @@ "name": "Travala.com", "coinpaprika_id": "ava-travala", "coingecko_id": "concierge-io", + "nomics_id": "AVA", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1513,6 +1518,7 @@ "name": "Celer Network", "coinpaprika_id": "celr-celer-network", "coingecko_id": "celer-network", + "nomics_id": "CELR", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1530,6 +1536,7 @@ "name": "Celer Network", "coinpaprika_id": "celr-celer-network", "coingecko_id": "celer-network", + "nomics_id": "CELR", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1547,6 +1554,7 @@ "name": "Celer Network", "coinpaprika_id": "celr-celer-network", "coingecko_id": "celer-network", + "nomics_id": "CELR", "nodes": [ "https://arb1.arbitrum.io/rpc" ], @@ -5190,6 +5198,7 @@ "name": "Syscoin", "coinpaprika_id": "sys-syscoin", "coingecko_id": "syscoin", + "nomics_id": "SYS", "electrum": [ { "url": "electrum1.cipig.net:10064", @@ -5454,6 +5463,7 @@ "name": "Vite", "coinpaprika_id": "vite-vite", "coingecko_id": "vite", + "nomics_id": "VITE", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -5821,6 +5831,7 @@ "name": "OMG Network", "coinpaprika_id": "omg-omg-network", "coingecko_id": "omisego", + "nomics_id": "OMG", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -5838,6 +5849,7 @@ "name": "OMG Network", "coinpaprika_id": "omg-omg-network", "coingecko_id": "omisego", + "nomics_id": "OMG", "nodes": [ "https://polygon-rpc.com" ], @@ -6004,6 +6016,7 @@ "name": "Ravencoin", "coinpaprika_id": "rvn-ravencoin", "coingecko_id": "ravencoin", + "nomics_id": "RVN", "electrum": [ { "url": "electrum1.cipig.net:10051", @@ -6622,11 +6635,11 @@ "currently_enabled": false }, "XEC": { - "active": false, "coin": "XEC", + "name": "eCash", "coingecko_id": "ecash", "coinpaprika_id": "xec-ecash", - "currently_enabled": false, + "nomics_id": "XEC", "electrum": [ { "url": "electrum.bitcoinabc.org:50002", @@ -6644,7 +6657,8 @@ ], "explorer_tx_url": "transaction/", "type": "UTXO", - "name": "eCash" + "active": false, + "currently_enabled": false }, "XEP-BEP20": { "coin": "XEP-BEP20", @@ -7495,6 +7509,7 @@ "name": "SwissBorg", "coinpaprika_id": "chsb-swissborg", "coingecko_id": "swissborg", + "nomics_id": "CHSB", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7512,6 +7527,7 @@ "name": "SwissBorg", "coinpaprika_id": "chsb-swissborg", "coingecko_id": "swissborg", + "nomics_id": "CHSB", "nodes": [ "https://polygon-rpc.com" ], @@ -7861,6 +7877,7 @@ "name": "Gnosis", "coinpaprika_id": "gno-gnosis", "coingecko_id": "gnosis", + "nomics_id": "GNO", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7878,6 +7895,7 @@ "name": "Gnosis", "coinpaprika_id": "gno-gnosis", "coingecko_id": "gnosis", + "nomics_id": "GNO", "nodes": [ "https://polygon-rpc.com" ], @@ -7927,6 +7945,7 @@ "name": "Holo", "coinpaprika_id": "hot-holo", "coingecko_id": "holotoken", + "nomics_id": "HOT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7944,6 +7963,7 @@ "name": "Holo", "coinpaprika_id": "hot-holo", "coingecko_id": "holotoken", + "nomics_id": "HOT", "nodes": [ "https://polygon-rpc.com" ], @@ -8055,6 +8075,7 @@ "name": "LEO Token", "coinpaprika_id": "leo-leo-token", "coingecko_id": "leo-token", + "nomics_id": "LEO", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8072,6 +8093,7 @@ "name": "LEO Token", "coinpaprika_id": "leo-leo-token", "coingecko_id": "leo-token", + "nomics_id": "LEO", "nodes": [ "https://polygon-rpc.com" ], @@ -8087,6 +8109,7 @@ "name": "Loopring", "coinpaprika_id": "lrc-loopring", "coingecko_id": "loopring", + "nomics_id": "LRC", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8104,6 +8127,7 @@ "name": "Loopring", "coinpaprika_id": "lrc-loopring", "coingecko_id": "loopring", + "nomics_id": "LRC", "nodes": [ "https://polygon-rpc.com" ], @@ -8288,6 +8312,7 @@ "name": "iExec RLC", "coinpaprika_id": "rlc-iexec-rlc", "coingecko_id": "iexec-rlc", + "nomics_id": "RLC", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8305,6 +8330,7 @@ "name": "iExec RLC", "coinpaprika_id": "rlc-iexec-rlc", "coingecko_id": "iexec-rlc", + "nomics_id": "RLC", "nodes": [ "https://polygon-rpc.com" ], @@ -8405,6 +8431,7 @@ "name": "Serum", "coinpaprika_id": "srm-serum", "coingecko_id": "serum", + "nomics_id": "SRM", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8422,6 +8449,7 @@ "name": "Serum", "coinpaprika_id": "srm-serum", "coingecko_id": "serum", + "nomics_id": "SRM", "nodes": [ "https://polygon-rpc.com" ], @@ -8520,6 +8548,7 @@ "name": "Unibright", "coinpaprika_id": "ubt-unibright", "coingecko_id": "unibright", + "nomics_id": "UBT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8537,6 +8566,7 @@ "name": "Unibright", "coinpaprika_id": "ubt-unibright", "coingecko_id": "unibright", + "nomics_id": "UBT", "nodes": [ "https://polygon-rpc.com" ], @@ -8552,6 +8582,7 @@ "name": "UMA", "coinpaprika_id": "uma-uma", "coingecko_id": "uma", + "nomics_id": "UMA", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -8567,6 +8598,7 @@ "name": "UMA", "coinpaprika_id": "uma-uma", "coingecko_id": "uma", + "nomics_id": "UMA", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8584,6 +8616,7 @@ "name": "UMA", "coinpaprika_id": "uma-uma", "coingecko_id": "uma", + "nomics_id": "UMA", "nodes": [ "https://polygon-rpc.com" ], @@ -8768,6 +8801,7 @@ "name": "Voyager", "coinpaprika_id": "ethos-ethos", "coingecko_id": "ethos", + "nomics_id": "VGX", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8785,6 +8819,7 @@ "name": "Voyager", "coinpaprika_id": "ethos-ethos", "coingecko_id": "ethos", + "nomics_id": "VGX", "nodes": [ "https://polygon-rpc.com" ], From bc3d6dea5b8c8dbee9aeae58105620d908ade93d Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Thu, 18 Nov 2021 04:51:28 +0100 Subject: [PATCH 129/139] feat(provider): add forex provider --- .../assets/images/providers/forex.png | Bin 0 -> 26879 bytes atomic_defi_design/qml.qrc | 1 + .../api/komodo_prices/komodo.prices.cpp | 4 ++++ .../api/komodo_prices/komodo.prices.hpp | 1 + .../komodo_prices/komodo.prices.provider.cpp | 2 ++ 5 files changed, 8 insertions(+) create mode 100644 atomic_defi_design/assets/images/providers/forex.png diff --git a/atomic_defi_design/assets/images/providers/forex.png b/atomic_defi_design/assets/images/providers/forex.png new file mode 100644 index 0000000000000000000000000000000000000000..eeeb6625ea6a8c5c6b38328055a7404bba638422 GIT binary patch literal 26879 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 a1sDKI9d-D=wumkO0000assets/images/providers/binance.png assets/images/providers/coingecko.png assets/images/providers/coinpaprika.png + assets/images/providers/forex.png assets/images/providers/nomics.png assets/images/dashboard-copy.svg assets/images/dashboard-eye-hide.svg diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index e232319ffd..73f070727f 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -54,6 +54,10 @@ namespace atomic_dex::komodo_prices::api { x = provider::coinpaprika; } + else if (j == "forex") + { + x = provider::forex; + } else if (j == "nomics") { x = provider::nomics; diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp index 87ad7a9c2a..72a5edbdc4 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp @@ -12,6 +12,7 @@ namespace atomic_dex::komodo_prices::api binance, coingecko, coinpaprika, + forex, nomics, unknown }; diff --git a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp index cea775c176..2fb21de3ed 100644 --- a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp +++ b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp @@ -131,6 +131,8 @@ namespace atomic_dex return "coingecko"; case komodo_prices::api::provider::coinpaprika: return "coinpaprika"; + case komodo_prices::api::provider::forex: + return "forex"; case komodo_prices::api::provider::nomics: return "nomics"; default: From ffca9a06aa297c66e22e0d8b37ceae0c5c8b5de1 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 18 Nov 2021 12:38:31 +0000 Subject: [PATCH 130/139] mm2 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ac67cadf7..97e66c8183 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-89c975f46-Darwin-Release.zip) + URL http://195.201.0.6/dev/mm2-1b989f62e-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-89c975f46-Linux-Release.zip) + URL http://195.201.0.6/dev/mm2-1b989f62e-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL http://195.201.0.6/dev/mm2-89c975f46-Windows_NT-Release.zip) + URL http://195.201.0.6/dev/mm2-1b989f62e-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From a3c7919b36d70dbfe8bc3f742e86c2c1a25dc521 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sat, 20 Nov 2021 08:40:29 +0100 Subject: [PATCH 131/139] feat(rbtc): add rbtc --- assets/config/0.5.3-coins.json | 16 ++++++++++++++++ atomic_defi_design/Dex/Constants/Style.qml | 4 +++- atomic_defi_design/assets/images/coins/rbtc.png | Bin 0 -> 8707 bytes atomic_defi_design/qml.qrc | 1 + src/core/atomicdex/api/mm2/rpc.enable.cpp | 7 +++++++ src/core/atomicdex/api/mm2/rpc.enable.hpp | 4 ++++ src/core/atomicdex/config/coins.cfg.cpp | 14 ++++++++++++++ src/core/atomicdex/config/coins.cfg.hpp | 7 ++++--- src/core/atomicdex/constants/qt.coins.enums.hpp | 7 ++++--- 9 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 atomic_defi_design/assets/images/coins/rbtc.png diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index 6c6f4ff40e..c779784ea5 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -1062,6 +1062,22 @@ "active": false, "currently_enabled": false }, + "RBTC": { + "coin": "RBTC", + "name": "RSK Smart Bitcoin", + "alias_ticker": "BTC", + "coinpaprika_id": "rbtc-smart-bitcoin", + "coingecko_id": "rootstock", + "nodes": [ + "https://public-node.rsk.co" + ], + "explorer_url": [ + "https://explorer.rsk.co" + ], + "type": "RSK Smart Bitcoin", + "active": false, + "currently_enabled": false + }, "BTC": { "coin": "BTC", "name": "Bitcoin", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index c60c583686..868daf038c 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -254,7 +254,8 @@ QtObject { case 'Moonriver': return getCoinColor("MOVR") case 'HecoChain': return getCoinColor("HECO") case 'SmartBCH': return getCoinColor("SBCH") - case 'Ethereum Classic': return getCoinColor("ETC") + case 'Ethereum Classic': return getCoinColor("ETC") + case 'RSK Smart Bitcoin': return getCoinColor("BTC") default: return getCoinColor("BTC") } } @@ -292,6 +293,7 @@ QtObject { "BRZ": "#B5DEC3", "BSTY": "#78570D", "BTC": "#E9983C", + "RBTC": "#E9983C", "BTT": "#666666", "BTE": "#FFE201", "BTX": "#FB30A6", diff --git a/atomic_defi_design/assets/images/coins/rbtc.png b/atomic_defi_design/assets/images/coins/rbtc.png new file mode 100644 index 0000000000000000000000000000000000000000..784b8f359a71709dc7aae4c6e5ee8b74875ff017 GIT binary patch literal 8707 zcmV+eBK+NnP)K=D{S{i%Z=X|Hy4OMmTf4gpVX=Z%UIk=)jO~45hc`IR>p?k!}kr(>v-q3J%T>$ z9M$tO^a*{7Z!laCo2IAJJDn zGF%7*`@;WV$C7x0+KQGFHd=XeELAi)n$V#w)5xtL% z4!jL>&{y;seTNNJ0^x%2l-DOc_J@KKGrIj74vh^Hn}iN7Du^d4KvYo70j`+9hT?~R z*NDv*%mU$p@C#q;-t5cLF6#obUBUzs9ZzXgnBYPZi%P(c#Tg2QeDnc*G3evz5;o0! z?(*gr0s&hML;a9Df0y-TX{W6*MV|}NN$>;$eL~+T7z}}pu+<tXXi#>Gi*1QES~4$ z)2x2ekRF$NXSJv>6n>5i&V*xYhxx1o?3fKGJurL9St)_->j!o34qxbL;rz_?G~9P? zlJtuc(>kppN9f?`!Eg%apBKOu*kokyiD{iz!6z&&FrS@YL;ervKJ$lG-ty)ZH9BLK zCj2~B0)C8Re!Z>wjIm!IY~v#U$5Yn)BzyxOoi8atAM$_n(fCWA2$suSU*-}z$n$Uz z9C$th8)0irK7eoFBlzlEPYGQ7AEc&U^s^Jwe!pHf*k9TZPlWK#QQ}()0)7wQk9|IN zeX(Kn*$f1Kc|+v~iQ2D_zDiEM=;!d=xfcXlzQ690jHGX7wAv5Ds=>tnZv?i(2Q~Qy zKKp0av}Ao=a4w1e!~WN|Yv?I$R#Bt)vuhB34lCJy9M0RI*4l$FqCS}^p%TD%y{~QS zf-e(32=vL`q=!4T^v%rozz`0J4@X^q!GnMUA5MF$a|?ZPn9$-cexX~ZKxtmkKZ6WG z2})gZ$iqrmUd_y5CEGVRPdIozKW0q4?x!GdDe=jF0=``ET-VNe5G3rAADBtvbIM#W zvW`K{1ug?}agCMwSPA$s`@mPa|KQV-2dlp(CRENxzVc3&!~TpMp#WtKnUff^SPA$s z+t(Wdk*$LJ9K*yO_)PbscUqn&apnY?_?WR)PHlS9KRriqkk?>TUE?ozaYXpwDiJxn zL4@8NECMV3B9Gg(kQu}R)LR0Nj)O&%*y=d>Vj!anpV>f5QO{S4nj1HNorn?wJPCO_1!O<-D1 z#6LA#5a^g%)=Uu4A3(2GIa0_i!e|SBT1r7IVGA>%4~w*v;g$7lmH{zL1eW{}*Kr)N z0sZ2>hVP*Pv~WHZXp_FSu6p&po!sQ4e+m;HaN|o^$@XoZCoEnM0U7z#@;~2#>mPs} zn9E=!Q$$X@V|Y*K<4G!52nXyZJK%2u{j8kaxB^-@KPlAm{{F)Dt9fSt9EFZL1RM|x z^ZU@hWq&u%|K%O32S8a~)fv7!l z1n^Czdt^F@95>1TA52j9PJn+- zo7qg}1(uSK5J#8D&Nj)BGP;d7E(nI1Fs!T0k3U z6wkK;{`CL!;P|%Nd=s;T0u9qp=_Diuo=WNPn}nUM%6&vcPJLpM|Mv*rgiJmH$Wpeq z;s%raUnTq1LLW7lPn`D)+UA--BWM+eQGlX{CVr#uY~PwS1YmHj844gs=>0?!&-RXKy}>sjODHB~V}|TFFc3g| z2!nj=)K=xK5aB(`L~wf_;a_}(Y|kYk$KEy$n)fFPUrE##zRA>23Hn`|pna~*p0RD$ zLo@rMfcEr1_s@dnsF(vm{A4Ujpez2JHAx~J$TJC&i~7A zgD>#ZAvje(?b~nbdT2qqWU3OH*&YS-r~k8&ZI<{-G6jJ~AardI6&}FB)0@esv#)$g zSIDRJl&HIn^8b|P@P`Tj>MKCsYZYk1HG*b#M*%+b|M4xCW#>mLWzc&s-bJb8`_2Wx zBpQ8+Wgm(%gs=Q!5!m#y%*CJ9egH&5ay??2@Gtz6N{Q%aT?GQ#)pde)(2&0oSbqB7 z9MoYj98MtTLF8J33l70AM1>B0~X!Km`Iu zgSt%%?xUDM8U=z4`>kD%HhBO*J7~z)1+1+3|77^hjk{o|WndU)OOQFN)L`fI>n)sz zQD~Eh1^^ogC=fEDK`^O>NQ4b*3V|ipqOW@YE!%J9Jlfz|;emyQ&@%Sl2zUU{n*Rqw z+RR}U!r^GBwqXurOe9nwWJnr{MA|~1l*=bSmjXfIsITA)t{F6BeMmF#AUo*8wEB4*H~WpMSws)BC0$U@f{70>=eG~E!FEH z;h3M$4%ZACLQ8Ej7<<`w(tRzj;1wa7{1d4mlzbm0Fg|aNjr;W=KmY`H474nefAMv~ zJ2p*{PNWH6`DG%wb)bkGeLGH*#82f&(8xFl;^jXAT5;{5W$fi)ZTR2Ozf}n)Rs`}1 zI+IYqp?m}g?_Y2ERnA*jAbe7I->Vu3hB307*-eDrDG^ovZ^hYc;XTXMTNL#hIN}#* z#kGT$dK!o|{Qv6sn7m`W5_J4b1fi1e$3AbnJ{|x$qAK9FCd$#bqe4r;@hXX@#mj9T zmvK56CbSZv4`&H10NLFF>mC=Fw0dPAc#*5kgTSu8P(SQZugK66nwq8ow)Fdx-{k)! z8#i*O!wCiY1Yodl!IhQ;3BENhDn1+q@r#H;f*gozkQzK=WO`WmFDwz;O9fx;k@c$p z0FL=Z*AJSqw}J1NF8)lpzr{c3sZb88v9S_XvVFtz=9u5l_w@jfLtb#(0Ly~-7GDqh zNc_ww#V8r$s|SK_-d|-9xP_g~zw~z19@+x->^BE}<{Cm%vqd4k`16Z5`?Z{jn+S9m z4JQM?`JJ6HfIMX%zF4jRs?J zpUYM%2p`%`ZK`^0*dN=UsF!O9O%3M(JpW66?RzyNjGG8lhKd~^la+uUGlvI&Z{8Kw zpTsxEM{OGiF_h>vwV?%DCIrO2Qp_DT<^g+gKbv=C8ryFh761e^g|(!(U0tUDCx1RqOUXOgv<^UNed3$Of=M;r#GrDFF-n-U% z091SopP~*G1P=KN?LbEbwB_@F8sGo>{?m0ay9tJ(vV=mPrHA*ev!4IQ7vRa@LVz=D zGnxkM{24lYYg_2E*Yp5z#=krONKa@Bjrn&6^f!QCt$VIn zA>9DbQB;~x@Br}5?gb&N=6~46CV`4G47v-ryts=Wbx*ssxM@5of4zzBdS zO%RZ?`JxOaVs1{(g+}-_MGw+ z>gQU1*uT+c{Y^j*fcl>e$a^21RA3H(C`}NQPZjpTmVSV9{)LaYmY?>|`v4jn1;9^na{pl0 zUhnW!0TMj`@OS)kW5bB^x$q39Cz9p>P6q($<^gbEh-)u2hSod))Mo%B4UP}VJ_Yd= za5Uxt2?F{9kiUbQ`koWwW5v)r&=FHpt+G9R|L&;csJKaV;qT zl1u~O*x;;F#sN^LD5t@JzB23izshqGtAGv<_g)eDXo2v}xkk7LrwI2@@}m^rGfKk5 zciOjl06^QA0kF4!&OSt}g7Q_}Lr)Hnc{H%mdj9v#zD^3#Pakwa`5x55h1YlB~b%uOhf(yogkM9-q8_{6jhEyUa}dT6wV0Cf5?$#tMK2Z@rYa z#UmqEK`Ul;42&W1B_q-;e@HWY?WFll}{l5(@V84CPCf5?$ z>aT&-7J`;OnqLe@5Qt!Os;+@C0R54|^tPV==UxwcAT~rtJ%kJ z!tRDir*Gah6a5g&wi*~tGR^B}I8 zk?T<1hJoN)e7EgC07bqzB%k^mJqXP0x9cwkY~fl$TjQl*`eV>zy;8e-q|pQ%fkx^Q zCK3cnvz7lnQp9KgP(7wWzye{g1VJ!B2En4c&*JT%zuvaveuKSSOK5BK#~}6R;5K5tHd3+#;o z6`w*7)XUqm=1)#+|DxZ}Pz3=~FO6vGh&sWwPsC1A%i&_*mE zMqu45*7N_I>uEGYN>lZnNgvoq5Otz=(q+Q#<}LmWf=cg0+~7V&fI&M107_^IZH+$= zLLUi}r0(vWxz95oNf2r&vl=5Ty>&3ji38N*#ea z+B@;LB68v*5qzse_!rzL7fbSCh!Ow}#D_5~=l}jmYCc0j0Ic*)jRJV0A}7BPb~gWO z_oEKI4~_s^xrVDBYgh(tYyOg`wiq<{+N|s0Gy+EBuUXX@&Pok_&ft1-gc4W^KcU(y zROIOUBJ{~?nEBgU#}95VtSJDr{u#pqkaDW+MI!%_M`<#u>^Aj}dH>9>M>||YXsRy) z8GbRONyd+wsGGrnXw;(Oc=Df1&bjs%T};>iZ$STf09dj`4*+k`Z|(PG)-`Hk&HLem zUtu%X5SsEg0MoCANz(VdoPHcPy8BTjLsW-(=eZI5*cs!drOLqS=N zW1wVkGTH+%`%nAoTJ#ZX0>Q1LZ1=}g+*!U(CZQfxuVMT4ft}Dz0WF~^|7w`&mqR5f zuRoMMnO6b_qVhPQgg|Gp79TmaJI?YW|GzIP`!=XC05lBy$NT9i>16wJf%xn~<$zQk z0KDC}0$aIu&=Q)Oe>qh9tKf52rv1a+H%Tb^(I^ln;7|Z(;5E&OttuQ6;R8EGVAC++ zE&YpJ-_J&SQ3hK8uYXgzzylzjpl+@iG=!GM`QLaRkhbihtVQlVNrJ#oiV4hFqZ~XC z!)g~%*ISjlLWGZgAn*Z^@V>1geCSR2I{GO@k5BzUpQs$#7=lnbQb7iP#1+)fHG_uG z^2~lBMq3ZK_tN^k+0I*jNfcOC)a;?hm%pMhc_>YkWIyL%PTlXunLeLu}8wCbRs093& z4nK$c75xDZ0@V(U2rM98q!FU1yPQ?8JO{oFv|GOVHKYfJ1ponmn4Qp8iE9MSpdFw6s{pX_bMcattJ?qa_ih*>pFS!f6qXw`l32<2_49B>0|_r#I-q~k zQ$v9OM@lFNs=QyDOuD8^X2`{*eRU!}(v)|`H3(Gn7yU;7aGPuP&p=iJoTE~Q-wz*g zZBRlpXlLQ);tdvsXfn9@(ey2-n1C3pBldwaOzFo!K*)Bz#g~{0;2zdaR6bu1$oU7vAk)>am7k)4%OEOJmpiTIP zJ^kE{`1%ZW>$*TIXr@p82yB)|fd+`Et&gU?$s0nnX$CnP5Hv5qvZ~P*e0OeC^p{8k z37$s(nt{gRo!T$_uRSe-+b4<8u1#{u_t+VI+BbacV-b9-OnA#~mTfjbyJ)M{#7BM5 zfNKJcpcORJpMHD)Z5(?g{9XP}J9u8KA92gsxT3c-s$Y_mz=`Y)A;~oV`xZP*BCuf* zlg8bfjDu$9G*S6%J&6?XIpU=>`Ks1Jc*b-Q-icQW@3d5=A;Thdop3gje?f*&gS_f3d0Us0}yf6SH!sP{P2rZxuG}2!EYJ%>5V-|SR11&GhdCme@6lBve zIqJVF55wnW0Bm{XMdtedyi=tJd~0b&S8n*8et{5Dg1;kjL-D<14n2nAfx?%vj(S^R z?a!lmEiZmh{+RkHJ^^jQ*!_N4z-C=JZ5K@tHFivuBJ{f98H2XhsQ zue-(=H2J3=jn7T`GD?3&jo>_D97s}lf;JQ3^D##L31|XssF6L@-ETS`ZeMq0@-DeJ zkQX%%Bd<9U=KE&xc|y4J7aup(e~L&!c#yR1b5A$?aqZt>N3(ALD5S!;4|t!V(>~fN zf*`p6<$-l{{-Fu9DSzx6JOK1RERyli^|_^)ujG&p1sDWjLXZojOkWnE{=*LLN+lrb zzyH_G+r9c<`pl^MOh7!zAM_zaP<)MdXaP;AjTPp9AFpSDM*hWuR;xa8wat;+jR4b9hbrL-U`b z;6fAs&wc3)&;puJn?~Q=A3_$WlMUe=r#n{^hZDOQ03rxTLnXbMvUrjj<+Z#IQ4mmUv_>H?*BNl!T%Y3>o_~(J^@F|c z){hLh`O?}RL?gHDvxfTrpWk`UL1!;MGhRY@`^@)4^IwgyPw|Tp0QXG&S=soRcYnC0 zpv6Pa=a*%^L8Ax}1XBYAA;!4FA($d!fa?uuLNWk${;o{@9~7Sx;?E?&XPsYg4(_Qz zNU1+~DM)%~tFMn7@ryO7zd;NMo`)+(c+F7<@9Fa?JirV<@T{N06KWoTAbjCj?$!_W zx;uXSL3ellzx&qzcX;pr3|8?<=VuQwHGhK6haWnx;JSXY?zd5cK&d~>w}Ke|v}s3s zJaY0M*CjXZ7X%}M(BPmjgeI;A-qV5wL4jSzs!?7W?rWgH zQf!Wdc3*#9Sp>1)@cB|U0yn(`0q$7yh4|rg{NXo+K0(kHkDT(8<%z%3DG4@V41~&o zf>&y7vmM~zK-~OfMdI&xvoeUUHGMNL2vkqdRaX}|=Fu5*315<-qT z^f@}@J>U7}=bPsThxvKAp~+0BcmUKjxB_S3PSt#q_%k&KRAZRsYs=x!yvcc5VZFT@ zj_!kA8%Mh!h2+gqPeiyk(lB)*u zAMZehWo+c1YHj{ zmK7ep!e{tS4mw1=kCLmJSt!0C2-p{hl92My%E&+L1nATwX4SKzw{ot3@c3rC!HSj{Ex zz0djF#A?emLj?rI=w*iJcR~brc&`%N#+qE;4EO+FD7;Gd&Ggw)yFUDsKRZf->J6Gi zS!j`gfOPrdTkMzpeuX_Tv5LfE=7=L0!sJwJ&+>DeguLn3l2$A8KH+=@=>>)TzB)^?zTU?VU@K5!k0%(jPg4C`5RWocEC2+ z2wQ1$kJ|C{$&u-PJ_@e~fnFB$KuEGXZezoAD0kE`kDS$T|0`~@-um-J)_?X2wo;6| z=BU9m|KRUqZP@VeSq%@sCfar=ZEd6NNnLn7-J8X)27=8mLNcN}bcP0+vFL)P z1#h?`_TKL}KnY@3`Ck%!lu{zxDZtte-*1-!8T`{&z)e zJAmu&J{J26?tS=v>s#-*GxnL6+!TFd-(}JMn@@Pc&7G;p8F(h2eFWF);o9v=bg|oG zw7FiT`l|3#2?V}1a3?jXVBjuGGu5_Ij85!EHeQEPtiwfc93^lxA%CYtKAfLDl+Wts zv)j2=mTM=3=uNbdU459sR|7$21r-d9OtF>-h!l5YGk2y6j1CG2booHt?+`+_@L3r? zTM2G)?M5ZK-0hVSz8VZQqD;tuh*2QhL!6=|i4>96kRp;qf}gedte7Tvy{PLI7rhz` zTA9!Sq7IOOK{OFjA2bn-n$UHG5L~49nI?KQAP5l{0<~svo-Q;|6@1nOg&{x)gTQlG h?CMYTr}|U<`9H&n94!>OK&Aiy002ovPDHLkV1i8F%SZqK literal 0 HcmV?d00001 diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index d61683a360..58288d8d06 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -191,6 +191,7 @@ assets/images/coins/qrc-20.png assets/images/coins/qrc20.png assets/images/coins/qtum.png + assets/images/coins/rbtc.png assets/images/coins/ren.png assets/images/coins/rep.png assets/images/coins/rev.png diff --git a/src/core/atomicdex/api/mm2/rpc.enable.cpp b/src/core/atomicdex/api/mm2/rpc.enable.cpp index c707954024..922f929b62 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.cpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.cpp @@ -134,6 +134,13 @@ namespace mm2::api j["urls"] = cfg.urls; break; } + case CoinType::RSK: + { + j["swap_contract_address"] = cfg.is_testnet ? cfg.rsk_erc_testnet_swap_contract_address : cfg.rsk_erc_swap_contract_address; + j["fallback_swap_contract"] = cfg.is_testnet ? cfg.rsk_erc_testnet_fallback_swap_contract_address : cfg.rsk_erc_fallback_swap_contract_address; + j["urls"] = cfg.urls; + break; + } default: break; } diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index 8e2faa1d66..d4e572da07 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -83,6 +83,10 @@ namespace mm2::api const std::string sbch_erc_fallback_swap_contract_address{"0x25bF2AAB8749AD2e4360b3e0B738f3Cd700C4D68"}; const std::string sbch_erc_testnet_swap_contract_address{"0x25bF2AAB8749AD2e4360b3e0B738f3Cd700C4D68"}; const std::string sbch_erc_testnet_fallback_swap_contract_address{"0x25bF2AAB8749AD2e4360b3e0B738f3Cd700C4D68"}; + const std::string rsk_erc_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; + const std::string rsk_erc_fallback_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; + const std::string rsk_erc_testnet_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; + const std::string rsk_erc_testnet_fallback_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; const std::string bnb_testnet_swap_contract_address{"0xcCD17C913aD7b772755Ad4F0BDFF7B34C6339150"}; const std::string bnb_swap_contract_address{"0xeDc5b89Fe1f0382F9E4316069971D90a0951DB31"}; const std::string bnb_fallback_swap_contract_address{bnb_swap_contract_address}; diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index a31d7db26c..942f91cbdf 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -69,6 +69,11 @@ namespace atomic_dex SPDLOG_INFO("coin: {} support segwit with current_segwit mode: {}", cfg.ticker, cfg.is_segwit_on); } + if (j.contains("alias_ticker")) + { + cfg.alias_ticker = j.at("alias_ticker").get(); + } + j.at("explorer_url").get_to(cfg.explorer_url); if (j.contains("explorer_tx_url")) { @@ -154,6 +159,10 @@ namespace atomic_dex { cfg.coin_type = CoinType::EthereumClassic; } + else if (cfg.type == "RSK Smart Bitcoin") + { + cfg.coin_type = CoinType::RSK; + } if (j.contains("wallet_only")) { cfg.wallet_only = j.at("wallet_only").get(); @@ -235,6 +244,11 @@ namespace atomic_dex cfg.fees_ticker = cfg.is_testnet.value() ? "ETCT" : "ETC"; cfg.is_erc_family = true; break; + case CoinType::RSK: + cfg.has_parent_fees_ticker = true; + cfg.fees_ticker = cfg.is_testnet.value() ? "RBTCT" : "RBTC"; + cfg.is_erc_family = true; + break; case CoinType::SLP: cfg.has_parent_fees_ticker = true; cfg.fees_ticker = "BCH"; diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index 3ae11572df..e705630d4c 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -35,11 +35,12 @@ namespace atomic_dex struct coin_config { public: - static constexpr const char* erc_gas_stations = "https://ethgasstation.info/json/ethgasAPI.json"; + static constexpr const char* erc_gas_stations = "https://ethgasstation.info/json/ethgasAPI.json"; static constexpr const char* matic_gas_stations = "https://gasstation-mainnet.matic.network/"; - using electrum_servers = std::vector; - using nodes = std::vector; + using electrum_servers = std::vector; + using nodes = std::vector; std::string ticker; + std::optional alias_ticker{std::nullopt}; std::string gui_ticker; ///< Ticker displayed in the gui std::string name; ///< nice name std::optional electrum_urls; diff --git a/src/core/atomicdex/constants/qt.coins.enums.hpp b/src/core/atomicdex/constants/qt.coins.enums.hpp index b30cb4a6aa..9c3a14f54e 100644 --- a/src/core/atomicdex/constants/qt.coins.enums.hpp +++ b/src/core/atomicdex/constants/qt.coins.enums.hpp @@ -49,9 +49,10 @@ namespace atomic_dex HecoChain = 15, SmartBCH = 16, EthereumClassic = 17, - Disabled = 18, - All = 19, - Size = 20 + RSK = 18, + Disabled = 19, + All = 20, + Size = 21 }; Q_ENUM(CoinTypeEnum) From 7d8f1f589e503943a55bc37a9e89a004310b3eff Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Sat, 20 Nov 2021 10:38:24 +0100 Subject: [PATCH 132/139] feat(rbtc): rbtc tx history --- src/core/atomicdex/services/mm2/mm2.service.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index f8b525f325..2eb529b223 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -518,9 +518,7 @@ namespace atomic_dex } }) .then([this, batch = batch_array](pplx::task previous_task) - { - this->handle_exception_pplx_task(previous_task, "batch_balance_and_tx", batch); - }); + { this->handle_exception_pplx_task(previous_task, "batch_balance_and_tx", batch); }); } std::tuple, std::vector> @@ -1204,9 +1202,9 @@ namespace atomic_dex SPDLOG_DEBUG("process_tx ticker: {}", ticker); std::error_code ec; using namespace std::string_literals; - auto construct_url_functor = - [this]( - const std::string& main_ticker, const std::string& test_ticker, const std::string& url, const std::string& token_url, const std::string& ticker, const std::string& address) + auto construct_url_functor = [this]( + const std::string& main_ticker, const std::string& test_ticker, const std::string& url, const std::string& token_url, + const std::string& ticker, const std::string& address) { std::string out; if (ticker == main_ticker || ticker == test_ticker) @@ -1253,6 +1251,9 @@ namespace atomic_dex case CoinTypeGadget::EthereumClassic: out = construct_url_functor("ETC", "ETCT", "etc_tx_history", "etc_tx_history", ticker, address); break; + case CoinTypeGadget::RSK: + out = construct_url_functor("RBTC", "RBTCT", "rsk_tx_history", "rsk_tx_history", ticker, address); + break; case CoinTypeGadget::AVX20: out = construct_url_functor("AVAX", "AVAXT", "avx_tx_history", "avx_tx_history", ticker, address); break; From d461e31e601000b00f0ee45f7d6202be7a84d39e Mon Sep 17 00:00:00 2001 From: jspook16 Date: Sun, 21 Nov 2021 00:35:11 -0600 Subject: [PATCH 133/139] feat(atomicDex-Desktop): add DUST --- assets/config/0.5.3-coins.json | 26 ++++++++++++++++++ .../assets/images/coins/dust.png | Bin 0 -> 18118 bytes atomic_defi_design/qml.qrc | 1 + 3 files changed, 27 insertions(+) create mode 100644 atomic_defi_design/assets/images/coins/dust.png diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index c779784ea5..577210a8fa 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -1866,6 +1866,32 @@ "explorer_tx_url": "transaction/", "type": "UTXO" }, + "DUST": { + "coin": "DUST", + "name": "Dragonfairy", + "coinpaprika_id": "test-coin", + "coingecko_id": "test-coin", + "electrum": [ + { + "url": "51.222.85.227:10001" + "ws_url": "51.222.85.227:9001" + }, + { + "url": "78.141.233.64:10001" + "ws_url": "78.141.233.64:9001" + }, + { + "url": "192.248.166.207:10001" + "ws_url": "192.248.166.207:9001" + } + ], + "explorer_url": [ + "http://dragonfairy.gives/" + ], + "type": "Smart Chain", + "active": false, + "currently_enabled": false + }, "DGB": { "active": false, "coin": "DGB", diff --git a/atomic_defi_design/assets/images/coins/dust.png b/atomic_defi_design/assets/images/coins/dust.png new file mode 100644 index 0000000000000000000000000000000000000000..96f0eac59d70fa806d00c532166033ccc74e028b GIT binary patch literal 18118 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 UVTT>UV*mgE07*qoM6N<$g0INob^rhX literal 0 HcmV?d00001 diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index 58288d8d06..dbb7db86b0 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -86,6 +86,7 @@ assets/images/coins/doge.png assets/images/coins/dot.png assets/images/coins/dp.png + assets/images/coins/dust.png assets/images/coins/dx.png assets/images/coins/eca.png assets/images/coins/efl.png From 66d00d18fde9d7d4a08315501a3e79c8748ab847 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 21 Nov 2021 14:49:18 +0000 Subject: [PATCH 134/139] nomics_id for TKL, paprika_id for SMTF --- assets/config/0.5.3-coins.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index c779784ea5..e3212cbf2e 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -5135,7 +5135,7 @@ "SMTF-v2": { "coin": "SMTF-v2", "name": "SmartFi", - "coinpaprika_id": "test-coin", + "coinpaprika_id": "smtf-smartfi", "coingecko_id": "test-coin", "nodes": [ "http://bsc1.cipig.net:8655", @@ -6250,6 +6250,7 @@ "name": "Tokel", "coinpaprika_id": "tkl-tokel", "coingecko_id": "test-coin", + "nomics_id": "TKL2", "electrum": [ { "url": "1.eu.tokel.electrum.dexstats.info:10077" From cb17ac05aabac76839f8e237804bf4e071bb73ac Mon Sep 17 00:00:00 2001 From: jspook16 Date: Sun, 21 Nov 2021 11:23:52 -0600 Subject: [PATCH 135/139] feat(coins): add DUST --- assets/config/0.5.3-coins.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index 577210a8fa..fac48caaf3 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -1873,16 +1873,16 @@ "coingecko_id": "test-coin", "electrum": [ { - "url": "51.222.85.227:10001" - "ws_url": "51.222.85.227:9001" + "url": "51.222.85.227:10001", + "ws_url": "51.222.85.227:9001" }, { - "url": "78.141.233.64:10001" - "ws_url": "78.141.233.64:9001" + "url": "78.141.233.64:10001", + "ws_url": "78.141.233.64:9001" }, { - "url": "192.248.166.207:10001" - "ws_url": "192.248.166.207:9001" + "url": "192.248.166.207:10001", + "ws_url": "192.248.166.207:9001" } ], "explorer_url": [ From b1eb1dc3b8c855bcbd362eb532325e746bf6d3f0 Mon Sep 17 00:00:00 2001 From: Sztergbaum Date: Mon, 22 Nov 2021 07:03:58 +0100 Subject: [PATCH 136/139] feat(buy): fix buy side max --- src/core/atomicdex/pages/qt.trading.page.cpp | 2 +- src/tests/utilities/global.utilities.tests.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 5a81f90d2f..878c1ec922 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -160,7 +160,7 @@ namespace atomic_dex .price_numer = is_selected_order ? m_preferred_order->at("price_numer").get() : "", .volume_denom = is_selected_order ? m_preferred_order->at("base_max_volume_denom").get() : "", .volume_numer = is_selected_order ? m_preferred_order->at("base_max_volume_numer").get() : "", - .is_exact_selected_order_volume = is_selected_max && m_max_volume.toStdString() == m_preferred_order->at("base_max_volume").get(), + .is_exact_selected_order_volume = is_selected_max && m_max_volume.toStdString() == utils::extract_large_float(m_preferred_order->at("base_max_volume").get()), .base_nota = base_nota.isEmpty() ? std::optional{std::nullopt} : boost::lexical_cast(base_nota.toStdString()), .base_confs = base_confs.isEmpty() ? std::optional{std::nullopt} : base_confs.toUInt(), .min_volume = (rel_min_volume_f <= rel_min_trade) ? std::optional{std::nullopt} : get_min_trade_vol().toStdString()}; diff --git a/src/tests/utilities/global.utilities.tests.cpp b/src/tests/utilities/global.utilities.tests.cpp index bcc982dedf..fc83d423b9 100644 --- a/src/tests/utilities/global.utilities.tests.cpp +++ b/src/tests/utilities/global.utilities.tests.cpp @@ -18,6 +18,7 @@ #include +#include "atomicdex/utilities/safe.float.hpp" #include "atomicdex/utilities/global.utilities.hpp" using namespace atomic_dex::utils; @@ -105,6 +106,12 @@ TEST_CASE("atomic_dex::utils::retrieve_main_ticker()") CHECK_EQ(atomic_dex::utils::retrieve_main_ticker("BUSD-ERC20"), "BUSD"); } +TEST_CASE("extract_large_float") +{ + CHECK_EQ("12504.71255285", atomic_dex::utils::extract_large_float("12504.712552852304076")); + CHECK_EQ("1.1", atomic_dex::utils::extract_large_float("1.1")); +} + /*TEST_CASE("u8string") { using namespace std::string_literals; From 4acc5c9127242cb5de1c6f3e9ebee59398e6bfd0 Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 22 Nov 2021 06:22:49 +0000 Subject: [PATCH 137/139] remove SMTF-OLD --- assets/config/0.5.3-coins.json | 17 ----------------- atomic_defi_design/Dex/Constants/Style.qml | 2 -- .../assets/images/coins/smtf-old.png | Bin 81434 -> 0 bytes .../assets/images/coins/smtf-v2.png | Bin 81434 -> 0 bytes .../assets/images/coins/smtf.png | Bin 9439 -> 81434 bytes atomic_defi_design/qml.qrc | 2 -- 6 files changed, 21 deletions(-) delete mode 100644 atomic_defi_design/assets/images/coins/smtf-old.png delete mode 100644 atomic_defi_design/assets/images/coins/smtf-v2.png diff --git a/assets/config/0.5.3-coins.json b/assets/config/0.5.3-coins.json index e3212cbf2e..18b9a2a04a 100644 --- a/assets/config/0.5.3-coins.json +++ b/assets/config/0.5.3-coins.json @@ -5115,23 +5115,6 @@ "active": false, "currently_enabled": false }, - "SMTF-OLD": { - "coin": "SMTF-OLD", - "name": "SmartFi", - "coinpaprika_id": "test-coin", - "coingecko_id": "test-coin", - "nodes": [ - "http://bsc1.cipig.net:8655", - "http://bsc2.cipig.net:8655", - "http://bsc3.cipig.net:8655" - ], - "explorer_url": [ - "https://bscscan.com/" - ], - "type": "BEP-20", - "active": false, - "currently_enabled": false - }, "SMTF-v2": { "coin": "SMTF-v2", "name": "SmartFi", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 868daf038c..e908669480 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -389,8 +389,6 @@ QtObject { "PAXG": "#DABE37", "REN": "#595959", "SMTF": "#F75836", - "SMTF-OLD": "#F75836", - "SMTF-v2": "#F75836", "SUSHI": "#E25DA8", "TRYB": "#0929AA", "TUSD": "#2E3181", diff --git a/atomic_defi_design/assets/images/coins/smtf-old.png b/atomic_defi_design/assets/images/coins/smtf-old.png deleted file mode 100644 index 9c1c14c6de96c20bb4820e24801e24cf5b12f6d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81434 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∾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
-ZD!{$Iz@33(>~ph0 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∾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∾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 diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc index 58288d8d06..d21328beea 100644 --- a/atomic_defi_design/qml.qrc +++ b/atomic_defi_design/qml.qrc @@ -208,8 +208,6 @@ assets/images/coins/sibm.png assets/images/coins/skl.png assets/images/coins/smart-chain.png - assets/images/coins/smtf-old.png - assets/images/coins/smtf-v2.png assets/images/coins/smtf.png assets/images/coins/snt.png assets/images/coins/snx.png From 0978ce1490d8d8579bfac59db5789e8853c3081b Mon Sep 17 00:00:00 2001 From: cipig Date: Mon, 22 Nov 2021 09:17:03 +0000 Subject: [PATCH 138/139] HTTPS prices --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 98ccb22fcd..69485f82d2 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -10,7 +10,7 @@ namespace { - constexpr const char* g_komodo_prices_endpoint = "http://price.cipig.net:1313"; + constexpr const char* g_komodo_prices_endpoint = "https://prices.cipig.net:1717"; web::http::client::http_client_config g_komodo_prices_cfg{[]() { web::http::client::http_client_config cfg; From e76302453b31c5054e5bf5023bfafe00d5523104 Mon Sep 17 00:00:00 2001 From: jspook16 Date: Mon, 22 Nov 2021 21:50:04 -0600 Subject: [PATCH 139/139] feat(coins):add DUST --- atomic_defi_design/Dex/Constants/Style.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 868daf038c..a6cde8812c 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -303,6 +303,7 @@ QtObject { "CRV": "#517AB5", "DGC": "#BC7600", "DIMI": "#0BFBE2", + "DUST": "#6A032F", "EOS": "#4D4D4D", "FET": "#202944", "FTC": "#FFFFFF",