Bitcoin Forum

Bitcoin => Armory => Topic started by: goatpig on February 10, 2017, 12:19:43 AM



Title: 0.96 preliminary testing
Post by: goatpig on February 10, 2017, 12:19:43 AM
This time again.

Looking for people willing to build and try the dev branch. Changes can be seen here:

https://github.com/goatpig/BitcoinArmory/blob/dev/changelog.txt

This still needs some polish, but it's getting to the point where it's about done. SegWit is currently hardcoded disabled on mainnet, and enabled on testnet.

Due to the newly introduced script types, I strongly suggest people test this on testnet first before moving the mainnet.

Here is a list of what's missing/known as buggy, so that the testers can focus on what is supposed to be fully functional:

- The initialization progress bars are wacky atm.
- Still have to add a slider to the auto fee byte feature
- no .conf for the client yet
- have to redo the path settings GUI to go with the .conf addition
- still missing BIP9 rules detection to enable/disable SW
- armoryd is fubar

I'll be away from Friday to Monday, so don't expect me to reply to bug reports until then.

Happy testing!


Title: Re: 0.96 preliminary testing
Post by: droark on February 10, 2017, 09:02:57 AM
Would it be possible to pull in my PRs on Github so as to get the Mac build going again and various other small things? :) Thanks.


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 10, 2017, 09:45:33 AM
Would it be possible to pull in my PRs on Github so as to get the Mac build going again and various other small things? :) Thanks.

Did #143 #148 #161 and #168. Other PRs need longer reviews and testing so that will have to wait till I get back.

To all people who submitted PRs, please rebase on top of dev. Thanks.


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 10, 2017, 02:29:37 PM
I currently have an open PR for translations: https://github.com/goatpig/BitcoinArmory/pull/89. The plan is to have this in for 0.96 so if people could test it and review it, that would be great.


Title: Re: 0.96 preliminary testing
Post by: droark on February 12, 2017, 04:15:04 AM
Just submitted a PR to get the OSX build going again. There are two problems that still need to be addressed.

- cppForSwig/ScriptRecipient.h is inconsistent. getSize() needs to return size_t or uint64_t. As is, the parent class returns size_t and the children return uint64_t. This causes a build error on OSX.
- There's an ArmoryMac issue in the Python code. I'll sort it out in a separate PR.

In addition, Armory doesn't output CSV spreadsheets. Python errors prevent it from happening. I was working on a patch for it and got pulled into something else. I don't think this has worked for quite awhile. I tried 0.94.1 and it didn't work there either. For various reasons, I do think this is a useful feature, and I would like to see it working again. I'm happy to help get the ball rolling, of course. :)

Thanks.


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 12, 2017, 04:48:14 PM
In the MultiSigDialogs, the MultiSig addresses are being displayed (and maybe stored?) as P2PKH addresses, not P2SH addresses. This is happening with addresses that were already there, and presumably with addresses that are created.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 13, 2017, 02:35:21 PM
I'm getting alot of these with 5a84857:

Code:
Traceback (most recent call last):
  File "/home/user/BitcoinArmory/qtdialogs.py", line 8386, in wltTableClicked
    self.setAddrBookTxModel(self.selectedWltID)
  File "/home/user/BitcoinArmory/qtdialogs.py", line 8283, in setAddrBookTxModel
    self.addrBookTxModel = SentToAddrBookModel(wltID, self.main)
  File "/home/user/BitcoinArmory/armorymodels.py", line 1337, in __init__
    addressBook = self.wlt.cppWallet.createAddressBook();
  File "/home/user/BitcoinArmory/CppBlockUtils.py", line 1949, in createAddressBook
    def createAddressBook(self): return _CppBlockUtils.WalletContainer_createAddressBook(self)
RuntimeError: can't connect socket


....when using the Send dialog (triggered by either Coin Control button or Choose Address button). Subsequently, other parts of the GUI throw this error too (not necessarily with the same traceback).


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 13, 2017, 04:32:47 PM
I currently have an open PR for translations: https://github.com/goatpig/BitcoinArmory/pull/89. The plan is to have this in for 0.96 so if people could test it and review it, that would be great.

Opened a code review of the PR in Github, please go over it.

Quote
Just submitted a PR to get the OSX build going again. There are two problems that still need to be addressed.

Merged #170, don't know the status on #151

-------------

Anything else I haven't mentioned is still being reviewed/fixed.


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 13, 2017, 04:33:19 PM
I'm getting alot of these with 5a84857:

Code:
Traceback (most recent call last):
  File "/home/user/BitcoinArmory/qtdialogs.py", line 8386, in wltTableClicked
    self.setAddrBookTxModel(self.selectedWltID)
  File "/home/user/BitcoinArmory/qtdialogs.py", line 8283, in setAddrBookTxModel
    self.addrBookTxModel = SentToAddrBookModel(wltID, self.main)
  File "/home/user/BitcoinArmory/armorymodels.py", line 1337, in __init__
    addressBook = self.wlt.cppWallet.createAddressBook();
  File "/home/user/BitcoinArmory/CppBlockUtils.py", line 1949, in createAddressBook
    def createAddressBook(self): return _CppBlockUtils.WalletContainer_createAddressBook(self)
RuntimeError: can't connect socket


....when using the Send dialog (triggered by either Coin Control button or Choose Address button). Subsequently, other parts of the GUI throw this error too (not necessarily with the same traceback).

Looks like the DB is not running.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 13, 2017, 05:24:36 PM
That's it. Entering Send dialog reliably kills the db. Built with latest Whonix (Debian 8.7 based)


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 13, 2017, 05:35:36 PM
Any error on the db side?


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 13, 2017, 10:32:50 PM
Not after it crashes

Code:
-ERROR - 1487006286: (nodeRPC.cpp:162) missing server option in node configuration file

That's the only error, I don't think that's the issue. Launch ArmoryQt.py with gdb? Or just for ArmoryDB?


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 13, 2017, 10:36:29 PM
Not after it crashes

Code:
-ERROR - 1487006286: (nodeRPC.cpp:162) missing server option in node configuration file

That's the only error, I don't think that's the issue. Launch ArmoryQt.py with gdb? Or just for ArmoryDB?
That's the issue I think. Your node can't connect to the RPC server of Bitcoin Core because it isn't set to have the RPC server enabled (at least that's what it thinks). However the send needs RPC functions for the fee/byte stuff.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 13, 2017, 11:39:16 PM
Do I need additional RPC arguments than Armory needed before? Doesn't seem like anything is wrong in .bitcoin/bitcoin.conf


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 13, 2017, 11:51:45 PM
Do I need additional RPC arguments than Armory needed before? Doesn't seem like anything is wrong in .bitcoin/bitcoin.conf
The bitcoin.conf requirements have changed. It now requires that you have server=1 set (although that should have already been set to enable the RPC server anyways) and it will check for it. It does not require rpcuser or rpcpassword to be set. In fact, I recommend that you don't set those.

Double check that that option is set in the bitcoin.conf and see if it still fails with it set. I will attempt to test this out on my end as well.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 14, 2017, 12:22:24 AM
Shouldn't just running with -server=1 from bash work? It's not.

I've screwed up my Bitcoin installation anyway, getting strangely random amount of inability to retain the last ~50 blocks, accompanied by SegFault errors, and long startups. Don't tell me, delete the most recent blk.dat files to force a reindex?


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 14, 2017, 12:38:16 AM
Shouldn't just running with -server=1 from bash work? It's not.
No, it specifically looks for server=1 in the bitcoin.conf. I mentioned it to goatpig yesterday on IRC but he said for now it will just look for that line the conf file, later it will probably be changed to just listening for a response from the RPC connection, which it does anyways.

I've screwed up my Bitcoin installation anyway, getting strangely random amount of inability to retain the last ~50 blocks, accompanied by SegFault errors, and long startups. Don't tell me, delete the most recent blk.dat files to force a reindex?
No need to delete anything unless you suspect corruption. Just run with -reindex to force a reindex.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 14, 2017, 12:46:54 AM
Makes more sense. Core issue is now more pressing, however.

No need to delete anything unless you suspect corruption. Just run with -reindex to force a reindex.

I'm not seeing anything relevant in debug.log. Put simply, Core isn't retaining the most recent ~50 blocks between restarts. The amount of missing blocks varies each restart. Provoked by Core not shutting down cleanly when it was tx scanning the wallet (I'd forgotten to add the -disablewallet argument, was being impatient and so interrrupted the Rescan)

I'm not sure whether reindexing will necessarily fix this, and reindexing is a lot of time to commit to.


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 14, 2017, 12:51:19 AM
Makes more sense. Core issue is now more pressing, however.

No need to delete anything unless you suspect corruption. Just run with -reindex to force a reindex.

I'm not seeing anything relevant in debug.log. Put simply, Core isn't retaining the most recent ~50 blocks between restarts. The amount of missing blocks varies each restart. Provoked by Core not shutting down cleanly when it was tx scanning the wallet (I'd forgotten to add the -disablewallet argument, was being impatient and so interrrupted the Rescan)
Let's move this part of the discussion to Tech Support.



Back to topic.

I am currently testing send and receiving to and from all three address types on testnet. For some reason, when I receive, it suddenly switches back to "Dashboard Scanning Mode" and it doesn't leave that mode even though DB says scanning has completed. Also, this switch only happened when a new block arrived, but it was not the first block that had arrived with Armory started. Restarting the client fixed the problem.

It also seems that I am getting the "missing server option from the conf file" error even though that option is set. Actually it wasn't set, but I think that is because Armory is looking for a bitcoin.conf in <datadir>/testnet3 instead of in <datadir> as I'm pretty sure Core still uses the one in <datadir>

This is the error and backtrace I get from just attempting to start ArmoryDB now:

Code:
Thread 4 "ArmoryDB" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffda81c700 (LWP 7888)]
__GI__IO_fwrite (buf=0x7fffd00018f0, size=281, count=1, fp=0x0) at iofwrite.c:37
37 iofwrite.c: No such file or directory.
(gdb) backtrace
#0  __GI__IO_fwrite (buf=0x7fffd00018f0, size=281, count=1, fp=0x0) at iofwrite.c:37
#1  0x000000000067de93 in HttpSocket::makePacket (this=0xb20bb0, packet=0x7fffda81b2d0,
    msg=0x7fffd0002e60 "{\"id\": 0, \"jsonrpc\": \"2.0\", \"method\": \"getinfo\", \"params\": []}")
    at StringSockets.cpp:83
#2  0x000000000067e5d2 in HttpSocket::writeAndRead (this=0xb20bb0,
    msg="{\"id\": 0, \"jsonrpc\": \"2.0\", \"method\": \"getinfo\", \"params\": []}", sockfd=2147483647)
    at StringSockets.cpp:123
#3  0x000000000066d952 in NodeRPC::testConnection (this=0xb20a60) at nodeRPC.cpp:70
#4  0x000000000066d6fc in NodeRPC::setupConnection (this=0xb20a60) at nodeRPC.cpp:51
#5  0x000000000066d81c in NodeRPC::testConnection (this=0xb20a60) at nodeRPC.cpp:60
#6  0x0000000000467302 in BlockDataManager::getNodeStatus (this=0xb0d410) at BlockUtils.cpp:1242
#7  0x00000000004d9dc9 in BlockDataManagerThread::<lambda()>::operator()(void) const (__closure=0x7fffda81bd30)
    at BDM_mainthread.cpp:141
#8  0x00000000004db708 in std::_Function_handler<void(), BlockDataManagerThread::run()::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/5/functional:1871
#9  0x000000000043a5e4 in std::function<void ()>::operator()() const (this=0x7fffda81bd30)
    at /usr/include/c++/5/functional:2267
#10 0x00000000006701d2 in NodeRPC::waitOnChainSync(std::function<void ()>) (this=0xb20a60, callbck=...)
    at nodeRPC.cpp:277
#11 0x00000000004da6ce in BlockDataManagerThread::run (this=0x7fffffffd970) at BDM_mainthread.cpp:154
#12 0x00000000004db214 in BlockDataManagerThread::thrun (_self=0x7fffffffd970) at BDM_mainthread.cpp:302
#13 0x00000000004e05ba in std::_Bind_simple<void* (*(BlockDataManagerThread*))(void*)>::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0xb218b8) at /usr/include/c++/5/functional:1531
#14 0x00000000004e04c4 in std::_Bind_simple<void* (*(BlockDataManagerThread*))(void*)>::operator()() (
    this=0xb218b8) at /usr/include/c++/5/functional:1520
#15 0x00000000004e0454 in std::thread::_Impl<std::_Bind_simple<void* (*(BlockDataManagerThread*))(void*)> >::_M_run() (this=0xb218a0) at /usr/include/c++/5/thread:115
#16 0x00007ffff78f0c80 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#17 0x00007ffff7bc16ba in start_thread (arg=0x7fffda81c700) at pthread_create.c:333
#18 0x00007ffff705682d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109


I am getting the same error that Carlton is getting when hitting the send button.

Here is the backtrace from gdb:
Code:
(gdb) backtrace
#0  __GI__IO_fwrite (buf=0x7fff70017d80, size=163, count=1, fp=0x0) at iofwrite.c:37
#1  0x000000000056a57c in HttpSocket::makePacket(char**, char const*) ()
#2  0x000000000056a9a9 in HttpSocket::writeAndRead(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) ()
#3  0x0000000000562b56 in NodeRPC::getFeeByte(unsigned int) ()
#4  0x000000000051d997 in std::_Function_handler<Arguments (std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, Arguments&), BDV_Server_Object::buildMethodMap()::{lambda(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, Arguments&)#24}>::_M_invoke(std::_Any_data const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, Arguments&) ()
#5  0x000000000051bd9f in BDV_Server_Object::executeCommand(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, Arguments&) ()
#6  0x000000000052a1a1 in Clients::runCommand(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#7  0x000000000052a4c0 in FCGI_Server::processRequest(FCGX_Request*) ()
#8  0x00007ffff78f0c80 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#9  0x00007ffff7bc16ba in start_thread (arg=0x7fff7f7fe700) at pthread_create.c:333
#10 0x00007ffff705682d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
It seems that the issue is related to being unable to connect to the RPC server. I will investigate.



Edit: I have resolved the above issues, it was due to some extra debugging code left in the codebase. Here's a PR for it: https://github.com/goatpig/BitcoinArmory/pull/172. Still hunting down bugs in the send dialog, will continue in more posts instead of editing this one.

Edit: One of the issues above remains unresolved where the BDM will randomly go back to the scanning phase and needs to be restarted to resolve it.


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 14, 2017, 10:16:56 AM
Do I need additional RPC arguments than Armory needed before? Doesn't seem like anything is wrong in .bitcoin/bitcoin.conf

It looks for .bitcoin/testnet3/bitcoin.conf in testnet. At any rate, it should work if the RPC is off as well. That's a bug that needs fixing.

Quote
Actually it wasn't set, but I think that is because Armory is looking for a bitcoin.conf in <datadir>/testnet3 instead of in <datadir> as I'm pretty sure Core still uses the one in <datadir>

I did this on purpose. I am aware of the reason why it should use the .conf in the parent bitcoin folder, but it's weird enough that I'd rather not introduce weird edge cases in my own path discovery code.

I will move RPC detection to simply probing the socket soon enough.

Quote
Edit: I have resolved the above issues, it was due to some extra debugging code left in the codebase. Here's a PR for it: https://github.com/goatpig/BitcoinArmory/pull/172. Still hunting down bugs in the send dialog, will continue in more posts instead of editing this one.

Already have a fix for that locally. I'm going through the PRs first then pushing this fix.

Quote
Edit: One of the issues above remains unresolved where the BDM will randomly go back to the scanning phase and needs to be restarted to resolve it.

That has to do with the dashboard snafu, will fix it soon.


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 14, 2017, 06:17:07 PM
Should DB being shutting down when Client closes even though I run DB separately?


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 14, 2017, 09:41:14 PM
Should DB being shutting down when Client closes even though I run DB separately?

DB now uses a cookie file setup to authorize special commands like shutdown. Any local client can read that cookie file, which the DB creates under any circumstances. I guess I could add some cli magic in there to make it a bit more intuitive.


Title: Re: 0.96 preliminary testing
Post by: droark on February 15, 2017, 03:03:48 AM
Test suite is broken. Submitted a PR.


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 15, 2017, 09:25:07 PM
Quote
Edit: One of the issues above remains unresolved where the BDM will randomly go back to the scanning phase and needs to be restarted to resolve it.

Fixed.

Quote
Should DB being shutting down when Client closes even though I run DB separately?

Won't do it anymore now.

Quote
Test suite is broken. Submitted a PR.

Merged. Also merged the translation PR, have fun with that.

Edit: If your PR adds a feature or fixes something I missed from previous versions, please update the changelog as accordingly as well.


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 16, 2017, 01:42:12 PM
Shouldn't just running with -server=1 from bash work? It's not.

Should be fixed now.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 16, 2017, 10:47:34 PM
I'll be checking it out right after I mend my blockchain data, it'll be done soon with any luck


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 19, 2017, 01:08:08 PM
Shouldn't just running with -server=1 from bash work? It's not.

Should be fixed now.

I can now confirm that.

Issues I found (8adfd62)
  • Editing tx comments from main window yielded QString::arg: 1 argument(s) missing in Add %2 %2:
  • Using the wallet filters produced overlapping or incomplete results accompanied by -INFO  - 1487508653: (SocketObject.cpp:517) POLLIN recv return 0
  • A little messing around with the "Use only selected UTXOs" option ended up with a bunch of  AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel' with differing tracebacks, followed by the fee adjustment failing altogether. Clicking Send! in that state produced an Insufficient Fee dialog with this text featuring "Your specified fee results in a rate of %d satoshis per byte/b>. This is much lower than the median satoshi/byte rate of %s BTC"


Title: Re: 0.96 preliminary testing
Post by: droark on February 19, 2017, 08:16:07 PM
Another problem (and one that seems to have been around for years): The transaction export feature is broken. There are two problems.

- In qtdialogs.py, order_ascending and order_descending aren't defined.
- There's something wrong with SWIG. I got the following error on the command line when running the export command after defining the two order values.

Code:
(ERROR) Traceback (most recent call last):
  File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/qtdialogs.py", line 9504, in accept
    if self.createFile_CSV():
  File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/qtdialogs.py", line 9631, in createFile_CSV
    walletGroup = TheBDM.bdv().getStandAloneWalletGroup(wltIDList, order)
  File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/CppBlockUtils.py", line 2453, in <lambda>
    __getattr__ = lambda self, name: _swig_getattr(self, BlockDataViewer, name)
  File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/CppBlockUtils.py", line 80, in _swig_getattr
    raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
AttributeError: 'BlockDataViewer' object has no attribute 'getStandAloneWalletGroup'

This probably has to do with order_ascending and order_descending, which need to be HistoryOrdering objects. I can't seem to find examples in Git. Will keep looking and submit a PR if I can.

EDIT: Okay, I think I found it. The Python code relies on code in BlockDataViewer.h/cpp. However, that code goes into ArmoryDB. SwigClient.h/cpp appears to have its own BlockDataViewer. This is what Python accesses. The Python BDV doesn't have the code required for the Tx exporting. I'll look into that and see if how easy it would be to copy the code over.


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 19, 2017, 10:37:02 PM
EDIT: Okay, I think I found it. The Python code relies on code in BlockDataViewer.h/cpp. However, that code goes into ArmoryDB. SwigClient.h/cpp appears to have its own BlockDataViewer. This is what Python accesses. The Python BDV doesn't have the code required for the Tx exporting. I'll look into that and see if how easy it would be to copy the code over.

That most likely means this is data that needs to be pulled from the DB. You would have to populate the director with the method, write ser/deser routines and get the client to pull the data.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 23, 2017, 02:12:26 PM
Both the Create Wallet button and dropdown selection yields this:

Code:
Traceback (most recent call last):
  File "ArmoryQt.py", line 3456, in startWalletWizard
    walletWizard = WalletWizard(self, self)
  File "/home/user/BitcoinArmory/ui/Wizards.py", line 103, in __init__
    self.walletBackupPage = WalletBackupPage(self)
  File "/home/user/BitcoinArmory/ui/Wizards.py", line 307, in __init__
    WalletBackupFrame(wizard, wizard.main, wizard.tr("Backup Wallet")))
  File "/home/user/BitcoinArmory/ui/WalletFrames.py", line 807, in __init__
    self.featuresLbls[F.ProtGen] = MkFeatLabel(self.tr('Protects All Future Addresses'))
  File "/home/user/BitcoinArmory/ui/WalletFrames.py", line 806, in <lambda>
    MkFeatLabel = lambda x: QRichLabel(tr(x), doWrap=False)
NameError: global name 'tr' is not defined

...and no Create Wallet dialog


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 23, 2017, 03:20:07 PM
Both the Create Wallet button and dropdown selection yields this:

Code:
Traceback (most recent call last):
  File "ArmoryQt.py", line 3456, in startWalletWizard
    walletWizard = WalletWizard(self, self)
  File "/home/user/BitcoinArmory/ui/Wizards.py", line 103, in __init__
    self.walletBackupPage = WalletBackupPage(self)
  File "/home/user/BitcoinArmory/ui/Wizards.py", line 307, in __init__
    WalletBackupFrame(wizard, wizard.main, wizard.tr("Backup Wallet")))
  File "/home/user/BitcoinArmory/ui/WalletFrames.py", line 807, in __init__
    self.featuresLbls[F.ProtGen] = MkFeatLabel(self.tr('Protects All Future Addresses'))
  File "/home/user/BitcoinArmory/ui/WalletFrames.py", line 806, in <lambda>
    MkFeatLabel = lambda x: QRichLabel(tr(x), doWrap=False)
NameError: global name 'tr' is not defined

...and no Create Wallet dialog

Will go over these once the autotools branch is ready. On that note, would you mind pulling that branch and trying it out? You need to setup git submodules this way once you check out the branch:

Code:
git submodule init
git submodule update

Then you can build the usual autotools way:

Code:
sh autogen.sh
./configure
make

make dist works, but make install doesn't yet.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 23, 2017, 03:34:29 PM
Can do. Is autotools not a dependency for gitian, or is that wrong?


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 23, 2017, 03:46:54 PM
Can do. Is autotools not a dependency for gitian, or is that wrong?

It is, and that's end game here. But autotools itself is a messy thing, that got me spending the best part of a week just to get Armory back into the state it was with plain makefiles. So... baby steps =)


Title: Re: 0.96 preliminary testing
Post by: droark on February 25, 2017, 10:40:25 PM
Submitted a PR for C++11 detection, which is broken on Macs. There's also some sort of ASM compile issue for Crypto++. Haven't been able to decipher that one yet. Here's an example.

Code:
Making all in cryptopp
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DPACKAGE_NAME=\"Cryptopp\" -DPACKAGE_TARNAME=\"cryptopp\" -DPACKAGE_VERSION=\"1\" -DPACKAGE_STRING=\"Cryptopp\ 1\" -DPACKAGE_BUGREPORT=\"weidai@github\" -DPACKAGE_URL=\"\" -DPACKAGE=\"cryptopp\" -DVERSION=\"1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DHAVE_ARPA_INET_H=1 -DHAVE_FCNTL_H=1 -DHAVE_LIMITS_H=1 -DHAVE_NETDB_H=1 -DHAVE_NETINET_IN_H=1 -DHAVE_STDDEF_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_UNISTD_H=1 -DHAVE__BOOL=1 -DHAVE_PTRDIFF_T=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_GETHOSTBYNAME=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_MEMMOVE=1 -DHAVE_MEMSET=1 -DHAVE_POW=1 -DHAVE_SELECT=1 -DHAVE_SETLOCALE=1 -DHAVE_SOCKET=1 -I.    -fPIC -pipe       -O2 -D_FORTIFY_SOURCE=2 -MT sosemanuk.lo -MD -MP -MF .deps/sosemanuk.Tpo -c -o sosemanuk.lo sosemanuk.cpp
libtool: compile:  g++ -DPACKAGE_NAME=\"Cryptopp\" -DPACKAGE_TARNAME=\"cryptopp\" -DPACKAGE_VERSION=\"1\" "-DPACKAGE_STRING=\"Cryptopp 1\"" -DPACKAGE_BUGREPORT=\"weidai@github\" -DPACKAGE_URL=\"\" -DPACKAGE=\"cryptopp\" -DVERSION=\"1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DHAVE_ARPA_INET_H=1 -DHAVE_FCNTL_H=1 -DHAVE_LIMITS_H=1 -DHAVE_NETDB_H=1 -DHAVE_NETINET_IN_H=1 -DHAVE_STDDEF_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_UNISTD_H=1 -DHAVE__BOOL=1 -DHAVE_PTRDIFF_T=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_GETHOSTBYNAME=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_MEMMOVE=1 -DHAVE_MEMSET=1 -DHAVE_POW=1 -DHAVE_SELECT=1 -DHAVE_SETLOCALE=1 -DHAVE_SOCKET=1 -I. -fPIC -pipe -O2 -D_FORTIFY_SOURCE=2 -MT sosemanuk.lo -MD -MP -MF .deps/sosemanuk.Tpo -c sosemanuk.cpp  -fno-common -DPIC -o .libs/sosemanuk.o
sosemanuk.cpp:356:3: error: unknown token in expression
                ".intel_syntax noprefix;"
                ^
<inline asm>:1:40: note: instantiated into assembly here
        .intel_syntax noprefix;mov QWORD PTR [%rbx+1*8], rdi;mov QWORD PTR [%rbx+2*8], rdx;mov QWORD PTR [%rbx+6*8], rax;mov QWORD PTR [%rbx+5*8], rsi;lea rcx, [4*rcx+rcx];lea rsi, [4*rcx];mov QWORD P...
                                              ^
sosemanuk.cpp:356:3: error: unknown token in expression
                ".intel_syntax noprefix;"
                ^
<inline asm>:1:70: note: instantiated into assembly here
        .intel_syntax noprefix;mov QWORD PTR [%rbx+1*8], rdi;mov QWORD PTR [%rbx+2*8], rdx;mov QWORD PTR [%rbx+6*8], rax;mov QWORD PTR [%rbx+5*8], rsi;lea rcx, [4*rcx+rcx];lea rsi, [4*rcx];mov QWORD P...
                                                                            ^
( Same basic errors over and over )

fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.


Title: Re: 0.96 preliminary testing
Post by: Carlton Banks on February 26, 2017, 12:23:45 AM
Okay, so the autotools branch is compiling and running fine for me, using latest Whonix (debian 8.7 based)


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 26, 2017, 12:47:34 AM
Submitted a PR for C++11 detection, which is broken on Macs. There's also some sort of ASM compile issue for Crypto++. Haven't been able to decipher that one yet. Here's an example.

https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/cryptopp/Makefile.am#L9

It is failing to trigger this if block. It needs -DCRYPTOPP_DISABLE_ASM but that depends on this conditional:

https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/cryptopp/configure.ac#L53

i.e. if the configure scripts detects clang as the compiler. Feel free to change the condition to UNAME_DARWIN or expand on the conditions to add this def.


Title: Re: 0.96 preliminary testing
Post by: droark on February 26, 2017, 02:23:40 AM
Submitted a PR for C++11 detection, which is broken on Macs. There's also some sort of ASM compile issue for Crypto++. Haven't been able to decipher that one yet. Here's an example.

https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/cryptopp/Makefile.am#L9

It is failing to trigger this if block. It needs -DCRYPTOPP_DISABLE_ASM but that depends on this conditional:

https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/cryptopp/configure.ac#L53

i.e. if the configure scripts detects clang as the compiler. Feel free to change the condition to UNAME_DARWIN or expand on the conditions to add this def.

Thanks. Submitted another PR. I'm still having a problem. This happens at the end of the build.

Code:
cp cppForSwig/.libs/libCppBlockUtils.so ./_CppBlockUtils.so
cp: cppForSwig/.libs/libCppBlockUtils.so: No such file or directory


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 26, 2017, 02:30:31 AM
Quote
Code:
cp cppForSwig/.libs/libCppBlockUtils.so ./_CppBlockUtils.so
cp: cppForSwig/.libs/libCppBlockUtils.so: No such file or directory

What folder does libtool build on OSX? Try replacing /cppForSwig/.libs with $(builddir)


Title: Re: 0.96 preliminary testing
Post by: droark on February 26, 2017, 04:01:40 AM
What folder does libtool build on OSX? Try replacing /cppForSwig/.libs with $(builddir)

Nevermind. Found the problem and updated the PR. OS X puts out .dylib files instead of .so. Adjusted the Makefile to account for that.


Title: Re: 0.96 preliminary testing
Post by: droark on February 27, 2017, 01:58:38 AM
Found two more problems.

- There seems to be some sort of repo cloning issue. Every time I've cloned onto my Ubuntu VM, the FCGI subproject never downloads. I got around it by manually downloading the code and copying it over. Still, something's up, and I'm not sure what it is. (OSX is fine.)

- The C++ wallet mirroring seemed to pause when it hit an error.

Code:
(ERROR) ArmoryUtils.py:3217 - Error in pybkgdthread: 'WalletComparisonClass' object has no attribute 'tr'
Traceback (most recent call last):
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armoryengine/ArmoryUtils.py", line 3215, in run
self.output = self.func()
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armoryengine/ArmoryUtils.py", line 3152, in funcPartial
return thefunc(*args, **kwargs)
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/ui/WalletMirrorDialog.py", line 91, in walletComputation
reportTextProgress(self.tr("Checking imports for wallet %s").arg(wltID))
AttributeError: 'WalletComparisonClass' object has no attribute 'tr'

I'm also seeing some other errors on startup. The first one is repeated once, and the second is repeating multiple times.

Code:
(ERROR) Traceback (most recent call last):
  File "ArmoryQt.py", line 4797, in handleCppNotification
self.finishLoadBlockchainGUI()
  File "ArmoryQt.py", line 2437, in finishLoadBlockchainGUI
self.createCombinedLedger()
  File "ArmoryQt.py", line 2510, in createCombinedLedger
totalFunds += wlt.getBalance('Total')
TypeError: unsupported operand type(s) for +=: 'int' and 'SwigPyObject'

(...)

(ERROR) Traceback (most recent call last):
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armorymodels.py", line 81, in data
dispStr = coin2str(bal, maxZeros=2)
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
nBtc = float(nSatoshi) / float(ONE_BTC)
TypeError: float() argument must be a string or a number


Title: Re: 0.96 preliminary testing
Post by: achow101 on February 27, 2017, 02:07:14 AM
- There seems to be some sort of repo cloning issue. Every time I've cloned onto my Ubuntu VM, the FCGI subproject never downloads. I got around it by manually downloading the code and copying it over. Still, something's up, and I'm not sure what it is. (OSX is fine.)
When you clone, run
Code:
git submodule init
git submodule update
to get the fcgi submodule


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 27, 2017, 02:18:50 AM
Found two more problems.

- There seems to be some sort of repo cloning issue. Every time I've cloned onto my Ubuntu VM, the FCGI subproject never downloads. I got around it by manually downloading the code and copying it over. Still, something's up, and I'm not sure what it is. (OSX is fine.)

- The C++ wallet mirroring seemed to pause when it hit an error.

Code:
(ERROR) ArmoryUtils.py:3217 - Error in pybkgdthread: 'WalletComparisonClass' object has no attribute 'tr'
Traceback (most recent call last):
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armoryengine/ArmoryUtils.py", line 3215, in run
self.output = self.func()
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armoryengine/ArmoryUtils.py", line 3152, in funcPartial
return thefunc(*args, **kwargs)
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/ui/WalletMirrorDialog.py", line 91, in walletComputation
reportTextProgress(self.tr("Checking imports for wallet %s").arg(wltID))
AttributeError: 'WalletComparisonClass' object has no attribute 'tr'

I'm also seeing some other errors on startup. The first one is repeated once, and the second is repeating multiple times.

Code:
(ERROR) Traceback (most recent call last):
  File "ArmoryQt.py", line 4797, in handleCppNotification
self.finishLoadBlockchainGUI()
  File "ArmoryQt.py", line 2437, in finishLoadBlockchainGUI
self.createCombinedLedger()
  File "ArmoryQt.py", line 2510, in createCombinedLedger
totalFunds += wlt.getBalance('Total')
TypeError: unsupported operand type(s) for +=: 'int' and 'SwigPyObject'

(...)

(ERROR) Traceback (most recent call last):
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armorymodels.py", line 81, in data
dispStr = coin2str(bal, maxZeros=2)
  File "/home/droark/Projects/PersonalGitRepo/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
nBtc = float(nSatoshi) / float(ONE_BTC)
TypeError: float() argument must be a string or a number

These errors are fixed in dev


Title: Re: 0.96 preliminary testing
Post by: goatpig on February 28, 2017, 10:27:01 PM
    • Editing tx comments from main window yielded QString::arg: 1 argument(s) missing in Add %2 %2:
    • Using the wallet filters produced overlapping or incomplete results accompanied by -INFO  - 1487508653: (SocketObject.cpp:517) POLLIN recv return 0

    Fixed

    Quote
    • A little messing around with the "Use only selected UTXOs" option ended up with a bunch of  AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel' with differing tracebacks, followed by the fee adjustment failing altogether. Clicking Send! in that state produced an Insufficient Fee dialog with this text featuring "Your specified fee results in a rate of %d satoshis per byte/b>. This is much lower than the median satoshi/byte rate of %s BTC"

    Can't reproduce the coin control thing, you're gonna have to narrow it down. I got some other bug on the fee part that may cover what you found, more on that when that fix is out.

    Both the Create Wallet button and dropdown selection yields this:

    Code:
    Traceback (most recent call last):
      File "ArmoryQt.py", line 3456, in startWalletWizard
        walletWizard = WalletWizard(self, self)
      File "/home/user/BitcoinArmory/ui/Wizards.py", line 103, in __init__
        self.walletBackupPage = WalletBackupPage(self)
      File "/home/user/BitcoinArmory/ui/Wizards.py", line 307, in __init__
        WalletBackupFrame(wizard, wizard.main, wizard.tr("Backup Wallet")))
      File "/home/user/BitcoinArmory/ui/WalletFrames.py", line 807, in __init__
        self.featuresLbls[F.ProtGen] = MkFeatLabel(self.tr('Protects All Future Addresses'))
      File "/home/user/BitcoinArmory/ui/WalletFrames.py", line 806, in <lambda>
        MkFeatLabel = lambda x: QRichLabel(tr(x), doWrap=False)
    NameError: global name 'tr' is not defined

    ...and no Create Wallet dialog

    Fixed

    Another problem (and one that seems to have been around for years): The transaction export feature is broken. There are two problems.

    - In qtdialogs.py, order_ascending and order_descending aren't defined.
    - There's something wrong with SWIG. I got the following error on the command line when running the export command after defining the two order values.

    Code:
    (ERROR) Traceback (most recent call last):
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/qtdialogs.py", line 9504, in accept
        if self.createFile_CSV():
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/qtdialogs.py", line 9631, in createFile_CSV
        walletGroup = TheBDM.bdv().getStandAloneWalletGroup(wltIDList, order)
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/CppBlockUtils.py", line 2453, in <lambda>
        __getattr__ = lambda self, name: _swig_getattr(self, BlockDataViewer, name)
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/CppBlockUtils.py", line 80, in _swig_getattr
        raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
    AttributeError: 'BlockDataViewer' object has no attribute 'getStandAloneWalletGroup'

    This probably has to do with order_ascending and order_descending, which need to be HistoryOrdering objects. I can't seem to find examples in Git. Will keep looking and submit a PR if I can.

    EDIT: Okay, I think I found it. The Python code relies on code in BlockDataViewer.h/cpp. However, that code goes into ArmoryDB. SwigClient.h/cpp appears to have its own BlockDataViewer. This is what Python accesses. The Python BDV doesn't have the code required for the Tx exporting. I'll look into that and see if how easy it would be to copy the code over.

    Fixed


    Title: Re: 0.96 preliminary testing
    Post by: Ente on February 28, 2017, 11:04:10 PM
    I just tried to install the dev branch.
    After pulling, changing branch to dev and installing a few new dependencies, I did
    Quote
    sh autogen.sh
    ./configure
    make

    make gives me
    Quote
    make  all-recursive
    make[1]: Entering directory '/opt/BitcoinArmory'
    Making all in cppForSwig
    make[2]: Entering directory '/opt/BitcoinArmory/cppForSwig'
    Making all in lmdb
    make[3]: Entering directory '/opt/BitcoinArmory/cppForSwig/lmdb'
    make[3]: Nothing to be done for 'all'.
    make[3]: Leaving directory '/opt/BitcoinArmory/cppForSwig/lmdb'
    Making all in fcgi
    make[3]: Entering directory '/opt/BitcoinArmory/cppForSwig/fcgi'
    make[3]: *** No rule to make target 'all'.  Stop.
    make[3]: Leaving directory '/opt/BitcoinArmory/cppForSwig/fcgi'
    Makefile:1453: recipe for target 'all-recursive' failed
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory '/opt/BitcoinArmory/cppForSwig'
    Makefile:417: recipe for target 'all-recursive' failed
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory '/opt/BitcoinArmory'
    Makefile:348: recipe for target 'all' failed
    make: *** [all] Error 2

    I wouldn't be surprised if I messed something up with dependencies and all, but can't make much sense out of that error.
    Running on debian 8 by the way.

    Cheers,

    Ente


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on February 28, 2017, 11:14:36 PM
    I just tried to install the dev branch.
    After pulling, changing branch to dev and installing a few new dependencies, I did
    Quote
    sh autogen.sh
    ./configure
    make

    make gives me
    Quote
    make  all-recursive
    make[1]: Entering directory '/opt/BitcoinArmory'
    Making all in cppForSwig
    make[2]: Entering directory '/opt/BitcoinArmory/cppForSwig'
    Making all in lmdb
    make[3]: Entering directory '/opt/BitcoinArmory/cppForSwig/lmdb'
    make[3]: Nothing to be done for 'all'.
    make[3]: Leaving directory '/opt/BitcoinArmory/cppForSwig/lmdb'
    Making all in fcgi
    make[3]: Entering directory '/opt/BitcoinArmory/cppForSwig/fcgi'
    make[3]: *** No rule to make target 'all'.  Stop.
    make[3]: Leaving directory '/opt/BitcoinArmory/cppForSwig/fcgi'
    Makefile:1453: recipe for target 'all-recursive' failed
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory '/opt/BitcoinArmory/cppForSwig'
    Makefile:417: recipe for target 'all-recursive' failed
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory '/opt/BitcoinArmory'
    Makefile:348: recipe for target 'all' failed
    make: *** [all] Error 2

    I wouldn't be surprised if I messed something up with dependencies and all, but can't make much sense out of that error.
    Running on debian 8 by the way.

    Cheers,

    Ente
    Did you run
    Code:
    git submodule init
    git submodule update
    before attempting to build? If not, do that first.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on February 28, 2017, 11:41:35 PM
    Can't test the new fixes, the main transaction window and balances are blank. Block height reads "Offline"

    Code:
    BDM is ready!
    (ERROR) Traceback (most recent call last):
      File "ArmoryQt.py", line 4797, in handleCppNotification
        self.finishLoadBlockchainGUI()
      File "ArmoryQt.py", line 2437, in finishLoadBlockchainGUI
        self.createCombinedLedger()
      File "ArmoryQt.py", line 2510, in createCombinedLedger
        totalFunds += wlt.getBalance('Total')
    TypeError: unsupported operand type(s) for +=: 'int' and 'SwigPyObject'

    Traceback (most recent call last):
      File "ArmoryQt.py", line 4797, in handleCppNotification
        self.finishLoadBlockchainGUI()
      File "ArmoryQt.py", line 2437, in finishLoadBlockchainGUI
        self.createCombinedLedger()
      File "ArmoryQt.py", line 2510, in createCombinedLedger
        totalFunds += wlt.getBalance('Total')
    TypeError: unsupported operand type(s) for +=: 'int' and 'SwigPyObject'
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    A new block arrives, and kicks the main tx window into life, tx details don't work. Still no balances. Block height is still "Offline"

    Code:
    New Block:  455196
    (ERROR) Traceback (most recent call last):
      File "ArmoryQt.py", line 4825, in handleCppNotification
        self.createCombinedLedger()
      File "ArmoryQt.py", line 2510, in createCombinedLedger
        totalFunds += wlt.getBalance('Total')
    TypeError: unsupported operand type(s) for +=: 'int' and 'SwigPyObject'

    Traceback (most recent call last):
      File "ArmoryQt.py", line 4825, in handleCppNotification
        self.createCombinedLedger()
      File "ArmoryQt.py", line 2510, in createCombinedLedger
        totalFunds += wlt.getBalance('Total')
    TypeError: unsupported operand type(s) for +=: 'int' and 'SwigPyObject'
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/armorymodels.py", line 81, in data
        dispStr = coin2str(bal, maxZeros=2)
      File "/home/user/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1322, in coin2str
        nBtc = float(nSatoshi) / float(ONE_BTC)
    TypeError: float() argument must be a string or a number
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.
    swig/python detected a memory leak of type 'uint64_t *', no destructor found.

    The memory leak error is repeated hundreds of times, edited for brevity


    Edit: dbLog.txt has this as the last line, the rest is normal stuff I believe

    Code:
    -ERROR - 1488326155: (BitcoinP2P.cpp:926) caught SocketError exception in processDataStackThread: POLLNVAL in readFromSocketThread


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 01, 2017, 12:22:42 AM
    --snip--
    Are you using the latest dev? If so, I think it is currently unstable. Goatpig was working on some fixes to the socket (related to that dblog error you posted) and I don't think they are completely done yet (something about edge cases).


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 01, 2017, 07:04:45 AM
    Should be good now. Make sure to make clean and autogen again, quite a lot of stuff has changed. Also make sure the submodule is up to date.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 01, 2017, 12:23:30 PM
    Should the git submodule update command not produce some delta feedback in respect of the changes ? I got a new prompt with nothing. Do I need to make clean first?


    Edit: some idiot forgot to git checkout dev before loading the submodule. Move along...


    Title: Re: 0.96 preliminary testing
    Post by: Ente on March 01, 2017, 03:31:35 PM
    Did you run
    Code:
    git submodule init
    git submodule update
    before attempting to build? If not, do that first.

    That did the trick, thank you.
    It all ran through smoothly, as far as I can see.
    I now get a GUI, but only a rotating wheel:

    Code:
    python /opt/BitcoinArmory/ArmoryQt.py --armorydb-ip=192.168.0.1 --armorydb-port=9001

    Code:
    (ERROR) ArmoryUtils.py:1230 - Error getting system details:
    Traceback (most recent call last):
      File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1228, in <module>
        SystemSpecs = GetSystemDetails()
      File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1223, in GetSystemDetails
        out.HddAvailB = getHddSize(BTC_HOME_DIR)    / (1024**3)
      File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1220, in getHddSize
        s = os.statvfs(adir)
    OSError: [Errno 2] No such file or directory: '/home/user/.bitcoin/'
    (ERROR) ArmoryUtils.py:1231 - Skipping.
    (ERROR) ArmoryUtils.py:3741 - Unsupported language  specified. Defaulting to English (en)
    (WARNING) ArmoryQt.py:1790 - DB is already running
    -ERROR - 1488381598: (DataObject.h:285) exhausted entries in Arguments object
    -ERROR - 1488381598: (SwigClient.cpp:61) exhausted entries in Arguments object

    No idea why the DB would be already running, I only see that one process running.
    Anything I can do on my side?

    Cheers,

    Ente


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 01, 2017, 07:05:05 PM
    Should the git submodule update command not produce some delta feedback in respect of the changes ? I got a new prompt with nothing. Do I need to make clean first?

    It should. I'm not an expert with submodules though, first time trying it.

    There are other ways to get the submodules to update with a command from the top most repo:

    http://stackoverflow.com/questions/1030169/easy-way-pull-latest-of-all-submodules

    Otherwise, the "brute force" method is to git pull in the submodule repo. Once I'll more familiar with it I'll update the readme with the most convenient method.

    Quote
    No idea why the DB would be already running, I only see that one process running.
    Anything I can do on my side?

    Quote
    No idea why the DB would be already running, I only see that one process running.

    That line just means the client successfully probed the ip:port you gave it for a listening socket and won't start a local DB.

    Quote
    Anything I can do on my side?

    Do you have some python or C++ in you?

    EDIT: also please detail your setup. If you dont have any coding in you, I'll make you a separate branch with extra verbose in there for you to paste back here.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 02, 2017, 02:25:01 AM
    - There seems to be some sort of repo cloning issue. Every time I've cloned onto my Ubuntu VM, the FCGI subproject never downloads. I got around it by manually downloading the code and copying it over. Still, something's up, and I'm not sure what it is. (OSX is fine.)
    When you clone, run
    Code:
    git submodule init
    git submodule update
    to get the fcgi submodule

    Thanks. That did the trick. I wonder if there's a way to update this. Anyway....

    These errors are fixed in dev

    Thanks. Seems like dev is getting a bit more stable. There are still some problems on Linux, though. (I've been sending some testnet coins throughout the day.)

    - Coin Control seems to be broken. I have to specify which UTXOs I want to use, otherwise Armory complains. I can get the exact message if you need it.
    - After ~7-8 blocks come in, Armory seems to stop picking up new blocks even though Core keeps chugging along. No messages on the command line. When I close, I have to force quit. The blocks seem to be picked up upon restart.
    - While it's just a wild hunch, I suspect the C++ and Python wallet code is out of sync. Is there any way to reset the C++ side, similar to Rebuild & Rescan? (I typically just nuke the DB directory and let Armory rebuild.)
    - I'm still seeing a couple of errors on the command line.

    Code:
    (ERROR) ArmoryUtils.py:3741 - Unsupported language  specified. Defaulting to English (en)

    Code:
    (ERROR) ArmoryQt.py:2129 - ***WARNING: Wallet could not be loaded: /home/droark/.armory/testnet3/armory_22LowGmee_.WatchOnly.wallet (skipping)
    Traceback (most recent call last):
      File "ArmoryQt.py", line 2089, in loadWalletsAndSettings
        reportProgress=reportProgress)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/Timer.py", line 99, in inner
        ret = func(*args, **kwargs)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 2110, in readWalletFile
        self.unpackHeader(wltdata)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 1997, in unpackHeader
        self.unpackWalletFlags(binUnpacker)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 1929, in unpackWalletFlags
        raise isMSWallet('Cannot Open MS Wallets')
    isMSWallet: Cannot Open MS Wallets


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 02, 2017, 06:59:45 AM
    - Coin Control seems to be broken. I have to specify which UTXOs I want to use, otherwise Armory complains. I can get the exact message if you need it.

    Please do

    Quote
    - After ~7-8 blocks come in, Armory seems to stop picking up new blocks even though Core keeps chugging along. No messages on the command line. When I close, I have to force quit. The blocks seem to be picked up upon restart.

    Try to narrow it down. I'll try to reproduce on my end. Feel free to add verbose if you got an idea of where it's happening.

    Quote
    Code:
    (ERROR) ArmoryUtils.py:3741 - Unsupported language  specified. Defaulting to English (en)

    This is a false positive from the translation PR. I'm guessing it should set the default the first time, which it isn't doing.

    Quote
    Code:
    (ERROR) ArmoryQt.py:2129 - ***WARNING: Wallet could not be loaded: /home/droark/.armory/testnet3/armory_22LowGmee_.WatchOnly.wallet (skipping)
    Traceback (most recent call last):
      File "ArmoryQt.py", line 2089, in loadWalletsAndSettings
        reportProgress=reportProgress)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/Timer.py", line 99, in inner
        ret = func(*args, **kwargs)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 2110, in readWalletFile
        self.unpackHeader(wltdata)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 1997, in unpackHeader
        self.unpackWalletFlags(binUnpacker)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 1929, in unpackWalletFlags
        raise isMSWallet('Cannot Open MS Wallets')
    isMSWallet: Cannot Open MS Wallets

    That's quorum's MS wallets, don't cheat now =D


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 02, 2017, 04:37:29 PM
    • Editing tx comments from main window yielded QString::arg: 1 argument(s) missing in Add %2 %2:
    • Using the wallet filters produced overlapping or incomplete results accompanied by -INFO  - 1487508653: (SocketObject.cpp:517) POLLIN recv return 0

    Fixed

    yep (both)

    Quote
    A little messing around with the "Use only selected UTXOs" option ended up with a bunch of  AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel' with differing tracebacks, followed by the fee adjustment failing altogether. Clicking Send! in that state produced an Insufficient Fee dialog with this text featuring "Your specified fee results in a rate of %d satoshis per byte/b>. This is much lower than the median satoshi/byte rate of %s BTC"

    Can't reproduce the coin control thing, you're gonna have to narrow it down. I got some other bug on the fee part that may cover what you found, more on that when that fix is out.

    So, I can reliably reproduce the issue:

    • Choose an output in Coin Control dialog
    • Click MAX amount button
    • Complete receiving address field
    • Click the Preview button (the box that contains the fee/tx size info continues to read "N/A", instead of the actual info)

    This error is produced....

    Code:
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1577, in execSendBtc
        self.wltAddrModel.reset()
    AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel'

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1577, in execSendBtc
        self.wltAddrModel.reset()
    AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel'
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1577, in execSendBtc
        self.wltAddrModel.reset()
    AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel'

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1577, in execSendBtc
        self.wltAddrModel.reset()
    AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel'

    .... plus this dialog appears when clicking Preview Tx:

    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.


    Both the Create Wallet button and dropdown selection yields this:

    Fixed

    There's more....

    Create New is good now, but Delete Wallet produces this.....

    Code:
    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1577, in execSendBtc
        self.wltAddrModel.reset()
    AttributeError: 'DlgWalletDetails' object has no attribute 'wltAddrModel'
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 4089, in <lambda>
        rmWalletSlot = lambda: self.removeWallet(wlt)
      File "/home/user/BitcoinArmory/qtdialogs.py", line 4167, in removeWallet
        self.main.removeWalletFromApplication(wltID)
      File "ArmoryQt.py", line 2843, in removeWalletFromApplication
        self.walletMap[wltID].unregisterWallet()
    AttributeError: 'PyBtcWallet' object has no attribute 'unregisterWallet'

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 4089, in <lambda>
        rmWalletSlot = lambda: self.removeWallet(wlt)
      File "/home/user/BitcoinArmory/qtdialogs.py", line 4167, in removeWallet
        self.main.removeWalletFromApplication(wltID)
      File "ArmoryQt.py", line 2843, in removeWalletFromApplication
        self.walletMap[wltID].unregisterWallet()
    AttributeError: 'PyBtcWallet' object has no attribute 'unregisterWallet'


    ...the wallet is deleted, but only after shutdown/restart




    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 02, 2017, 05:59:21 PM
    Transaction details won't open.

    Traceback:
    Code:
    Traceback (most recent call last):
      File "ArmoryQt.py", line 3290, in showContextMenuLedger
        self.showLedgerTx()
      File "ArmoryQt.py", line 3267, in showLedgerTx
        DlgDispTxInfo( pytx, self.walletMap[wltID], self, self, txtime=txtime).exec_()
      File "/home/andy/bitcoin/BitcoinArmory/qtdialogs.py", line 5571, in __init__
        self.txInModel = TxInDispModel(pytx, self.data[FIELDS.InList], self.main)
      File "/home/andy/bitcoin/BitcoinArmory/armorymodels.py", line 1125, in __init__
        dispInfo = self.main.getDisplayStringForScript(script, 60)
      File "ArmoryQt.py", line 4763, in getDisplayStringForScript
        prefIDOverAddr, lblTrunc, lastTrunc)
      File "/home/andy/bitcoin/BitcoinArmory/armoryengine/UserAddressUtils.py", line 172, in getDisplayStringForScript
        if iterWlt.hasScrAddr(scrAddr):
      File "/home/andy/bitcoin/BitcoinArmory/armoryengine/PyBtcWallet.py", line 538, in hasScrAddr
        return self.cppWallet.hasScrAddr(scrAddr)
      File "/home/andy/bitcoin/BitcoinArmory/CppBlockUtils.py", line 3727, in hasScrAddr
        return _CppBlockUtils.WalletContainer_hasScrAddr(self, scrAddr)
    RuntimeError: invalid char in b58 string


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 02, 2017, 07:35:18 PM
    ...the wallet is deleted, but only after shutdown/restart

    I'm aware of this one, pissed me off at one point so I left it on the back burner. Will fix the rest, dunno about this one atm, high cost to reward ratio for something that can be done by just deleting the underlying file manually and restarting the client.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 02, 2017, 10:09:09 PM
    - Coin Control seems to be broken. I have to specify which UTXOs I want to use, otherwise Armory complains. I can get the exact message if you need it.

    Please do

    I can't seem to reproduce this right now. However, the fee window is broken. If I tell it I want a flat fee, the actual fee is different. For example, if I want a fee of 0.0001 BTC, Armory actually wants it to be 0.00011576 BTC (45.05 sat/B). I have to tell it 0.00008638 BTC (38.91 sat/B). I then have to tell Armory to use something like 0.00008362 BTC in order for the real fee to be 0.0001 BTC. This is the latest dev build.

    Quote
    Quote
    - After ~7-8 blocks come in, Armory seems to stop picking up new blocks even though Core keeps chugging along. No messages on the command line. When I close, I have to force quit. The blocks seem to be picked up upon restart.

    Try to narrow it down. I'll try to reproduce on my end. Feel free to add verbose if you got an idea of where it's happening.

    I left it overnight and saw a network error on the command line. Unfortunately, I didn't save it. :( This was long after Armory stopped accepting blocks. Nothing's in the Python logs, and the C++ logs are garbled junk for some reason. I'll keep an eye out.

    Quote
    Quote
    Code:
    (ERROR) ArmoryUtils.py:3741 - Unsupported language  specified. Defaulting to English (en)

    This is a false positive from the translation PR. I'm guessing it should set the default the first time, which it isn't doing.

    Yeah. Something doesn't seem to be set, or at least sticking.

    Quote
    Quote
    Code:
    (ERROR) ArmoryQt.py:2129 - ***WARNING: Wallet could not be loaded: /home/droark/.armory/testnet3/armory_22LowGmee_.WatchOnly.wallet (skipping)
    Traceback (most recent call last):
      File "ArmoryQt.py", line 2089, in loadWalletsAndSettings
        reportProgress=reportProgress)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/Timer.py", line 99, in inner
        ret = func(*args, **kwargs)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 2110, in readWalletFile
        self.unpackHeader(wltdata)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 1997, in unpackHeader
        self.unpackWalletFlags(binUnpacker)
      File "/home/droark/Projects/BitcoinArmory/armoryengine/PyBtcWallet.py", line 1929, in unpackWalletFlags
        raise isMSWallet('Cannot Open MS Wallets')
    isMSWallet: Cannot Open MS Wallets

    That's quorum's MS wallets, don't cheat now =D

    Oops. :)


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 03, 2017, 01:36:16 AM
    Transaction details won't open.

    Traceback:
    Code:
    Traceback (most recent call last):
      File "ArmoryQt.py", line 3290, in showContextMenuLedger
        self.showLedgerTx()
      File "ArmoryQt.py", line 3267, in showLedgerTx
        DlgDispTxInfo( pytx, self.walletMap[wltID], self, self, txtime=txtime).exec_()
      File "/home/andy/bitcoin/BitcoinArmory/qtdialogs.py", line 5571, in __init__
        self.txInModel = TxInDispModel(pytx, self.data[FIELDS.InList], self.main)
      File "/home/andy/bitcoin/BitcoinArmory/armorymodels.py", line 1125, in __init__
        dispInfo = self.main.getDisplayStringForScript(script, 60)
      File "ArmoryQt.py", line 4763, in getDisplayStringForScript
        prefIDOverAddr, lblTrunc, lastTrunc)
      File "/home/andy/bitcoin/BitcoinArmory/armoryengine/UserAddressUtils.py", line 172, in getDisplayStringForScript
        if iterWlt.hasScrAddr(scrAddr):
      File "/home/andy/bitcoin/BitcoinArmory/armoryengine/PyBtcWallet.py", line 538, in hasScrAddr
        return self.cppWallet.hasScrAddr(scrAddr)
      File "/home/andy/bitcoin/BitcoinArmory/CppBlockUtils.py", line 3727, in hasScrAddr
        return _CppBlockUtils.WalletContainer_hasScrAddr(self, scrAddr)
    RuntimeError: invalid char in b58 string

    Works for me. Is there only a few select transactions it cannot display?


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 03, 2017, 03:26:05 AM
    Transaction details won't open.

    Traceback:
    Code:
    Traceback (most recent call last):
      File "ArmoryQt.py", line 3290, in showContextMenuLedger
        self.showLedgerTx()
      File "ArmoryQt.py", line 3267, in showLedgerTx
        DlgDispTxInfo( pytx, self.walletMap[wltID], self, self, txtime=txtime).exec_()
      File "/home/andy/bitcoin/BitcoinArmory/qtdialogs.py", line 5571, in __init__
        self.txInModel = TxInDispModel(pytx, self.data[FIELDS.InList], self.main)
      File "/home/andy/bitcoin/BitcoinArmory/armorymodels.py", line 1125, in __init__
        dispInfo = self.main.getDisplayStringForScript(script, 60)
      File "ArmoryQt.py", line 4763, in getDisplayStringForScript
        prefIDOverAddr, lblTrunc, lastTrunc)
      File "/home/andy/bitcoin/BitcoinArmory/armoryengine/UserAddressUtils.py", line 172, in getDisplayStringForScript
        if iterWlt.hasScrAddr(scrAddr):
      File "/home/andy/bitcoin/BitcoinArmory/armoryengine/PyBtcWallet.py", line 538, in hasScrAddr
        return self.cppWallet.hasScrAddr(scrAddr)
      File "/home/andy/bitcoin/BitcoinArmory/CppBlockUtils.py", line 3727, in hasScrAddr
        return _CppBlockUtils.WalletContainer_hasScrAddr(self, scrAddr)
    RuntimeError: invalid char in b58 string

    Works for me. Is there only a few select transactions it cannot display?
    Yes. It can't display any transactions that I received within the last day or two. Older transactions are fine, but not my newer ones which recently confirmed or are still unconfirmed.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 04, 2017, 08:22:05 PM
    I expect you're aware of this goatpig;  Wallet Properties -> Receive Coins button produces

    Code:
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1550, in getNewAddress
        if DlgNewAddressDisp(self.wlt, self, self.main, loading).exec_():
      File "/home/user/BitcoinArmory/qtdialogs.py", line 2242, in __init__
        addrStr = self.addr.getAddrStr()
      File "/home/user/BitcoinArmory/armoryengine/PyBtcAddress.py", line 161, in getAddrStr
        raise Exception("Deprecated, get address from mirror wallet instead")
    Exception: Deprecated, get address from mirror wallet instead

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1550, in getNewAddress
        if DlgNewAddressDisp(self.wlt, self, self.main, loading).exec_():
      File "/home/user/BitcoinArmory/qtdialogs.py", line 2242, in __init__
        addrStr = self.addr.getAddrStr()
      File "/home/user/BitcoinArmory/armoryengine/PyBtcAddress.py", line 161, in getAddrStr
        raise Exception("Deprecated, get address from mirror wallet instead")
    Exception: Deprecated, get address from mirror wallet instead



    Title: Re: 0.96 preliminary testing
    Post by: Ente on March 04, 2017, 10:22:18 PM
    Should the git submodule update command not produce some delta feedback in respect of the changes ? I got a new prompt with nothing. Do I need to make clean first?

    It should. I'm not an expert with submodules though, first time trying it.

    There are other ways to get the submodules to update with a command from the top most repo:

    http://stackoverflow.com/questions/1030169/easy-way-pull-latest-of-all-submodules

    Otherwise, the "brute force" method is to git pull in the submodule repo. Once I'll more familiar with it I'll update the readme with the most convenient method.

    Quote
    No idea why the DB would be already running, I only see that one process running.
    Anything I can do on my side?

    Quote
    No idea why the DB would be already running, I only see that one process running.

    That line just means the client successfully probed the ip:port you gave it for a listening socket and won't start a local DB.

    Quote
    Anything I can do on my side?

    Do you have some python or C++ in you?

    EDIT: also please detail your setup. If you dont have any coding in you, I'll make you a separate branch with extra verbose in there for you to paste back here.


    Sorry for the late reply.
    Unfortunately no, no developer here. I might identify simple typos after staring half an hour at the code, but that's about it.
    I'll gladly paste extra-verbose  output here.
    I am running Armory on Debian 8, kernel 4.4.38-11, in a Qubes/Xen VM.

    Ente


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 04, 2017, 11:37:32 PM
    Update: The fee bug I mentioned earlier (ask for 0.0001 BTC fee, get 0.00011576 BTC) is gone. Still, the Coin Control bug is present. I have to explicitly choose UTXOs, otherwise no fee is selected and Armory warns me that I'm trying to send a Tx with no fees.

    Code:
    Your transaction comes with a fee rate of 0.00 satoshi/Byte. 
    This is much lower than the median fee rate of 50 satoshi/Byte.

    Are you absolutely sure that you want to send with this fee? If you do not want to proceed with this fee rate, click "No".

    Nothing seems to be in the Python (armorylog.txt) or C++/DB (dbLog.txt) logs. If I futz around enough with the UTXO set, I can reset it to the entire set and get a fee.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 04, 2017, 11:43:36 PM
    Update: The fee bug I mentioned earlier (ask for 0.0001 BTC fee, get 0.00011576 BTC) is gone. Still, the Coin Control bug is present. I have to explicitly choose UTXOs, otherwise no fee is selected and Armory warns me that I'm trying to send a Tx with no fees.

    Code:
    Your transaction comes with a fee rate of 0.00 satoshi/Byte. 
    This is much lower than the median fee rate of 50 satoshi/Byte.

    Are you absolutely sure that you want to send with this fee? If you do not want to proceed with this fee rate, click "No".

    Nothing seems to be in the Python (armorylog.txt) or C++/DB (dbLog.txt) logs. If I futz around enough with the UTXO set, I can reset it to the entire set and get a fee.

    Can you give me a step by step of how you get to that?


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 05, 2017, 01:38:12 AM
    I expect you're aware of this goatpig;  Wallet Properties -> Receive Coins button produces

    Code:
    (ERROR) Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1550, in getNewAddress
        if DlgNewAddressDisp(self.wlt, self, self.main, loading).exec_():
      File "/home/user/BitcoinArmory/qtdialogs.py", line 2242, in __init__
        addrStr = self.addr.getAddrStr()
      File "/home/user/BitcoinArmory/armoryengine/PyBtcAddress.py", line 161, in getAddrStr
        raise Exception("Deprecated, get address from mirror wallet instead")
    Exception: Deprecated, get address from mirror wallet instead

    Traceback (most recent call last):
      File "/home/user/BitcoinArmory/qtdialogs.py", line 1550, in getNewAddress
        if DlgNewAddressDisp(self.wlt, self, self.main, loading).exec_():
      File "/home/user/BitcoinArmory/qtdialogs.py", line 2242, in __init__
        addrStr = self.addr.getAddrStr()
      File "/home/user/BitcoinArmory/armoryengine/PyBtcAddress.py", line 161, in getAddrStr
        raise Exception("Deprecated, get address from mirror wallet instead")
    Exception: Deprecated, get address from mirror wallet instead

    Fixed


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 05, 2017, 01:39:04 AM
    Sorry for the late reply.
    Unfortunately no, no developer here. I might identify simple typos after staring half an hour at the code, but that's about it.
    I'll gladly paste extra-verbose  output here.
    I am running Armory on Debian 8, kernel 4.4.38-11, in a Qubes/Xen VM.

    Ente

    I'll be looking into this soon, sit tight.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 05, 2017, 09:59:50 AM
    - After ~7-8 blocks come in, Armory seems to stop picking up new blocks even though Core keeps chugging along. No messages on the command line. When I close, I have to force quit. The blocks seem to be picked up upon restart.

    I've pushed some code that should fix this at least on the db side. Can you observe both client and db, and in particular if the client drops the connection with the db, is the db still fine?


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 05, 2017, 12:53:37 PM
    I expect you're aware of this goatpig;  Wallet Properties -> Receive Coins button produces

    Code:
     (...)

    Fixed

    Possibly this issue is known/WIP also....

    • Click Receive Coins
    • Click Address Type
    • Select and apply Compressed nested P2SH key

    QR code & text remains the P2PKH address. Instead of generating one P2PKH, 100 addresses are generated/displayed, and no compressed P2SH addresses at all.


    Edit(Edit): A 2nd attempt at creating a compressed nested P2SH worked The compressed P2SH nested keys only appear in Wallet Properties after closing and reopening it (Wallet Properties dialog)


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 05, 2017, 06:30:02 PM
    Update: The fee bug I mentioned earlier (ask for 0.0001 BTC fee, get 0.00011576 BTC) is gone. Still, the Coin Control bug is present. I have to explicitly choose UTXOs, otherwise no fee is selected and Armory warns me that I'm trying to send a Tx with no fees.

    Code:
    Your transaction comes with a fee rate of 0.00 satoshi/Byte. 
    This is much lower than the median fee rate of 50 satoshi/Byte.

    Are you absolutely sure that you want to send with this fee? If you do not want to proceed with this fee rate, click "No".

    Nothing seems to be in the Python (armorylog.txt) or C++/DB (dbLog.txt) logs. If I futz around enough with the UTXO set, I can reset it to the entire set and get a fee.

    Can you give me a step by step of how you get to that?

    Okay, now that I've played around with it, the real bug is if the amount being sent is really low. If it's >= 0.1 BTC, you're good. If it's <0.1 BTC, the fee is calculated at times but not at others. Here are examples. I'm not sure there's a pattern to this. Some may work at times but not at others, especially once you start putting in values and then trying new values.

    0.09 - No fee
    0.001 - Fee
    0.01 - No fee
    0.011 - No fee
    0.0111 - Fee
    0.021 - Fee
    0.02 - No fee
    0.020 - Fee


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 06, 2017, 01:24:50 AM
    I expect you're aware of this goatpig;  Wallet Properties -> Receive Coins button produces

    Code:
     (...)

    Fixed

    Possibly this issue is known/WIP also....

    • Click Receive Coins
    • Click Address Type
    • Select and apply Compressed nested P2SH key

    QR code & text remains the P2PKH address. Instead of generating one P2PKH, 100 addresses are generated/displayed, and no compressed P2SH addresses at all.


    Edit(Edit): A 2nd attempt at creating a compressed nested P2SH worked The compressed P2SH nested keys only appear in Wallet Properties after closing and reopening it (Wallet Properties dialog)

    Fixed

    Update: The fee bug I mentioned earlier (ask for 0.0001 BTC fee, get 0.00011576 BTC) is gone. Still, the Coin Control bug is present. I have to explicitly choose UTXOs, otherwise no fee is selected and Armory warns me that I'm trying to send a Tx with no fees.

    Code:
    Your transaction comes with a fee rate of 0.00 satoshi/Byte. 
    This is much lower than the median fee rate of 50 satoshi/Byte.

    Are you absolutely sure that you want to send with this fee? If you do not want to proceed with this fee rate, click "No".

    Nothing seems to be in the Python (armorylog.txt) or C++/DB (dbLog.txt) logs. If I futz around enough with the UTXO set, I can reset it to the entire set and get a fee.

    Can you give me a step by step of how you get to that?

    Okay, now that I've played around with it, the real bug is if the amount being sent is really low. If it's >= 0.1 BTC, you're good. If it's <0.1 BTC, the fee is calculated at times but not at others. Here are examples. I'm not sure there's a pattern to this. Some may work at times but not at others, especially once you start putting in values and then trying new values.

    0.09 - No fee
    0.001 - Fee
    0.01 - No fee
    0.011 - No fee
    0.0111 - Fee
    0.021 - Fee
    0.02 - No fee
    0.020 - Fee

    Can't reproduce. This has to do with your utxo mix. Try singling it out with coin selection.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 06, 2017, 01:48:36 AM
    Can't reproduce. This has to do with your utxo mix. Try singling it out with coin selection.

    As best I can tell, this happens when a wallet's unspent outputs include P2PKH and P2SH-P2PK. (I'm still playing with P2SH-P2WPKH.) If I choose between P2PKH or P2SH-P2PK, the fee code seems to work fine.

    Regarding the spend dialog, I have noticed something a bit confusing. The dialog, when showing where the coins will go (including the fee), says it'll spend X BTC from the wallet. This includes change sent back into the wallet. I guess this is technically accurate, since the UTXOs are being spent. I think it'd make more sense if it was just the coins leaving the wallet altogether (i.e., everything but the change address and any wallet addresses receiving coins).


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 06, 2017, 11:44:48 AM
    Sorry for the late reply.
    Unfortunately no, no developer here. I might identify simple typos after staring half an hour at the code, but that's about it.
    I'll gladly paste extra-verbose  output here.
    I am running Armory on Debian 8, kernel 4.4.38-11, in a Qubes/Xen VM.

    Ente

    My test worked right away. I'm using a Win8 guest with a Ubuntu 16.04 guest through VBox. As soon as I managed to get nginx through, the client on the host found the server on the guest.

    For now I'm going to assume something is off in your configuration. For starters, run sanity checks on your server. Next, post your config file and let's go over it.


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 08, 2017, 04:41:32 AM
    We have managed to get Armory fully translated into another language, German. Please help use test that the translations are working properly by switching to the other languages and by using the German translations to find any missing strings or bugs with displaying the strings or dialog boxes.

    Note that some Usermode strings are not translated. That has been fixed and the translations will be applied once the translation resources are updated later.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 08, 2017, 08:31:34 AM
    Having some trouble getting the OSX build going. I'm getting the following on the command line.

    Code:
    Doug-Armory:MacOS droark$ ./Armory
    Traceback (most recent call last):
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/ArmoryQt.py", line 43, in <module>
        import CppBlockUtils as Cpp
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/CppBlockUtils.py", line 17, in <module>
        _CppBlockUtils = swig_import_helper()
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/CppBlockUtils.py", line 16, in swig_import_helper
        return importlib.import_module('_CppBlockUtils')
      File "/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    ImportError: dlopen(/Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/_CppBlockUtils.so, 2): Symbol not found: __ZTVN8CryptoPP6SHA256E
      Referenced from: /Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/_CppBlockUtils.so
      Expected in: flat namespace
     in /Users/droark/Projects/private-goatpig-BitcoinArmory/osxbuild/workspace/Armory.app/Contents/MacOS/py/usr/lib/armory/_CppBlockUtils.so

    Poking around online, somebody mentioned that otool -l was a good thing to look at when analyzing libraries. Here's what I see for the version of _CppBlockUtils.so I'm building, then the one for a functioning 0.95.1 library. As best I can tell, the new Make system is installing some code and telling the system to look for it in a given location. This won't work for redistribution of generated binaries. The new version also seems to want to load libc++ instead of libstdc++. (This isn't necessarily bad. It's just a possible sign that wires are getting crossed somewhere.) If anybody has any suggestions, I'd appreciate hearing them.

    Code:
    Mach header
          magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
     0xfeedfacf 16777223          3  0x00           6    15       1968 0x00118085
    Load command 0
          cmd LC_SEGMENT_64
      cmdsize 712
      segname __TEXT
       vmaddr 0x0000000000000000
       vmsize 0x000000000026d000
      fileoff 0
     filesize 2543616
      maxprot 0x00000007
     initprot 0x00000005
       nsects 8
        flags 0x0
    Section
      sectname __text
       segname __TEXT
          addr 0x00000000000008c0
          size 0x00000000001b3a60
        offset 2240
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x80000400
     reserved1 0
     reserved2 0
    Section
      sectname __stubs
       segname __TEXT
          addr 0x00000000001b4320
          size 0x0000000000000876
        offset 1786656
         align 2^1 (2)
        reloff 0
        nreloc 0
         flags 0x80000408
     reserved1 0 (index into indirect symbol table)
     reserved2 6 (size of stubs)
    Section
      sectname __stub_helper
       segname __TEXT
          addr 0x00000000001b4b98
          size 0x0000000000000ddc
        offset 1788824
         align 2^2 (4)
        reloff 0
        nreloc 0
         flags 0x80000400
     reserved1 0
     reserved2 0
    Section
      sectname __const
       segname __TEXT
          addr 0x00000000001b5980
          size 0x0000000000006329
        offset 1792384
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __gcc_except_tab
       segname __TEXT
          addr 0x00000000001bbcac
          size 0x0000000000066c98
        offset 1817772
         align 2^2 (4)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __cstring
       segname __TEXT
          addr 0x0000000000222950
          size 0x0000000000040a3c
        offset 2238800
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000002
     reserved1 0
     reserved2 0
    Section
      sectname text_env
       segname __TEXT
          addr 0x0000000000263390
          size 0x0000000000002f9f
        offset 2503568
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __unwind_info
       segname __TEXT
          addr 0x0000000000266330
          size 0x0000000000006cd0
        offset 2515760
         align 2^2 (4)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Load command 1
          cmd LC_SEGMENT_64
      cmdsize 712
      segname __DATA
       vmaddr 0x000000000026d000
       vmsize 0x0000000000015000
      fileoff 2543616
     filesize 86016
      maxprot 0x00000007
     initprot 0x00000003
       nsects 8
        flags 0x0
    Section
      sectname __got
       segname __DATA
          addr 0x000000000026d000
          size 0x0000000000000df0
        offset 2543616
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000006
     reserved1 361 (index into indirect symbol table)
     reserved2 0
    Section
      sectname __nl_symbol_ptr
       segname __DATA
          addr 0x000000000026ddf0
          size 0x0000000000000010
        offset 2547184
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000006
     reserved1 807 (index into indirect symbol table)
     reserved2 0
    Section
      sectname __la_symbol_ptr
       segname __DATA
          addr 0x000000000026de00
          size 0x0000000000000b48
        offset 2547200
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000007
     reserved1 809 (index into indirect symbol table)
     reserved2 0
    Section
      sectname __mod_init_func
       segname __DATA
          addr 0x000000000026e948
          size 0x0000000000000020
        offset 2550088
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000009
     reserved1 0
     reserved2 0
    Section
      sectname __const
       segname __DATA
          addr 0x000000000026e970
          size 0x0000000000001480
        offset 2550128
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __data
       segname __DATA
          addr 0x000000000026fdf0
          size 0x0000000000011368
        offset 2555376
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __common
       segname __DATA
          addr 0x0000000000281158
          size 0x0000000000000148
        offset 0
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000001
     reserved1 0
     reserved2 0
    Section
      sectname __bss
       segname __DATA
          addr 0x00000000002812a0
          size 0x00000000000009f1
        offset 0
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000001
     reserved1 0
     reserved2 0
    Load command 2
          cmd LC_SEGMENT_64
      cmdsize 72
      segname __LINKEDIT
       vmaddr 0x0000000000282000
       vmsize 0x00000000000b0000
      fileoff 2629632
     filesize 719392
      maxprot 0x00000007
     initprot 0x00000001
       nsects 0
        flags 0x0
    Load command 3
              cmd LC_ID_DYLIB
          cmdsize 64
             name /usr/local/lib/libCppBlockUtils.0.dylib (offset 24)
       time stamp 1 Wed Dec 31 16:00:01 1969
          current version 1.0.0
    compatibility version 1.0.0
    Load command 4
                cmd LC_DYLD_INFO_ONLY
            cmdsize 48
         rebase_off 2629632
        rebase_size 3872
           bind_off 2633504
          bind_size 19216
      weak_bind_off 2652720
     weak_bind_size 58856
      lazy_bind_off 2711576
     lazy_bind_size 13000
         export_off 2724576
        export_size 69880
    Load command 5
         cmd LC_SYMTAB
     cmdsize 24
      symoff 2800024
       nsyms 7581
      stroff 2926000
     strsize 423024
    Load command 6
                cmd LC_DYSYMTAB
            cmdsize 80
          ilocalsym 0
          nlocalsym 5546
         iextdefsym 5546
         nextdefsym 1418
          iundefsym 6964
          nundefsym 617
             tocoff 0
               ntoc 0
          modtaboff 0
            nmodtab 0
       extrefsymoff 0
        nextrefsyms 0
     indirectsymoff 2921320
      nindirectsyms 1170
          extreloff 0
            nextrel 0
          locreloff 0
            nlocrel 0
    Load command 7
         cmd LC_UUID
     cmdsize 24
        uuid 1C707878-1774-3DF0-AF9E-069AD838387D
    Load command 8
          cmd LC_VERSION_MIN_MACOSX
      cmdsize 16
      version 10.12
          sdk 10.12
    Load command 9
          cmd LC_SOURCE_VERSION
      cmdsize 16
      version 0.0
    Load command 10
              cmd LC_LOAD_DYLIB
          cmdsize 64
             name /usr/local/lib/libcryptopp.0.dylib (offset 24)
       time stamp 2 Wed Dec 31 16:00:02 1969
          current version 1.0.0
    compatibility version 1.0.0
    Load command 11
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name /usr/lib/libSystem.B.dylib (offset 24)
       time stamp 2 Wed Dec 31 16:00:02 1969
          current version 1238.0.0
    compatibility version 1.0.0
    Load command 12
              cmd LC_LOAD_DYLIB
          cmdsize 48
             name /usr/lib/libc++.1.dylib (offset 24)
       time stamp 2 Wed Dec 31 16:00:02 1969
          current version 307.4.0
    compatibility version 1.0.0
    Load command 13
          cmd LC_FUNCTION_STARTS
      cmdsize 16
      dataoff 2794456
     datasize 5568
    Load command 14
          cmd LC_DATA_IN_CODE
      cmdsize 16
      dataoff 2800024
     datasize 0

    Code:
    Mach header
          magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
     0xfeedfacf 16777223          3  0x00           6    13       1880 0x00118085
    Load command 0
          cmd LC_SEGMENT_64
      cmdsize 712
      segname __TEXT
       vmaddr 0x0000000000000000
       vmsize 0x0000000000304000
      fileoff 0
     filesize 3162112
      maxprot 0x00000007
     initprot 0x00000005
       nsects 8
        flags 0x0
    Section
      sectname __text
       segname __TEXT
          addr 0x0000000000001710
          size 0x0000000000207ab2
        offset 5904
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x80000400
     reserved1 0
     reserved2 0
    Section
      sectname __stubs
       segname __TEXT
          addr 0x00000000002091c2
          size 0x0000000000000810
        offset 2134466
         align 2^1 (2)
        reloff 0
        nreloc 0
         flags 0x80000408
     reserved1 0 (index into indirect symbol table)
     reserved2 6 (size of stubs)
    Section
      sectname __stub_helper
       segname __TEXT
          addr 0x00000000002099d4
          size 0x00000000000009c0
        offset 2136532
         align 2^2 (4)
        reloff 0
        nreloc 0
         flags 0x80000400
     reserved1 0
     reserved2 0
    Section
      sectname __const
       segname __TEXT
          addr 0x000000000020a3a0
          size 0x000000000000d396
        offset 2139040
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __gcc_except_tab
       segname __TEXT
          addr 0x0000000000217738
          size 0x000000000006be8c
        offset 2193208
         align 2^2 (4)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __cstring
       segname __TEXT
          addr 0x00000000002835d0
          size 0x0000000000037464
        offset 2635216
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000002
     reserved1 0
     reserved2 0
    Section
      sectname __unwind_info
       segname __TEXT
          addr 0x00000000002baa34
          size 0x0000000000009628
        offset 2861620
         align 2^2 (4)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __eh_frame
       segname __TEXT
          addr 0x00000000002c4060
          size 0x000000000003ff98
        offset 2900064
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Load command 1
          cmd LC_SEGMENT_64
      cmdsize 712
      segname __DATA
       vmaddr 0x0000000000304000
       vmsize 0x0000000000039000
      fileoff 3162112
     filesize 221184
      maxprot 0x00000007
     initprot 0x00000003
       nsects 8
        flags 0x0
    Section
      sectname __got
       segname __DATA
          addr 0x0000000000304000
          size 0x0000000000001410
        offset 3162112
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000006
     reserved1 344 (index into indirect symbol table)
     reserved2 0
    Section
      sectname __nl_symbol_ptr
       segname __DATA
          addr 0x0000000000305410
          size 0x0000000000000010
        offset 3167248
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000006
     reserved1 986 (index into indirect symbol table)
     reserved2 0
    Section
      sectname __la_symbol_ptr
       segname __DATA
          addr 0x0000000000305420
          size 0x0000000000000ac0
        offset 3167264
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000007
     reserved1 988 (index into indirect symbol table)
     reserved2 0
    Section
      sectname __mod_init_func
       segname __DATA
          addr 0x0000000000305ee0
          size 0x0000000000000020
        offset 3170016
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000009
     reserved1 0
     reserved2 0
    Section
      sectname __const
       segname __DATA
          addr 0x0000000000305f00
          size 0x000000000000aa98
        offset 3170048
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __data
       segname __DATA
          addr 0x00000000003109a0
          size 0x0000000000028c60
        offset 3213728
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000000
     reserved1 0
     reserved2 0
    Section
      sectname __bss
       segname __DATA
          addr 0x0000000000339600
          size 0x0000000000002c11
        offset 0
         align 2^4 (16)
        reloff 0
        nreloc 0
         flags 0x00000001
     reserved1 0
     reserved2 0
    Section
      sectname __common
       segname __DATA
          addr 0x000000000033c218
          size 0x00000000000000e8
        offset 0
         align 2^3 (8)
        reloff 0
        nreloc 0
         flags 0x00000001
     reserved1 0
     reserved2 0
    Load command 2
          cmd LC_SEGMENT_64
      cmdsize 72
      segname __LINKEDIT
       vmaddr 0x000000000033d000
       vmsize 0x00000000001f1000
      fileoff 3383296
     filesize 2033464
      maxprot 0x00000007
     initprot 0x00000001
       nsects 0
        flags 0x0
    Load command 3
              cmd LC_ID_DYLIB
          cmdsize 48
             name ../_CppBlockUtils.so (offset 24)
       time stamp 1 Wed Dec 31 16:00:01 1969
          current version 0.0.0
    compatibility version 0.0.0
    Load command 4
                cmd LC_DYLD_INFO_ONLY
            cmdsize 48
         rebase_off 3383296
        rebase_size 6336
           bind_off 3389632
          bind_size 7520
      weak_bind_off 3397152
     weak_bind_size 191560
      lazy_bind_off 3588712
     lazy_bind_size 8592
         export_off 3597304
        export_size 177440
    Load command 5
         cmd LC_SYMTAB
     cmdsize 24
      symoff 3783528
       nsyms 27180
      stroff 4223736
     strsize 1193024
    Load command 6
                cmd LC_DYSYMTAB
            cmdsize 80
          ilocalsym 0
          nlocalsym 23534
         iextdefsym 23534
         nextdefsym 3300
          iundefsym 26834
          nundefsym 346
             tocoff 0
               ntoc 0
          modtaboff 0
            nmodtab 0
       extrefsymoff 0
        nextrefsyms 0
     indirectsymoff 4218408
      nindirectsyms 1332
          extreloff 0
            nextrel 0
          locreloff 0
            nlocrel 0
    Load command 7
         cmd LC_UUID
     cmdsize 24
        uuid DED14546-5296-33D8-9291-939C52F55583
    Load command 8
          cmd LC_VERSION_MIN_MACOSX
      cmdsize 16
      version 10.7
          sdk 10.11
    Load command 9
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name /usr/lib/libstdc++.6.dylib (offset 24)
       time stamp 2 Wed Dec 31 16:00:02 1969
          current version 104.1.0
    compatibility version 7.0.0
    Load command 10
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name /usr/lib/libSystem.B.dylib (offset 24)
       time stamp 2 Wed Dec 31 16:00:02 1969
          current version 1226.10.1
    compatibility version 1.0.0
    Load command 11
          cmd LC_FUNCTION_STARTS
      cmdsize 16
      dataoff 3774744
     datasize 8784
    Load command 12
          cmd LC_DATA_IN_CODE
      cmdsize 16
      dataoff 3783528
     datasize 0


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 11, 2017, 07:14:34 PM
    I'm not quite sure what the status is with the wallet format. It's obviously changed, but which changes are working now? (even on testnet in the case of PSWPKH)

    It's very much a nit, but the format version string still reads 1.35 when I create a new wallet, and it seems rather like the old wallet format has it's address chain folded into the new format somehow? I WANT A NUMBER (even if it's 1.35.0.0.0.1 ;D)

    Can I delete the old wallet files, or are they the file system representation of the address chain for the new format?


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 11, 2017, 07:57:01 PM
    I'm not quite sure what the status is with the wallet format. It's obviously changed, but which changes are working now? (even on testnet in the case of PSWPKH)

    It's very much a nit, but the format version string still reads 1.35 when I create a new wallet, and it seems rather like the old wallet format has it's address chain folded into the new format somehow? I WANT A NUMBER (even if it's 1.35.0.0.0.1 ;D)

    Can I delete the old wallet files, or are they the file system representation of the address chain for the new format?

    The mirror wallets use the stub for the new wallets. The stub doesn't have support for encryption, comments nor BIP32/39/44. Completing the wallet format will be the focus of 0.97

    The C++ mirror wallets are only a watching only copy of the 1.35 Python wallets. Mirror wallets are necessary to manage the nested P2SH address types. They also serve as the interface to the DB. The Python wallets are only used by the GUI (which does not understand C++ wallets yet) from now on.

    The Python wallets still hold your private keys, that currently never hit the C++ wallet code. The private keys are exposed to the new C++ signer when spending from a nested P2SH output. P2PKH signing only uses the old code path. Both paths share the same underlying crypto code under the hood, that part has not changed.

    The tx messaging format is still the same, so P2PKH outputs created by 0.96 can still be signed by older versions all the way down to 0.92. Older signers won't be able to make sense of any nested address type however.

    Coin selection and tx composition has been rewritten in C++ to accommodate for satoshi/byte fees and tx size prediction. It should also provide improved privacy and leverage the witness data weighting discount. This is the only part of the code path that was forcibly changed from previous versions. You can opt out of the other changes by just sticking to P2PKH outputs, in which case the new wallet code will not be involved at all in signing nor verification.

    You cannot delete the old files, these still are your wallets, even the WO versions. The GUI still operates on those. Since the new code only serves as an interface to augment the Python wallets, it does not call for a new version number. Also, while this may be confusing, wallet versioning in Armory actually refers to the address derivation scheme iteration, not the wallet design as a whole. That sheme part has not changed.

    As a matter of fact, the Python wallet code has not changed, you can verify this by browsing the commit history. Only new conditional code paths have been added to handle nested address types in the GUI. None of that data is written to the Python wallets, it is saved with the C++ wallet container intsead. While you cannot delete your old wallet files, you can delete any .lmdb file at no risk of data loss. These are generated on when missing on every start. The fully fledged new wallets will use another extension.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 11, 2017, 09:12:10 PM
    The mirror wallets use the stub for the new wallets. The stub doesn't have support for encryption, comments nor BIP32/39/44.


    But the mirror spec does support BIP32/39/44? I received my Trezor recently, and would like it working with Armory ASAP

    The C++ mirror wallets are only a watching only copy of the 1.35 Python wallets. Mirror wallets are necessary to manage the nested P2SH address types. They also serve as the interface to the DB. The Python wallets are only used by the GUI (which does not understand C++ wallets yet) from now on.

    The Python wallets still hold your private keys, that currently never hit the C++ wallet code. The private keys are exposed to the new C++ signer when spending from a nested P2SH output. P2PKH signing only uses the old code path. Both paths share the same underlying crypto code under the hood, that part has not changed.

    The tx messaging format is still the same, so P2PKH outputs created by 0.96 can still be signed by older versions all the way down to 0.92. Older signers won't be able to make sense of any nested address type however.


    So 0.96 signing will be recommended for compatibility from now on? And the recommended signing version should freeze at 0.97 assuming the wallet format is finalised in that version?

    Coin selection and tx composition has been rewritten in C++ to accommodate for satoshi/byte fees and tx size prediction. It should also provide improved privacy and leverage the witness data weighting discount. This is the only part of the code path that was forcibly changed from previous versions. You can opt out of the other changes by just sticking to P2PKH outputs, in which case the new wallet code will not be involved at all in signing nor verification.


    How does the rewrite improve privacy?

    You cannot delete the old files, these still are your wallets, even the WO versions. The GUI still operates on those. Since the new code only serves as an interface to augment the Python wallets, it does not call for a new version number. Also, while this may be confusing, wallet versioning in Armory actually refers to the address derivation scheme iteration, not the wallet design as a whole. That sheme part has not changed.


    What exactly does the scheme comprise, in comparison to the overall format? It sounds like the scheme is simply a component of the format.

    As a matter of fact, the Python wallet code has not changed, you can verify this by browsing the commit history. Only new conditional code paths have been added to handle nested address types in the GUI. None of that data is written to the Python wallets, it is saved with the C++ wallet container intsead. While you cannot delete your old wallet files, you can delete any .lmdb file at no risk of data loss. These are generated on when missing on every start. The fully fledged new wallets will use another extension.


    I have to say I like that you've done it this way, it provides flexibility and hence options to the user, allowing each user to use their own judgement of the possible risks of the changes to the code and act accordingly (which you no doubt intended).


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 12, 2017, 12:35:28 AM
    But the mirror spec does support BIP32/39/44?
    The C++ wallets will support BIP 32/44 at some point, as the goal is to move off of the python wallets over to the C++ wallets which will be the entirely new format. The plan is for that to support BIP 32/44, Segwit, and compressed keys. I think it may also support BIP 39 and P2SH, but I'm not sure about that as it's up to goatpig.

    I received my Trezor recently, and would like it working with Armory ASAP
    Armory would need to have hardware wallet support for that to work, and that is something I am planning on doing after the new wallet stuff is finished.

    So 0.96 signing will be recommended for compatibility from now on? And the recommended signing version should freeze at 0.97 assuming the wallet format is finalised in that version?
    Yes. 0.96 is the new recommended offline signer version as it will have support for segwit and the other output types.

    How does the rewrite improve privacy?
    There were changes to coin selection which optimize for privacy, i.e. sticking to inputs from the same address instead of any input in the wallet.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 12, 2017, 06:35:45 AM
    But the mirror spec does support BIP32/39/44? I received my Trezor recently, and would like it working with Armory ASAP

    No, there is support for that yet.

    Quote
    So 0.96 signing will be recommended for compatibility from now on? And the recommended signing version should freeze at 0.97 assuming the wallet format is finalised in that version?

    If you use anything but P2PKH, you will have to use 0.96. After 0.97 will come out, the signer shouldn't change for the foreseeable future

    Quote
    How does the rewrite improve privacy?

    The main change is that the former coin selection code had to run on a flat fee. The new code is built to operate on just a fee/byte hint, so it outperforms the original code just by design alone (had to add a lot of code to predict tx size). It performs better with flat fee inputs as well since it evaluates its fee/byte effect.

    The coin-age mechanic does not reflect tx priority anymore, its impact on the coin selection calculation has been greatly reduced. This was the primary metric that allowed the former code to consolidate utxos. The conditions for that consolidation were very restrictive too.

    Since the new code can predict tx size and adjust fee/byte if necessary, the conditions for consolidations are much laxer. Basically, as long as it can maintain the best privacy score, the code will actively try to consume more utxos than it creates. Utxo consolidation is a long term improvement on privacy. You won't see a benefit from it unless you wallet is highly fragmented.

    The other changes are around change output obfuscation.

    The rework around fee/byte support and size prediction is more flexible than the previous code. While the previous code did try to pick outputs that obfuscated the change value, this code has an option ("Adjust Fee") that will pick outputs and adapt the fee to align the decimal point between spend value and change value when using fee/byte. While this change has no effect on flat fees, it is particularly efficient with fee/byte.

    Since the mirror wallets can handle 2 new P2SH types, it can also match change script type with spend script type. The previous code forced all outputs to P2PKH (the only type it could make sense of). With the new code, in auto change mode (you can modify that in the settings dialog), it will match the change script type with the spend script type. If you don't set it on auto (you can choose to force a specific change script type, say if you want all change to be SW), it will warn you when it differs from the spend script type.

    Lastly, all these changes properly apply to explicit utxo sets created through coin control.

    Some of the new code may inflate your fee to improve privacy. The fee inflation is currently hard coded to not increase your fee/byte by more than 10%. I may add an option in the future to modify that margin.

    Quote
    What exactly does the scheme comprise, in comparison to the overall format? It sounds like the scheme is simply a component of the format.

    The format defines how the wallet is handled on disk, error checking and encryption parameters, as well as which cryptographic asset it manages and how. The derivation scheme only defines how cryptographic assets are derived from the seed. In this particular case, Armory 1.35c should be compared to BIP32/44, and the Python wallets (which are unversioned) should be compared to the C++ wallets.

    Quote
    I have to say I like that you've done it this way, it provides flexibility and hence options to the user, allowing each user to use their own judgement of the possible risks of the changes to the code and act accordingly (which you no doubt intended).

    Don't want to potentially split the user base by forcing a new wallet code on the community. There are people out there still using 0.93 for whatever reason. At any rate, SegWit is opt-in, so the code around it should be opt-in too. This doesn't apply to coin selection though, that stuff needed reworked around fee/byte.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 12, 2017, 09:32:02 PM
    Something that just occurred to me

    Is it not the case that "native" (i.e. not nested P2SH) P2WPKH and P2WSH address formats will appear subsequent to Segwit activation? And I say "appear", as they're AFAIA unspecified at this point.

    Any reasonable expectation that the un-nested Witness address specifications will be available to implement before 0.97? Surely the wallet format needs to be change to incorporate them, although presumably not the signer? Will the wallet format actually stabilise at 97.1 or 0.98, in other words?


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 12, 2017, 10:30:59 PM
    Hello. If anybody out there can compile Armory on Macs, I'd appreciate a little backup. goatpig checked in a fix today that seems to have gotten Armory going again on Macs. :) (It had been broken since the Autotools stuff got checked in.) There are still some compilation issues, though, and probably some runtime issues. I'll PR some changes I had baking before goatpig's fix. More eyeballs and testers would be appreciated, especially once I check in the changes I'd like to make.

    Thanks.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 13, 2017, 05:11:33 PM
    Something that just occurred to me

    Is it not the case that "native" (i.e. not nested P2SH) P2WPKH and P2WSH address formats will appear subsequent to Segwit activation? And I say "appear", as they're AFAIA unspecified at this point.

    Any reasonable expectation that the un-nested Witness address specifications will be available to implement before 0.97? Surely the wallet format needs to be change to incorporate them, although presumably not the signer? Will the wallet format actually stabilise at 97.1 or 0.98, in other words?

    sipa has a proposal:

    https://gist.github.com/sipa/c291da162f6ef8cc770bfc7f015c6c49

    It will be discussed at the s3nd meet among other topics:

    https://s3nd.org/berlin2017

    I can't tell whether this will be ready for 0.97, but I expect it will be by 0.98.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 13, 2017, 06:53:40 PM
    Ah, so there is at least a proposal for a spec (I seem to remember there was an old one that was withdrawn)

    Last wallet question

    Have you guys tested the compressed P2SH keys on testnet? Any problems? I'd quite like to begin using them, it seems incredibly anti-social to continue to use uncompressed keys if their implementation is considered safe to use now.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 13, 2017, 07:35:24 PM
    Have you guys tested the compressed P2SH keys on testnet? Any problems? I'd quite like to begin using them, it seems incredibly anti-social to continue to use uncompressed keys if their implementation is considered safe to use now.

    Both nested script types have been tested on the testnet. I cross compiled 0.96 for my RPi yesterday and will test the nested compressed key script on the mainnet with my own coins sometimes before I post the first testing builds.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 13, 2017, 09:33:23 PM
    Just submitted a PR (https://github.com/goatpig/BitcoinArmory/pull/187) that should squash the final-ish bug keeping the OSX build from getting off the ground. It's still not quite working, though. While the DB is being populated after the initial block/Tx scan, Armory seems to get confused and never gets past the scan stage, despite Armory appearing to still be scanning. I really don't see anything else in the logs, unfortunately.

    Code:
    -INFO  - 1489439887: (SocketObject.cpp:516) POLLIN recv return 0


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 14, 2017, 07:38:30 AM
    While the DB is being populated after the initial block/Tx scan, Armory seems to get confused and never gets past the scan stage, despite Armory appearing to still be scanning. I really don't see anything else in the logs, unfortunately.

    Code:
    -INFO  - 1489439887: (SocketObject.cpp:516) POLLIN recv return 0

    Use some print statements in the client side callback thread, figure out what signal is not going through:

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/SwigClient.cpp#L894

    It should receive one case of CBO_BDM_Ready after the scan is complete. Before that, it should be all CBO_progress packets. If it gets those properly, then something is chocking in this scope:

    https://github.com/goatpig/BitcoinArmory/blob/master/ArmoryQt.py#L5834


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 15, 2017, 03:05:02 AM
    While the DB is being populated after the initial block/Tx scan, Armory seems to get confused and never gets past the scan stage, despite Armory appearing to still be scanning. I really don't see anything else in the logs, unfortunately.

    Code:
    -INFO  - 1489439887: (SocketObject.cpp:516) POLLIN recv return 0

    Use some print statements in the client side callback thread, figure out what signal is not going through:

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/SwigClient.cpp#L894

    It should receive one case of CBO_BDM_Ready after the scan is complete. Before that, it should be all CBO_progress packets. If it gets those properly, then something is chocking in this scope:

    https://github.com/goatpig/BitcoinArmory/blob/master/ArmoryQt.py#L5834

    Thanks. Will do. Pushed some more build stuff in the meantime. The build process should be reasonably solid at this point.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 16, 2017, 01:22:14 AM
    While the DB is being populated after the initial block/Tx scan, Armory seems to get confused and never gets past the scan stage, despite Armory appearing to still be scanning. I really don't see anything else in the logs, unfortunately.

    Code:
    -INFO  - 1489439887: (SocketObject.cpp:516) POLLIN recv return 0

    Use some print statements in the client side callback thread, figure out what signal is not going through:

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/SwigClient.cpp#L894

    It should receive one case of CBO_BDM_Ready after the scan is complete. Before that, it should be all CBO_progress packets. If it gets those properly, then something is chocking in this scope:

    https://github.com/goatpig/BitcoinArmory/blob/master/ArmoryQt.py#L5834

    Just checked. No CBO_BDM_Ready message comes in. Also discovered that FINISH_LOAD_BLOCKCHAIN_ACTION is never seen in ArmoryQt.py either. Looked at the code a little bit but didn't have much time to sift through it. Where should I look next?


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 16, 2017, 09:49:59 AM
    Just checked. No CBO_BDM_Ready message comes in. Also discovered that FINISH_LOAD_BLOCKCHAIN_ACTION is never seen in ArmoryQt.py either.

    FINISH_LOAD_BLOCKCHAIN_ACTION is triggered by CBO_BDM_Ready.

    Quote
    Where should I look next?

    On the DB side, the signal is emitted here:

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_Server.cpp#L1420

    There is a lot of code running before it gets to this point. This is the point at which the signal is being prepared to be sent over the socket. My intuition tells me the issue is taking place after that event. A simple print statement should determine that the code always gets past this point (or just looking at the DB log, if it gets past "enabling zero conf", the scan was successful)

    If the issue is happening before this, I'll lay out the details of the code behind that signal for you to observe.

    Assuming it gets past this point, my first and foremost culprit would be packet mangling over the socket. The code will not choke over a bad packet, it will simply ignore it. The first thing you should do is log the packets you get from the DB.

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/SwigClient.cpp#L987

    retval is a string, you can either output it to stdout or save it to a file. Let the code run and show me the packet log for analysis.

    EDIT:

    Here is my packet log for comparison:

    Code:
    -INFO  - 1489659588: (..\SwigClient.cpp:988) 040c4244565f50726f67726573730704617e578b9b30ef3f000000004d00000000
    -INFO  - 1489659588: (..\SwigClient.cpp:988) 040c4244565f50726f6772657373070431bfabc54d98ef3f180000004e00000000
    -INFO  - 1489659588: (..\SwigClient.cpp:988) 040c4244565f50726f677265737307020000000000000000ffffffff0000000000
    -INFO  - 1489659588: (..\SwigClient.cpp:988) 040c4244565f50726f677265737307053ff99c0248ecef3fffffffff3131be7100
    -INFO  - 1489659589: (..\SwigClient.cpp:988) 040c4244565f50726f67726573730705000000000000f03f000000001eb6407300
    -INFO  - 1489659589: (..\SwigClient.cpp:988) 040c4244565f50726f677265737307060000000000000000000000000000000000
    -INFO  - 1489659589: (..\SwigClient.cpp:988) 040c4244565f50726f677265737307070000000000000000ffffffff0000000000
    -INFO  - 1489659589: (..\SwigClient.cpp:988) 040942444d5f526561647902fee8b01000
    BDM is ready!

    The last packet is the BDM_ready signal. This 42444d5f5265616479 stands for BDM_Ready in hexits, the last part is a 4bytes integer with its header (02).


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 16, 2017, 06:21:56 PM
    Thanks. I looked into some of this late last night. You wrote a much more detailed version of what I found.

    Here's an excerpt from dbLog.txt. I think there's something wrong with how the file's written, as it crashed my normal text editor! (A bug in my text editor, I know, but the actual log is still mangled under other text editors. ~550 KB worth of ^@ can be seen at the front of my log under vim and nano.) While I haven't confirmed yet, I suspect something's going wrong inside this call (https://github.com/goatpig/BitcoinArmory/blob/9921f3e79a7fe1c95b0e15caec0bce1ecde0890b/cppForSwig/BDM_Server.cpp#L1387). In any event, it seems like the registerWalletMutex_ lock gets screwed up along the way and leaves ArmoryDB hanging.

    Code:
    --------ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR - - - - - - - 14896841641489684164148968416414896841641489684164- 148968416414896841641489684164: : : : : : : (((((: (((BlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cpp:::::BlockchainScanner.cpp::271271271271271:271271271) ) ) ) ) ) ) ) raw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hash



    raw data does not match expected block hash





    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 16, 2017, 08:17:32 PM
    The error in your code snippet is the scan process failing to grab valid block data (it's failing the merkle hash check in basically every thread).

    Quote
    I suspect something's going wrong inside this call

    Is the promise failing to signal the future or the code leading to set the promise failing? This is surprising, that code didn't change at all from 0.95 to 0.96. Have you considered building with XCode 8?


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 16, 2017, 09:19:16 PM
    The error in your code snippet is the scan process failing to grab valid block data (it's failing the merkle hash check in basically every thread).

    Interesting.

    Quote
    Quote
    I suspect something's going wrong inside this call (https://github.com/goatpig/BitcoinArmory/blob/9921f3e79a7fe1c95b0e15caec0bce1ecde0890b/cppForSwig/BDM_Server.cpp#L1387)

    Is the promise failing to signal the future or the code leading to set the promise failing? This is surprising, that code didn't change at all from 0.95 to 0.96. Have you considered building with XCode 8?

    Okay, I confirmed that, for whatever reasons, the wait() call causes things to go sideways, or at least gets stuck due to registerAddressBatch() never truly finishing. The code doesn't crash. It just never seems to get past the wait. Right now, I'm compiling on an OSX 10.12/Xcode 8 combo, as that's the easiest for me. (10.11/7.3.1, the combo I use for release builds, requires me to use a VM. It seems to fail in a similar manner, though, based off a version I ran a few days ago.)

    Just in case I've missed something, I've copied & pasted the entire ArmoryDB log. Maybe the cookie error means something? Hard to say since I don't know this code.

    Code:
    Log file opened at 1489698375: /Users/droark/Library/Application Support/Armory/testnet3/dbLog.txt
    -INFO  - 1489698375: (main.cpp:23) Running on 8 threads
    -INFO  - 1489698375: (main.cpp:24) Ram usage level: 4
    -INFO  - 1489698375: (BlockUtils.cpp:907) blkfile dir: /Users/droark/Library/Application Support/Bitcoin/testnet3/blocks
    -INFO  - 1489698375: (BlockUtils.cpp:908) lmdb dir: /Users/droark/Library/Application Support/Armory/testnet3/databases
    -INFO  - 1489698375: (lmdb_wrapper.cpp:388) Opening databases...
    -INFO  -- ERROR 1489698375- : (BitcoinP2P.cpp:937) Connected to Bitcoin node
    1489698375: (nodeRPC.cpp:150) unexpected cookie file content
    -ERROR - 1489698375: (nodeRPC.cpp:150) unexpected cookie file content
    -INFO  - 1489698375: (BlockUtils.cpp:1091) Executing: doInitialSyncOnLoad
    -INFO  - 1489698375: (DatabaseBuilder.cpp:169) Reading headers from db
    -INFO  - 1489698375: (BDM_Server.cpp:957) registered bdv: af128699cd6352d8c225
    -INFO  - 1489698387: (DatabaseBuilder.cpp:208) Found 1093946 headers in db
    -WARN  - 1489698390: (BDM_supportClasses.cpp:1741) running 0 zc parser threads
    -INFO  - 1489698392: (DatabaseBuilder.cpp:51) updating HEADERS db
    -INFO  - 1489698392: (DatabaseBuilder.cpp:477) Found next block after skipping 4610bytes
    -INFO  - 1489698393: (DatabaseBuilder.cpp:268) parsed block file #73
    -DEBUG - 1489698393: (Blockchain.cpp:242) Organizing chain
    -INFO  - 1489698393: (DatabaseBuilder.cpp:56) updated HEADERS db in 0.582443s
    -INFO  - 1489698393: (DatabaseBuilder.cpp:106) scanning new blocks from #1093925 to #1093925
    -INFO  - 1489698393: (BlockchainScanner.cpp:650) scanned from height #1093925 to #1093925
    -INFO  - 1489698393: (DatabaseBuilder.cpp:156) scanned new blocks in 0.044219s
    -INFO  - 1489698393: (DatabaseBuilder.cpp:160) init db in 13.0463s
    -INFO  - 1489698393: (BlockUtils.cpp:1208) Enabling zero-conf tracking
    -INFO  - 1489698393: (BDM_supportClasses.cpp:372) Starting address registration process
    --------ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR - - - - - - - - 14896983931489698393148969839314896983931489698393148969839314896983931489698393: : : : : : : : ((((((((BlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cppBlockchainScanner.cpp::::::::271271271271271271271271) ) ) ) ) ) ) ) raw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hashraw data does not match expected block hash


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 16, 2017, 09:22:16 PM
    cookie error means you aren't running your node with server=1. Maybe that has something to do with the whole process? That's the only new code somehow related to this (it uses the same notification pipeline).


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 16, 2017, 09:37:11 PM
    Yep, exactly the symptoms I experienced (cookie error) before achow101 set it straight. Needs to be in the 0.96 release notes, and if possible written to bitcoin.conf automatically (IMO)


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 16, 2017, 09:49:03 PM
    Yep, exactly the symptoms I experienced (cookie error) before achow101 set it straight. Needs to be in the 0.96 release notes, and if possible written to bitcoin.conf automatically (IMO)

    Code just needs fixed to not nuke everything else on failure. As for the automated bitcoin.conf modification, that introduces the credential issues from before that I don't want to deal with at all.

    I don't mind that the RPC may fail to setup, I mind that it takes the entire ship on its way down.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 16, 2017, 10:08:31 PM
    Yep, exactly the symptoms I experienced (cookie error) before achow101 set it straight. Needs to be in the 0.96 release notes, and if possible written to bitcoin.conf automatically (IMO)

    Agreed (although a bitcoin.conf auto-write worries me). It didn't make my main problem go away but it did fix that particular error.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 16, 2017, 10:15:07 PM
    Hmmm, can't help but agree. I say it though as I'm anticipating constant creation of new & potentially long threads where this issue is troubleshooted, until round about the end of time itself

    :D


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 17, 2017, 01:22:42 AM
    cookie error means you aren't running your node with server=1. Maybe that has something to do with the whole process? That's the only new code somehow related to this (it uses the same notification pipeline).

    Gaaaaaaah. I thought I had deleted the DB earlier and started from scratch. I hadn't. Once I did, Armory scanned everything just fine.

    Just curious, is ArmoryDB supposed to take awhile to shut down? It takes something like 20-30 seconds to shut down on my machine, even though the CPU isn't active for most of that time. Of course, it's an improvement over 0.95, where it never shut down, period. :)


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 17, 2017, 06:53:04 AM
    Have you guys tested the compressed P2SH keys on testnet? Any problems? I'd quite like to begin using them, it seems incredibly anti-social to continue to use uncompressed keys if their implementation is considered safe to use now.

    Both nested script types have been tested on the testnet. I cross compiled 0.96 for my RPi yesterday and will test the nested compressed key script on the mainnet with my own coins sometimes before I post the first testing builds.

    Any news on this?


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 17, 2017, 07:26:22 AM
    It takes something like 20-30 seconds to shut down on my machine, even though the CPU isn't active for most of that time. Of course, it's an improvement over 0.95, where it never shut down, period. :)

    This is still (imo) the FCGI lib taking a while to shutdown. Again, you can try to profile that stuff. Here is a list of all the threads that need end for the process to exit gracefully:

    Code:
    1) client callback thread

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_Server.cpp#L1617

    2) client control thread

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_Server.cpp#L1427

    3) FCGI loop

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_Server.cpp#L1155

    4) server control thread

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_Server.cpp#L991

    5) server garbage collector

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_Server.cpp#L1042

    6) zero conf process threads

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_supportClasses.cpp#L1741

    7) zc parser control thread

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_supportClasses.cpp#L1001

    8 ) node P2P connect loop

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BitcoinP2P.cpp#L868

    9) DB control thread

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/BDM_mainthread.cpp#L128

    10) main thread

    https://github.com/goatpig/BitcoinArmory/blob/dev/cppForSwig/main.cpp#L12

    This list assumes you got out of the initial scan. Otherwise, it gets a lot more complicated. Just exiting the main thread should be enough to kill the process, although that alone won't guarantee a gracious shutdown. The most important thing to do during shutdown is to properly close the LMDB objects.

    Quote
    Any news on this?

    Sorry, busy IRL, will get to it sometimes before the Sunday.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 17, 2017, 10:00:30 AM
    Sorry, busy IRL, will get to it sometimes before the Sunday.

    No real rush, like I said, I'd just prefer to start using compressed keys for everyone's sake. On that note, will compressed keys become the default key chain in the new wallets? And nested P2WPKH subsequently? I'm hardly expecting a no, I'm just wondering if you think that might cause an issue I'm not seeing.


    A mild Bug in 0.96


    The scroll bar magic (that traverses super long balance lists) becomes stuck if I try to get beyond a certain proportion of the balance entries.

    I'm just clicking, holding the click, and dragging the bar all the way to the base of the bar's range. Releasing the click and re-dragging to the base of the bar gets me to the actual definitively oldest tx, but trying to do the same trick on the way back to the top doesn't work; the magic itself begins to loop to the sticking point, as if that's the most recent transaction. Simply using the 'Goto' button's 'Top' hyperlink style thingy remedies this bottom->top sticking.

    Edit - A separate issue is possibly triggered by this; after provoking this bug, when a new block comes in, Armory sends the tx entry highlight/selection bar ~ 60 tx entries lower down the list, where it would ordinarily remain scrolled to the top and de-highlight the entry that was highlighted before the block arrived. If that makes sense!



    The server=1/RPC cookie issue

    If the absence of server=1 can be detected, why not get Armory to produce an Error dialog box to tell the user how to deal with the issue? As I said, there'll be infinity threads about this if it's not handled at the software end somehow


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 17, 2017, 01:03:31 PM
    The server=1/RPC cookie issue

    If the absence of server=1 can be detected, why not get Armory to produce an Error dialog box to tell the user how to deal with the issue? As I said, there'll be infinity threads about this if it's not handled at the software end somehow
    Since the RPC stuff is now handled by the DB side, I imagine there's something that makes it difficult for an error on the DB end to trigger an error on the client end, although I am not sure. I can take a look and see if I can do anything about it this weekend.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 17, 2017, 01:40:00 PM
    Right, but the front end and the back end talk to each other. I guess it's a question of which you prefer, taking the time to change the code, or fielding alot of users getting the same problem in the subforum.

    If even droark isn't clued in enough to picked it up straight away, I'd predict ~ 75% of users will be wailing about it without checking the pre-existing 12+ frontpage threads here describing the same issue.


    Title: Re: 0.96 preliminary testing
    Post by: droark on March 17, 2017, 04:29:36 PM
    Have you guys tested the compressed P2SH keys on testnet? Any problems? I'd quite like to begin using them, it seems incredibly anti-social to continue to use uncompressed keys if their implementation is considered safe to use now.

    Both nested script types have been tested on the testnet. I cross compiled 0.96 for my RPi yesterday and will test the nested compressed key script on the mainnet with my own coins sometimes before I post the first testing builds.

    Any news on this?

    Just now saw this. I've done a few transactions on testnet. Nothing thorough by any means but no problems on my end, other than the fee code being a bit screwy for awhile. (I believe it was cleared up awhile back.)

    It takes something like 20-30 seconds to shut down on my machine, even though the CPU isn't active for most of that time. Of course, it's an improvement over 0.95, where it never shut down, period. :)

    This is still (imo) the FCGI lib taking a while to shutdown. Again, you can try to profile that stuff. Here is a list of all the threads that need end for the process to exit gracefully:

    Thanks. Will look when I get a chance.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 17, 2017, 06:43:45 PM
    No real rush, like I said, I'd just prefer to start using compressed keys for everyone's sake. On that note, will compressed keys become the default key chain in the new wallets? And nested P2WPKH subsequently? I'm hardly expecting a no, I'm just wondering if you think that might cause an issue I'm not seeing.

    There are 2 separate code paths for this:

    1) Requesting payment addresses. This defaults to P2PKH. I did not add an option to change the default in the settings dialog, I'll have to deal with it eventually.

    2) Change addresses. If left on auto, the code will try to match the spend script type. If all spend scripts are P2PKH, it will create a P2PKH change output and vice versa. When pay script types are mixed, auto will favor nested change types. In case of a SW tx, it will favor nested SW, otherwise nested P2PK.

    This helps privacy at the cost of converting to compressed keys (or eventually SW) by default. You can however force the change type default to whatever you want in the setting dialog. You will receive a warning about reduced privacy if your change type differs from the pay script type however.

    The drawbacks are 2 fold:

    You cannot sign for nested types with pre 0.96 signers, and you can't expect to see your funds by simply importing the private keys in another wallet software and expect to see the balance of the nested scripts. These probably don't scan for these P2SH variations. I will most likely mitigate that by offering disgruntled users an opportunity to scan their wallets against my DB on demand, to create a tx and move their coins out in one sweep.

    Quote
    The scroll bar magic (that traverses super long balance lists) becomes stuck if I try to get beyond a certain proportion of the balance entries.

    I'm just clicking, holding the click, and dragging the bar all the way to the base of the bar's range.

    This doesn't trigger the Qt signal for hitting the end of the list until after you release the bar. I'm not sure where to get the signal for that event (if there's even one). I was aware of that limitation when I wrote this code but the cost of just figuring out how to get a signal off of the scroll bar is too high to bother as it is. It may appear lazy, but I settled for the model's signal, which won't trigger until after user input is completed. Hence is works by releasing the scroll bar, just using the arrows, or rolling the mouse scroller.

    Quote
    If the absence of server=1 can be detected, why not get Armory to produce an Error dialog box to tell the user how to deal with the issue? As I said, there'll be infinity threads about this if it's not handled at the software end somehow

    I will eventually report the RPC status in the bottom right corner tooltip overlay. I don't intent to leave the bug there to begin with, it shouldn't prevent the DB from setting up.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 17, 2017, 09:59:54 PM
    I can't reproduce the server=1 issue, can someone lay out the exact steps?


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 17, 2017, 10:44:50 PM
    Do you mean that 0.96 connects the DB to the wallet without server=1 ? What sorcery is this? :D


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 17, 2017, 10:55:19 PM
    It does, whether the RPC works or not. The particular issue with the messed up cookie file is due to how the config file works with the testnet. When running against the testnet, Core still uses the .conf in the mainnet datadir to init, but will create the cookie file in the testnet datadir.


    Title: Re: 0.96 preliminary testing
    Post by: bvoid on March 25, 2017, 07:07:13 PM
    Goatpig is it possible to upload the Armory_0.96_win64.exe (beta) on the website? I can't transfer my coins because of the "the broadcast process failed unexpectedly" bug. Thanks! :)


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 25, 2017, 07:28:40 PM
    Goatpig is it possible to upload the Armory_0.96_win64.exe (beta) on the website? I can't transfer my coins because of the "the broadcast process failed unexpectedly" bug. Thanks! :)

    I understand your predicament but I can't yet push code that I don't believe is production ready. While you can build the code from source by pulling the dev branch, I am sorry but you will have to wait for signed binaries from me.

    Hopefully I'll have a test build out tomorrow. Otherwise, sometimes next week.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 26, 2017, 03:35:51 PM
    Pushed RBF.

    Everything under the hood works. The GUI is rudimentary however. Basically it does not yet sort out corner cases like RBF -> CPFP -> RBF.

    By design, conflicts between RBF and CPFP outputs are side stepped: CPFP and RBF are mutually exclusive. However, this isn't represented the GUI yet, which is the other part that needs polished before the UX is acceptable.

    As it stands, you can:

    - CPFP any eligible output correctly.
    - Create RBF transactions
    - CPFP an replacable output (say the change to your RBF spend)
    - RBF any eligible RBF output. However conflicts are not handled: you can for example pick a replaceable output from one tx and a replaceable output from a child tx to the first one. This is a conflicting set of outputs. The GUI does not implement conflict detection and handling yet, but the Tx will obviously be invalid.

    Once conflicts are handled the GUI, the code will be ready for testing releases. ETA Monday or Tuesday.

    I have no yet tested spending from nested scripts on the mainnet, so please stay away from these until I risk my own money with them first.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 26, 2017, 08:39:01 PM
    Builds, but dies before ArmoryDB launches with this:

    Code:
      def PyCreateAndSignTx_old(srcTxOuts, dstAddrsVals):
    (ERROR) Traceback (most recent call last):
      File "ArmoryQt.py", line 5848, in <module>
        checkForAlreadyOpen()
      File "ArmoryQt.py", line 5829, in checkForAlreadyOpen
        from armoryengine.ProcessMutex import PySide_ProcessMutex
    ImportError: No module named ProcessMutex

    Traceback (most recent call last):
      File "ArmoryQt.py", line 5848, in <module>
        checkForAlreadyOpen()
      File "ArmoryQt.py", line 5829, in checkForAlreadyOpen
        from armoryengine.ProcessMutex import PySide_ProcessMutex
    ImportError: No module named ProcessMutex


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 27, 2017, 11:44:54 AM
    I'm an idiot, forgot to push a file. Should work now.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 27, 2017, 02:38:53 PM
    All is well.

    What's the purpose of the RBF button on the Send form? I'm getting no addresses in the fields, whether I tick the RBF checkbox or not. Needs wallet 1.35c, or compressed keys? Or a different setting? (in Core maybe?)


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 27, 2017, 03:01:41 PM
    It works like the coin control dialog, but only lists RBF outputs. For an output to be listed there you need to

    1) Create a transaction with the RBF option checked.
    2) Have the transaction broadcast successful. All redeemed outputs should show in the RBF dialog.

    I guess I should rename the button to have it convey that meaning. The idea is that RBF and coin control are mutually exclusive (since coin control also lists CPFP outputs, and these will more often than not conflict with RBF outputs).

    If there is a demand for RBF to work with coin control, I'll look into that improvement in a later release.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 27, 2017, 03:10:36 PM
    Why not make it more direct? i.e. Right click eligible zero confs in the main tx window, a new (and probably simpler) dialog handles the fee bumping.

    Presumably bumping the fee on some inputs and not others is meaningless, as all inputs are children of the overall parent transaction, for which there is a single fee applied for every byte? Makes sense to me, especially now that age-related priority is deprecated and on it's way to retirement.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 27, 2017, 04:42:05 PM
    Why not make it more direct? i.e. Right click eligible zero confs in the main tx window, a new (and probably simpler) dialog handles the fee bumping.

    There will be an option to do that eventually but for now RBF is an expert feature.

    A bit of reasoning:

    1) A sole bump fee feature hinges on a few assumptions that won't be met half the time. If the user expects to be able to bump fees off of the ledger, it supposes all transactions are RBF by default. I do not intent to do this. RBF will remain an opt-in feature in Armory, and off by default. I will most likely allow people to change the default in the settings, and consider adding a warning message on low fee transactions to turn on RBF. But I won't just force the thing on.

    2) As a result, the whole bump off of the ledger part will be confusing. Either users will never use it (they would work with the outputs directly instead), or they turn to rely on the feature but end up confused when they fail to RBF.

    3) RBF is not the only way to "pull in" a transaction. CPFP can be used to that effect as well, albeit for a higher fee at the cost of more block space. I want to let people have the choice, which would mean implementing a "pull transaction" option to the fee bump feature. Not that I think it's a bad idea, but now there is a lot of extra GUI to implement, and I don't want to pigeon people into a single feature as a way out.

    4) How do I signal a transaction is eligible for replacement in the tx ledger? There is only so much room in the comment column (and text only gets you so far), nor is it very feasible to flash colors per line in these ledgers, and even that doesn't evidence what to do to bump the tx. Ideally a button just showing up on the particular line named "bump me!" would do the job. But I'm not sure the ledger model allows anything but text to be returned as entries to an index, so I can't go into this with a guarantee I can implement the model.

    5) Most importantly, I cant skip the coin control like RBF GUI, because it is the only way to cleanly evidence RBF entries in a zero conf chain, and which child zc gets knocked off by a replacement. And also because at its core RBF is a double spend feature, so it should be usable in that way. It's not my place to figure out how that will be useful, but Armory is a wallet for advanced users, so it shouldn't curtail people to a narrow UX. Given that this UI has to go in either way, I have to do it first.

    And before you argue this stuff won't happen, RBF is a fringe feature to begin with. You do not need this during regular operations, only when crazy stuff like a wild spam spike appears or the chain is being attacked, or you are trying to taint coins after a chain split. Who knows how convoluted things can get then. This is why RBF should be snafu proof from the get go.


    Title: Re: 0.96 preliminary testing
    Post by: Carlton Banks on March 27, 2017, 05:45:47 PM
    The way I imagined it was:

    Maintain the opt-in checkbox on the Send form, and create an overridden/inherited version of the right-click contextual menu that only presents "RBF" option for those transactions for which the opt-in had been stipulated in the Send form.

    I think I see what you're getting at with chains of zero-confs though, but is it not the case that doing it as I describe would force the user in such circumstances to figure out for themselves which dependent tx is holding the others up? i.e. it would force the user to take responsibility for setting their own fees, and discourage bad practices, like creating chains of dependent tx's with insufficient fees?

    Would making it easier in one way, yet making it harder feature to discover and understand in others, achieve less abuse of the RBF feature in practice?


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 29, 2017, 01:02:42 PM
    Every couple of hours, ArmoryDB disconnects and reconnects to my Bitcoin Core node for some reason. It hits a StopBlockingLoop exception in processDataStackThread but I am not sure why.

    I am running a build of Bitcoin Core's development branch, so it may be possible that something was changed for the next version of Core that is causing this error to occur. If that is the case, then this needs to be fixed so that we don't get a repeat of the "transaction timed out" errors.

    I put it in gdb and let it run until that exception was thrown. Here is the backtrace of when gdb stopped at the exception being thrown (I think this is the right place for it to stop):
    Code:
    #0  0x00007ffff78c58bd in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #1  0x00000000005db046 in BlockingStack<std::vector<unsigned char, std::allocator<unsigned char> > >::terminate (
        this=0x7fff9c000930, exceptptr=...) at ThreadSafeClasses.h:894
    #2  0x00000000005d0891 in BitcoinP2P::<lambda(std::vector<unsigned char, std::allocator<unsigned char> >, std::__exception_ptr::exception_ptr)>::operator()(std::vector<unsigned char, std::allocator<unsigned char> >, std::__exception_ptr::exception_ptr) const (__closure=0x7fff980008c0, socketdata=std::vector of length 0, capacity 0, ePtr=...)
        at BitcoinP2P.cpp:995
    #3  0x00000000005d3a4a in std::_Function_handler<bool(std::vector<unsigned char, std::allocator<unsigned char> >, std::__exception_ptr::exception_ptr), BitcoinP2P::pollSocketThread()::<lambda(std::vector<unsigned char, std::allocator<unsigned char> >, std::__exception_ptr::exception_ptr)> >::_M_invoke(const std::_Any_data &, <unknown type in /home/andy/bitcoin/BitcoinArmory/ArmoryDB, CU 0xa74053, DIE 0xaecb9d>, <unknown type in /home/andy/bitcoin/BitcoinArmory/ArmoryDB, CU 0xa74053, DIE 0xaecba2>) (__functor=...,
        __args#0=<unknown type in /home/andy/bitcoin/BitcoinArmory/ArmoryDB, CU 0xa74053, DIE 0xaecb9d>,
        __args#1=<unknown type in /home/andy/bitcoin/BitcoinArmory/ArmoryDB, CU 0xa74053, DIE 0xaecba2>)
        at /usr/include/c++/5/functional:1857
    #4  0x0000000000626085 in std::function<bool (std::vector<unsigned char, std::allocator<unsigned char> >, std::__exception_ptr::exception_ptr)>::operator()(std::vector<unsigned char, std::allocator<unsigned char> >, std::__exception_ptr::exception_ptr) const (this=0x7fffa3ffee30, __args#0=std::vector of length 0, capacity 0, __args#1=...)
        at /usr/include/c++/5/functional:2267
    #5  0x000000000061fd72 in BinarySocket::readFromSocketThread(int, std::function<bool (std::vector<unsigned char, std::allocator<unsigned char> >, std::__exception_ptr::exception_ptr)>) (this=0xbb77d0, sockfd=2147483647,
        callback=...) at SocketObject.cpp:378
    #6  0x000000000061f301 in BinarySocket::<lambda()>::operator()(void) const (__closure=0x7fff9c000b58)
        at SocketObject.cpp:216
    #7  0x0000000000625958 in std::_Bind_simple<BinarySocket::readFromSocket(SOCKET, ReadCallback)::<lambda()>()>::_M_invoke<>(std::_Index_tuple<>) (this=0x7fff9c000b58) at /usr/include/c++/5/functional:1531
    #8  0x00000000006255f6 in std::_Bind_simple<BinarySocket::readFromSocket(SOCKET, ReadCallback)::<lambda()>()>::operator()(void) (this=0x7fff9c000b58) at /usr/include/c++/5/functional:1520
    #9  0x000000000062547a in std::thread::_Impl<std::_Bind_simple<BinarySocket::readFromSocket(SOCKET, ReadCallback)::<lambda()>()> >::_M_run(void) (this=0x7fff9c000b40) at /usr/include/c++/5/thread:115
    #10 0x00007ffff78f0c80 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #11 0x00007ffff7bc16ba in start_thread (arg=0x7fffa3fff700) at pthread_create.c:333
    #12 0x00007ffff705682d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109


    Title: Re: 0.96 preliminary testing
    Post by: johnlu on March 30, 2017, 12:55:01 PM
    Hi goatpig. I know 0.96 will be released when it is ready  :D
    Do yo have an estimated date? I know you wouldn't like to commit to a shipping date or so. I just ask this to know how the roadmap is going through.

    Thanks for your support and efforts for the community! :-)


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 30, 2017, 12:57:12 PM
    Hi goatpig. I know 0.96 will be released when it is ready  :D
    Do yo have an estimated date? I know you wouldn't like to commit to a shipping date or so. I just ask this to know how the roadmap is going through.

    Thanks for your support and efforts for the community! :-)
    The first testing build should be out today. Goatpig just bumped the version numbers and yesterday he told me he was going to release the first testing binaries today.


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 31, 2017, 08:00:58 PM
    Testing builds are out, moved the code to the testing branch. Dev will be unstable again soon. Unsticking this thread.

    Tested the compressed key script on the mainnet. RBF too. So far so good.

    Quote
    Would making it easier in one way, yet making it harder feature to discover and understand in others, achieve less abuse of the RBF feature in practice?

    Usually, honest users don't try as hard to get things to work as malevolent ones. You are better off making the thing easy to use in the end. But UX is a pain to work on, so in due time.


    Title: Re: 0.96 preliminary testing
    Post by: bvoid on March 31, 2017, 08:49:45 PM
    No exe's in the test branch?


    Title: Re: 0.96 preliminary testing
    Post by: goatpig on March 31, 2017, 09:09:19 PM
    No exe's in the test branch?

    I don't understand the question


    Title: Re: 0.96 preliminary testing
    Post by: achow101 on March 31, 2017, 09:31:13 PM
    No exe's in the test branch?
    Binaries are not committed to the source code, they are not source code. You can can get the 0.96 testing binaries from https://github.com/goatpig/BitcoinArmory/releases/tag/v0.95.99.1-testing