# Windows Bitcoin Standup Report
This comprises the **informal report** on the proposed pathway to adapt [Bitcoin Standup Scripts](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts) to run easily "out of the box" for Windows users.
## Scope of Work
There are roughly two targeted groups of users here:
1. People with beginner to intermediate technical knowledge, who want to run a Bitcoin node on Windows 10
2. More experienced (intermediate to expert) technical users, who want to run a Bitcoin node on older Windows distros
From the informal but exhaustive "lit review" I conducted, Group 2 already has a lot of avenues available for exploration.
Outside of [Bitcoin.org's own installation path](https://bitcoin.org/en/full-node#windows-instructions), most of the forum discussions I found on Bitcoin for Windows environments were focused on OS edge cases (pre-Windows 10) and proposing [solutions using virtualization](https://medium.com/coinmonks/how-to-run-a-bitcoin-full-node-over-tor-on-an-ubuntu-linux-virtual-machine-bdd7e9415a70). In fact, many of the search results for non-VM solutions lead to dead links- it's an informational desert out there for someone who wants to run a Bitcoin node directly on Windows!
Thus, **my goal in the coming months is to focus on user group 1**- newcomers with Windows 10 devices, who are trying to spin up a Bitcoin node for the first time *without* using [Windows Subsystem for Linux](https://docs.microsoft.com/en-gb/windows/wsl/about?redirectedfrom=MSDN) or another virtualization pathway.
In other words, I will try to create a straightforward Windows Powershell Script which accomplishes roughly the same install pathway as the Linux and MacOS Bitcoin Standup Scripts.
## Proposed Outcome
A git repository for Blockchain Commons called "Windows Bitcoin Standup," which is comprised of one or multiple Windows Powershell scripts presenting the end user with a simple GUI installer. This script will install, in order:
1. Execute [Windows Update Powershell Module](https://4sysops.com/archives/scan-download-and-install-windows-updates-with-powershell/)
2. Download and install [Gpg4win](https://www.gpg4win.org/) (Windows' GNuPG installer)
3. *Initialize* [drmngr.exe](https://www.gnupg.org/documentation/manuals/dirmngr/)? (From what I can tell, this is already installed in all Windows 10 distros, will have to test that it works)
4. Install a random number generator for Windows (See **Problems** #1 below)
5. [Set appropriate firewall configuration](https://4sysops.com/archives/managing-the-windows-firewall-with-powershell/)
1. Might need to interface with [WinHTTP](https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/configure-proxy-internet) at this stage to get past user-side "Windows Defender" utility
2. Similarly, look into Powershell's ["Execution Policies"](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-6) for this stage
6. Create user and setup SSH key (See **Problems** #2 below)
7. Install and set up Tor through Powershell [Guiding resource 1](https://avestura.dev/post/run-tor-with-powershell.html); [Guiding resource 2](http://blog.extremehacking.org/blog/2015/09/12/fun-with-powershell-using-tor-with-powershell/)
8. Configure Tor for the Bitcoin node use case (See **Problems** #3 below)
9. Download, install and [build Bitcoin Core with Visual Studio](https://github.com/bitcoin/bitcoin/blob/master/build_msvc/README.md)
1. External dependencies are listed in the above link- see how many of these we can call/bundle within our own script ahead of time?
2. Test out that the Gpg4win install will handle SHA signature verification properly at this stage
All the steps from here onward are still a bit murky for me, and will require getting to this stage in the script development to "test out" how it all works (See **Problems** #4 below)
## Useful Links to Guide Scripting
#### Configuring Tor on Windows
* [Old 2018 Bitcoin Wiki Tor configuration page](https://en.bitcoin.it/wiki/Setting_up_a_Tor_hidden_service)
* [Further Tor for Bitcoin guidance from Bitcoin repo, last updated 2019](https://github.com/bitcoin/bitcoin/blob/master/doc/tor.md)
* [2018 Stack Exchange thread on Tor for Bitcoin Core](https://bitcoin.stackexchange.com/questions/70069/how-can-i-setup-bitcoin-to-be-anonymous-with-tor)
* [Reddit thread from last year with good guidance on setting ports etc](https://www.reddit.com/r/Bitcoin/comments/cndynu/help_setting_up_bitcoin_core_node_with_tor_hidden/)
* [Recent 2020 guidelines on Tor for Windows 10](https://bitstobytes.org/index.php/2020/03/20/proxying-windows-10-through-a-tor-service/)
##### Installing Bitcoin Core on Windows
* [Basic installer guide from Bitcoin repo, updated this year](https://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.md)
* [CoinCorner's recent Bitcoin development guide provides insights around Windows-specific tweaks sometimes needed](https://medium.com/coincorner/bitcoin-core-development-on-windows-a-step-by-step-guide-2998c13e74a5)
## Remaining Problems to Solve
1. For installer script step #4 - need to find a way to run [haveged](http://www.issihosts.com/haveged/) on Windows, or a comparably trustworthy Windows ecosystem random number generator.
1. This is a much stickier problem than I would have expected- all RNGs I can find are "apps" provided through Microsoft Store's portal and not open source/auditable code.
2. [This was recommended in a reddit thread on the topic](http://www.supercoolbookmark.com/random/Default.aspx) but it doesn't look like they've kept up the code (pre-Windows 10 distros only)
2. For the entire script section of creating a user and setting up their SSH- I'm very weak on mentalization in this area in general, even as a user, and can't find where I'd even start searching for resources.
1. I think this would be a great first topic to broach with my CoinCorner dev contacts- ask them to demonstrate the basic logic of creating a user and setting SSH in PowerShell, compared to in Linux terminal where I've stepped through the process as a user multiple times.
3. I'm embarrassed to admit I actually have very weak Tor experience, even on the user-side.
1. When I reach this stage I will need to establish a 1-on-1 session with someone very experienced in Tor, and ideally with the Bitcoin Standup Script specifically, to walk me through what is being accomplished in the configuration section of the script and why, so I can model that and adapt it within Powershell.
4. As described above, the whole end of this script plan is a bit murky for me, based on gaps in knowledge on both sides of the technical fence. I will want to check in strongly with senior developers at the beginning of September, and essentially finish sketching out the picture here based on what I've learned from executing the first 9 scripting steps.
I will need stronger support from Blockchain Commons senior devs at this later stage, as it becomes much less a gap in Windows Powershell knowledge, and more a gap in the higher-level reasoning for Bitcoin Core configuration and setup choices.
*I can also call upon my pal Justin Moon and his "Mooniversity" crew with questions on bitcoind to lighten the load*