Skip to content

Handle transaction amount entered as a float not to be changed by the float implementation

Hi,

I have a bug on a tx (manual and automated) :

Trying to empty the account (141.89) :

silkaj -p g1.cgeek.fr --auth-file --file ~/g1-cotis-master.old/auth_g1cotis/GTsYayS6wkrKUrRhVBR6avybBqSAmu3betnSYojyiskp.auth tx  --output HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 --amount 141.89
╒════════════════════════════╤══════════════════════════════════════════════╕
│ pubkey’s balance before tx │ 141.89 Ğ1                                    │
├────────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (unit)           │ 141.89 Ğ1                                    │
├────────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (relative)       │ 14.0904 UD Ğ1                                │
├────────────────────────────┼──────────────────────────────────────────────┤
│ pubkey’s balance after tx  │ 1.8189894035458565e-14 Ğ1                    │
├────────────────────────────┼──────────────────────────────────────────────┤
│ from (pubkey)              │ GTsYayS6wkrKUrRhVBR6avybBqSAmu3betnSYojyiskp │
├────────────────────────────┼──────────────────────────────────────────────┤
│ to (pubkey)                │ HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 │
├────────────────────────────┼──────────────────────────────────────────────┤
│ comment                    │                                              │
╘════════════════════════════╧══════════════════════════════════════════════╛
Do you confirm sending this transaction? [yes/no]: yes    
Generate Transaction:  
   - From:    GTsYayS6wkrKUrRhVBR6avybBqSAmu3betnSYojyiskp  
   - To:      HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4   
   - Amount:  141.89
Traceback (most recent call last):
  File "/home/dunitertest/.local/share/virtualenvs/silkaj-EzvhOxyi/bin/silkaj", line 7, in <module>
    exec(compile(f.read(), __file__, 'exec'))
  File "/home/dunitertest/silkaj/bin/silkaj", line 23, in <module>
    cli(obj={})
  File "/home/dunitertest/.local/share/virtualenvs/silkaj-EzvhOxyi/lib/python3.7/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/dunitertest/.local/share/virtualenvs/silkaj-EzvhOxyi/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/dunitertest/.local/share/virtualenvs/silkaj-EzvhOxyi/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/dunitertest/.local/share/virtualenvs/silkaj-EzvhOxyi/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/dunitertest/.local/share/virtualenvs/silkaj-EzvhOxyi/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/dunitertest/silkaj/silkaj/tools.py", line 70, in wrapper
    return loop.run_until_complete(f(*args, **kwargs))
  File "/usr/local/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
    return future.result()
  File "/home/dunitertest/silkaj/silkaj/tx.py", line 99, in send_transaction
    key, issuer_pubkey, tx_amount, outputAddresses, comment, outputbackchange
  File "/home/dunitertest/silkaj/silkaj/tx.py", line 237, in handle_intermediaries_transactions
    OutputbackChange,
  File "/home/dunitertest/silkaj/silkaj/tx.py", line 277, in generate_and_send_transaction
    OutputbackChange,
  File "/home/dunitertest/silkaj/silkaj/tx.py", line 329, in generate_transaction_document
    generate_output(listoutput, curentUnitBase, AmountTransfered, outputAddress)
  File "/home/dunitertest/silkaj/silkaj/tx.py", line 364, in generate_output
    outputAmount = truncBase(rest, unitbase)
  File "/home/dunitertest/silkaj/silkaj/tx.py", line 392, in truncBase
    return math.trunc(amount / pow) * pow
ZeroDivisionError: float division by zero
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0xb59bcd98>
ERROR:asyncio:Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0xb581c8b8>, 559035.958879131)]']
connector: <aiohttp.connector.TCPConnector object at 0xb58e3a50>

After this, I answer "no" to keep the sources. So I don't know if the tx would work or not.

with --allSources on 0.7.1 :

silkaj -p g1.cgeek.fr --auth-file  tx  --output HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 --allSources
╒════════════════════════════╤══════════════════════════════════════════════╕
│ pubkey’s balance before tx │ 141.89 Ğ1                                    │
├────────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (unit)           │ 141.89 Ğ1                                    │
├────────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (relative)       │ 14.0904 UD Ğ1                                │
├────────────────────────────┼──────────────────────────────────────────────┤
│ pubkey’s balance after tx  │ 0.0 Ğ1                                       │
├────────────────────────────┼──────────────────────────────────────────────┤
│ from (pubkey)              │ GTsYayS6wkrKUrRhVBR6avybBqSAmu3betnSYojyiskp │
├────────────────────────────┼──────────────────────────────────────────────┤
│ to (pubkey)                │ HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 │
├────────────────────────────┼──────────────────────────────────────────────┤
│ comment                    │                                              │
╘════════════════════════════╧══════════════════════════════════════════════╛
Do you confirm sending this transaction? [yes/no]: no

I think the tx would work.

tx on a partial amount:

silkaj -p g1.cgeek.fr --auth-file  tx  --output HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 --amount 18
╒════════════════════════════╤══════════════════════════════════════════════╕
│ pubkey’s balance before tx │ 141.89 Ğ1                                    │
├────────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (unit)           │ 18.0 Ğ1                                      │
├────────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (relative)       │ 1.7875 UD Ğ1                                 │
├────────────────────────────┼──────────────────────────────────────────────┤
│ pubkey’s balance after tx  │ 123.89 Ğ1                                    │
├────────────────────────────┼──────────────────────────────────────────────┤
│ from (pubkey)              │ GTsYayS6wkrKUrRhVBR6avybBqSAmu3betnSYojyiskp │
├────────────────────────────┼──────────────────────────────────────────────┤
│ to (pubkey)                │ HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 │
├────────────────────────────┼──────────────────────────────────────────────┤
│ comment                    │                                              │
╘════════════════════════════╧══════════════════════════════════════════════╛
Do you confirm sending this transaction? [yes/no]: no

I've tried with 18, 100, 141,88, the "pubkey's balance after tx" is always correct.

with v0.6.5, total amount :

silkaj -p g1.cgeek.fr --auth-file  tx  --output HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 --amount 141.89
Traceback (most recent call last):
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/bin/silkaj", line 7, in <module>
    exec(compile(f.read(), __file__, 'exec'))
  File "/home/thomas/silkaj-v0.6.5/bin/silkaj", line 25, in <module>
    manage_cmd()
  File "/home/thomas/silkaj-v0.6.5/silkaj/cli_tools.py", line 85, in manage_cmd
    cli(obj={})
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/thomas/silkaj-v0.6.5/silkaj/cli_tools.py", line 183, in cliTransaction
    amount, amountud, allsources, output, comment, outputbackchange, yes
  File "/home/thomas/silkaj-v0.6.5/silkaj/tx.py", line 49, in send_transaction
    pubkey_amount = get_amount_from_pubkey(issuer_pubkey)[0]
  File "/home/thomas/silkaj-v0.6.5/silkaj/money.py", line 96, in get_amount_from_pubkey
    listinput, amount = get_sources(pubkey)
  File "/home/thomas/silkaj-v0.6.5/silkaj/money.py", line 108, in get_sources
    sources = get_request("tx/sources/" + pubkey)["sources"]
  File "/home/thomas/silkaj-v0.6.5/silkaj/network_tools.py", line 158, in get_request
    ep = EndPoint().ep
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/thomas/silkaj-v0.6.5/silkaj/network_tools.py", line 101, in __init__
    ep["domain"], ep["port"] = ctx.obj["PEER"].rsplit(":", 1)
ValueError: not enough values to unpack (expected 2, got 1)

with v0.6.5 and allSources :

silkaj -p g1.cgeek.fr --auth-file  tx  --output HeZJHAc58PB8PjE3aX9NydeALCdQZkECkrmz1ViZjXo4 --allSources
Traceback (most recent call last):
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/bin/silkaj", line 7, in <module>
    exec(compile(f.read(), __file__, 'exec'))
  File "/home/thomas/silkaj-v0.6.5/bin/silkaj", line 25, in <module>
    manage_cmd()
  File "/home/thomas/silkaj-v0.6.5/silkaj/cli_tools.py", line 85, in manage_cmd
    cli(obj={})
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/thomas/silkaj-v0.6.5/silkaj/cli_tools.py", line 183, in cliTransaction
    amount, amountud, allsources, output, comment, outputbackchange, yes
  File "/home/thomas/silkaj-v0.6.5/silkaj/tx.py", line 49, in send_transaction
    pubkey_amount = get_amount_from_pubkey(issuer_pubkey)[0]
  File "/home/thomas/silkaj-v0.6.5/silkaj/money.py", line 96, in get_amount_from_pubkey
    listinput, amount = get_sources(pubkey)
  File "/home/thomas/silkaj-v0.6.5/silkaj/money.py", line 108, in get_sources
    sources = get_request("tx/sources/" + pubkey)["sources"]
  File "/home/thomas/silkaj-v0.6.5/silkaj/network_tools.py", line 158, in get_request
    ep = EndPoint().ep
  File "/home/thomas/.local/share/virtualenvs/silkaj-v0.6.5-0qDwUMlP/lib/python3.7/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/thomas/silkaj-v0.6.5/silkaj/network_tools.py", line 101, in __init__
    ep["domain"], ep["port"] = ctx.obj["PEER"].rsplit(":", 1)
ValueError: not enough values to unpack (expected 2, got 1)
Edited by Moul
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information