This article talks about what goes into a bitcoin transaction.
I might not be exactly right, but this is based off of tinkering with the bitcoinjs library. Feel free to correct me if I’m wrong.
I’m just logging out stuff that I think can explain something more about how the system works. Not much of a difference from the actual bitcoinjs-lib, but for all production cases use the bitcoinjs-lib repo and that too only stable releases since master branch is used for development.
A list of unconfirmed transactions available in Blockchain.info’s mempool can be viewed here. There are newer and more transactions added each second.
For all purposes of this article,unless otherwise mentioned, we shall examine this transaction.
The agenda for this article is to walk you through the process of verifying the presence of the transaction in the block, contents of the transaction and then creating a similar transaction.
- Install Nodejs, Git Bash and any text editor (Atom)
- Clone this repository
- Change directory and install packages
$ git clone github.com/prahaladbelavadi/bitcoin-js-testing
$ cd ./bitcoin-js-testing
$ npm install
- Navigate into the blocks directory here and run the following command
$ cd ./myTest/blocks
$ node blocks.js
It logs out the transaction in its hex format, the input script and the block’s height. Unconfirmed transactions do not have a block height since they haven’t been included in a block (yet).
In the hex format of block 498303, we can confirm that the transaction exists.
We shall dissect this transaction.
Transaction Hex: 010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff50037f9a07174d696e656420627920416e74506f6f6c685b205a2b1f7bfabe6d6d36afe1910eca9405b66f97750940a656e38e2c0312958190ff8e98fd16761d220400000000000000aa340000d49f0000ffffffff02b07fc366000000001976a9148349212dc27ce3ab4c5b29b85c4dec643d764b1788ac0000000000000000266a24aa21a9ed72d9432948505e3d3062f1307a3f027a5dea846ff85e47159680919c12bf1e400120000000000000000000000000000000000000000000000000000000000000000000000000
We shall use Blockcypher to decode the transaction.
Take the transaction hex and paste into the decoder.
The transaction decoder shows that the transaction hex that was relayed to the network contained the following:
- Transaction input Script in Hex
- Output address
- Output script and type
PS: This does not contain an input address since it is a coinbase transaction.
We can see that it has a previous input address linked to the transaction hash of the previous recorded transaction on the blockchain.
Each output needs to have a corresponding input and its signature to prove that it can indeed spend the bitcoin, unless its a coinbase transaction.
Each explorer displays and keeps track of metrics in its own different way based on their local node or whatever they choose to track.
In upcoming articles, I intend to show how to compose your own transactions and relay it to the network.
Since I’ll constantly be trying out new stuff on my fork of bitcoinjs-testing repository and that could conflict with your experimenting, I packaged a release for the sole purpose of this article.
It is available here. It shall contain code at the time of publishing this article.
Feel Free to fork, play around and try out new stuff with it.