Code Monkey home page Code Monkey logo

komodoplatform / komodo-wallet-desktop Goto Github PK

View Code? Open in Web Editor NEW
237.0 23.0 204.0 103.02 MB

Komodo Wallet Desktop GUI

Home Page: https://atomicdex.io

License: GNU General Public License v2.0

CMake 2.20% C++ 44.84% AppleScript 0.05% QML 44.16% Objective-C++ 0.08% C 4.47% Nim 0.29% Shell 0.40% Awk 0.81% HTML 1.85% Perl 0.04% PowerShell 0.04% JavaScript 0.19% Inno Setup 0.32% Dockerfile 0.07% Python 0.18%
qt cpp20 qml blockchain atomic-swap cross-platform wallet dex interoperability atomic-swaps

komodo-wallet-desktop's Introduction

komodo-wallet-logo_dark-theme

downloads last commit
issues issues closed pulls pulls closed
build status release version chat on Discord follow on Twitter

What is Komodo Wallet?

Komodo Wallet is a secure wallet and non-custodial decentralized exchange rolled into one application. Store your coins, trade peer-to-peer with minimal fees and never give up control over your digital assets.

Komodo Wallet has been tested on the following platforms:

  • Windows 10
  • Linux (Ubuntu 18.04+)
  • macOS (10.14 - 11.0)

Get Started

You can download the pre-built beta binaries on our GitHub release page.

Build instructions can be found here

Please join our Discord Server for support, discussions and general UI/UX feedback.

Useful links

Komodo Wallet mobile

Check out Komodo Wallet mobile, available for Android and iOS

Self-Hosted Dependencies

Dependencies Version Description Categories
boost 1.78 Boost provides free peer-reviewed portable C++ source libraries. General Programming
doctest 2.3.8 The fastest feature-rich C++11/14/17/20 single-header testing framework Testing
fmt 7.1.0 A modern formatting library Formatting
nlohmann_json 3.9.1 JSON for Modern C++ Parsing
range-v3 0.11.0 Range library for C++14/17/20, basis for C++20's std::ranges Algorithm
date 2019-11-08 A date and time library based on the C++11/14/17 header Timezone/Calendar
spdlog 1.8.5 Fast C++ logging library. Logging
openssl 1.1.1h TLS/SSL and crypto library Network/Crypto
entt 3.5.1 Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more Architecture
cpprestsdk 2.10.15-1 The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. HTTP
taskflow 2.2.0 Parallel and Heterogeneous Task Programming in Modern C++ Threading
qt 5.15.2 Qt is a cross-platform application development framework for desktop, embedded and mobile. GUI

Contributors / Thanks

License

For details please refer to our license.

This is experimental alpha software - use at your own risk!

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

komodo-wallet-desktop's People

Contributors

actioncoininc avatar alamshafil avatar bitry avatar bobpepers avatar ca333 avatar ciphs avatar cipig avatar dth88 avatar fujicoin avatar liamrabbitt avatar lightspeed393 avatar mercurious1 avatar merlinmagic2018 avatar michelvankessel avatar milerius avatar miner113 avatar mraksoll4 avatar naezith avatar omahs avatar pionix-code avatar semsdev avatar shorelinecrypto avatar silkroadnomad avatar sirseveng avatar smk762 avatar softbalanced avatar ssakone avatar tonymorony avatar zatjum avatar zdeex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

komodo-wallet-desktop's Issues

Hidable seed breaking tab order

Seed input is TextArea normally, so it can have multiple lines.

At recovery page, seed is hidden in mobile so I did the same here. Though TextArea does not offer a way to hide the password, but TextField does. So what I did is to have TextArea and TextField, make the TextField hidden like a password, and make only one of them visible. So when you hide, it shows TextField, and when user clicks the eye icon, TextField hides and TextArea is being visible, showing multiple lined seed.

Having this hacky solution (I think mobile does a similar thing) broke the TAB order.

image

At this screenshot state, pressing TAB makes the focus invisible, then pressing again makes it go to the very top again. This is the problem, we expect it to continue to Allow custom seed checkbox.

I spent some time trying different stuff with KeyNavigation.tab and activeFocusOnTab but I couldn't get the desired result. Will take a look later, just saving it here so we don't forget.

integrate copy function

Hi, is it possible to integrate an copy function? For example i try to copy the swap id but its not possible. Thank you

Allow Export of Swap History (Recent Swaps)

Issue: It is currently not possible to export the 'recent swaps' list for the UI.

Use case: Analytics, evaluation of trade strategies, bots, backtesting, to support importing into accounting software and/or paying taxes on trades, as unpopular as they maybe.

Suggestion: Allow export to CSV and XLSX formats.
Nice to have: If a filter is introduced, the export should respect the filtered list (e.g export only successful swaps).

Allow Clearing of Swap History

Issue: It is currently not possible to clear out the swap history from within the UI.

If a swap filter is introduced for the list, the 'clear' history should respect the filter and only delete the displayed swaps.

Show full balance in fiat in the GUI

Property: Q_PROPERTY(QString balance_fiat_all READ get_balance_fiat_all WRITE set_current_balance_fiat_all NOTIFY on_fiat_balance_all_changed)

Close with commit url when it's done !

EnTT CMake Error on Build

After running ./ci_tools_atomic_dex build debug

CMake Error at ci_tools_atomic_dex/vcpkg-repo/scripts/buildsystems/vcpkg.cmake:286 (_find_package):
  Could not find a package configuration file provided by "EnTT" with any of
  the following names:

    EnTTConfig.cmake
    entt-config.cmake

Further research skypjack/entt#451 shows a similar issue being worked on about 8hrs ago.

Disabling of Wallet page buttons

image

image

Currently Send button is disabled when coin is syncing, and other 2 are not. There is also Claim Rewards at some coins.

Swap button and Trading is also enabled while it's syncing.

I need to know which ones of these 4 will be blocked when coin is syncing.

CI builds issues

List of known issues with ci_tools_atomic_dex automated builds.
Need to be fixed to have proper cd releases.

-- MacOS:

  1. atomicDEX-Pro.dmg has no icon

  2. debug builds do not start with debug console/log

-- Windows:

  1. similarly to (2) - release builds start with cmd debug console/log

  2. vcpkg does not build debug libs to provide with bundle-Debug.
    a.e.: libcurl-d.dll, boost-filesystem-gd-mt.dll, etc.

-- Linux:

  1. Linux builds require shared dependencies (*.so ), currently vcpkg does not support shared libs builds. Thus, we should either build static binary or search for a workaround.

Spinning for ETH/ERC-20 coins loading

I will add in the backend a current_coin_info.state that can be InProgress or Finished

If it's InProgress we need to show in the UI a Spinning Circle + the message Loading Syncing + current_coin_info.current_block TXs

State and Current block are not yet available

The transactions arrive little by little during synchronization, we display the spinning loading + the transactions step by step when state goes to Finished, we remove the spinning effect and the message

[Front/back]: Swap history

QVariantMap jsonmodel:

{
  "491df802-43c3-4c73-85ef-1c4c49315ac6": {
    "events": [
      {
        "Started": {
          "human_timestamp": "19 Janvier 2020 19h37"
        }
      },
      {
        "Finished": {
          "human_timestamp": "19 Janvier 2020 19h38"
        }
      }
    ],
    "taker_coin": "BTC",
    "maker_coin": "KMD",
    "maker_amount": "1",
    "taker_amout": "1",
    "type": "Taker",
    "my_info": {
      "my_amount": "1",
      "my_coin": "BTC",
      "other_amount": "1",
      "other_coin": "KMD",
      "started_at": 1561481967
    }
  }
}

Rename "Cancel' to 'Cancel Order' on Order Details dialog

Recommendation: Rename "cancel" to "Cancel Order"

Right now both buttons "close" and "cancel" could appear to mean the same thing.

In general, a button labelled 'Cancel' refers to "close the dialog and return to the previous state of the application".

A 'Close' button in general means: "I am done, close this thing with the changes I already made."

image

Orders list keeps auto-scrolling to the top

Win10.

Issue: The current orders list auto-jumps to the top every few seconds. Possibly the result of the orderbook call.

Expected: When scrolling the orderbook, the window position does not auto-jump :-)

Nice to have: remember the position of the list when toggling between tabs Trade/Orders/History

App dimensions work only for big screens

Testing version v0.1.2 on Win10 on a 15" screen: lower part of the app is hidden, including buttons necessary to continue. On a 24" screen at the highest resolution it's all fine, though the buttons look small on a large surface. If the 24" screen gets scaled at 125 or 150% resolution, lower part gets hidden again.

Attached examples:

15"
15_100_1

24" at highest resolution
24_100_2

24" scaled at 150%
24_150_2

[Claiming rewards]: Backend Frontend

To be able to recover the rewards of a coin we need several notions:

Is my currency a currency on which the rewards exist (coin_info.is_claimable == true)

Does my currency allow the recovery of the rewards and has the minimum amount to claim the reward (coin_info.is_claimable && balance(current_coin) > coin_info.minimal_claim_amount)

Does my currency allow the recovery of the rewards and has the minimum amount to claim the reward and i didn't claim it since one hours (coin_info.is_claimable && balance(current_coin) > coin_info.minimal_claim_amount && is_claiming_ready(current_coin.ticker))

C++ function will be exposed when ready

[Orders]: Backend/Frontend

  • In the backend we have:
        Q_INVOKABLE QVariantMap get_my_orders();

Which is a json / javascript object that look like:

{
  "BTC": {
    "orders": {
      "maker_order": [
        {
          "rel": "KMD",
          "base": "BTC",
          "date": "19 Janvier 2020",
          "cancellable": true,
          "base_amount": "1",
          "rel_amount": "1",
          "order_id": "4321"
        }
      ],
      "taker_order": [
        {
          "rel": "ETH",
          "base": "BTC",
          "date": "20 Janvier 2020",
          "cancellable": true,
          "base_amount": "1",
          "rel_amount": "1",
          "order_id": "1234"
        }
      ]
    }
  }
}

The C++ struct is:

struct qt_my_order_contents : QObject
    {
        Q_OBJECT
      public:
        explicit qt_my_order_contents(QObject* parent = nullptr);
        QString m_order_id;
        QString m_date;
        QString m_base;
        QString m_rel;
        bool    m_cancellable;
        QString m_base_amount;
        QString m_rel_amount;
        QString m_price;

        Q_PROPERTY(QString price READ get_price CONSTANT MEMBER m_price)
        Q_PROPERTY(QString date READ get_date CONSTANT MEMBER m_date)
        Q_PROPERTY(QString base READ get_base CONSTANT MEMBER m_base)
        Q_PROPERTY(QString rel READ get_rel CONSTANT MEMBER m_rel)
        Q_PROPERTY(bool cancellable READ is_cancellable CONSTANT MEMBER m_cancellable)
        Q_PROPERTY(QString base_amount READ get_base_amount CONSTANT MEMBER m_base_amount)
        Q_PROPERTY(QString rel_amount READ get_rel_amount CONSTANT MEMBER m_rel_amount)
        Q_PROPERTY(QString uuid READ get_uuid CONSTANT MEMBER m_order_id)

        [[nodiscard]] QString get_uuid() const noexcept
        {
            return m_order_id;
        }

        [[nodiscard]] bool
        is_cancellable() const noexcept
        {
            return m_cancellable;
        }

        [[nodiscard]] QString
        get_base_amount() const noexcept
        {
            return m_base_amount;
        }

        [[nodiscard]] QString
        get_rel_amount() const noexcept
        {
            return m_rel_amount;
        }

        [[nodiscard]] QString
        get_base() const noexcept
        {
            return m_base;
        }

        [[nodiscard]] QString
        get_rel() const noexcept
        {
            return m_rel;
        }

        [[nodiscard]] QString
        get_price() const noexcept
        {
            return m_price;
        }

        [[nodiscard]] QString
        get_date() const noexcept
        {
            return m_date;
        }
    };

    struct qt_my_orders : QObject
    {
        Q_OBJECT
      public:
        explicit qt_my_orders(QObject* parent = nullptr);
        QObjectList m_taker_orders;
        QObjectList m_maker_orders;

        Q_PROPERTY(QObjectList taker_orders READ get_taker_orders CONSTANT MEMBER m_taker_orders)
        Q_PROPERTY(QObjectList maker_orders READ get_maker_orders CONSTANT MEMBER m_maker_orders)

        [[nodiscard]] QObjectList get_taker_orders() const noexcept
        {
            return m_taker_orders;
        }

        [[nodiscard]] QObjectList
        get_maker_orders() const noexcept
        {
            return m_maker_orders;
        }
    };

Default fee of withdraw (get_trade_fee)

It would be great to disable the send button if user can't even pay the withdraw fees.

Here is how to have it by providing only the ticker:

curl -s --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"get_trade_fee\",\"coin\":\"ETH\"}" | json_pp
{
   "result" : {
      "coin" : "ETH",
      "amount" : "0.0009"
   }
}

segfault after long runtime

When i let AtomicDEX-Pro run for a longer period of time (eg 24h), it segfaults.
So i restarted it with gdb and collected this backtrace:

(gdb) backtrace
#0  0x00007ffff6abd7a4 in QV4::MarkStack::push (this=0x7fffffffaf10, m=0x7fff69a68220) at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/memory/qv4mmdefs_p.h:280
#1  QV4::Heap::Base::mark (markStack=0x7fffffffaf10, this=0x7fff69a68220) at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/memory/qv4heap_p.h:192
#2  QV4::Value::mark (markStack=0x7fffffffaf10, this=<optimized out>) at jsruntime/qv4value_p.h:362
#3  QV4::WeakValue::markOnce (this=<optimized out>, markStack=0x7fffffffaf10) at jsruntime/qv4persistent.cpp:415
#4  0x00007ffff6b2c2a0 in markChildQObjectsRecursively (parent=parent@entry=0x7fffffffdc98, markStack=markStack@entry=0x7fffffffaf10) at jsruntime/qv4qobjectwrapper.cpp:1134
#5  0x00007ffff6b2c34b in QV4::Heap::QObjectWrapper::markObjects (that=0x7fffece2ba40, markStack=0x7fffffffaf10) at jsruntime/qv4qobjectwrapper.cpp:1153
#6  0x00007ffff6a4441f in QV4::MarkStack::drain (this=this@entry=0x7fffffffaf10) at memory/qv4mm.cpp:863
#7  0x00007ffff6abd142 in QV4::PersistentValueStorage::mark (this=<optimized out>, markStack=markStack@entry=0x7fffffffaf10) at jsruntime/qv4persistent.cpp:243
#8  0x00007ffff6a4479d in QV4::MemoryManager::collectRoots (this=this@entry=0xfc2820, markStack=markStack@entry=0x7fffffffaf10) at memory/qv4mm.cpp:876
#9  0x00007ffff6a44989 in QV4::MemoryManager::mark (this=this@entry=0xfc2820) at memory/qv4mm.cpp:917
#10 0x00007ffff6a4675b in QV4::MemoryManager::runGC (this=this@entry=0xfc2820) at memory/qv4mm.cpp:1052
#11 0x00007ffff6a48ac8 in QV4::MemoryManager::allocate (size=32, allocator=0xfc2830, this=0xfc2820) at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/memory/qv4mm_p.h:307
#12 QV4::MemoryManager::allocString (this=this@entry=0xfc2820, unmanagedSize=<optimized out>) at memory/qv4mm.cpp:787
#13 0x00007ffff6aa7711 in QV4::MemoryManager::allocWithStringData<QV4::String, QString> (arg1=..., unmanagedSize=<optimized out>, this=0xfc2820) at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/memory/qv4mm_p.h:217
#14 QV4::ExecutionEngine::newString (this=this@entry=0xfc6a90, s=...) at jsruntime/qv4engine.cpp:890
#15 0x00007ffff6b30682 in loadProperty (v4=0xfc6a90, object=0x7fffffffdc98, property=...) at jsruntime/qv4qobjectwrapper.cpp:157
#16 0x00007fffd9404653 in ?? ()
#17 0x0000000000000000 in ?? ()

seems to happen in process_fees loop... this is from console

16:26:20.425 [fees thread     ]     atomic.dex.mm2.cpp:601   INFO| .   { process_fees
...
...
...
16:26:20.468 [orderbook thread] atomic.dex.mm2.api.cpp:605   INFO| .   .   resp: {"result":{"amount":"0.00021125","coin":"BTC"}}
16:26:20.561 [fees thread     ] atomic.dex.mm2.api.cpp:605   INFO| .   .   resp: {"result":{"amount":"0.00001039","coin":"LTC"}}

then it segfaults

Minimum trade amount

image

We lack this warning. Mobile app clears the input box and puts that error if your amount is too low. Perhaps we need a min_trade_amount from backend?

Local time

All dates are currently UTC. We need to have them for local time, mine is UTC+3 for example. mm2 does not provide that, we need to add the timezone in backend on top of that timestamp I suppose.

Potential problems when building on Windows

I was following the building instructions for Windows.

I had Visual Studio 2019 installed before but Desktop development with C++ was not selected. And I was not aware.

A tiny problem was this:

D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex>./ci_tools_atomic_dex.exe build release
'.' is not recognized as an internal or external command,
operable program or batch file.

After running it, for first time, I got this error:
image

Then it took a while to figure out that it's because Desktop development with C++ was not installed. I installed that.

At my next try, it failed like this:

D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex>ci_tools_atomic_dex.exe build release
D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex\vcpkg-repo\vcpkg
D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex\vcpkg-repo\scripts\buildsystems\vcpkg.cmake
Downloading packages ... please wait
D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex\src\ci_tools_atomic_dex.nim(52) ci_tools_atomic_dex
D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex\src\ci_tools_atomic_dex.nim(42) main
D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex\src\build.nim(7) build_atomic_qt
D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex\src\generate.nim(12) generate_solution
D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex\src\dependencies.nim(21) download_packages
C:\ProgramData\scoop\apps\nim\current\lib\pure\osproc.nim(750) execCmd
C:\ProgramData\scoop\apps\nim\current\lib\pure\includes\oserr.nim(94) raiseOSError
Error: unhandled exception: The system cannot find the file specified.
 [OSError]

D:\Projects\atomicDEX-Pro\atomic_qt\ci_tools_atomic_dex>

When I saw nim complaining, I remembered that after scoop install nim --global, my antivirus BitDefender removed a file inside that, and I restored that file. But I had no other clue so I thought this is because of that BitDefender issue. I added exceptions, tried many many different stuff to reinstall nim, but it was always being stuck at Extracting nim.... It installed fine when I removed --global.

I thought it will work at this point but when I tried, I got exactly the same error. Then I digged into
dependencies.nim and vcpkg.nim and found these two parts:

proc check_if_vcpkg_exists*(): bool =
    result = os.existsDir("vcpkg-repo")

proc install_vcpkg*() =
    set_vcpkg_path()
    if not check_if_vcpkg_exists():
        echo "Installing vcpkg"
        discard execCmd("git clone https://github.com/microsoft/vcpkg vcpkg-repo")
        build_vcpkg()
        integrate_vcpkg()
    else:
        echo "vcpkg repo exist"
        build_vcpkg()
        integrate_vcpkg()

After seeing that check_if_vcpkg_exists function, I deleted vcpkg-repo folder. And the build started running this time.

Yes, all of this chain of problems is caused by Desktop development with C++ not being installed.

I thought this time it will run perfectly but after a really long build, it failed.
Here is the log: https://paste.ubuntu.com/p/tnqqYM92PN/

EnTT problem continues here: #36 (comment)

Add the option to see all orders

Issue: The Orders page currently does not allow to display all active orders, only per coin.

Suggestion: Add a 'show all' or 'clear filter' option to the drop down menu:

image

Ethereum synching

Both Win and Linux versions. When activating Ethereum there's a spinning loading wheel in its page. I see from etherscan that it started at the most recent block and the count increases keeping up with new ethereum blocks. I left it running for one hour with no change. Is that expected behaviour? I previously noticed the same with atomicdex mobile on android.

Schermata del 2020-05-20 18-40-27

Handling RPC Error Responses

image

Even if RPC returns an error,

22 13:56:49, rpc:305] RPC error response: rpc:274] lp_coins:536] utxo:1391] utxo:654] Output value 0 is less than dust amount 1000

API returns "has_error":false,"error_message":""

This one is just a test with 0 amount send, which won't be allowed by front-end anyways.

But for all API calls we need to make sure they check the RPC error responses and return them.

Sell Dash - Max Amount - Missing Error Handling

Trade Screen

  • Select Dash - Max balance
  • Select KMD to receive
  • Confirm Swap

Swap never shows up as active

Suspect this is the same Max value for Dash issue that is in Mobile version but with no error handling to let user know it failed.

Was able to get a successful Dash > KMD swap when I reduced the Dash amount slightly.

Custom fee calculation for ERC-20

image

At this view, I need to check if user has enough balance for this withdraw call.

I do the check balance >= amount at the moment. But it's more complex than that of course.

User enters amount, gas (Gwei), gas_price (Gwei). And I have the info for ETH balance.

What the correct statement should be?

Is it erc20_coin_balance >= amount && eth_balance >= (gas * gas_price)/1,000,000,000?

But then if erc20_coin is ETH, is it being eth_balance >= amount + (gas * gas_price)/1,000,000,000?

So there are two cases.

error swapping max balance

12 13:47:02, rpc:307] RPC error response: rpc:276] lp_ordermatch:697] utxo:1443] BCH balance 0.00837406 is too low, required 0.00846328
12 13:51:14, rpc:307] RPC error response: rpc:276] lp_ordermatch:697] utxo:1443] LTC balance 0.0098383 is too low, required 0.00992564

If i try to swap the entire balance (BCH/LTC) to KMD, mm2 shows the above errors and the order is not created.

btw, BCH fee is always {"result":{"amount":"0.00001","coin":"BCH"}}, it is fixed.

dll missing for Windows 10

Installing 0.1.3 on a fresh Windows 10 (in Virtualbox), AtomicDex asks for missing msvcp140.dll & vcruntime140_1.dll

Hide the seed at Recovery page

Seed is displayed with TextArea component. TextField is hiding passwords like echoMode: hidable && hiding ? TextInput.Password : TextInput.Normal but TextArea does not have that field.

There is this https://doc.qt.io/qt-5/qml-qtquick-controls-textarea.html#inputMethodHints-prop but Qt.ImhHiddenText does not work I think.

Not many posts online about this field,
https://forum.qt.io/topic/107470/in-textfield-not-work-qt-imhhiddentext
https://bugreports.qt.io/browse/QTBUG-79079?filter=-4&jql=text%20~%20%22ImhHiddenText%22%20order%20by%20created%20DESC

I couldn't solve it since I couldn't find a good way. Saving it here.

[todo] num datatype

https://github.com/KomodoPlatform/atomicDEX-QT/blob/f6f35bd9663ddb26c615f4c69cfb56fd75746c5d/src/atomic.dex.gui.cpp#L47-L66

fyi - for the production version we will use rational datatype (in the "backend") when it comes to order-handling since the logic there does require divisions/multiplications at some point - for API fetched data like balance and TX amounts we will be using fixed-point arithmetic to calculate USD value, etc. thus storing these amounts in integer representations (cents/pennies) - for arithmetic operations on and representations of decimal nums we will use one of the arbitrary-precision arithmetic libraries like gmp, mpfr, etc.

relevant infos:
https://bitcointalk.org/index.php?topic=13837.0
https://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency

https://ieeexplore.ieee.org/document/8766229
https://gmplib.org/
https://www.mpfr.org/
https://en.wikipedia.org/wiki/List_of_arbitrary-precision_arithmetic_software
https://en.wikipedia.org/wiki/List_of_C%2B%2B_multiple_precision_arithmetic_libraries

f6f35bd#r36293782

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.