Running a Full Node

I first started investigating Bitcoin in 2013, when the era of “use your graphics card to generate free coins” had already come to an end, and ASICs had already come to dominate the mining landscape.

I was always more interested in the societal and economic implications of the network than in the prospect of generating and selling coins for profit, and I have no particular competitive edge when it comes to chip fabrication, so I’ve always opted out of the mining arms-race. As such, I never saw any compelling reason to run my own Full Node (at least not continuously). Plenty of reddit posts made mighty efforts to change my mind on this front, but I am not one to overly worry about the health of the network, and besides, if Bitcoin really needs me to altruistically run a node in order to work, it’s not worth helping.

So I’ve abstained from running a Full Node. Until recently.

What changed my mind? Basically, technical curiosity. My primary motivation is not security benefits (nor any other peace of mind), and it is not so that I can “cast a vote” in the Classic/Core debate. Instead, I’m running a node so that I can tinker.

I want to tweak my relay policies. I want to experiment with validating Segregated Witness transactions (even if only on the testnet for now). I want to have the option of running 0.12 but disabling opt-in RBF, just because I can. And now I can!

So, I spun up a server (and I won’t divulge where). I installed Bitcoin (Core, for now). I downloaded and verified the blockchain, and now I’m doing my part to give back to the network.

And to be honest, it does feel good. Like I’m pulling my own weight in this thing. Bitcoin is better for having me, because now I both hodl and relay/verify transactions for it. I recommend trying it out (even if only for a month or two). I consider it well worth it.

So, if you were like me, and you’ve opted not to run a Full Node, but you’ve considered the prospect once or twice, allow me this one suggestion: do it.

 
1 Kudos
Don't
move!

The Ultimate Irrelevance of the Blocksize Drama

If Bitcoin’s max-blocksize doesn’t increase soon, it will die. It will never handle enough transactions to matter. It is doomed. It is a joke. The experiment failed.

People really do believe this.

Needless to say, I disagree with the above sentiment. I disagree for the same reason that I was initially attracted to Bitcoin as an investment: the most compelling aspect of the system is the Incentive Construct, motivating all system participants to fight for the success of the network as a whole. If Bitcoiners, in general, want what’s best for Bitcoin, and at least one person can basically figure out a solid solution and get enough support for their proposal, then problems like “What is the optimal maximum blocksize?” will always be solved in reasonable ways before they represent a genuine systemic threat.

We already have some solid suggestions proposed. Gavin Andresen and Mike Hearn have collaborated to create, test, and promote BitcoinXT, which sports a dramatic long-term scheduled blocksize increase as described by BIP101. Peter Wuille has suggested a more conservative solution of 4.4% max-blocksize increase every 97 days. Jeff Garzik’s BIP100 (which already touts over 60% miner support at this time) would implement a floating blocksize in its place.

So why haven’t any of these proposals been implemented already?

Because no real problems have materialized yet, so there’s no rush. We’re taking our time to figure out which solution is the most elegant.

 

I’ll admit that there are social disturbances, though. There’s plenty of drama on the mailing lists, forums, and most of all reddit, with countless little feuds between Bitcoiners and Buttcoiners mocking one another and getting worked up over whatever flavor drama is making the front page that week. Sure, there’s tons of drama.

But Bitcoin, the actual network? The actual system, chugging along at ~$235  a pop, handling just about 144 blocks and tens/hundreds of millions of dollars of commerce and activity per day, comprising the single largest distributed superprocessor that has ever existed? That’s doing just fine. There’s no problem there; the tech works.

And the world is definitely noticing.

“Oh, but they’re talking about the blockchain technology, though! Can’t you even read?”

Yes, they are talking about blockchain technology. That is the politically correct way to refer to Bitcoin these days, in case you hadn’t noticed.

“They’ll just build their own blockchain! It’ll be so much better than yours!”

We have a term for this. It is called “vaporware”. It means “a computer program that doesn’t actually exist yet (and may never be created), but is being talked about as if it does exist”. It’s derogatory.

Furthermore, in this particular instance, the vaporware being championed actually shows a fundamental misunderstanding of the underlying technology itself. It, very simply, does not make sense. A blockchain isn’t a magical thing. It’s a technical construct designed to achieve reasonably-unthreatenable consensus on a distributed network of mutually nontrusting somewhat-rational agents. This construct is not without costs and drawbacks; to achieve this consensus, many sacrifices must be made. However, it also has benefits, because distributed consensus is a pretty cool thing, and there is a positive feedback loop (tightly related to the network effect) that comes as close to a “guarantee of growth” as anything you’ll ever find. And in this particular case, that growth is poised to revolutionize many disparate industries along the way.

In short, the max blocksize is the problem-that-isn’t-actually-a-real-problem. It is being discussed and debated far in advance of any actual issues regarding network integrity. That’s basically best-case-scenario, and exactly what you should hope for.

 
4 Kudos
Don't
move!

Program Screenshots

I’ve recently uploaded a few projects of mine to Github, but of these, only turfsurfer has an online demo which is easy to access and use, without installing anything on your local computer.

In case anyone has any interest in glancing over what the GUIs look like for the other projects (and would prefer not to go through the trouble of installation and setup to do so), I’ve decided to host a few screenshots of the programs in action here, for your viewing pleasure.

 

giuseppe


This program is a simple (and hopefully reasonably intuitive) UI for crafting manual Bitcoin transactions. It’s built in Node.js and uses d3.js for the bubble visualizations. The text-box at the bottom of the page will update automatically as the transaction is crafted, to show exactly what happens behind-the-scenes in Bitcoin transaction creation.

 

giuseppe alternate example
giuseppe example

The “origin address” (which does the sending) can be specified using the button at the top-right of the page. Once it has been added, you can hover the mouse over the corresponding bubble to see how many coins reside at that address. To send these coins elsewhere, you can simply click the bubble.

giuseppe hovering over origin address
giuseppe hovering over origin address

After you’ve clicked the origin address bubble (to direct where its satoshis should be sent to), the following dialog appears:

giuseppe send dialog
giuseppe send dialog

Once this dialog has been filled out (and yes, it makes sure that the recipient address entered is a valid address before moving forward), a new bubble will pop up on the screen, sized to match the amount being sent to that address, and the text box at the bottom generates a corresponding unsigned transaction.

giuseppe unsigned transaction example
giuseppe unsigned transaction example

By clicking the “Sign” button, a signed version of the transaction is created:

giuseppe signature generation
giuseppe signature generation

At any time, you can expand the transaction details to get more information about what it achieves, by clicking the “Gear” button:

giuseppe exapnded transaction details
giuseppe exapnded transaction details

 

Since one of the primary reasons giuseppe was created was to help prevent manual transactions from sending coins to places you don’t really want them to go, there is also a warning included when the change address specified on the page is not in your local wallet:

giuseppe change address warning
giuseppe change address warning

Once the transaction is satisfactory, you can click the “Send” button (with the arrow) to propagate that transaction through the network (sending the coins where you set for them to go).

 

 

superminion


The second project (superminion) has one primary screenshot, which showcases the main GUI window:

superminion GUI
superminion GUI

This is an all-in-one toolkit which is designed to allow fine-tuned control of trade-indicator parameters while the parameters are cycled through in a background process in an iterative machine-learning process to optimize for profits. As the screenshot shows, the exchange being backtested on can be toggled between Bitstamp and Bitfinex, and the tested time interval can be updated on a whim. There are also options to control where the result output is piped to, whether the strategy is supposed to sell normally or short, and a matplotlib launcher with toggleable parameters so that specific components of the strategy can be isolated and inspected individually. Finally, there is a button to email the current test results to an email address of your choice.

The black rectangle next to the “Thorough Test” button is actually a .gif file of a “breathing circle” which indicates whether or not the minion process is currently paused, or running in the background to optimize variable values for maximum profits. Embedding a .gif into a Tkinter window like this was actually reasonably challenging; the file had to be split into individual frames, and then these frames needed to be looped through and output into the Tkinter window without interfering with other processes that are running. It may sound like it was more trouble than it’s worth, but I really wanted some form of visual feedback to help show me, at a glance, whether numbers were being crunched in the background or not. So even if the problem was a finicky one, ultimately it was solved.

 
6 Kudos
Don't
move!

On Creation

I strongly believe that creation is one of the healthiest and most rewarding habits one can establish.

There are plenty of ways to approach this problem.

Regardless of the specifics thereof, I believe that wonderful things happen to a brain during the process of creation. Firstly, there is the qualia to consider. As any musician will tell you: there’s nothing quite like the experience of creating music. It is the ultimate antidote for stress and progenitor of satisfaction. I’ve found that profound contentment inevitably follows successful genesis. So purely on hedonistic grounds, creation is an act worth pursuing.

But it is another cognitive effect which represents the most compelling case in favor of adopting the title of “creator”, in my opinion: the process of creation is incomparably educational. In some cases, it is the only true way to learn. You can read a library’s worth of programming books, but until you actually write your own “Hello, world” script, you don’t really know how to code. You can’t learn to play the piano by reading and analyzing sheets of music. And you’ll never know how to tell a story unless you actually take the time to author one.

Even if you find yourself disappointed in the final product, you’ll have figured out approaches and techniques to avoid in the future. Great chefs have all tasted bad food, and grown for it. At minimum, this is the sort of benefit one can expect after dedicating time towards the creative process.

Finally, beyond the psychological and cognitive payoffs, there is the product itself to be considered. Once you have introduced something into reality, it can be used and enjoyed by those with access to it. Since it warranted creation in the first place, chances are good that the creator, at minimum, will appreciate this aspect. In other words, once your book is written, you can settle into your favorite reading chair and start reading.

What do you create?

 
5 Kudos
Don't
move!