Subject: Re: [Bitcoin-development] About the small number of bitcoin nodes

From: Wladimir <[email-masked]>
Date: Mon, 19 May 2014 10:48:52 +0200

On Sun, May 18, 2014 at 7:43 PM, Raúl Martínez <[email-masked]> wrote:
> About the small number of bitcoin nodes:
> Hi, I read the message that Mike Hearn sent to this mailing list some days
> ago (2014-04-07 11:34:43) related to the number of bitcoin full nodes.
>
> As an owner of two Bitcoin Nodes, one in my home computer and one in a
> dedicated server, I believe I can contribute with some of my thoughts and
> ideas:
>
> - Allow users to view the bandwith used by Bitcoin Core:
> This is available in the Bitcoin Core GUI (btw, when the computer is
> restarted the data gets reseted) but I cant find it in the bitcoind
> commandline

That's also possible through the RPC. See "getnettotals". You can also
get stats per peer in "getpeerinfo".

I also suggest looking at Jameson Lopp's Statoshi work
(http://statoshi.info) if you like graphs and more detailed stats.

> - Educate users about the correct setup of a bitcoin node:
> Add a page in the bitcoin.org website with a tutorial about running Bitcoin
> Core with the ports opened, about runing bitcoind, etc. This guide shoud not
> be for regular users but for advanced ones.

Yes, such a document would be very welcome.

Maybe coordinate with Saïvann Carignan or David Harding, it could be
part of their bitcoin documentation project.

> - bitcoind and Bitcoin Core should create a bitcoin.conf file on the first
> start:
> The first time the software should create a default config file with a
> random RCP password and username (user can change it later) and the config
> file should be commented so the user can know how to change configurations.
> This is very useful in setups without GUI, for example in Ubuntu Server.

I agree with you that a default configuration file is useful,
*however* this does not need to be created by the daemon.

The idea would be to make bitcoind and its data and configuration
system-wide. See https://github.com/bitcoin/bitcoin/issues/4124

A daemon should not even have write access to its own configuration
files. To follow the example of apache, tor, and such the distribution
installs a default configuration file which the user can adapt.

> - bitcoind and Bitcoin Core should be in Linux repos:
> People want to type "yum install bitcoind" or "apt-get install bitcoind" and
> install bitcoin. No one wants to follow a tutorial made by somewho saying
> that you have to add external repos to install bitcoin in your server.
> For example Electrum has been added to Ubuntu software center recently.
> Bitcoin Core an bitcoind should be on CentOS, Debian, Ubuntu and Ubuntu
> Server repos.

This sounds good, but as usual the practice is much uglier.

Bitcoind was part of the Ubuntu default repos for a while, but they
don't upgrade versions as we need to. This resulted in Ubuntu 12.04
stable being stuck with 0.3.xx forever. It would be even worse for
Debian Stable, which has even older versions of packages.

So right now we need you to add the PPA to get the package for Ubuntu.
This is only a small extra step.

This has to be determined per distribution, though. In some distros
this may be perfectly possible. This is just another place where the
project is completely dependent on volunteers.

> - Create a "grafical interface" for bitcoind on Linux servers:
> Create a command, for example "bitcoind show" that shows a nice summary in
> your Terminal (Console) with all the data that a node administrator wants to
> know.
> When I say "grafical interface" I mean like "top" command, an interface made
> out of characters in ASCII.

Sounds like a fun project for someone in Python. Most of the
information is already available through RPC (and if not, request
it!).

Some hacking with ncurses could quickly make a decent tool here. It
could be packaged with bitcoin itself but that's not necessary. For
example Tor has the tool 'arm' which is a separate package.

You may want to talk with Shawn Wilkinson he has some ideas in this
direction. See also the issue
https://github.com/bitcoin/bitcoin/issues/3122 .

> - Split Bitcoin Wallet from Bitcoin Node:
> I believe that this is planned, some people want to help the network and
> others want to keep a wallet, someones want both.
> With bitcoind you can use the option "disablewallet=1" that allows to save
> some memory.

Running the node without wallet is already possible since 0.9.0 in two ways:

- ./configure --disable-wallet when compiling
- run with -disablewallet  (as you say)

This works both for the GUI and the daemon. You can use the resulting
node-only instance ("edge router") with any existing SPV wallet.

There are plans to split off the wallet so that it can run separately,
but I wouldn't be holding my breath.

It feels to me that the general direction things are going in is that
other wallet projects are advancing much faster than Bitcoin Core's
wallet and people will likely switch to other wallet projects for
wallet functionality. Bitcoin Core is moving to an edge router role.

I'm happy to be proven wrong here and would like to see someone work
on bitcoind's wallet, but with the current development resources we
have to focus on a what is most urgent: maintaining and improving the
infrastructure.

> - Inform users if 8333 port is closed:
> That should be more visible, I dont mean an alert or warning but some icon.

Yes, it would be great of connectivity and proxy problems were
signaled in some way.

Detecting whether your port is closed from the outside is an imprecise
art at most, though, as it relies on information from others.

A first step could be showing the number of incoming and outgoing
connections separately in getnetworkinfo. If you have no incoming
connections after a while you can be fairly sure that there is no
outward connectivity.

> - Keep connections if bitcoind is restarted:
> I noticed that if I restart bitcoind (to apply new config) my reset to 0 and
> take some hours to rise up to ~40. I believe that my peers should notice
> that I am down for less than ~15 minutes and try to connect again faster.

What incentive do peers have to reconnect to you specifically? The
nature of a P2P network is that nodes are interchangeable. If a node
fails or kicks them, they'll just try the next node in the list.
Sometimes that will be you, sometimes it will not.

Wladimir