unchained-capital / hermit

Command-line, (SLIP39) sharded wallet designed for air-gapped deployments
https://unchained.com
Apache License 2.0
69 stars 27 forks source link

Error in shards on Mac: unpack requires a buffer of 4 bytes #33

Open rserranon opened 4 years ago

rserranon commented 4 years ago

I compiled the code but I get errors every time I interact with shards:

 shards> list-shards
unpack requires a buffer of 4 bytes
Hmm. Something went wrong.

I include test results and the errors i get with

# make lint

What is your environment?

Screenshots


Tests: 

===================================== test session starts ======================================
platform darwin -- Python 3.7.0, pytest-4.4.0, py-1.8.0, pluggy-0.12.0
rootdir: /Users/roberto/hermit
plugins: cov-2.6.1
collected 109 items

tests/test_config.py ....                                                                [  3%]
tests/test_errors.py ..                                                                  [  5%]
tests/test_functional_bitcoin_tests.py ..                                                [  7%]
tests/test_rng.py ...                                                                    [ 10%]
tests/test_wallet.py ..........                                                          [ 19%]
tests/qrcode/test_displayer.py ....                                                      [ 22%]
tests/qrcode/test_format.py .........                                                    [ 31%]
tests/qrcode/test_limits.py .........                                                    [ 39%]
tests/qrcode/test_reader.py ..                                                           [ 41%]
tests/shards/test_shard.py ........                                                      [ 48%]
tests/shards/test_shard_set.py .ss.......                                                [ 57%]
tests/signer/test_base.py .........                                                      [ 66%]
tests/signer/test_bitcoin_signer.py ...................................                  [ 98%]
tests/signer/test_echo_signer.py ..                                                      [100%]

======================================= warnings summary =======================================
tests/qrcode/test_displayer.py::TestDisplayQRCode::test_valid_qr_code[fixture_opensource_bitcoin_vector_0]
tests/qrcode/test_displayer.py::TestDisplayQRCode::test_valid_qr_code[fixture_opensource_bitcoin_vector_1]
  /Users/roberto/hermit/.virtualenv/lib/python3.7/site-packages/_pytest/python.py:178: RuntimeWarning: coroutine 'TestDisplayQRCode.test_valid_qr_code' was never awaited
    testfunction(**testargs)

-- Docs: https://docs.pytest.org/en/latest/warnings.html

---------- coverage: platform darwin, python 3.7.0-final-0 -----------
Name                              Stmts   Miss Branch BrPart  Cover   Missing
-----------------------------------------------------------------------------
hermit/config.py                     29      0     14      0   100%
hermit/errors.py                      5      0      0      0   100%
hermit/plugin.py                     11      5      6      1    41%   10-15, 9->10
hermit/qrcode/displayer.py           22      8      2      0    58%   13-14, 18-26
hermit/qrcode/format.py              40      7      8      1    83%   11, 41-46, 10->11
hermit/qrcode/reader.py              43      3     10      4    87%   47-48, 62, 27->65, 31->55, 51->31, 59->62
hermit/qrcode/utils.py                3      1      0      0    67%   5
hermit/rng.py                        58     29     12      0    50%   48-76, 93-96, 99-105, 108-109
hermit/shamir_share.py               43      2      6      0    92%   30-31
hermit/shards/interface.py          128    103     42      0    16%   24-25, 28-36, 39-49, 56-68, 75-83, 88-109, 112, 116, 120-121, 124-142, 145-163, 166-216
hermit/shards/shard.py               67      6     12      5    86%   29, 45, 55, 65, 93, 128, 28->29, 44->45, 54->55, 64->65, 92->93
hermit/shards/shard_set.py          205     78     62      7    60%   58-83, 86, 94-96, 99-100, 198-199, 205-207, 210, 226-232, 235-246, 249, 252-254, 257-269, 275-277, 285-298, 301, 304-305, 308-310, 313-318, 322, 325, 328, 331-333, 57->58, 85->86, 89->exit, 132->134, 197->198, 209->210, 274->275
hermit/signer/base.py                73      0     18      0   100%
hermit/signer/bitcoin_signer.py     183      0     80      0   100%
hermit/signer/echo_signer.py         11      0      0      0   100%
hermit/ui/base.py                    27     27      6      0     0%   1-40
hermit/ui/common.py                  27     27      2      0     0%   1-74
hermit/ui/main.py                    16     16      2      0     0%   1-29
hermit/ui/relocker.py                15     15      6      0     0%   1-21
hermit/ui/repl.py                    62     62     26      0     0%   1-91
hermit/ui/shards.py                  49     49      2      0     0%   1-341
hermit/ui/state.py                    8      8      0      0     0%   1-15
hermit/ui/toolbar.py                 17     17      6      0     0%   1-25
hermit/ui/wallet.py                  41     41      2      0     0%   1-203
hermit/wallet.py                     55      0     12      0   100%
-----------------------------------------------------------------------------
TOTAL                              1238    504    336     18    59%

====================== 107 passed, 2 skipped, 2 warnings in 16.15 seconds ======================

make lint
.virtualenv/bin/flake8 hermit --exclude=__init__.py
hermit/config.py:16:80: E501 line too long (131 > 79 characters)
hermit/config.py:82:80: E501 line too long (90 > 79 characters)
hermit/rng.py:7:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:2:80: E501 line too long (85 > 79 characters)
hermit/shamir_share.py:3:80: E501 line too long (84 > 79 characters)
hermit/shamir_share.py:7:47: W291 trailing whitespace
hermit/shamir_share.py:11:1: F401 'hashlib' imported but unused
hermit/shamir_share.py:12:1: F401 'hmac' imported but unused
hermit/shamir_share.py:13:1: F401 'os' imported but unused
hermit/shamir_share.py:16:1: F403 'from shamir_mnemonic import *' used; unable to detect undefined names
hermit/shamir_share.py:17:80: E501 line too long (82 > 79 characters)
hermit/shamir_share.py:20:80: E501 line too long (80 > 79 characters)
hermit/shamir_share.py:25:1: E302 expected 2 blank lines, found 0
hermit/shamir_share.py:29:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:30:8: F405 'length' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:30:24: E225 missing whitespace around operator
hermit/shamir_share.py:33:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:37:12: F405 'mnemonic_from_indices' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:37:75: E231 missing whitespace after ','
hermit/shamir_share.py:37:80: E501 line too long (130 > 79 characters)
hermit/shamir_share.py:37:107: F405 'RADIX_BITS' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:37:119: F405 'RADIX_BITS' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:45:30: F405 'mnemonic_to_indices' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:45:70: F405 'bits_to_bytes' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:45:80: E501 line too long (113 > 79 characters)
hermit/shamir_share.py:45:84: F405 'RADIX_BITS' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:45:106: E203 whitespace before ','
hermit/shamir_share.py:45:107: E231 missing whitespace after ','
hermit/shamir_share.py:47:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:48:80: E501 line too long (133 > 79 characters)
hermit/shamir_share.py:52:80: E501 line too long (85 > 79 characters)
hermit/shamir_share.py:53:80: E501 line too long (130 > 79 characters)
hermit/shamir_share.py:55:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:56:80: E501 line too long (141 > 79 characters)
hermit/shamir_share.py:60:80: E501 line too long (95 > 79 characters)
hermit/shamir_share.py:61:80: E501 line too long (130 > 79 characters)
hermit/shamir_share.py:63:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:64:15: F405 'decode_mnemonic' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:66:12: F405 'encode_mnemonic' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:68:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:69:15: F405 'decode_mnemonic' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:72:12: F405 'encode_mnemonic' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:74:1: E302 expected 2 blank lines, found 1
hermit/shamir_share.py:75:15: F405 'decode_mnemonic' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:77:12: F405 'encode_mnemonic' may be undefined, or defined from star imports: shamir_mnemonic
hermit/shamir_share.py:78:1: W391 blank line at end of file
hermit/plugin.py:8:10: E222 multiple spaces after operator
hermit/ui/repl.py:1:1: F401 'asyncio' imported but unused
hermit/ui/repl.py:11:1: F403 'from .base import *' used; unable to detect undefined names
hermit/ui/repl.py:12:1: F403 'from .toolbar import *' used; unable to detect undefined names
hermit/ui/repl.py:17:1: E302 expected 2 blank lines, found 1
hermit/ui/repl.py:17:18: E231 missing whitespace after ':'
hermit/ui/repl.py:17:19: F405 'Dict' may be undefined, or defined from star imports: .base, .toolbar
hermit/ui/repl.py:20:22: E261 at least two spaces before inline comment
hermit/ui/repl.py:25:29: E128 continuation line under-indented for visual indent
hermit/ui/repl.py:25:44: F405 'bottom_toolbar' may be undefined, or defined from star imports: .base, .toolbar
hermit/ui/repl.py:26:29: E128 continuation line under-indented for visual indent
hermit/ui/repl.py:27:64: F405 'bottom_toolbar' may be undefined, or defined from star imports: .base, .toolbar
hermit/ui/repl.py:35:80: E501 line too long (97 > 79 characters)
hermit/ui/repl.py:36:47: E128 continuation line under-indented for visual indent
hermit/ui/repl.py:37:47: E124 closing bracket does not match visual indentation
hermit/ui/repl.py:52:27: F405 'HermitError' may be undefined, or defined from star imports: .base, .toolbar
hermit/ui/repl.py:56:20: F405 'HermitError' may be undefined, or defined from star imports: .base, .toolbar
hermit/ui/repl.py:75:25: F405 'DeadTime' may be undefined, or defined from star imports: .base, .toolbar
hermit/ui/toolbar.py:1:1: F401 'asyncio' imported but unused
hermit/ui/toolbar.py:3:1: F403 'from .base import *' used; unable to detect undefined names
hermit/ui/toolbar.py:6:12: F405 'DeadTime' may be undefined, or defined from star imports: .base
hermit/ui/toolbar.py:6:27: F405 'DeadTime' may be undefined, or defined from star imports: .base
hermit/ui/toolbar.py:8:1: E302 expected 2 blank lines, found 1
hermit/ui/toolbar.py:19:9: F405 'DeadTime' may be undefined, or defined from star imports: .base
hermit/ui/toolbar.py:21:55: F405 'DeadTime' may be undefined, or defined from star imports: .base
hermit/ui/common.py:1:1: F403 'from .base import *' used; unable to detect undefined names
hermit/ui/common.py:5:1: F401 'traceback' imported but unused
hermit/ui/common.py:6:1: F401 'sys' imported but unused
hermit/ui/common.py:7:31: E703 statement ends with a semicolon
hermit/ui/common.py:9:1: E302 expected 2 blank lines, found 1
hermit/ui/common.py:20:7: E111 indentation is not a multiple of four
hermit/ui/common.py:21:12: F405 'HermitError' may be undefined, or defined from star imports: .base
hermit/ui/common.py:22:7: E111 indentation is not a multiple of four
hermit/ui/common.py:22:7: F405 'print_formatted_text' may be undefined, or defined from star imports: .base
hermit/ui/common.py:23:7: E114 indentation is not a multiple of four (comment)
hermit/ui/common.py:23:7: E265 block comment should start with '# '
hermit/ui/common.py:25:25: F405 'DeadTime' may be undefined, or defined from star imports: .base
hermit/ui/common.py:41:1: E302 expected 2 blank lines, found 1
hermit/ui/common.py:48:5: F405 'clear_screen' may be undefined, or defined from star imports: .base
hermit/ui/common.py:50:1: E302 expected 2 blank lines, found 1
hermit/ui/common.py:65:1: E302 expected 2 blank lines, found 1
hermit/ui/common.py:65:1: F811 redefinition of unused 'unlock' from line 9
hermit/ui/common.py:71:1: W293 blank line contains whitespace
hermit/ui/common.py:72:1: W293 blank line contains whitespace
hermit/ui/common.py:74:5: F405 'print_formatted_text' may be undefined, or defined from star imports: .base
hermit/ui/main.py:5:1: F403 'from .wallet import *' used; unable to detect undefined names
hermit/ui/main.py:6:1: F403 'from .common import *' used; unable to detect undefined names
hermit/ui/main.py:7:1: F403 'from .relocker import *' used; unable to detect undefined names
hermit/ui/main.py:21:1: E302 expected 2 blank lines, found 1
hermit/ui/main.py:22:5: F405 'clear_screen' may be undefined, or defined from star imports: .common, .relocker, .wallet
hermit/ui/main.py:27:12: F405 'asyncio' may be undefined, or defined from star imports: .common, .relocker, .wallet
hermit/ui/main.py:28:5: F841 local variable 'deadman_task' is assigned to but never used
hermit/ui/main.py:28:37: F405 'relock_wallet_if_timed_out' may be undefined, or defined from star imports: .common, .relocker, .wallet
hermit/ui/main.py:29:29: F405 'wallet_repl' may be undefined, or defined from star imports: .common, .relocker, .wallet
hermit/ui/relocker.py:3:1: F403 'from .base import *' used; unable to detect undefined names
hermit/ui/relocker.py:3:1: F401 '.base.*' imported but unused
hermit/ui/relocker.py:6:1: E302 expected 2 blank lines, found 1
hermit/ui/relocker.py:11:1: E302 expected 2 blank lines, found 1
hermit/ui/shards.py:3:1: F403 'from .base import *' used; unable to detect undefined names
hermit/ui/shards.py:6:16: F405 'Dict' may be undefined, or defined from star imports: .base
hermit/ui/shards.py:8:1: E302 expected 2 blank lines, found 1
hermit/ui/shards.py:9:12: F405 'command' may be undefined, or defined from star imports: .base
hermit/ui/shards.py:79:2: W291 trailing whitespace
hermit/ui/shards.py:145:15: F405 'reader' may be undefined, or defined from star imports: .base
hermit/ui/shards.py:159:1: E302 expected 2 blank lines, found 1
hermit/ui/shards.py:167:5: F405 'displayer' may be undefined, or defined from star imports: .base
hermit/ui/shards.py:284:1: E303 too many blank lines (3)
hermit/ui/shards.py:298:1: E303 too many blank lines (3)
hermit/ui/shards.py:313:1: E302 expected 2 blank lines, found 3
hermit/ui/shards.py:318:5: F405 'clear_screen' may be undefined, or defined from star imports: .base
hermit/ui/shards.py:341:9: F405 'print_formatted_text' may be undefined, or defined from star imports: .base
hermit/ui/shards.py:341:30: F405 'HTML' may be undefined, or defined from star imports: .base
hermit/ui/base.py:4:1: F401 'prompt_toolkit.HTML' imported but unused
hermit/ui/base.py:4:1: F401 'prompt_toolkit.print_formatted_text' imported but unused
hermit/ui/base.py:7:1: F401 'hermit.qrcode.displayer' imported but unused
hermit/ui/base.py:7:1: F401 'hermit.qrcode.reader' imported but unused
hermit/ui/base.py:11:1: E302 expected 2 blank lines, found 1
hermit/ui/base.py:15:1: E302 expected 2 blank lines, found 1
hermit/ui/base.py:18:1: E302 expected 2 blank lines, found 1
hermit/ui/base.py:18:27: E231 missing whitespace after ':'
hermit/ui/wallet.py:7:1: F403 'from .base import *' used; unable to detect undefined names
hermit/ui/wallet.py:12:17: F405 'Dict' may be undefined, or defined from star imports: .base
hermit/ui/wallet.py:14:1: E302 expected 2 blank lines, found 1
hermit/ui/wallet.py:15:12: F405 'command' may be undefined, or defined from star imports: .base
hermit/ui/wallet.py:83:5: F405 'displayer' may be undefined, or defined from star imports: .base
hermit/ui/wallet.py:83:80: E501 line too long (81 > 79 characters)
hermit/ui/wallet.py:106:5: F405 'displayer' may be undefined, or defined from star imports: .base
hermit/ui/wallet.py:106:80: E501 line too long (85 > 79 characters)
hermit/ui/wallet.py:116:5: F405 'clear_screen' may be undefined, or defined from star imports: .base
hermit/ui/wallet.py:128:5: F405 'clear_screen' may be undefined, or defined from star imports: .base
hermit/ui/wallet.py:166:30: F405 'HTML' may be undefined, or defined from star imports: .base
hermit/ui/wallet.py:202:1: E302 expected 2 blank lines, found 1
hermit/signer/bitcoin_signer.py:79:1: W293 blank line contains whitespace
hermit/signer/bitcoin_signer.py:108:80: E501 line too long (81 > 79 characters)
hermit/signer/bitcoin_signer.py:115:80: E501 line too long (119 > 79 characters)
hermit/signer/bitcoin_signer.py:183:80: E501 line too long (85 > 79 characters)
hermit/signer/bitcoin_signer.py:233:20: E221 multiple spaces before operator
hermit/signer/bitcoin_signer.py:238:55: E261 at least two spaces before inline comment
hermit/signer/bitcoin_signer.py:239:1: W293 blank line contains whitespace
hermit/signer/bitcoin_signer.py:280:80: E501 line too long (111 > 79 characters)
hermit/signer/bitcoin_signer.py:317:10: W291 trailing whitespace
hermit/signer/bitcoin_signer.py:320:10: W291 trailing whitespace
hermit/signer/echo_signer.py:1:1: F401 'hermit.qrcode.displayer' imported but unused
hermit/signer/echo_signer.py:17:1: W293 blank line contains whitespace
hermit/signer/base.py:7:1: F401 'hermit' imported but unused
hermit/signer/base.py:78:45: E231 missing whitespace after ':'
hermit/signer/base.py:123:45: E231 missing whitespace after ':'
hermit/signer/base.py:143:5: E303 too many blank lines (2)
hermit/signer/base.py:162:80: E501 line too long (80 > 79 characters)
hermit/signer/base.py:169:5: E303 too many blank lines (2)
hermit/signer/base.py:176:5: E303 too many blank lines (2)
hermit/shards/interface.py:28:80: E501 line too long (80 > 79 characters)
hermit/shards/interface.py:35:1: W293 blank line contains whitespace
hermit/shards/interface.py:37:1: W293 blank line contains whitespace
hermit/shards/interface.py:41:18: E222 multiple spaces after operator
hermit/shards/interface.py:41:80: E501 line too long (85 > 79 characters)
hermit/shards/interface.py:61:44: W291 trailing whitespace
hermit/shards/interface.py:76:80: E501 line too long (116 > 79 characters)
hermit/shards/interface.py:83:80: E501 line too long (96 > 79 characters)
hermit/shards/interface.py:97:80: E501 line too long (80 > 79 characters)
hermit/shards/interface.py:124:80: E501 line too long (92 > 79 characters)
hermit/shards/interface.py:165:67: E231 missing whitespace after ','
hermit/shards/interface.py:168:80: E501 line too long (81 > 79 characters)
hermit/shards/interface.py:172:80: E501 line too long (141 > 79 characters)
hermit/shards/interface.py:173:15: E203 whitespace before ':'
hermit/shards/interface.py:173:32: E231 missing whitespace after ','
hermit/shards/interface.py:176:80: E501 line too long (88 > 79 characters)
hermit/shards/interface.py:188:80: E501 line too long (148 > 79 characters)
hermit/shards/interface.py:192:80: E501 line too long (158 > 79 characters)
hermit/shards/interface.py:212:80: E501 line too long (130 > 79 characters)
hermit/shards/shard_set.py:18:1: E302 expected 2 blank lines, found 1
hermit/shards/shard_set.py:35:12: E713 test for membership should be 'not in'
hermit/shards/shard_set.py:86:80: E501 line too long (89 > 79 characters)
hermit/shards/shard_set.py:108:80: E501 line too long (80 > 79 characters)
hermit/shards/shard_set.py:152:80: E501 line too long (86 > 79 characters)
hermit/shards/shard_set.py:155:80: E501 line too long (86 > 79 characters)
hermit/shards/shard_set.py:158:80: E501 line too long (117 > 79 characters)
hermit/shards/shard_set.py:177:17: E203 whitespace before ':'
hermit/shards/shard_set.py:177:36: E225 missing whitespace around operator
hermit/shards/shard_set.py:178:26: E203 whitespace before ':'
hermit/shards/shard_set.py:178:42: E225 missing whitespace around operator
hermit/shards/shard_set.py:179:27: E203 whitespace before ':'
hermit/shards/shard_set.py:180:24: E203 whitespace before ':'
hermit/shards/shard_set.py:190:80: E501 line too long (92 > 79 characters)
hermit/shards/shard_set.py:196:31: E231 missing whitespace after ','
hermit/shards/shard_set.py:196:80: E501 line too long (94 > 79 characters)
hermit/shards/shard_set.py:199:80: E501 line too long (101 > 79 characters)
hermit/shards/shard_set.py:205:13: E722 do not use bare 'except'
hermit/shards/shard_set.py:210:80: E501 line too long (81 > 79 characters)
hermit/shards/shard_set.py:220:80: E501 line too long (85 > 79 characters)
hermit/shards/shard_set.py:230:80: E501 line too long (81 > 79 characters)
hermit/shards/shard_set.py:265:80: E501 line too long (85 > 79 characters)
hermit/shards/shard_set.py:291:80: E501 line too long (92 > 79 characters)
hermit/shards/shard.py:6:1: E302 expected 2 blank lines, found 1
hermit/shards/shard.py:77:80: E501 line too long (89 > 79 characters)
hermit/shards/shard.py:105:80: E501 line too long (91 > 79 characters)
hermit/shards/shard.py:131:80: E501 line too long (110 > 79 characters)
hermit/shards/shard.py:135:80: E501 line too long (95 > 79 characters)
hermit/shards/shard.py:138:80: E501 line too long (124 > 79 characters)
make: [lint] Error 1 (ignored)
.virtualenv/bin/mypy hermit/
hermit/shards/interface.py:34: error: Incompatible return value type (got "None", expected "bytes")
hermit/shards/interface.py:46: error: Incompatible return value type (got "None", expected "bytes")
hermit/shards/interface.py:63: error: Incompatible types in assignment (expression has type "None", variable has type "bytes")
hermit/shards/interface.py:66: error: Incompatible types in assignment (expression has type "None", variable has type "bytes")
hermit/shards/shard_set.py:183: error: Need type annotation for 'filled_groups'
hermit/signer/bitcoin_signer.py:109: error: Need type annotation for 'inputs'
hermit/signer/bitcoin_signer.py:157: error: "bytes" has no attribute "encode"; maybe "decode"?
hermit/signer/bitcoin_signer.py:277: error: Need type annotation for 'parsed_redeem_scripts'
hermit/signer/bitcoin_signer.py:290: error: "CBitcoinAddress" has no attribute "to_scriptPubKey"; maybe "from_scriptPubKey"?
hermit/signer/bitcoin_signer.py:299: error: Need type annotation for 'keys'
hermit/ui/repl.py:24: error: Incompatible types in assignment (expression has type "PromptSession", variable has type "None")
hermit/ui/repl.py:35: error: "None" has no attribute "prompt"
hermit/ui/common.py:65: error: Name 'unlock' already defined on line 9
make: [lint] Error 1 (ignored)
´´´
humanumbrella commented 3 years ago

Hi there - can you try to run write before list-shards ?

I was just trying to get things working and ran into a similar problem. I was able to continue my testing once I created a tmp file on disk via write. Let me know if that works