Bitcoin Forum
December 08, 2016, 12:35:32 AM *
News: Latest stable version of Bitcoin Core: 0.13.1  [Torrent].
 
   Home   Help Search Donate Login Register  
Pages: [1] 2 »  All
  Print  
Author Topic: I don't like Gavin's and Jeff's Bitcoin client - can I write my own?  (Read 12098 times)
BalkanBoy
Jr. Member
*
Offline Offline

Activity: 50


View Profile
June 03, 2011, 01:33:35 AM
 #1

So I woke up one morning and decided I don't like Gavin's and Jeff's bitcoin clients for any of the platforms.

Can I write my own, and is there anything technically stopping me from doing this if I were to follow the rules of trading/transactions on the Bitcoin network?

Maybe I want to write a Haskell or a Clojure client... or Ruby. Is there anything stopping me from writing one and getting other people to use it if they see value in it?

Where is the protocol specified of how to write a Bitcoin client/daemon?

Thanks!
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
Garrett Burgwardt
Sr. Member
****
Offline Offline

Activity: 350



View Profile
June 03, 2011, 01:35:25 AM
 #2

Nothing to stop you, you'll want to talk to Mike Hearn, he's a google dev working on bitcoinj, he can help you more than I can.

Design something awesome! I'd love to have a solid alternate client!
lizthegrey
Jr. Member
*
Offline Offline

Activity: 56


View Profile
June 03, 2011, 01:36:01 AM
 #3

A friend and I are about to start a Python partial implementation.
riX
Sr. Member
****
Offline Offline

Activity: 327



View Profile
June 03, 2011, 01:37:07 AM
 #4

Of course, but you need to be very careful to get everything right and secure.
I'm sure it's not the client you don't like, but the GUI.
Maybe you can change what you don't like and publish some patches for the official client.

goatpig
Legendary
*
Offline Offline

Activity: 1330

Armory Developer


View Profile
June 03, 2011, 01:40:25 AM
 #5

Of course, but you need to be very careful to get everything right and secure.
I'm sure it's not the client you don't like, but the GUI.
Maybe you can change what you don't like and publish some patches for the official client.

This. If it is GUI related, you can just isolate the core classes and put your GUI code in a seperate file, will make it even easiers for others to adopt it. If you want to change part of the core code, that's another story altogether.

btcarmory.com
riX
Sr. Member
****
Offline Offline

Activity: 327



View Profile
June 03, 2011, 01:48:50 AM
 #6

This. If it is GUI related, you can just isolate the core classes and put your GUI code in a seperate file..

Or just make a GUI as a front-end for bitcoind, no need to edit the original code at all, just send API commands to the daemon.

goatpig
Legendary
*
Offline Offline

Activity: 1330

Armory Developer


View Profile
June 03, 2011, 02:05:29 AM
 #7

This. If it is GUI related, you can just isolate the core classes and put your GUI code in a seperate file..

Or just make a GUI as a front-end for bitcoind, no need to edit the original code at all, just send API commands to the daemon.

I like the idea but you'd depend on bitcoind for portability.

btcarmory.com
PabloW
Full Member
***
Offline Offline

Activity: 229


View Profile
June 03, 2011, 02:43:12 AM
 #8

You should include a backup button or something. More noob friendly maybe
wumpus
Hero Member
*****
Offline Offline

Activity: 798

No Maps for These Territories


View Profile
June 03, 2011, 12:26:21 PM
 #9

This. If it is GUI related, you can just isolate the core classes and put your GUI code in a seperate file, will make it even easiers for others to adopt it. If you want to change part of the core code, that's another story altogether.
Yes, this is how I've done it in bitcoin-qt: https://github.com/laanwj/bitcoin-qt/

I link to the core (with some minor compat changes) as a kind of library.

Currently it mimics the wx bitcoin client. If you want to improve the GUI, pull requests are welcome Smiley I'll only start integrating them though when the core functionality of the GUI is finished.

For core changes I recommend improving the core instead of making your own client implementation. A new implementation is a lot of (wasted) effort and it will be difficult to exactly compatible with the current code, any error could result in forks of the chain...

Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through FileBackup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
twmz
Hero Member
*****
Offline Offline

Activity: 737



View Profile
June 03, 2011, 12:39:19 PM
 #10

This. If it is GUI related, you can just isolate the core classes and put your GUI code in a seperate file..

Or just make a GUI as a front-end for bitcoind, no need to edit the original code at all, just send API commands to the daemon.

That is what I am doing for my web-based frontend.  The web server (not the web browser) makes JSON-RPC calls to the bitcoind daemon.


Was I helpful?  1TwmzX1wBxNF2qtAJRhdKmi2WyLZ5VHRs
WoT, GPG

Bitrated user: ewal.
jon_smark
Member
**
Offline Offline

Activity: 90


View Profile
June 03, 2011, 01:41:47 PM
 #11

So I woke up one morning and decided I don't like Gavin's and Jeff's bitcoin clients for any of the platforms.

Not only you can in theory, but also in practice I suspect both Gavin and Jeff would actually welcome multiple independent implementations of the protocol, since that's a good way for any potential vulnerabilities to be found and fixed.

In other words, go forward!
Gavin Andresen
Legendary
*
Offline Offline

Activity: 1652


Chief Scientist


View Profile WWW
June 03, 2011, 03:06:03 PM
 #12

Not only you can in theory, but also in practice I suspect both Gavin and Jeff would actually welcome multiple independent implementations of the protocol, since that's a good way for any potential vulnerabilities to be found and fixed.

In other words, go forward!
Yes, diversity is good. If you do decide to go for it, do lots of testing on either the test network or with a testnet-in-a-box setup before even THINKING about handling real bitcoins. If you screw up and lose other people's money it will take a long time to earn back their trust.

Oh, and speaking of trust... unless you have a recognized Brand Name, I don't think you'll have any success with a closed-source client.

How often do you get the chance to work on a potentially world-changing project?
lizthegrey
Jr. Member
*
Offline Offline

Activity: 56


View Profile
June 03, 2011, 03:24:14 PM
 #13

Yes, diversity is good. If you do decide to go for it, do lots of testing on either the test network or with a testnet-in-a-box setup before even THINKING about handling real bitcoins. If you screw up and lose other people's money it will take a long time to earn back their trust.
What are peoples' thoughts on creating a compliance test suite for Bitcoin separate from the existing C++ client, and ensuring that both the existing C++ client and new clients (e.g. bitcoinj, bitcoinp) pass the suite?
xf2_org
Member
**
Offline Offline

Activity: 70


View Profile
June 03, 2011, 03:59:03 PM
 #14

Not only you can in theory, but also in practice I suspect both Gavin and Jeff would actually welcome multiple independent implementations of the protocol, since that's a good way for any potential vulnerabilities to be found and fixed.

And the other developers Smiley  I dislike the thread title, because I am but one of a herd of core devs under our lead dev, Gavin.  It's either "Satoshi's client" or "the People's FOSS client" or "Gavin's client" or "Gavin/tcatm/sipa/BlueMat/jgarzik's client"........

genjix
Legendary
*
Offline Offline

Activity: 1232


View Profile
June 03, 2011, 04:06:53 PM
 #15

Sure you can:

Check out the bindings we made for several languages:
https://gitorious.org/freecoin/freecoin/trees/master/bindings

Also you can as others mentioned use the RPC api to write your own client as we've done here:
https://gitorious.org/freecoin/spesmilo

Or you can write your own implementation of the Bitcoin protocol as we've done too:
https://github.com/phantomcircuit/bitcoin-alt
lizthegrey
Jr. Member
*
Offline Offline

Activity: 56


View Profile
June 03, 2011, 05:21:15 PM
 #16

Or you can write your own implementation of the Bitcoin protocol as we've done too:
https://github.com/phantomcircuit/bitcoin-alt
What is the license on bitcoin-alt?
Luke-Jr
Legendary
*
Offline Offline

Activity: 2086



View Profile
June 03, 2011, 08:06:47 PM
 #17

Or just make a GUI as a front-end for bitcoind, no need to edit the original code at all, just send API commands to the daemon.
This isn't practical. Spesmilo does it, but it's retardedly inefficient due to the poor design of JSON-RPC.
I dislike the thread title, because I am but one of a herd of core devs under our lead dev, Gavin.  It's either "Satoshi's client" or "the People's FOSS client" or "Gavin's client" or "Gavin/tcatm/sipa/BlueMat/jgarzik's client"........
bitcoind and wxBitcoin are sensible names. Wink

As a core developer of Spesmilo, I'd be interested to see more node/wallet implementations Wink

gigitrix
Hero Member
*****
Offline Offline

Activity: 490


Bitcoins finest!!!


View Profile
June 03, 2011, 10:37:31 PM
 #18

Just want to put my 0.02 BTC in and say go for it! I really want to see a bit more decentralisation when it comes to this stuff, and I'd love it if there were multiple clients. The net gain from having such diversity is far greater than the net loss of dividing our valuable developers tbh Smiley
Mike Hearn
Legendary
*
Offline Offline

Activity: 1526


View Profile
June 06, 2011, 07:50:18 AM
 #19

A C++ regression suite would be really, really useful to have. Though it's quite hard to do effectively because the protocol is so minimal - it's not possible, for example, to find out if a node accepted your block or tx except by doing some rather indirect tricks or using JSON-RPC which makes it only work for the C++ impl.

I think the right way to start is with C++ unit tests and if there are clear cut-lines for a regression suite, implementing that later. Making Bitcoin truly testable means some pretty serious refactorings, eg, introducing a BitCoinJ style NetworkParameters abstraction so you can test on super-easy chains.
matonis
Sr. Member
****
Offline Offline

Activity: 301



View Profile WWW
June 08, 2011, 11:25:55 AM
 #20

Bram Cohen's client for BitTorrent is not the leading client for downloading content from the Internet today.

Founding Director, Bitcoin Foundation
I also cover the bitcoin economy for Forbes, American Banker, PaymentsSource, and CoinDesk.
Pages: [1] 2 »  All
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!