Gavin Andresen (OP)
Legendary
Offline
Activity: 1652
Merit: 2300
Chief Scientist
|
|
July 27, 2010, 02:08:17 PM |
|
I've been working on adding -port= / -rpcport= command line / config file options to bitcoin. The idea is to let you run multiple copies of bitcoind on one machine; I need this because I'm planning on having at least two Bitcoin-related web services (the Bitcoin Faucet and a service to be named later), I want them to have completely separate wallets, but I don't want to rent multiple servers to host them. Usage looks like this: $ ./bitcoind getbalance # The TEST network Faucet bitcoind 40616.66159265000 $ ./bitcoind -datadir=/home/bitcoin/.bitcoinTEST2 getbalance 1000.000000000000 $ cat /home/bitcoin/.bitcoinTEST2/bitcoin.conf rpcpassword=..... port=18666 rpcport=18665
Satoshi pointed out that allowing bitcoin/bitcoind to run on a non-standard port could be dangerous, because if misconfigured two bitcoins might both open and write to the same database. To prevent that, the <datadir>/db.log file is used as a lock so only one bitcoin can access the same datadir at a time (uses boost::interprocess::file_lock, which is purported to be cross-platform and well-behaved, even if bitcoin crashes). Issues that came up as I was doing this: I left a call to wxSingleInstanceChecker in the Windows GUI code, so no multiple-gui-bitcoins-listening-on-different-ports on Windows. I don't do Windows... I didn't bother making the error handling graceful if you point two bitcoins at the same datadir (you get a runtime exception "Cannot lock db.log, is bitcoin already running?"). Patches are at http://pastebin.com/2e4hfXSS; I've only tested on Linux so far, anybody willing to try this on Windows?
|
How often do you get the chance to work on a potentially world-changing project?
|
|
|
NewLibertyStandard
|
|
July 27, 2010, 02:42:23 PM |
|
If I was a C++ programmer, I would make multiple instances of Bitcoin automatically talk to each other. But then again, I don't know how hard it is to do cross platform interprocess communication. If a data directory was already being used by one instance, then the new instance would be required to use a different data directory. Sure, you probably can make multiple instances share some or all the files in a data directory, but I think it's a bad idea since it the likelihood for little bugs is high, but the likelihood of the likelihood of those being discovered, researched, reported and fixed is low since the feature wouldn't get much exposure. Imagine the mess it will make if somebody starts half a dozen instances.
|
Treazant: A Fullever Rewarding Bitcoin - Backup Your Wallet TODAY to Double Your Money! - Dual Currency Donation Address: 1Dnvwj3hAGSwFPMnkJZvi3KnaqksRPa74p
|
|
|
mizerydearia
|
|
July 27, 2010, 02:53:46 PM |
|
Satoshi pointed out that allowing bitcoin/bitcoind to run on a non-standard port could be dangerous, because if misconfigured two bitcoins might both open and write to the same database. To prevent that, the <datadir>/db.log file is used as a lock so only one bitcoin can access the same datadir at a time (uses boost::interprocess::file_lock, which is purported to be cross-platform and well-behaved, even if bitcoin crashes). Additionally you could run each client as a different system user.
|
|
|
|
agaumoney
Newbie
Offline
Activity: 53
Merit: 0
|
|
July 27, 2010, 07:00:15 PM |
|
I've been working on adding -port= / -rpcport= command line / config file options to bitcoin Nice. In addition it would be good to have an -ip= option for what address to bind the port. (rpcport binds to 127.0.0.1 but currently port binds to 0.0.0.0 which is all IP addresses on the machine. On my multi-homed system I'd like to bind bitcoin to the external address different from the bitcoin(s) that binds to the internal address(es).)
|
|
|
|
lachesis
|
|
August 10, 2010, 03:24:55 PM Last edit: August 10, 2010, 03:44:45 PM by lachesis |
|
Do you have an updated version of this patch for SVN revision 125? Also, does Bitcoin open the BerkeleyDB as exclusive, precluding the need for a file lock?It does not -- did my own tests.
|
|
|
|
jgarzik
Legendary
Offline
Activity: 1596
Merit: 1099
|
|
August 10, 2010, 05:07:15 PM |
|
Do you have an updated version of this patch for SVN revision 125? Also, does Bitcoin open the BerkeleyDB as exclusive, precluding the need for a file lock?It does not -- did my own tests.
It does open with DB_PRIVATE. http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/envopen.html
|
Jeff Garzik, Bloq CEO, former bitcoin core dev team; opinions are my own. Visit bloq.com / metronome.io Donations / tip jar: 1BrufViLKnSWtuWGkryPsKsxonV2NQ7Tcj
|
|
|
satoshi
Founder
Sr. Member
Offline
Activity: 364
Merit: 7065
|
|
September 12, 2010, 05:40:20 PM |
|
Also, does Bitcoin open the BerkeleyDB as exclusive, precluding the need for a file lock?It does not -- did my own tests.
Is there a way to open BerkeleyDB exclusive? DB_PRIVATE is the worst of both worlds. DB_PRIVATE is not exclusive, but it does make it get screwed up if another process tries to access it at the same time. I've dropped the DB_PRIVATE flag in rev 153.
|
|
|
|
jgarzik
Legendary
Offline
Activity: 1596
Merit: 1099
|
|
September 12, 2010, 08:50:25 PM Merited by EFS (10), ABCbits (1) |
|
Is there a way to open BerkeleyDB exclusive?
What is your intended goal? If it is to prevent two bitcoin clients from actively using the same database, you'll need to employ application-level protection. Crude methods of this include a lockfile or "lock" database entry. If the intention is to prevent all other access, I'd suggest giving up on that goal It is highly useful to permit db4 tools to access db4 databases: db46_archive db46_deadlock db46_load db46_stat db46_checkpoint db46_dump db46_printlog db46_upgrade db46_codegen db46_hotbackup db46_recover db46_verify and just as useful to permit read-only accesses by tools such as gavin's bitcointools.
|
Jeff Garzik, Bloq CEO, former bitcoin core dev team; opinions are my own. Visit bloq.com / metronome.io Donations / tip jar: 1BrufViLKnSWtuWGkryPsKsxonV2NQ7Tcj
|
|
|
MoneyTree
Newbie
Offline
Activity: 14
Merit: 0
|
|
January 19, 2011, 11:41:59 PM |
|
I've been working on adding -port= / -rpcport= command line / config file options to bitcoin. The idea is to let you run multiple copies of bitcoind on one machine; I need this because I'm planning on having at least two Bitcoin-related web services (the Bitcoin Faucet and a service to be named later), I want them to have completely separate wallets, but I don't want to rent multiple servers to host them.
Same here. I have managed to create 2 wallets and two instances of a bitcoin.conf. both have a different rcport specified in the config (8332 and 8333) I can start either one of them and it works fine, the web sites using the wallet can connect. However.... If I start the second bitcoin instance (I'm on windows) the second process grows to about 6 Mb and then just dies.... So each of them wallets runs just fine alone but not together. Is there any way I can debug to see what happened? I tried switching on options in the config (like noirc and the connect only to...) but it does not seem to make a difference. Kind regards, MoneyTree http://doubletrouble.bitcoinbet.com/
|
|
|
|
jgarzik
Legendary
Offline
Activity: 1596
Merit: 1099
|
|
January 19, 2011, 11:42:55 PM |
|
both have a different rcport specified in the config (8332 and 8333)
8333 is the hardcoded P2P port.
|
Jeff Garzik, Bloq CEO, former bitcoin core dev team; opinions are my own. Visit bloq.com / metronome.io Donations / tip jar: 1BrufViLKnSWtuWGkryPsKsxonV2NQ7Tcj
|
|
|
MoneyTree
Newbie
Offline
Activity: 14
Merit: 0
|
|
January 20, 2011, 01:25:14 AM |
|
both have a different rcport specified in the config (8332 and 8333)
8333 is the hardcoded P2P port. So I just need to select a different port then? I am confused here because I configured one instance as: rpcport=8333 rpcconnect=127.0.0.1:8333 and I configured the other instance as: rpcport=8332 rpcconnect=127.0.0.1:8332 This solution seems to work fine but not when I run both at the same time. (i.e. either one wallet OR the other wallet) I am obviously doing something wrong here but can't figured out what. I trolled through most of the forum posts to look for an answer. -=-=-=- DOUBLE TROUBLE =-=-=-=- http://doubletrouble.bitcoinbet.com-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
|
|
Gavin Andresen (OP)
Legendary
Offline
Activity: 1652
Merit: 2300
Chief Scientist
|
|
January 20, 2011, 02:57:45 AM |
|
Run one instance normally. It'll listen for incoming bitcoin network connections on port 8333, rpc connections on port 8332, and connect to other nodes.
Run the other instance with a different -datadir, and a bitcoin.conf like this: nolisten=1 rpcport=7332 (or whatever you like) noirc=1 connect=127.0.0.1:8333
You'll need to be running the latest source code from github for the nolisten option.
The noirc and connect settings aren't strictly necessary; leave them out and the second instance will make 8 outgoing connections to other bitcoin nodes. You'll save a little network bandwidth if the nolisten instance only connects to the other node.
|
How often do you get the chance to work on a potentially world-changing project?
|
|
|
MoneyTree
Newbie
Offline
Activity: 14
Merit: 0
|
|
January 21, 2011, 06:09:38 PM |
|
You'll need to be running the latest source code from github for the nolisten option.
I'm running the windows binary from bitcoin.org and am not comfortable compiling my own wallet. Is there a timeframe when the nolisten option will be included in the windows binary? I tried with the current windows version and it does not work. (Either one of the wallets start, second instance grows to 6mb ram usage and then dies before showing the gui) I think this has to do with the listen port of the second instance conflicting with the first?
|
|
|
|
JackSparrow
Member
Offline
Activity: 116
Merit: 10
|
|
April 01, 2011, 01:24:12 PM |
|
I am behind a firewall, in which I can open some ports, but not 8333.
Will this function be there in some future versions?
|
|
|
|
Matt Corallo
|
|
April 01, 2011, 02:36:58 PM |
|
I am behind a firewall, in which I can open some ports, but not 8333.
Will this function be there in some future versions?
Due to various security/network concerns it will probably never be merged into the mainline Bitcoin version. You can run a patched bitcoin with -port, but you still won't get incoming connections due to the way clients chose peers to connect to. You don't strictly need to be able to accept incoming connections for bitcoin to work, it just helps the network if you do, but even if the portoption branch was merged you would still have to be able to make outgoing connections on port 8333.
|
|
|
|
es.blofeld
Newbie
Offline
Activity: 15
Merit: 0
|
|
May 07, 2011, 07:46:31 PM |
|
Am I correct that there is currently no way to change from port 8333 and that this will possibly never be a feature ?
|
|
|
|
deadlizard
Member
Offline
Activity: 112
Merit: 11
|
|
May 07, 2011, 08:02:48 PM |
|
Am I correct that there is currently no way to change from port 8333 and that this will possibly never be a feature ?
I don't know but arbitrary port selection should be a feature. imagine if a government outlawed bitcoin usage and forced all their isp's to block port 8333.
|
|
|
|
Matt Corallo
|
|
May 07, 2011, 08:40:04 PM |
|
Am I correct that there is currently no way to change from port 8333 and that this will possibly never be a feature ?
Technically, no. You can change the default port now and it would theoretically work, just very, very poorly. But yea, it will probably never be added due to various security/networking concerns about the results of it. I agree, its a cool idea to add in theory, but there are too many concerns about it and in financial software, thats just unacceptable.
|
|
|
|
wumpus
|
|
May 07, 2011, 10:00:42 PM |
|
But yea, it will probably never be added due to various security/networking concerns about the results of it. I agree, its a cool idea to add in theory, but there are too many concerns about it and in financial software, thats just unacceptable.
Can you explain which concerns, and why they cannot be addressed? Why would using another port than 8333 be less secure? I'd say using a fixed port has security/networking problems of its own. The only potential issue I could find in this topic is this one: Satoshi pointed out that allowing bitcoin/bitcoind to run on a non-standard port could be dangerous, because if misconfigured two bitcoins might both open and write to the same database.
This could be addressed by storing the port number in a configuration file in the same directory as the database (or even *in* the database). One database will only open on one port, effectively protecting it. Or use some other scheme to make sure only one bitcoin is running on a database at the same time, such as a lock file. This would be even better, as it doesn't depend on TCP rejecting the second bind to the same port
|
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 File → Backup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
|
|
|
Matt Corallo
|
|
May 07, 2011, 10:08:35 PM |
|
Can you explain which concerns, and why they cannot be addressed? Why would using another port than 8333 be less secure?
I'd say using a fixed port has security/networking problems of its own.
My concerns are more along the lines of potential for DDoSing the network if you have infinite nodes (well 65000 per IP) and sybil attacks. But those are mostly because I haven't read enough of the networking code to realize all the possibilities (nor do I think anyone really has). If you spend enough time reading up on net.cpp and can convince people that those aren't a problem, then I'm sure it would get merged.
|
|
|
|
|