<p>Bitcoin protocol is VERY simple. You haven't to read tons of manuals and study for years.</p>

<p>My point of view is (answrering your question) :</p>

<ul>
<li>Write down on the piece of paper what you want to do.</li>
<li>Take your preferrable programming language (C++/Python/Delphi/Java/whatever)</li>
<li>Use internet sources only as referal information. Do not copy-paste
large pieces</li>
</ul>

<p>Of course, </p>

<ul>
<li>USE TESTNET FOR EXPERIMENTS! NOT THE MAIN NETWORK!</li>
</ul>

CC BY-SA 3.0
2014-10-03T06:46:27.603Z
It's actually a very good idea! Bitcoin mining with pencil and paper (linked in my question) was probably an exercise Sheriff won't soon forget given the time spent! It's very true though that for some reason it's not as easy to retain digital notes vs written notes (GenXer perhaps?)
Wizard Of Ozzie
CC BY-SA 3.0
2014-10-03T03:56:43.787Z
2014-10-03T03:56:43.787Z
amaclin
<p>OK, firstly, Ken Sheriff (the guy who <a href="https://www.reddit.com/r/Bitcoin/comments/2hpoor/mining_bitcoin_with_pencil_and_paper_067_hashes/" rel="nofollow">mined Bitcoin using pencil and paper</a>) has posted some <a href="http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html" rel="nofollow">fantastic Bitcoin articles</a> on <a href="http://www.righto.com/" rel="nofollow">his blog</a>.</p>

<p>In "<a href="http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html" rel="nofollow">Using Bitcoins the Hard Way</a>" he writes (emphasis added):</p>

<blockquote>
  <p>It turns out that actually using the Bitcoin protocol is harder than I
  expected. As you will see, the protocol is a bit of a jumble: it uses
  big-endian numbers, little-endian numbers, fixed-length numbers,
  variable-length numbers, custom encodings, DER encoding, and a variety
  of cryptographic algorithms, seemingly arbitrarily. As a result,
  <strong>there's a lot of annoying manipulation to get data into the right
  format</strong>.</p>
  
  <p>The second complication with using the protocol directly is that being
  cryptographic, it is very unforgiving. <strong>If you get one byte wrong, the
  transaction is rejected with no clue as to where the problem is</strong>.</p>
  
  <p>The final difficulty I encountered is that the process of signing a
  transaction is much more difficult than necessary, with a lot of
  details that need to be correct. In particular, <strong>the version of a
  transaction that gets signed is very different from the version that
  actually gets used</strong>.</p>
</blockquote>

<p>Obviously working through Ken's Python files helps to understand the varying instances of appending bytes, changing endianness and the various other complicated procedures used for sending a transaction in raw hex. Likewise, the following are useful:</p>

<ol>
<li><a href="https://en.bitcoin.it/wiki/Protocol_specification" rel="nofollow">Protocol Specification @ Bitcoin Wiki</a></li>
<li><a href="http://www.royalforkblog.com/2014/08/11/graphical-address-generator/" rel="nofollow">Graphical Address Generator @ RoyalFork</a></li>
<li><a href="https://github.com/gferrin/bitcoin-code" rel="nofollow">Ken Sheriff's Python code</a> used in association with <a href="http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html" rel="nofollow">this post</a></li>
</ol>

<p><strong>My question: how does one go about learning the Bitcoin protocol by practising with the Testnet?</strong> (What resources are recommended to help formulate a raw transaction to send over the Bitcoin (Testnet) network?)</p>

<transactions><protocol><raw-transaction><raw-data><learning>
Understanding Bitcoin protocol (through practice)
Wizard Of Ozzie
# Understanding Bitcoin protocol (through practice)

(Asked by: username_0 on 2014-10-03)

OK, firstly, Ken Sheriff (the guy who [mined Bitcoin using pencil and paper](https://www.reddit.com/r/Bitcoin/comments/2hpoor/mining_bitcoin_with_pencil_and_paper_067_hashes/)) has posted some [fantastic Bitcoin articles](http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html) on [his blog](http://www.righto.com/).

In "[Using Bitcoins the Hard Way](http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html)" he writes (emphasis added):

> It turns out that actually using the Bitcoin protocol is harder than I
> expected. As you will see, the protocol is a bit of a jumble: it uses
> big-endian numbers, little-endian numbers, fixed-length numbers,
> variable-length numbers, custom encodings, DER encoding, and a variety
> of cryptographic algorithms, seemingly arbitrarily. As a result,
> **there's a lot of annoying manipulation to get data into the right
> format**.
>
> The second complication with using the protocol directly is that being
> cryptographic, it is very unforgiving. **If you get one byte wrong, the
> transaction is rejected with no clue as to where the problem is**.
>
> The final difficulty I encountered is that the process of signing a
> transaction is much more difficult than necessary, with a lot of
> details that need to be correct. In particular, **the version of a
> transaction that gets signed is very different from the version that
> actually gets used**.

Obviously working through Ken's Python files helps to understand the varying instances of appending bytes, changing endianness and the various other complicated procedures used for sending a transaction in raw hex. Likewise, the following are useful:

1. [Protocol Specification @ Bitcoin Wiki](https://en.bitcoin.it/wiki/Protocol_specification)
2. [Graphical Address Generator @ RoyalFork](http://www.royalforkblog.com/2014/08/11/graphical-address-generator/)
3. [Ken Sheriff's Python code](https://github.com/gferrin/bitcoin-code) used in association with [this post](http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html)

**My question: how does one go about learning the Bitcoin protocol by practising with the Testnet?** (What resources are recommended to help formulate a raw transaction to send over the Bitcoin (Testnet) network?)

**Tags:** transactions, protocol, raw-transaction, raw-data, learning


---

## 1 answers

### Answer by username_1 on 2014-10-03. Score: 1 | Accepted answer

Bitcoin protocol is VERY simple. You haven't to read tons of manuals and study for years.

My point of view is (answrering your question) :

* Write down on the piece of paper what you want to do.
* Take your preferrable programming language (C++/Python/Delphi/Java/whatever)
* Use internet sources only as referal information. Do not copy-paste
  large pieces

Of course,

* USE TESTNET FOR EXPERIMENTS! NOT THE MAIN NETWORK!

> **Comments:**
> **username_0**: It's actually a very good idea! Bitcoin mining with pencil and paper (linked in my question) was probably an exercise Sheriff won't soon forget given the time spent! It's very true though that for some reason it's not as easy to retain digital notes vs written notes (GenXer perhaps?)  

---

