Uses of the bitcoin blockchain

The Bitcoin blockchain updates when transactions fill it. You need an up-to-date blockchain.

You might consider including MaidSafe (Massive Array of Internet Discs / Secure Access For Everyone) in your in depth study. What bitcoin is doing for currency, MaidSafe may do for the Internet. It is currently in its 2nd Test Net with a 3rd Test Net coming soon and a Beta release soon after. This project began 8 years ago by David Irvine. There are now more than 700 devs signed on to create content and apps for this new internet.

@MoonShadow I know this is a subject you have a lot of expertise in. Can you suggest a blockchain/set of blockchains that we start with?

@optictopic How would MaidSafe directly relate to Outernet?

MaidSafe is an interesting project I’ve been following for a couple of years now, but it doesn’t offer anything to the Outernet Project.

@Syed. I don’t really understand your question. If you are asking which crytocurrency to broadcast, that’s easy. Bitcoin is the only realistic choice. Many other cryptocurrencies have promise, but none offer any advantage for the common merchant or consumer in Africa, and testing the idea is as easy using Bitcoin as anything.

If you are asking how to broadcast the blockchain, I’d say that you’d either want to broadcast only the headers & merkle trees of each block in the blockchain, in order, and without transaction data. Or broadcast the entire blockchain encapselated inside a file splitter set that also provides checksums. An old fashioned zip file, split up into many files that can be independently broadcast; each taking no longer than 3 or 4 minutes to send once, would work well enough. This allows the listening stations to reconstruct the broadcast over several repeats, or request missing pieces from other users more local to them. Kind of a throw back, manual version of a bittorrent file.

For that matter, broadcasting it as a complete bittorrent set might work, with a modified torrent client.

@MoonShadow I agree that Bitcoin is really the only cryptocurrency to broadcast now, though Stellar.org seems to be doing something interesting.

So the question was not only how to broadcast the blockchain, but the exact location of a file to mirror or feed to broadcast. Just for the purposes of testing, let’s say we can allocate 10kbps to a Bitcoin transmission. Where do we find the most appropriate file?

inside the data directory of a full bitcoin client.

you could also use the bitcoin blockchain bootstrap.dat torrent file, if you trusted it.

But I don’t trust it.

The bootstrap.dat torrent can be found here.

Can you suggest something that you do trust?

Ideally what you’d want to do is run a full Bitcoin node, with a larger-than-average number of network connections to make sure that you’re well positioned in the network, and then re-broadcast the blockchain data retrieved by the Bitcoin client (Download - Bitcoin). This requires a halfway-decent server with a bare minimum of 1GB ram and 100GB disk space, and a couple of weeks of downloading the blockchain to get started.

Once that’s up and running, you have several options when it comes to choosing what exactly to broadcast. The blockchain up until now is approximately 30 GB. It’s growing at a rate of about 5 kb/s. You could broadcast the entire blockchain, which would help with bootstrapping new nodes. You could broadcast just the most recent transactions (delayed by a block or two perhaps) in order to enable dumb transaction verification. However, both of these options are becoming a bit data intensive, and will only become moreso, so…

As mentioned already, the full blockchain is not really even completely necessary. Instead, you can extract the block header (O'Reilly Media - Technology and Business Training), calculate a merkle tree (O'Reilly Media - Technology and Business Training) and a block hash along with the block height for each block, and just broadcast those. That’s enough information to support a lightweight client verifying transactions, and to serve as a secondary source of verification for a full node. Since the blockchain is stored as a LevelDB database, you would use a utility like libbitcoin to extract the info needed. Aside from info from the latest block, the same info from past blocks should be re-broadcast periodically as well. All of that should be well within, say, 5 kb/s for quite some time.

Besides just the transactions included in blocks, you could also broadcast transaction ids for all of the transactions received but not yet in the blockchain. That’s approximately another 0.5 kb/s. This would be useful for zero-confirmation transactions, for which speed is more important than verification. Beyond that, exchange rates against major currencies is useful. That can be retrieved directly from each of the several major exchanges and payment processors (API: Trade with custom written software - Bitstamp) (https://btc-e.com/api/3/docs#ticker) (https://localbitcoins.com/api-docs/#toc7) (BitPay Exchange Rate). Broadcasting the client software itself may be beneficial, a lightweight client like Electrum or Multibit perhaps.

I know that probably sounds a little complicated. But hopefully it’s at least a bit helpful. Please don’t hesitate to ask anyone in the Bitcoin community for assistance. We’re excited that Outernet is progressing along nicely and glad you’re considering adding Bitcoin to your service.

1 Like