Coder Social home page Coder Social logo

goatpig / bitcoinarmory Goto Github PK

View Code? Open in Web Editor NEW

This project forked from etotheipi/bitcoinarmory

469.0 60.0 171.0 122.33 MB

Python-Based Bitcoin Software

License: Other

Python 32.43% C++ 62.92% C 0.97% Shell 0.07% Makefile 0.21% NSIS 0.10% Batchfile 0.03% Objective-C 0.03% QMake 0.07% Objective-C++ 0.12% CSS 0.08% JavaScript 0.01% HTML 0.12% M4 0.89% Rich Text Format 0.75% CMake 1.21%

bitcoinarmory's Introduction

Armory

Created by Alan Reiner on 13 July, 2011

Forked by goatpig in February 2016

Armory is a full-featured Bitcoin client, offering a dozen innovative features not found in any other client software! Manage multiple wallets (deterministic and watching-only), print paper backups that work forever, import or sweep private keys, and keep your savings in a computer that never touches the internet, while still being able to manage incoming payments, and create outgoing payments with the help of a USB key.

Multi-signature transactions are accommodated under-the-hood about 80%, and will be completed and integrated into the UI soon.

Armory has no independent networking components built in. Instead, it relies on on the Satoshi client to securely connect to peers, validate blockchain data, and broadcast transactions for us. Although it was initially planned to cut the umbilical cord to the Satoshi client and implement independent networking, it has turned out to be an inconvenience worth having. Reimplementing all the networking code would be fraught with bugs, security holes, and possible blockchain forking. The reliance on Bitcoin Core right now is actually making Armory more secure!

Development

Current release target is 0.97. Follow development on projects page: https://github.com/users/goatpig/projects/1/views/1

Building Armory From Source

Instructions for Windows

build.bat Debug|Release

Instructions for macOS Instructions for Ubuntu and Arch Linux

mkdir build
cd build
cmake ..
make -j<N>

Dependencies

  • GNU Compiler Collection Linux: Install package g++

  • Crypto++ Linux: Install package libcrypto++-dev Windows: Download

  • SWIG Linux: Install package swig Windows: Download
    MSVS: Copy swigwin-2.x directory next to cryptopp as swigwin

  • Python 2.6/2.7 Linux: Install package python-dev Windows: Download

  • Python Twisted -- asynchronous networking Linux: Install package python-twisted Windows: Download

  • PyQt 4 (for Python 2.X) Linux: Install packages libqtcore4, libqt4-dev, python-qt4, and pyqt4-dev-tools Windows: Download

  • py2exe (OPTIONAL - if you want to make a standalone executable in Windows) Windows: Download

  • LMDB - database engine, modified to suit Armory's use cases LMDB page - No need for external installs by Armory users

  • libwebsockets Linux: Final instructions TBA. Windows: Follow the "Windows binary build" directions here.

  • Google Protocol Buffers (protobuf) Linux: Install the protobuf package. Windows: Follow the "C++ Installation - Windows" directions here, downloading only the protoc binary.

  • macOS Instructions for downloading, verifying, and running Armory on macOS.

Sample Code

Armory contains tens of thousands of lines of code, between the C++ and python libraries. This can be very confusing for someone unfamiliar with the code (you). Below I have attempted to illustrate the CONOPS (concept of operations) that the library was designed for, so you know how to use it in your own development activities. There is a TON of sample code in the following:

License

Distributed partially under the GNU Affero General Public License (AGPL v3)
and the MIT License See LICENSE file

Copyright

Copyright (C) 2011-2015, Armory Technologies, Inc. Copyright (C) 2016-2018, goatpig

bitcoinarmory's People

Contributors

achow101 avatar anaveragehuman avatar andyofiesh avatar ation avatar bendelo avatar clarkmoody avatar dcousens avatar dermoth avatar droark avatar etotheipi avatar fanquake avatar goatpig avatar gwillen avatar hmel avatar jameshilliard avatar jimmysong avatar jisqyv avatar jonathancross avatar noloader avatar pauperis avatar pavel-kokolemin avatar quixotique avatar rudd-o avatar sergey-chernikov avatar sipa avatar smcv avatar strml avatar sunnankar avatar tiernolan avatar tnakagawa 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  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

bitcoinarmory's Issues

Armory crash after scanning block at startup

`$ armory
/usr/lib/armory/armoryengine/Transaction.py:2653: SyntaxWarning: import * only allowed at module level
def PyCreateAndSignTx_old(srcTxOuts, dstAddrsVals):
(WARNING) ArmoryQt.py:2422 - Tried to start bitcoind, but satoshi already running
(WARNING) ArmoryUtils.py:624 - Killing process pid=1166
(ERROR) ArmoryQt.py:1336 - 4 attempts to load blockchain failed. Remove mempool.bin.
(ERROR) ArmoryQt.py:1341 - File mempool.bin does not exist. Nothing deleted.
-INFO - 1466429212: (BlockUtils.cpp:924) blkfile dir: /home/user/.bitcoin/blocks
-INFO - 1466429212: (BlockUtils.cpp:925) lmdb dir: /home/user/.armory/databases
-INFO - 1466429212: (lmdb_wrapper.cpp:387) Opening databases...
-INFO - 1466429213: (BlockUtils.cpp:1105) Executing: doInitialSyncOnLoad
-INFO - 1466429213: (DatabaseBuilder.cpp:162) Reading headers from db
-INFO - 1466429218: (DatabaseBuilder.cpp:195) Found 414338 headers in db
-INFO - 1466429220: (DatabaseBuilder.cpp:43) updating HEADERS db
-DEBUG - 1466429220: (Blockchain.cpp:213) Organizing chain
-INFO - 1466429220: (DatabaseBuilder.cpp:47) updated HEADERS db in 0.025958s
-INFO - 1466429220: (DatabaseBuilder.cpp:98) scanning new blocks from #0 to #414277
--ERROR - ERROR - 14664292211466429221: : ((BlockchainScanner.cppBlockchainScanner.cpp::276276) unknown block deser error during scan at height #) unknown block deser error during scan at height #1

terminate called without an active exception
Abandon (core dumped)`

Consistent transaction history order for sending funds from one wallet to the other

If I send bitcoin from one of my wallets to the other (for example, from an online wallet to an offline wallet) there are two transactions listed (which are actually the same transaction). One line shows the funds coming out of one wallet and the other shows funds going into the other. There does not seem to be any consistent order to these two lines. Sometimes the receiving transaction is listed before the sending one, sometimes the sending transaction is listed before the receiving one.

Intuitively it would make sense for the sending transaction to always be listed before the receiving transaction (even through they are really happening at the exact same time in the same transaction). Is there a way to make some logic to detect two identical transaction listings and prioritize/force their display order this way?

Armory 0.93 to 0.94.1 crashes Loading Database Headers

The last time I was able to check my account balances was using a version prior to Armory 0.93.

Once I upgraded to 0.93, and also when attempted to run 0.94.1, the application crashes after ~45 minutes during the application initialisation.

Due to the crash its hard to see the exact step it gets to, but it says:

Loading Database Headers 2 minutes
Scan Transaction History

Unable to Send Bitcoins 0.94.1

When I attempt to send any amount I get the following error:

There was an error constructing your transaction, due to a quirk in the way Bitcoin transactions work. If you see this error more than once, try sending your BTC in two or more separate transactions.

It doesn't matter what amount is entered.

testing: no such file or directory for database

Hi,

I was just going to test the testing branch, and I'm getting 'no such file or directory' when armory tries to open the database. I'm not sure which database - Armory's or Bitcoin's, and my config is a little bit exotic so I'll explain how I've set it up.

Bitcoin: runs with --datadir=~/.bitcoin/data
Armory: runs with --datadir=~/.armory --satoshi-datadir=~/.bitcoin/data

The error:

ArmoryUtils.py:642 - Executing popen: ['/usr/bin/ArmoryDB', '--db-type="DB_FULL"', '--spawnId="7xxUwTveyby64u98RMbv7UpCATStQ4vQyv6W5pmpaxH4"', '--satoshi-datadir="/home/voidzero/.bitcoin/data/blocks"', '--dbdir="/home/voidzero/.armory/databases"']
2016-09-30 11:55 (ERROR) -- ArmoryQt.py:2211 - Failed to start Armory database: [Errno 2] No such file or directory
Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/armory/ArmoryQt.py", line 2198, in startArmoryDBIfNecessary
    spawnId = TheSDM.spawnDB(TheBDM.armoryDBDir)
  File "/usr/lib64/python2.7/site-packages/armory/SDM.py", line 526, in spawnDB
    launchProcess(pargs, **kargs)
  File "/usr/lib64/python2.7/site-packages/armory/armoryengine/ArmoryUtils.py", line 645, in launchProcess
    return Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, *args, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Various string issues

The following two strings from qtdialogs.py are postfixed with "cid" in Transifex, which may not be what was intended:

if not computedWltID == expectedWltID:
   QMessageBox.critical(parent, tr('Bad Backup!'), tr("""
      If you are sure that you entered the backup information
      correctly, then it is <b>highly recommended you stop using
      this wallet!</b>  If this wallet currently holds any funds,
      you should move the funds to a wallet that <u>does</u>
      have a working backup.
      <br><br>
      Computed wallet ID: %(cid)s <br>
      Expected wallet ID: %(eid)s <br><br>
      Is it possible that you loaded a different backup than the
      one you just made? """ % { 'cid' : computedWltID, 'eid' : expectedWltID }), \
      QMessageBox.Ok)
else:
   MsgBoxCustom(MSGBOX.Good, tr('Backup is Good!'), tr("""
      Your backup works!
      <br><br>
      The wallet ID computed from the data you entered matches
      the expected ID.  This confirms that the backup produces
      the same sequence of private keys as the original wallet!
      <br><br>
      Computed wallet ID: %(cid)s <br>
      Expected wallet ID: %(eid)s <br>
      <br>
      """ % { 'cid' : computedWltID, 'eid' : expectedWltID }))

0.95: Coin Control broken for wallets with higher numbers of inputs and/or addresses

Per-input granularity in 0.95's coin control is welcomed, but broken for wallets with either high (30+) numbers of inputs (paid to a single address) or high (30+) numbers of addresses used. Cannot distinguish which as I only encounter this with wallets that have a mix of both.

Coin Control misbehaves given these conditions (tested other less "populated" wallets alongside and the bug partially persists a few attempts, but then corrects itself). The issue is that the selection is increasing less respectful of the actual user choice the further down the list of inputs that one tries to choose a given input from. At some point down a list of inputs, clicking "Accept" presents the user with Tx compose dialog box with green "All Addreses" text instead of the expected blue " * Coin Control Subset * " text.

Crash after fresh install on Windows 8.1

Install seemed successful. On first run of newly installed program got a crash telling me to look at ArmoryQt.exe.log for details (contents of that file pasted below). If it's relevant, the computer I tried it on has an internet connection and runs Bitcoin Core (probably v0.11.2) with testnet blockchain. (Feel free to ignore this issue if it's not helpful or I've done something stupid, I'm just posting in case it's helpful, I've no intention of using Armory on this machine other than to maybe test a bit.)

(ERROR) ArmoryQt.py:2857 - **WARNING: Wallet could not be loaded: C:\Users\goat\AppData\Roaming\Armory\armory_34N5W7Ts5.WatchOnly.wallet (skipping)
Traceback (most recent call last):
File "ArmoryQt.py", line 2823, in loadWalletsAndSettings
File "armoryengine\Timer.pyc", line 99, in inner
File "armoryengine\PyBtcWallet.pyc", line 2086, in readWalletFile
File "armoryengine\PyBtcWallet.pyc", line 1973, in unpackHeader
File "armoryengine\PyBtcWallet.pyc", line 1905, in unpackWalletFlags
isMSWallet: Cannot Open MS Wallets
(ERROR) ArmoryQt.py:2857 - *_WARNING: Wallet could not be loaded: C:\Users\goat\AppData\Roaming\Armory\armory_FGdyYeKZ.WatchOnly.wallet (skipping)
Traceback (most recent call last):
File "ArmoryQt.py", line 2823, in loadWalletsAndSettings
File "armoryengine\Timer.pyc", line 99, in inner
File "armoryengine\PyBtcWallet.pyc", line 2086, in readWalletFile
File "armoryengine\PyBtcWallet.pyc", line 1973, in unpackHeader
File "armoryengine\PyBtcWallet.pyc", line 1905, in unpackWalletFlags
isMSWallet: Cannot Open MS Wallets
(ERROR) ArmoryQt.py:2857 - *_WARNING: Wallet could not be loaded: C:\Users\goat\AppData\Roaming\Armory\armory_34N5W7Ts5.WatchOnly.wallet (skipping)
Traceback (most recent call last):
File "ArmoryQt.py", line 2823, in loadWalletsAndSettings
File "armoryengine\Timer.pyc", line 99, in inner
File "armoryengine\PyBtcWallet.pyc", line 2086, in readWalletFile
File "armoryengine\PyBtcWallet.pyc", line 1973, in unpackHeader
File "armoryengine\PyBtcWallet.pyc", line 1905, in unpackWalletFlags
isMSWallet: Cannot Open MS Wallets
(ERROR) ArmoryQt.py:2857 - **WARNING: Wallet could not be loaded: C:\Users\goat\AppData\Roaming\Armory\armory_FGdyYeKZ.WatchOnly.wallet (skipping)
Traceback (most recent call last):
File "ArmoryQt.py", line 2823, in loadWalletsAndSettings
File "armoryengine\Timer.pyc", line 99, in inner
File "armoryengine\PyBtcWallet.pyc", line 2086, in readWalletFile
File "armoryengine\PyBtcWallet.pyc", line 1973, in unpackHeader
File "armoryengine\PyBtcWallet.pyc", line 1905, in unpackWalletFlags
isMSWallet: Cannot Open MS Wallets
(ERROR) Traceback (most recent call last):
File "ArmoryQt.py", line 7135, in
File "ArmoryQt.py", line 258, in init
File "ArmoryQt.py", line 2475, in startBitcoindIfNecessary
File "ArmoryQt.py", line 2428, in findTorrentFileForSDM
AttributeError: 'ArmoryMainWindow' object has no attribute 'announceFetcher'

Traceback (most recent call last):
File "ArmoryQt.py", line 7135, in
File "ArmoryQt.py", line 258, in init
File "ArmoryQt.py", line 2475, in startBitcoindIfNecessary
File "ArmoryQt.py", line 2428, in findTorrentFileForSDM
AttributeError: 'ArmoryMainWindow' object has no attribute 'announceFetcher'

Plural strings

I'm not entirely sure what's going on in the following code from qtdialogs.py, but I think plural strings are not handled correctly in this case.

if nError > 0:
   pluralStr = 'error' if nError == 1 else 'errors'

   msg = tr("""
      Detected %(error)d error in the data you entered.
      Armory attempted to fix the errors but it is not
      always right.  Be sure to verify the "Wallet Unique ID"
      closely on the next window.""","""
      Detected %(error)d errors in the data you entered.
      Armory attempted to fix the errors but it is not
      always right.  Be sure to verify the "Wallet Unique ID"
      closely on the next window.""") % { 'error' : nError }

   QMessageBox.question(self, tr('Errors Corrected'), msg, \
      QMessageBox.Ok)

I'm a bit worried by the first line, which seems to use "error" if number of errors is 1, and "errors" otherwise. This won't work in a lot of languages besides English, of course.

But then again, the pluralStr variable doesn't seem to be used later on, so it might be leftovers from before?

Anyway, the code also seems to send two strings for translation (a singular and a plural version). However, Transifex doesn't seem to recognize this, and it shows only the singular version. Normally, in Transifex, when you translate a proper plural string, you are presented with tab-like options, one per plural form that your languages has (English has two, sing and plur, some have more, some have less). The plural string also doesn't appear as its own string.

Example of plural string in Transifex:
Example of plural string in Transifex

How this string looks for me:
How this string looks for me

rework the receive bitcoins windows

There are a number of improvements that could be made to the receive bitcoins process.

After clicking receive bitcoins and then selecting a wallet, you are jumped to a window with the address, a QR code, and a box to input a label into. There is an option to copy the address to the clipboard or create a click able link. I think that this window and the one that comes up after you press "create clickable link" should be merged into one window. In fact, after initially generating the address, if you later go to wallet properties, and right click on an address and then click "request payment to this address" it skips the first window and automatically goes to the one for creating a clickable link.

In the "clickable link" window, there is a problem with the label field. The label that goes into the clickable link should be for the sender's wallet, but it is actually also used for the receiving wallet. The current text box should be changed to "recommended label for the sender", and a second text box should be added for the local, receiving wallet. For example, if I request payment from someone, they are going to want to put my name in their transaction history. I don't want to put my own name, but rather, I want to put their name in my transaction history. It would also be nice for new users to include in the tooltip for these boxes that the text is not stored in the public blockchain, but rather, in the users' local wallet.

It would be nice to also allow to save the QR codes to a PNG file.

On the "clickable link" window, there is a button, "other options > > >". This is pointless, just make the other options always available.

Currently, once someone clicks the "other options > > >" button, there are three buttons.

  • The first one is "copy to clipboard". This option should be renamed to "copy formatted text".
  • The "copy raw HTML" button only copies the raw html for the link, it does not include the additional lines of text below it. If this is what you want it to do, you may want to rename the button to say "copy link raw HTML" instead of "copy raw HTML".
  • The "copy raw url" button seems to work as one may expect.
  • If the windows are combined as suggested above, there should also be a fourth button for just copying the payment address only.

It would be nice to also allow to save a protocol buffer file for the payment request as defined in BIP70. This could be useful for attaching to an e-mail.

Clicking a bitcoin: link causes armory to un-maximize its window

I'm using armory 0.95.1 and xubuntu 14.04.

When I click a bitcoin: link from an external application, while armory is open, focus is changed to the armory window, the armory window un-maximizes and then opens up the send bitcoin window. Armory should remain maximized if a bitcoin: link is clicked and the window was maximized.

If I click a bitcoin: link while armory is already un-maximuzed then armory stays un-maximized.

sending bitcoins causes tx broadcast timed out

upgraded from 0.93.3 to 0.95.1 and cannot send coins, tried it with increased transaction fees. even clean installed it and restored from paper backup. still cannot send. log only show that the transaction was not accepted by the satoshi client. I am using bitcoin core 0.13.1

updates to this wallet?

Will you guys update the wallet to work with Segwit?(NOTE: check the GPG keys so that you don't get hacked see: bitcoin.org)

PS: why don't you guys update the website & have a twitter page so that people can give feedback to you guys?

Please sign git tags

Please sign the git tags with a PGP key. Alan did so for the older tags, but I noticed when checking v0.94.1 that it doesn't appear to be signed. This is helpful for downstream packagers, like Linux distros and in general for anyone downloading the source code instead of binaries. Without signing, GitHub must be trusted.

Due to the nature of this software, I think it is risky for Linux distros to package Armory without signed tags. I'm going to hold off on packaging newer versions of Armory in Debian until tags are signed.

Thanks!

Armory crashes after resuming from standby mode

I am running ubuntu 14.04 and armory 0.95.1 .

Upon resuming from standby mode, ArmoryQt.py crashes immediately. A few minutes after resuming from standby, ArmoryDB also crashes.

I have this same problem on two different computers.

"use another dbdir" even with no dbdir! What the hell?

Latest tag v0.95.1 dies with this:

   {
      //sanity check: try to open older SDBI version
      LMDBEnv::Transaction tx(dbEnv_[HEADERS].get(), LMDB::ReadOnly);
      BinaryData key;
      key.append(DB_PREFIX_DBINFO);
      auto valueRef = getValueNoCopy(HEADERS, key.getRef());

      if (valueRef.getSize() != 0)
      {
       	 //old style db, fail
         LOGERR << "DB version mismatch. Use another dbdir!";
         throw DbErrorMsg("DB version mismatch. Use another dbdir!");
      }
   }

   dbIsOpen_ = true;
}

I gotta ask: how can you ship broken software like that? Broken software that handles millions of dollars for quite a few folks!

Armory doesn't support compressed addresses?

So I am experimenting with Armory testnet, and when it is finished loading I find that it doesn't load my bitcoin core testnet wallet. I open bitcoin core and copy the private key, then I paste it into Armory, but it is invalid! Why? Because Armory doesn't support privkeys from anything later than bitcoin core 0.6.0

gpg: not a detached signature ??

i downloaded sha256sum.asc file from https://www.bitcoinarmory.com/download/
After importing your key, i then tried verifying the .deb file with:
gpg --verify sha256sum.asc
Which shows your key and good signature but still doesnt validate the actual deb file.

then i did:
gpg --verify sha256sum.asc armory_0.95.1_amd64.deb

and it says: gpg: not a detached signature

Can you tell me if im doing something wrong ? or if maybe this file sha256sum.asc shouldnt include the hashes and have a separate .sig file to be able to use for verifying and separate .txt file with hashes ?

Paper backups with random words instead of random characters

It would be nice to have an option to also print a paper backup format that used words instead of characters to encode the private wallet seed information. I'm aware that words would require more total characters to be used, but it's possible one could memorize the random words easier than they could memorize the random characters.

dev build won't compile

Hello. I'm running into an issue with the dev build.

g++  -Icryptopp -Imdb -DUSE_CRYPTOPP -D__STDC_LIMIT_MACROS -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -std=c++11 -O2 -pipe -fPIC -c BDM_mainthread.cpp
In file included from BDM_mainthread.h:23:0,
                 from BDM_mainthread.cpp:14:
BDM_Server.h:18:29: fatal error: include\fcgiapp.h: No such file or directory
compilation terminated.
Makefile:97: recipe for target 'BDM_mainthread.o' failed
make[1]: *** [BDM_mainthread.o] Error 1

If I remove the bad #include, I get the following errors.

g++  -Icryptopp -Imdb -DUSE_CRYPTOPP -D__STDC_LIMIT_MACROS -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -std=c++11 -O2 -pipe -fPIC -c BDM_mainthread.cpp
In file included from cryptopp/eccrypto.h:7:0,
                 from EncryptionUtils.h:67,
                 from BDM_Server.h:20,
                 from BDM_mainthread.h:23,
                 from BDM_mainthread.cpp:14:
cryptopp/pubkey.h: In member function โ€˜CryptoPP::PK_MessageAccumulator* CryptoPP::DL_SignerImpl<SCHEME_OPTIONS>::NewSignatureAccumulator(CryptoPP::RandomNumberGenerator&) constโ€™:
cryptopp/pubkey.h:1344:8: warning: โ€˜template<class> class std::auto_ptrโ€™ is deprecated [-Wdeprecated-declarations]
   std::auto_ptr<PK_MessageAccumulatorBase> p(new PK_MessageAccumulatorImpl<CPP_
        ^
In file included from /usr/include/c++/5/bits/locale_conv.h:41:0,
                 from /usr/include/c++/5/locale:43,
                 from /usr/include/c++/5/iomanip:43,
                 from UniversalTimer.h:28,
                 from BDM_mainthread.h:20,
                 from BDM_mainthread.cpp:14:
/usr/include/c++/5/bits/unique_ptr.h:49:28: note: declared here
   template<typename> class auto_ptr;
                            ^
In file included from BDM_mainthread.h:23:0,
                 from BDM_mainthread.cpp:14:
BDM_Server.h: At global scope:
BDM_Server.h:50:4: error: extra qualification โ€˜SocketCallback::โ€™ on member โ€˜SocketCallbackโ€™ [-fpermissive]
    SocketCallback::SocketCallback(void) : Callback()
    ^
BDM_Server.h:204:24: error: โ€˜FCGX_Requestโ€™ has not been declared
    void processRequest(FCGX_Request* req);
                        ^
Makefile:97: recipe for target 'BDM_mainthread.o' failed
make[1]: *** [BDM_mainthread.o] Error 1

Errors when compiling on Linux

Compiling dev branch at commit 660ff73 with GCC 6.2.1 (20160830) on Arch Linux 4.8.13 fails when compiling CppBlockUtils_wrap.cxx with the following errors:

In file included from WalletManager.h:21:0,
                 from CppBlockUtils_wrap.cxx:3656:
Wallets.h: In constructor โ€˜AssetWallet::LockStruct::LockStruct(const AssetWallet*)โ€™:
Wallets.h:722:57: error: โ€˜class std::thread::idโ€™ has no member named โ€˜hashโ€™
          if (wltPtr->mutexTID_ != this_thread::get_id().hash())
                                                         ^~~~
Wallets.h:725:55: error: โ€˜class std::thread::idโ€™ has no member named โ€˜hashโ€™
             wltPtr->mutexTID_ = this_thread::get_id().hash();
                                                       ^~~~
In file included from CppBlockUtils_wrap.cxx:3656:0:
WalletManager.h: At global scope:
WalletManager.h:139:15: error: โ€˜ResolvedFeed_PythonWalletSingleโ€™ was not declared in this scope
    shared_ptr<ResolvedFeed_PythonWalletSingle> feedPtr_;
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WalletManager.h:139:46: error: template argument 1 is invalid
    shared_ptr<ResolvedFeed_PythonWalletSingle> feedPtr_;
                                              ^
WalletManager.h: In constructor โ€˜PythonSigner::PythonSigner(WalletContainer&)โ€™:
WalletManager.h:153:30: error: โ€˜ResolvedFeed_PythonWalletSingleโ€™ was not declared in this scope
       feedPtr_ = make_shared<ResolvedFeed_PythonWalletSingle>(
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WalletManager.h:154:28: error: no matching function for call to โ€˜make_shared(std::shared_ptr<AssetWallet_Single>&, PythonSigner*)โ€™
          walletSingle, this);
                            ^
In file included from /usr/include/c++/6.2.1/memory:82:0,
                 from /usr/include/c++/6.2.1/thread:40,
                 from log.h:64,
                 from BinaryData.h:51,
                 from BtcUtils.h:31,
                 from CppBlockUtils_wrap.cxx:3650:
/usr/include/c++/6.2.1/bits/shared_ptr.h:632:5: note: candidate: template<class _Tp, class ... _Args> std::shared_ptr<_Tp1> std::make_shared(_Args&& ...)
     make_shared(_Args&&... __args)
     ^~~~~~~~~~~
/usr/include/c++/6.2.1/bits/shared_ptr.h:632:5: note:   template argument deduction/substitution failed:
In file included from CppBlockUtils_wrap.cxx:3656:0:
WalletManager.h:154:28: error: template argument 1 is invalid
          walletSingle, this);
In file included from /usr/include/c++/6.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6.2.1/bits/allocator.h:46,
                 from /usr/include/c++/6.2.1/string:41,
                 from CppBlockUtils_wrap.cxx:3034:
/usr/include/c++/6.2.1/ext/new_allocator.h: In instantiation of โ€˜void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = ScriptSpender; _Args = {UTXO&, int&}; _Tp = ScriptSpender]โ€™:
/usr/include/c++/6.2.1/bits/alloc_traits.h:455:4:   required from โ€˜static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = ScriptSpender; _Args = {UTXO&, int&}; _Tp = ScriptSpender; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<ScriptSpender>]โ€™
/usr/include/c++/6.2.1/bits/shared_ptr_base.h:520:39:   required from โ€˜std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_Sp_counted_ptr_inplace(_Alloc, _Args&& ...) [with _Args = {UTXO&, int&}; _Tp = ScriptSpender; _Alloc = std::allocator<ScriptSpender>; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]โ€™
/usr/include/c++/6.2.1/bits/shared_ptr_base.h:615:4:   required from โ€˜std::__shared_count<_Lp>::__shared_count(std::_Sp_make_shared_tag, _Tp*, const _Alloc&, _Args&& ...) [with _Tp = ScriptSpender; _Alloc = std::allocator<ScriptSpender>; _Args = {UTXO&, int&}; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]โ€™
/usr/include/c++/6.2.1/bits/shared_ptr_base.h:1100:35:   required from โ€˜std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_make_shared_tag, const _Alloc&, _Args&& ...) [with _Alloc = std::allocator<ScriptSpender>; _Args = {UTXO&, int&}; _Tp = ScriptSpender; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]โ€™
/usr/include/c++/6.2.1/bits/shared_ptr.h:319:64:   required from โ€˜std::shared_ptr<_Tp>::shared_ptr(std::_Sp_make_shared_tag, const _Alloc&, _Args&& ...) [with _Alloc = std::allocator<ScriptSpender>; _Args = {UTXO&, int&}; _Tp = ScriptSpender]โ€™
/usr/include/c++/6.2.1/bits/shared_ptr.h:619:14:   required from โ€˜std::shared_ptr<_Tp1> std::allocate_shared(const _Alloc&, _Args&& ...) [with _Tp = ScriptSpender; _Alloc = std::allocator<ScriptSpender>; _Args = {UTXO&, int&}]โ€™
/usr/include/c++/6.2.1/bits/shared_ptr.h:635:39:   required from โ€˜std::shared_ptr<_Tp1> std::make_shared(_Args&& ...) [with _Tp = ScriptSpender; _Args = {UTXO&, int&}]โ€™
WalletManager.h:166:68:   required from here
/usr/include/c++/6.2.1/ext/new_allocator.h:120:4: error: no matching function for call to โ€˜ScriptSpender::ScriptSpender(UTXO&, int&)โ€™
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from Wallets.h:23:0,
                 from WalletManager.h:21,
                 from CppBlockUtils_wrap.cxx:3656:
Signer.h:72:4: note: candidate: ScriptSpender::ScriptSpender(const UTXO&, std::shared_ptr<ResolverFeed>)
    ScriptSpender(const UTXO& utxo, shared_ptr<ResolverFeed> feed) :
    ^~~~~~~~~~~~~
Signer.h:72:4: note:   no known conversion for argument 2 from โ€˜intโ€™ to โ€˜std::shared_ptr<ResolverFeed>โ€™
Signer.h:41:7: note: candidate: ScriptSpender::ScriptSpender(const ScriptSpender&)
 class ScriptSpender
       ^~~~~~~~~~~~~
Signer.h:41:7: note:   candidate expects 1 argument, 2 provided
Signer.h:41:7: note: candidate: ScriptSpender::ScriptSpender(ScriptSpender&&)
Signer.h:41:7: note:   candidate expects 1 argument, 2 provided

and hundreds of warnings triggered by -Wshadow.

The command being run by the Makefile is g++ -O2 -pipe -fPIC -Wshadow -Icryptopp -Imdb -IBlockDataManager/fcgi -DUSE_CRYPTOPP -D__STDC_LIMIT_MACROS -I/usr/include/python2.7 -I/usr/include/python2.7 -std=c++11 -c CppBlockUtils_wrap.cxx

I can't tell if this is an issue with my setup or an issue with Armory

Can't Sort Columns of "Available Wallets" Pane

I'm using Armory version 0.95.1 . In this version and all previous versions that I've used, you can't sort columns of the "available wallets" pane. The current sort order is not even alphabetical. It appears to have a totally random sort order.

It would be very useful to give an option to sort by columns and also have a secondary sort for the "security" column because there are many wallets that will share the same security level (you may want the secondary sort order to be by the amount in cold storage or by the wallet name).

Can't install dependency dpkg-dev in Ubuntu 14.04

Hi,

build-essential : Depende: dpkg-dev (>= 1.13.5) pero no va a instalarse
E: No se pudieron corregir los problemas, usted ha retenido paquetes rotos.

The message is the 'broken package' message when installing packages.

Is there any workaround for this as to install the most recent version of armory?

Thanks.

root@matrix:~/BitcoinArmory# cat /etc/issue
Ubuntu 14.04.1 LTS \n \l

root@matrix:~/BitcoinArmory# uname -ar
Linux matrix 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
root@matrix:~/BitcoinArmory# make
make -C cppForSwig
make[1]: python-config: Command not found

ArmoryDB crashing after loading blocks

Version 0.95.1

The last two lines in the dbLog.txt file were:

-ERROR - 1481489655: (..\SocketObject.cpp:285) POLLERR error in readFromSocketThread -ERROR - 1481489655: (..\SocketObject.cpp:133) POLLERR in writeToSocket

I managed to work around it by running ArmoryDB manually and using the --ram-usage=1 command line parameter (https://bitcointalk.org/index.php?topic=1686522.0) but for a lot of people they would be unable to continue

Examining Coinbase transactions fails

It is not possible to view the details of a coinbase transaction. This is the error:

Traceback (most recent call last):
  File "/home/andy/bitcoin/armory/BitcoinArmory/ArmoryQt.py", line 3940, in dblClickLedger
    self.showLedgerTx()
  File "/home/andy/bitcoin/armory/BitcoinArmory/ArmoryQt.py", line 3962, in showLedgerTx
    DlgDispTxInfo( pytx, self.walletMap[wltID], self, self, txtime=txtime).exec_()
  File "/home/andy/bitcoin/armory/BitcoinArmory/qtdialogs.py", line 5667, in __init__
    self.data = extractTxInfo(pytx, txtime)
  File "/home/andy/bitcoin/armory/BitcoinArmory/qtdialogs.py", line 5614, in extractTxInfo
    scraddr = addrStr_to_scrAddr(TxInExtractAddrStrIfAvail(txin))
  File "/home/andy/bitcoin/armory/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1622, in addrStr_to_scrAddr
    atype, a160 = addrStr_to_hash160(addrStr)
  File "/home/andy/bitcoin/armory/BitcoinArmory/armoryengine/ArmoryUtils.py", line 2167, in addrStr_to_hash160
    raise BadAddressError('Address string is %d bytes' % len(binStr))
armoryengine.ArmoryUtils.BadAddressError: Address string is 0 bytes

This is most obviously seen when using the regtest mode created in #22

Armory locks up my computer

On the second stage of loading: loading databases or something, right before scanning transactions, it locks my computer up for almost an hour, or hours if I have firefox or vlc open. What's going on??

Revamp transaction fee options

Armory 0.95.1 currently allows setting transaction fees in BTC and satoshi/byte. It would be nice to have a more advanced interface similar to bitcoin core qt. In that interface there is a slider with a prediction for the number of blocks until there is a confirmation.

Also, the armory tooltip for transaction fees says "Most transactions do not require a fee". I think this phrase should be removed because it is no longer relevant.

After "no spend" problem, rebuild & rescan has apparently damaged a wallet

I left this post on Armory's Bitcointalk.org forum yesterday, 6-15-16 as user fumblefingers:

Re: Armory 94.1 -- Can't send any transactions
June 15, 2016, 10:00:45 PM

Reply with quote Edit message Delete message #6
I'm having the same problem, sorta. 0.94.1 has been working well past two days. Tonight I get the error:

Quote
There was an error constructing your transaction, due to a quirk in the way Bitcoin transactions work. If you see this error more than once, try sending your BTC in two or more separate transactions

Smaller amounts still would not send, and, as I have been doing, I have my fee set to 0.0015

Win7

EDIT: Rescanning made no difference. Rebuild? Rebuild what, the blockchain download? I sure hope that's not what you mean. It took me a WEEK to get the whole thing.

Although it may be important that I have the blockchain downloaded into Bitcoin Core, as when I installed Armory again, (after not having it for a couple years,) it seemed to just be "offline" and doing nothing for days. The only way I could get Armory to work, after trying all the methods described here, was to start Bitcoin Core first, then start armory with the setting for "Allow Armory to manage bitcoinqt" unchecked. Worked beautifully for a few days.(END OF MY POST)

So I rescanned and it made no difference. Then I rebuilt and rescanned, and the wallet that would not send was rebuilt with the 5 coins I had spent one and two days prior added back. (Started with 18 coins when I reinstalled Armory and restored the wallet from a paper backup, spent it down to 13 coins, but now it is showing 18 again. I cannot send from that wallet.

I was however able to, this morning, send a transaction from a different wallet successfully. But how do I now retrieve and use the 13 coins left in the first wallet?

Below is my log file:
armorylog_20160616_1205.txt

The "rebuild and rescan" operation also returned coins to two restored wallets from a cold storage wallet that I had not yet restored to the client. These two wallets correctly displayed 0 coins until the rebuild. It was from one of these wallets that I was able to spend this morning. The original wallet that worked earlier in the week, but malfunctioned yesterday still will not allow me to spend. So I have 13 some coins in limbo with this first wallet.

Weird problems with viewing transactions

I was moving some bitcoin wallets to another computer with a bigger disk. I installed Armory 0.94.1 on the destination computer. I figured I'd take this opportunity to try restoring from a paper backup, just to see it work, so I transferred one wallet by generating a single-sheet backup on the origin computer and typing it into the destination computer. There was also one watching-only wallet, which I transferred by copying the wallet file. After the destination Armory had synced with the blockchain I entered some comments on the restored wallet and the transactions.

The first sign of trouble came when I clicked "View Details" and got the message "The transaction you requested be displayed does not exist in Armory's database. This is unusual...". There was also one case of two different transactions that seemed to be linked such that any comment I wrote on one was displayed identically on both of them.

After I restarted Armory only the watching-only wallet was displayed. There was no trace of the restored wallet or its transactions in the GUI. I thought the restoration from the paper backup had gone wrong. I found the Wallet Recovery Tool, pointed it at the wallet file of the restored wallet, and chose "Full Recovery". The recovery log is attached.

After another restart both wallets were displayed again, but the recovered one seemed to still be corrupted. Some of the comments I had entered were gone, some transactions weren't found in Armory's database and some had "Unknown Input" instead of a sending address.

I thought Armory might still be reading the original restored wallet, so I tried moving that file and its backup.wallet aside, and renaming the recovered one and its backup.wallet to the original filenames. It didn't help.

Then I moved all versions of the restored wallet aside and copied the original wallet file from the origin computer. Even that one had the same problem: Some transactions weren't found in Armory's database and some had "Unknown Input" instead of a sending address.

So maybe this isn't a problem with restoring from paper backups after all, but rather a problem with displaying a wallet in Armory 0.94.1.

I downgraded to Armory 0.93.1, the version I had on the origin computer. Now comments are displayed correctly, and I can view details of all transactions, but for many received transactions the sending address is displayed as "Non-Standard:" followed by an address that begins with a 3. Those occur in both wallets, and they're all the same non-standard address. They should be different normal Bitcoin addresses beginning with a 1.

I never noticed this "non-standard" thing in Armory 0.93.1 before, but I may not have looked so closely at the sending addresses.

armory_NG47Z975_RECOVERED.wallet.log.txt

Selected wallet becomes unselected after a while

Under "available wallets", if one selects a wallet and waits for a while with armory running, after a while no wallets will be selected any more. The selected wallet should remain selected until armory is closed and reopened.

SDM JSON object error

On startup it says 'Please close Bitcoin-Core'.

After doing so the screen looks like:
armory

With this being printed out in the terminal repeatedly:

(ERROR) SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/usr/lib/armory/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/usr/lib/armory/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Difference between Address and Transaction Labels is confusing

As a user, it's hard to tell what the difference is between labels for transactions and addresses is in the GUI. It seems like when initially receiving bitcoins, the label used will be added to the address, and then transactions to that address will use that label, but the transaction label can be overridden. Often times one will likely want to change the transaction and address labels simultaneously since they use only one receiving transaction per address. It's not always clear if changing the address label will then change the transaction label for any future transactions after the address label was changed.

Any ideas on how to make the distinction between these two types of labels more clear?

dev: errors right after starting up the client

Hope it's ok for me to file issues against the dev tree. If not then of course feel free to let me know.

The following occurs right after starting Armory:

BDM is ready!
(ERROR) Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/armory/ArmoryQt.py", line 5837, in handleCppNotification
    self.updateWalletData()
  File "/usr/lib64/python2.7/site-packages/armory/ArmoryQt.py", line 5824, in updateWalletData
    self.walletMap[wltid].getAddrDataFromDB()
  File "/usr/lib64/python2.7/site-packages/armory/armoryengine/PyBtcWallet.py", line 52, in inner
    return func(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/armory/armoryengine/PyBtcWallet.py", line 3119, in getAddrDataFromDB
    countList = self.cppWallet.getAddrTxnCountsFromDB()
  File "/usr/lib64/python2.7/site-packages/armory/CppBlockUtils.py", line 1375, in getAddrTxnCountsFromDB
    def getAddrTxnCountsFromDB(self): return _CppBlockUtils.BtcWallet_getAddrTxnCountsFromDB(self)
RuntimeError: ser/deser type error: 
expected type id: 4
got type id: 2 instead


Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/armory/ArmoryQt.py", line 5837, in handleCppNotification
    self.updateWalletData()
  File "/usr/lib64/python2.7/site-packages/armory/ArmoryQt.py", line 5824, in updateWalletData
    self.walletMap[wltid].getAddrDataFromDB()
  File "/usr/lib64/python2.7/site-packages/armory/armoryengine/PyBtcWallet.py", line 52, in inner
    return func(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/armory/armoryengine/PyBtcWallet.py", line 3119, in getAddrDataFromDB
    countList = self.cppWallet.getAddrTxnCountsFromDB()
  File "/usr/lib64/python2.7/site-packages/armory/CppBlockUtils.py", line 1375, in getAddrTxnCountsFromDB
    def getAddrTxnCountsFromDB(self): return _CppBlockUtils.BtcWallet_getAddrTxnCountsFromDB(self)
RuntimeError: ser/deser type error: 
expected type id: 4
got type id: 2 instead

Segmentation fault (Armory v0.94.0, Core v0.12.0, Debian Jessie)

I am getting a "Segmentation Fault" when I run Armory (terminal output pasted at bottom of this post). Things get started just fine (Blockchain loaded, wallets synced!) but Armory crashes after a few minutes or so (it happens every time a new block is received, but I think I caught it crash once at another time). My OS is Debian Jessie, and my setup process was as follows:

  • first installed Bitcoin Core v0.12.0 using the method that extracts the tar.gz and installing the binaries there into /usr/local/bin (as described here: https://bitcoin.org/en/full-node#other-linux-distributions)
  • never ran bitcoind (so bitcoin.conf would not have been set up prior to Armory invoking it)
  • I did run /usr/local/bin/bitcoin-qt a bunch of times until the blockchain was downloaded, before getting Armory; user that ran bitcoin-qt is the same user that built and runs Armory
  • downloaded BitcoinArmory v0.94.0 from the tar.gz and successfully built from source
  • I run Armory by doing python ArmoryQt.py in a terminal (did not install)

I wonder if setting things up again (it would be no prob to reinstall Debian etc), and just letting Armory invoke bitcoind and downloading the blockchain that way would work -- I'm happy to try that if it's got a chance of fixing the crash for me.

Terminal output from one of the crashes is below (they were all like this). Thank you!

flynn@debian:~/Downloads/BitcoinArmory-0.94.0$ python ArmoryQt.py
Gtk-Message: Failed to load module "canberra-gtk-module"


Loading Armory Engine:
Armory Version: 0.94
Armory Build: None
PyBtcWallet Version: 1.35
Detected Operating system: Linux
OS Variant : ('debian', '8.3', '')
User home-directory : /home/flynn
Satoshi BTC directory : /home/flynn/.bitcoin/
Armory home dir : /home/flynn/.armory/
ArmoryDB directory : /home/flynn/.armory/databases
Armory settings file : /home/flynn/.armory/ArmorySettings.txt
Armory log file : /home/flynn/.armory/armorylog.txt
Do wallet checking : True
-INFO - 1459127214: (BlockUtils.cpp:924) blkfile dir: /home/flynn/.bitcoin/blocks
-INFO - 1459127214: (BlockUtils.cpp:925) lmdb dir: /home/flynn/.armory/databases
-INFO - 1459127214: (lmdb_wrapper.cpp:387) Opening databases...
-INFO - 1459127214: (BlockUtils.cpp:1110) Executing: doInitialSyncOnLoad
-INFO - 1459127214: (DatabaseBuilder.cpp:162) Reading headers from db
-INFO - 1459127216: (DatabaseBuilder.cpp:195) Found 404592 headers in db
-INFO - 1459127217: (DatabaseBuilder.cpp:43) updating HEADERS db
-INFO - 1459127217: (DatabaseBuilder.cpp:378) Found next block after skipping 424402bytes
-INFO - 1459127218: (DatabaseBuilder.cpp:223) parsed block file #477
-DEBUG - 1459127218: (Blockchain.cpp:213) Organizing chain
-INFO - 1459127218: (DatabaseBuilder.cpp:47) updated HEADERS db in 0.524316s
-INFO - 1459127218: (BlockDataViewer.cpp:155) Enabling zero-conf tracking
Segmentation fault

Very hard to follow transaction history at an address level

When going to wallet properties, there is a list of addresses and their current balance and how many transactions there were to that address. There is no way to know what the actual transactions were to/from that address. It would be nice to show the transactions to/from each address with a new pop up window when right clicking on each of those addresses and choosing "show transactions".

It would also be nice to show the receiving/sending address of the local wallet in a tooltip when hovering the mouse over a transaction in the main transaction history. It would also be nice to show the address label when clicking on "view details" for a transaction in the main transaction window.

Lockbox doesnt display list

I do not know why, but in 0.95[.1] that newly created multisig wallets/lockboxes arent displaying anything. Its there if you select it in the list but wont show the information regarding it.

Build with clang broken on Linux

I get the following error when trying to build Armory from source on Linux using clang.

make -C cppForSwig
make[1]: Entering directory '/home/joseph/bitcoinarmory/BitcoinArmory/cppForSwig'
clang++ -Icryptopp -Imdb -IBlockDataManager/fcgi -DUSE_CRYPTOPP -D__STDC_LIMIT_MACROS -I/usr/include/python2.7 -I/usr/include/python2.7 -std=c++11 -O2 -pipe -fPIC -c BDM_mainthread.cpp
In file included from BDM_mainthread.cpp:14:
In file included from ./BDM_mainthread.h:23:
In file included from ./BDM_Server.h:23:
./DataObject.h:150:4: error: constructor cannot be redeclared
   IntType(size_t val) : val_(val)
   ^
./DataObject.h:132:4: note: previous declaration is here
   IntType(uint64_t val) : val_(val)
   ^
1 error generated.
make[1]: *** [Makefile:116: BDM_mainthread.o] Error 1
make[1]: Leaving directory '/home/joseph/bitcoinarmory/BitcoinArmory/cppForSwig'
make: *** [Makefile:9: all] Error 2

I guess the second declaration is necessary for OS X builds and that is why it is there?

close/minimize to the system/notification tray icon

I am using armory 0.95.1 on xubuntu 14.04. Armory has an option to minimize to the system tray on close. This is great, however, the behaviour of the system tray icon does not match that of other applications. In order to restore from the system tray in armory, one has to double click the system tray icon rather than single click it. Also, (single and double) clicking the system tray icon when the armory window is open does nothing. Other applications minimize back to the system tray when the system tray icon is clicked once.

Also, if I have the armory window un-maximized, maximize it, close/minimize to the system tray, double click the system tray icon to restore, and then un-maximize, then the un-maximized size of the armory window does not return to that of what it was before close/minimize to the system tray. I would think the un-maximized size should be remembered.

Transaction info window is not resizable

When in the main transaction history window and right clicking on the transaction and going to "view details", a "transaction info" window comes up. This window is a little too small by default, and is stuck at a fixed size so that one cannot make it large enough to be easy to look over the transaction details.

Wallet Filters Don't Work

I'm using armory 0.95.1 . The wallet filter drop down does not work in the lower left of the screen any more.

When you get this fixed, it would also be useful to add an option for "online" wallets too. Offline wallets require a lot more effort to access and it would be useful to quickly evaluate the amount of funds that are available for quick access and simultaneously assess how much risk you have by not having funds in cold storage.

No communication wit bitcoind

Hi,

armory can't communicate with bitcoind:

 (WARNING) SDM.py:679 - Overriding not-available state. This should happen 0-5 times
(ERROR) SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
(ERROR) SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
[...]

Bitcoin debug log shows:

2016-11-29 07:58:36 ThreadRPCServer incorrect password attempt from 127.0.0.1:51306
2016-11-29 07:58:37 ThreadRPCServer incorrect password attempt from 127.0.0.1:51312
2016-11-29 07:58:38 ThreadRPCServer incorrect password attempt from 127.0.0.1:51318
2016-11-29 07:58:39 ThreadRPCServer incorrect password attempt from 127.0.0.1:51324
2016-11-29 07:58:40 ThreadRPCServer incorrect password attempt from 127.0.0.1:51332
2016-11-29 07:58:41 ThreadRPCServer incorrect password attempt from 127.0.0.1:51340
2016-11-29 07:58:42 ThreadRPCServer incorrect password attempt from 127.0.0.1:51346
2016-11-29 07:58:43 ThreadRPCServer incorrect password attempt from 127.0.0.1:51352

boitcoin-cli is working fine:
bitcoin-cli -conf=~/.bitcoin/bitcoin.conf -datadir=/data/btc getinfo
Output:

{
  "version": 130100,
  "protocolversion": 70014,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 441086,
  "timeoffset": 0,
  "connections": 3,
  "proxy": "",
  "difficulty": 281800917193.1958,
  "testnet": false,
  "keypoololdest": 1480353848,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}

Armory Logfile:

2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1137 - C++ block utilities loaded successfully
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:651 - Executing popen: free -m
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:651 - Executing popen: ['cat', '/proc/cpuinfo']
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1247 - 
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1248 - 
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1249 - 
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1250 - ************************************************************
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1251 - Invoked: /opt/armory-git/ArmoryQt.py
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1252 - ************************************************************
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1253 - Loading Armory Engine:
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1254 -    Armory Version        : 0.95.1
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1255 -    Armory Build:         : None
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1256 -    PyBtcWallet  Version  : 1.35
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1257 - Detected Operating system: Linux
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1258 -    OS Variant            : --
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1259 -    User home-directory   : /root
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1260 -    Satoshi BTC directory : /home/user/.bitcoin/
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1261 -    Armory home dir       : /home/user/.armory/
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1262 - Detected System Specs    : 
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1263 -    Total Available RAM   : 11.73 GB
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1264 -    CPU ID string         : Intel(R) Core(TM) i7 CPU         975  @ 3.33GHz
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1265 -    Number of CPU cores   : 8 cores
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1266 -    System is 64-bit      : True
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1267 -    Preferred Encoding    : UTF-8
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1268 -    Machine Arch          : x86_64
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1269 -    Available HDD (ARM)   : 1252 GB
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1270 -    Available HDD (BTC)   : 1252 GB
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1271 - 
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1272 - Network Name: Main Network
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1273 - Satoshi Port: 8333
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1274 - Do wlt check: True
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1275 - Named options/arguments to armoryengine.py:
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     thread_count    : -1
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     rescan          : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     ignoreAllZC     : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     rescanBalance   : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     disableModules  : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     port            : None
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     interport       : 8223
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     skipStatsReport : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     forceWalletCheck: False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     regtest         : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     rebuild         : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     nettimeout      : 2
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     datadir         : DEFAULT
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     clearMempool    : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     offline         : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     coverageOutputDir: None
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     armoryDBDir     : DEFAULT
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     armorydb_port   : 9001
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     satoshiPort     : DEFAULT
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     useTorSettings  : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     netlog          : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     keypool         : 100
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     coverageInclude : None
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     forceOnline     : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     skipAnnounceCheck: False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     redownload      : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     armorydb_ip     : 127.0.0.1
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     multisigFile    : DEFAULT
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     ram_usage       : -1
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     testAnnounceCode: False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     mtdebug         : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     logDisable      : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     settingsPath    : /home/user/.armory/ArmorySettings.txt
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     db_type         : DB_FULL
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     doDebug         : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     enableDetSign   : True
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     disableConfPermis: False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     testnet         : False
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     rpcport         : DEFAULT
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     satoshiHome     : DEFAULT
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     satoshiRpcport  : DEFAULT
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     logFile         : /home/user/.armory/ArmoryQt.py.log.txt
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1277 -     verbosity       : None
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1278 - Other arguments:
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1281 - ************************************************************
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:1684 - C++ block utilities loaded successfully
2016-11-29 08:40 (INFO) -- BDM.py:367 - Using the asynchronous/multi-threaded BlockDataManager.
2016-11-29 08:40 (INFO) -- BDM.py:368 - Blockchain operations will happen in the background.  
2016-11-29 08:40 (INFO) -- BDM.py:369 - Devs: check TheBDM.getState() before asking for data.
2016-11-29 08:40 (INFO) -- BDM.py:370 - Registering addresses during rescans will queue them for 
2016-11-29 08:40 (INFO) -- BDM.py:371 - inclusion after the current scan is completed.
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:3597 - Using settings file: /home/user/.armory/ArmorySettings.txt
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2485 - loadWalletsAndSettings
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2539 - Loading wallets...
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2598 - Number of wallets read in: 1
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2603 -    Wallet (E27AF4Yf):    "Primary Wallet                  "   (Encrypted)
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2608 - Loading Multisig Lockboxes
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2153 - Setting up networking...
2016-11-29 08:40 (INFO) -- ArmoryQt.py:1412 - setupUriRegistration
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:651 - Executing popen: gconftool-2 --get /desktop/gnome/url-handlers/bitcoin/command
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:651 - Executing popen: xdg-mime query default x-scheme-handler/bitcoin
2016-11-29 08:40 (INFO) -- ArmoryQt.py:546 - Usermode: Expert
2016-11-29 08:40 (INFO) -- ArmoryQt.py:1708 - Changing usermode:
2016-11-29 08:40 (INFO) -- ArmoryQt.py:1709 -    From: Expert
2016-11-29 08:40 (INFO) -- ArmoryQt.py:1717 -      To: Expert
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2217 - startBitcoindIfNecessary
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2257 - setSatoshiPaths
2016-11-29 08:40 (INFO) -- ArmoryQt.py:2275 - Setting satoshi datadir = /data/btc
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:651 - Executing popen: ['whereis', 'bitcoind']
2016-11-29 08:40 (INFO) -- SDM.py:339 - "whereis" returned: ['/usr/bin/bitcoind']
2016-11-29 08:40 (INFO) -- SDM.py:182 - Found bitcoind in the following places:
2016-11-29 08:40 (INFO) -- SDM.py:184 -    /bin/bitcoind
2016-11-29 08:40 (INFO) -- SDM.py:184 -    /usr/bin/bitcoind
2016-11-29 08:40 (INFO) -- SDM.py:184 -    /sbin/bitcoind
2016-11-29 08:40 (INFO) -- SDM.py:184 -    /usr/sbin/bitcoind
2016-11-29 08:40 (INFO) -- SDM.py:184 -    /usr/bin/bitcoind
2016-11-29 08:40 (INFO) -- SDM.py:186 - Using: /bin/bitcoind
2016-11-29 08:40 (INFO) -- SDM.py:382 - Reading bitcoin.conf file
2016-11-29 08:40 (INFO) -- SDM.py:460 - Called startBitcoind
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:651 - Executing popen: ['/bin/bitcoind', u'-datadir=/data/btc']
2016-11-29 08:40 (INFO) -- SDM.py:574 - PID of bitcoind: 5257
2016-11-29 08:40 (INFO) -- SDM.py:575 - PID of armory:   5206
2016-11-29 08:40 (INFO) -- ArmoryUtils.py:651 - Executing popen: ['python', '/opt/armory-git/guardian.py', '5206', '5257']
2016-11-29 08:40 (INFO) -- SDM.py:756 - Creating proxy in SDM: host=127.0.0.1, port=8332
2016-11-29 08:40 (INFO) -- ArmoryQt.py:5542 - Dashboard switched to auto-InitSync
2016-11-29 08:40 (WARNING) -- SDM.py:679 - Overriding not-available state. This should happen 0-5 times
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
2016-11-29 08:40 (ERROR) -- SDM.py:791 - ValueError in bkgd req top blk
Traceback (most recent call last):
  File "/opt/armory-git/SDM.py", line 765, in __backgroundRequestTopBlock
    numblks = self.proxy.getinfo()['blocks']
  File "/opt/armory-git/bitcoinrpc_jsonrpc/authproxy.py", line 105, in __call__
    resp = json.loads(resp, parse_float=decimal.Decimal)
  File "/usr/lib/python2.7/json/__init__.py", line 352, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded


Log file opened at 1480401933: /home/user/.armory/armorycpplog.txt


Log file opened at 1480401967: /home/user/.armory/armorycpplog.txt


Log file opened at 1480402016: /home/user/.armory/armorycpplog.txt


Log file opened at 1480402050: /home/user/.armory/armorycpplog.txt


Log file opened at 1480402070: /home/user/.armory/armorycpplog.txt


Log file opened at 1480402337: /home/user/.armory/armorycpplog.txt


Log file opened at 1480402556: /home/user/.armory/armorycpplog.txt


Log file opened at 1480402615: /home/user/.armory/armorycpplog.txt


Log file opened at 1480402964: /home/user/.armory/armorycpplog.txt


Log file opened at 1480403011: /home/user/.armory/armorycpplog.txt


Log file opened at 1480403874: /home/user/.armory/armorycpplog.txt


Log file opened at 1480404029: /home/user/.armory/armorycpplog.txt


Log file opened at 1480405117: /home/user/.armory/armorycpplog.txt


Log file opened at 1480405212: /home/user/.armory/armorycpplog.txt

Bitcoin Config:

##
## bitcoin.conf configuration file. Lines beginning with # are comments.
##
 
# Network-related settings:

# Run on the test network instead of the real bitcoin network.
#testnet=0

# Run a regression test network
#regtest=0

# Connect via a SOCKS5 proxy
#proxy=127.0.0.1:9050

# Bind to given address and always listen on it. Use [host]:port notation for IPv6
#bind=<addr>

# Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6
#whitebind=<addr>

##############################################################
##            Quick Primer on addnode vs connect            ##
##  Let's say for instance you use addnode=4.2.2.4          ##
##  addnode will connect you to and tell you about the      ##
##    nodes connected to 4.2.2.4.  In addition it will tell ##
##    the other nodes connected to it that you exist so     ##
##    they can connect to you.                              ##
##  connect will not do the above when you 'connect' to it. ##
##    It will *only* connect you to 4.2.2.4 and no one else.##
##                                                          ##
##  So if you're behind a firewall, or have other problems  ##
##  finding nodes, add some using 'addnode'.                ##
##                                                          ##
##  If you want to stay private, use 'connect' to only      ##
##  connect to "trusted" nodes.                             ##
##                                                          ##
##  If you run multiple nodes on a LAN, there's no need for ##
##  all of them to open lots of connections.  Instead       ##
##  'connect' them all to one node that is port forwarded   ##
##  and has lots of connections.                            ##
##       Thanks goes to [Noodle] on Freenode.               ##
##############################################################

# Use as many addnode= settings as you like to connect to specific peers
#addnode=69.164.218.197
#addnode=10.0.0.2:8333

# Alternatively use as many connect= settings as you like to connect ONLY to specific peers
#connect=69.164.218.197
#connect=10.0.0.1:8333

# Listening mode, enabled by default except when 'connect' is being used
listen=1

# Maximum number of inbound+outbound connections.
#maxconnections=

#
# JSON-RPC options (for controlling a running Bitcoin/bitcoind process)
#

# server=1 tells Bitcoin-Qt and bitcoind to accept JSON-RPC commands
server=1

# Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6.
# This option can be specified multiple times (default: bind to all interfaces)
rpcbind=127.0.0.1

# You must set rpcuser and rpcpassword to secure the JSON-RPC api
rpcuser=replaced
rpcpassword=replaced

# How many seconds bitcoin will wait for a complete RPC HTTP request.
# after the HTTP connection is established. 
#rpcclienttimeout=30

# By default, only RPC connections from localhost are allowed.
# Specify as many rpcallowip= settings as you like to allow connections from other hosts,
# either as a single IPv4/IPv6 or with a subnet specification.

# NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED,
# because the rpcpassword is transmitted over the network unencrypted.

# server=1 tells Bitcoin-Qt to accept JSON-RPC commands.
# it is also read by bitcoind to determine if RPC should be enabled 
#rpcallowip=10.1.1.34/255.255.255.0
rpcallowip=127.0.0.1
#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96

# Listen for RPC connections on this TCP port:
rpcport=8332

# You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind
# running on another host using this option:
#rpcconnect=127.0.0.1

# Transaction Fee Changes in 0.10.0

# Send transactions as zero-fee transactions if possible (default: 0)
#sendfreetransactions=0

# Create transactions that have enough fees (or priority) so they are likely to begin confirmation within n blocks (default: 1).
# This setting is over-ridden by the -paytxfee option.
#txconfirmtarget=n

# Miscellaneous options

# Pre-generate this many public/private key pairs, so wallet backups will be valid for
# both prior transactions and several dozen future transactions.
#keypool=100

# Pay an optional transaction fee every time you send bitcoins.  Transactions with fees
# are more likely than free transactions to be included in generated blocks, so may
# be validated sooner.
#paytxfee=0.00

# User interface options

# Start Bitcoin minimized
#min=1

# Minimize to the system tray
#minimizetotray=1

Add current balance to each transaction history line

It would nice to know what your balance was at a certain point in time. It would be nice to add 1-3 additional optional columns in the transaction history in order to show this, rather than just showing the change that occurred at that time. This would help people to visualize their spending and saving history more clearly relative to their total balance.

The columns would basically be "balance of all accounts at this time" and "balance of this account at this time" and "balance of all accounts in the current filter at this time".

Add more specific window titles for sub windows

When clicking "send bitcoins" from the main window, a new window comes up to send bitcoins. That window's title is "Armory - Bitcoin Wallet Management". It would be preferred to make it something more specific such as "Armory - Send Bitcoins".

Likewise, when clicking "Lockboxes", the new window's title is called "Armory - Bitcoin Wallet Management". It would be preferred to make it something more specific such as "Armory - Lockboxes".

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.